1GCC(1)                                GNU                               GCC(1)
2
3
4

NAME

6       gcc - GNU project C and C++ compiler
7

SYNOPSIS

9       gcc [-c|-S|-E] [-std=standard]
10           [-g] [-pg] [-Olevel]
11           [-Wwarn...] [-pedantic]
12           [-Idir...] [-Ldir...]
13           [-Dmacro[=defn]...] [-Umacro]
14           [-foption...] [-mmachine-option...]
15           [-o outfile] [@file] infile...
16
17       Only the most useful options are listed here; see below for the
18       remainder.  g++ accepts mostly the same options as gcc.
19

DESCRIPTION

21       When you invoke GCC, it normally does preprocessing, compilation,
22       assembly and linking.  The "overall options" allow you to stop this
23       process at an intermediate stage.  For example, the -c option says not
24       to run the linker.  Then the output consists of object files output by
25       the assembler.
26
27       Other options are passed on to one stage of processing.  Some options
28       control the preprocessor and others the compiler itself.  Yet other
29       options control the assembler and linker; most of these are not
30       documented here, since you rarely need to use any of them.
31
32       Most of the command line options that you can use with GCC are useful
33       for C programs; when an option is only useful with another language
34       (usually C++), the explanation says so explicitly.  If the description
35       for a particular option does not mention a source language, you can use
36       that option with all supported languages.
37
38       The gcc program accepts options and file names as operands.  Many
39       options have multi-letter names; therefore multiple single-letter
40       options may not be grouped: -dv is very different from -d -v.
41
42       You can mix options and other arguments.  For the most part, the order
43       you use doesn't matter.  Order does matter when you use several options
44       of the same kind; for example, if you specify -L more than once, the
45       directories are searched in the order specified.  Also, the placement
46       of the -l option is significant.
47
48       Many options have long names starting with -f or with -W---for example,
49       -fmove-loop-invariants, -Wformat and so on.  Most of these have both
50       positive and negative forms; the negative form of -ffoo would be
51       -fno-foo.  This manual documents only one of these two forms, whichever
52       one is not the default.
53

OPTIONS

55   Option Summary
56       Here is a summary of all the options, grouped by type.  Explanations
57       are in the following sections.
58
59       Overall Options
60           -c  -S  -E  -o file  -combine  -pipe  -pass-exit-codes -x language
61           -v  -###  --help[=class[,...]]  --target-help --version
62           -wrapper@file
63
64       C Language Options
65           -ansi  -std=standard  -fgnu89-inline -aux-info filename -fno-asm
66           -fno-builtin  -fno-builtin-function -fhosted  -ffreestanding
67           -fopenmp -fms-extensions -trigraphs  -no-integrated-cpp
68           -traditional  -traditional-cpp -fallow-single-precision
69           -fcond-mismatch -flax-vector-conversions -fsigned-bitfields
70           -fsigned-char -funsigned-bitfields  -funsigned-char
71
72       C++ Language Options
73           -fabi-version=n  -fno-access-control  -fcheck-new -fconserve-space
74           -ffriend-injection -fno-elide-constructors -fno-enforce-eh-specs
75           -ffor-scope  -fno-for-scope  -fno-gnu-keywords
76           -fno-implicit-templates -fno-implicit-inline-templates
77           -fno-implement-inlines  -fms-extensions -fno-nonansi-builtins
78           -fno-operator-names -fno-optional-diags  -fpermissive -frepo
79           -fno-rtti  -fstats  -ftemplate-depth-n -fno-threadsafe-statics
80           -fuse-cxa-atexit  -fno-weak  -nostdinc++ -fno-default-inline
81           -fvisibility-inlines-hidden -fvisibility-ms-compat -Wabi
82           -Wctor-dtor-privacy -Wnon-virtual-dtor  -Wreorder -Weffc++
83           -Wstrict-null-sentinel -Wno-non-template-friend  -Wold-style-cast
84           -Woverloaded-virtual  -Wno-pmf-conversions -Wsign-promo
85
86       Objective-C and Objective-C++ Language Options
87           -fconstant-string-class=class-name -fgnu-runtime  -fnext-runtime
88           -fno-nil-receivers -fobjc-call-cxx-cdtors -fobjc-direct-dispatch
89           -fobjc-exceptions -fobjc-gc -freplace-objc-classes -fzero-link
90           -gen-decls -Wassign-intercept -Wno-protocol  -Wselector
91           -Wstrict-selector-match -Wundeclared-selector
92
93       Language Independent Options
94           -fmessage-length=n -fdiagnostics-show-location=[once|every-line]
95           -fdiagnostics-show-option
96
97       Warning Options
98           -fsyntax-only  -pedantic  -pedantic-errors -w  -Wextra  -Wall
99           -Waddress  -Waggregate-return  -Warray-bounds -Wno-attributes
100           -Wno-builtin-macro-redefined -Wc++-compat -Wc++0x-compat
101           -Wcast-align  -Wcast-qual -Wchar-subscripts -Wclobbered  -Wcomment
102           -Wconversion  -Wcoverage-mismatch  -Wno-deprecated
103           -Wno-deprecated-declarations -Wdisabled-optimization
104           -Wno-div-by-zero -Wempty-body  -Wenum-compare -Wno-endif-labels
105           -Werror  -Werror=* -Wfatal-errors  -Wfloat-equal  -Wformat
106           -Wformat=2 -Wno-format-contains-nul -Wno-format-extra-args
107           -Wformat-nonliteral -Wformat-security  -Wformat-y2k
108           -Wframe-larger-than=len -Wignored-qualifiers -Wimplicit
109           -Wimplicit-function-declaration  -Wimplicit-int -Winit-self
110           -Winline -Wno-int-to-pointer-cast -Wno-invalid-offsetof
111           -Winvalid-pch -Wlarger-than=len  -Wunsafe-loop-optimizations
112           -Wlogical-op -Wlong-long -Wmain  -Wmissing-braces
113           -Wmissing-field-initializers -Wmissing-format-attribute
114           -Wmissing-include-dirs -Wmissing-noreturn  -Wno-mudflap
115           -Wno-multichar  -Wnonnull  -Wno-overflow -Woverlength-strings
116           -Wpacked  -Wpacked-bitfield-compat  -Wpadded -Wparentheses
117           -Wpedantic-ms-format -Wno-pedantic-ms-format -Wpointer-arith
118           -Wno-pointer-to-int-cast -Wredundant-decls -Wreturn-type
119           -Wsequence-point  -Wshadow -Wsign-compare  -Wsign-conversion
120           -Wstack-protector -Wstrict-aliasing -Wstrict-aliasing=n
121           -Wstrict-overflow -Wstrict-overflow=n -Wswitch  -Wswitch-default
122           -Wswitch-enum -Wsync-nand -Wsystem-headers  -Wtrigraphs
123           -Wtype-limits  -Wundef  -Wuninitialized -Wunknown-pragmas
124           -Wno-pragmas -Wunreachable-code -Wunused  -Wunused-function
125           -Wunused-label  -Wunused-parameter -Wunused-value
126           -Wunused-variable -Wunused-but-set-parameter
127           -Wunused-but-set-variable -Wvariadic-macros -Wvla
128           -Wvolatile-register-var  -Wwrite-strings
129
130       C and Objective-C-only Warning Options
131           -Wbad-function-cast  -Wmissing-declarations
132           -Wmissing-parameter-type  -Wmissing-prototypes  -Wnested-externs
133           -Wold-style-declaration  -Wold-style-definition -Wstrict-prototypes
134           -Wtraditional  -Wtraditional-conversion
135           -Wdeclaration-after-statement -Wpointer-sign
136
137       Debugging Options
138           -dletters  -dumpspecs  -dumpmachine  -dumpversion -fdbg-cnt-list
139           -fdbg-cnt=counter-value-list -fdump-noaddr -fdump-unnumbered
140           -fdump-unnumbered-links -fdump-translation-unit[-n]
141           -fdump-class-hierarchy[-n] -fdump-ipa-all -fdump-ipa-cgraph
142           -fdump-ipa-inline -fdump-statistics -fdump-tree-all
143           -fdump-tree-original[-n] -fdump-tree-optimized[-n] -fdump-tree-cfg
144           -fdump-tree-vcg -fdump-tree-alias -fdump-tree-ch
145           -fdump-tree-ssa[-n] -fdump-tree-pre[-n] -fdump-tree-ccp[-n]
146           -fdump-tree-dce[-n] -fdump-tree-gimple[-raw]
147           -fdump-tree-mudflap[-n] -fdump-tree-dom[-n] -fdump-tree-dse[-n]
148           -fdump-tree-phiopt[-n] -fdump-tree-forwprop[-n]
149           -fdump-tree-copyrename[-n] -fdump-tree-nrv -fdump-tree-vect
150           -fdump-tree-sink -fdump-tree-sra[-n] -fdump-tree-fre[-n]
151           -fdump-tree-vrp[-n] -ftree-vectorizer-verbose=n
152           -fdump-tree-storeccp[-n] -fdump-final-insns=file
153           -fcompare-debug[=opts]  -fcompare-debug-second
154           -feliminate-dwarf2-dups -feliminate-unused-debug-types
155           -feliminate-unused-debug-symbols -femit-class-debug-always
156           -fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report
157           -fprofile-arcs -frandom-seed=string -fsched-verbose=n
158           -fsel-sched-verbose -fsel-sched-dump-cfg
159           -fsel-sched-pipelining-verbose -ftest-coverage  -ftime-report
160           -fvar-tracking -fvar-tracking-assignments
161           -fvar-tracking-assignments-toggle -g  -glevel  -gtoggle  -gcoff
162           -gdwarf-version -ggdb  -gstabs  -gstabs+  -gstrict-dwarf
163           -gno-strict-dwarf -gvms  -gxcoff  -gxcoff+ -fno-merge-debug-strings
164           -fno-dwarf2-cfi-asm -fdebug-prefix-map=old=new
165           -femit-struct-debug-baseonly -femit-struct-debug-reduced
166           -femit-struct-debug-detailed[=spec-list] -p  -pg
167           -print-file-name=library  -print-libgcc-file-name
168           -print-multi-directory  -print-multi-lib  -print-multi-os-directory
169           -print-prog-name=program  -print-search-dirs  -Q -print-sysroot
170           -print-sysroot-headers-suffix -save-temps  -time[=file]
171
172       Optimization Options
173           -falign-functions[=n] -falign-jumps[=n] -falign-labels[=n]
174           -falign-loops[=n] -fassociative-math -fauto-inc-dec
175           -fbranch-probabilities -fbranch-target-load-optimize
176           -fbranch-target-load-optimize2 -fbtr-bb-exclusive -fcaller-saves
177           -fcheck-data-deps -fconserve-stack -fcprop-registers -fcrossjumping
178           -fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules
179           -fcx-limited-range -fdata-sections -fdce -fdce -fdelayed-branch
180           -fdelete-null-pointer-checks -fdse -fdse -fearly-inlining
181           -fexpensive-optimizations -ffast-math -ffinite-math-only
182           -ffloat-store -fforward-propagate -ffunction-sections -fgcse
183           -fgcse-after-reload -fgcse-las -fgcse-lm -fgcse-sm -fif-conversion
184           -fif-conversion2 -findirect-inlining -finline-functions
185           -finline-functions-called-once -finline-limit=n
186           -finline-small-functions -fipa-cp -fipa-cp-clone -fipa-matrix-reorg
187           -fipa-pta -fipa-pure-const -fipa-reference -fipa-struct-reorg
188           -fipa-type-escape -fira-algorithm=algorithm -fira-region=region
189           -fira-coalesce -fno-ira-share-save-slots -fno-ira-share-spill-slots
190           -fira-verbose=n -fivopts -fkeep-inline-functions
191           -fkeep-static-consts -floop-block -floop-interchange
192           -floop-strip-mine -fmerge-all-constants -fmerge-constants
193           -fmodulo-sched -fmodulo-sched-allow-regmoves -fmove-loop-invariants
194           -fmudflap -fmudflapir -fmudflapth -fno-branch-count-reg
195           -fno-default-inline -fno-defer-pop -fno-function-cse
196           -fno-guess-branch-probability -fno-inline -fno-math-errno
197           -fno-peephole -fno-peephole2 -fno-sched-interblock -fno-sched-spec
198           -fno-signed-zeros -fno-toplevel-reorder -fno-trapping-math
199           -fno-zero-initialized-in-bss -fomit-frame-pointer
200           -foptimize-register-move -foptimize-sibling-calls -fpeel-loops
201           -fpredictive-commoning -fprefetch-loop-arrays -fprofile-correction
202           -fprofile-dir=path -fprofile-generate -fprofile-generate=path
203           -fprofile-use -fprofile-use=path -fprofile-values -freciprocal-math
204           -fregmove -frename-registers -freorder-blocks
205           -freorder-blocks-and-partition -freorder-functions
206           -frerun-cse-after-loop -freschedule-modulo-scheduled-loops
207           -frounding-math -frtl-abstract-sequences -fsched2-use-superblocks
208           -fsched2-use-traces -fsched-spec-load -fsched-spec-load-dangerous
209           -fsched-stalled-insns-dep[=n] -fsched-stalled-insns[=n]
210           -fschedule-insns -fschedule-insns2 -fsection-anchors -fsee
211           -fselective-scheduling -fselective-scheduling2
212           -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops
213           -fsignaling-nans -fsingle-precision-constant
214           -fsplit-ivs-in-unroller -fsplit-wide-types -fstack-protector
215           -fstack-protector-all -fstrict-aliasing -fstrict-overflow
216           -fthread-jumps -ftracer -ftree-builtin-call-dce -ftree-ccp
217           -ftree-ch -ftree-coalesce-inline-vars -ftree-coalesce-vars
218           -ftree-copy-prop -ftree-copyrename -ftree-dce -ftree-dominator-opts
219           -ftree-dse -ftree-fre -ftree-loop-im -ftree-loop-distribution
220           -ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize
221           -ftree-parallelize-loops=n -ftree-pre -ftree-reassoc -ftree-sink
222           -ftree-sra -ftree-switch-conversion -ftree-ter
223           -ftree-vect-loop-version -ftree-vectorize -ftree-vrp
224           -funit-at-a-time -funroll-all-loops -funroll-loops
225           -funsafe-loop-optimizations -funsafe-math-optimizations
226           -funswitch-loops -fvariable-expansion-in-unroller -fvect-cost-model
227           -fvpt -fweb -fwhole-program --param name=value -O  -O0  -O1  -O2
228           -O3  -Os
229
230       Preprocessor Options
231           -Aquestion=answer -A-question[=answer] -C  -dD  -dI  -dM  -dN
232           -Dmacro[=defn]  -E  -H -idirafter dir -include file  -imacros file
233           -iprefix file  -iwithprefix dir -iwithprefixbefore dir  -isystem
234           dir -imultilib dir -isysroot dir -M  -MM  -MF  -MG  -MP  -MQ  -MT
235           -nostdinc -P  -fworking-directory  -remap -trigraphs  -undef
236           -Umacro  -Wp,option -Xpreprocessor option
237
238       Assembler Option
239           -Wa,option  -Xassembler option
240
241       Linker Options
242           object-file-name  -llibrary -nostartfiles  -nodefaultlibs
243           -nostdlib -pie -rdynamic -s  -static  -static-libgcc  -shared
244           -shared-libgcc  -symbolic -T script  -Wl,option  -Xlinker option -u
245           symbol
246
247       Directory Options
248           -Bprefix  -Idir  -iquotedir  -Ldir -specs=file  -I- --sysroot=dir
249
250       Target Options
251           -V version  -b machine
252
253       Machine Dependent Options
254           ARC Options -EB  -EL -mmangle-cpu  -mcpu=cpu  -mtext=text-section
255           -mdata=data-section  -mrodata=readonly-data-section
256
257           ARM Options -mapcs-frame  -mno-apcs-frame -mabi=name
258           -mapcs-stack-check  -mno-apcs-stack-check -mapcs-float
259           -mno-apcs-float -mapcs-reentrant  -mno-apcs-reentrant
260           -msched-prolog  -mno-sched-prolog -mlittle-endian  -mbig-endian
261           -mwords-little-endian -mfloat-abi=name  -msoft-float  -mhard-float
262           -mfpe -mthumb-interwork  -mno-thumb-interwork -mcpu=name
263           -march=name  -mfpu=name -mstructure-size-boundary=n
264           -mabort-on-noreturn -mlong-calls  -mno-long-calls -msingle-pic-base
265           -mno-single-pic-base -mpic-register=reg -mnop-fun-dllimport
266           -mcirrus-fix-invalid-insns -mno-cirrus-fix-invalid-insns
267           -mpoke-function-name -mthumb  -marm -mtpcs-frame  -mtpcs-leaf-frame
268           -mcaller-super-interworking  -mcallee-super-interworking -mtp=name
269           -mword-relocations -mfix-cortex-m3-ldrd
270
271           AVR Options -mmcu=mcu  -msize  -mno-interrupts -mcall-prologues
272           -mno-tablejump  -mtiny-stack  -mint8
273
274           Blackfin Options -mcpu=cpu[-sirevision] -msim
275           -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer
276           -mspecld-anomaly  -mno-specld-anomaly  -mcsync-anomaly
277           -mno-csync-anomaly -mlow-64k -mno-low64k  -mstack-check-l1
278           -mid-shared-library -mno-id-shared-library  -mshared-library-id=n
279           -mleaf-id-shared-library  -mno-leaf-id-shared-library -msep-data
280           -mno-sep-data  -mlong-calls  -mno-long-calls -mfast-fp -minline-plt
281           -mmulticore  -mcorea  -mcoreb  -msdram -micplb
282
283           CRIS Options -mcpu=cpu  -march=cpu  -mtune=cpu -mmax-stack-frame=n
284           -melinux-stacksize=n -metrax4  -metrax100  -mpdebug  -mcc-init
285           -mno-side-effects -mstack-align  -mdata-align  -mconst-align
286           -m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt
287           -melf  -maout  -melinux  -mlinux  -sim  -sim2 -mmul-bug-workaround
288           -mno-mul-bug-workaround
289
290           CRX Options -mmac -mpush-args
291
292           Darwin Options -all_load  -allowable_client  -arch
293           -arch_errors_fatal -arch_only  -bind_at_load  -bundle
294           -bundle_loader -client_name  -compatibility_version
295           -current_version -dead_strip -dependency-file  -dylib_file
296           -dylinker_install_name -dynamic  -dynamiclib
297           -exported_symbols_list -filelist  -flat_namespace
298           -force_cpusubtype_ALL -force_flat_namespace
299           -headerpad_max_install_names -iframework -image_base  -init
300           -install_name  -keep_private_externs -multi_module
301           -multiply_defined  -multiply_defined_unused -noall_load
302           -no_dead_strip_inits_and_terms -nofixprebinding -nomultidefs
303           -noprebind  -noseglinkedit -pagezero_size  -prebind
304           -prebind_all_twolevel_modules -private_bundle  -read_only_relocs
305           -sectalign -sectobjectsymbols  -whyload  -seg1addr -sectcreate
306           -sectobjectsymbols  -sectorder -segaddr -segs_read_only_addr
307           -segs_read_write_addr -seg_addr_table  -seg_addr_table_filename
308           -seglinkedit -segprot  -segs_read_only_addr  -segs_read_write_addr
309           -single_module  -static  -sub_library  -sub_umbrella
310           -twolevel_namespace  -umbrella  -undefined -unexported_symbols_list
311           -weak_reference_mismatches -whatsloaded -F -gused -gfull
312           -mmacosx-version-min=version -mkernel -mone-byte-bool
313
314           DEC Alpha Options -mno-fp-regs  -msoft-float  -malpha-as  -mgas
315           -mieee  -mieee-with-inexact  -mieee-conformant -mfp-trap-mode=mode
316           -mfp-rounding-mode=mode -mtrap-precision=mode  -mbuild-constants
317           -mcpu=cpu-type  -mtune=cpu-type -mbwx  -mmax  -mfix  -mcix
318           -mfloat-vax  -mfloat-ieee -mexplicit-relocs  -msmall-data
319           -mlarge-data -msmall-text  -mlarge-text -mmemory-latency=time
320
321           DEC Alpha/VMS Options -mvms-return-codes
322
323           FR30 Options -msmall-model -mno-lsim
324
325           FRV Options -mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64 -mhard-float
326           -msoft-float -malloc-cc  -mfixed-cc  -mdword  -mno-dword -mdouble
327           -mno-double -mmedia  -mno-media  -mmuladd  -mno-muladd -mfdpic
328           -minline-plt -mgprel-ro  -multilib-library-pic -mlinked-fp
329           -mlong-calls  -malign-labels -mlibrary-pic  -macc-4  -macc-8 -mpack
330           -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move
331           -moptimize-membar -mno-optimize-membar -mscc  -mno-scc  -mcond-exec
332           -mno-cond-exec -mvliw-branch  -mno-vliw-branch -mmulti-cond-exec
333           -mno-multi-cond-exec  -mnested-cond-exec -mno-nested-cond-exec
334           -mtomcat-stats -mTLS -mtls -mcpu=cpu
335
336           GNU/Linux Options -muclibc
337
338           H8/300 Options -mrelax  -mh  -ms  -mn  -mint32  -malign-300
339
340           HPPA Options -march=architecture-type -mbig-switch
341           -mdisable-fpregs  -mdisable-indexing -mfast-indirect-calls  -mgas
342           -mgnu-ld   -mhp-ld -mfixed-range=register-range -mjump-in-delay
343           -mlinker-opt -mlong-calls -mlong-load-store  -mno-big-switch
344           -mno-disable-fpregs -mno-disable-indexing  -mno-fast-indirect-calls
345           -mno-gas -mno-jump-in-delay  -mno-long-load-store
346           -mno-portable-runtime  -mno-soft-float -mno-space-regs
347           -msoft-float  -mpa-risc-1-0 -mpa-risc-1-1  -mpa-risc-2-0
348           -mportable-runtime -mschedule=cpu-type  -mspace-regs  -msio  -mwsio
349           -munix=unix-std  -nolibdld  -static  -threads
350
351           i386 and x86-64 Options -mtune=cpu-type  -march=cpu-type
352           -mfpmath=unit -masm=dialect  -mno-fancy-math-387 -mno-fp-ret-in-387
353           -msoft-float -mno-wide-multiply  -mrtd  -malign-double
354           -mpreferred-stack-boundary=num -mincoming-stack-boundary=num -mcld
355           -mcx16 -msahf -mmovbe -mcrc32 -mrecip -mmmx  -msse  -msse2 -msse3
356           -mssse3 -msse4.1 -msse4.2 -msse4 -mavx -maes -mpclmul -mfsgsbase
357           -mrdrnd -mf16c -mfused-madd -msse4a -m3dnow -mpopcnt -mabm -mbmi
358           -mtbm -mfma4 -mxop -mlwp -mthreads  -mno-align-stringops
359           -minline-all-stringops -minline-stringops-dynamically
360           -mstringop-strategy=alg -mpush-args  -maccumulate-outgoing-args
361           -m128bit-long-double -m96bit-long-double  -mregparm=num
362           -msseregparm -mveclibabi=type -mpc32 -mpc64 -mpc80 -mstackrealign
363           -momit-leaf-frame-pointer  -mno-red-zone -mno-tls-direct-seg-refs
364           -mcmodel=code-model -m32  -m64 -mlarge-data-threshold=num -msse2avx
365           -mindirect-branch=choice -mfunction-return==choice
366           -mindirect-branch-register
367
368           i386 and x86-64 Windows Options -mconsole -mcygwin -mno-cygwin
369           -mdll -mnop-fun-dllimport -mthread -mwin32 -mwindows
370
371           IA-64 Options -mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld
372           -mno-pic -mvolatile-asm-stop  -mregister-names  -mno-sdata
373           -mconstant-gp  -mauto-pic  -minline-float-divide-min-latency
374           -minline-float-divide-max-throughput
375           -minline-int-divide-min-latency -minline-int-divide-max-throughput
376           -minline-sqrt-min-latency -minline-sqrt-max-throughput
377           -mno-dwarf2-asm -mearly-stop-bits -mfixed-range=register-range
378           -mtls-size=tls-size -mtune=cpu-type -mt -pthread -milp32 -mlp64
379           -mno-sched-br-data-spec -msched-ar-data-spec
380           -mno-sched-control-spec -msched-br-in-data-spec
381           -msched-ar-in-data-spec -msched-in-control-spec -msched-ldc
382           -mno-sched-control-ldc -mno-sched-spec-verbose
383           -mno-sched-prefer-non-data-spec-insns
384           -mno-sched-prefer-non-control-spec-insns
385           -mno-sched-count-spec-in-critical-path
386
387           M32R/D Options -m32r2 -m32rx -m32r -mdebug -malign-loops
388           -mno-align-loops -missue-rate=number -mbranch-cost=number
389           -mmodel=code-size-model-type -msdata=sdata-type -mno-flush-func
390           -mflush-func=name -mno-flush-trap -mflush-trap=number -G num
391
392           M32C Options -mcpu=cpu -msim -memregs=number
393
394           M680x0 Options -march=arch  -mcpu=cpu  -mtune=tune -m68000  -m68020
395           -m68020-40  -m68020-60  -m68030  -m68040 -m68060  -mcpu32  -m5200
396           -m5206e  -m528x  -m5307  -m5407 -mcfv4e  -mbitfield  -mno-bitfield
397           -mc68000  -mc68020 -mnobitfield  -mrtd  -mno-rtd  -mdiv  -mno-div
398           -mshort -mno-short  -mhard-float  -m68881  -msoft-float  -mpcrel
399           -malign-int  -mstrict-align  -msep-data  -mno-sep-data
400           -mshared-library-id=n  -mid-shared-library  -mno-id-shared-library
401           -mxgot -mno-xgot
402
403           M68hc1x Options -m6811  -m6812  -m68hc11  -m68hc12   -m68hcs12
404           -mauto-incdec  -minmax  -mlong-calls  -mshort
405           -msoft-reg-count=count
406
407           MCore Options -mhardlit  -mno-hardlit  -mdiv  -mno-div
408           -mrelax-immediates -mno-relax-immediates  -mwide-bitfields
409           -mno-wide-bitfields -m4byte-functions  -mno-4byte-functions
410           -mcallgraph-data -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes
411           -mno-lsim -mlittle-endian  -mbig-endian  -m210  -m340
412           -mstack-increment
413
414           MIPS Options -EL  -EB  -march=arch  -mtune=arch -mips1  -mips2
415           -mips3  -mips4  -mips32  -mips32r2 -mips64  -mips64r2 -mips16
416           -mno-mips16  -mflip-mips16 -minterlink-mips16
417           -mno-interlink-mips16 -mabi=abi  -mabicalls  -mno-abicalls -mshared
418           -mno-shared  -mplt  -mno-plt  -mxgot  -mno-xgot -mgp32  -mgp64
419           -mfp32  -mfp64  -mhard-float  -msoft-float -msingle-float
420           -mdouble-float  -mdsp  -mno-dsp  -mdspr2  -mno-dspr2 -mfpu=fpu-type
421           -msmartmips  -mno-smartmips -mpaired-single  -mno-paired-single
422           -mdmx  -mno-mdmx -mips3d  -mno-mips3d  -mmt  -mno-mt  -mllsc
423           -mno-llsc -mlong64  -mlong32  -msym32  -mno-sym32 -Gnum
424           -mlocal-sdata  -mno-local-sdata -mextern-sdata  -mno-extern-sdata
425           -mgpopt  -mno-gopt -membedded-data  -mno-embedded-data
426           -muninit-const-in-rodata  -mno-uninit-const-in-rodata
427           -mcode-readable=setting -msplit-addresses  -mno-split-addresses
428           -mexplicit-relocs  -mno-explicit-relocs -mcheck-zero-division
429           -mno-check-zero-division -mdivide-traps  -mdivide-breaks -mmemcpy
430           -mno-memcpy  -mlong-calls  -mno-long-calls -mmad  -mno-mad
431           -mfused-madd  -mno-fused-madd  -nocpp -mfix-r4000  -mno-fix-r4000
432           -mfix-r4400  -mno-fix-r4400 -mfix-r10000 -mno-fix-r10000
433           -mfix-vr4120  -mno-fix-vr4120 -mfix-vr4130  -mno-fix-vr4130
434           -mfix-sb1  -mno-fix-sb1 -mflush-func=func  -mno-flush-func
435           -mbranch-cost=num  -mbranch-likely  -mno-branch-likely
436           -mfp-exceptions -mno-fp-exceptions -mvr4130-align -mno-vr4130-align
437
438           MMIX Options -mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon
439           -mabi=gnu -mabi=mmixware  -mzero-extend  -mknuthdiv
440           -mtoplevel-symbols -melf  -mbranch-predict  -mno-branch-predict
441           -mbase-addresses -mno-base-addresses  -msingle-exit
442           -mno-single-exit
443
444           MN10300 Options -mmult-bug  -mno-mult-bug -mam33  -mno-am33
445           -mam33-2  -mno-am33-2 -mreturn-pointer-on-d0 -mno-crt0  -mrelax
446
447           PDP-11 Options -mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45
448           -m10 -mbcopy  -mbcopy-builtin  -mint32  -mno-int16 -mint16
449           -mno-int32  -mfloat32  -mno-float64 -mfloat64  -mno-float32
450           -mabshi  -mno-abshi -mbranch-expensive  -mbranch-cheap -msplit
451           -mno-split  -munix-asm  -mdec-asm
452
453           picoChip Options -mae=ae_type -mvliw-lookahead=N
454           -msymbol-as-address -mno-inefficient-warnings
455
456           PowerPC Options See RS/6000 and PowerPC Options.
457
458           RS/6000 and PowerPC Options -mcpu=cpu-type -mtune=cpu-type
459           -mcmodel=code-model -mpower  -mno-power  -mpower2  -mno-power2
460           -mpowerpc  -mpowerpc64  -mno-powerpc -maltivec  -mno-altivec
461           -mpowerpc-gpopt  -mno-powerpc-gpopt -mpowerpc-gfxopt
462           -mno-powerpc-gfxopt -mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb
463           -mpopcntd -mno-popcntd -mfprnd  -mno-fprnd -mcmpb -mno-cmpb
464           -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp -mnew-mnemonics
465           -mold-mnemonics -mfull-toc   -mminimal-toc  -mno-fp-in-toc
466           -mno-sum-in-toc -m64  -m32  -mxl-compat  -mno-xl-compat  -mpe
467           -malign-power  -malign-natural -msoft-float  -mhard-float
468           -mmultiple  -mno-multiple -msingle-float -mdouble-float
469           -msimple-fpu -mstring  -mno-string  -mupdate  -mno-update
470           -mavoid-indexed-addresses  -mno-avoid-indexed-addresses
471           -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align
472           -mstrict-align  -mno-strict-align  -mrelocatable -mno-relocatable
473           -mrelocatable-lib  -mno-relocatable-lib -mtoc  -mno-toc  -mlittle
474           -mlittle-endian  -mbig  -mbig-endian -mdynamic-no-pic  -maltivec
475           -mswdiv -mprioritize-restricted-insns=priority
476           -msched-costly-dep=dependence_type -minsert-sched-nops=scheme
477           -mcall-sysv  -mcall-netbsd -maix-struct-return
478           -msvr4-struct-return -mabi=abi-type -msecure-plt -mbss-plt -misel
479           -mno-isel -misel=yes  -misel=no -mspe -mno-spe -mspe=yes  -mspe=no
480           -mpaired -mgen-cell-microcode -mwarn-cell-microcode -mvrsave
481           -mno-vrsave -mmulhw -mno-mulhw -mdlmzb -mno-dlmzb -mfloat-gprs=yes
482           -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double -mprototype
483           -mno-prototype -msim  -mmvme  -mads  -myellowknife  -memb  -msdata
484           -msdata=opt  -mvxworks  -G num  -pthread
485
486           S/390 and zSeries Options -mtune=cpu-type  -march=cpu-type
487           -mhard-float  -msoft-float  -mhard-dfp -mno-hard-dfp
488           -mlong-double-64 -mlong-double-128 -mbackchain  -mno-backchain
489           -mpacked-stack  -mno-packed-stack -msmall-exec  -mno-small-exec
490           -mmvcle -mno-mvcle -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch
491           -mtpf-trace -mno-tpf-trace  -mfused-madd  -mno-fused-madd
492           -mwarn-framesize  -mwarn-dynamicstack  -mstack-size -mstack-guard
493           -mhotpatch=halfwords,halfwords
494
495           Score Options -meb -mel -mnhwloop -muls -mmac -mscore5 -mscore5u
496           -mscore7 -mscore7d
497
498           SH Options -m1  -m2  -m2e  -m3  -m3e -m4-nofpu  -m4-single-only
499           -m4-single  -m4 -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al
500           -m5-64media  -m5-64media-nofpu -m5-32media  -m5-32media-nofpu
501           -m5-compact  -m5-compact-nofpu -mb  -ml  -mdalign  -mrelax
502           -mbigtable  -mfmovd  -mhitachi -mrenesas -mno-renesas -mnomacsave
503           -mieee  -mbitops  -misize  -minline-ic_invalidate -mpadstruct
504           -mspace -mprefergot  -musermode -multcost=number -mdiv=strategy
505           -mdivsi3_libfunc=name -mfixed-range=register-range -madjust-unroll
506           -mindexed-addressing -mgettrcost=number -mpt-fixed
507           -minvalid-symbols
508
509           SPARC Options -mcpu=cpu-type -mtune=cpu-type -mcmodel=code-model
510           -m32  -m64  -mapp-regs  -mno-app-regs -mfaster-structs
511           -mno-faster-structs -mfpu  -mno-fpu  -mhard-float  -msoft-float
512           -mhard-quad-float  -msoft-quad-float -mimpure-text
513           -mno-impure-text  -mlittle-endian -mstack-bias  -mno-stack-bias
514           -munaligned-doubles  -mno-unaligned-doubles -mv8plus  -mno-v8plus
515           -mvis  -mno-vis -threads -pthreads -pthread
516
517           SPU Options -mwarn-reloc -merror-reloc -msafe-dma -munsafe-dma
518           -mbranch-hints -msmall-mem -mlarge-mem -mstdmain
519           -mfixed-range=register-range
520
521           System V Options -Qy  -Qn  -YP,paths  -Ym,dir
522
523           V850 Options -mlong-calls  -mno-long-calls  -mep  -mno-ep
524           -mprolog-function  -mno-prolog-function  -mspace -mtda=n  -msda=n
525           -mzda=n -mapp-regs  -mno-app-regs -mdisable-callt
526           -mno-disable-callt -mv850e1 -mv850e -mv850  -mbig-switch
527
528           VAX Options -mg  -mgnu  -munix
529
530           VxWorks Options -mrtp  -non-static  -Bstatic  -Bdynamic -Xbind-lazy
531           -Xbind-now
532
533           x86-64 Options See i386 and x86-64 Options.
534
535           Xstormy16 Options -msim
536
537           Xtensa Options -mconst16 -mno-const16 -mfused-madd  -mno-fused-madd
538           -mserialize-volatile  -mno-serialize-volatile
539           -mtext-section-literals  -mno-text-section-literals -mtarget-align
540           -mno-target-align -mlongcalls  -mno-longcalls
541
542           zSeries Options See S/390 and zSeries Options.
543
544       Code Generation Options
545           -fcall-saved-reg  -fcall-used-reg -ffixed-reg  -fexceptions
546           -fnon-call-exceptions  -funwind-tables -fasynchronous-unwind-tables
547           -finhibit-size-directive  -finstrument-functions
548           -finstrument-functions-exclude-function-list=sym,sym,...
549           -finstrument-functions-exclude-file-list=file,file,...  -fno-common
550           -fno-ident -fpcc-struct-return  -fpic  -fPIC -fpie -fPIE
551           -fno-jump-tables -frecord-gcc-switches -freg-struct-return
552           -fshort-enums -fshort-double  -fshort-wchar -fverbose-asm
553           -fpack-struct[=n]  -fstack-check -fstack-limit-register=reg
554           -fstack-limit-symbol=sym -fno-stack-limit  -fargument-alias
555           -fargument-noalias -fargument-noalias-global
556           -fargument-noalias-anything -fleading-underscore  -ftls-model=model
557           -ftrapv  -fwrapv  -fbounds-check -fvisibility
558
559   Options Controlling the Kind of Output
560       Compilation can involve up to four stages: preprocessing, compilation
561       proper, assembly and linking, always in that order.  GCC is capable of
562       preprocessing and compiling several files either into several assembler
563       input files, or into one assembler input file; then each assembler
564       input file produces an object file, and linking combines all the object
565       files (those newly compiled, and those specified as input) into an
566       executable file.
567
568       For any given input file, the file name suffix determines what kind of
569       compilation is done:
570
571       file.c
572           C source code which must be preprocessed.
573
574       file.i
575           C source code which should not be preprocessed.
576
577       file.ii
578           C++ source code which should not be preprocessed.
579
580       file.m
581           Objective-C source code.  Note that you must link with the libobjc
582           library to make an Objective-C program work.
583
584       file.mi
585           Objective-C source code which should not be preprocessed.
586
587       file.mm
588       file.M
589           Objective-C++ source code.  Note that you must link with the
590           libobjc library to make an Objective-C++ program work.  Note that
591           .M refers to a literal capital M.
592
593       file.mii
594           Objective-C++ source code which should not be preprocessed.
595
596       file.h
597           C, C++, Objective-C or Objective-C++ header file to be turned into
598           a precompiled header.
599
600       file.cc
601       file.cp
602       file.cxx
603       file.cpp
604       file.CPP
605       file.c++
606       file.C
607           C++ source code which must be preprocessed.  Note that in .cxx, the
608           last two letters must both be literally x.  Likewise, .C refers to
609           a literal capital C.
610
611       file.mm
612       file.M
613           Objective-C++ source code which must be preprocessed.
614
615       file.mii
616           Objective-C++ source code which should not be preprocessed.
617
618       file.hh
619       file.H
620       file.hp
621       file.hxx
622       file.hpp
623       file.HPP
624       file.h++
625       file.tcc
626           C++ header file to be turned into a precompiled header.
627
628       file.f
629       file.for
630       file.ftn
631           Fixed form Fortran source code which should not be preprocessed.
632
633       file.F
634       file.FOR
635       file.fpp
636       file.FPP
637       file.FTN
638           Fixed form Fortran source code which must be preprocessed (with the
639           traditional preprocessor).
640
641       file.f90
642       file.f95
643       file.f03
644       file.f08
645           Free form Fortran source code which should not be preprocessed.
646
647       file.F90
648       file.F95
649       file.F03
650       file.F08
651           Free form Fortran source code which must be preprocessed (with the
652           traditional preprocessor).
653
654       file.ads
655           Ada source code file which contains a library unit declaration (a
656           declaration of a package, subprogram, or generic, or a generic
657           instantiation), or a library unit renaming declaration (a package,
658           generic, or subprogram renaming declaration).  Such files are also
659           called specs.
660
661       file.adb
662           Ada source code file containing a library unit body (a subprogram
663           or package body).  Such files are also called bodies.
664
665       file.s
666           Assembler code.
667
668       file.S
669       file.sx
670           Assembler code which must be preprocessed.
671
672       other
673           An object file to be fed straight into linking.  Any file name with
674           no recognized suffix is treated this way.
675
676       You can specify the input language explicitly with the -x option:
677
678       -x language
679           Specify explicitly the language for the following input files
680           (rather than letting the compiler choose a default based on the
681           file name suffix).  This option applies to all following input
682           files until the next -x option.  Possible values for language are:
683
684                   c  c-header  c-cpp-output
685                   c++  c++-header  c++-cpp-output
686                   objective-c  objective-c-header  objective-c-cpp-output
687                   objective-c++ objective-c++-header objective-c++-cpp-output
688                   assembler  assembler-with-cpp
689                   ada
690                   f77  f77-cpp-input f95  f95-cpp-input
691                   java
692
693       -x none
694           Turn off any specification of a language, so that subsequent files
695           are handled according to their file name suffixes (as they are if
696           -x has not been used at all).
697
698       -pass-exit-codes
699           Normally the gcc program will exit with the code of 1 if any phase
700           of the compiler returns a non-success return code.  If you specify
701           -pass-exit-codes, the gcc program will instead return with
702           numerically highest error produced by any phase that returned an
703           error indication.  The C, C++, and Fortran frontends return 4, if
704           an internal compiler error is encountered.
705
706       If you only want some of the stages of compilation, you can use -x (or
707       filename suffixes) to tell gcc where to start, and one of the options
708       -c, -S, or -E to say where gcc is to stop.  Note that some combinations
709       (for example, -x cpp-output -E) instruct gcc to do nothing at all.
710
711       -c  Compile or assemble the source files, but do not link.  The linking
712           stage simply is not done.  The ultimate output is in the form of an
713           object file for each source file.
714
715           By default, the object file name for a source file is made by
716           replacing the suffix .c, .i, .s, etc., with .o.
717
718           Unrecognized input files, not requiring compilation or assembly,
719           are ignored.
720
721       -S  Stop after the stage of compilation proper; do not assemble.  The
722           output is in the form of an assembler code file for each non-
723           assembler input file specified.
724
725           By default, the assembler file name for a source file is made by
726           replacing the suffix .c, .i, etc., with .s.
727
728           Input files that don't require compilation are ignored.
729
730       -E  Stop after the preprocessing stage; do not run the compiler proper.
731           The output is in the form of preprocessed source code, which is
732           sent to the standard output.
733
734           Input files which don't require preprocessing are ignored.
735
736       -o file
737           Place output in file file.  This applies regardless to whatever
738           sort of output is being produced, whether it be an executable file,
739           an object file, an assembler file or preprocessed C code.
740
741           If -o is not specified, the default is to put an executable file in
742           a.out, the object file for source.suffix in source.o, its assembler
743           file in source.s, a precompiled header file in source.suffix.gch,
744           and all preprocessed C source on standard output.
745
746       -v  Print (on standard error output) the commands executed to run the
747           stages of compilation.  Also print the version number of the
748           compiler driver program and of the preprocessor and the compiler
749           proper.
750
751       -###
752           Like -v except the commands are not executed and all command
753           arguments are quoted.  This is useful for shell scripts to capture
754           the driver-generated command lines.
755
756       -pipe
757           Use pipes rather than temporary files for communication between the
758           various stages of compilation.  This fails to work on some systems
759           where the assembler is unable to read from a pipe; but the GNU
760           assembler has no trouble.
761
762       -combine
763           If you are compiling multiple source files, this option tells the
764           driver to pass all the source files to the compiler at once (for
765           those languages for which the compiler can handle this).  This will
766           allow intermodule analysis (IMA) to be performed by the compiler.
767           Currently the only language for which this is supported is C.  If
768           you pass source files for multiple languages to the driver, using
769           this option, the driver will invoke the compiler(s) that support
770           IMA once each, passing each compiler all the source files
771           appropriate for it.  For those languages that do not support IMA
772           this option will be ignored, and the compiler will be invoked once
773           for each source file in that language.  If you use this option in
774           conjunction with -save-temps, the compiler will generate multiple
775           pre-processed files (one for each source file), but only one
776           (combined) .o or .s file.
777
778       --help
779           Print (on the standard output) a description of the command line
780           options understood by gcc.  If the -v option is also specified then
781           --help will also be passed on to the various processes invoked by
782           gcc, so that they can display the command line options they accept.
783           If the -Wextra option has also been specified (prior to the --help
784           option), then command line options which have no documentation
785           associated with them will also be displayed.
786
787       --target-help
788           Print (on the standard output) a description of target-specific
789           command line options for each tool.  For some targets extra target-
790           specific information may also be printed.
791
792       --help={class|[^]qualifier}[,...]
793           Print (on the standard output) a description of the command line
794           options understood by the compiler that fit into all specified
795           classes and qualifiers.  These are the supported classes:
796
797           optimizers
798               This will display all of the optimization options supported by
799               the compiler.
800
801           warnings
802               This will display all of the options controlling warning
803               messages produced by the compiler.
804
805           target
806               This will display target-specific options.  Unlike the
807               --target-help option however, target-specific options of the
808               linker and assembler will not be displayed.  This is because
809               those tools do not currently support the extended --help=
810               syntax.
811
812           params
813               This will display the values recognized by the --param option.
814
815           language
816               This will display the options supported for language, where
817               language is the name of one of the languages supported in this
818               version of GCC.
819
820           common
821               This will display the options that are common to all languages.
822
823           These are the supported qualifiers:
824
825           undocumented
826               Display only those options which are undocumented.
827
828           joined
829               Display options which take an argument that appears after an
830               equal sign in the same continuous piece of text, such as:
831               --help=target.
832
833           separate
834               Display options which take an argument that appears as a
835               separate word following the original option, such as: -o
836               output-file.
837
838           Thus for example to display all the undocumented target-specific
839           switches supported by the compiler the following can be used:
840
841                   --help=target,undocumented
842
843           The sense of a qualifier can be inverted by prefixing it with the ^
844           character, so for example to display all binary warning options
845           (i.e., ones that are either on or off and that do not take an
846           argument), which have a description the following can be used:
847
848                   --help=warnings,^joined,^undocumented
849
850           The argument to --help= should not consist solely of inverted
851           qualifiers.
852
853           Combining several classes is possible, although this usually
854           restricts the output by so much that there is nothing to display.
855           One case where it does work however is when one of the classes is
856           target.  So for example to display all the target-specific
857           optimization options the following can be used:
858
859                   --help=target,optimizers
860
861           The --help= option can be repeated on the command line.  Each
862           successive use will display its requested class of options,
863           skipping those that have already been displayed.
864
865           If the -Q option appears on the command line before the --help=
866           option, then the descriptive text displayed by --help= is changed.
867           Instead of describing the displayed options, an indication is given
868           as to whether the option is enabled, disabled or set to a specific
869           value (assuming that the compiler knows this at the point where the
870           --help= option is used).
871
872           Here is a truncated example from the ARM port of gcc:
873
874                     % gcc -Q -mabi=2 --help=target -c
875                     The following options are target specific:
876                     -mabi=                                2
877                     -mabort-on-noreturn                   [disabled]
878                     -mapcs                                [disabled]
879
880           The output is sensitive to the effects of previous command line
881           options, so for example it is possible to find out which
882           optimizations are enabled at -O2 by using:
883
884                   -Q -O2 --help=optimizers
885
886           Alternatively you can discover which binary optimizations are
887           enabled by -O3 by using:
888
889                   gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
890                   gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
891                   diff /tmp/O2-opts /tmp/O3-opts | grep enabled
892
893       --version
894           Display the version number and copyrights of the invoked GCC.
895
896       -wrapper
897           Invoke all subcommands under a wrapper program. It takes a single
898           comma separated list as an argument, which will be used to invoke
899           the wrapper:
900
901                   gcc -c t.c -wrapper gdb,--args
902
903           This will invoke all subprograms of gcc under "gdb --args", thus
904           cc1 invocation will be "gdb --args cc1 ...".
905
906       @file
907           Read command-line options from file.  The options read are inserted
908           in place of the original @file option.  If file does not exist, or
909           cannot be read, then the option will be treated literally, and not
910           removed.
911
912           Options in file are separated by whitespace.  A whitespace
913           character may be included in an option by surrounding the entire
914           option in either single or double quotes.  Any character (including
915           a backslash) may be included by prefixing the character to be
916           included with a backslash.  The file may itself contain additional
917           @file options; any such options will be processed recursively.
918
919   Compiling C++ Programs
920       C++ source files conventionally use one of the suffixes .C, .cc, .cpp,
921       .CPP, .c++, .cp, or .cxx; C++ header files often use .hh, .hpp, .H, or
922       (for shared template code) .tcc; and preprocessed C++ files use the
923       suffix .ii.  GCC recognizes files with these names and compiles them as
924       C++ programs even if you call the compiler the same way as for
925       compiling C programs (usually with the name gcc).
926
927       However, the use of gcc does not add the C++ library.  g++ is a program
928       that calls GCC and treats .c, .h and .i files as C++ source files
929       instead of C source files unless -x is used, and automatically
930       specifies linking against the C++ library.  This program is also useful
931       when precompiling a C header file with a .h extension for use in C++
932       compilations.  On many systems, g++ is also installed with the name
933       c++.
934
935       When you compile C++ programs, you may specify many of the same
936       command-line options that you use for compiling programs in any
937       language; or command-line options meaningful for C and related
938       languages; or options that are meaningful only for C++ programs.
939
940   Options Controlling C Dialect
941       The following options control the dialect of C (or languages derived
942       from C, such as C++, Objective-C and Objective-C++) that the compiler
943       accepts:
944
945       -ansi
946           In C mode, this is equivalent to -std=c89. In C++ mode, it is
947           equivalent to -std=c++98.
948
949           This turns off certain features of GCC that are incompatible with
950           ISO C90 (when compiling C code), or of standard C++ (when compiling
951           C++ code), such as the "asm" and "typeof" keywords, and predefined
952           macros such as "unix" and "vax" that identify the type of system
953           you are using.  It also enables the undesirable and rarely used ISO
954           trigraph feature.  For the C compiler, it disables recognition of
955           C++ style // comments as well as the "inline" keyword.
956
957           The alternate keywords "__asm__", "__extension__", "__inline__" and
958           "__typeof__" continue to work despite -ansi.  You would not want to
959           use them in an ISO C program, of course, but it is useful to put
960           them in header files that might be included in compilations done
961           with -ansi.  Alternate predefined macros such as "__unix__" and
962           "__vax__" are also available, with or without -ansi.
963
964           The -ansi option does not cause non-ISO programs to be rejected
965           gratuitously.  For that, -pedantic is required in addition to
966           -ansi.
967
968           The macro "__STRICT_ANSI__" is predefined when the -ansi option is
969           used.  Some header files may notice this macro and refrain from
970           declaring certain functions or defining certain macros that the ISO
971           standard doesn't call for; this is to avoid interfering with any
972           programs that might use these names for other things.
973
974           Functions that would normally be built in but do not have semantics
975           defined by ISO C (such as "alloca" and "ffs") are not built-in
976           functions when -ansi is used.
977
978       -std=
979           Determine the language standard.   This option is currently only
980           supported when compiling C or C++.
981
982           The compiler can accept several base standards, such as c89 or
983           c++98, and GNU dialects of those standards, such as gnu89 or
984           gnu++98.  By specifying a base standard, the compiler will accept
985           all programs following that standard and those using GNU extensions
986           that do not contradict it.  For example, -std=c89 turns off certain
987           features of GCC that are incompatible with ISO C90, such as the
988           "asm" and "typeof" keywords, but not other GNU extensions that do
989           not have a meaning in ISO C90, such as omitting the middle term of
990           a "?:" expression. On the other hand, by specifying a GNU dialect
991           of a standard, all features the compiler support are enabled, even
992           when those features change the meaning of the base standard and
993           some strict-conforming programs may be rejected.  The particular
994           standard is used by -pedantic to identify which features are GNU
995           extensions given that version of the standard. For example
996           -std=gnu89 -pedantic would warn about C++ style // comments, while
997           -std=gnu99 -pedantic would not.
998
999           A value for this option must be provided; possible values are
1000
1001           c89
1002           iso9899:1990
1003               Support all ISO C90 programs (certain GNU extensions that
1004               conflict with ISO C90 are disabled). Same as -ansi for C code.
1005
1006           iso9899:199409
1007               ISO C90 as modified in amendment 1.
1008
1009           c99
1010           c9x
1011           iso9899:1999
1012           iso9899:199x
1013               ISO C99.  Note that this standard is not yet fully supported;
1014               see <http://gcc.gnu.org/gcc-4.4/c99status.html> for more
1015               information.  The names c9x and iso9899:199x are deprecated.
1016
1017           gnu89
1018               GNU dialect of ISO C90 (including some C99 features). This is
1019               the default for C code.
1020
1021           gnu99
1022           gnu9x
1023               GNU dialect of ISO C99.  When ISO C99 is fully implemented in
1024               GCC, this will become the default.  The name gnu9x is
1025               deprecated.
1026
1027           c++98
1028               The 1998 ISO C++ standard plus amendments. Same as -ansi for
1029               C++ code.
1030
1031           gnu++98
1032               GNU dialect of -std=c++98.  This is the default for C++ code.
1033
1034           c++0x
1035               The working draft of the upcoming ISO C++0x standard. This
1036               option enables experimental features that are likely to be
1037               included in C++0x. The working draft is constantly changing,
1038               and any feature that is enabled by this flag may be removed
1039               from future versions of GCC if it is not part of the C++0x
1040               standard.
1041
1042           gnu++0x
1043               GNU dialect of -std=c++0x. This option enables experimental
1044               features that may be removed in future versions of GCC.
1045
1046       -fgnu89-inline
1047           The option -fgnu89-inline tells GCC to use the traditional GNU
1048           semantics for "inline" functions when in C99 mode.
1049             This option is accepted and ignored by GCC versions 4.1.3 up to
1050           but not including 4.3.  In GCC versions 4.3 and later it changes
1051           the behavior of GCC in C99 mode.  Using this option is roughly
1052           equivalent to adding the "gnu_inline" function attribute to all
1053           inline functions.
1054
1055           The option -fno-gnu89-inline explicitly tells GCC to use the C99
1056           semantics for "inline" when in C99 or gnu99 mode (i.e., it
1057           specifies the default behavior).  This option was first supported
1058           in GCC 4.3.  This option is not supported in C89 or gnu89 mode.
1059
1060           The preprocessor macros "__GNUC_GNU_INLINE__" and
1061           "__GNUC_STDC_INLINE__" may be used to check which semantics are in
1062           effect for "inline" functions.
1063
1064       -aux-info filename
1065           Output to the given filename prototyped declarations for all
1066           functions declared and/or defined in a translation unit, including
1067           those in header files.  This option is silently ignored in any
1068           language other than C.
1069
1070           Besides declarations, the file indicates, in comments, the origin
1071           of each declaration (source file and line), whether the declaration
1072           was implicit, prototyped or unprototyped (I, N for new or O for
1073           old, respectively, in the first character after the line number and
1074           the colon), and whether it came from a declaration or a definition
1075           (C or F, respectively, in the following character).  In the case of
1076           function definitions, a K&R-style list of arguments followed by
1077           their declarations is also provided, inside comments, after the
1078           declaration.
1079
1080       -fno-asm
1081           Do not recognize "asm", "inline" or "typeof" as a keyword, so that
1082           code can use these words as identifiers.  You can use the keywords
1083           "__asm__", "__inline__" and "__typeof__" instead.  -ansi implies
1084           -fno-asm.
1085
1086           In C++, this switch only affects the "typeof" keyword, since "asm"
1087           and "inline" are standard keywords.  You may want to use the
1088           -fno-gnu-keywords flag instead, which has the same effect.  In C99
1089           mode (-std=c99 or -std=gnu99), this switch only affects the "asm"
1090           and "typeof" keywords, since "inline" is a standard keyword in ISO
1091           C99.
1092
1093       -fno-builtin
1094       -fno-builtin-function
1095           Don't recognize built-in functions that do not begin with
1096           __builtin_ as prefix.
1097
1098           GCC normally generates special code to handle certain built-in
1099           functions more efficiently; for instance, calls to "alloca" may
1100           become single instructions that adjust the stack directly, and
1101           calls to "memcpy" may become inline copy loops.  The resulting code
1102           is often both smaller and faster, but since the function calls no
1103           longer appear as such, you cannot set a breakpoint on those calls,
1104           nor can you change the behavior of the functions by linking with a
1105           different library.  In addition, when a function is recognized as a
1106           built-in function, GCC may use information about that function to
1107           warn about problems with calls to that function, or to generate
1108           more efficient code, even if the resulting code still contains
1109           calls to that function.  For example, warnings are given with
1110           -Wformat for bad calls to "printf", when "printf" is built in, and
1111           "strlen" is known not to modify global memory.
1112
1113           With the -fno-builtin-function option only the built-in function
1114           function is disabled.  function must not begin with __builtin_.  If
1115           a function is named that is not built-in in this version of GCC,
1116           this option is ignored.  There is no corresponding
1117           -fbuiltin-function option; if you wish to enable built-in functions
1118           selectively when using -fno-builtin or -ffreestanding, you may
1119           define macros such as:
1120
1121                   #define abs(n)          __builtin_abs ((n))
1122                   #define strcpy(d, s)    __builtin_strcpy ((d), (s))
1123
1124       -fhosted
1125           Assert that compilation takes place in a hosted environment.  This
1126           implies -fbuiltin.  A hosted environment is one in which the entire
1127           standard library is available, and in which "main" has a return
1128           type of "int".  Examples are nearly everything except a kernel.
1129           This is equivalent to -fno-freestanding.
1130
1131       -ffreestanding
1132           Assert that compilation takes place in a freestanding environment.
1133           This implies -fno-builtin.  A freestanding environment is one in
1134           which the standard library may not exist, and program startup may
1135           not necessarily be at "main".  The most obvious example is an OS
1136           kernel.  This is equivalent to -fno-hosted.
1137
1138       -fopenmp
1139           Enable handling of OpenMP directives "#pragma omp" in C/C++ and
1140           "!$omp" in Fortran.  When -fopenmp is specified, the compiler
1141           generates parallel code according to the OpenMP Application Program
1142           Interface v2.5 <http://www.openmp.org/>.  This option implies
1143           -pthread, and thus is only supported on targets that have support
1144           for -pthread.
1145
1146       -fms-extensions
1147           Accept some non-standard constructs used in Microsoft header files.
1148
1149           Some cases of unnamed fields in structures and unions are only
1150           accepted with this option.
1151
1152       -trigraphs
1153           Support ISO C trigraphs.  The -ansi option (and -std options for
1154           strict ISO C conformance) implies -trigraphs.
1155
1156       -no-integrated-cpp
1157           Performs a compilation in two passes: preprocessing and compiling.
1158           This option allows a user supplied "cc1", "cc1plus", or "cc1obj"
1159           via the -B option.  The user supplied compilation step can then add
1160           in an additional preprocessing step after normal preprocessing but
1161           before compiling.  The default is to use the integrated cpp
1162           (internal cpp)
1163
1164           The semantics of this option will change if "cc1", "cc1plus", and
1165           "cc1obj" are merged.
1166
1167       -traditional
1168       -traditional-cpp
1169           Formerly, these options caused GCC to attempt to emulate a pre-
1170           standard C compiler.  They are now only supported with the -E
1171           switch.  The preprocessor continues to support a pre-standard mode.
1172           See the GNU CPP manual for details.
1173
1174       -fcond-mismatch
1175           Allow conditional expressions with mismatched types in the second
1176           and third arguments.  The value of such an expression is void.
1177           This option is not supported for C++.
1178
1179       -flax-vector-conversions
1180           Allow implicit conversions between vectors with differing numbers
1181           of elements and/or incompatible element types.  This option should
1182           not be used for new code.
1183
1184       -funsigned-char
1185           Let the type "char" be unsigned, like "unsigned char".
1186
1187           Each kind of machine has a default for what "char" should be.  It
1188           is either like "unsigned char" by default or like "signed char" by
1189           default.
1190
1191           Ideally, a portable program should always use "signed char" or
1192           "unsigned char" when it depends on the signedness of an object.
1193           But many programs have been written to use plain "char" and expect
1194           it to be signed, or expect it to be unsigned, depending on the
1195           machines they were written for.  This option, and its inverse, let
1196           you make such a program work with the opposite default.
1197
1198           The type "char" is always a distinct type from each of "signed
1199           char" or "unsigned char", even though its behavior is always just
1200           like one of those two.
1201
1202       -fsigned-char
1203           Let the type "char" be signed, like "signed char".
1204
1205           Note that this is equivalent to -fno-unsigned-char, which is the
1206           negative form of -funsigned-char.  Likewise, the option
1207           -fno-signed-char is equivalent to -funsigned-char.
1208
1209       -fsigned-bitfields
1210       -funsigned-bitfields
1211       -fno-signed-bitfields
1212       -fno-unsigned-bitfields
1213           These options control whether a bit-field is signed or unsigned,
1214           when the declaration does not use either "signed" or "unsigned".
1215           By default, such a bit-field is signed, because this is consistent:
1216           the basic integer types such as "int" are signed types.
1217
1218   Options Controlling C++ Dialect
1219       This section describes the command-line options that are only
1220       meaningful for C++ programs; but you can also use most of the GNU
1221       compiler options regardless of what language your program is in.  For
1222       example, you might compile a file "firstClass.C" like this:
1223
1224               g++ -g -frepo -O -c firstClass.C
1225
1226       In this example, only -frepo is an option meant only for C++ programs;
1227       you can use the other options with any language supported by GCC.
1228
1229       Here is a list of options that are only for compiling C++ programs:
1230
1231       -fabi-version=n
1232           Use version n of the C++ ABI.  Version 2 is the version of the C++
1233           ABI that first appeared in G++ 3.4.  Version 1 is the version of
1234           the C++ ABI that first appeared in G++ 3.2.  Version 0 will always
1235           be the version that conforms most closely to the C++ ABI
1236           specification.  Therefore, the ABI obtained using version 0 will
1237           change as ABI bugs are fixed.
1238
1239           The default is version 2.
1240
1241       -fno-access-control
1242           Turn off all access checking.  This switch is mainly useful for
1243           working around bugs in the access control code.
1244
1245       -fcheck-new
1246           Check that the pointer returned by "operator new" is non-null
1247           before attempting to modify the storage allocated.  This check is
1248           normally unnecessary because the C++ standard specifies that
1249           "operator new" will only return 0 if it is declared throw(), in
1250           which case the compiler will always check the return value even
1251           without this option.  In all other cases, when "operator new" has a
1252           non-empty exception specification, memory exhaustion is signalled
1253           by throwing "std::bad_alloc".  See also new (nothrow).
1254
1255       -fconserve-space
1256           Put uninitialized or runtime-initialized global variables into the
1257           common segment, as C does.  This saves space in the executable at
1258           the cost of not diagnosing duplicate definitions.  If you compile
1259           with this flag and your program mysteriously crashes after "main()"
1260           has completed, you may have an object that is being destroyed twice
1261           because two definitions were merged.
1262
1263           This option is no longer useful on most targets, now that support
1264           has been added for putting variables into BSS without making them
1265           common.
1266
1267       -fno-deduce-init-list
1268           Disable deduction of a template type parameter as
1269           std::initializer_list from a brace-enclosed initializer list, i.e.
1270
1271                   template <class T> auto forward(T t) -> decltype (realfn (t))
1272                   {
1273                     return realfn (t);
1274                   }
1275
1276                   void f()
1277                   {
1278                     forward({1,2}); // call forward<std::initializer_list<int>>
1279                   }
1280
1281           This option is present because this deduction is an extension to
1282           the current specification in the C++0x working draft, and there was
1283           some concern about potential overload resolution problems.
1284
1285       -ffriend-injection
1286           Inject friend functions into the enclosing namespace, so that they
1287           are visible outside the scope of the class in which they are
1288           declared.  Friend functions were documented to work this way in the
1289           old Annotated C++ Reference Manual, and versions of G++ before 4.1
1290           always worked that way.  However, in ISO C++ a friend function
1291           which is not declared in an enclosing scope can only be found using
1292           argument dependent lookup.  This option causes friends to be
1293           injected as they were in earlier releases.
1294
1295           This option is for compatibility, and may be removed in a future
1296           release of G++.
1297
1298       -fno-elide-constructors
1299           The C++ standard allows an implementation to omit creating a
1300           temporary which is only used to initialize another object of the
1301           same type.  Specifying this option disables that optimization, and
1302           forces G++ to call the copy constructor in all cases.
1303
1304       -fno-enforce-eh-specs
1305           Don't generate code to check for violation of exception
1306           specifications at runtime.  This option violates the C++ standard,
1307           but may be useful for reducing code size in production builds, much
1308           like defining NDEBUG.  This does not give user code permission to
1309           throw exceptions in violation of the exception specifications; the
1310           compiler will still optimize based on the specifications, so
1311           throwing an unexpected exception will result in undefined behavior.
1312
1313       -ffor-scope
1314       -fno-for-scope
1315           If -ffor-scope is specified, the scope of variables declared in a
1316           for-init-statement is limited to the for loop itself, as specified
1317           by the C++ standard.  If -fno-for-scope is specified, the scope of
1318           variables declared in a for-init-statement extends to the end of
1319           the enclosing scope, as was the case in old versions of G++, and
1320           other (traditional) implementations of C++.
1321
1322           The default if neither flag is given to follow the standard, but to
1323           allow and give a warning for old-style code that would otherwise be
1324           invalid, or have different behavior.
1325
1326       -fno-gnu-keywords
1327           Do not recognize "typeof" as a keyword, so that code can use this
1328           word as an identifier.  You can use the keyword "__typeof__"
1329           instead.  -ansi implies -fno-gnu-keywords.
1330
1331       -fno-implicit-templates
1332           Never emit code for non-inline templates which are instantiated
1333           implicitly (i.e. by use); only emit code for explicit
1334           instantiations.
1335
1336       -fno-implicit-inline-templates
1337           Don't emit code for implicit instantiations of inline templates,
1338           either.  The default is to handle inlines differently so that
1339           compiles with and without optimization will need the same set of
1340           explicit instantiations.
1341
1342       -fno-implement-inlines
1343           To save space, do not emit out-of-line copies of inline functions
1344           controlled by #pragma implementation.  This will cause linker
1345           errors if these functions are not inlined everywhere they are
1346           called.
1347
1348       -fms-extensions
1349           Disable pedantic warnings about constructs used in MFC, such as
1350           implicit int and getting a pointer to member function via non-
1351           standard syntax.
1352
1353       -fno-nonansi-builtins
1354           Disable built-in declarations of functions that are not mandated by
1355           ANSI/ISO C.  These include "ffs", "alloca", "_exit", "index",
1356           "bzero", "conjf", and other related functions.
1357
1358       -fno-operator-names
1359           Do not treat the operator name keywords "and", "bitand", "bitor",
1360           "compl", "not", "or" and "xor" as synonyms as keywords.
1361
1362       -fno-optional-diags
1363           Disable diagnostics that the standard says a compiler does not need
1364           to issue.  Currently, the only such diagnostic issued by G++ is the
1365           one for a name having multiple meanings within a class.
1366
1367       -fpermissive
1368           Downgrade some diagnostics about nonconformant code from errors to
1369           warnings.  Thus, using -fpermissive will allow some nonconforming
1370           code to compile.
1371
1372       -frepo
1373           Enable automatic template instantiation at link time.  This option
1374           also implies -fno-implicit-templates.
1375
1376       -fno-rtti
1377           Disable generation of information about every class with virtual
1378           functions for use by the C++ runtime type identification features
1379           (dynamic_cast and typeid).  If you don't use those parts of the
1380           language, you can save some space by using this flag.  Note that
1381           exception handling uses the same information, but it will generate
1382           it as needed. The dynamic_cast operator can still be used for casts
1383           that do not require runtime type information, i.e. casts to "void
1384           *" or to unambiguous base classes.
1385
1386       -fstats
1387           Emit statistics about front-end processing at the end of the
1388           compilation.  This information is generally only useful to the G++
1389           development team.
1390
1391       -fstrict-enums
1392           Allow the compiler to optimize using the assumption that a value of
1393           enumeration type can only be one of the values of the enumeration
1394           (as defined in the C++ standard; basically, a value which can be
1395           represented in the minimum number of bits needed to represent all
1396           the enumerators).  This assumption may not be valid if the program
1397           uses a cast to convert an arbitrary integer value to the
1398           enumeration type.
1399
1400       -ftemplate-depth-n
1401           Set the maximum instantiation depth for template classes to n.  A
1402           limit on the template instantiation depth is needed to detect
1403           endless recursions during template class instantiation.  ANSI/ISO
1404           C++ conforming programs must not rely on a maximum depth greater
1405           than 17.
1406
1407       -fno-threadsafe-statics
1408           Do not emit the extra code to use the routines specified in the C++
1409           ABI for thread-safe initialization of local statics.  You can use
1410           this option to reduce code size slightly in code that doesn't need
1411           to be thread-safe.
1412
1413       -fuse-cxa-atexit
1414           Register destructors for objects with static storage duration with
1415           the "__cxa_atexit" function rather than the "atexit" function.
1416           This option is required for fully standards-compliant handling of
1417           static destructors, but will only work if your C library supports
1418           "__cxa_atexit".
1419
1420       -fno-use-cxa-get-exception-ptr
1421           Don't use the "__cxa_get_exception_ptr" runtime routine.  This will
1422           cause "std::uncaught_exception" to be incorrect, but is necessary
1423           if the runtime routine is not available.
1424
1425       -fvisibility-inlines-hidden
1426           This switch declares that the user does not attempt to compare
1427           pointers to inline methods where the addresses of the two functions
1428           were taken in different shared objects.
1429
1430           The effect of this is that GCC may, effectively, mark inline
1431           methods with "__attribute__ ((visibility ("hidden")))" so that they
1432           do not appear in the export table of a DSO and do not require a PLT
1433           indirection when used within the DSO.  Enabling this option can
1434           have a dramatic effect on load and link times of a DSO as it
1435           massively reduces the size of the dynamic export table when the
1436           library makes heavy use of templates.
1437
1438           The behavior of this switch is not quite the same as marking the
1439           methods as hidden directly, because it does not affect static
1440           variables local to the function or cause the compiler to deduce
1441           that the function is defined in only one shared object.
1442
1443           You may mark a method as having a visibility explicitly to negate
1444           the effect of the switch for that method.  For example, if you do
1445           want to compare pointers to a particular inline method, you might
1446           mark it as having default visibility.  Marking the enclosing class
1447           with explicit visibility will have no effect.
1448
1449           Explicitly instantiated inline methods are unaffected by this
1450           option as their linkage might otherwise cross a shared library
1451           boundary.
1452
1453       -fvisibility-ms-compat
1454           This flag attempts to use visibility settings to make GCC's C++
1455           linkage model compatible with that of Microsoft Visual Studio.
1456
1457           The flag makes these changes to GCC's linkage model:
1458
1459           1.  It sets the default visibility to "hidden", like
1460               -fvisibility=hidden.
1461
1462           2.  Types, but not their members, are not hidden by default.
1463
1464           3.  The One Definition Rule is relaxed for types without explicit
1465               visibility specifications which are defined in more than one
1466               different shared object: those declarations are permitted if
1467               they would have been permitted when this option was not used.
1468
1469           In new code it is better to use -fvisibility=hidden and export
1470           those classes which are intended to be externally visible.
1471           Unfortunately it is possible for code to rely, perhaps
1472           accidentally, on the Visual Studio behavior.
1473
1474           Among the consequences of these changes are that static data
1475           members of the same type with the same name but defined in
1476           different shared objects will be different, so changing one will
1477           not change the other; and that pointers to function members defined
1478           in different shared objects may not compare equal.  When this flag
1479           is given, it is a violation of the ODR to define types with the
1480           same name differently.
1481
1482       -fno-weak
1483           Do not use weak symbol support, even if it is provided by the
1484           linker.  By default, G++ will use weak symbols if they are
1485           available.  This option exists only for testing, and should not be
1486           used by end-users; it will result in inferior code and has no
1487           benefits.  This option may be removed in a future release of G++.
1488
1489       -nostdinc++
1490           Do not search for header files in the standard directories specific
1491           to C++, but do still search the other standard directories.  (This
1492           option is used when building the C++ library.)
1493
1494       In addition, these optimization, warning, and code generation options
1495       have meanings only for C++ programs:
1496
1497       -fno-default-inline
1498           Do not assume inline for functions defined inside a class scope.
1499             Note that these functions will have linkage like inline
1500           functions; they just won't be inlined by default.
1501
1502       -Wabi (C, Objective-C, C++ and Objective-C++ only)
1503           Warn when G++ generates code that is probably not compatible with
1504           the vendor-neutral C++ ABI.  Although an effort has been made to
1505           warn about all such cases, there are probably some cases that are
1506           not warned about, even though G++ is generating incompatible code.
1507           There may also be cases where warnings are emitted even though the
1508           code that is generated will be compatible.
1509
1510           You should rewrite your code to avoid these warnings if you are
1511           concerned about the fact that code generated by G++ may not be
1512           binary compatible with code generated by other compilers.
1513
1514           The known incompatibilities at this point include:
1515
1516           ·   Incorrect handling of tail-padding for bit-fields.  G++ may
1517               attempt to pack data into the same byte as a base class.  For
1518               example:
1519
1520                       struct A { virtual void f(); int f1 : 1; };
1521                       struct B : public A { int f2 : 1; };
1522
1523               In this case, G++ will place "B::f2" into the same byte
1524               as"A::f1"; other compilers will not.  You can avoid this
1525               problem by explicitly padding "A" so that its size is a
1526               multiple of the byte size on your platform; that will cause G++
1527               and other compilers to layout "B" identically.
1528
1529           ·   Incorrect handling of tail-padding for virtual bases.  G++ does
1530               not use tail padding when laying out virtual bases.  For
1531               example:
1532
1533                       struct A { virtual void f(); char c1; };
1534                       struct B { B(); char c2; };
1535                       struct C : public A, public virtual B {};
1536
1537               In this case, G++ will not place "B" into the tail-padding for
1538               "A"; other compilers will.  You can avoid this problem by
1539               explicitly padding "A" so that its size is a multiple of its
1540               alignment (ignoring virtual base classes); that will cause G++
1541               and other compilers to layout "C" identically.
1542
1543           ·   Incorrect handling of bit-fields with declared widths greater
1544               than that of their underlying types, when the bit-fields appear
1545               in a union.  For example:
1546
1547                       union U { int i : 4096; };
1548
1549               Assuming that an "int" does not have 4096 bits, G++ will make
1550               the union too small by the number of bits in an "int".
1551
1552           ·   Empty classes can be placed at incorrect offsets.  For example:
1553
1554                       struct A {};
1555
1556                       struct B {
1557                         A a;
1558                         virtual void f ();
1559                       };
1560
1561                       struct C : public B, public A {};
1562
1563               G++ will place the "A" base class of "C" at a nonzero offset;
1564               it should be placed at offset zero.  G++ mistakenly believes
1565               that the "A" data member of "B" is already at offset zero.
1566
1567           ·   Names of template functions whose types involve "typename" or
1568               template template parameters can be mangled incorrectly.
1569
1570                       template <typename Q>
1571                       void f(typename Q::X) {}
1572
1573                       template <template <typename> class Q>
1574                       void f(typename Q<int>::X) {}
1575
1576               Instantiations of these templates may be mangled incorrectly.
1577
1578           It also warns psABI related changes.  The known psABI changes at
1579           this point include:
1580
1581           ·   For SYSV/x86-64, when passing union with long double, it is
1582               changed to pass in memory as specified in psABI.  For example:
1583
1584                       union U {
1585                         long double ld;
1586                         int i;
1587                       };
1588
1589               "union U" will always be passed in memory.
1590
1591       -Wctor-dtor-privacy (C++ and Objective-C++ only)
1592           Warn when a class seems unusable because all the constructors or
1593           destructors in that class are private, and it has neither friends
1594           nor public static member functions.
1595
1596       -Wnon-virtual-dtor (C++ and Objective-C++ only)
1597           Warn when a class has virtual functions and accessible non-virtual
1598           destructor, in which case it would be possible but unsafe to delete
1599           an instance of a derived class through a pointer to the base class.
1600           This warning is also enabled if -Weffc++ is specified.
1601
1602       -Wreorder (C++ and Objective-C++ only)
1603           Warn when the order of member initializers given in the code does
1604           not match the order in which they must be executed.  For instance:
1605
1606                   struct A {
1607                     int i;
1608                     int j;
1609                     A(): j (0), i (1) { }
1610                   };
1611
1612           The compiler will rearrange the member initializers for i and j to
1613           match the declaration order of the members, emitting a warning to
1614           that effect.  This warning is enabled by -Wall.
1615
1616       The following -W... options are not affected by -Wall.
1617
1618       -Weffc++ (C++ and Objective-C++ only)
1619           Warn about violations of the following style guidelines from Scott
1620           Meyers' Effective C++ book:
1621
1622           ·   Item 11:  Define a copy constructor and an assignment operator
1623               for classes with dynamically allocated memory.
1624
1625           ·   Item 12:  Prefer initialization to assignment in constructors.
1626
1627           ·   Item 14:  Make destructors virtual in base classes.
1628
1629           ·   Item 15:  Have "operator=" return a reference to *this.
1630
1631           ·   Item 23:  Don't try to return a reference when you must return
1632               an object.
1633
1634           Also warn about violations of the following style guidelines from
1635           Scott Meyers' More Effective C++ book:
1636
1637           ·   Item 6:  Distinguish between prefix and postfix forms of
1638               increment and decrement operators.
1639
1640           ·   Item 7:  Never overload "&&", "||", or ",".
1641
1642           When selecting this option, be aware that the standard library
1643           headers do not obey all of these guidelines; use grep -v to filter
1644           out those warnings.
1645
1646       -Wstrict-null-sentinel (C++ and Objective-C++ only)
1647           Warn also about the use of an uncasted "NULL" as sentinel.  When
1648           compiling only with GCC this is a valid sentinel, as "NULL" is
1649           defined to "__null".  Although it is a null pointer constant not a
1650           null pointer, it is guaranteed to be of the same size as a pointer.
1651           But this use is not portable across different compilers.
1652
1653       -Wno-non-template-friend (C++ and Objective-C++ only)
1654           Disable warnings when non-templatized friend functions are declared
1655           within a template.  Since the advent of explicit template
1656           specification support in G++, if the name of the friend is an
1657           unqualified-id (i.e., friend foo(int)), the C++ language
1658           specification demands that the friend declare or define an
1659           ordinary, nontemplate function.  (Section 14.5.3).  Before G++
1660           implemented explicit specification, unqualified-ids could be
1661           interpreted as a particular specialization of a templatized
1662           function.  Because this non-conforming behavior is no longer the
1663           default behavior for G++, -Wnon-template-friend allows the compiler
1664           to check existing code for potential trouble spots and is on by
1665           default.  This new compiler behavior can be turned off with
1666           -Wno-non-template-friend which keeps the conformant compiler code
1667           but disables the helpful warning.
1668
1669       -Wold-style-cast (C++ and Objective-C++ only)
1670           Warn if an old-style (C-style) cast to a non-void type is used
1671           within a C++ program.  The new-style casts (dynamic_cast,
1672           static_cast, reinterpret_cast, and const_cast) are less vulnerable
1673           to unintended effects and much easier to search for.
1674
1675       -Woverloaded-virtual (C++ and Objective-C++ only)
1676           Warn when a function declaration hides virtual functions from a
1677           base class.  For example, in:
1678
1679                   struct A {
1680                     virtual void f();
1681                   };
1682
1683                   struct B: public A {
1684                     void f(int);
1685                   };
1686
1687           the "A" class version of "f" is hidden in "B", and code like:
1688
1689                   B* b;
1690                   b->f();
1691
1692           will fail to compile.
1693
1694       -Wno-pmf-conversions (C++ and Objective-C++ only)
1695           Disable the diagnostic for converting a bound pointer to member
1696           function to a plain pointer.
1697
1698       -Wsign-promo (C++ and Objective-C++ only)
1699           Warn when overload resolution chooses a promotion from unsigned or
1700           enumerated type to a signed type, over a conversion to an unsigned
1701           type of the same size.  Previous versions of G++ would try to
1702           preserve unsignedness, but the standard mandates the current
1703           behavior.
1704
1705                   struct A {
1706                     operator int ();
1707                     A& operator = (int);
1708                   };
1709
1710                   main ()
1711                   {
1712                     A a,b;
1713                     a = b;
1714                   }
1715
1716           In this example, G++ will synthesize a default A& operator = (const
1717           A&);, while cfront will use the user-defined operator =.
1718
1719   Options Controlling Objective-C and Objective-C++ Dialects
1720       (NOTE: This manual does not describe the Objective-C and Objective-C++
1721       languages themselves.  See
1722
1723       This section describes the command-line options that are only
1724       meaningful for Objective-C and Objective-C++ programs, but you can also
1725       use most of the language-independent GNU compiler options.  For
1726       example, you might compile a file "some_class.m" like this:
1727
1728               gcc -g -fgnu-runtime -O -c some_class.m
1729
1730       In this example, -fgnu-runtime is an option meant only for Objective-C
1731       and Objective-C++ programs; you can use the other options with any
1732       language supported by GCC.
1733
1734       Note that since Objective-C is an extension of the C language,
1735       Objective-C compilations may also use options specific to the C front-
1736       end (e.g., -Wtraditional).  Similarly, Objective-C++ compilations may
1737       use C++-specific options (e.g., -Wabi).
1738
1739       Here is a list of options that are only for compiling Objective-C and
1740       Objective-C++ programs:
1741
1742       -fconstant-string-class=class-name
1743           Use class-name as the name of the class to instantiate for each
1744           literal string specified with the syntax "@"..."".  The default
1745           class name is "NXConstantString" if the GNU runtime is being used,
1746           and "NSConstantString" if the NeXT runtime is being used (see
1747           below).  The -fconstant-cfstrings option, if also present, will
1748           override the -fconstant-string-class setting and cause "@"...""
1749           literals to be laid out as constant CoreFoundation strings.
1750
1751       -fgnu-runtime
1752           Generate object code compatible with the standard GNU Objective-C
1753           runtime.  This is the default for most types of systems.
1754
1755       -fnext-runtime
1756           Generate output compatible with the NeXT runtime.  This is the
1757           default for NeXT-based systems, including Darwin and Mac OS X.  The
1758           macro "__NEXT_RUNTIME__" is predefined if (and only if) this option
1759           is used.
1760
1761       -fno-nil-receivers
1762           Assume that all Objective-C message dispatches (e.g., "[receiver
1763           message:arg]") in this translation unit ensure that the receiver is
1764           not "nil".  This allows for more efficient entry points in the
1765           runtime to be used.  Currently, this option is only available in
1766           conjunction with the NeXT runtime on Mac OS X 10.3 and later.
1767
1768       -fobjc-call-cxx-cdtors
1769           For each Objective-C class, check if any of its instance variables
1770           is a C++ object with a non-trivial default constructor.  If so,
1771           synthesize a special "- (id) .cxx_construct" instance method that
1772           will run non-trivial default constructors on any such instance
1773           variables, in order, and then return "self".  Similarly, check if
1774           any instance variable is a C++ object with a non-trivial
1775           destructor, and if so, synthesize a special "- (void)
1776           .cxx_destruct" method that will run all such default destructors,
1777           in reverse order.
1778
1779           The "- (id) .cxx_construct" and/or "- (void) .cxx_destruct" methods
1780           thusly generated will only operate on instance variables declared
1781           in the current Objective-C class, and not those inherited from
1782           superclasses.  It is the responsibility of the Objective-C runtime
1783           to invoke all such methods in an object's inheritance hierarchy.
1784           The "- (id) .cxx_construct" methods will be invoked by the runtime
1785           immediately after a new object instance is allocated; the "- (void)
1786           .cxx_destruct" methods will be invoked immediately before the
1787           runtime deallocates an object instance.
1788
1789           As of this writing, only the NeXT runtime on Mac OS X 10.4 and
1790           later has support for invoking the "- (id) .cxx_construct" and "-
1791           (void) .cxx_destruct" methods.
1792
1793       -fobjc-direct-dispatch
1794           Allow fast jumps to the message dispatcher.  On Darwin this is
1795           accomplished via the comm page.
1796
1797       -fobjc-exceptions
1798           Enable syntactic support for structured exception handling in
1799           Objective-C, similar to what is offered by C++ and Java.  This
1800           option is unavailable in conjunction with the NeXT runtime on Mac
1801           OS X 10.2 and earlier.
1802
1803                     @try {
1804                       ...
1805                          @throw expr;
1806                       ...
1807                     }
1808                     @catch (AnObjCClass *exc) {
1809                       ...
1810                         @throw expr;
1811                       ...
1812                         @throw;
1813                       ...
1814                     }
1815                     @catch (AnotherClass *exc) {
1816                       ...
1817                     }
1818                     @catch (id allOthers) {
1819                       ...
1820                     }
1821                     @finally {
1822                       ...
1823                         @throw expr;
1824                       ...
1825                     }
1826
1827           The @throw statement may appear anywhere in an Objective-C or
1828           Objective-C++ program; when used inside of a @catch block, the
1829           @throw may appear without an argument (as shown above), in which
1830           case the object caught by the @catch will be rethrown.
1831
1832           Note that only (pointers to) Objective-C objects may be thrown and
1833           caught using this scheme.  When an object is thrown, it will be
1834           caught by the nearest @catch clause capable of handling objects of
1835           that type, analogously to how "catch" blocks work in C++ and Java.
1836           A "@catch(id ...)" clause (as shown above) may also be provided to
1837           catch any and all Objective-C exceptions not caught by previous
1838           @catch clauses (if any).
1839
1840           The @finally clause, if present, will be executed upon exit from
1841           the immediately preceding "@try ... @catch" section.  This will
1842           happen regardless of whether any exceptions are thrown, caught or
1843           rethrown inside the "@try ... @catch" section, analogously to the
1844           behavior of the "finally" clause in Java.
1845
1846           There are several caveats to using the new exception mechanism:
1847
1848           ·   Although currently designed to be binary compatible with
1849               "NS_HANDLER"-style idioms provided by the "NSException" class,
1850               the new exceptions can only be used on Mac OS X 10.3 (Panther)
1851               and later systems, due to additional functionality needed in
1852               the (NeXT) Objective-C runtime.
1853
1854           ·   As mentioned above, the new exceptions do not support handling
1855               types other than Objective-C objects.   Furthermore, when used
1856               from Objective-C++, the Objective-C exception model does not
1857               interoperate with C++ exceptions at this time.  This means you
1858               cannot @throw an exception from Objective-C and "catch" it in
1859               C++, or vice versa (i.e., "throw ... @catch").
1860
1861           The -fobjc-exceptions switch also enables the use of
1862           synchronization blocks for thread-safe execution:
1863
1864                     @synchronized (ObjCClass *guard) {
1865                       ...
1866                     }
1867
1868           Upon entering the @synchronized block, a thread of execution shall
1869           first check whether a lock has been placed on the corresponding
1870           "guard" object by another thread.  If it has, the current thread
1871           shall wait until the other thread relinquishes its lock.  Once
1872           "guard" becomes available, the current thread will place its own
1873           lock on it, execute the code contained in the @synchronized block,
1874           and finally relinquish the lock (thereby making "guard" available
1875           to other threads).
1876
1877           Unlike Java, Objective-C does not allow for entire methods to be
1878           marked @synchronized.  Note that throwing exceptions out of
1879           @synchronized blocks is allowed, and will cause the guarding object
1880           to be unlocked properly.
1881
1882       -fobjc-gc
1883           Enable garbage collection (GC) in Objective-C and Objective-C++
1884           programs.
1885
1886       -freplace-objc-classes
1887           Emit a special marker instructing ld(1) not to statically link in
1888           the resulting object file, and allow dyld(1) to load it in at run
1889           time instead.  This is used in conjunction with the Fix-and-
1890           Continue debugging mode, where the object file in question may be
1891           recompiled and dynamically reloaded in the course of program
1892           execution, without the need to restart the program itself.
1893           Currently, Fix-and-Continue functionality is only available in
1894           conjunction with the NeXT runtime on Mac OS X 10.3 and later.
1895
1896       -fzero-link
1897           When compiling for the NeXT runtime, the compiler ordinarily
1898           replaces calls to "objc_getClass("...")" (when the name of the
1899           class is known at compile time) with static class references that
1900           get initialized at load time, which improves run-time performance.
1901           Specifying the -fzero-link flag suppresses this behavior and causes
1902           calls to "objc_getClass("...")"  to be retained.  This is useful in
1903           Zero-Link debugging mode, since it allows for individual class
1904           implementations to be modified during program execution.
1905
1906       -gen-decls
1907           Dump interface declarations for all classes seen in the source file
1908           to a file named sourcename.decl.
1909
1910       -Wassign-intercept (Objective-C and Objective-C++ only)
1911           Warn whenever an Objective-C assignment is being intercepted by the
1912           garbage collector.
1913
1914       -Wno-protocol (Objective-C and Objective-C++ only)
1915           If a class is declared to implement a protocol, a warning is issued
1916           for every method in the protocol that is not implemented by the
1917           class.  The default behavior is to issue a warning for every method
1918           not explicitly implemented in the class, even if a method
1919           implementation is inherited from the superclass.  If you use the
1920           -Wno-protocol option, then methods inherited from the superclass
1921           are considered to be implemented, and no warning is issued for
1922           them.
1923
1924       -Wselector (Objective-C and Objective-C++ only)
1925           Warn if multiple methods of different types for the same selector
1926           are found during compilation.  The check is performed on the list
1927           of methods in the final stage of compilation.  Additionally, a
1928           check is performed for each selector appearing in a
1929           "@selector(...)"  expression, and a corresponding method for that
1930           selector has been found during compilation.  Because these checks
1931           scan the method table only at the end of compilation, these
1932           warnings are not produced if the final stage of compilation is not
1933           reached, for example because an error is found during compilation,
1934           or because the -fsyntax-only option is being used.
1935
1936       -Wstrict-selector-match (Objective-C and Objective-C++ only)
1937           Warn if multiple methods with differing argument and/or return
1938           types are found for a given selector when attempting to send a
1939           message using this selector to a receiver of type "id" or "Class".
1940           When this flag is off (which is the default behavior), the compiler
1941           will omit such warnings if any differences found are confined to
1942           types which share the same size and alignment.
1943
1944       -Wundeclared-selector (Objective-C and Objective-C++ only)
1945           Warn if a "@selector(...)" expression referring to an undeclared
1946           selector is found.  A selector is considered undeclared if no
1947           method with that name has been declared before the "@selector(...)"
1948           expression, either explicitly in an @interface or @protocol
1949           declaration, or implicitly in an @implementation section.  This
1950           option always performs its checks as soon as a "@selector(...)"
1951           expression is found, while -Wselector only performs its checks in
1952           the final stage of compilation.  This also enforces the coding
1953           style convention that methods and selectors must be declared before
1954           being used.
1955
1956       -print-objc-runtime-info
1957           Generate C header describing the largest structure that is passed
1958           by value, if any.
1959
1960   Options to Control Diagnostic Messages Formatting
1961       Traditionally, diagnostic messages have been formatted irrespective of
1962       the output device's aspect (e.g. its width, ...).  The options
1963       described below can be used to control the diagnostic messages
1964       formatting algorithm, e.g. how many characters per line, how often
1965       source location information should be reported.  Right now, only the
1966       C++ front end can honor these options.  However it is expected, in the
1967       near future, that the remaining front ends would be able to digest them
1968       correctly.
1969
1970       -fmessage-length=n
1971           Try to format error messages so that they fit on lines of about n
1972           characters.  The default is 72 characters for g++ and 0 for the
1973           rest of the front ends supported by GCC.  If n is zero, then no
1974           line-wrapping will be done; each error message will appear on a
1975           single line.
1976
1977       -fdiagnostics-show-location=once
1978           Only meaningful in line-wrapping mode.  Instructs the diagnostic
1979           messages reporter to emit once source location information; that
1980           is, in case the message is too long to fit on a single physical
1981           line and has to be wrapped, the source location won't be emitted
1982           (as prefix) again, over and over, in subsequent continuation lines.
1983           This is the default behavior.
1984
1985       -fdiagnostics-show-location=every-line
1986           Only meaningful in line-wrapping mode.  Instructs the diagnostic
1987           messages reporter to emit the same source location information (as
1988           prefix) for physical lines that result from the process of breaking
1989           a message which is too long to fit on a single line.
1990
1991       -fdiagnostics-show-option
1992           This option instructs the diagnostic machinery to add text to each
1993           diagnostic emitted, which indicates which command line option
1994           directly controls that diagnostic, when such an option is known to
1995           the diagnostic machinery.
1996
1997       -Wcoverage-mismatch
1998           Warn if feedback profiles do not match when using the -fprofile-use
1999           option.  If a source file was changed between -fprofile-gen and
2000           -fprofile-use, the files with the profile feedback can fail to
2001           match the source file and GCC can not use the profile feedback
2002           information.  By default, GCC emits an error message in this case.
2003           The option -Wcoverage-mismatch emits a warning instead of an error.
2004           GCC does not use appropriate feedback profiles, so using this
2005           option can result in poorly optimized code.  This option is useful
2006           only in the case of very minor changes such as bug fixes to an
2007           existing code-base.
2008
2009   Options to Request or Suppress Warnings
2010       Warnings are diagnostic messages that report constructions which are
2011       not inherently erroneous but which are risky or suggest there may have
2012       been an error.
2013
2014       The following language-independent options do not enable specific
2015       warnings but control the kinds of diagnostics produced by GCC.
2016
2017       -fsyntax-only
2018           Check the code for syntax errors, but don't do anything beyond
2019           that.
2020
2021       -w  Inhibit all warning messages.
2022
2023       -Werror
2024           Make all warnings into errors.
2025
2026       -Werror=
2027           Make the specified warning into an error.  The specifier for a
2028           warning is appended, for example -Werror=switch turns the warnings
2029           controlled by -Wswitch into errors.  This switch takes a negative
2030           form, to be used to negate -Werror for specific warnings, for
2031           example -Wno-error=switch makes -Wswitch warnings not be errors,
2032           even when -Werror is in effect.  You can use the
2033           -fdiagnostics-show-option option to have each controllable warning
2034           amended with the option which controls it, to determine what to use
2035           with this option.
2036
2037           Note that specifying -Werror=foo automatically implies -Wfoo.
2038           However, -Wno-error=foo does not imply anything.
2039
2040       -Wfatal-errors
2041           This option causes the compiler to abort compilation on the first
2042           error occurred rather than trying to keep going and printing
2043           further error messages.
2044
2045       You can request many specific warnings with options beginning -W, for
2046       example -Wimplicit to request warnings on implicit declarations.  Each
2047       of these specific warning options also has a negative form beginning
2048       -Wno- to turn off warnings; for example, -Wno-implicit.  This manual
2049       lists only one of the two forms, whichever is not the default.  For
2050       further, language-specific options also refer to C++ Dialect Options
2051       and Objective-C and Objective-C++ Dialect Options.
2052
2053       -pedantic
2054           Issue all the warnings demanded by strict ISO C and ISO C++; reject
2055           all programs that use forbidden extensions, and some other programs
2056           that do not follow ISO C and ISO C++.  For ISO C, follows the
2057           version of the ISO C standard specified by any -std option used.
2058
2059           Valid ISO C and ISO C++ programs should compile properly with or
2060           without this option (though a rare few will require -ansi or a -std
2061           option specifying the required version of ISO C).  However, without
2062           this option, certain GNU extensions and traditional C and C++
2063           features are supported as well.  With this option, they are
2064           rejected.
2065
2066           -pedantic does not cause warning messages for use of the alternate
2067           keywords whose names begin and end with __.  Pedantic warnings are
2068           also disabled in the expression that follows "__extension__".
2069           However, only system header files should use these escape routes;
2070           application programs should avoid them.
2071
2072           Some users try to use -pedantic to check programs for strict ISO C
2073           conformance.  They soon find that it does not do quite what they
2074           want: it finds some non-ISO practices, but not all---only those for
2075           which ISO C requires a diagnostic, and some others for which
2076           diagnostics have been added.
2077
2078           A feature to report any failure to conform to ISO C might be useful
2079           in some instances, but would require considerable additional work
2080           and would be quite different from -pedantic.  We don't have plans
2081           to support such a feature in the near future.
2082
2083           Where the standard specified with -std represents a GNU extended
2084           dialect of C, such as gnu89 or gnu99, there is a corresponding base
2085           standard, the version of ISO C on which the GNU extended dialect is
2086           based.  Warnings from -pedantic are given where they are required
2087           by the base standard.  (It would not make sense for such warnings
2088           to be given only for features not in the specified GNU C dialect,
2089           since by definition the GNU dialects of C include all features the
2090           compiler supports with the given option, and there would be nothing
2091           to warn about.)
2092
2093       -pedantic-errors
2094           Like -pedantic, except that errors are produced rather than
2095           warnings.
2096
2097       -Wall
2098           This enables all the warnings about constructions that some users
2099           consider questionable, and that are easy to avoid (or modify to
2100           prevent the warning), even in conjunction with macros.  This also
2101           enables some language-specific warnings described in C++ Dialect
2102           Options and Objective-C and Objective-C++ Dialect Options.
2103
2104           -Wall turns on the following warning flags:
2105
2106           -Waddress -Warray-bounds (only with -O2) -Wc++0x-compat
2107           -Wchar-subscripts -Wimplicit-int -Wimplicit-function-declaration
2108           -Wcomment -Wformat -Wmain (only for C/ObjC and unless
2109           -ffreestanding) -Wmissing-braces -Wnonnull -Wparentheses
2110           -Wpointer-sign -Wreorder -Wreturn-type -Wsequence-point
2111           -Wsign-compare (only in C++) -Wstrict-aliasing -Wstrict-overflow=1
2112           -Wswitch -Wtrigraphs -Wuninitialized -Wunknown-pragmas
2113           -Wunused-function -Wunused-label -Wunused-value -Wunused-variable
2114           -Wvolatile-register-var
2115
2116           Note that some warning flags are not implied by -Wall.  Some of
2117           them warn about constructions that users generally do not consider
2118           questionable, but which occasionally you might wish to check for;
2119           others warn about constructions that are necessary or hard to avoid
2120           in some cases, and there is no simple way to modify the code to
2121           suppress the warning. Some of them are enabled by -Wextra but many
2122           of them must be enabled individually.
2123
2124       -Wextra
2125           This enables some extra warning flags that are not enabled by
2126           -Wall. (This option used to be called -W.  The older name is still
2127           supported, but the newer name is more descriptive.)
2128
2129           -Wclobbered -Wempty-body -Wignored-qualifiers
2130           -Wmissing-field-initializers -Wmissing-parameter-type (C only)
2131           -Wold-style-declaration (C only) -Woverride-init -Wsign-compare
2132           -Wtype-limits -Wuninitialized -Wunused-parameter (only with
2133           -Wunused or -Wall)
2134
2135           The option -Wextra also prints warning messages for the following
2136           cases:
2137
2138           ·   A pointer is compared against integer zero with <, <=, >, or
2139               >=.
2140
2141           ·   (C++ only) An enumerator and a non-enumerator both appear in a
2142               conditional expression.
2143
2144           ·   (C++ only) Ambiguous virtual bases.
2145
2146           ·   (C++ only) Subscripting an array which has been declared
2147               register.
2148
2149           ·   (C++ only) Taking the address of a variable which has been
2150               declared register.
2151
2152           ·   (C++ only) A base class is not initialized in a derived class'
2153               copy constructor.
2154
2155       -Wchar-subscripts
2156           Warn if an array subscript has type "char".  This is a common cause
2157           of error, as programmers often forget that this type is signed on
2158           some machines.  This warning is enabled by -Wall.
2159
2160       -Wcomment
2161           Warn whenever a comment-start sequence /* appears in a /* comment,
2162           or whenever a Backslash-Newline appears in a // comment.  This
2163           warning is enabled by -Wall.
2164
2165       -Wformat
2166           Check calls to "printf" and "scanf", etc., to make sure that the
2167           arguments supplied have types appropriate to the format string
2168           specified, and that the conversions specified in the format string
2169           make sense.  This includes standard functions, and others specified
2170           by format attributes, in the "printf", "scanf", "strftime" and
2171           "strfmon" (an X/Open extension, not in the C standard) families (or
2172           other target-specific families).  Which functions are checked
2173           without format attributes having been specified depends on the
2174           standard version selected, and such checks of functions without the
2175           attribute specified are disabled by -ffreestanding or -fno-builtin.
2176
2177           The formats are checked against the format features supported by
2178           GNU libc version 2.2.  These include all ISO C90 and C99 features,
2179           as well as features from the Single Unix Specification and some BSD
2180           and GNU extensions.  Other library implementations may not support
2181           all these features; GCC does not support warning about features
2182           that go beyond a particular library's limitations.  However, if
2183           -pedantic is used with -Wformat, warnings will be given about
2184           format features not in the selected standard version (but not for
2185           "strfmon" formats, since those are not in any version of the C
2186           standard).
2187
2188           Since -Wformat also checks for null format arguments for several
2189           functions, -Wformat also implies -Wnonnull.
2190
2191           -Wformat is included in -Wall.  For more control over some aspects
2192           of format checking, the options -Wformat-y2k,
2193           -Wno-format-extra-args, -Wno-format-zero-length,
2194           -Wformat-nonliteral, -Wformat-security, and -Wformat=2 are
2195           available, but are not included in -Wall.
2196
2197       -Wformat-y2k
2198           If -Wformat is specified, also warn about "strftime" formats which
2199           may yield only a two-digit year.
2200
2201       -Wno-format-contains-nul
2202           If -Wformat is specified, do not warn about format strings that
2203           contain NUL bytes.
2204
2205       -Wno-format-extra-args
2206           If -Wformat is specified, do not warn about excess arguments to a
2207           "printf" or "scanf" format function.  The C standard specifies that
2208           such arguments are ignored.
2209
2210           Where the unused arguments lie between used arguments that are
2211           specified with $ operand number specifications, normally warnings
2212           are still given, since the implementation could not know what type
2213           to pass to "va_arg" to skip the unused arguments.  However, in the
2214           case of "scanf" formats, this option will suppress the warning if
2215           the unused arguments are all pointers, since the Single Unix
2216           Specification says that such unused arguments are allowed.
2217
2218       -Wno-format-zero-length (C and Objective-C only)
2219           If -Wformat is specified, do not warn about zero-length formats.
2220           The C standard specifies that zero-length formats are allowed.
2221
2222       -Wformat-nonliteral
2223           If -Wformat is specified, also warn if the format string is not a
2224           string literal and so cannot be checked, unless the format function
2225           takes its format arguments as a "va_list".
2226
2227       -Wformat-security
2228           If -Wformat is specified, also warn about uses of format functions
2229           that represent possible security problems.  At present, this warns
2230           about calls to "printf" and "scanf" functions where the format
2231           string is not a string literal and there are no format arguments,
2232           as in "printf (foo);".  This may be a security hole if the format
2233           string came from untrusted input and contains %n.  (This is
2234           currently a subset of what -Wformat-nonliteral warns about, but in
2235           future warnings may be added to -Wformat-security that are not
2236           included in -Wformat-nonliteral.)
2237
2238       -Wformat=2
2239           Enable -Wformat plus format checks not included in -Wformat.
2240           Currently equivalent to -Wformat -Wformat-nonliteral
2241           -Wformat-security -Wformat-y2k.
2242
2243       -Wnonnull (C and Objective-C only)
2244           Warn about passing a null pointer for arguments marked as requiring
2245           a non-null value by the "nonnull" function attribute.
2246
2247           -Wnonnull is included in -Wall and -Wformat.  It can be disabled
2248           with the -Wno-nonnull option.
2249
2250       -Winit-self (C, C++, Objective-C and Objective-C++ only)
2251           Warn about uninitialized variables which are initialized with
2252           themselves.  Note this option can only be used with the
2253           -Wuninitialized option.
2254
2255           For example, GCC will warn about "i" being uninitialized in the
2256           following snippet only when -Winit-self has been specified:
2257
2258                   int f()
2259                   {
2260                     int i = i;
2261                     return i;
2262                   }
2263
2264       -Wimplicit-int (C and Objective-C only)
2265           Warn when a declaration does not specify a type.  This warning is
2266           enabled by -Wall.
2267
2268       -Wimplicit-function-declaration (C and Objective-C only)
2269           Give a warning whenever a function is used before being declared.
2270           In C99 mode (-std=c99 or -std=gnu99), this warning is enabled by
2271           default and it is made into an error by -pedantic-errors. This
2272           warning is also enabled by -Wall.
2273
2274       -Wimplicit
2275           Same as -Wimplicit-int and -Wimplicit-function-declaration.  This
2276           warning is enabled by -Wall.
2277
2278       -Wignored-qualifiers (C and C++ only)
2279           Warn if the return type of a function has a type qualifier such as
2280           "const".  For ISO C such a type qualifier has no effect, since the
2281           value returned by a function is not an lvalue.  For C++, the
2282           warning is only emitted for scalar types or "void".  ISO C
2283           prohibits qualified "void" return types on function definitions, so
2284           such return types always receive a warning even without this
2285           option.
2286
2287           This warning is also enabled by -Wextra.
2288
2289       -Wmain
2290           Warn if the type of main is suspicious.  main should be a function
2291           with external linkage, returning int, taking either zero arguments,
2292           two, or three arguments of appropriate types.  This warning is
2293           enabled by default in C++ and is enabled by either -Wall or
2294           -pedantic.
2295
2296       -Wmissing-braces
2297           Warn if an aggregate or union initializer is not fully bracketed.
2298           In the following example, the initializer for a is not fully
2299           bracketed, but that for b is fully bracketed.
2300
2301                   int a[2][2] = { 0, 1, 2, 3 };
2302                   int b[2][2] = { { 0, 1 }, { 2, 3 } };
2303
2304           This warning is enabled by -Wall.
2305
2306       -Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)
2307           Warn if a user-supplied include directory does not exist.
2308
2309       -Wparentheses
2310           Warn if parentheses are omitted in certain contexts, such as when
2311           there is an assignment in a context where a truth value is
2312           expected, or when operators are nested whose precedence people
2313           often get confused about.
2314
2315           Also warn if a comparison like x<=y<=z appears; this is equivalent
2316           to (x<=y ? 1 : 0) <= z, which is a different interpretation from
2317           that of ordinary mathematical notation.
2318
2319           Also warn about constructions where there may be confusion to which
2320           "if" statement an "else" branch belongs.  Here is an example of
2321           such a case:
2322
2323                   {
2324                     if (a)
2325                       if (b)
2326                         foo ();
2327                     else
2328                       bar ();
2329                   }
2330
2331           In C/C++, every "else" branch belongs to the innermost possible
2332           "if" statement, which in this example is "if (b)".  This is often
2333           not what the programmer expected, as illustrated in the above
2334           example by indentation the programmer chose.  When there is the
2335           potential for this confusion, GCC will issue a warning when this
2336           flag is specified.  To eliminate the warning, add explicit braces
2337           around the innermost "if" statement so there is no way the "else"
2338           could belong to the enclosing "if".  The resulting code would look
2339           like this:
2340
2341                   {
2342                     if (a)
2343                       {
2344                         if (b)
2345                           foo ();
2346                         else
2347                           bar ();
2348                       }
2349                   }
2350
2351           This warning is enabled by -Wall.
2352
2353       -Wsequence-point
2354           Warn about code that may have undefined semantics because of
2355           violations of sequence point rules in the C and C++ standards.
2356
2357           The C and C++ standards defines the order in which expressions in a
2358           C/C++ program are evaluated in terms of sequence points, which
2359           represent a partial ordering between the execution of parts of the
2360           program: those executed before the sequence point, and those
2361           executed after it.  These occur after the evaluation of a full
2362           expression (one which is not part of a larger expression), after
2363           the evaluation of the first operand of a "&&", "||", "? :" or ","
2364           (comma) operator, before a function is called (but after the
2365           evaluation of its arguments and the expression denoting the called
2366           function), and in certain other places.  Other than as expressed by
2367           the sequence point rules, the order of evaluation of subexpressions
2368           of an expression is not specified.  All these rules describe only a
2369           partial order rather than a total order, since, for example, if two
2370           functions are called within one expression with no sequence point
2371           between them, the order in which the functions are called is not
2372           specified.  However, the standards committee have ruled that
2373           function calls do not overlap.
2374
2375           It is not specified when between sequence points modifications to
2376           the values of objects take effect.  Programs whose behavior depends
2377           on this have undefined behavior; the C and C++ standards specify
2378           that "Between the previous and next sequence point an object shall
2379           have its stored value modified at most once by the evaluation of an
2380           expression.  Furthermore, the prior value shall be read only to
2381           determine the value to be stored.".  If a program breaks these
2382           rules, the results on any particular implementation are entirely
2383           unpredictable.
2384
2385           Examples of code with undefined behavior are "a = a++;", "a[n] =
2386           b[n++]" and "a[i++] = i;".  Some more complicated cases are not
2387           diagnosed by this option, and it may give an occasional false
2388           positive result, but in general it has been found fairly effective
2389           at detecting this sort of problem in programs.
2390
2391           The standard is worded confusingly, therefore there is some debate
2392           over the precise meaning of the sequence point rules in subtle
2393           cases.  Links to discussions of the problem, including proposed
2394           formal definitions, may be found on the GCC readings page, at
2395           <http://gcc.gnu.org/readings.html>.
2396
2397           This warning is enabled by -Wall for C and C++.
2398
2399       -Wreturn-type
2400           Warn whenever a function is defined with a return-type that
2401           defaults to "int".  Also warn about any "return" statement with no
2402           return-value in a function whose return-type is not "void" (falling
2403           off the end of the function body is considered returning without a
2404           value), and about a "return" statement with a expression in a
2405           function whose return-type is "void".
2406
2407           For C++, a function without return type always produces a
2408           diagnostic message, even when -Wno-return-type is specified.  The
2409           only exceptions are main and functions defined in system headers.
2410
2411           This warning is enabled by -Wall.
2412
2413       -Wswitch
2414           Warn whenever a "switch" statement has an index of enumerated type
2415           and lacks a "case" for one or more of the named codes of that
2416           enumeration.  (The presence of a "default" label prevents this
2417           warning.)  "case" labels outside the enumeration range also provoke
2418           warnings when this option is used.  This warning is enabled by
2419           -Wall.
2420
2421       -Wswitch-default
2422           Warn whenever a "switch" statement does not have a "default" case.
2423
2424       -Wswitch-enum
2425           Warn whenever a "switch" statement has an index of enumerated type
2426           and lacks a "case" for one or more of the named codes of that
2427           enumeration.  "case" labels outside the enumeration range also
2428           provoke warnings when this option is used.
2429
2430       -Wsync-nand (C and C++ only)
2431           Warn when "__sync_fetch_and_nand" and "__sync_nand_and_fetch"
2432           built-in functions are used.  These functions changed semantics in
2433           GCC 4.4.
2434
2435       -Wtrigraphs
2436           Warn if any trigraphs are encountered that might change the meaning
2437           of the program (trigraphs within comments are not warned about).
2438           This warning is enabled by -Wall.
2439
2440       -Wunused-but-set-parameter
2441           Warn whenever a function parameter is assigned to, but otherwise
2442           unused (aside from its declaration).
2443
2444           To suppress this warning use the unused attribute.
2445
2446       -Wunused-but-set-variable
2447           Warn whenever a local variable is assigned to, but otherwise unused
2448           (aside from its declaration).
2449
2450           To suppress this warning use the unused attribute.
2451
2452       -Wunused-function
2453           Warn whenever a static function is declared but not defined or a
2454           non-inline static function is unused.  This warning is enabled by
2455           -Wall.
2456
2457       -Wunused-label
2458           Warn whenever a label is declared but not used.  This warning is
2459           enabled by -Wall.
2460
2461           To suppress this warning use the unused attribute.
2462
2463       -Wunused-parameter
2464           Warn whenever a function parameter is unused aside from its
2465           declaration.
2466
2467           To suppress this warning use the unused attribute.
2468
2469       -Wunused-variable
2470           Warn whenever a local variable or non-constant static variable is
2471           unused aside from its declaration.  This warning is enabled by
2472           -Wall.
2473
2474           To suppress this warning use the unused attribute.
2475
2476       -Wunused-value
2477           Warn whenever a statement computes a result that is explicitly not
2478           used. To suppress this warning cast the unused expression to void.
2479           This includes an expression-statement or the left-hand side of a
2480           comma expression that contains no side effects. For example, an
2481           expression such as x[i,j] will cause a warning, while x[(void)i,j]
2482           will not.
2483
2484           This warning is enabled by -Wall.
2485
2486       -Wunused
2487           All the above -Wunused options combined.
2488
2489           In order to get a warning about an unused function parameter, you
2490           must either specify -Wextra -Wunused (note that -Wall implies
2491           -Wunused), or separately specify -Wunused-parameter.
2492
2493       -Wuninitialized
2494           Warn if an automatic variable is used without first being
2495           initialized or if a variable may be clobbered by a "setjmp" call.
2496           In C++, warn if a non-static reference or non-static const member
2497           appears in a class without constructors.
2498
2499           If you want to warn about code which uses the uninitialized value
2500           of the variable in its own initializer, use the -Winit-self option.
2501
2502           These warnings occur for individual uninitialized or clobbered
2503           elements of structure, union or array variables as well as for
2504           variables which are uninitialized or clobbered as a whole.  They do
2505           not occur for variables or elements declared "volatile".  Because
2506           these warnings depend on optimization, the exact variables or
2507           elements for which there are warnings will depend on the precise
2508           optimization options and version of GCC used.
2509
2510           Note that there may be no warning about a variable that is used
2511           only to compute a value that itself is never used, because such
2512           computations may be deleted by data flow analysis before the
2513           warnings are printed.
2514
2515           These warnings are made optional because GCC is not smart enough to
2516           see all the reasons why the code might be correct despite appearing
2517           to have an error.  Here is one example of how this can happen:
2518
2519                   {
2520                     int x;
2521                     switch (y)
2522                       {
2523                       case 1: x = 1;
2524                         break;
2525                       case 2: x = 4;
2526                         break;
2527                       case 3: x = 5;
2528                       }
2529                     foo (x);
2530                   }
2531
2532           If the value of "y" is always 1, 2 or 3, then "x" is always
2533           initialized, but GCC doesn't know this.  Here is another common
2534           case:
2535
2536                   {
2537                     int save_y;
2538                     if (change_y) save_y = y, y = new_y;
2539                     ...
2540                     if (change_y) y = save_y;
2541                   }
2542
2543           This has no bug because "save_y" is used only if it is set.
2544
2545           This option also warns when a non-volatile automatic variable might
2546           be changed by a call to "longjmp".  These warnings as well are
2547           possible only in optimizing compilation.
2548
2549           The compiler sees only the calls to "setjmp".  It cannot know where
2550           "longjmp" will be called; in fact, a signal handler could call it
2551           at any point in the code.  As a result, you may get a warning even
2552           when there is in fact no problem because "longjmp" cannot in fact
2553           be called at the place which would cause a problem.
2554
2555           Some spurious warnings can be avoided if you declare all the
2556           functions you use that never return as "noreturn".
2557
2558           This warning is enabled by -Wall or -Wextra.
2559
2560       -Wunknown-pragmas
2561           Warn when a #pragma directive is encountered which is not
2562           understood by GCC.  If this command line option is used, warnings
2563           will even be issued for unknown pragmas in system header files.
2564           This is not the case if the warnings were only enabled by the -Wall
2565           command line option.
2566
2567       -Wno-pragmas
2568           Do not warn about misuses of pragmas, such as incorrect parameters,
2569           invalid syntax, or conflicts between pragmas.  See also
2570           -Wunknown-pragmas.
2571
2572       -Wstrict-aliasing
2573           This option is only active when -fstrict-aliasing is active.  It
2574           warns about code which might break the strict aliasing rules that
2575           the compiler is using for optimization.  The warning does not catch
2576           all cases, but does attempt to catch the more common pitfalls.  It
2577           is included in -Wall.  It is equivalent to -Wstrict-aliasing=3
2578
2579       -Wstrict-aliasing=n
2580           This option is only active when -fstrict-aliasing is active.  It
2581           warns about code which might break the strict aliasing rules that
2582           the compiler is using for optimization.  Higher levels correspond
2583           to higher accuracy (fewer false positives).  Higher levels also
2584           correspond to more effort, similar to the way -O works.
2585           -Wstrict-aliasing is equivalent to -Wstrict-aliasing=n, with n=3.
2586
2587           Level 1: Most aggressive, quick, least accurate.  Possibly useful
2588           when higher levels do not warn but -fstrict-aliasing still breaks
2589           the code, as it has very few false negatives.  However, it has many
2590           false positives.  Warns for all pointer conversions between
2591           possibly incompatible types, even if never dereferenced.  Runs in
2592           the frontend only.
2593
2594           Level 2: Aggressive, quick, not too precise.  May still have many
2595           false positives (not as many as level 1 though), and few false
2596           negatives (but possibly more than level 1).  Unlike level 1, it
2597           only warns when an address is taken.  Warns about incomplete types.
2598           Runs in the frontend only.
2599
2600           Level 3 (default for -Wstrict-aliasing): Should have very few false
2601           positives and few false negatives.  Slightly slower than levels 1
2602           or 2 when optimization is enabled.  Takes care of the common
2603           punn+dereference pattern in the frontend: "*(int*)&some_float".  If
2604           optimization is enabled, it also runs in the backend, where it
2605           deals with multiple statement cases using flow-sensitive points-to
2606           information.  Only warns when the converted pointer is
2607           dereferenced.  Does not warn about incomplete types.
2608
2609       -Wstrict-overflow
2610       -Wstrict-overflow=n
2611           This option is only active when -fstrict-overflow is active.  It
2612           warns about cases where the compiler optimizes based on the
2613           assumption that signed overflow does not occur.  Note that it does
2614           not warn about all cases where the code might overflow: it only
2615           warns about cases where the compiler implements some optimization.
2616           Thus this warning depends on the optimization level.
2617
2618           An optimization which assumes that signed overflow does not occur
2619           is perfectly safe if the values of the variables involved are such
2620           that overflow never does, in fact, occur.  Therefore this warning
2621           can easily give a false positive: a warning about code which is not
2622           actually a problem.  To help focus on important issues, several
2623           warning levels are defined.  No warnings are issued for the use of
2624           undefined signed overflow when estimating how many iterations a
2625           loop will require, in particular when determining whether a loop
2626           will be executed at all.
2627
2628           -Wstrict-overflow=1
2629               Warn about cases which are both questionable and easy to avoid.
2630               For example: "x + 1 > x"; with -fstrict-overflow, the compiler
2631               will simplify this to 1.  This level of -Wstrict-overflow is
2632               enabled by -Wall; higher levels are not, and must be explicitly
2633               requested.
2634
2635           -Wstrict-overflow=2
2636               Also warn about other cases where a comparison is simplified to
2637               a constant.  For example: "abs (x) >= 0".  This can only be
2638               simplified when -fstrict-overflow is in effect, because "abs
2639               (INT_MIN)" overflows to "INT_MIN", which is less than zero.
2640               -Wstrict-overflow (with no level) is the same as
2641               -Wstrict-overflow=2.
2642
2643           -Wstrict-overflow=3
2644               Also warn about other cases where a comparison is simplified.
2645               For example: "x + 1 > 1" will be simplified to "x > 0".
2646
2647           -Wstrict-overflow=4
2648               Also warn about other simplifications not covered by the above
2649               cases.  For example: "(x * 10) / 5" will be simplified to "x *
2650               2".
2651
2652           -Wstrict-overflow=5
2653               Also warn about cases where the compiler reduces the magnitude
2654               of a constant involved in a comparison.  For example: "x + 2 >
2655               y" will be simplified to "x + 1 >= y".  This is reported only
2656               at the highest warning level because this simplification
2657               applies to many comparisons, so this warning level will give a
2658               very large number of false positives.
2659
2660       -Warray-bounds
2661           This option is only active when -ftree-vrp is active (default for
2662           -O2 and above). It warns about subscripts to arrays that are always
2663           out of bounds. This warning is enabled by -Wall.
2664
2665       -Wno-div-by-zero
2666           Do not warn about compile-time integer division by zero.  Floating
2667           point division by zero is not warned about, as it can be a
2668           legitimate way of obtaining infinities and NaNs.
2669
2670       -Wsystem-headers
2671           Print warning messages for constructs found in system header files.
2672           Warnings from system headers are normally suppressed, on the
2673           assumption that they usually do not indicate real problems and
2674           would only make the compiler output harder to read.  Using this
2675           command line option tells GCC to emit warnings from system headers
2676           as if they occurred in user code.  However, note that using -Wall
2677           in conjunction with this option will not warn about unknown pragmas
2678           in system headers---for that, -Wunknown-pragmas must also be used.
2679
2680       -Wfloat-equal
2681           Warn if floating point values are used in equality comparisons.
2682
2683           The idea behind this is that sometimes it is convenient (for the
2684           programmer) to consider floating-point values as approximations to
2685           infinitely precise real numbers.  If you are doing this, then you
2686           need to compute (by analyzing the code, or in some other way) the
2687           maximum or likely maximum error that the computation introduces,
2688           and allow for it when performing comparisons (and when producing
2689           output, but that's a different problem).  In particular, instead of
2690           testing for equality, you would check to see whether the two values
2691           have ranges that overlap; and this is done with the relational
2692           operators, so equality comparisons are probably mistaken.
2693
2694       -Wtraditional (C and Objective-C only)
2695           Warn about certain constructs that behave differently in
2696           traditional and ISO C.  Also warn about ISO C constructs that have
2697           no traditional C equivalent, and/or problematic constructs which
2698           should be avoided.
2699
2700           ·   Macro parameters that appear within string literals in the
2701               macro body.  In traditional C macro replacement takes place
2702               within string literals, but does not in ISO C.
2703
2704           ·   In traditional C, some preprocessor directives did not exist.
2705               Traditional preprocessors would only consider a line to be a
2706               directive if the # appeared in column 1 on the line.  Therefore
2707               -Wtraditional warns about directives that traditional C
2708               understands but would ignore because the # does not appear as
2709               the first character on the line.  It also suggests you hide
2710               directives like #pragma not understood by traditional C by
2711               indenting them.  Some traditional implementations would not
2712               recognize #elif, so it suggests avoiding it altogether.
2713
2714           ·   A function-like macro that appears without arguments.
2715
2716           ·   The unary plus operator.
2717
2718           ·   The U integer constant suffix, or the F or L floating point
2719               constant suffixes.  (Traditional C does support the L suffix on
2720               integer constants.)  Note, these suffixes appear in macros
2721               defined in the system headers of most modern systems, e.g. the
2722               _MIN/_MAX macros in "<limits.h>".  Use of these macros in user
2723               code might normally lead to spurious warnings, however GCC's
2724               integrated preprocessor has enough context to avoid warning in
2725               these cases.
2726
2727           ·   A function declared external in one block and then used after
2728               the end of the block.
2729
2730           ·   A "switch" statement has an operand of type "long".
2731
2732           ·   A non-"static" function declaration follows a "static" one.
2733               This construct is not accepted by some traditional C compilers.
2734
2735           ·   The ISO type of an integer constant has a different width or
2736               signedness from its traditional type.  This warning is only
2737               issued if the base of the constant is ten.  I.e. hexadecimal or
2738               octal values, which typically represent bit patterns, are not
2739               warned about.
2740
2741           ·   Usage of ISO string concatenation is detected.
2742
2743           ·   Initialization of automatic aggregates.
2744
2745           ·   Identifier conflicts with labels.  Traditional C lacks a
2746               separate namespace for labels.
2747
2748           ·   Initialization of unions.  If the initializer is zero, the
2749               warning is omitted.  This is done under the assumption that the
2750               zero initializer in user code appears conditioned on e.g.
2751               "__STDC__" to avoid missing initializer warnings and relies on
2752               default initialization to zero in the traditional C case.
2753
2754           ·   Conversions by prototypes between fixed/floating point values
2755               and vice versa.  The absence of these prototypes when compiling
2756               with traditional C would cause serious problems.  This is a
2757               subset of the possible conversion warnings, for the full set
2758               use -Wtraditional-conversion.
2759
2760           ·   Use of ISO C style function definitions.  This warning
2761               intentionally is not issued for prototype declarations or
2762               variadic functions because these ISO C features will appear in
2763               your code when using libiberty's traditional C compatibility
2764               macros, "PARAMS" and "VPARAMS".  This warning is also bypassed
2765               for nested functions because that feature is already a GCC
2766               extension and thus not relevant to traditional C compatibility.
2767
2768       -Wtraditional-conversion (C and Objective-C only)
2769           Warn if a prototype causes a type conversion that is different from
2770           what would happen to the same argument in the absence of a
2771           prototype.  This includes conversions of fixed point to floating
2772           and vice versa, and conversions changing the width or signedness of
2773           a fixed point argument except when the same as the default
2774           promotion.
2775
2776       -Wdeclaration-after-statement (C and Objective-C only)
2777           Warn when a declaration is found after a statement in a block.
2778           This construct, known from C++, was introduced with ISO C99 and is
2779           by default allowed in GCC.  It is not supported by ISO C90 and was
2780           not supported by GCC versions before GCC 3.0.
2781
2782       -Wundef
2783           Warn if an undefined identifier is evaluated in an #if directive.
2784
2785       -Wno-endif-labels
2786           Do not warn whenever an #else or an #endif are followed by text.
2787
2788       -Wshadow
2789           Warn whenever a local variable shadows another local variable,
2790           parameter or global variable or whenever a built-in function is
2791           shadowed.
2792
2793       -Wlarger-than=len
2794           Warn whenever an object of larger than len bytes is defined.
2795
2796       -Wframe-larger-than=len
2797           Warn if the size of a function frame is larger than len bytes.  The
2798           computation done to determine the stack frame size is approximate
2799           and not conservative.  The actual requirements may be somewhat
2800           greater than len even if you do not get a warning.  In addition,
2801           any space allocated via "alloca", variable-length arrays, or
2802           related constructs is not included by the compiler when determining
2803           whether or not to issue a warning.
2804
2805       -Wunsafe-loop-optimizations
2806           Warn if the loop cannot be optimized because the compiler could not
2807           assume anything on the bounds of the loop indices.  With
2808           -funsafe-loop-optimizations warn if the compiler made such
2809           assumptions.
2810
2811       -Wno-pedantic-ms-format (MinGW targets only)
2812           Disables the warnings about non-ISO "printf" / "scanf" format width
2813           specifiers "I32", "I64", and "I" used on Windows targets depending
2814           on the MS runtime, when you are using the options -Wformat and
2815           -pedantic without gnu-extensions.
2816
2817       -Wpointer-arith
2818           Warn about anything that depends on the "size of" a function type
2819           or of "void".  GNU C assigns these types a size of 1, for
2820           convenience in calculations with "void *" pointers and pointers to
2821           functions.  In C++, warn also when an arithmetic operation involves
2822           "NULL".  This warning is also enabled by -pedantic.
2823
2824       -Wtype-limits
2825           Warn if a comparison is always true or always false due to the
2826           limited range of the data type, but do not warn for constant
2827           expressions.  For example, warn if an unsigned variable is compared
2828           against zero with < or >=.  This warning is also enabled by
2829           -Wextra.
2830
2831       -Wbad-function-cast (C and Objective-C only)
2832           Warn whenever a function call is cast to a non-matching type.  For
2833           example, warn if "int malloc()" is cast to "anything *".
2834
2835       -Wc++-compat (C and Objective-C only)
2836           Warn about ISO C constructs that are outside of the common subset
2837           of ISO C and ISO C++, e.g. request for implicit conversion from
2838           "void *" to a pointer to non-"void" type.
2839
2840       -Wc++0x-compat (C++ and Objective-C++ only)
2841           Warn about C++ constructs whose meaning differs between ISO C++
2842           1998 and ISO C++ 200x, e.g., identifiers in ISO C++ 1998 that will
2843           become keywords in ISO C++ 200x.  This warning is enabled by -Wall.
2844
2845       -Wcast-qual
2846           Warn whenever a pointer is cast so as to remove a type qualifier
2847           from the target type.  For example, warn if a "const char *" is
2848           cast to an ordinary "char *".
2849
2850       -Wcast-align
2851           Warn whenever a pointer is cast such that the required alignment of
2852           the target is increased.  For example, warn if a "char *" is cast
2853           to an "int *" on machines where integers can only be accessed at
2854           two- or four-byte boundaries.
2855
2856       -Wwrite-strings
2857           When compiling C, give string constants the type "const
2858           char[length]" so that copying the address of one into a non-"const"
2859           "char *" pointer will get a warning.  These warnings will help you
2860           find at compile time code that can try to write into a string
2861           constant, but only if you have been very careful about using
2862           "const" in declarations and prototypes.  Otherwise, it will just be
2863           a nuisance. This is why we did not make -Wall request these
2864           warnings.
2865
2866           When compiling C++, warn about the deprecated conversion from
2867           string literals to "char *".  This warning is enabled by default
2868           for C++ programs.
2869
2870       -Wclobbered
2871           Warn for variables that might be changed by longjmp or vfork.  This
2872           warning is also enabled by -Wextra.
2873
2874       -Wconversion
2875           Warn for implicit conversions that may alter a value. This includes
2876           conversions between real and integer, like "abs (x)" when "x" is
2877           "double"; conversions between signed and unsigned, like "unsigned
2878           ui = -1"; and conversions to smaller types, like "sqrtf (M_PI)". Do
2879           not warn for explicit casts like "abs ((int) x)" and "ui =
2880           (unsigned) -1", or if the value is not changed by the conversion
2881           like in "abs (2.0)".  Warnings about conversions between signed and
2882           unsigned integers can be disabled by using -Wno-sign-conversion.
2883
2884           For C++, also warn for conversions between "NULL" and non-pointer
2885           types; confusing overload resolution for user-defined conversions;
2886           and conversions that will never use a type conversion operator:
2887           conversions to "void", the same type, a base class or a reference
2888           to them. Warnings about conversions between signed and unsigned
2889           integers are disabled by default in C++ unless -Wsign-conversion is
2890           explicitly enabled.
2891
2892       -Wempty-body
2893           Warn if an empty body occurs in an if, else or do while statement.
2894           This warning is also enabled by -Wextra.
2895
2896       -Wenum-compare (C++ and Objective-C++ only)
2897           Warn about a comparison between values of different enum types.
2898           This warning is enabled by default.
2899
2900       -Wsign-compare
2901           Warn when a comparison between signed and unsigned values could
2902           produce an incorrect result when the signed value is converted to
2903           unsigned.  This warning is also enabled by -Wextra; to get the
2904           other warnings of -Wextra without this warning, use -Wextra
2905           -Wno-sign-compare.
2906
2907       -Wsign-conversion
2908           Warn for implicit conversions that may change the sign of an
2909           integer value, like assigning a signed integer expression to an
2910           unsigned integer variable. An explicit cast silences the warning.
2911           In C, this option is enabled also by -Wconversion.
2912
2913       -Waddress
2914           Warn about suspicious uses of memory addresses. These include using
2915           the address of a function in a conditional expression, such as
2916           "void func(void); if (func)", and comparisons against the memory
2917           address of a string literal, such as "if (x == "abc")".  Such uses
2918           typically indicate a programmer error: the address of a function
2919           always evaluates to true, so their use in a conditional usually
2920           indicate that the programmer forgot the parentheses in a function
2921           call; and comparisons against string literals result in unspecified
2922           behavior and are not portable in C, so they usually indicate that
2923           the programmer intended to use "strcmp".  This warning is enabled
2924           by -Wall.
2925
2926       -Wlogical-op
2927           Warn about suspicious uses of logical operators in expressions.
2928           This includes using logical operators in contexts where a bit-wise
2929           operator is likely to be expected.
2930
2931       -Waggregate-return
2932           Warn if any functions that return structures or unions are defined
2933           or called.  (In languages where you can return an array, this also
2934           elicits a warning.)
2935
2936       -Wno-attributes
2937           Do not warn if an unexpected "__attribute__" is used, such as
2938           unrecognized attributes, function attributes applied to variables,
2939           etc.  This will not stop errors for incorrect use of supported
2940           attributes.
2941
2942       -Wno-builtin-macro-redefined
2943           Do not warn if certain built-in macros are redefined.  This
2944           suppresses warnings for redefinition of "__TIMESTAMP__",
2945           "__TIME__", "__DATE__", "__FILE__", and "__BASE_FILE__".
2946
2947       -Wstrict-prototypes (C and Objective-C only)
2948           Warn if a function is declared or defined without specifying the
2949           argument types.  (An old-style function definition is permitted
2950           without a warning if preceded by a declaration which specifies the
2951           argument types.)
2952
2953       -Wold-style-declaration (C and Objective-C only)
2954           Warn for obsolescent usages, according to the C Standard, in a
2955           declaration. For example, warn if storage-class specifiers like
2956           "static" are not the first things in a declaration.  This warning
2957           is also enabled by -Wextra.
2958
2959       -Wold-style-definition (C and Objective-C only)
2960           Warn if an old-style function definition is used.  A warning is
2961           given even if there is a previous prototype.
2962
2963       -Wmissing-parameter-type (C and Objective-C only)
2964           A function parameter is declared without a type specifier in
2965           K&R-style functions:
2966
2967                   void foo(bar) { }
2968
2969           This warning is also enabled by -Wextra.
2970
2971       -Wmissing-prototypes (C and Objective-C only)
2972           Warn if a global function is defined without a previous prototype
2973           declaration.  This warning is issued even if the definition itself
2974           provides a prototype.  The aim is to detect global functions that
2975           fail to be declared in header files.
2976
2977       -Wmissing-declarations
2978           Warn if a global function is defined without a previous
2979           declaration.  Do so even if the definition itself provides a
2980           prototype.  Use this option to detect global functions that are not
2981           declared in header files.  In C++, no warnings are issued for
2982           function templates, or for inline functions, or for functions in
2983           anonymous namespaces.
2984
2985       -Wmissing-field-initializers
2986           Warn if a structure's initializer has some fields missing.  For
2987           example, the following code would cause such a warning, because
2988           "x.h" is implicitly zero:
2989
2990                   struct s { int f, g, h; };
2991                   struct s x = { 3, 4 };
2992
2993           This option does not warn about designated initializers, so the
2994           following modification would not trigger a warning:
2995
2996                   struct s { int f, g, h; };
2997                   struct s x = { .f = 3, .g = 4 };
2998
2999           This warning is included in -Wextra.  To get other -Wextra warnings
3000           without this one, use -Wextra -Wno-missing-field-initializers.
3001
3002       -Wmissing-noreturn
3003           Warn about functions which might be candidates for attribute
3004           "noreturn".  Note these are only possible candidates, not absolute
3005           ones.  Care should be taken to manually verify functions actually
3006           do not ever return before adding the "noreturn" attribute,
3007           otherwise subtle code generation bugs could be introduced.  You
3008           will not get a warning for "main" in hosted C environments.
3009
3010       -Wmissing-format-attribute
3011           Warn about function pointers which might be candidates for "format"
3012           attributes.  Note these are only possible candidates, not absolute
3013           ones.  GCC will guess that function pointers with "format"
3014           attributes that are used in assignment, initialization, parameter
3015           passing or return statements should have a corresponding "format"
3016           attribute in the resulting type.  I.e. the left-hand side of the
3017           assignment or initialization, the type of the parameter variable,
3018           or the return type of the containing function respectively should
3019           also have a "format" attribute to avoid the warning.
3020
3021           GCC will also warn about function definitions which might be
3022           candidates for "format" attributes.  Again, these are only possible
3023           candidates.  GCC will guess that "format" attributes might be
3024           appropriate for any function that calls a function like "vprintf"
3025           or "vscanf", but this might not always be the case, and some
3026           functions for which "format" attributes are appropriate may not be
3027           detected.
3028
3029       -Wno-multichar
3030           Do not warn if a multicharacter constant ('FOOF') is used.  Usually
3031           they indicate a typo in the user's code, as they have
3032           implementation-defined values, and should not be used in portable
3033           code.
3034
3035       -Wnormalized=<none|id|nfc|nfkc>
3036           In ISO C and ISO C++, two identifiers are different if they are
3037           different sequences of characters.  However, sometimes when
3038           characters outside the basic ASCII character set are used, you can
3039           have two different character sequences that look the same.  To
3040           avoid confusion, the ISO 10646 standard sets out some normalization
3041           rules which when applied ensure that two sequences that look the
3042           same are turned into the same sequence.  GCC can warn you if you
3043           are using identifiers which have not been normalized; this option
3044           controls that warning.
3045
3046           There are four levels of warning that GCC supports.  The default is
3047           -Wnormalized=nfc, which warns about any identifier which is not in
3048           the ISO 10646 "C" normalized form, NFC.  NFC is the recommended
3049           form for most uses.
3050
3051           Unfortunately, there are some characters which ISO C and ISO C++
3052           allow in identifiers that when turned into NFC aren't allowable as
3053           identifiers.  That is, there's no way to use these symbols in
3054           portable ISO C or C++ and have all your identifiers in NFC.
3055           -Wnormalized=id suppresses the warning for these characters.  It is
3056           hoped that future versions of the standards involved will correct
3057           this, which is why this option is not the default.
3058
3059           You can switch the warning off for all characters by writing
3060           -Wnormalized=none.  You would only want to do this if you were
3061           using some other normalization scheme (like "D"), because otherwise
3062           you can easily create bugs that are literally impossible to see.
3063
3064           Some characters in ISO 10646 have distinct meanings but look
3065           identical in some fonts or display methodologies, especially once
3066           formatting has been applied.  For instance "\u207F", "SUPERSCRIPT
3067           LATIN SMALL LETTER N", will display just like a regular "n" which
3068           has been placed in a superscript.  ISO 10646 defines the NFKC
3069           normalization scheme to convert all these into a standard form as
3070           well, and GCC will warn if your code is not in NFKC if you use
3071           -Wnormalized=nfkc.  This warning is comparable to warning about
3072           every identifier that contains the letter O because it might be
3073           confused with the digit 0, and so is not the default, but may be
3074           useful as a local coding convention if the programming environment
3075           is unable to be fixed to display these characters distinctly.
3076
3077       -Wno-deprecated
3078           Do not warn about usage of deprecated features.
3079
3080       -Wno-deprecated-declarations
3081           Do not warn about uses of functions, variables, and types marked as
3082           deprecated by using the "deprecated" attribute.
3083
3084       -Wno-overflow
3085           Do not warn about compile-time overflow in constant expressions.
3086
3087       -Woverride-init (C and Objective-C only)
3088           Warn if an initialized field without side effects is overridden
3089           when using designated initializers.
3090
3091           This warning is included in -Wextra.  To get other -Wextra warnings
3092           without this one, use -Wextra -Wno-override-init.
3093
3094       -Wpacked
3095           Warn if a structure is given the packed attribute, but the packed
3096           attribute has no effect on the layout or size of the structure.
3097           Such structures may be mis-aligned for little benefit.  For
3098           instance, in this code, the variable "f.x" in "struct bar" will be
3099           misaligned even though "struct bar" does not itself have the packed
3100           attribute:
3101
3102                   struct foo {
3103                     int x;
3104                     char a, b, c, d;
3105                   } __attribute__((packed));
3106                   struct bar {
3107                     char z;
3108                     struct foo f;
3109                   };
3110
3111       -Wpacked-bitfield-compat
3112           The 4.1, 4.2 and 4.3 series of GCC ignore the "packed" attribute on
3113           bit-fields of type "char".  This has been fixed in GCC 4.4 but the
3114           change can lead to differences in the structure layout.  GCC
3115           informs you when the offset of such a field has changed in GCC 4.4.
3116           For example there is no longer a 4-bit padding between field "a"
3117           and "b" in this structure:
3118
3119                   struct foo
3120                   {
3121                     char a:4;
3122                     char b:8;
3123                   } __attribute__ ((packed));
3124
3125           This warning is enabled by default.  Use
3126           -Wno-packed-bitfield-compat to disable this warning.
3127
3128       -Wpadded
3129           Warn if padding is included in a structure, either to align an
3130           element of the structure or to align the whole structure.
3131           Sometimes when this happens it is possible to rearrange the fields
3132           of the structure to reduce the padding and so make the structure
3133           smaller.
3134
3135       -Wredundant-decls
3136           Warn if anything is declared more than once in the same scope, even
3137           in cases where multiple declaration is valid and changes nothing.
3138
3139       -Wnested-externs (C and Objective-C only)
3140           Warn if an "extern" declaration is encountered within a function.
3141
3142       -Wunreachable-code
3143           Warn if the compiler detects that code will never be executed.
3144
3145           This option is intended to warn when the compiler detects that at
3146           least a whole line of source code will never be executed, because
3147           some condition is never satisfied or because it is after a
3148           procedure that never returns.
3149
3150           It is possible for this option to produce a warning even though
3151           there are circumstances under which part of the affected line can
3152           be executed, so care should be taken when removing apparently-
3153           unreachable code.
3154
3155           For instance, when a function is inlined, a warning may mean that
3156           the line is unreachable in only one inlined copy of the function.
3157
3158           This option is not made part of -Wall because in a debugging
3159           version of a program there is often substantial code which checks
3160           correct functioning of the program and is, hopefully, unreachable
3161           because the program does work.  Another common use of unreachable
3162           code is to provide behavior which is selectable at compile-time.
3163
3164       -Winline
3165           Warn if a function can not be inlined and it was declared as
3166           inline.  Even with this option, the compiler will not warn about
3167           failures to inline functions declared in system headers.
3168
3169           The compiler uses a variety of heuristics to determine whether or
3170           not to inline a function.  For example, the compiler takes into
3171           account the size of the function being inlined and the amount of
3172           inlining that has already been done in the current function.
3173           Therefore, seemingly insignificant changes in the source program
3174           can cause the warnings produced by -Winline to appear or disappear.
3175
3176       -Wno-invalid-offsetof (C++ and Objective-C++ only)
3177           Suppress warnings from applying the offsetof macro to a non-POD
3178           type.  According to the 1998 ISO C++ standard, applying offsetof to
3179           a non-POD type is undefined.  In existing C++ implementations,
3180           however, offsetof typically gives meaningful results even when
3181           applied to certain kinds of non-POD types. (Such as a simple struct
3182           that fails to be a POD type only by virtue of having a
3183           constructor.)  This flag is for users who are aware that they are
3184           writing nonportable code and who have deliberately chosen to ignore
3185           the warning about it.
3186
3187           The restrictions on offsetof may be relaxed in a future version of
3188           the C++ standard.
3189
3190       -Wno-int-to-pointer-cast (C and Objective-C only)
3191           Suppress warnings from casts to pointer type of an integer of a
3192           different size.
3193
3194       -Wno-pointer-to-int-cast (C and Objective-C only)
3195           Suppress warnings from casts from a pointer to an integer type of a
3196           different size.
3197
3198       -Winvalid-pch
3199           Warn if a precompiled header is found in the search path but can't
3200           be used.
3201
3202       -Wlong-long
3203           Warn if long long type is used.  This is default.  To inhibit the
3204           warning messages, use -Wno-long-long.  Flags -Wlong-long and
3205           -Wno-long-long are taken into account only when -pedantic flag is
3206           used.
3207
3208       -Wvariadic-macros
3209           Warn if variadic macros are used in pedantic ISO C90 mode, or the
3210           GNU alternate syntax when in pedantic ISO C99 mode.  This is
3211           default.  To inhibit the warning messages, use
3212           -Wno-variadic-macros.
3213
3214       -Wvla
3215           Warn if variable length array is used in the code.  -Wno-vla will
3216           prevent the -pedantic warning of the variable length array.
3217
3218       -Wvolatile-register-var
3219           Warn if a register variable is declared volatile.  The volatile
3220           modifier does not inhibit all optimizations that may eliminate
3221           reads and/or writes to register variables.  This warning is enabled
3222           by -Wall.
3223
3224       -Wdisabled-optimization
3225           Warn if a requested optimization pass is disabled.  This warning
3226           does not generally indicate that there is anything wrong with your
3227           code; it merely indicates that GCC's optimizers were unable to
3228           handle the code effectively.  Often, the problem is that your code
3229           is too big or too complex; GCC will refuse to optimize programs
3230           when the optimization itself is likely to take inordinate amounts
3231           of time.
3232
3233       -Wpointer-sign (C and Objective-C only)
3234           Warn for pointer argument passing or assignment with different
3235           signedness.  This option is only supported for C and Objective-C.
3236           It is implied by -Wall and by -pedantic, which can be disabled with
3237           -Wno-pointer-sign.
3238
3239       -Wstack-protector
3240           This option is only active when -fstack-protector is active.  It
3241           warns about functions that will not be protected against stack
3242           smashing.
3243
3244       -Wno-mudflap
3245           Suppress warnings about constructs that cannot be instrumented by
3246           -fmudflap.
3247
3248       -Woverlength-strings
3249           Warn about string constants which are longer than the "minimum
3250           maximum" length specified in the C standard.  Modern compilers
3251           generally allow string constants which are much longer than the
3252           standard's minimum limit, but very portable programs should avoid
3253           using longer strings.
3254
3255           The limit applies after string constant concatenation, and does not
3256           count the trailing NUL.  In C89, the limit was 509 characters; in
3257           C99, it was raised to 4095.  C++98 does not specify a normative
3258           minimum maximum, so we do not diagnose overlength strings in C++.
3259
3260           This option is implied by -pedantic, and can be disabled with
3261           -Wno-overlength-strings.
3262
3263   Options for Debugging Your Program or GCC
3264       GCC has various special options that are used for debugging either your
3265       program or GCC:
3266
3267       -g  Produce debugging information in the operating system's native
3268           format (stabs, COFF, XCOFF, or DWARF 2).  GDB can work with this
3269           debugging information.
3270
3271           On most systems that use stabs format, -g enables use of extra
3272           debugging information that only GDB can use; this extra information
3273           makes debugging work better in GDB but will probably make other
3274           debuggers crash or refuse to read the program.  If you want to
3275           control for certain whether to generate the extra information, use
3276           -gstabs+, -gstabs, -gxcoff+, -gxcoff, or -gvms (see below).
3277
3278           GCC allows you to use -g with -O.  The shortcuts taken by optimized
3279           code may occasionally produce surprising results: some variables
3280           you declared may not exist at all; flow of control may briefly move
3281           where you did not expect it; some statements may not be executed
3282           because they compute constant results or their values were already
3283           at hand; some statements may execute in different places because
3284           they were moved out of loops.
3285
3286           Nevertheless it proves possible to debug optimized output.  This
3287           makes it reasonable to use the optimizer for programs that might
3288           have bugs.
3289
3290           The following options are useful when GCC is generated with the
3291           capability for more than one debugging format.
3292
3293       -ggdb
3294           Produce debugging information for use by GDB.  This means to use
3295           the most expressive format available (DWARF 2, stabs, or the native
3296           format if neither of those are supported), including GDB extensions
3297           if at all possible.
3298
3299       -gstabs
3300           Produce debugging information in stabs format (if that is
3301           supported), without GDB extensions.  This is the format used by DBX
3302           on most BSD systems.  On MIPS, Alpha and System V Release 4 systems
3303           this option produces stabs debugging output which is not understood
3304           by DBX or SDB.  On System V Release 4 systems this option requires
3305           the GNU assembler.
3306
3307       -feliminate-unused-debug-symbols
3308           Produce debugging information in stabs format (if that is
3309           supported), for only symbols that are actually used.
3310
3311       -femit-class-debug-always
3312           Instead of emitting debugging information for a C++ class in only
3313           one object file, emit it in all object files using the class.  This
3314           option should be used only with debuggers that are unable to handle
3315           the way GCC normally emits debugging information for classes
3316           because using this option will increase the size of debugging
3317           information by as much as a factor of two.
3318
3319       -gstabs+
3320           Produce debugging information in stabs format (if that is
3321           supported), using GNU extensions understood only by the GNU
3322           debugger (GDB).  The use of these extensions is likely to make
3323           other debuggers crash or refuse to read the program.
3324
3325       -gcoff
3326           Produce debugging information in COFF format (if that is
3327           supported).  This is the format used by SDB on most System V
3328           systems prior to System V Release 4.
3329
3330       -gxcoff
3331           Produce debugging information in XCOFF format (if that is
3332           supported).  This is the format used by the DBX debugger on IBM
3333           RS/6000 systems.
3334
3335       -gxcoff+
3336           Produce debugging information in XCOFF format (if that is
3337           supported), using GNU extensions understood only by the GNU
3338           debugger (GDB).  The use of these extensions is likely to make
3339           other debuggers crash or refuse to read the program, and may cause
3340           assemblers other than the GNU assembler (GAS) to fail with an
3341           error.
3342
3343       -gdwarf-version
3344           Produce debugging information in DWARF format (if that is
3345           supported).  This is the format used by DBX on IRIX 6.  The value
3346           of version may be either 2 or 3; the default version is 3.
3347
3348           Note that with DWARF version 2 some ports require, and will always
3349           use, some non-conflicting DWARF 3 extensions in the unwind tables.
3350
3351       -gstrict-dwarf
3352           Disallow using extensions of later DWARF standard version than
3353           selected with -gdwarf-version.  On most targets using non-
3354           conflicting DWARF extensions from later standard versions is
3355           allowed.
3356
3357       -gno-strict-dwarf
3358           Allow using extensions of later DWARF standard version than
3359           selected with -gdwarf-version.
3360
3361       -gvms
3362           Produce debugging information in VMS debug format (if that is
3363           supported).  This is the format used by DEBUG on VMS systems.
3364
3365       -glevel
3366       -ggdblevel
3367       -gstabslevel
3368       -gcofflevel
3369       -gxcofflevel
3370       -gvmslevel
3371           Request debugging information and also use level to specify how
3372           much information.  The default level is 2.
3373
3374           Level 0 produces no debug information at all.  Thus, -g0 negates
3375           -g.
3376
3377           Level 1 produces minimal information, enough for making backtraces
3378           in parts of the program that you don't plan to debug.  This
3379           includes descriptions of functions and external variables, but no
3380           information about local variables and no line numbers.
3381
3382           Level 3 includes extra information, such as all the macro
3383           definitions present in the program.  Some debuggers support macro
3384           expansion when you use -g3.
3385
3386           -gdwarf-2 does not accept a concatenated debug level, because GCC
3387           used to support an option -gdwarf that meant to generate debug
3388           information in version 1 of the DWARF format (which is very
3389           different from version 2), and it would have been too confusing.
3390           That debug format is long obsolete, but the option cannot be
3391           changed now.  Instead use an additional -glevel option to change
3392           the debug level for DWARF.
3393
3394       -gtoggle
3395           Turn off generation of debug info, if leaving out this option would
3396           have generated it, or turn it on at level 2 otherwise.  The
3397           position of this argument in the command line does not matter, it
3398           takes effect after all other options are processed, and it does so
3399           only once, no matter how many times it is given.  This is mainly
3400           intended to be used with -fcompare-debug.
3401
3402       -fdump-final-insns[=file]
3403           Dump the final internal representation (RTL) to file.  If the
3404           optional argument is omitted (or if file is "."), the name of the
3405           dump file will be determined by appending ".gkd" to the compilation
3406           output file name.
3407
3408       -fcompare-debug[=opts]
3409           If no error occurs during compilation, run the compiler a second
3410           time, adding opts and -fcompare-debug-second to the arguments
3411           passed to the second compilation.  Dump the final internal
3412           representation in both compilations, and print an error if they
3413           differ.
3414
3415           If the equal sign is omitted, the default -gtoggle is used.
3416
3417           The environment variable GCC_COMPARE_DEBUG, if defined, non-empty
3418           and nonzero, implicitly enables -fcompare-debug.  If
3419           GCC_COMPARE_DEBUG is defined to a string starting with a dash, then
3420           it is used for opts, otherwise the default -gtoggle is used.
3421
3422           -fcompare-debug=, with the equal sign but without opts, is
3423           equivalent to -fno-compare-debug, which disables the dumping of the
3424           final representation and the second compilation, preventing even
3425           GCC_COMPARE_DEBUG from taking effect.
3426
3427           To verify full coverage during -fcompare-debug testing, set
3428           GCC_COMPARE_DEBUG to say -fcompare-debug-not-overridden, which GCC
3429           will reject as an invalid option in any actual compilation (rather
3430           than preprocessing, assembly or linking).  To get just a warning,
3431           setting GCC_COMPARE_DEBUG to -w%n-fcompare-debug not overridden
3432           will do.
3433
3434       -fcompare-debug-second
3435           This option is implicitly passed to the compiler for the second
3436           compilation requested by -fcompare-debug, along with options to
3437           silence warnings, and omitting other options that would cause side-
3438           effect compiler outputs to files or to the standard output.  Dump
3439           files and preserved temporary files are renamed so as to contain
3440           the ".gk" additional extension during the second compilation, to
3441           avoid overwriting those generated by the first.
3442
3443           When this option is passed to the compiler driver, it causes the
3444           first compilation to be skipped, which makes it useful for little
3445           other than debugging the compiler proper.
3446
3447       -feliminate-dwarf2-dups
3448           Compress DWARF2 debugging information by eliminating duplicated
3449           information about each symbol.  This option only makes sense when
3450           generating DWARF2 debugging information with -gdwarf-2.
3451
3452       -femit-struct-debug-baseonly
3453           Emit debug information for struct-like types only when the base
3454           name of the compilation source file matches the base name of file
3455           in which the struct was defined.
3456
3457           This option substantially reduces the size of debugging
3458           information, but at significant potential loss in type information
3459           to the debugger.  See -femit-struct-debug-reduced for a less
3460           aggressive option.  See -femit-struct-debug-detailed for more
3461           detailed control.
3462
3463           This option works only with DWARF 2.
3464
3465       -femit-struct-debug-reduced
3466           Emit debug information for struct-like types only when the base
3467           name of the compilation source file matches the base name of file
3468           in which the type was defined, unless the struct is a template or
3469           defined in a system header.
3470
3471           This option significantly reduces the size of debugging
3472           information, with some potential loss in type information to the
3473           debugger.  See -femit-struct-debug-baseonly for a more aggressive
3474           option.  See -femit-struct-debug-detailed for more detailed
3475           control.
3476
3477           This option works only with DWARF 2.
3478
3479       -femit-struct-debug-detailed[=spec-list]
3480           Specify the struct-like types for which the compiler will generate
3481           debug information.  The intent is to reduce duplicate struct debug
3482           information between different object files within the same program.
3483
3484           This option is a detailed version of -femit-struct-debug-reduced
3485           and -femit-struct-debug-baseonly, which will serve for most needs.
3486
3487           A specification has the syntax
3488           [dir:|ind:][ord:|gen:](any|sys|base|none)
3489
3490           The optional first word limits the specification to structs that
3491           are used directly (dir:) or used indirectly (ind:).  A struct type
3492           is used directly when it is the type of a variable, member.
3493           Indirect uses arise through pointers to structs.  That is, when use
3494           of an incomplete struct would be legal, the use is indirect.  An
3495           example is struct one direct; struct two * indirect;.
3496
3497           The optional second word limits the specification to ordinary
3498           structs (ord:) or generic structs (gen:).  Generic structs are a
3499           bit complicated to explain.  For C++, these are non-explicit
3500           specializations of template classes, or non-template classes within
3501           the above.  Other programming languages have generics, but
3502           -femit-struct-debug-detailed does not yet implement them.
3503
3504           The third word specifies the source files for those structs for
3505           which the compiler will emit debug information.  The values none
3506           and any have the normal meaning.  The value base means that the
3507           base of name of the file in which the type declaration appears must
3508           match the base of the name of the main compilation file.  In
3509           practice, this means that types declared in foo.c and foo.h will
3510           have debug information, but types declared in other header will
3511           not.  The value sys means those types satisfying base or declared
3512           in system or compiler headers.
3513
3514           You may need to experiment to determine the best settings for your
3515           application.
3516
3517           The default is -femit-struct-debug-detailed=all.
3518
3519           This option works only with DWARF 2.
3520
3521       -fno-merge-debug-strings
3522           Direct the linker to not merge together strings in the debugging
3523           information which are identical in different object files.  Merging
3524           is not supported by all assemblers or linkers.  Merging decreases
3525           the size of the debug information in the output file at the cost of
3526           increasing link processing time.  Merging is enabled by default.
3527
3528       -fdebug-prefix-map=old=new
3529           When compiling files in directory old, record debugging information
3530           describing them as in new instead.
3531
3532       -fno-dwarf2-cfi-asm
3533           Emit DWARF 2 unwind info as compiler generated ".eh_frame" section
3534           instead of using GAS ".cfi_*" directives.
3535
3536       -p  Generate extra code to write profile information suitable for the
3537           analysis program prof.  You must use this option when compiling the
3538           source files you want data about, and you must also use it when
3539           linking.
3540
3541       -pg Generate extra code to write profile information suitable for the
3542           analysis program gprof.  You must use this option when compiling
3543           the source files you want data about, and you must also use it when
3544           linking.
3545
3546       -Q  Makes the compiler print out each function name as it is compiled,
3547           and print some statistics about each pass when it finishes.
3548
3549       -ftime-report
3550           Makes the compiler print some statistics about the time consumed by
3551           each pass when it finishes.
3552
3553       -fmem-report
3554           Makes the compiler print some statistics about permanent memory
3555           allocation when it finishes.
3556
3557       -fpre-ipa-mem-report
3558       -fpost-ipa-mem-report
3559           Makes the compiler print some statistics about permanent memory
3560           allocation before or after interprocedural optimization.
3561
3562       -fprofile-arcs
3563           Add code so that program flow arcs are instrumented.  During
3564           execution the program records how many times each branch and call
3565           is executed and how many times it is taken or returns.  When the
3566           compiled program exits it saves this data to a file called
3567           auxname.gcda for each source file.  The data may be used for
3568           profile-directed optimizations (-fbranch-probabilities), or for
3569           test coverage analysis (-ftest-coverage).  Each object file's
3570           auxname is generated from the name of the output file, if
3571           explicitly specified and it is not the final executable, otherwise
3572           it is the basename of the source file.  In both cases any suffix is
3573           removed (e.g. foo.gcda for input file dir/foo.c, or dir/foo.gcda
3574           for output file specified as -o dir/foo.o).
3575
3576       --coverage
3577           This option is used to compile and link code instrumented for
3578           coverage analysis.  The option is a synonym for -fprofile-arcs
3579           -ftest-coverage (when compiling) and -lgcov (when linking).  See
3580           the documentation for those options for more details.
3581
3582           ·   Compile the source files with -fprofile-arcs plus optimization
3583               and code generation options.  For test coverage analysis, use
3584               the additional -ftest-coverage option.  You do not need to
3585               profile every source file in a program.
3586
3587           ·   Link your object files with -lgcov or -fprofile-arcs (the
3588               latter implies the former).
3589
3590           ·   Run the program on a representative workload to generate the
3591               arc profile information.  This may be repeated any number of
3592               times.  You can run concurrent instances of your program, and
3593               provided that the file system supports locking, the data files
3594               will be correctly updated.  Also "fork" calls are detected and
3595               correctly handled (double counting will not happen).
3596
3597           ·   For profile-directed optimizations, compile the source files
3598               again with the same optimization and code generation options
3599               plus -fbranch-probabilities.
3600
3601           ·   For test coverage analysis, use gcov to produce human readable
3602               information from the .gcno and .gcda files.  Refer to the gcov
3603               documentation for further information.
3604
3605           With -fprofile-arcs, for each function of your program GCC creates
3606           a program flow graph, then finds a spanning tree for the graph.
3607           Only arcs that are not on the spanning tree have to be
3608           instrumented: the compiler adds code to count the number of times
3609           that these arcs are executed.  When an arc is the only exit or only
3610           entrance to a block, the instrumentation code can be added to the
3611           block; otherwise, a new basic block must be created to hold the
3612           instrumentation code.
3613
3614       -ftest-coverage
3615           Produce a notes file that the gcov code-coverage utility can use to
3616           show program coverage.  Each source file's note file is called
3617           auxname.gcno.  Refer to the -fprofile-arcs option above for a
3618           description of auxname and instructions on how to generate test
3619           coverage data.  Coverage data will match the source files more
3620           closely, if you do not optimize.
3621
3622       -fdbg-cnt-list
3623           Print the name and the counter upperbound for all debug counters.
3624
3625       -fdbg-cnt=counter-value-list
3626           Set the internal debug counter upperbound. counter-value-list is a
3627           comma-separated list of name:value pairs which sets the upperbound
3628           of each debug counter name to value.  All debug counters have the
3629           initial upperbound of UINT_MAX, thus dbg_cnt() returns true always
3630           unless the upperbound is set by this option.  e.g. With
3631           -fdbg-cnt=dce:10,tail_call:0 dbg_cnt(dce) will return true only for
3632           first 10 invocations and dbg_cnt(tail_call) will return false
3633           always.
3634
3635       -dletters
3636       -fdump-rtl-pass
3637           Says to make debugging dumps during compilation at times specified
3638           by letters.    This is used for debugging the RTL-based passes of
3639           the compiler.  The file names for most of the dumps are made by
3640           appending a pass number and a word to the dumpname.  dumpname is
3641           generated from the name of the output file, if explicitly specified
3642           and it is not an executable, otherwise it is the basename of the
3643           source file. These switches may have different effects when -E is
3644           used for preprocessing.
3645
3646           Debug dumps can be enabled with a -fdump-rtl switch or some -d
3647           option letters.  Here are the possible letters for use in pass and
3648           letters, and their meanings:
3649
3650           -fdump-rtl-alignments
3651               Dump after branch alignments have been computed.
3652
3653           -fdump-rtl-asmcons
3654               Dump after fixing rtl statements that have unsatisfied in/out
3655               constraints.
3656
3657           -fdump-rtl-auto_inc_dec
3658               Dump after auto-inc-dec discovery.  This pass is only run on
3659               architectures that have auto inc or auto dec instructions.
3660
3661           -fdump-rtl-barriers
3662               Dump after cleaning up the barrier instructions.
3663
3664           -fdump-rtl-bbpart
3665               Dump after partitioning hot and cold basic blocks.
3666
3667           -fdump-rtl-bbro
3668               Dump after block reordering.
3669
3670           -fdump-rtl-btl1
3671           -fdump-rtl-btl2
3672               -fdump-rtl-btl1 and -fdump-rtl-btl2 enable dumping after the
3673               two branch target load optimization passes.
3674
3675           -fdump-rtl-bypass
3676               Dump after jump bypassing and control flow optimizations.
3677
3678           -fdump-rtl-combine
3679               Dump after the RTL instruction combination pass.
3680
3681           -fdump-rtl-compgotos
3682               Dump after duplicating the computed gotos.
3683
3684           -fdump-rtl-ce1
3685           -fdump-rtl-ce2
3686           -fdump-rtl-ce3
3687               -fdump-rtl-ce1, -fdump-rtl-ce2, and -fdump-rtl-ce3 enable
3688               dumping after the three if conversion passes.
3689
3690           -fdump-rtl-cprop_hardreg
3691               Dump after hard register copy propagation.
3692
3693           -fdump-rtl-csa
3694               Dump after combining stack adjustments.
3695
3696           -fdump-rtl-cse1
3697           -fdump-rtl-cse2
3698               -fdump-rtl-cse1 and -fdump-rtl-cse2 enable dumping after the
3699               two common sub-expression elimination passes.
3700
3701           -fdump-rtl-dce
3702               Dump after the standalone dead code elimination passes.
3703
3704           -fdump-rtl-dbr
3705               Dump after delayed branch scheduling.
3706
3707           -fdump-rtl-dce1
3708           -fdump-rtl-dce2
3709               -fdump-rtl-dce1 and -fdump-rtl-dce2 enable dumping after the
3710               two dead store elimination passes.
3711
3712           -fdump-rtl-eh
3713               Dump after finalization of EH handling code.
3714
3715           -fdump-rtl-eh_ranges
3716               Dump after conversion of EH handling range regions.
3717
3718           -fdump-rtl-expand
3719               Dump after RTL generation.
3720
3721           -fdump-rtl-fwprop1
3722           -fdump-rtl-fwprop2
3723               -fdump-rtl-fwprop1 and -fdump-rtl-fwprop2 enable dumping after
3724               the two forward propagation passes.
3725
3726           -fdump-rtl-gcse1
3727           -fdump-rtl-gcse2
3728               -fdump-rtl-gcse1 and -fdump-rtl-gcse2 enable dumping after
3729               global common subexpression elimination.
3730
3731           -fdump-rtl-init-regs
3732               Dump after the initialization of the registers.
3733
3734           -fdump-rtl-initvals
3735               Dump after the computation of the initial value sets.
3736
3737           -fdump-rtl-into_cfglayout
3738               Dump after converting to cfglayout mode.
3739
3740           -fdump-rtl-ira
3741               Dump after iterated register allocation.
3742
3743           -fdump-rtl-jump
3744               Dump after the second jump optimization.
3745
3746           -fdump-rtl-loop2
3747               -fdump-rtl-loop2 enables dumping after the rtl loop
3748               optimization passes.
3749
3750           -fdump-rtl-mach
3751               Dump after performing the machine dependent reorganization
3752               pass, if that pass exists.
3753
3754           -fdump-rtl-mode_sw
3755               Dump after removing redundant mode switches.
3756
3757           -fdump-rtl-rnreg
3758               Dump after register renumbering.
3759
3760           -fdump-rtl-outof_cfglayout
3761               Dump after converting from cfglayout mode.
3762
3763           -fdump-rtl-peephole2
3764               Dump after the peephole pass.
3765
3766           -fdump-rtl-postreload
3767               Dump after post-reload optimizations.
3768
3769           -fdump-rtl-pro_and_epilogue
3770               Dump after generating the function pro and epilogues.
3771
3772           -fdump-rtl-regmove
3773               Dump after the register move pass.
3774
3775           -fdump-rtl-sched1
3776           -fdump-rtl-sched2
3777               -fdump-rtl-sched1 and -fdump-rtl-sched2 enable dumping after
3778               the basic block scheduling passes.
3779
3780           -fdump-rtl-see
3781               Dump after sign extension elimination.
3782
3783           -fdump-rtl-seqabstr
3784               Dump after common sequence discovery.
3785
3786           -fdump-rtl-shorten
3787               Dump after shortening branches.
3788
3789           -fdump-rtl-sibling
3790               Dump after sibling call optimizations.
3791
3792           -fdump-rtl-split1
3793           -fdump-rtl-split2
3794           -fdump-rtl-split3
3795           -fdump-rtl-split4
3796           -fdump-rtl-split5
3797               -fdump-rtl-split1, -fdump-rtl-split2, -fdump-rtl-split3,
3798               -fdump-rtl-split4 and -fdump-rtl-split5 enable dumping after
3799               five rounds of instruction splitting.
3800
3801           -fdump-rtl-sms
3802               Dump after modulo scheduling.  This pass is only run on some
3803               architectures.
3804
3805           -fdump-rtl-stack
3806               Dump after conversion from GCC's "flat register file" registers
3807               to the x87's stack-like registers.  This pass is only run on
3808               x86 variants.
3809
3810           -fdump-rtl-subreg1
3811           -fdump-rtl-subreg2
3812               -fdump-rtl-subreg1 and -fdump-rtl-subreg2 enable dumping after
3813               the two subreg expansion passes.
3814
3815           -fdump-rtl-unshare
3816               Dump after all rtl has been unshared.
3817
3818           -fdump-rtl-vartrack
3819               Dump after variable tracking.
3820
3821           -fdump-rtl-vregs
3822               Dump after converting virtual registers to hard registers.
3823
3824           -fdump-rtl-web
3825               Dump after live range splitting.
3826
3827           -fdump-rtl-regclass
3828           -fdump-rtl-subregs_of_mode_init
3829           -fdump-rtl-subregs_of_mode_finish
3830           -fdump-rtl-dfinit
3831           -fdump-rtl-dfinish
3832               These dumps are defined but always produce empty files.
3833
3834           -fdump-rtl-all
3835               Produce all the dumps listed above.
3836
3837           -dA Annotate the assembler output with miscellaneous debugging
3838               information.
3839
3840           -dD Dump all macro definitions, at the end of preprocessing, in
3841               addition to normal output.
3842
3843           -dH Produce a core dump whenever an error occurs.
3844
3845           -dm Print statistics on memory usage, at the end of the run, to
3846               standard error.
3847
3848           -dp Annotate the assembler output with a comment indicating which
3849               pattern and alternative was used.  The length of each
3850               instruction is also printed.
3851
3852           -dP Dump the RTL in the assembler output as a comment before each
3853               instruction.  Also turns on -dp annotation.
3854
3855           -dv For each of the other indicated dump files (-fdump-rtl-pass),
3856               dump a representation of the control flow graph suitable for
3857               viewing with VCG to file.pass.vcg.
3858
3859           -dx Just generate RTL for a function instead of compiling it.
3860               Usually used with -fdump-rtl-expand.
3861
3862           -dy Dump debugging information during parsing, to standard error.
3863
3864       -fdump-noaddr
3865           When doing debugging dumps, suppress address output.  This makes it
3866           more feasible to use diff on debugging dumps for compiler
3867           invocations with different compiler binaries and/or different text
3868           / bss / data / heap / stack / dso start locations.
3869
3870       -fdump-unnumbered
3871           When doing debugging dumps, suppress instruction numbers and
3872           address output.  This makes it more feasible to use diff on
3873           debugging dumps for compiler invocations with different options, in
3874           particular with and without -g.
3875
3876       -fdump-unnumbered-links
3877           When doing debugging dumps (see -d option above), suppress
3878           instruction numbers for the links to the previous and next
3879           instructions in a sequence.
3880
3881       -fdump-translation-unit (C++ only)
3882       -fdump-translation-unit-options (C++ only)
3883           Dump a representation of the tree structure for the entire
3884           translation unit to a file.  The file name is made by appending .tu
3885           to the source file name.  If the -options form is used, options
3886           controls the details of the dump as described for the -fdump-tree
3887           options.
3888
3889       -fdump-class-hierarchy (C++ only)
3890       -fdump-class-hierarchy-options (C++ only)
3891           Dump a representation of each class's hierarchy and virtual
3892           function table layout to a file.  The file name is made by
3893           appending .class to the source file name.  If the -options form is
3894           used, options controls the details of the dump as described for the
3895           -fdump-tree options.
3896
3897       -fdump-ipa-switch
3898           Control the dumping at various stages of inter-procedural analysis
3899           language tree to a file.  The file name is generated by appending a
3900           switch specific suffix to the source file name.  The following
3901           dumps are possible:
3902
3903           all Enables all inter-procedural analysis dumps.
3904
3905           cgraph
3906               Dumps information about call-graph optimization, unused
3907               function removal, and inlining decisions.
3908
3909           inline
3910               Dump after function inlining.
3911
3912       -fdump-statistics-option
3913           Enable and control dumping of pass statistics in a separate file.
3914           The file name is generated by appending a suffix ending in
3915           .statistics to the source file name.  If the -option form is used,
3916           -stats will cause counters to be summed over the whole compilation
3917           unit while -details will dump every event as the passes generate
3918           them.  The default with no option is to sum counters for each
3919           function compiled.
3920
3921       -fdump-tree-switch
3922       -fdump-tree-switch-options
3923           Control the dumping at various stages of processing the
3924           intermediate language tree to a file.  The file name is generated
3925           by appending a switch specific suffix to the source file name.  If
3926           the -options form is used, options is a list of - separated options
3927           that control the details of the dump.  Not all options are
3928           applicable to all dumps, those which are not meaningful will be
3929           ignored.  The following options are available
3930
3931           address
3932               Print the address of each node.  Usually this is not meaningful
3933               as it changes according to the environment and source file.
3934               Its primary use is for tying up a dump file with a debug
3935               environment.
3936
3937           slim
3938               Inhibit dumping of members of a scope or body of a function
3939               merely because that scope has been reached.  Only dump such
3940               items when they are directly reachable by some other path.
3941               When dumping pretty-printed trees, this option inhibits dumping
3942               the bodies of control structures.
3943
3944           raw Print a raw representation of the tree.  By default, trees are
3945               pretty-printed into a C-like representation.
3946
3947           details
3948               Enable more detailed dumps (not honored by every dump option).
3949
3950           stats
3951               Enable dumping various statistics about the pass (not honored
3952               by every dump option).
3953
3954           blocks
3955               Enable showing basic block boundaries (disabled in raw dumps).
3956
3957           vops
3958               Enable showing virtual operands for every statement.
3959
3960           lineno
3961               Enable showing line numbers for statements.
3962
3963           uid Enable showing the unique ID ("DECL_UID") for each variable.
3964
3965           verbose
3966               Enable showing the tree dump for each statement.
3967
3968           all Turn on all options, except raw, slim, verbose and lineno.
3969
3970           The following tree dumps are possible:
3971
3972           original
3973               Dump before any tree based optimization, to file.original.
3974
3975           optimized
3976               Dump after all tree based optimization, to file.optimized.
3977
3978           gimple
3979               Dump each function before and after the gimplification pass to
3980               a file.  The file name is made by appending .gimple to the
3981               source file name.
3982
3983           cfg Dump the control flow graph of each function to a file.  The
3984               file name is made by appending .cfg to the source file name.
3985
3986           vcg Dump the control flow graph of each function to a file in VCG
3987               format.  The file name is made by appending .vcg to the source
3988               file name.  Note that if the file contains more than one
3989               function, the generated file cannot be used directly by VCG.
3990               You will need to cut and paste each function's graph into its
3991               own separate file first.
3992
3993           ch  Dump each function after copying loop headers.  The file name
3994               is made by appending .ch to the source file name.
3995
3996           ssa Dump SSA related information to a file.  The file name is made
3997               by appending .ssa to the source file name.
3998
3999           alias
4000               Dump aliasing information for each function.  The file name is
4001               made by appending .alias to the source file name.
4002
4003           ccp Dump each function after CCP.  The file name is made by
4004               appending .ccp to the source file name.
4005
4006           storeccp
4007               Dump each function after STORE-CCP.  The file name is made by
4008               appending .storeccp to the source file name.
4009
4010           pre Dump trees after partial redundancy elimination.  The file name
4011               is made by appending .pre to the source file name.
4012
4013           fre Dump trees after full redundancy elimination.  The file name is
4014               made by appending .fre to the source file name.
4015
4016           copyprop
4017               Dump trees after copy propagation.  The file name is made by
4018               appending .copyprop to the source file name.
4019
4020           store_copyprop
4021               Dump trees after store copy-propagation.  The file name is made
4022               by appending .store_copyprop to the source file name.
4023
4024           dce Dump each function after dead code elimination.  The file name
4025               is made by appending .dce to the source file name.
4026
4027           mudflap
4028               Dump each function after adding mudflap instrumentation.  The
4029               file name is made by appending .mudflap to the source file
4030               name.
4031
4032           sra Dump each function after performing scalar replacement of
4033               aggregates.  The file name is made by appending .sra to the
4034               source file name.
4035
4036           sink
4037               Dump each function after performing code sinking.  The file
4038               name is made by appending .sink to the source file name.
4039
4040           dom Dump each function after applying dominator tree optimizations.
4041               The file name is made by appending .dom to the source file
4042               name.
4043
4044           dse Dump each function after applying dead store elimination.  The
4045               file name is made by appending .dse to the source file name.
4046
4047           phiopt
4048               Dump each function after optimizing PHI nodes into straightline
4049               code.  The file name is made by appending .phiopt to the source
4050               file name.
4051
4052           forwprop
4053               Dump each function after forward propagating single use
4054               variables.  The file name is made by appending .forwprop to the
4055               source file name.
4056
4057           copyrename
4058               Dump each function after applying the copy rename optimization.
4059               The file name is made by appending .copyrename to the source
4060               file name.
4061
4062           nrv Dump each function after applying the named return value
4063               optimization on generic trees.  The file name is made by
4064               appending .nrv to the source file name.
4065
4066           vect
4067               Dump each function after applying vectorization of loops.  The
4068               file name is made by appending .vect to the source file name.
4069
4070           vrp Dump each function after Value Range Propagation (VRP).  The
4071               file name is made by appending .vrp to the source file name.
4072
4073           all Enable all the available tree dumps with the flags provided in
4074               this option.
4075
4076       -ftree-vectorizer-verbose=n
4077           This option controls the amount of debugging output the vectorizer
4078           prints.  This information is written to standard error, unless
4079           -fdump-tree-all or -fdump-tree-vect is specified, in which case it
4080           is output to the usual dump listing file, .vect.  For n=0 no
4081           diagnostic information is reported.  If n=1 the vectorizer reports
4082           each loop that got vectorized, and the total number of loops that
4083           got vectorized.  If n=2 the vectorizer also reports non-vectorized
4084           loops that passed the first analysis phase (vect_analyze_loop_form)
4085           - i.e. countable, inner-most, single-bb, single-entry/exit loops.
4086           This is the same verbosity level that -fdump-tree-vect-stats uses.
4087           Higher verbosity levels mean either more information dumped for
4088           each reported loop, or same amount of information reported for more
4089           loops: If n=3, alignment related information is added to the
4090           reports.  If n=4, data-references related information (e.g. memory
4091           dependences, memory access-patterns) is added to the reports.  If
4092           n=5, the vectorizer reports also non-vectorized inner-most loops
4093           that did not pass the first analysis phase (i.e., may not be
4094           countable, or may have complicated control-flow).  If n=6, the
4095           vectorizer reports also non-vectorized nested loops.  For n=7, all
4096           the information the vectorizer generates during its analysis and
4097           transformation is reported.  This is the same verbosity level that
4098           -fdump-tree-vect-details uses.
4099
4100       -frandom-seed=string
4101           This option provides a seed that GCC uses when it would otherwise
4102           use random numbers.  It is used to generate certain symbol names
4103           that have to be different in every compiled file.  It is also used
4104           to place unique stamps in coverage data files and the object files
4105           that produce them.  You can use the -frandom-seed option to produce
4106           reproducibly identical object files.
4107
4108           The string should be different for every file you compile.
4109
4110       -fsched-verbose=n
4111           On targets that use instruction scheduling, this option controls
4112           the amount of debugging output the scheduler prints.  This
4113           information is written to standard error, unless -fdump-rtl-sched1
4114           or -fdump-rtl-sched2 is specified, in which case it is output to
4115           the usual dump listing file, .sched or .sched2 respectively.
4116           However for n greater than nine, the output is always printed to
4117           standard error.
4118
4119           For n greater than zero, -fsched-verbose outputs the same
4120           information as -fdump-rtl-sched1 and -fdump-rtl-sched2.  For n
4121           greater than one, it also output basic block probabilities,
4122           detailed ready list information and unit/insn info.  For n greater
4123           than two, it includes RTL at abort point, control-flow and regions
4124           info.  And for n over four, -fsched-verbose also includes
4125           dependence info.
4126
4127       -save-temps
4128           Store the usual "temporary" intermediate files permanently; place
4129           them in the current directory and name them based on the source
4130           file.  Thus, compiling foo.c with -c -save-temps would produce
4131           files foo.i and foo.s, as well as foo.o.  This creates a
4132           preprocessed foo.i output file even though the compiler now
4133           normally uses an integrated preprocessor.
4134
4135           When used in combination with the -x command line option,
4136           -save-temps is sensible enough to avoid over writing an input
4137           source file with the same extension as an intermediate file.  The
4138           corresponding intermediate file may be obtained by renaming the
4139           source file before using -save-temps.
4140
4141       -time[=file]
4142           Report the CPU time taken by each subprocess in the compilation
4143           sequence.  For C source files, this is the compiler proper and
4144           assembler (plus the linker if linking is done).
4145
4146           Without the specification of an output file, the output looks like
4147           this:
4148
4149                   # cc1 0.12 0.01
4150                   # as 0.00 0.01
4151
4152           The first number on each line is the "user time", that is time
4153           spent executing the program itself.  The second number is "system
4154           time", time spent executing operating system routines on behalf of
4155           the program.  Both numbers are in seconds.
4156
4157           With the specification of an output file, the output is appended to
4158           the named file, and it looks like this:
4159
4160                   0.12 0.01 cc1 <options>
4161                   0.00 0.01 as <options>
4162
4163           The "user time" and the "system time" are moved before the program
4164           name, and the options passed to the program are displayed, so that
4165           one can later tell what file was being compiled, and with which
4166           options.
4167
4168       -fvar-tracking
4169           Run variable tracking pass.  It computes where variables are stored
4170           at each position in code.  Better debugging information is then
4171           generated (if the debugging information format supports this
4172           information).
4173
4174           It is enabled by default when compiling with optimization (-Os, -O,
4175           -O2, ...), debugging information (-g) and the debug info format
4176           supports it.
4177
4178       -fvar-tracking-assignments
4179           Annotate assignments to user variables early in the compilation and
4180           attempt to carry the annotations over throughout the compilation
4181           all the way to the end, in an attempt to improve debug information
4182           while optimizing.
4183
4184           It can be enabled even if var-tracking is disabled, in which case
4185           annotations will be created and maintained, but discarded at the
4186           end.
4187
4188       -fvar-tracking-assignments-toggle
4189           Toggle -fvar-tracking-assignments, in the same way that -gtoggle
4190           toggles -g.
4191
4192       -print-file-name=library
4193           Print the full absolute name of the library file library that would
4194           be used when linking---and don't do anything else.  With this
4195           option, GCC does not compile or link anything; it just prints the
4196           file name.
4197
4198       -print-multi-directory
4199           Print the directory name corresponding to the multilib selected by
4200           any other switches present in the command line.  This directory is
4201           supposed to exist in GCC_EXEC_PREFIX.
4202
4203       -print-multi-lib
4204           Print the mapping from multilib directory names to compiler
4205           switches that enable them.  The directory name is separated from
4206           the switches by ;, and each switch starts with an @} instead of the
4207           @samp{-, without spaces between multiple switches.  This is
4208           supposed to ease shell-processing.
4209
4210       -print-multi-os-directory
4211           Print the path to OS libraries for the selected multilib, relative
4212           to some lib subdirectory.  If OS libraries are present in the lib
4213           subdirectory and no multilibs are used, this is usually just ., if
4214           OS libraries are present in libsuffix sibling directories this
4215           prints e.g. ../lib64, ../lib or ../lib32, or if OS libraries are
4216           present in lib/subdir subdirectories it prints e.g. amd64, sparcv9
4217           or ev6.
4218
4219       -print-prog-name=program
4220           Like -print-file-name, but searches for a program such as cpp.
4221
4222       -print-libgcc-file-name
4223           Same as -print-file-name=libgcc.a.
4224
4225           This is useful when you use -nostdlib or -nodefaultlibs but you do
4226           want to link with libgcc.a.  You can do
4227
4228                   gcc -nostdlib <files>... `gcc -print-libgcc-file-name`
4229
4230       -print-search-dirs
4231           Print the name of the configured installation directory and a list
4232           of program and library directories gcc will search---and don't do
4233           anything else.
4234
4235           This is useful when gcc prints the error message installation
4236           problem, cannot exec cpp0: No such file or directory.  To resolve
4237           this you either need to put cpp0 and the other compiler components
4238           where gcc expects to find them, or you can set the environment
4239           variable GCC_EXEC_PREFIX to the directory where you installed them.
4240           Don't forget the trailing /.
4241
4242       -print-sysroot
4243           Print the target sysroot directory that will be used during
4244           compilation.  This is the target sysroot specified either at
4245           configure time or using the --sysroot option, possibly with an
4246           extra suffix that depends on compilation options.  If no target
4247           sysroot is specified, the option prints nothing.
4248
4249       -print-sysroot-headers-suffix
4250           Print the suffix added to the target sysroot when searching for
4251           headers, or give an error if the compiler is not configured with
4252           such a suffix---and don't do anything else.
4253
4254       -dumpmachine
4255           Print the compiler's target machine (for example,
4256           i686-pc-linux-gnu)---and don't do anything else.
4257
4258       -dumpversion
4259           Print the compiler version (for example, 3.0)---and don't do
4260           anything else.
4261
4262       -dumpspecs
4263           Print the compiler's built-in specs---and don't do anything else.
4264           (This is used when GCC itself is being built.)
4265
4266       -feliminate-unused-debug-types
4267           Normally, when producing DWARF2 output, GCC will emit debugging
4268           information for all types declared in a compilation unit,
4269           regardless of whether or not they are actually used in that
4270           compilation unit.  Sometimes this is useful, such as if, in the
4271           debugger, you want to cast a value to a type that is not actually
4272           used in your program (but is declared).  More often, however, this
4273           results in a significant amount of wasted space.  With this option,
4274           GCC will avoid producing debug symbol output for types that are
4275           nowhere used in the source file being compiled.
4276
4277   Options That Control Optimization
4278       These options control various sorts of optimizations.
4279
4280       Without any optimization option, the compiler's goal is to reduce the
4281       cost of compilation and to make debugging produce the expected results.
4282       Statements are independent: if you stop the program with a breakpoint
4283       between statements, you can then assign a new value to any variable or
4284       change the program counter to any other statement in the function and
4285       get exactly the results you would expect from the source code.
4286
4287       Turning on optimization flags makes the compiler attempt to improve the
4288       performance and/or code size at the expense of compilation time and
4289       possibly the ability to debug the program.
4290
4291       The compiler performs optimization based on the knowledge it has of the
4292       program.  Compiling multiple files at once to a single output file mode
4293       allows the compiler to use information gained from all of the files
4294       when compiling each of them.
4295
4296       Not all optimizations are controlled directly by a flag.  Only
4297       optimizations that have a flag are listed.
4298
4299       -O
4300       -O1 Optimize.  Optimizing compilation takes somewhat more time, and a
4301           lot more memory for a large function.
4302
4303           With -O, the compiler tries to reduce code size and execution time,
4304           without performing any optimizations that take a great deal of
4305           compilation time.
4306
4307           -O turns on the following optimization flags:
4308
4309           -fauto-inc-dec -fcprop-registers -fdce -fdefer-pop -fdelayed-branch
4310           -fdse -fguess-branch-probability -fif-conversion2 -fif-conversion
4311           -finline-small-functions -fipa-pure-const -fipa-reference
4312           -fmerge-constants -fsplit-wide-types -ftree-builtin-call-dce
4313           -ftree-ccp -ftree-ch -ftree-copyrename -ftree-dce
4314           -ftree-dominator-opts -ftree-dse -ftree-fre -ftree-sra -ftree-ter
4315           -funit-at-a-time
4316
4317           -O also turns on -fomit-frame-pointer on machines where doing so
4318           does not interfere with debugging.
4319
4320       -O2 Optimize even more.  GCC performs nearly all supported
4321           optimizations that do not involve a space-speed tradeoff.  As
4322           compared to -O, this option increases both compilation time and the
4323           performance of the generated code.
4324
4325           -O2 turns on all optimization flags specified by -O.  It also turns
4326           on the following optimization flags: -fthread-jumps
4327           -falign-functions  -falign-jumps -falign-loops  -falign-labels
4328           -fcaller-saves -fcrossjumping -fcse-follow-jumps  -fcse-skip-blocks
4329           -fdelete-null-pointer-checks -fexpensive-optimizations -fgcse
4330           -fgcse-lm -findirect-inlining -foptimize-sibling-calls -fpeephole2
4331           -fregmove -freorder-blocks  -freorder-functions
4332           -frerun-cse-after-loop -fsched-interblock  -fsched-spec
4333           -fschedule-insns  -fschedule-insns2 -fstrict-aliasing
4334           -fstrict-overflow -ftree-switch-conversion -ftree-pre -ftree-vrp
4335
4336           Please note the warning under -fgcse about invoking -O2 on programs
4337           that use computed gotos.
4338
4339       -O3 Optimize yet more.  -O3 turns on all optimizations specified by -O2
4340           and also turns on the -finline-functions, -funswitch-loops,
4341           -fpredictive-commoning, -fgcse-after-reload, -ftree-vectorize and
4342           -fipa-cp-clone options.
4343
4344       -O0 Reduce compilation time and make debugging produce the expected
4345           results.  This is the default.
4346
4347       -Os Optimize for size.  -Os enables all -O2 optimizations that do not
4348           typically increase code size.  It also performs further
4349           optimizations designed to reduce code size.
4350
4351           -Os disables the following optimization flags: -falign-functions
4352           -falign-jumps  -falign-loops -falign-labels  -freorder-blocks
4353           -freorder-blocks-and-partition -fprefetch-loop-arrays
4354           -ftree-vect-loop-version
4355
4356           If you use multiple -O options, with or without level numbers, the
4357           last such option is the one that is effective.
4358
4359       Options of the form -fflag specify machine-independent flags.  Most
4360       flags have both positive and negative forms; the negative form of -ffoo
4361       would be -fno-foo.  In the table below, only one of the forms is
4362       listed---the one you typically will use.  You can figure out the other
4363       form by either removing no- or adding it.
4364
4365       The following options control specific optimizations.  They are either
4366       activated by -O options or are related to ones that are.  You can use
4367       the following flags in the rare cases when "fine-tuning" of
4368       optimizations to be performed is desired.
4369
4370       -fno-default-inline
4371           Do not make member functions inline by default merely because they
4372           are defined inside the class scope (C++ only).  Otherwise, when you
4373           specify -O, member functions defined inside class scope are
4374           compiled inline by default; i.e., you don't need to add inline in
4375           front of the member function name.
4376
4377       -fno-defer-pop
4378           Always pop the arguments to each function call as soon as that
4379           function returns.  For machines which must pop arguments after a
4380           function call, the compiler normally lets arguments accumulate on
4381           the stack for several function calls and pops them all at once.
4382
4383           Disabled at levels -O, -O2, -O3, -Os.
4384
4385       -fforward-propagate
4386           Perform a forward propagation pass on RTL.  The pass tries to
4387           combine two instructions and checks if the result can be
4388           simplified.  If loop unrolling is active, two passes are performed
4389           and the second is scheduled after loop unrolling.
4390
4391           This option is enabled by default at optimization levels -O2, -O3,
4392           -Os.
4393
4394       -fomit-frame-pointer
4395           Don't keep the frame pointer in a register for functions that don't
4396           need one.  This avoids the instructions to save, set up and restore
4397           frame pointers; it also makes an extra register available in many
4398           functions.  It also makes debugging impossible on some machines.
4399
4400           On some machines, such as the VAX, this flag has no effect, because
4401           the standard calling sequence automatically handles the frame
4402           pointer and nothing is saved by pretending it doesn't exist.  The
4403           machine-description macro "FRAME_POINTER_REQUIRED" controls whether
4404           a target machine supports this flag.
4405
4406           Enabled at levels -O, -O2, -O3, -Os.
4407
4408       -foptimize-sibling-calls
4409           Optimize sibling and tail recursive calls.
4410
4411           Enabled at levels -O2, -O3, -Os.
4412
4413       -fno-inline
4414           Don't pay attention to the "inline" keyword.  Normally this option
4415           is used to keep the compiler from expanding any functions inline.
4416           Note that if you are not optimizing, no functions can be expanded
4417           inline.
4418
4419       -finline-small-functions
4420           Integrate functions into their callers when their body is smaller
4421           than expected function call code (so overall size of program gets
4422           smaller).  The compiler heuristically decides which functions are
4423           simple enough to be worth integrating in this way.
4424
4425           Enabled at level -O2.
4426
4427       -findirect-inlining
4428           Inline also indirect calls that are discovered to be known at
4429           compile time thanks to previous inlining.  This option has any
4430           effect only when inlining itself is turned on by the
4431           -finline-functions or -finline-small-functions options.
4432
4433           Enabled at level -O2.
4434
4435       -finline-functions
4436           Integrate all simple functions into their callers.  The compiler
4437           heuristically decides which functions are simple enough to be worth
4438           integrating in this way.
4439
4440           If all calls to a given function are integrated, and the function
4441           is declared "static", then the function is normally not output as
4442           assembler code in its own right.
4443
4444           Enabled at level -O3.
4445
4446       -finline-functions-called-once
4447           Consider all "static" functions called once for inlining into their
4448           caller even if they are not marked "inline".  If a call to a given
4449           function is integrated, then the function is not output as
4450           assembler code in its own right.
4451
4452           Enabled at levels -O1, -O2, -O3 and -Os.
4453
4454       -fearly-inlining
4455           Inline functions marked by "always_inline" and functions whose body
4456           seems smaller than the function call overhead early before doing
4457           -fprofile-generate instrumentation and real inlining pass.  Doing
4458           so makes profiling significantly cheaper and usually inlining
4459           faster on programs having large chains of nested wrapper functions.
4460
4461           Enabled by default.
4462
4463       -finline-limit=n
4464           By default, GCC limits the size of functions that can be inlined.
4465           This flag allows coarse control of this limit.  n is the size of
4466           functions that can be inlined in number of pseudo instructions.
4467
4468           Inlining is actually controlled by a number of parameters, which
4469           may be specified individually by using --param name=value.  The
4470           -finline-limit=n option sets some of these parameters as follows:
4471
4472           max-inline-insns-single
4473               is set to n/2.
4474
4475           max-inline-insns-auto
4476               is set to n/2.
4477
4478           See below for a documentation of the individual parameters
4479           controlling inlining and for the defaults of these parameters.
4480
4481           Note: there may be no value to -finline-limit that results in
4482           default behavior.
4483
4484           Note: pseudo instruction represents, in this particular context, an
4485           abstract measurement of function's size.  In no way does it
4486           represent a count of assembly instructions and as such its exact
4487           meaning might change from one release to an another.
4488
4489       -fkeep-inline-functions
4490           In C, emit "static" functions that are declared "inline" into the
4491           object file, even if the function has been inlined into all of its
4492           callers.  This switch does not affect functions using the "extern
4493           inline" extension in GNU C89.  In C++, emit any and all inline
4494           functions into the object file.
4495
4496       -fkeep-static-consts
4497           Emit variables declared "static const" when optimization isn't
4498           turned on, even if the variables aren't referenced.
4499
4500           GCC enables this option by default.  If you want to force the
4501           compiler to check if the variable was referenced, regardless of
4502           whether or not optimization is turned on, use the
4503           -fno-keep-static-consts option.
4504
4505       -fmerge-constants
4506           Attempt to merge identical constants (string constants and floating
4507           point constants) across compilation units.
4508
4509           This option is the default for optimized compilation if the
4510           assembler and linker support it.  Use -fno-merge-constants to
4511           inhibit this behavior.
4512
4513           Enabled at levels -O, -O2, -O3, -Os.
4514
4515       -fmerge-all-constants
4516           Attempt to merge identical constants and identical variables.
4517
4518           This option implies -fmerge-constants.  In addition to
4519           -fmerge-constants this considers e.g. even constant initialized
4520           arrays or initialized constant variables with integral or floating
4521           point types.  Languages like C or C++ require each variable,
4522           including multiple instances of the same variable in recursive
4523           calls, to have distinct locations, so using this option will result
4524           in non-conforming behavior.
4525
4526       -fmodulo-sched
4527           Perform swing modulo scheduling immediately before the first
4528           scheduling pass.  This pass looks at innermost loops and reorders
4529           their instructions by overlapping different iterations.
4530
4531       -fmodulo-sched-allow-regmoves
4532           Perform more aggressive SMS based modulo scheduling with register
4533           moves allowed.  By setting this flag certain anti-dependences edges
4534           will be deleted which will trigger the generation of reg-moves
4535           based on the life-range analysis.  This option is effective only
4536           with -fmodulo-sched enabled.
4537
4538       -fno-branch-count-reg
4539           Do not use "decrement and branch" instructions on a count register,
4540           but instead generate a sequence of instructions that decrement a
4541           register, compare it against zero, then branch based upon the
4542           result.  This option is only meaningful on architectures that
4543           support such instructions, which include x86, PowerPC, IA-64 and
4544           S/390.
4545
4546           The default is -fbranch-count-reg.
4547
4548       -fno-function-cse
4549           Do not put function addresses in registers; make each instruction
4550           that calls a constant function contain the function's address
4551           explicitly.
4552
4553           This option results in less efficient code, but some strange hacks
4554           that alter the assembler output may be confused by the
4555           optimizations performed when this option is not used.
4556
4557           The default is -ffunction-cse
4558
4559       -fno-zero-initialized-in-bss
4560           If the target supports a BSS section, GCC by default puts variables
4561           that are initialized to zero into BSS.  This can save space in the
4562           resulting code.
4563
4564           This option turns off this behavior because some programs
4565           explicitly rely on variables going to the data section.  E.g., so
4566           that the resulting executable can find the beginning of that
4567           section and/or make assumptions based on that.
4568
4569           The default is -fzero-initialized-in-bss.
4570
4571       -fmudflap -fmudflapth -fmudflapir
4572           For front-ends that support it (C and C++), instrument all risky
4573           pointer/array dereferencing operations, some standard library
4574           string/heap functions, and some other associated constructs with
4575           range/validity tests.  Modules so instrumented should be immune to
4576           buffer overflows, invalid heap use, and some other classes of C/C++
4577           programming errors.  The instrumentation relies on a separate
4578           runtime library (libmudflap), which will be linked into a program
4579           if -fmudflap is given at link time.  Run-time behavior of the
4580           instrumented program is controlled by the MUDFLAP_OPTIONS
4581           environment variable.  See "env MUDFLAP_OPTIONS=-help a.out" for
4582           its options.
4583
4584           Use -fmudflapth instead of -fmudflap to compile and to link if your
4585           program is multi-threaded.  Use -fmudflapir, in addition to
4586           -fmudflap or -fmudflapth, if instrumentation should ignore pointer
4587           reads.  This produces less instrumentation (and therefore faster
4588           execution) and still provides some protection against outright
4589           memory corrupting writes, but allows erroneously read data to
4590           propagate within a program.
4591
4592       -fthread-jumps
4593           Perform optimizations where we check to see if a jump branches to a
4594           location where another comparison subsumed by the first is found.
4595           If so, the first branch is redirected to either the destination of
4596           the second branch or a point immediately following it, depending on
4597           whether the condition is known to be true or false.
4598
4599           Enabled at levels -O2, -O3, -Os.
4600
4601       -fsplit-wide-types
4602           When using a type that occupies multiple registers, such as "long
4603           long" on a 32-bit system, split the registers apart and allocate
4604           them independently.  This normally generates better code for those
4605           types, but may make debugging more difficult.
4606
4607           Enabled at levels -O, -O2, -O3, -Os.
4608
4609       -fcse-follow-jumps
4610           In common subexpression elimination (CSE), scan through jump
4611           instructions when the target of the jump is not reached by any
4612           other path.  For example, when CSE encounters an "if" statement
4613           with an "else" clause, CSE will follow the jump when the condition
4614           tested is false.
4615
4616           Enabled at levels -O2, -O3, -Os.
4617
4618       -fcse-skip-blocks
4619           This is similar to -fcse-follow-jumps, but causes CSE to follow
4620           jumps which conditionally skip over blocks.  When CSE encounters a
4621           simple "if" statement with no else clause, -fcse-skip-blocks causes
4622           CSE to follow the jump around the body of the "if".
4623
4624           Enabled at levels -O2, -O3, -Os.
4625
4626       -frerun-cse-after-loop
4627           Re-run common subexpression elimination after loop optimizations
4628           has been performed.
4629
4630           Enabled at levels -O2, -O3, -Os.
4631
4632       -fgcse
4633           Perform a global common subexpression elimination pass.  This pass
4634           also performs global constant and copy propagation.
4635
4636           Note: When compiling a program using computed gotos, a GCC
4637           extension, you may get better runtime performance if you disable
4638           the global common subexpression elimination pass by adding
4639           -fno-gcse to the command line.
4640
4641           Enabled at levels -O2, -O3, -Os.
4642
4643       -fgcse-lm
4644           When -fgcse-lm is enabled, global common subexpression elimination
4645           will attempt to move loads which are only killed by stores into
4646           themselves.  This allows a loop containing a load/store sequence to
4647           be changed to a load outside the loop, and a copy/store within the
4648           loop.
4649
4650           Enabled by default when gcse is enabled.
4651
4652       -fgcse-sm
4653           When -fgcse-sm is enabled, a store motion pass is run after global
4654           common subexpression elimination.  This pass will attempt to move
4655           stores out of loops.  When used in conjunction with -fgcse-lm,
4656           loops containing a load/store sequence can be changed to a load
4657           before the loop and a store after the loop.
4658
4659           Not enabled at any optimization level.
4660
4661       -fgcse-las
4662           When -fgcse-las is enabled, the global common subexpression
4663           elimination pass eliminates redundant loads that come after stores
4664           to the same memory location (both partial and full redundancies).
4665
4666           Not enabled at any optimization level.
4667
4668       -fgcse-after-reload
4669           When -fgcse-after-reload is enabled, a redundant load elimination
4670           pass is performed after reload.  The purpose of this pass is to
4671           cleanup redundant spilling.
4672
4673       -funsafe-loop-optimizations
4674           If given, the loop optimizer will assume that loop indices do not
4675           overflow, and that the loops with nontrivial exit condition are not
4676           infinite.  This enables a wider range of loop optimizations even if
4677           the loop optimizer itself cannot prove that these assumptions are
4678           valid.  Using -Wunsafe-loop-optimizations, the compiler will warn
4679           you if it finds this kind of loop.
4680
4681       -fcrossjumping
4682           Perform cross-jumping transformation.  This transformation unifies
4683           equivalent code and save code size.  The resulting code may or may
4684           not perform better than without cross-jumping.
4685
4686           Enabled at levels -O2, -O3, -Os.
4687
4688       -fauto-inc-dec
4689           Combine increments or decrements of addresses with memory accesses.
4690           This pass is always skipped on architectures that do not have
4691           instructions to support this.  Enabled by default at -O and higher
4692           on architectures that support this.
4693
4694       -fdce
4695           Perform dead code elimination (DCE) on RTL.  Enabled by default at
4696           -O and higher.
4697
4698       -fdse
4699           Perform dead store elimination (DSE) on RTL.  Enabled by default at
4700           -O and higher.
4701
4702       -fif-conversion
4703           Attempt to transform conditional jumps into branch-less
4704           equivalents.  This include use of conditional moves, min, max, set
4705           flags and abs instructions, and some tricks doable by standard
4706           arithmetics.  The use of conditional execution on chips where it is
4707           available is controlled by "if-conversion2".
4708
4709           Enabled at levels -O, -O2, -O3, -Os.
4710
4711       -fif-conversion2
4712           Use conditional execution (where available) to transform
4713           conditional jumps into branch-less equivalents.
4714
4715           Enabled at levels -O, -O2, -O3, -Os.
4716
4717       -fdelete-null-pointer-checks
4718           Use global dataflow analysis to identify and eliminate useless
4719           checks for null pointers.  The compiler assumes that dereferencing
4720           a null pointer would have halted the program.  If a pointer is
4721           checked after it has already been dereferenced, it cannot be null.
4722
4723           In some environments, this assumption is not true, and programs can
4724           safely dereference null pointers.  Use
4725           -fno-delete-null-pointer-checks to disable this optimization for
4726           programs which depend on that behavior.
4727
4728           Enabled at levels -O2, -O3, -Os.
4729
4730       -fexpensive-optimizations
4731           Perform a number of minor optimizations that are relatively
4732           expensive.
4733
4734           Enabled at levels -O2, -O3, -Os.
4735
4736       -foptimize-register-move
4737       -fregmove
4738           Attempt to reassign register numbers in move instructions and as
4739           operands of other simple instructions in order to maximize the
4740           amount of register tying.  This is especially helpful on machines
4741           with two-operand instructions.
4742
4743           Note -fregmove and -foptimize-register-move are the same
4744           optimization.
4745
4746           Enabled at levels -O2, -O3, -Os.
4747
4748       -fira-algorithm=algorithm
4749           Use specified coloring algorithm for the integrated register
4750           allocator.  The algorithm argument should be "priority" or "CB".
4751           The first algorithm specifies Chow's priority coloring, the second
4752           one specifies Chaitin-Briggs coloring.  The second algorithm can be
4753           unimplemented for some architectures.  If it is implemented, it is
4754           the default because Chaitin-Briggs coloring as a rule generates a
4755           better code.
4756
4757       -fira-region=region
4758           Use specified regions for the integrated register allocator.  The
4759           region argument should be one of "all", "mixed", or "one".  The
4760           first value means using all loops as register allocation regions,
4761           the second value which is the default means using all loops except
4762           for loops with small register pressure as the regions, and third
4763           one means using all function as a single region.  The first value
4764           can give best result for machines with small size and irregular
4765           register set, the third one results in faster and generates decent
4766           code and the smallest size code, and the default value usually give
4767           the best results in most cases and for most architectures.
4768
4769       -fira-coalesce
4770           Do optimistic register coalescing.  This option might be profitable
4771           for architectures with big regular register files.
4772
4773       -fno-ira-share-save-slots
4774           Switch off sharing stack slots used for saving call used hard
4775           registers living through a call.  Each hard register will get a
4776           separate stack slot and as a result function stack frame will be
4777           bigger.
4778
4779       -fno-ira-share-spill-slots
4780           Switch off sharing stack slots allocated for pseudo-registers.
4781           Each pseudo-register which did not get a hard register will get a
4782           separate stack slot and as a result function stack frame will be
4783           bigger.
4784
4785       -fira-verbose=n
4786           Set up how verbose dump file for the integrated register allocator
4787           will be.  Default value is 5.  If the value is greater or equal to
4788           10, the dump file will be stderr as if the value were n minus 10.
4789
4790       -fdelayed-branch
4791           If supported for the target machine, attempt to reorder
4792           instructions to exploit instruction slots available after delayed
4793           branch instructions.
4794
4795           Enabled at levels -O, -O2, -O3, -Os.
4796
4797       -fschedule-insns
4798           If supported for the target machine, attempt to reorder
4799           instructions to eliminate execution stalls due to required data
4800           being unavailable.  This helps machines that have slow floating
4801           point or memory load instructions by allowing other instructions to
4802           be issued until the result of the load or floating point
4803           instruction is required.
4804
4805           Enabled at levels -O2, -O3, -Os.
4806
4807       -fschedule-insns2
4808           Similar to -fschedule-insns, but requests an additional pass of
4809           instruction scheduling after register allocation has been done.
4810           This is especially useful on machines with a relatively small
4811           number of registers and where memory load instructions take more
4812           than one cycle.
4813
4814           Enabled at levels -O2, -O3, -Os.
4815
4816       -fno-sched-interblock
4817           Don't schedule instructions across basic blocks.  This is normally
4818           enabled by default when scheduling before register allocation, i.e.
4819           with -fschedule-insns or at -O2 or higher.
4820
4821       -fno-sched-spec
4822           Don't allow speculative motion of non-load instructions.  This is
4823           normally enabled by default when scheduling before register
4824           allocation, i.e.  with -fschedule-insns or at -O2 or higher.
4825
4826       -fsched-spec-load
4827           Allow speculative motion of some load instructions.  This only
4828           makes sense when scheduling before register allocation, i.e. with
4829           -fschedule-insns or at -O2 or higher.
4830
4831       -fsched-spec-load-dangerous
4832           Allow speculative motion of more load instructions.  This only
4833           makes sense when scheduling before register allocation, i.e. with
4834           -fschedule-insns or at -O2 or higher.
4835
4836       -fsched-stalled-insns
4837       -fsched-stalled-insns=n
4838           Define how many insns (if any) can be moved prematurely from the
4839           queue of stalled insns into the ready list, during the second
4840           scheduling pass.  -fno-sched-stalled-insns means that no insns will
4841           be moved prematurely, -fsched-stalled-insns=0 means there is no
4842           limit on how many queued insns can be moved prematurely.
4843           -fsched-stalled-insns without a value is equivalent to
4844           -fsched-stalled-insns=1.
4845
4846       -fsched-stalled-insns-dep
4847       -fsched-stalled-insns-dep=n
4848           Define how many insn groups (cycles) will be examined for a
4849           dependency on a stalled insn that is candidate for premature
4850           removal from the queue of stalled insns.  This has an effect only
4851           during the second scheduling pass, and only if
4852           -fsched-stalled-insns is used.  -fno-sched-stalled-insns-dep is
4853           equivalent to -fsched-stalled-insns-dep=0.
4854           -fsched-stalled-insns-dep without a value is equivalent to
4855           -fsched-stalled-insns-dep=1.
4856
4857       -fsched2-use-superblocks
4858           When scheduling after register allocation, do use superblock
4859           scheduling algorithm.  Superblock scheduling allows motion across
4860           basic block boundaries resulting on faster schedules.  This option
4861           is experimental, as not all machine descriptions used by GCC model
4862           the CPU closely enough to avoid unreliable results from the
4863           algorithm.
4864
4865           This only makes sense when scheduling after register allocation,
4866           i.e. with -fschedule-insns2 or at -O2 or higher.
4867
4868       -fsched2-use-traces
4869           Use -fsched2-use-superblocks algorithm when scheduling after
4870           register allocation and additionally perform code duplication in
4871           order to increase the size of superblocks using tracer pass.  See
4872           -ftracer for details on trace formation.
4873
4874           This mode should produce faster but significantly longer programs.
4875           Also without -fbranch-probabilities the traces constructed may not
4876           match the reality and hurt the performance.  This only makes sense
4877           when scheduling after register allocation, i.e. with
4878           -fschedule-insns2 or at -O2 or higher.
4879
4880       -fsee
4881           Eliminate redundant sign extension instructions and move the non-
4882           redundant ones to optimal placement using lazy code motion (LCM).
4883
4884       -freschedule-modulo-scheduled-loops
4885           The modulo scheduling comes before the traditional scheduling, if a
4886           loop was modulo scheduled we may want to prevent the later
4887           scheduling passes from changing its schedule, we use this option to
4888           control that.
4889
4890       -fselective-scheduling
4891           Schedule instructions using selective scheduling algorithm.
4892           Selective scheduling runs instead of the first scheduler pass.
4893
4894       -fselective-scheduling2
4895           Schedule instructions using selective scheduling algorithm.
4896           Selective scheduling runs instead of the second scheduler pass.
4897
4898       -fsel-sched-pipelining
4899           Enable software pipelining of innermost loops during selective
4900           scheduling.  This option has no effect until one of
4901           -fselective-scheduling or -fselective-scheduling2 is turned on.
4902
4903       -fsel-sched-pipelining-outer-loops
4904           When pipelining loops during selective scheduling, also pipeline
4905           outer loops.  This option has no effect until
4906           -fsel-sched-pipelining is turned on.
4907
4908       -fcaller-saves
4909           Enable values to be allocated in registers that will be clobbered
4910           by function calls, by emitting extra instructions to save and
4911           restore the registers around such calls.  Such allocation is done
4912           only when it seems to result in better code than would otherwise be
4913           produced.
4914
4915           This option is always enabled by default on certain machines,
4916           usually those which have no call-preserved registers to use
4917           instead.
4918
4919           Enabled at levels -O2, -O3, -Os.
4920
4921       -fconserve-stack
4922           Attempt to minimize stack usage.  The compiler will attempt to use
4923           less stack space, even if that makes the program slower.  This
4924           option implies setting the large-stack-frame parameter to 100 and
4925           the large-stack-frame-growth parameter to 400.
4926
4927       -ftree-reassoc
4928           Perform reassociation on trees.  This flag is enabled by default at
4929           -O and higher.
4930
4931       -ftree-pre
4932           Perform partial redundancy elimination (PRE) on trees.  This flag
4933           is enabled by default at -O2 and -O3.
4934
4935       -ftree-fre
4936           Perform full redundancy elimination (FRE) on trees.  The difference
4937           between FRE and PRE is that FRE only considers expressions that are
4938           computed on all paths leading to the redundant computation.  This
4939           analysis is faster than PRE, though it exposes fewer redundancies.
4940           This flag is enabled by default at -O and higher.
4941
4942       -ftree-copy-prop
4943           Perform copy propagation on trees.  This pass eliminates
4944           unnecessary copy operations.  This flag is enabled by default at -O
4945           and higher.
4946
4947       -fipa-pure-const
4948           Discover which functions are pure or constant.  Enabled by default
4949           at -O and higher.
4950
4951       -fipa-reference
4952           Discover which static variables do not escape cannot escape the
4953           compilation unit.  Enabled by default at -O and higher.
4954
4955       -fipa-struct-reorg
4956           Perform structure reorganization optimization, that change C-like
4957           structures layout in order to better utilize spatial locality.
4958           This transformation is effective for programs containing arrays of
4959           structures.  Available in two compilation modes: profile-based
4960           (enabled with -fprofile-generate) or static (which uses built-in
4961           heuristics).  Require -fipa-type-escape to provide the safety of
4962           this transformation.  It works only in whole program mode, so it
4963           requires -fwhole-program and -combine to be enabled.  Structures
4964           considered cold by this transformation are not affected (see
4965           --param struct-reorg-cold-struct-ratio=value).
4966
4967           With this flag, the program debug info reflects a new structure
4968           layout.
4969
4970       -fipa-pta
4971           Perform interprocedural pointer analysis.  This option is
4972           experimental and does not affect generated code.
4973
4974       -fipa-cp
4975           Perform interprocedural constant propagation.  This optimization
4976           analyzes the program to determine when values passed to functions
4977           are constants and then optimizes accordingly.  This optimization
4978           can substantially increase performance if the application has
4979           constants passed to functions.  This flag is enabled by default at
4980           -O2, -Os and -O3.
4981
4982       -fipa-cp-clone
4983           Perform function cloning to make interprocedural constant
4984           propagation stronger.  When enabled, interprocedural constant
4985           propagation will perform function cloning when externally visible
4986           function can be called with constant arguments.  Because this
4987           optimization can create multiple copies of functions, it may
4988           significantly increase code size (see --param
4989           ipcp-unit-growth=value).  This flag is enabled by default at -O3.
4990
4991       -fipa-matrix-reorg
4992           Perform matrix flattening and transposing.  Matrix flattening tries
4993           to replace a m-dimensional matrix with its equivalent n-dimensional
4994           matrix, where n < m.  This reduces the level of indirection needed
4995           for accessing the elements of the matrix. The second optimization
4996           is matrix transposing that attempts to change the order of the
4997           matrix's dimensions in order to improve cache locality.  Both
4998           optimizations need the -fwhole-program flag.  Transposing is
4999           enabled only if profiling information is available.
5000
5001       -ftree-sink
5002           Perform forward store motion  on trees.  This flag is enabled by
5003           default at -O and higher.
5004
5005       -ftree-ccp
5006           Perform sparse conditional constant propagation (CCP) on trees.
5007           This pass only operates on local scalar variables and is enabled by
5008           default at -O and higher.
5009
5010       -ftree-switch-conversion
5011           Perform conversion of simple initializations in a switch to
5012           initializations from a scalar array.  This flag is enabled by
5013           default at -O2 and higher.
5014
5015       -ftree-dce
5016           Perform dead code elimination (DCE) on trees.  This flag is enabled
5017           by default at -O and higher.
5018
5019       -ftree-builtin-call-dce
5020           Perform conditional dead code elimination (DCE) for calls to
5021           builtin functions that may set "errno" but are otherwise side-
5022           effect free.  This flag is enabled by default at -O2 and higher if
5023           -Os is not also specified.
5024
5025       -ftree-dominator-opts
5026           Perform a variety of simple scalar cleanups (constant/copy
5027           propagation, redundancy elimination, range propagation and
5028           expression simplification) based on a dominator tree traversal.
5029           This also performs jump threading (to reduce jumps to jumps). This
5030           flag is enabled by default at -O and higher.
5031
5032       -ftree-dse
5033           Perform dead store elimination (DSE) on trees.  A dead store is a
5034           store into a memory location which will later be overwritten by
5035           another store without any intervening loads.  In this case the
5036           earlier store can be deleted.  This flag is enabled by default at
5037           -O and higher.
5038
5039       -ftree-ch
5040           Perform loop header copying on trees.  This is beneficial since it
5041           increases effectiveness of code motion optimizations.  It also
5042           saves one jump.  This flag is enabled by default at -O and higher.
5043           It is not enabled for -Os, since it usually increases code size.
5044
5045       -ftree-loop-optimize
5046           Perform loop optimizations on trees.  This flag is enabled by
5047           default at -O and higher.
5048
5049       -ftree-loop-linear
5050           Perform linear loop transformations on tree.  This flag can improve
5051           cache performance and allow further loop optimizations to take
5052           place.
5053
5054       -floop-interchange
5055           Perform loop interchange transformations on loops.  Interchanging
5056           two nested loops switches the inner and outer loops.  For example,
5057           given a loop like:
5058
5059                   DO J = 1, M
5060                     DO I = 1, N
5061                       A(J, I) = A(J, I) * C
5062                     ENDDO
5063                   ENDDO
5064
5065           loop interchange will transform the loop as if the user had
5066           written:
5067
5068                   DO I = 1, N
5069                     DO J = 1, M
5070                       A(J, I) = A(J, I) * C
5071                     ENDDO
5072                   ENDDO
5073
5074           which can be beneficial when "N" is larger than the caches, because
5075           in Fortran, the elements of an array are stored in memory
5076           contiguously by column, and the original loop iterates over rows,
5077           potentially creating at each access a cache miss.  This
5078           optimization applies to all the languages supported by GCC and is
5079           not limited to Fortran.  To use this code transformation, GCC has
5080           to be configured with --with-ppl and --with-cloog to enable the
5081           Graphite loop transformation infrastructure.
5082
5083       -floop-strip-mine
5084           Perform loop strip mining transformations on loops.  Strip mining
5085           splits a loop into two nested loops.  The outer loop has strides
5086           equal to the strip size and the inner loop has strides of the
5087           original loop within a strip.  For example, given a loop like:
5088
5089                   DO I = 1, N
5090                     A(I) = A(I) + C
5091                   ENDDO
5092
5093           loop strip mining will transform the loop as if the user had
5094           written:
5095
5096                   DO II = 1, N, 4
5097                     DO I = II, min (II + 3, N)
5098                       A(I) = A(I) + C
5099                     ENDDO
5100                   ENDDO
5101
5102           This optimization applies to all the languages supported by GCC and
5103           is not limited to Fortran.  To use this code transformation, GCC
5104           has to be configured with --with-ppl and --with-cloog to enable the
5105           Graphite loop transformation infrastructure.
5106
5107       -floop-block
5108           Perform loop blocking transformations on loops.  Blocking strip
5109           mines each loop in the loop nest such that the memory accesses of
5110           the element loops fit inside caches.  For example, given a loop
5111           like:
5112
5113                   DO I = 1, N
5114                     DO J = 1, M
5115                       A(J, I) = B(I) + C(J)
5116                     ENDDO
5117                   ENDDO
5118
5119           loop blocking will transform the loop as if the user had written:
5120
5121                   DO II = 1, N, 64
5122                     DO JJ = 1, M, 64
5123                       DO I = II, min (II + 63, N)
5124                         DO J = JJ, min (JJ + 63, M)
5125                           A(J, I) = B(I) + C(J)
5126                         ENDDO
5127                       ENDDO
5128                     ENDDO
5129                   ENDDO
5130
5131           which can be beneficial when "M" is larger than the caches, because
5132           the innermost loop will iterate over a smaller amount of data that
5133           can be kept in the caches.  This optimization applies to all the
5134           languages supported by GCC and is not limited to Fortran.  To use
5135           this code transformation, GCC has to be configured with --with-ppl
5136           and --with-cloog to enable the Graphite loop transformation
5137           infrastructure.
5138
5139       -fcheck-data-deps
5140           Compare the results of several data dependence analyzers.  This
5141           option is used for debugging the data dependence analyzers.
5142
5143       -ftree-loop-distribution
5144           Perform loop distribution.  This flag can improve cache performance
5145           on big loop bodies and allow further loop optimizations, like
5146           parallelization or vectorization, to take place.  For example, the
5147           loop
5148
5149                   DO I = 1, N
5150                     A(I) = B(I) + C
5151                     D(I) = E(I) * F
5152                   ENDDO
5153
5154           is transformed to
5155
5156                   DO I = 1, N
5157                      A(I) = B(I) + C
5158                   ENDDO
5159                   DO I = 1, N
5160                      D(I) = E(I) * F
5161                   ENDDO
5162
5163       -ftree-loop-im
5164           Perform loop invariant motion on trees.  This pass moves only
5165           invariants that would be hard to handle at RTL level (function
5166           calls, operations that expand to nontrivial sequences of insns).
5167           With -funswitch-loops it also moves operands of conditions that are
5168           invariant out of the loop, so that we can use just trivial
5169           invariantness analysis in loop unswitching.  The pass also includes
5170           store motion.
5171
5172       -ftree-loop-ivcanon
5173           Create a canonical counter for number of iterations in the loop for
5174           that determining number of iterations requires complicated
5175           analysis.  Later optimizations then may determine the number
5176           easily.  Useful especially in connection with unrolling.
5177
5178       -fivopts
5179           Perform induction variable optimizations (strength reduction,
5180           induction variable merging and induction variable elimination) on
5181           trees.
5182
5183       -ftree-parallelize-loops=n
5184           Parallelize loops, i.e., split their iteration space to run in n
5185           threads.  This is only possible for loops whose iterations are
5186           independent and can be arbitrarily reordered.  The optimization is
5187           only profitable on multiprocessor machines, for loops that are CPU-
5188           intensive, rather than constrained e.g. by memory bandwidth.  This
5189           option implies -pthread, and thus is only supported on targets that
5190           have support for -pthread.
5191
5192       -ftree-sra
5193           Perform scalar replacement of aggregates.  This pass replaces
5194           structure references with scalars to prevent committing structures
5195           to memory too early.  This flag is enabled by default at -O and
5196           higher.
5197
5198       -ftree-copyrename
5199           Perform copy renaming on trees.  This pass attempts to rename
5200           compiler temporaries to other variables at copy locations, usually
5201           resulting in variable names which more closely resemble the
5202           original variables.  This flag is enabled by default at -O and
5203           higher.
5204
5205       -ftree-coalesce-inlined-vars
5206           Permit the copyrename pass to subject inlined variables to
5207           coalescing into other variables.  This may harm debug information
5208           of such inlined variables, but it will keep variables of the main
5209           function apart from each other, such that they are more likely to
5210           contain the expected values in a debugging session.
5211
5212       -ftree-coalesce-vars
5213           Permit the copyrename pass to subject all variables to SSA
5214           coalescing.  This may severely limit the ability to debug an
5215           optimized program compiled without -fvar-tracking-assignments.  In
5216           the negated form, this flag prevents SSA coalescing of user
5217           variables, including inlined ones.
5218
5219       -ftree-ter
5220           Perform temporary expression replacement during the SSA->normal
5221           phase.  Single use/single def temporaries are replaced at their use
5222           location with their defining expression.  This results in non-
5223           GIMPLE code, but gives the expanders much more complex trees to
5224           work on resulting in better RTL generation.  This is enabled by
5225           default at -O and higher.
5226
5227       -ftree-vectorize
5228           Perform loop vectorization on trees. This flag is enabled by
5229           default at -O3.
5230
5231       -ftree-vect-loop-version
5232           Perform loop versioning when doing loop vectorization on trees.
5233           When a loop appears to be vectorizable except that data alignment
5234           or data dependence cannot be determined at compile time then
5235           vectorized and non-vectorized versions of the loop are generated
5236           along with runtime checks for alignment or dependence to control
5237           which version is executed.  This option is enabled by default
5238           except at level -Os where it is disabled.
5239
5240       -fvect-cost-model
5241           Enable cost model for vectorization.
5242
5243       -ftree-vrp
5244           Perform Value Range Propagation on trees.  This is similar to the
5245           constant propagation pass, but instead of values, ranges of values
5246           are propagated.  This allows the optimizers to remove unnecessary
5247           range checks like array bound checks and null pointer checks.  This
5248           is enabled by default at -O2 and higher.  Null pointer check
5249           elimination is only done if -fdelete-null-pointer-checks is
5250           enabled.
5251
5252       -ftracer
5253           Perform tail duplication to enlarge superblock size.  This
5254           transformation simplifies the control flow of the function allowing
5255           other optimizations to do better job.
5256
5257       -funroll-loops
5258           Unroll loops whose number of iterations can be determined at
5259           compile time or upon entry to the loop.  -funroll-loops implies
5260           -frerun-cse-after-loop.  This option makes code larger, and may or
5261           may not make it run faster.
5262
5263       -funroll-all-loops
5264           Unroll all loops, even if their number of iterations is uncertain
5265           when the loop is entered.  This usually makes programs run more
5266           slowly.  -funroll-all-loops implies the same options as
5267           -funroll-loops,
5268
5269       -fsplit-ivs-in-unroller
5270           Enables expressing of values of induction variables in later
5271           iterations of the unrolled loop using the value in the first
5272           iteration.  This breaks long dependency chains, thus improving
5273           efficiency of the scheduling passes.
5274
5275           Combination of -fweb and CSE is often sufficient to obtain the same
5276           effect.  However in cases the loop body is more complicated than a
5277           single basic block, this is not reliable.  It also does not work at
5278           all on some of the architectures due to restrictions in the CSE
5279           pass.
5280
5281           This optimization is enabled by default.
5282
5283       -fvariable-expansion-in-unroller
5284           With this option, the compiler will create multiple copies of some
5285           local variables when unrolling a loop which can result in superior
5286           code.
5287
5288       -fpredictive-commoning
5289           Perform predictive commoning optimization, i.e., reusing
5290           computations (especially memory loads and stores) performed in
5291           previous iterations of loops.
5292
5293           This option is enabled at level -O3.
5294
5295       -fprefetch-loop-arrays
5296           If supported by the target machine, generate instructions to
5297           prefetch memory to improve the performance of loops that access
5298           large arrays.
5299
5300           This option may generate better or worse code; results are highly
5301           dependent on the structure of loops within the source code.
5302
5303           Disabled at level -Os.
5304
5305       -fno-peephole
5306       -fno-peephole2
5307           Disable any machine-specific peephole optimizations.  The
5308           difference between -fno-peephole and -fno-peephole2 is in how they
5309           are implemented in the compiler; some targets use one, some use the
5310           other, a few use both.
5311
5312           -fpeephole is enabled by default.  -fpeephole2 enabled at levels
5313           -O2, -O3, -Os.
5314
5315       -fno-guess-branch-probability
5316           Do not guess branch probabilities using heuristics.
5317
5318           GCC will use heuristics to guess branch probabilities if they are
5319           not provided by profiling feedback (-fprofile-arcs).  These
5320           heuristics are based on the control flow graph.  If some branch
5321           probabilities are specified by __builtin_expect, then the
5322           heuristics will be used to guess branch probabilities for the rest
5323           of the control flow graph, taking the __builtin_expect info into
5324           account.  The interactions between the heuristics and
5325           __builtin_expect can be complex, and in some cases, it may be
5326           useful to disable the heuristics so that the effects of
5327           __builtin_expect are easier to understand.
5328
5329           The default is -fguess-branch-probability at levels -O, -O2, -O3,
5330           -Os.
5331
5332       -freorder-blocks
5333           Reorder basic blocks in the compiled function in order to reduce
5334           number of taken branches and improve code locality.
5335
5336           Enabled at levels -O2, -O3.
5337
5338       -freorder-blocks-and-partition
5339           In addition to reordering basic blocks in the compiled function, in
5340           order to reduce number of taken branches, partitions hot and cold
5341           basic blocks into separate sections of the assembly and .o files,
5342           to improve paging and cache locality performance.
5343
5344           This optimization is automatically turned off in the presence of
5345           exception handling, for linkonce sections, for functions with a
5346           user-defined section attribute and on any architecture that does
5347           not support named sections.
5348
5349       -freorder-functions
5350           Reorder functions in the object file in order to improve code
5351           locality.  This is implemented by using special subsections
5352           ".text.hot" for most frequently executed functions and
5353           ".text.unlikely" for unlikely executed functions.  Reordering is
5354           done by the linker so object file format must support named
5355           sections and linker must place them in a reasonable way.
5356
5357           Also profile feedback must be available in to make this option
5358           effective.  See -fprofile-arcs for details.
5359
5360           Enabled at levels -O2, -O3, -Os.
5361
5362       -fstrict-aliasing
5363           Allow the compiler to assume the strictest aliasing rules
5364           applicable to the language being compiled.  For C (and C++), this
5365           activates optimizations based on the type of expressions.  In
5366           particular, an object of one type is assumed never to reside at the
5367           same address as an object of a different type, unless the types are
5368           almost the same.  For example, an "unsigned int" can alias an
5369           "int", but not a "void*" or a "double".  A character type may alias
5370           any other type.
5371
5372           Pay special attention to code like this:
5373
5374                   union a_union {
5375                     int i;
5376                     double d;
5377                   };
5378
5379                   int f() {
5380                     union a_union t;
5381                     t.d = 3.0;
5382                     return t.i;
5383                   }
5384
5385           The practice of reading from a different union member than the one
5386           most recently written to (called "type-punning") is common.  Even
5387           with -fstrict-aliasing, type-punning is allowed, provided the
5388           memory is accessed through the union type.  So, the code above will
5389           work as expected.    However, this code might not:
5390
5391                   int f() {
5392                     union a_union t;
5393                     int* ip;
5394                     t.d = 3.0;
5395                     ip = &t.i;
5396                     return *ip;
5397                   }
5398
5399           Similarly, access by taking the address, casting the resulting
5400           pointer and dereferencing the result has undefined behavior, even
5401           if the cast uses a union type, e.g.:
5402
5403                   int f() {
5404                     double d = 3.0;
5405                     return ((union a_union *) &d)->i;
5406                   }
5407
5408           The -fstrict-aliasing option is enabled at levels -O2, -O3, -Os.
5409
5410       -fstrict-overflow
5411           Allow the compiler to assume strict signed overflow rules,
5412           depending on the language being compiled.  For C (and C++) this
5413           means that overflow when doing arithmetic with signed numbers is
5414           undefined, which means that the compiler may assume that it will
5415           not happen.  This permits various optimizations.  For example, the
5416           compiler will assume that an expression like "i + 10 > i" will
5417           always be true for signed "i".  This assumption is only valid if
5418           signed overflow is undefined, as the expression is false if "i +
5419           10" overflows when using twos complement arithmetic.  When this
5420           option is in effect any attempt to determine whether an operation
5421           on signed numbers will overflow must be written carefully to not
5422           actually involve overflow.
5423
5424           This option also allows the compiler to assume strict pointer
5425           semantics: given a pointer to an object, if adding an offset to
5426           that pointer does not produce a pointer to the same object, the
5427           addition is undefined.  This permits the compiler to conclude that
5428           "p + u > p" is always true for a pointer "p" and unsigned integer
5429           "u".  This assumption is only valid because pointer wraparound is
5430           undefined, as the expression is false if "p + u" overflows using
5431           twos complement arithmetic.
5432
5433           See also the -fwrapv option.  Using -fwrapv means that integer
5434           signed overflow is fully defined: it wraps.  When -fwrapv is used,
5435           there is no difference between -fstrict-overflow and
5436           -fno-strict-overflow for integers.  With -fwrapv certain types of
5437           overflow are permitted.  For example, if the compiler gets an
5438           overflow when doing arithmetic on constants, the overflowed value
5439           can still be used with -fwrapv, but not otherwise.
5440
5441           The -fstrict-overflow option is enabled at levels -O2, -O3, -Os.
5442
5443       -falign-functions
5444       -falign-functions=n
5445           Align the start of functions to the next power-of-two greater than
5446           n, skipping up to n bytes.  For instance, -falign-functions=32
5447           aligns functions to the next 32-byte boundary, but
5448           -falign-functions=24 would align to the next 32-byte boundary only
5449           if this can be done by skipping 23 bytes or less.
5450
5451           -fno-align-functions and -falign-functions=1 are equivalent and
5452           mean that functions will not be aligned.
5453
5454           Some assemblers only support this flag when n is a power of two; in
5455           that case, it is rounded up.
5456
5457           If n is not specified or is zero, use a machine-dependent default.
5458
5459           Enabled at levels -O2, -O3.
5460
5461       -falign-labels
5462       -falign-labels=n
5463           Align all branch targets to a power-of-two boundary, skipping up to
5464           n bytes like -falign-functions.  This option can easily make code
5465           slower, because it must insert dummy operations for when the branch
5466           target is reached in the usual flow of the code.
5467
5468           -fno-align-labels and -falign-labels=1 are equivalent and mean that
5469           labels will not be aligned.
5470
5471           If -falign-loops or -falign-jumps are applicable and are greater
5472           than this value, then their values are used instead.
5473
5474           If n is not specified or is zero, use a machine-dependent default
5475           which is very likely to be 1, meaning no alignment.
5476
5477           Enabled at levels -O2, -O3.
5478
5479       -falign-loops
5480       -falign-loops=n
5481           Align loops to a power-of-two boundary, skipping up to n bytes like
5482           -falign-functions.  The hope is that the loop will be executed many
5483           times, which will make up for any execution of the dummy
5484           operations.
5485
5486           -fno-align-loops and -falign-loops=1 are equivalent and mean that
5487           loops will not be aligned.
5488
5489           If n is not specified or is zero, use a machine-dependent default.
5490
5491           Enabled at levels -O2, -O3.
5492
5493       -falign-jumps
5494       -falign-jumps=n
5495           Align branch targets to a power-of-two boundary, for branch targets
5496           where the targets can only be reached by jumping, skipping up to n
5497           bytes like -falign-functions.  In this case, no dummy operations
5498           need be executed.
5499
5500           -fno-align-jumps and -falign-jumps=1 are equivalent and mean that
5501           loops will not be aligned.
5502
5503           If n is not specified or is zero, use a machine-dependent default.
5504
5505           Enabled at levels -O2, -O3.
5506
5507       -funit-at-a-time
5508           This option is left for compatibility reasons. -funit-at-a-time has
5509           no effect, while -fno-unit-at-a-time implies -fno-toplevel-reorder
5510           and -fno-section-anchors.
5511
5512           Enabled by default.
5513
5514       -fno-toplevel-reorder
5515           Do not reorder top-level functions, variables, and "asm"
5516           statements.  Output them in the same order that they appear in the
5517           input file.  When this option is used, unreferenced static
5518           variables will not be removed.  This option is intended to support
5519           existing code which relies on a particular ordering.  For new code,
5520           it is better to use attributes.
5521
5522           Enabled at level -O0.  When disabled explicitly, it also imply
5523           -fno-section-anchors that is otherwise enabled at -O0 on some
5524           targets.
5525
5526       -fweb
5527           Constructs webs as commonly used for register allocation purposes
5528           and assign each web individual pseudo register.  This allows the
5529           register allocation pass to operate on pseudos directly, but also
5530           strengthens several other optimization passes, such as CSE, loop
5531           optimizer and trivial dead code remover.  It can, however, make
5532           debugging impossible, since variables will no longer stay in a
5533           "home register".
5534
5535           Enabled by default with -funroll-loops.
5536
5537       -fwhole-program
5538           Assume that the current compilation unit represents whole program
5539           being compiled.  All public functions and variables with the
5540           exception of "main" and those merged by attribute
5541           "externally_visible" become static functions and in a affect gets
5542           more aggressively optimized by interprocedural optimizers.  While
5543           this option is equivalent to proper use of "static" keyword for
5544           programs consisting of single file, in combination with option
5545           --combine this flag can be used to compile most of smaller scale C
5546           programs since the functions and variables become local for the
5547           whole combined compilation unit, not for the single source file
5548           itself.
5549
5550           This option is not supported for Fortran programs.
5551
5552       -fcprop-registers
5553           After register allocation and post-register allocation instruction
5554           splitting, we perform a copy-propagation pass to try to reduce
5555           scheduling dependencies and occasionally eliminate the copy.
5556
5557           Enabled at levels -O, -O2, -O3, -Os.
5558
5559       -fprofile-correction
5560           Profiles collected using an instrumented binary for multi-threaded
5561           programs may be inconsistent due to missed counter updates. When
5562           this option is specified, GCC will use heuristics to correct or
5563           smooth out such inconsistencies. By default, GCC will emit an error
5564           message when an inconsistent profile is detected.
5565
5566       -fprofile-dir=path
5567           Set the directory to search the profile data files in to path.
5568           This option affects only the profile data generated by
5569           -fprofile-generate, -ftest-coverage, -fprofile-arcs and used by
5570           -fprofile-use and -fbranch-probabilities and its related options.
5571           By default, GCC will use the current directory as path thus the
5572           profile data file will appear in the same directory as the object
5573           file.
5574
5575       -fprofile-generate
5576       -fprofile-generate=path
5577           Enable options usually used for instrumenting application to
5578           produce profile useful for later recompilation with profile
5579           feedback based optimization.  You must use -fprofile-generate both
5580           when compiling and when linking your program.
5581
5582           The following options are enabled: "-fprofile-arcs",
5583           "-fprofile-values", "-fvpt".
5584
5585           If path is specified, GCC will look at the path to find the profile
5586           feedback data files. See -fprofile-dir.
5587
5588       -fprofile-use
5589       -fprofile-use=path
5590           Enable profile feedback directed optimizations, and optimizations
5591           generally profitable only with profile feedback available.
5592
5593           The following options are enabled: "-fbranch-probabilities",
5594           "-fvpt", "-funroll-loops", "-fpeel-loops", "-ftracer"
5595
5596           By default, GCC emits an error message if the feedback profiles do
5597           not match the source code.  This error can be turned into a warning
5598           by using -Wcoverage-mismatch.  Note this may result in poorly
5599           optimized code.
5600
5601           If path is specified, GCC will look at the path to find the profile
5602           feedback data files. See -fprofile-dir.
5603
5604       The following options control compiler behavior regarding floating
5605       point arithmetic.  These options trade off between speed and
5606       correctness.  All must be specifically enabled.
5607
5608       -ffloat-store
5609           Do not store floating point variables in registers, and inhibit
5610           other options that might change whether a floating point value is
5611           taken from a register or memory.
5612
5613           This option prevents undesirable excess precision on machines such
5614           as the 68000 where the floating registers (of the 68881) keep more
5615           precision than a "double" is supposed to have.  Similarly for the
5616           x86 architecture.  For most programs, the excess precision does
5617           only good, but a few programs rely on the precise definition of
5618           IEEE floating point.  Use -ffloat-store for such programs, after
5619           modifying them to store all pertinent intermediate computations
5620           into variables.
5621
5622       -ffast-math
5623           Sets -fno-math-errno, -funsafe-math-optimizations,
5624           -ffinite-math-only, -fno-rounding-math, -fno-signaling-nans and
5625           -fcx-limited-range.
5626
5627           This option causes the preprocessor macro "__FAST_MATH__" to be
5628           defined.
5629
5630           This option is not turned on by any -O option since it can result
5631           in incorrect output for programs which depend on an exact
5632           implementation of IEEE or ISO rules/specifications for math
5633           functions. It may, however, yield faster code for programs that do
5634           not require the guarantees of these specifications.
5635
5636       -fno-math-errno
5637           Do not set ERRNO after calling math functions that are executed
5638           with a single instruction, e.g., sqrt.  A program that relies on
5639           IEEE exceptions for math error handling may want to use this flag
5640           for speed while maintaining IEEE arithmetic compatibility.
5641
5642           This option is not turned on by any -O option since it can result
5643           in incorrect output for programs which depend on an exact
5644           implementation of IEEE or ISO rules/specifications for math
5645           functions. It may, however, yield faster code for programs that do
5646           not require the guarantees of these specifications.
5647
5648           The default is -fmath-errno.
5649
5650           On Darwin systems, the math library never sets "errno".  There is
5651           therefore no reason for the compiler to consider the possibility
5652           that it might, and -fno-math-errno is the default.
5653
5654       -funsafe-math-optimizations
5655           Allow optimizations for floating-point arithmetic that (a) assume
5656           that arguments and results are valid and (b) may violate IEEE or
5657           ANSI standards.  When used at link-time, it may include libraries
5658           or startup files that change the default FPU control word or other
5659           similar optimizations.
5660
5661           This option is not turned on by any -O option since it can result
5662           in incorrect output for programs which depend on an exact
5663           implementation of IEEE or ISO rules/specifications for math
5664           functions. It may, however, yield faster code for programs that do
5665           not require the guarantees of these specifications.  Enables
5666           -fno-signed-zeros, -fno-trapping-math, -fassociative-math and
5667           -freciprocal-math.
5668
5669           The default is -fno-unsafe-math-optimizations.
5670
5671       -fassociative-math
5672           Allow re-association of operands in series of floating-point
5673           operations.  This violates the ISO C and C++ language standard by
5674           possibly changing computation result.  NOTE: re-ordering may change
5675           the sign of zero as well as ignore NaNs and inhibit or create
5676           underflow or overflow (and thus cannot be used on a code which
5677           relies on rounding behavior like "(x + 2**52) - 2**52)".  May also
5678           reorder floating-point comparisons and thus may not be used when
5679           ordered comparisons are required.  This option requires that both
5680           -fno-signed-zeros and -fno-trapping-math be in effect.  Moreover,
5681           it doesn't make much sense with -frounding-math.
5682
5683           The default is -fno-associative-math.
5684
5685       -freciprocal-math
5686           Allow the reciprocal of a value to be used instead of dividing by
5687           the value if this enables optimizations.  For example "x / y" can
5688           be replaced with "x * (1/y)" which is useful if "(1/y)" is subject
5689           to common subexpression elimination.  Note that this loses
5690           precision and increases the number of flops operating on the value.
5691
5692           The default is -fno-reciprocal-math.
5693
5694       -ffinite-math-only
5695           Allow optimizations for floating-point arithmetic that assume that
5696           arguments and results are not NaNs or +-Infs.
5697
5698           This option is not turned on by any -O option since it can result
5699           in incorrect output for programs which depend on an exact
5700           implementation of IEEE or ISO rules/specifications for math
5701           functions. It may, however, yield faster code for programs that do
5702           not require the guarantees of these specifications.
5703
5704           The default is -fno-finite-math-only.
5705
5706       -fno-signed-zeros
5707           Allow optimizations for floating point arithmetic that ignore the
5708           signedness of zero.  IEEE arithmetic specifies the behavior of
5709           distinct +0.0 and -0.0 values, which then prohibits simplification
5710           of expressions such as x+0.0 or 0.0*x (even with
5711           -ffinite-math-only).  This option implies that the sign of a zero
5712           result isn't significant.
5713
5714           The default is -fsigned-zeros.
5715
5716       -fno-trapping-math
5717           Compile code assuming that floating-point operations cannot
5718           generate user-visible traps.  These traps include division by zero,
5719           overflow, underflow, inexact result and invalid operation.  This
5720           option requires that -fno-signaling-nans be in effect.  Setting
5721           this option may allow faster code if one relies on "non-stop" IEEE
5722           arithmetic, for example.
5723
5724           This option should never be turned on by any -O option since it can
5725           result in incorrect output for programs which depend on an exact
5726           implementation of IEEE or ISO rules/specifications for math
5727           functions.
5728
5729           The default is -ftrapping-math.
5730
5731       -frounding-math
5732           Disable transformations and optimizations that assume default
5733           floating point rounding behavior.  This is round-to-zero for all
5734           floating point to integer conversions, and round-to-nearest for all
5735           other arithmetic truncations.  This option should be specified for
5736           programs that change the FP rounding mode dynamically, or that may
5737           be executed with a non-default rounding mode.  This option disables
5738           constant folding of floating point expressions at compile-time
5739           (which may be affected by rounding mode) and arithmetic
5740           transformations that are unsafe in the presence of sign-dependent
5741           rounding modes.
5742
5743           The default is -fno-rounding-math.
5744
5745           This option is experimental and does not currently guarantee to
5746           disable all GCC optimizations that are affected by rounding mode.
5747           Future versions of GCC may provide finer control of this setting
5748           using C99's "FENV_ACCESS" pragma.  This command line option will be
5749           used to specify the default state for "FENV_ACCESS".
5750
5751       -frtl-abstract-sequences
5752           It is a size optimization method. This option is to find identical
5753           sequences of code, which can be turned into pseudo-procedures  and
5754           then  replace  all  occurrences with  calls to  the  newly created
5755           subroutine. It is kind of an opposite of -finline-functions.  This
5756           optimization runs at RTL level.
5757
5758       -fsignaling-nans
5759           Compile code assuming that IEEE signaling NaNs may generate user-
5760           visible traps during floating-point operations.  Setting this
5761           option disables optimizations that may change the number of
5762           exceptions visible with signaling NaNs.  This option implies
5763           -ftrapping-math.
5764
5765           This option causes the preprocessor macro "__SUPPORT_SNAN__" to be
5766           defined.
5767
5768           The default is -fno-signaling-nans.
5769
5770           This option is experimental and does not currently guarantee to
5771           disable all GCC optimizations that affect signaling NaN behavior.
5772
5773       -fsingle-precision-constant
5774           Treat floating point constant as single precision constant instead
5775           of implicitly converting it to double precision constant.
5776
5777       -fcx-limited-range
5778           When enabled, this option states that a range reduction step is not
5779           needed when performing complex division.  Also, there is no
5780           checking whether the result of a complex multiplication or division
5781           is "NaN + I*NaN", with an attempt to rescue the situation in that
5782           case.  The default is -fno-cx-limited-range, but is enabled by
5783           -ffast-math.
5784
5785           This option controls the default setting of the ISO C99
5786           "CX_LIMITED_RANGE" pragma.  Nevertheless, the option applies to all
5787           languages.
5788
5789       -fcx-fortran-rules
5790           Complex multiplication and division follow Fortran rules.  Range
5791           reduction is done as part of complex division, but there is no
5792           checking whether the result of a complex multiplication or division
5793           is "NaN + I*NaN", with an attempt to rescue the situation in that
5794           case.
5795
5796           The default is -fno-cx-fortran-rules.
5797
5798       The following options control optimizations that may improve
5799       performance, but are not enabled by any -O options.  This section
5800       includes experimental options that may produce broken code.
5801
5802       -fbranch-probabilities
5803           After running a program compiled with -fprofile-arcs, you can
5804           compile it a second time using -fbranch-probabilities, to improve
5805           optimizations based on the number of times each branch was taken.
5806           When the program compiled with -fprofile-arcs exits it saves arc
5807           execution counts to a file called sourcename.gcda for each source
5808           file.  The information in this data file is very dependent on the
5809           structure of the generated code, so you must use the same source
5810           code and the same optimization options for both compilations.
5811
5812           With -fbranch-probabilities, GCC puts a REG_BR_PROB note on each
5813           JUMP_INSN and CALL_INSN.  These can be used to improve
5814           optimization.  Currently, they are only used in one place: in
5815           reorg.c, instead of guessing which path a branch is mostly to take,
5816           the REG_BR_PROB values are used to exactly determine which path is
5817           taken more often.
5818
5819       -fprofile-values
5820           If combined with -fprofile-arcs, it adds code so that some data
5821           about values of expressions in the program is gathered.
5822
5823           With -fbranch-probabilities, it reads back the data gathered from
5824           profiling values of expressions and adds REG_VALUE_PROFILE notes to
5825           instructions for their later usage in optimizations.
5826
5827           Enabled with -fprofile-generate and -fprofile-use.
5828
5829       -fvpt
5830           If combined with -fprofile-arcs, it instructs the compiler to add a
5831           code to gather information about values of expressions.
5832
5833           With -fbranch-probabilities, it reads back the data gathered and
5834           actually performs the optimizations based on them.  Currently the
5835           optimizations include specialization of division operation using
5836           the knowledge about the value of the denominator.
5837
5838       -frename-registers
5839           Attempt to avoid false dependencies in scheduled code by making use
5840           of registers left over after register allocation.  This
5841           optimization will most benefit processors with lots of registers.
5842           Depending on the debug information format adopted by the target,
5843           however, it can make debugging impossible, since variables will no
5844           longer stay in a "home register".
5845
5846           Enabled by default with -funroll-loops.
5847
5848       -ftracer
5849           Perform tail duplication to enlarge superblock size.  This
5850           transformation simplifies the control flow of the function allowing
5851           other optimizations to do better job.
5852
5853           Enabled with -fprofile-use.
5854
5855       -funroll-loops
5856           Unroll loops whose number of iterations can be determined at
5857           compile time or upon entry to the loop.  -funroll-loops implies
5858           -frerun-cse-after-loop, -fweb and -frename-registers.  It also
5859           turns on complete loop peeling (i.e. complete removal of loops with
5860           small constant number of iterations).  This option makes code
5861           larger, and may or may not make it run faster.
5862
5863           Enabled with -fprofile-use.
5864
5865       -funroll-all-loops
5866           Unroll all loops, even if their number of iterations is uncertain
5867           when the loop is entered.  This usually makes programs run more
5868           slowly.  -funroll-all-loops implies the same options as
5869           -funroll-loops.
5870
5871       -fpeel-loops
5872           Peels the loops for that there is enough information that they do
5873           not roll much (from profile feedback).  It also turns on complete
5874           loop peeling (i.e. complete removal of loops with small constant
5875           number of iterations).
5876
5877           Enabled with -fprofile-use.
5878
5879       -fmove-loop-invariants
5880           Enables the loop invariant motion pass in the RTL loop optimizer.
5881           Enabled at level -O1
5882
5883       -funswitch-loops
5884           Move branches with loop invariant conditions out of the loop, with
5885           duplicates of the loop on both branches (modified according to
5886           result of the condition).
5887
5888       -ffunction-sections
5889       -fdata-sections
5890           Place each function or data item into its own section in the output
5891           file if the target supports arbitrary sections.  The name of the
5892           function or the name of the data item determines the section's name
5893           in the output file.
5894
5895           Use these options on systems where the linker can perform
5896           optimizations to improve locality of reference in the instruction
5897           space.  Most systems using the ELF object format and SPARC
5898           processors running Solaris 2 have linkers with such optimizations.
5899           AIX may have these optimizations in the future.
5900
5901           Only use these options when there are significant benefits from
5902           doing so.  When you specify these options, the assembler and linker
5903           will create larger object and executable files and will also be
5904           slower.  You will not be able to use "gprof" on all systems if you
5905           specify this option and you may have problems with debugging if you
5906           specify both this option and -g.
5907
5908       -fbranch-target-load-optimize
5909           Perform branch target register load optimization before prologue /
5910           epilogue threading.  The use of target registers can typically be
5911           exposed only during reload, thus hoisting loads out of loops and
5912           doing inter-block scheduling needs a separate optimization pass.
5913
5914       -fbranch-target-load-optimize2
5915           Perform branch target register load optimization after prologue /
5916           epilogue threading.
5917
5918       -fbtr-bb-exclusive
5919           When performing branch target register load optimization, don't
5920           reuse branch target registers in within any basic block.
5921
5922       -fstack-protector
5923           Emit extra code to check for buffer overflows, such as stack
5924           smashing attacks.  This is done by adding a guard variable to
5925           functions with vulnerable objects.  This includes functions that
5926           call alloca, and functions with buffers larger than 8 bytes.  The
5927           guards are initialized when a function is entered and then checked
5928           when the function exits.  If a guard check fails, an error message
5929           is printed and the program exits.
5930
5931       -fstack-protector-all
5932           Like -fstack-protector except that all functions are protected.
5933
5934       -fsection-anchors
5935           Try to reduce the number of symbolic address calculations by using
5936           shared "anchor" symbols to address nearby objects.  This
5937           transformation can help to reduce the number of GOT entries and GOT
5938           accesses on some targets.
5939
5940           For example, the implementation of the following function "foo":
5941
5942                   static int a, b, c;
5943                   int foo (void) { return a + b + c; }
5944
5945           would usually calculate the addresses of all three variables, but
5946           if you compile it with -fsection-anchors, it will access the
5947           variables from a common anchor point instead.  The effect is
5948           similar to the following pseudocode (which isn't valid C):
5949
5950                   int foo (void)
5951                   {
5952                     register int *xr = &x;
5953                     return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
5954                   }
5955
5956           Not all targets support this option.
5957
5958       --param name=value
5959           In some places, GCC uses various constants to control the amount of
5960           optimization that is done.  For example, GCC will not inline
5961           functions that contain more that a certain number of instructions.
5962           You can control some of these constants on the command-line using
5963           the --param option.
5964
5965           The names of specific parameters, and the meaning of the values,
5966           are tied to the internals of the compiler, and are subject to
5967           change without notice in future releases.
5968
5969           In each case, the value is an integer.  The allowable choices for
5970           name are given in the following table:
5971
5972           sra-max-structure-size
5973               The maximum structure size, in bytes, at which the scalar
5974               replacement of aggregates (SRA) optimization will perform block
5975               copies.  The default value, 0, implies that GCC will select the
5976               most appropriate size itself.
5977
5978           sra-field-structure-ratio
5979               The threshold ratio (as a percentage) between instantiated
5980               fields and the complete structure size.  We say that if the
5981               ratio of the number of bytes in instantiated fields to the
5982               number of bytes in the complete structure exceeds this
5983               parameter, then block copies are not used.  The default is 75.
5984
5985           struct-reorg-cold-struct-ratio
5986               The threshold ratio (as a percentage) between a structure
5987               frequency and the frequency of the hottest structure in the
5988               program.  This parameter is used by struct-reorg optimization
5989               enabled by -fipa-struct-reorg.  We say that if the ratio of a
5990               structure frequency, calculated by profiling, to the hottest
5991               structure frequency in the program is less than this parameter,
5992               then structure reorganization is not applied to this structure.
5993               The default is 10.
5994
5995           predictable-branch-cost-outcome
5996               When branch is predicted to be taken with probability lower
5997               than this threshold (in percent), then it is considered well
5998               predictable. The default is 10.
5999
6000           max-crossjump-edges
6001               The maximum number of incoming edges to consider for
6002               crossjumping.  The algorithm used by -fcrossjumping is O(N^2)
6003               in the number of edges incoming to each block.  Increasing
6004               values mean more aggressive optimization, making the compile
6005               time increase with probably small improvement in executable
6006               size.
6007
6008           min-crossjump-insns
6009               The minimum number of instructions which must be matched at the
6010               end of two blocks before crossjumping will be performed on
6011               them.  This value is ignored in the case where all instructions
6012               in the block being crossjumped from are matched.  The default
6013               value is 5.
6014
6015           max-grow-copy-bb-insns
6016               The maximum code size expansion factor when copying basic
6017               blocks instead of jumping.  The expansion is relative to a jump
6018               instruction.  The default value is 8.
6019
6020           max-goto-duplication-insns
6021               The maximum number of instructions to duplicate to a block that
6022               jumps to a computed goto.  To avoid O(N^2) behavior in a number
6023               of passes, GCC factors computed gotos early in the compilation
6024               process, and unfactors them as late as possible.  Only computed
6025               jumps at the end of a basic blocks with no more than max-goto-
6026               duplication-insns are unfactored.  The default value is 8.
6027
6028           max-delay-slot-insn-search
6029               The maximum number of instructions to consider when looking for
6030               an instruction to fill a delay slot.  If more than this
6031               arbitrary number of instructions is searched, the time savings
6032               from filling the delay slot will be minimal so stop searching.
6033               Increasing values mean more aggressive optimization, making the
6034               compile time increase with probably small improvement in
6035               executable run time.
6036
6037           max-delay-slot-live-search
6038               When trying to fill delay slots, the maximum number of
6039               instructions to consider when searching for a block with valid
6040               live register information.  Increasing this arbitrarily chosen
6041               value means more aggressive optimization, increasing the
6042               compile time.  This parameter should be removed when the delay
6043               slot code is rewritten to maintain the control-flow graph.
6044
6045           max-gcse-memory
6046               The approximate maximum amount of memory that will be allocated
6047               in order to perform the global common subexpression elimination
6048               optimization.  If more memory than specified is required, the
6049               optimization will not be done.
6050
6051           max-gcse-passes
6052               The maximum number of passes of GCSE to run.  The default is 1.
6053
6054           max-pending-list-length
6055               The maximum number of pending dependencies scheduling will
6056               allow before flushing the current state and starting over.
6057               Large functions with few branches or calls can create
6058               excessively large lists which needlessly consume memory and
6059               resources.
6060
6061           max-inline-insns-single
6062               Several parameters control the tree inliner used in gcc.  This
6063               number sets the maximum number of instructions (counted in
6064               GCC's internal representation) in a single function that the
6065               tree inliner will consider for inlining.  This only affects
6066               functions declared inline and methods implemented in a class
6067               declaration (C++).  The default value is 450.
6068
6069           max-inline-insns-auto
6070               When you use -finline-functions (included in -O3), a lot of
6071               functions that would otherwise not be considered for inlining
6072               by the compiler will be investigated.  To those functions, a
6073               different (more restrictive) limit compared to functions
6074               declared inline can be applied.  The default value is 90.
6075
6076           large-function-insns
6077               The limit specifying really large functions.  For functions
6078               larger than this limit after inlining, inlining is constrained
6079               by --param large-function-growth.  This parameter is useful
6080               primarily to avoid extreme compilation time caused by non-
6081               linear algorithms used by the backend.  The default value is
6082               2700.
6083
6084           large-function-growth
6085               Specifies maximal growth of large function caused by inlining
6086               in percents.  The default value is 100 which limits large
6087               function growth to 2.0 times the original size.
6088
6089           large-unit-insns
6090               The limit specifying large translation unit.  Growth caused by
6091               inlining of units larger than this limit is limited by --param
6092               inline-unit-growth.  For small units this might be too tight
6093               (consider unit consisting of function A that is inline and B
6094               that just calls A three time.  If B is small relative to A, the
6095               growth of unit is 300\% and yet such inlining is very sane.
6096               For very large units consisting of small inlineable functions
6097               however the overall unit growth limit is needed to avoid
6098               exponential explosion of code size.  Thus for smaller units,
6099               the size is increased to --param large-unit-insns before
6100               applying --param inline-unit-growth.  The default is 10000
6101
6102           inline-unit-growth
6103               Specifies maximal overall growth of the compilation unit caused
6104               by inlining.  The default value is 30 which limits unit growth
6105               to 1.3 times the original size.
6106
6107           ipcp-unit-growth
6108               Specifies maximal overall growth of the compilation unit caused
6109               by interprocedural constant propagation.  The default value is
6110               10 which limits unit growth to 1.1 times the original size.
6111
6112           large-stack-frame
6113               The limit specifying large stack frames.  While inlining the
6114               algorithm is trying to not grow past this limit too much.
6115               Default value is 256 bytes.
6116
6117           large-stack-frame-growth
6118               Specifies maximal growth of large stack frames caused by
6119               inlining in percents.  The default value is 1000 which limits
6120               large stack frame growth to 11 times the original size.
6121
6122           max-inline-insns-recursive
6123           max-inline-insns-recursive-auto
6124               Specifies maximum number of instructions out-of-line copy of
6125               self recursive inline function can grow into by performing
6126               recursive inlining.
6127
6128               For functions declared inline --param max-inline-insns-
6129               recursive is taken into account.  For function not declared
6130               inline, recursive inlining happens only when -finline-functions
6131               (included in -O3) is enabled and --param max-inline-insns-
6132               recursive-auto is used.  The default value is 450.
6133
6134           max-inline-recursive-depth
6135           max-inline-recursive-depth-auto
6136               Specifies maximum recursion depth used by the recursive
6137               inlining.
6138
6139               For functions declared inline --param max-inline-recursive-
6140               depth is taken into account.  For function not declared inline,
6141               recursive inlining happens only when -finline-functions
6142               (included in -O3) is enabled and --param max-inline-recursive-
6143               depth-auto is used.  The default value is 8.
6144
6145           min-inline-recursive-probability
6146               Recursive inlining is profitable only for function having deep
6147               recursion in average and can hurt for function having little
6148               recursion depth by increasing the prologue size or complexity
6149               of function body to other optimizers.
6150
6151               When profile feedback is available (see -fprofile-generate) the
6152               actual recursion depth can be guessed from probability that
6153               function will recurse via given call expression.  This
6154               parameter limits inlining only to call expression whose
6155               probability exceeds given threshold (in percents).  The default
6156               value is 10.
6157
6158           inline-call-cost
6159               Specify cost of call instruction relative to simple arithmetics
6160               operations (having cost of 1).  Increasing this cost
6161               disqualifies inlining of non-leaf functions and at the same
6162               time increases size of leaf function that is believed to reduce
6163               function size by being inlined.  In effect it increases amount
6164               of inlining for code having large abstraction penalty (many
6165               functions that just pass the arguments to other functions) and
6166               decrease inlining for code with low abstraction penalty.  The
6167               default value is 12.
6168
6169           min-vect-loop-bound
6170               The minimum number of iterations under which a loop will not
6171               get vectorized when -ftree-vectorize is used.  The number of
6172               iterations after vectorization needs to be greater than the
6173               value specified by this option to allow vectorization.  The
6174               default value is 0.
6175
6176           max-unrolled-insns
6177               The maximum number of instructions that a loop should have if
6178               that loop is unrolled, and if the loop is unrolled, it
6179               determines how many times the loop code is unrolled.
6180
6181           max-average-unrolled-insns
6182               The maximum number of instructions biased by probabilities of
6183               their execution that a loop should have if that loop is
6184               unrolled, and if the loop is unrolled, it determines how many
6185               times the loop code is unrolled.
6186
6187           max-unroll-times
6188               The maximum number of unrollings of a single loop.
6189
6190           max-peeled-insns
6191               The maximum number of instructions that a loop should have if
6192               that loop is peeled, and if the loop is peeled, it determines
6193               how many times the loop code is peeled.
6194
6195           max-peel-times
6196               The maximum number of peelings of a single loop.
6197
6198           max-completely-peeled-insns
6199               The maximum number of insns of a completely peeled loop.
6200
6201           max-completely-peel-times
6202               The maximum number of iterations of a loop to be suitable for
6203               complete peeling.
6204
6205           max-completely-peel-loop-nest-depth
6206               The maximum depth of a loop nest suitable for complete peeling.
6207
6208           max-unswitch-insns
6209               The maximum number of insns of an unswitched loop.
6210
6211           max-unswitch-level
6212               The maximum number of branches unswitched in a single loop.
6213
6214           lim-expensive
6215               The minimum cost of an expensive expression in the loop
6216               invariant motion.
6217
6218           iv-consider-all-candidates-bound
6219               Bound on number of candidates for induction variables below
6220               that all candidates are considered for each use in induction
6221               variable optimizations.  Only the most relevant candidates are
6222               considered if there are more candidates, to avoid quadratic
6223               time complexity.
6224
6225           iv-max-considered-uses
6226               The induction variable optimizations give up on loops that
6227               contain more induction variable uses.
6228
6229           iv-always-prune-cand-set-bound
6230               If number of candidates in the set is smaller than this value,
6231               we always try to remove unnecessary ivs from the set during its
6232               optimization when a new iv is added to the set.
6233
6234           scev-max-expr-size
6235               Bound on size of expressions used in the scalar evolutions
6236               analyzer.  Large expressions slow the analyzer.
6237
6238           omega-max-vars
6239               The maximum number of variables in an Omega constraint system.
6240               The default value is 128.
6241
6242           omega-max-geqs
6243               The maximum number of inequalities in an Omega constraint
6244               system.  The default value is 256.
6245
6246           omega-max-eqs
6247               The maximum number of equalities in an Omega constraint system.
6248               The default value is 128.
6249
6250           omega-max-wild-cards
6251               The maximum number of wildcard variables that the Omega solver
6252               will be able to insert.  The default value is 18.
6253
6254           omega-hash-table-size
6255               The size of the hash table in the Omega solver.  The default
6256               value is 550.
6257
6258           omega-max-keys
6259               The maximal number of keys used by the Omega solver.  The
6260               default value is 500.
6261
6262           omega-eliminate-redundant-constraints
6263               When set to 1, use expensive methods to eliminate all redundant
6264               constraints.  The default value is 0.
6265
6266           vect-max-version-for-alignment-checks
6267               The maximum number of runtime checks that can be performed when
6268               doing loop versioning for alignment in the vectorizer.  See
6269               option ftree-vect-loop-version for more information.
6270
6271           vect-max-version-for-alias-checks
6272               The maximum number of runtime checks that can be performed when
6273               doing loop versioning for alias in the vectorizer.  See option
6274               ftree-vect-loop-version for more information.
6275
6276           max-iterations-to-track
6277               The maximum number of iterations of a loop the brute force
6278               algorithm for analysis of # of iterations of the loop tries to
6279               evaluate.
6280
6281           hot-bb-count-fraction
6282               Select fraction of the maximal count of repetitions of basic
6283               block in program given basic block needs to have to be
6284               considered hot.
6285
6286           hot-bb-frequency-fraction
6287               Select fraction of the maximal frequency of executions of basic
6288               block in function given basic block needs to have to be
6289               considered hot
6290
6291           max-predicted-iterations
6292               The maximum number of loop iterations we predict statically.
6293               This is useful in cases where function contain single loop with
6294               known bound and other loop with unknown.  We predict the known
6295               number of iterations correctly, while the unknown number of
6296               iterations average to roughly 10.  This means that the loop
6297               without bounds would appear artificially cold relative to the
6298               other one.
6299
6300           align-threshold
6301               Select fraction of the maximal frequency of executions of basic
6302               block in function given basic block will get aligned.
6303
6304           align-loop-iterations
6305               A loop expected to iterate at lest the selected number of
6306               iterations will get aligned.
6307
6308           tracer-dynamic-coverage
6309           tracer-dynamic-coverage-feedback
6310               This value is used to limit superblock formation once the given
6311               percentage of executed instructions is covered.  This limits
6312               unnecessary code size expansion.
6313
6314               The tracer-dynamic-coverage-feedback is used only when profile
6315               feedback is available.  The real profiles (as opposed to
6316               statically estimated ones) are much less balanced allowing the
6317               threshold to be larger value.
6318
6319           tracer-max-code-growth
6320               Stop tail duplication once code growth has reached given
6321               percentage.  This is rather hokey argument, as most of the
6322               duplicates will be eliminated later in cross jumping, so it may
6323               be set to much higher values than is the desired code growth.
6324
6325           tracer-min-branch-ratio
6326               Stop reverse growth when the reverse probability of best edge
6327               is less than this threshold (in percent).
6328
6329           tracer-min-branch-ratio
6330           tracer-min-branch-ratio-feedback
6331               Stop forward growth if the best edge do have probability lower
6332               than this threshold.
6333
6334               Similarly to tracer-dynamic-coverage two values are present,
6335               one for compilation for profile feedback and one for
6336               compilation without.  The value for compilation with profile
6337               feedback needs to be more conservative (higher) in order to
6338               make tracer effective.
6339
6340           max-cse-path-length
6341               Maximum number of basic blocks on path that cse considers.  The
6342               default is 10.
6343
6344           max-cse-insns
6345               The maximum instructions CSE process before flushing. The
6346               default is 1000.
6347
6348           max-aliased-vops
6349               Maximum number of virtual operands per function allowed to
6350               represent aliases before triggering the alias partitioning
6351               heuristic.  Alias partitioning reduces compile times and memory
6352               consumption needed for aliasing at the expense of precision
6353               loss in alias information.  The default value for this
6354               parameter is 100 for -O1, 500 for -O2 and 1000 for -O3.
6355
6356               Notice that if a function contains more memory statements than
6357               the value of this parameter, it is not really possible to
6358               achieve this reduction.  In this case, the compiler will use
6359               the number of memory statements as the value for max-aliased-
6360               vops.
6361
6362           avg-aliased-vops
6363               Average number of virtual operands per statement allowed to
6364               represent aliases before triggering the alias partitioning
6365               heuristic.  This works in conjunction with max-aliased-vops.
6366               If a function contains more than max-aliased-vops virtual
6367               operators, then memory symbols will be grouped into memory
6368               partitions until either the total number of virtual operators
6369               is below max-aliased-vops or the average number of virtual
6370               operators per memory statement is below avg-aliased-vops.  The
6371               default value for this parameter is 1 for -O1 and -O2, and 3
6372               for -O3.
6373
6374           ggc-min-expand
6375               GCC uses a garbage collector to manage its own memory
6376               allocation.  This parameter specifies the minimum percentage by
6377               which the garbage collector's heap should be allowed to expand
6378               between collections.  Tuning this may improve compilation
6379               speed; it has no effect on code generation.
6380
6381               The default is 30% + 70% * (RAM/1GB) with an upper bound of
6382               100% when RAM >= 1GB.  If "getrlimit" is available, the notion
6383               of "RAM" is the smallest of actual RAM and "RLIMIT_DATA" or
6384               "RLIMIT_AS".  If GCC is not able to calculate RAM on a
6385               particular platform, the lower bound of 30% is used.  Setting
6386               this parameter and ggc-min-heapsize to zero causes a full
6387               collection to occur at every opportunity.  This is extremely
6388               slow, but can be useful for debugging.
6389
6390           ggc-min-heapsize
6391               Minimum size of the garbage collector's heap before it begins
6392               bothering to collect garbage.  The first collection occurs
6393               after the heap expands by ggc-min-expand% beyond ggc-min-
6394               heapsize.  Again, tuning this may improve compilation speed,
6395               and has no effect on code generation.
6396
6397               The default is the smaller of RAM/8, RLIMIT_RSS, or a limit
6398               which tries to ensure that RLIMIT_DATA or RLIMIT_AS are not
6399               exceeded, but with a lower bound of 4096 (four megabytes) and
6400               an upper bound of 131072 (128 megabytes).  If GCC is not able
6401               to calculate RAM on a particular platform, the lower bound is
6402               used.  Setting this parameter very large effectively disables
6403               garbage collection.  Setting this parameter and ggc-min-expand
6404               to zero causes a full collection to occur at every opportunity.
6405
6406           max-reload-search-insns
6407               The maximum number of instruction reload should look backward
6408               for equivalent register.  Increasing values mean more
6409               aggressive optimization, making the compile time increase with
6410               probably slightly better performance.  The default value is
6411               100.
6412
6413           max-cselib-memory-locations
6414               The maximum number of memory locations cselib should take into
6415               account.  Increasing values mean more aggressive optimization,
6416               making the compile time increase with probably slightly better
6417               performance.  The default value is 500.
6418
6419           reorder-blocks-duplicate
6420           reorder-blocks-duplicate-feedback
6421               Used by basic block reordering pass to decide whether to use
6422               unconditional branch or duplicate the code on its destination.
6423               Code is duplicated when its estimated size is smaller than this
6424               value multiplied by the estimated size of unconditional jump in
6425               the hot spots of the program.
6426
6427               The reorder-block-duplicate-feedback is used only when profile
6428               feedback is available and may be set to higher values than
6429               reorder-block-duplicate since information about the hot spots
6430               is more accurate.
6431
6432           max-sched-ready-insns
6433               The maximum number of instructions ready to be issued the
6434               scheduler should consider at any given time during the first
6435               scheduling pass.  Increasing values mean more thorough
6436               searches, making the compilation time increase with probably
6437               little benefit.  The default value is 100.
6438
6439           max-sched-region-blocks
6440               The maximum number of blocks in a region to be considered for
6441               interblock scheduling.  The default value is 10.
6442
6443           max-pipeline-region-blocks
6444               The maximum number of blocks in a region to be considered for
6445               pipelining in the selective scheduler.  The default value is
6446               15.
6447
6448           max-sched-region-insns
6449               The maximum number of insns in a region to be considered for
6450               interblock scheduling.  The default value is 100.
6451
6452           max-pipeline-region-insns
6453               The maximum number of insns in a region to be considered for
6454               pipelining in the selective scheduler.  The default value is
6455               200.
6456
6457           min-spec-prob
6458               The minimum probability (in percents) of reaching a source
6459               block for interblock speculative scheduling.  The default value
6460               is 40.
6461
6462           max-sched-extend-regions-iters
6463               The maximum number of iterations through CFG to extend regions.
6464               0 - disable region extension, N - do at most N iterations.  The
6465               default value is 0.
6466
6467           max-sched-insn-conflict-delay
6468               The maximum conflict delay for an insn to be considered for
6469               speculative motion.  The default value is 3.
6470
6471           sched-spec-prob-cutoff
6472               The minimal probability of speculation success (in percents),
6473               so that speculative insn will be scheduled.  The default value
6474               is 40.
6475
6476           sched-mem-true-dep-cost
6477               Minimal distance (in CPU cycles) between store and load
6478               targeting same memory locations.  The default value is 1.
6479
6480           selsched-max-lookahead
6481               The maximum size of the lookahead window of selective
6482               scheduling.  It is a depth of search for available
6483               instructions.  The default value is 50.
6484
6485           selsched-max-sched-times
6486               The maximum number of times that an instruction will be
6487               scheduled during selective scheduling.  This is the limit on
6488               the number of iterations through which the instruction may be
6489               pipelined.  The default value is 2.
6490
6491           selsched-max-insns-to-rename
6492               The maximum number of best instructions in the ready list that
6493               are considered for renaming in the selective scheduler.  The
6494               default value is 2.
6495
6496           max-last-value-rtl
6497               The maximum size measured as number of RTLs that can be
6498               recorded in an expression in combiner for a pseudo register as
6499               last known value of that register.  The default is 10000.
6500
6501           integer-share-limit
6502               Small integer constants can use a shared data structure,
6503               reducing the compiler's memory usage and increasing its speed.
6504               This sets the maximum value of a shared integer constant.  The
6505               default value is 256.
6506
6507           min-virtual-mappings
6508               Specifies the minimum number of virtual mappings in the
6509               incremental SSA updater that should be registered to trigger
6510               the virtual mappings heuristic defined by virtual-mappings-
6511               ratio.  The default value is 100.
6512
6513           virtual-mappings-ratio
6514               If the number of virtual mappings is virtual-mappings-ratio
6515               bigger than the number of virtual symbols to be updated, then
6516               the incremental SSA updater switches to a full update for those
6517               symbols.  The default ratio is 3.
6518
6519           ssp-buffer-size
6520               The minimum size of buffers (i.e. arrays) that will receive
6521               stack smashing protection when -fstack-protection is used.
6522
6523           max-jump-thread-duplication-stmts
6524               Maximum number of statements allowed in a block that needs to
6525               be duplicated when threading jumps.
6526
6527           max-fields-for-field-sensitive
6528               Maximum number of fields in a structure we will treat in a
6529               field sensitive manner during pointer analysis.  The default is
6530               zero for -O0, and -O1 and 100 for -Os, -O2, and -O3.
6531
6532           prefetch-latency
6533               Estimate on average number of instructions that are executed
6534               before prefetch finishes.  The distance we prefetch ahead is
6535               proportional to this constant.  Increasing this number may also
6536               lead to less streams being prefetched (see simultaneous-
6537               prefetches).
6538
6539           simultaneous-prefetches
6540               Maximum number of prefetches that can run at the same time.
6541
6542           l1-cache-line-size
6543               The size of cache line in L1 cache, in bytes.
6544
6545           l1-cache-size
6546               The size of L1 cache, in kilobytes.
6547
6548           l2-cache-size
6549               The size of L2 cache, in kilobytes.
6550
6551           use-canonical-types
6552               Whether the compiler should use the "canonical" type system.
6553               By default, this should always be 1, which uses a more
6554               efficient internal mechanism for comparing types in C++ and
6555               Objective-C++.  However, if bugs in the canonical type system
6556               are causing compilation failures, set this value to 0 to
6557               disable canonical types.
6558
6559           switch-conversion-max-branch-ratio
6560               Switch initialization conversion will refuse to create arrays
6561               that are bigger than switch-conversion-max-branch-ratio times
6562               the number of branches in the switch.
6563
6564           max-partial-antic-length
6565               Maximum length of the partial antic set computed during the
6566               tree partial redundancy elimination optimization (-ftree-pre)
6567               when optimizing at -O3 and above.  For some sorts of source
6568               code the enhanced partial redundancy elimination optimization
6569               can run away, consuming all of the memory available on the host
6570               machine.  This parameter sets a limit on the length of the sets
6571               that are computed, which prevents the runaway behavior.
6572               Setting a value of 0 for this parameter will allow an unlimited
6573               set length.
6574
6575           sccvn-max-scc-size
6576               Maximum size of a strongly connected component (SCC) during
6577               SCCVN processing.  If this limit is hit, SCCVN processing for
6578               the whole function will not be done and optimizations depending
6579               on it will be disabled.  The default maximum SCC size is 10000.
6580
6581           ira-max-loops-num
6582               IRA uses a regional register allocation by default.  If a
6583               function contains loops more than number given by the
6584               parameter, only at most given number of the most frequently
6585               executed loops will form regions for the regional register
6586               allocation.  The default value of the parameter is 100.
6587
6588           ira-max-conflict-table-size
6589               Although IRA uses a sophisticated algorithm of compression
6590               conflict table, the table can be still big for huge functions.
6591               If the conflict table for a function could be more than size in
6592               MB given by the parameter, the conflict table is not built and
6593               faster, simpler, and lower quality register allocation
6594               algorithm will be used.  The algorithm do not use pseudo-
6595               register conflicts.  The default value of the parameter is
6596               2000.
6597
6598           loop-invariant-max-bbs-in-loop
6599               Loop invariant motion can be very expensive, both in compile
6600               time and in amount of needed compile time memory, with very
6601               large loops.  Loops with more basic blocks than this parameter
6602               won't have loop invariant motion optimization performed on
6603               them.  The default value of the parameter is 1000 for -O1 and
6604               10000 for -O2 and above.
6605
6606           max-vartrack-size
6607               Sets a maximum number of hash table slots to use during
6608               variable tracking dataflow analysis of any function.  If this
6609               limit is exceeded with variable tracking at assignments
6610               enabled, analysis for that function is retried without it,
6611               after removing all debug insns from the function.  If the limit
6612               is exceeded even without debug insns, var tracking analysis is
6613               completely disabled for the function.  Setting the parameter to
6614               zero makes it unlimited.
6615
6616           min-nondebug-insn-uid
6617               Use uids starting at this parameter for nondebug insns.  The
6618               range below the parameter is reserved exclusively for debug
6619               insns created by -fvar-tracking-assignments, but debug insns
6620               may get (non-overlapping) uids above it if the reserved range
6621               is exhausted.
6622
6623   Options Controlling the Preprocessor
6624       These options control the C preprocessor, which is run on each C source
6625       file before actual compilation.
6626
6627       If you use the -E option, nothing is done except preprocessing.  Some
6628       of these options make sense only together with -E because they cause
6629       the preprocessor output to be unsuitable for actual compilation.
6630
6631       -Wp,option
6632           You can use -Wp,option to bypass the compiler driver and pass
6633           option directly through to the preprocessor.  If option contains
6634           commas, it is split into multiple options at the commas.  However,
6635           many options are modified, translated or interpreted by the
6636           compiler driver before being passed to the preprocessor, and -Wp
6637           forcibly bypasses this phase.  The preprocessor's direct interface
6638           is undocumented and subject to change, so whenever possible you
6639           should avoid using -Wp and let the driver handle the options
6640           instead.
6641
6642       -Xpreprocessor option
6643           Pass option as an option to the preprocessor.  You can use this to
6644           supply system-specific preprocessor options which GCC does not know
6645           how to recognize.
6646
6647           If you want to pass an option that takes an argument, you must use
6648           -Xpreprocessor twice, once for the option and once for the
6649           argument.
6650
6651       -D name
6652           Predefine name as a macro, with definition 1.
6653
6654       -D name=definition
6655           The contents of definition are tokenized and processed as if they
6656           appeared during translation phase three in a #define directive.  In
6657           particular, the definition will be truncated by embedded newline
6658           characters.
6659
6660           If you are invoking the preprocessor from a shell or shell-like
6661           program you may need to use the shell's quoting syntax to protect
6662           characters such as spaces that have a meaning in the shell syntax.
6663
6664           If you wish to define a function-like macro on the command line,
6665           write its argument list with surrounding parentheses before the
6666           equals sign (if any).  Parentheses are meaningful to most shells,
6667           so you will need to quote the option.  With sh and csh,
6668           -D'name(args...)=definition' works.
6669
6670           -D and -U options are processed in the order they are given on the
6671           command line.  All -imacros file and -include file options are
6672           processed after all -D and -U options.
6673
6674       -U name
6675           Cancel any previous definition of name, either built in or provided
6676           with a -D option.
6677
6678       -undef
6679           Do not predefine any system-specific or GCC-specific macros.  The
6680           standard predefined macros remain defined.
6681
6682       -I dir
6683           Add the directory dir to the list of directories to be searched for
6684           header files.  Directories named by -I are searched before the
6685           standard system include directories.  If the directory dir is a
6686           standard system include directory, the option is ignored to ensure
6687           that the default search order for system directories and the
6688           special treatment of system headers are not defeated .  If dir
6689           begins with "=", then the "=" will be replaced by the sysroot
6690           prefix; see --sysroot and -isysroot.
6691
6692       -o file
6693           Write output to file.  This is the same as specifying file as the
6694           second non-option argument to cpp.  gcc has a different
6695           interpretation of a second non-option argument, so you must use -o
6696           to specify the output file.
6697
6698       -Wall
6699           Turns on all optional warnings which are desirable for normal code.
6700           At present this is -Wcomment, -Wtrigraphs, -Wmultichar and a
6701           warning about integer promotion causing a change of sign in "#if"
6702           expressions.  Note that many of the preprocessor's warnings are on
6703           by default and have no options to control them.
6704
6705       -Wcomment
6706       -Wcomments
6707           Warn whenever a comment-start sequence /* appears in a /* comment,
6708           or whenever a backslash-newline appears in a // comment.  (Both
6709           forms have the same effect.)
6710
6711       -Wtrigraphs
6712           Most trigraphs in comments cannot affect the meaning of the
6713           program.  However, a trigraph that would form an escaped newline
6714           (??/ at the end of a line) can, by changing where the comment
6715           begins or ends.  Therefore, only trigraphs that would form escaped
6716           newlines produce warnings inside a comment.
6717
6718           This option is implied by -Wall.  If -Wall is not given, this
6719           option is still enabled unless trigraphs are enabled.  To get
6720           trigraph conversion without warnings, but get the other -Wall
6721           warnings, use -trigraphs -Wall -Wno-trigraphs.
6722
6723       -Wtraditional
6724           Warn about certain constructs that behave differently in
6725           traditional and ISO C.  Also warn about ISO C constructs that have
6726           no traditional C equivalent, and problematic constructs which
6727           should be avoided.
6728
6729       -Wundef
6730           Warn whenever an identifier which is not a macro is encountered in
6731           an #if directive, outside of defined.  Such identifiers are
6732           replaced with zero.
6733
6734       -Wunused-macros
6735           Warn about macros defined in the main file that are unused.  A
6736           macro is used if it is expanded or tested for existence at least
6737           once.  The preprocessor will also warn if the macro has not been
6738           used at the time it is redefined or undefined.
6739
6740           Built-in macros, macros defined on the command line, and macros
6741           defined in include files are not warned about.
6742
6743           Note: If a macro is actually used, but only used in skipped
6744           conditional blocks, then CPP will report it as unused.  To avoid
6745           the warning in such a case, you might improve the scope of the
6746           macro's definition by, for example, moving it into the first
6747           skipped block.  Alternatively, you could provide a dummy use with
6748           something like:
6749
6750                   #if defined the_macro_causing_the_warning
6751                   #endif
6752
6753       -Wendif-labels
6754           Warn whenever an #else or an #endif are followed by text.  This
6755           usually happens in code of the form
6756
6757                   #if FOO
6758                   ...
6759                   #else FOO
6760                   ...
6761                   #endif FOO
6762
6763           The second and third "FOO" should be in comments, but often are not
6764           in older programs.  This warning is on by default.
6765
6766       -Werror
6767           Make all warnings into hard errors.  Source code which triggers
6768           warnings will be rejected.
6769
6770       -Wsystem-headers
6771           Issue warnings for code in system headers.  These are normally
6772           unhelpful in finding bugs in your own code, therefore suppressed.
6773           If you are responsible for the system library, you may want to see
6774           them.
6775
6776       -w  Suppress all warnings, including those which GNU CPP issues by
6777           default.
6778
6779       -pedantic
6780           Issue all the mandatory diagnostics listed in the C standard.  Some
6781           of them are left out by default, since they trigger frequently on
6782           harmless code.
6783
6784       -pedantic-errors
6785           Issue all the mandatory diagnostics, and make all mandatory
6786           diagnostics into errors.  This includes mandatory diagnostics that
6787           GCC issues without -pedantic but treats as warnings.
6788
6789       -M  Instead of outputting the result of preprocessing, output a rule
6790           suitable for make describing the dependencies of the main source
6791           file.  The preprocessor outputs one make rule containing the object
6792           file name for that source file, a colon, and the names of all the
6793           included files, including those coming from -include or -imacros
6794           command line options.
6795
6796           Unless specified explicitly (with -MT or -MQ), the object file name
6797           consists of the name of the source file with any suffix replaced
6798           with object file suffix and with any leading directory parts
6799           removed.  If there are many included files then the rule is split
6800           into several lines using \-newline.  The rule has no commands.
6801
6802           This option does not suppress the preprocessor's debug output, such
6803           as -dM.  To avoid mixing such debug output with the dependency
6804           rules you should explicitly specify the dependency output file with
6805           -MF, or use an environment variable like DEPENDENCIES_OUTPUT.
6806           Debug output will still be sent to the regular output stream as
6807           normal.
6808
6809           Passing -M to the driver implies -E, and suppresses warnings with
6810           an implicit -w.
6811
6812       -MM Like -M but do not mention header files that are found in system
6813           header directories, nor header files that are included, directly or
6814           indirectly, from such a header.
6815
6816           This implies that the choice of angle brackets or double quotes in
6817           an #include directive does not in itself determine whether that
6818           header will appear in -MM dependency output.  This is a slight
6819           change in semantics from GCC versions 3.0 and earlier.
6820
6821       -MF file
6822           When used with -M or -MM, specifies a file to write the
6823           dependencies to.  If no -MF switch is given the preprocessor sends
6824           the rules to the same place it would have sent preprocessed output.
6825
6826           When used with the driver options -MD or -MMD, -MF overrides the
6827           default dependency output file.
6828
6829       -MG In conjunction with an option such as -M requesting dependency
6830           generation, -MG assumes missing header files are generated files
6831           and adds them to the dependency list without raising an error.  The
6832           dependency filename is taken directly from the "#include" directive
6833           without prepending any path.  -MG also suppresses preprocessed
6834           output, as a missing header file renders this useless.
6835
6836           This feature is used in automatic updating of makefiles.
6837
6838       -MP This option instructs CPP to add a phony target for each dependency
6839           other than the main file, causing each to depend on nothing.  These
6840           dummy rules work around errors make gives if you remove header
6841           files without updating the Makefile to match.
6842
6843           This is typical output:
6844
6845                   test.o: test.c test.h
6846
6847                   test.h:
6848
6849       -MT target
6850           Change the target of the rule emitted by dependency generation.  By
6851           default CPP takes the name of the main input file, deletes any
6852           directory components and any file suffix such as .c, and appends
6853           the platform's usual object suffix.  The result is the target.
6854
6855           An -MT option will set the target to be exactly the string you
6856           specify.  If you want multiple targets, you can specify them as a
6857           single argument to -MT, or use multiple -MT options.
6858
6859           For example, -MT '$(objpfx)foo.o' might give
6860
6861                   $(objpfx)foo.o: foo.c
6862
6863       -MQ target
6864           Same as -MT, but it quotes any characters which are special to
6865           Make.  -MQ '$(objpfx)foo.o' gives
6866
6867                   $$(objpfx)foo.o: foo.c
6868
6869           The default target is automatically quoted, as if it were given
6870           with -MQ.
6871
6872       -MD -MD is equivalent to -M -MF file, except that -E is not implied.
6873           The driver determines file based on whether an -o option is given.
6874           If it is, the driver uses its argument but with a suffix of .d,
6875           otherwise it takes the name of the input file, removes any
6876           directory components and suffix, and applies a .d suffix.
6877
6878           If -MD is used in conjunction with -E, any -o switch is understood
6879           to specify the dependency output file, but if used without -E, each
6880           -o is understood to specify a target object file.
6881
6882           Since -E is not implied, -MD can be used to generate a dependency
6883           output file as a side-effect of the compilation process.
6884
6885       -MMD
6886           Like -MD except mention only user header files, not system header
6887           files.
6888
6889       -fpch-deps
6890           When using precompiled headers, this flag will cause the
6891           dependency-output flags to also list the files from the precompiled
6892           header's dependencies.  If not specified only the precompiled
6893           header would be listed and not the files that were used to create
6894           it because those files are not consulted when a precompiled header
6895           is used.
6896
6897       -fpch-preprocess
6898           This option allows use of a precompiled header together with -E.
6899           It inserts a special "#pragma", "#pragma GCC pch_preprocess
6900           "<filename>"" in the output to mark the place where the precompiled
6901           header was found, and its filename.  When -fpreprocessed is in use,
6902           GCC recognizes this "#pragma" and loads the PCH.
6903
6904           This option is off by default, because the resulting preprocessed
6905           output is only really suitable as input to GCC.  It is switched on
6906           by -save-temps.
6907
6908           You should not write this "#pragma" in your own code, but it is
6909           safe to edit the filename if the PCH file is available in a
6910           different location.  The filename may be absolute or it may be
6911           relative to GCC's current directory.
6912
6913       -x c
6914       -x c++
6915       -x objective-c
6916       -x assembler-with-cpp
6917           Specify the source language: C, C++, Objective-C, or assembly.
6918           This has nothing to do with standards conformance or extensions; it
6919           merely selects which base syntax to expect.  If you give none of
6920           these options, cpp will deduce the language from the extension of
6921           the source file: .c, .cc, .m, or .S.  Some other common extensions
6922           for C++ and assembly are also recognized.  If cpp does not
6923           recognize the extension, it will treat the file as C; this is the
6924           most generic mode.
6925
6926           Note: Previous versions of cpp accepted a -lang option which
6927           selected both the language and the standards conformance level.
6928           This option has been removed, because it conflicts with the -l
6929           option.
6930
6931       -std=standard
6932       -ansi
6933           Specify the standard to which the code should conform.  Currently
6934           CPP knows about C and C++ standards; others may be added in the
6935           future.
6936
6937           standard may be one of:
6938
6939           "iso9899:1990"
6940           "c89"
6941               The ISO C standard from 1990.  c89 is the customary shorthand
6942               for this version of the standard.
6943
6944               The -ansi option is equivalent to -std=c89.
6945
6946           "iso9899:199409"
6947               The 1990 C standard, as amended in 1994.
6948
6949           "iso9899:1999"
6950           "c99"
6951           "iso9899:199x"
6952           "c9x"
6953               The revised ISO C standard, published in December 1999.  Before
6954               publication, this was known as C9X.
6955
6956           "gnu89"
6957               The 1990 C standard plus GNU extensions.  This is the default.
6958
6959           "gnu99"
6960           "gnu9x"
6961               The 1999 C standard plus GNU extensions.
6962
6963           "c++98"
6964               The 1998 ISO C++ standard plus amendments.
6965
6966           "gnu++98"
6967               The same as -std=c++98 plus GNU extensions.  This is the
6968               default for C++ code.
6969
6970       -I- Split the include path.  Any directories specified with -I options
6971           before -I- are searched only for headers requested with
6972           "#include "file""; they are not searched for "#include <file>".  If
6973           additional directories are specified with -I options after the -I-,
6974           those directories are searched for all #include directives.
6975
6976           In addition, -I- inhibits the use of the directory of the current
6977           file directory as the first search directory for "#include "file"".
6978           This option has been deprecated.
6979
6980       -nostdinc
6981           Do not search the standard system directories for header files.
6982           Only the directories you have specified with -I options (and the
6983           directory of the current file, if appropriate) are searched.
6984
6985       -nostdinc++
6986           Do not search for header files in the C++-specific standard
6987           directories, but do still search the other standard directories.
6988           (This option is used when building the C++ library.)
6989
6990       -include file
6991           Process file as if "#include "file"" appeared as the first line of
6992           the primary source file.  However, the first directory searched for
6993           file is the preprocessor's working directory instead of the
6994           directory containing the main source file.  If not found there, it
6995           is searched for in the remainder of the "#include "..."" search
6996           chain as normal.
6997
6998           If multiple -include options are given, the files are included in
6999           the order they appear on the command line.
7000
7001       -imacros file
7002           Exactly like -include, except that any output produced by scanning
7003           file is thrown away.  Macros it defines remain defined.  This
7004           allows you to acquire all the macros from a header without also
7005           processing its declarations.
7006
7007           All files specified by -imacros are processed before all files
7008           specified by -include.
7009
7010       -idirafter dir
7011           Search dir for header files, but do it after all directories
7012           specified with -I and the standard system directories have been
7013           exhausted.  dir is treated as a system include directory.  If dir
7014           begins with "=", then the "=" will be replaced by the sysroot
7015           prefix; see --sysroot and -isysroot.
7016
7017       -iprefix prefix
7018           Specify prefix as the prefix for subsequent -iwithprefix options.
7019           If the prefix represents a directory, you should include the final
7020           /.
7021
7022       -iwithprefix dir
7023       -iwithprefixbefore dir
7024           Append dir to the prefix specified previously with -iprefix, and
7025           add the resulting directory to the include search path.
7026           -iwithprefixbefore puts it in the same place -I would; -iwithprefix
7027           puts it where -idirafter would.
7028
7029       -isysroot dir
7030           This option is like the --sysroot option, but applies only to
7031           header files.  See the --sysroot option for more information.
7032
7033       -imultilib dir
7034           Use dir as a subdirectory of the directory containing target-
7035           specific C++ headers.
7036
7037       -isystem dir
7038           Search dir for header files, after all directories specified by -I
7039           but before the standard system directories.  Mark it as a system
7040           directory, so that it gets the same special treatment as is applied
7041           to the standard system directories.  If dir begins with "=", then
7042           the "=" will be replaced by the sysroot prefix; see --sysroot and
7043           -isysroot.
7044
7045       -iquote dir
7046           Search dir only for header files requested with "#include "file"";
7047           they are not searched for "#include <file>", before all directories
7048           specified by -I and before the standard system directories.  If dir
7049           begins with "=", then the "=" will be replaced by the sysroot
7050           prefix; see --sysroot and -isysroot.
7051
7052       -fdirectives-only
7053           When preprocessing, handle directives, but do not expand macros.
7054
7055           The option's behavior depends on the -E and -fpreprocessed options.
7056
7057           With -E, preprocessing is limited to the handling of directives
7058           such as "#define", "#ifdef", and "#error".  Other preprocessor
7059           operations, such as macro expansion and trigraph conversion are not
7060           performed.  In addition, the -dD option is implicitly enabled.
7061
7062           With -fpreprocessed, predefinition of command line and most builtin
7063           macros is disabled.  Macros such as "__LINE__", which are
7064           contextually dependent, are handled normally.  This enables
7065           compilation of files previously preprocessed with "-E
7066           -fdirectives-only".
7067
7068           With both -E and -fpreprocessed, the rules for -fpreprocessed take
7069           precedence.  This enables full preprocessing of files previously
7070           preprocessed with "-E -fdirectives-only".
7071
7072       -fdollars-in-identifiers
7073           Accept $ in identifiers.
7074
7075       -fextended-identifiers
7076           Accept universal character names in identifiers.  This option is
7077           experimental; in a future version of GCC, it will be enabled by
7078           default for C99 and C++.
7079
7080       -fpreprocessed
7081           Indicate to the preprocessor that the input file has already been
7082           preprocessed.  This suppresses things like macro expansion,
7083           trigraph conversion, escaped newline splicing, and processing of
7084           most directives.  The preprocessor still recognizes and removes
7085           comments, so that you can pass a file preprocessed with -C to the
7086           compiler without problems.  In this mode the integrated
7087           preprocessor is little more than a tokenizer for the front ends.
7088
7089           -fpreprocessed is implicit if the input file has one of the
7090           extensions .i, .ii or .mi.  These are the extensions that GCC uses
7091           for preprocessed files created by -save-temps.
7092
7093       -ftabstop=width
7094           Set the distance between tab stops.  This helps the preprocessor
7095           report correct column numbers in warnings or errors, even if tabs
7096           appear on the line.  If the value is less than 1 or greater than
7097           100, the option is ignored.  The default is 8.
7098
7099       -fexec-charset=charset
7100           Set the execution character set, used for string and character
7101           constants.  The default is UTF-8.  charset can be any encoding
7102           supported by the system's "iconv" library routine.
7103
7104       -fwide-exec-charset=charset
7105           Set the wide execution character set, used for wide string and
7106           character constants.  The default is UTF-32 or UTF-16, whichever
7107           corresponds to the width of "wchar_t".  As with -fexec-charset,
7108           charset can be any encoding supported by the system's "iconv"
7109           library routine; however, you will have problems with encodings
7110           that do not fit exactly in "wchar_t".
7111
7112       -finput-charset=charset
7113           Set the input character set, used for translation from the
7114           character set of the input file to the source character set used by
7115           GCC.  If the locale does not specify, or GCC cannot get this
7116           information from the locale, the default is UTF-8.  This can be
7117           overridden by either the locale or this command line option.
7118           Currently the command line option takes precedence if there's a
7119           conflict.  charset can be any encoding supported by the system's
7120           "iconv" library routine.
7121
7122       -fworking-directory
7123           Enable generation of linemarkers in the preprocessor output that
7124           will let the compiler know the current working directory at the
7125           time of preprocessing.  When this option is enabled, the
7126           preprocessor will emit, after the initial linemarker, a second
7127           linemarker with the current working directory followed by two
7128           slashes.  GCC will use this directory, when it's present in the
7129           preprocessed input, as the directory emitted as the current working
7130           directory in some debugging information formats.  This option is
7131           implicitly enabled if debugging information is enabled, but this
7132           can be inhibited with the negated form -fno-working-directory.  If
7133           the -P flag is present in the command line, this option has no
7134           effect, since no "#line" directives are emitted whatsoever.
7135
7136       -fno-show-column
7137           Do not print column numbers in diagnostics.  This may be necessary
7138           if diagnostics are being scanned by a program that does not
7139           understand the column numbers, such as dejagnu.
7140
7141       -A predicate=answer
7142           Make an assertion with the predicate predicate and answer answer.
7143           This form is preferred to the older form -A predicate(answer),
7144           which is still supported, because it does not use shell special
7145           characters.
7146
7147       -A -predicate=answer
7148           Cancel an assertion with the predicate predicate and answer answer.
7149
7150       -dCHARS
7151           CHARS is a sequence of one or more of the following characters, and
7152           must not be preceded by a space.  Other characters are interpreted
7153           by the compiler proper, or reserved for future versions of GCC, and
7154           so are silently ignored.  If you specify characters whose behavior
7155           conflicts, the result is undefined.
7156
7157           M   Instead of the normal output, generate a list of #define
7158               directives for all the macros defined during the execution of
7159               the preprocessor, including predefined macros.  This gives you
7160               a way of finding out what is predefined in your version of the
7161               preprocessor.  Assuming you have no file foo.h, the command
7162
7163                       touch foo.h; cpp -dM foo.h
7164
7165               will show all the predefined macros.
7166
7167               If you use -dM without the -E option, -dM is interpreted as a
7168               synonym for -fdump-rtl-mach.
7169
7170           D   Like M except in two respects: it does not include the
7171               predefined macros, and it outputs both the #define directives
7172               and the result of preprocessing.  Both kinds of output go to
7173               the standard output file.
7174
7175           N   Like D, but emit only the macro names, not their expansions.
7176
7177           I   Output #include directives in addition to the result of
7178               preprocessing.
7179
7180           U   Like D except that only macros that are expanded, or whose
7181               definedness is tested in preprocessor directives, are output;
7182               the output is delayed until the use or test of the macro; and
7183               #undef directives are also output for macros tested but
7184               undefined at the time.
7185
7186       -P  Inhibit generation of linemarkers in the output from the
7187           preprocessor.  This might be useful when running the preprocessor
7188           on something that is not C code, and will be sent to a program
7189           which might be confused by the linemarkers.
7190
7191       -C  Do not discard comments.  All comments are passed through to the
7192           output file, except for comments in processed directives, which are
7193           deleted along with the directive.
7194
7195           You should be prepared for side effects when using -C; it causes
7196           the preprocessor to treat comments as tokens in their own right.
7197           For example, comments appearing at the start of what would be a
7198           directive line have the effect of turning that line into an
7199           ordinary source line, since the first token on the line is no
7200           longer a #.
7201
7202       -CC Do not discard comments, including during macro expansion.  This is
7203           like -C, except that comments contained within macros are also
7204           passed through to the output file where the macro is expanded.
7205
7206           In addition to the side-effects of the -C option, the -CC option
7207           causes all C++-style comments inside a macro to be converted to
7208           C-style comments.  This is to prevent later use of that macro from
7209           inadvertently commenting out the remainder of the source line.
7210
7211           The -CC option is generally used to support lint comments.
7212
7213       -traditional-cpp
7214           Try to imitate the behavior of old-fashioned C preprocessors, as
7215           opposed to ISO C preprocessors.
7216
7217       -trigraphs
7218           Process trigraph sequences.  These are three-character sequences,
7219           all starting with ??, that are defined by ISO C to stand for single
7220           characters.  For example, ??/ stands for \, so '??/n' is a
7221           character constant for a newline.  By default, GCC ignores
7222           trigraphs, but in standard-conforming modes it converts them.  See
7223           the -std and -ansi options.
7224
7225           The nine trigraphs and their replacements are
7226
7227                   Trigraph:       ??(  ??)  ??<  ??>  ??=  ??/  ??'  ??!  ??-
7228                   Replacement:      [    ]    {    }    #    \    ^    |    ~
7229
7230       -remap
7231           Enable special code to work around file systems which only permit
7232           very short file names, such as MS-DOS.
7233
7234       --help
7235       --target-help
7236           Print text describing all the command line options instead of
7237           preprocessing anything.
7238
7239       -v  Verbose mode.  Print out GNU CPP's version number at the beginning
7240           of execution, and report the final form of the include path.
7241
7242       -H  Print the name of each header file used, in addition to other
7243           normal activities.  Each name is indented to show how deep in the
7244           #include stack it is.  Precompiled header files are also printed,
7245           even if they are found to be invalid; an invalid precompiled header
7246           file is printed with ...x and a valid one with ...! .
7247
7248       -version
7249       --version
7250           Print out GNU CPP's version number.  With one dash, proceed to
7251           preprocess as normal.  With two dashes, exit immediately.
7252
7253   Passing Options to the Assembler
7254       You can pass options to the assembler.
7255
7256       -Wa,option
7257           Pass option as an option to the assembler.  If option contains
7258           commas, it is split into multiple options at the commas.
7259
7260       -Xassembler option
7261           Pass option as an option to the assembler.  You can use this to
7262           supply system-specific assembler options which GCC does not know
7263           how to recognize.
7264
7265           If you want to pass an option that takes an argument, you must use
7266           -Xassembler twice, once for the option and once for the argument.
7267
7268   Options for Linking
7269       These options come into play when the compiler links object files into
7270       an executable output file.  They are meaningless if the compiler is not
7271       doing a link step.
7272
7273       object-file-name
7274           A file name that does not end in a special recognized suffix is
7275           considered to name an object file or library.  (Object files are
7276           distinguished from libraries by the linker according to the file
7277           contents.)  If linking is done, these object files are used as
7278           input to the linker.
7279
7280       -c
7281       -S
7282       -E  If any of these options is used, then the linker is not run, and
7283           object file names should not be used as arguments.
7284
7285       -llibrary
7286       -l library
7287           Search the library named library when linking.  (The second
7288           alternative with the library as a separate argument is only for
7289           POSIX compliance and is not recommended.)
7290
7291           It makes a difference where in the command you write this option;
7292           the linker searches and processes libraries and object files in the
7293           order they are specified.  Thus, foo.o -lz bar.o searches library z
7294           after file foo.o but before bar.o.  If bar.o refers to functions in
7295           z, those functions may not be loaded.
7296
7297           The linker searches a standard list of directories for the library,
7298           which is actually a file named liblibrary.a.  The linker then uses
7299           this file as if it had been specified precisely by name.
7300
7301           The directories searched include several standard system
7302           directories plus any that you specify with -L.
7303
7304           Normally the files found this way are library files---archive files
7305           whose members are object files.  The linker handles an archive file
7306           by scanning through it for members which define symbols that have
7307           so far been referenced but not defined.  But if the file that is
7308           found is an ordinary object file, it is linked in the usual
7309           fashion.  The only difference between using an -l option and
7310           specifying a file name is that -l surrounds library with lib and .a
7311           and searches several directories.
7312
7313       -lobjc
7314           You need this special case of the -l option in order to link an
7315           Objective-C or Objective-C++ program.
7316
7317       -nostartfiles
7318           Do not use the standard system startup files when linking.  The
7319           standard system libraries are used normally, unless -nostdlib or
7320           -nodefaultlibs is used.
7321
7322       -nodefaultlibs
7323           Do not use the standard system libraries when linking.  Only the
7324           libraries you specify will be passed to the linker.  The standard
7325           startup files are used normally, unless -nostartfiles is used.  The
7326           compiler may generate calls to "memcmp", "memset", "memcpy" and
7327           "memmove".  These entries are usually resolved by entries in libc.
7328           These entry points should be supplied through some other mechanism
7329           when this option is specified.
7330
7331       -nostdlib
7332           Do not use the standard system startup files or libraries when
7333           linking.  No startup files and only the libraries you specify will
7334           be passed to the linker.  The compiler may generate calls to
7335           "memcmp", "memset", "memcpy" and "memmove".  These entries are
7336           usually resolved by entries in libc.  These entry points should be
7337           supplied through some other mechanism when this option is
7338           specified.
7339
7340           One of the standard libraries bypassed by -nostdlib and
7341           -nodefaultlibs is libgcc.a, a library of internal subroutines that
7342           GCC uses to overcome shortcomings of particular machines, or
7343           special needs for some languages.
7344
7345           In most cases, you need libgcc.a even when you want to avoid other
7346           standard libraries.  In other words, when you specify -nostdlib or
7347           -nodefaultlibs you should usually specify -lgcc as well.  This
7348           ensures that you have no unresolved references to internal GCC
7349           library subroutines.  (For example, __main, used to ensure C++
7350           constructors will be called.)
7351
7352       -pie
7353           Produce a position independent executable on targets which support
7354           it.  For predictable results, you must also specify the same set of
7355           options that were used to generate code (-fpie, -fPIE, or model
7356           suboptions) when you specify this option.
7357
7358       -rdynamic
7359           Pass the flag -export-dynamic to the ELF linker, on targets that
7360           support it. This instructs the linker to add all symbols, not only
7361           used ones, to the dynamic symbol table. This option is needed for
7362           some uses of "dlopen" or to allow obtaining backtraces from within
7363           a program.
7364
7365       -s  Remove all symbol table and relocation information from the
7366           executable.
7367
7368       -static
7369           On systems that support dynamic linking, this prevents linking with
7370           the shared libraries.  On other systems, this option has no effect.
7371
7372       -shared
7373           Produce a shared object which can then be linked with other objects
7374           to form an executable.  Not all systems support this option.  For
7375           predictable results, you must also specify the same set of options
7376           that were used to generate code (-fpic, -fPIC, or model suboptions)
7377           when you specify this option.[1]
7378
7379       -shared-libgcc
7380       -static-libgcc
7381           On systems that provide libgcc as a shared library, these options
7382           force the use of either the shared or static version respectively.
7383           If no shared version of libgcc was built when the compiler was
7384           configured, these options have no effect.
7385
7386           There are several situations in which an application should use the
7387           shared libgcc instead of the static version.  The most common of
7388           these is when the application wishes to throw and catch exceptions
7389           across different shared libraries.  In that case, each of the
7390           libraries as well as the application itself should use the shared
7391           libgcc.
7392
7393           Therefore, the G++ and GCJ drivers automatically add -shared-libgcc
7394           whenever you build a shared library or a main executable, because
7395           C++ and Java programs typically use exceptions, so this is the
7396           right thing to do.
7397
7398           If, instead, you use the GCC driver to create shared libraries, you
7399           may find that they will not always be linked with the shared
7400           libgcc.  If GCC finds, at its configuration time, that you have a
7401           non-GNU linker or a GNU linker that does not support option
7402           --eh-frame-hdr, it will link the shared version of libgcc into
7403           shared libraries by default.  Otherwise, it will take advantage of
7404           the linker and optimize away the linking with the shared version of
7405           libgcc, linking with the static version of libgcc by default.  This
7406           allows exceptions to propagate through such shared libraries,
7407           without incurring relocation costs at library load time.
7408
7409           However, if a library or main executable is supposed to throw or
7410           catch exceptions, you must link it using the G++ or GCJ driver, as
7411           appropriate for the languages used in the program, or using the
7412           option -shared-libgcc, such that it is linked with the shared
7413           libgcc.
7414
7415       -symbolic
7416           Bind references to global symbols when building a shared object.
7417           Warn about any unresolved references (unless overridden by the link
7418           editor option -Xlinker -z -Xlinker defs).  Only a few systems
7419           support this option.
7420
7421       -T script
7422           Use script as the linker script.  This option is supported by most
7423           systems using the GNU linker.  On some targets, such as bare-board
7424           targets without an operating system, the -T option may be required
7425           when linking to avoid references to undefined symbols.
7426
7427       -Xlinker option
7428           Pass option as an option to the linker.  You can use this to supply
7429           system-specific linker options which GCC does not know how to
7430           recognize.
7431
7432           If you want to pass an option that takes a separate argument, you
7433           must use -Xlinker twice, once for the option and once for the
7434           argument.  For example, to pass -assert definitions, you must write
7435           -Xlinker -assert -Xlinker definitions.  It does not work to write
7436           -Xlinker "-assert definitions", because this passes the entire
7437           string as a single argument, which is not what the linker expects.
7438
7439           When using the GNU linker, it is usually more convenient to pass
7440           arguments to linker options using the option=value syntax than as
7441           separate arguments.  For example, you can specify -Xlinker
7442           -Map=output.map rather than -Xlinker -Map -Xlinker output.map.
7443           Other linkers may not support this syntax for command-line options.
7444
7445       -Wl,option
7446           Pass option as an option to the linker.  If option contains commas,
7447           it is split into multiple options at the commas.  You can use this
7448           syntax to pass an argument to the option.  For example,
7449           -Wl,-Map,output.map passes -Map output.map to the linker.  When
7450           using the GNU linker, you can also get the same effect with
7451           -Wl,-Map=output.map.
7452
7453       -u symbol
7454           Pretend the symbol symbol is undefined, to force linking of library
7455           modules to define it.  You can use -u multiple times with different
7456           symbols to force loading of additional library modules.
7457
7458   Options for Directory Search
7459       These options specify directories to search for header files, for
7460       libraries and for parts of the compiler:
7461
7462       -Idir
7463           Add the directory dir to the head of the list of directories to be
7464           searched for header files.  This can be used to override a system
7465           header file, substituting your own version, since these directories
7466           are searched before the system header file directories.  However,
7467           you should not use this option to add directories that contain
7468           vendor-supplied system header files (use -isystem for that).  If
7469           you use more than one -I option, the directories are scanned in
7470           left-to-right order; the standard system directories come after.
7471
7472           If a standard system include directory, or a directory specified
7473           with -isystem, is also specified with -I, the -I option will be
7474           ignored.  The directory will still be searched but as a system
7475           directory at its normal position in the system include chain.  This
7476           is to ensure that GCC's procedure to fix buggy system headers and
7477           the ordering for the include_next directive are not inadvertently
7478           changed.  If you really need to change the search order for system
7479           directories, use the -nostdinc and/or -isystem options.
7480
7481       -iquotedir
7482           Add the directory dir to the head of the list of directories to be
7483           searched for header files only for the case of #include "file";
7484           they are not searched for #include <file>, otherwise just like -I.
7485
7486       -Ldir
7487           Add directory dir to the list of directories to be searched for -l.
7488
7489       -Bprefix
7490           This option specifies where to find the executables, libraries,
7491           include files, and data files of the compiler itself.
7492
7493           The compiler driver program runs one or more of the subprograms
7494           cpp, cc1, as and ld.  It tries prefix as a prefix for each program
7495           it tries to run, both with and without machine/version/.
7496
7497           For each subprogram to be run, the compiler driver first tries the
7498           -B prefix, if any.  If that name is not found, or if -B was not
7499           specified, the driver tries two standard prefixes, which are
7500           /usr/lib/gcc/ and /usr/local/lib/gcc/.  If neither of those results
7501           in a file name that is found, the unmodified program name is
7502           searched for using the directories specified in your PATH
7503           environment variable.
7504
7505           The compiler will check to see if the path provided by the -B
7506           refers to a directory, and if necessary it will add a directory
7507           separator character at the end of the path.
7508
7509           -B prefixes that effectively specify directory names also apply to
7510           libraries in the linker, because the compiler translates these
7511           options into -L options for the linker.  They also apply to
7512           includes files in the preprocessor, because the compiler translates
7513           these options into -isystem options for the preprocessor.  In this
7514           case, the compiler appends include to the prefix.
7515
7516           The run-time support file libgcc.a can also be searched for using
7517           the -B prefix, if needed.  If it is not found there, the two
7518           standard prefixes above are tried, and that is all.  The file is
7519           left out of the link if it is not found by those means.
7520
7521           Another way to specify a prefix much like the -B prefix is to use
7522           the environment variable GCC_EXEC_PREFIX.
7523
7524           As a special kludge, if the path provided by -B is [dir/]stageN/,
7525           where N is a number in the range 0 to 9, then it will be replaced
7526           by [dir/]include.  This is to help with boot-strapping the
7527           compiler.
7528
7529       -specs=file
7530           Process file after the compiler reads in the standard specs file,
7531           in order to override the defaults that the gcc driver program uses
7532           when determining what switches to pass to cc1, cc1plus, as, ld,
7533           etc.  More than one -specs=file can be specified on the command
7534           line, and they are processed in order, from left to right.
7535
7536       --sysroot=dir
7537           Use dir as the logical root directory for headers and libraries.
7538           For example, if the compiler would normally search for headers in
7539           /usr/include and libraries in /usr/lib, it will instead search
7540           dir/usr/include and dir/usr/lib.
7541
7542           If you use both this option and the -isysroot option, then the
7543           --sysroot option will apply to libraries, but the -isysroot option
7544           will apply to header files.
7545
7546           The GNU linker (beginning with version 2.16) has the necessary
7547           support for this option.  If your linker does not support this
7548           option, the header file aspect of --sysroot will still work, but
7549           the library aspect will not.
7550
7551       -I- This option has been deprecated.  Please use -iquote instead for -I
7552           directories before the -I- and remove the -I-.  Any directories you
7553           specify with -I options before the -I- option are searched only for
7554           the case of #include "file"; they are not searched for #include
7555           <file>.
7556
7557           If additional directories are specified with -I options after the
7558           -I-, these directories are searched for all #include directives.
7559           (Ordinarily all -I directories are used this way.)
7560
7561           In addition, the -I- option inhibits the use of the current
7562           directory (where the current input file came from) as the first
7563           search directory for #include "file".  There is no way to override
7564           this effect of -I-.  With -I. you can specify searching the
7565           directory which was current when the compiler was invoked.  That is
7566           not exactly the same as what the preprocessor does by default, but
7567           it is often satisfactory.
7568
7569           -I- does not inhibit the use of the standard system directories for
7570           header files.  Thus, -I- and -nostdinc are independent.
7571
7572   Specifying Target Machine and Compiler Version
7573       The usual way to run GCC is to run the executable called gcc, or
7574       <machine>-gcc when cross-compiling, or <machine>-gcc-<version> to run a
7575       version other than the one that was installed last.  Sometimes this is
7576       inconvenient, so GCC provides options that will switch to another
7577       cross-compiler or version.
7578
7579       -b machine
7580           The argument machine specifies the target machine for compilation.
7581
7582           The value to use for machine is the same as was specified as the
7583           machine type when configuring GCC as a cross-compiler.  For
7584           example, if a cross-compiler was configured with configure arm-elf,
7585           meaning to compile for an arm processor with elf binaries, then you
7586           would specify -b arm-elf to run that cross compiler.  Because there
7587           are other options beginning with -b, the configuration must contain
7588           a hyphen, or -b alone should be one argument followed by the
7589           configuration in the next argument.
7590
7591       -V version
7592           The argument version specifies which version of GCC to run.  This
7593           is useful when multiple versions are installed.  For example,
7594           version might be 4.0, meaning to run GCC version 4.0.
7595
7596       The -V and -b options work by running the <machine>-gcc-<version>
7597       executable, so there's no real reason to use them if you can just run
7598       that directly.
7599
7600   Hardware Models and Configurations
7601       Earlier we discussed the standard option -b which chooses among
7602       different installed compilers for completely different target machines,
7603       such as VAX vs. 68000 vs. 80386.
7604
7605       In addition, each of these target machine types can have its own
7606       special options, starting with -m, to choose among various hardware
7607       models or configurations---for example, 68010 vs 68020, floating
7608       coprocessor or none.  A single installed version of the compiler can
7609       compile for any model or configuration, according to the options
7610       specified.
7611
7612       Some configurations of the compiler also support additional special
7613       options, usually for compatibility with other compilers on the same
7614       platform.
7615
7616   ARC Options
7617       These options are defined for ARC implementations:
7618
7619       -EL Compile code for little endian mode.  This is the default.
7620
7621       -EB Compile code for big endian mode.
7622
7623       -mmangle-cpu
7624           Prepend the name of the cpu to all public symbol names.  In
7625           multiple-processor systems, there are many ARC variants with
7626           different instruction and register set characteristics.  This flag
7627           prevents code compiled for one cpu to be linked with code compiled
7628           for another.  No facility exists for handling variants that are
7629           "almost identical".  This is an all or nothing option.
7630
7631       -mcpu=cpu
7632           Compile code for ARC variant cpu.  Which variants are supported
7633           depend on the configuration.  All variants support -mcpu=base, this
7634           is the default.
7635
7636       -mtext=text-section
7637       -mdata=data-section
7638       -mrodata=readonly-data-section
7639           Put functions, data, and readonly data in text-section, data-
7640           section, and readonly-data-section respectively by default.  This
7641           can be overridden with the "section" attribute.
7642
7643       -mfix-cortex-m3-ldrd
7644           Some Cortex-M3 cores can cause data corruption when "ldrd"
7645           instructions with overlapping destination and base registers are
7646           used.  This option avoids generating these instructions.  This
7647           option is enabled by default when -mcpu=cortex-m3 is specified.
7648
7649   ARM Options
7650       These -m options are defined for Advanced RISC Machines (ARM)
7651       architectures:
7652
7653       -mabi=name
7654           Generate code for the specified ABI.  Permissible values are: apcs-
7655           gnu, atpcs, aapcs, aapcs-linux and iwmmxt.
7656
7657       -mapcs-frame
7658           Generate a stack frame that is compliant with the ARM Procedure
7659           Call Standard for all functions, even if this is not strictly
7660           necessary for correct execution of the code.  Specifying
7661           -fomit-frame-pointer with this option will cause the stack frames
7662           not to be generated for leaf functions.  The default is
7663           -mno-apcs-frame.
7664
7665       -mapcs
7666           This is a synonym for -mapcs-frame.
7667
7668       -mthumb-interwork
7669           Generate code which supports calling between the ARM and Thumb
7670           instruction sets.  Without this option the two instruction sets
7671           cannot be reliably used inside one program.  The default is
7672           -mno-thumb-interwork, since slightly larger code is generated when
7673           -mthumb-interwork is specified.
7674
7675       -mno-sched-prolog
7676           Prevent the reordering of instructions in the function prolog, or
7677           the merging of those instruction with the instructions in the
7678           function's body.  This means that all functions will start with a
7679           recognizable set of instructions (or in fact one of a choice from a
7680           small set of different function prologues), and this information
7681           can be used to locate the start if functions inside an executable
7682           piece of code.  The default is -msched-prolog.
7683
7684       -mfloat-abi=name
7685           Specifies which floating-point ABI to use.  Permissible values are:
7686           soft, softfp and hard.
7687
7688           Specifying soft causes GCC to generate output containing library
7689           calls for floating-point operations.  softfp allows the generation
7690           of code using hardware floating-point instructions, but still uses
7691           the soft-float calling conventions.  hard allows generation of
7692           floating-point instructions and uses FPU-specific calling
7693           conventions.
7694
7695           Using -mfloat-abi=hard with VFP coprocessors is not supported.  Use
7696           -mfloat-abi=softfp with the appropriate -mfpu option to allow the
7697           compiler to generate code that makes use of the hardware floating-
7698           point capabilities for these CPUs.
7699
7700           The default depends on the specific target configuration.  Note
7701           that the hard-float and soft-float ABIs are not link-compatible;
7702           you must compile your entire program with the same ABI, and link
7703           with a compatible set of libraries.
7704
7705       -mhard-float
7706           Equivalent to -mfloat-abi=hard.
7707
7708       -msoft-float
7709           Equivalent to -mfloat-abi=soft.
7710
7711       -mlittle-endian
7712           Generate code for a processor running in little-endian mode.  This
7713           is the default for all standard configurations.
7714
7715       -mbig-endian
7716           Generate code for a processor running in big-endian mode; the
7717           default is to compile code for a little-endian processor.
7718
7719       -mwords-little-endian
7720           This option only applies when generating code for big-endian
7721           processors.  Generate code for a little-endian word order but a
7722           big-endian byte order.  That is, a byte order of the form 32107654.
7723           Note: this option should only be used if you require compatibility
7724           with code for big-endian ARM processors generated by versions of
7725           the compiler prior to 2.8.
7726
7727       -mcpu=name
7728           This specifies the name of the target ARM processor.  GCC uses this
7729           name to determine what kind of instructions it can emit when
7730           generating assembly code.  Permissible names are: arm2, arm250,
7731           arm3, arm6, arm60, arm600, arm610, arm620, arm7, arm7m, arm7d,
7732           arm7dm, arm7di, arm7dmi, arm70, arm700, arm700i, arm710, arm710c,
7733           arm7100, arm720, arm7500, arm7500fe, arm7tdmi, arm7tdmi-s, arm710t,
7734           arm720t, arm740t, strongarm, strongarm110, strongarm1100,
7735           strongarm1110, arm8, arm810, arm9, arm9e, arm920, arm920t, arm922t,
7736           arm946e-s, arm966e-s, arm968e-s, arm926ej-s, arm940t, arm9tdmi,
7737           arm10tdmi, arm1020t, arm1026ej-s, arm10e, arm1020e, arm1022e,
7738           arm1136j-s, arm1136jf-s, mpcore, mpcorenovfp, arm1156t2-s,
7739           arm1176jz-s, arm1176jzf-s, cortex-a8, cortex-a9, cortex-r4,
7740           cortex-r4f, cortex-m3, cortex-m1, xscale, iwmmxt, iwmmxt2, ep9312.
7741
7742       -mtune=name
7743           This option is very similar to the -mcpu= option, except that
7744           instead of specifying the actual target processor type, and hence
7745           restricting which instructions can be used, it specifies that GCC
7746           should tune the performance of the code as if the target were of
7747           the type specified in this option, but still choosing the
7748           instructions that it will generate based on the cpu specified by a
7749           -mcpu= option.  For some ARM implementations better performance can
7750           be obtained by using this option.
7751
7752       -march=name
7753           This specifies the name of the target ARM architecture.  GCC uses
7754           this name to determine what kind of instructions it can emit when
7755           generating assembly code.  This option can be used in conjunction
7756           with or instead of the -mcpu= option.  Permissible names are:
7757           armv2, armv2a, armv3, armv3m, armv4, armv4t, armv5, armv5t, armv5e,
7758           armv5te, armv6, armv6j, armv6t2, armv6z, armv6zk, armv6-m, armv7,
7759           armv7-a, armv7-r, armv7-m, iwmmxt, iwmmxt2, ep9312.
7760
7761       -mfpu=name
7762       -mfpe=number
7763       -mfp=number
7764           This specifies what floating point hardware (or hardware emulation)
7765           is available on the target.  Permissible names are: fpa, fpe2,
7766           fpe3, maverick, vfp, vfpv3, vfpv3-d16 and neon.  -mfp and -mfpe are
7767           synonyms for -mfpu=fpenumber, for compatibility with older versions
7768           of GCC.
7769
7770           If -msoft-float is specified this specifies the format of floating
7771           point values.
7772
7773       -mstructure-size-boundary=n
7774           The size of all structures and unions will be rounded up to a
7775           multiple of the number of bits set by this option.  Permissible
7776           values are 8, 32 and 64.  The default value varies for different
7777           toolchains.  For the COFF targeted toolchain the default value is
7778           8.  A value of 64 is only allowed if the underlying ABI supports
7779           it.
7780
7781           Specifying the larger number can produce faster, more efficient
7782           code, but can also increase the size of the program.  Different
7783           values are potentially incompatible.  Code compiled with one value
7784           cannot necessarily expect to work with code or libraries compiled
7785           with another value, if they exchange information using structures
7786           or unions.
7787
7788       -mabort-on-noreturn
7789           Generate a call to the function "abort" at the end of a "noreturn"
7790           function.  It will be executed if the function tries to return.
7791
7792       -mlong-calls
7793       -mno-long-calls
7794           Tells the compiler to perform function calls by first loading the
7795           address of the function into a register and then performing a
7796           subroutine call on this register.  This switch is needed if the
7797           target function will lie outside of the 64 megabyte addressing
7798           range of the offset based version of subroutine call instruction.
7799
7800           Even if this switch is enabled, not all function calls will be
7801           turned into long calls.  The heuristic is that static functions,
7802           functions which have the short-call attribute, functions that are
7803           inside the scope of a #pragma no_long_calls directive and functions
7804           whose definitions have already been compiled within the current
7805           compilation unit, will not be turned into long calls.  The
7806           exception to this rule is that weak function definitions, functions
7807           with the long-call attribute or the section attribute, and
7808           functions that are within the scope of a #pragma long_calls
7809           directive, will always be turned into long calls.
7810
7811           This feature is not enabled by default.  Specifying -mno-long-calls
7812           will restore the default behavior, as will placing the function
7813           calls within the scope of a #pragma long_calls_off directive.  Note
7814           these switches have no effect on how the compiler generates code to
7815           handle function calls via function pointers.
7816
7817       -msingle-pic-base
7818           Treat the register used for PIC addressing as read-only, rather
7819           than loading it in the prologue for each function.  The run-time
7820           system is responsible for initializing this register with an
7821           appropriate value before execution begins.
7822
7823       -mpic-register=reg
7824           Specify the register to be used for PIC addressing.  The default is
7825           R10 unless stack-checking is enabled, when R9 is used.
7826
7827       -mcirrus-fix-invalid-insns
7828           Insert NOPs into the instruction stream to in order to work around
7829           problems with invalid Maverick instruction combinations.  This
7830           option is only valid if the -mcpu=ep9312 option has been used to
7831           enable generation of instructions for the Cirrus Maverick floating
7832           point co-processor.  This option is not enabled by default, since
7833           the problem is only present in older Maverick implementations.  The
7834           default can be re-enabled by use of the
7835           -mno-cirrus-fix-invalid-insns switch.
7836
7837       -mpoke-function-name
7838           Write the name of each function into the text section, directly
7839           preceding the function prologue.  The generated code is similar to
7840           this:
7841
7842                        t0
7843                            .ascii "arm_poke_function_name", 0
7844                            .align
7845                        t1
7846                            .word 0xff000000 + (t1 - t0)
7847                        arm_poke_function_name
7848                            mov     ip, sp
7849                            stmfd   sp!, {fp, ip, lr, pc}
7850                            sub     fp, ip, #4
7851
7852           When performing a stack backtrace, code can inspect the value of
7853           "pc" stored at "fp + 0".  If the trace function then looks at
7854           location "pc - 12" and the top 8 bits are set, then we know that
7855           there is a function name embedded immediately preceding this
7856           location and has length "((pc[-3]) & 0xff000000)".
7857
7858       -mthumb
7859           Generate code for the Thumb instruction set.  The default is to use
7860           the 32-bit ARM instruction set.  This option automatically enables
7861           either 16-bit Thumb-1 or mixed 16/32-bit Thumb-2 instructions based
7862           on the -mcpu=name and -march=name options.
7863
7864       -mtpcs-frame
7865           Generate a stack frame that is compliant with the Thumb Procedure
7866           Call Standard for all non-leaf functions.  (A leaf function is one
7867           that does not call any other functions.)  The default is
7868           -mno-tpcs-frame.
7869
7870       -mtpcs-leaf-frame
7871           Generate a stack frame that is compliant with the Thumb Procedure
7872           Call Standard for all leaf functions.  (A leaf function is one that
7873           does not call any other functions.)  The default is
7874           -mno-apcs-leaf-frame.
7875
7876       -mcallee-super-interworking
7877           Gives all externally visible functions in the file being compiled
7878           an ARM instruction set header which switches to Thumb mode before
7879           executing the rest of the function.  This allows these functions to
7880           be called from non-interworking code.
7881
7882       -mcaller-super-interworking
7883           Allows calls via function pointers (including virtual functions) to
7884           execute correctly regardless of whether the target code has been
7885           compiled for interworking or not.  There is a small overhead in the
7886           cost of executing a function pointer if this option is enabled.
7887
7888       -mtp=name
7889           Specify the access model for the thread local storage pointer.  The
7890           valid models are soft, which generates calls to "__aeabi_read_tp",
7891           cp15, which fetches the thread pointer from "cp15" directly
7892           (supported in the arm6k architecture), and auto, which uses the
7893           best available method for the selected processor.  The default
7894           setting is auto.
7895
7896       -mword-relocations
7897           Only generate absolute relocations on word sized values (i.e.
7898           R_ARM_ABS32).  This is enabled by default on targets (uClinux,
7899           SymbianOS) where the runtime loader imposes this restriction, and
7900           when -fpic or -fPIC is specified.
7901
7902   AVR Options
7903       These options are defined for AVR implementations:
7904
7905       -mmcu=mcu
7906           Specify ATMEL AVR instruction set or MCU type.
7907
7908           Instruction set avr1 is for the minimal AVR core, not supported by
7909           the C compiler, only for assembler programs (MCU types: at90s1200,
7910           attiny10, attiny11, attiny12, attiny15, attiny28).
7911
7912           Instruction set avr2 (default) is for the classic AVR core with up
7913           to 8K program memory space (MCU types: at90s2313, at90s2323,
7914           attiny22, at90s2333, at90s2343, at90s4414, at90s4433, at90s4434,
7915           at90s8515, at90c8534, at90s8535).
7916
7917           Instruction set avr3 is for the classic AVR core with up to 128K
7918           program memory space (MCU types: atmega103, atmega603, at43usb320,
7919           at76c711).
7920
7921           Instruction set avr4 is for the enhanced AVR core with up to 8K
7922           program memory space (MCU types: atmega8, atmega83, atmega85).
7923
7924           Instruction set avr5 is for the enhanced AVR core with up to 128K
7925           program memory space (MCU types: atmega16, atmega161, atmega163,
7926           atmega32, atmega323, atmega64, atmega128, at43usb355, at94k).
7927
7928       -msize
7929           Output instruction sizes to the asm file.
7930
7931       -mno-interrupts
7932           Generated code is not compatible with hardware interrupts.  Code
7933           size will be smaller.
7934
7935       -mcall-prologues
7936           Functions prologues/epilogues expanded as call to appropriate
7937           subroutines.  Code size will be smaller.
7938
7939       -mno-tablejump
7940           Do not generate tablejump insns which sometimes increase code size.
7941           The option is now deprecated in favor of the equivalent
7942           -fno-jump-tables
7943
7944       -mtiny-stack
7945           Change only the low 8 bits of the stack pointer.
7946
7947       -mint8
7948           Assume int to be 8 bit integer.  This affects the sizes of all
7949           types: A char will be 1 byte, an int will be 1 byte, an long will
7950           be 2 bytes and long long will be 4 bytes.  Please note that this
7951           option does not comply to the C standards, but it will provide you
7952           with smaller code size.
7953
7954   Blackfin Options
7955       -mcpu=cpu[-sirevision]
7956           Specifies the name of the target Blackfin processor.  Currently,
7957           cpu can be one of bf512, bf514, bf516, bf518, bf522, bf523, bf524,
7958           bf525, bf526, bf527, bf531, bf532, bf533, bf534, bf536, bf537,
7959           bf538, bf539, bf542, bf544, bf547, bf548, bf549, bf561.  The
7960           optional sirevision specifies the silicon revision of the target
7961           Blackfin processor.  Any workarounds available for the targeted
7962           silicon revision will be enabled.  If sirevision is none, no
7963           workarounds are enabled.  If sirevision is any, all workarounds for
7964           the targeted processor will be enabled.  The "__SILICON_REVISION__"
7965           macro is defined to two hexadecimal digits representing the major
7966           and minor numbers in the silicon revision.  If sirevision is none,
7967           the "__SILICON_REVISION__" is not defined.  If sirevision is any,
7968           the "__SILICON_REVISION__" is defined to be 0xffff.  If this
7969           optional sirevision is not used, GCC assumes the latest known
7970           silicon revision of the targeted Blackfin processor.
7971
7972           Support for bf561 is incomplete.  For bf561, Only the processor
7973           macro is defined.  Without this option, bf532 is used as the
7974           processor by default.  The corresponding predefined processor
7975           macros for cpu is to be defined.  And for bfin-elf toolchain, this
7976           causes the hardware BSP provided by libgloss to be linked in if
7977           -msim is not given.
7978
7979       -msim
7980           Specifies that the program will be run on the simulator.  This
7981           causes the simulator BSP provided by libgloss to be linked in.
7982           This option has effect only for bfin-elf toolchain.  Certain other
7983           options, such as -mid-shared-library and -mfdpic, imply -msim.
7984
7985       -momit-leaf-frame-pointer
7986           Don't keep the frame pointer in a register for leaf functions.
7987           This avoids the instructions to save, set up and restore frame
7988           pointers and makes an extra register available in leaf functions.
7989           The option -fomit-frame-pointer removes the frame pointer for all
7990           functions which might make debugging harder.
7991
7992       -mspecld-anomaly
7993           When enabled, the compiler will ensure that the generated code does
7994           not contain speculative loads after jump instructions. If this
7995           option is used, "__WORKAROUND_SPECULATIVE_LOADS" is defined.
7996
7997       -mno-specld-anomaly
7998           Don't generate extra code to prevent speculative loads from
7999           occurring.
8000
8001       -mcsync-anomaly
8002           When enabled, the compiler will ensure that the generated code does
8003           not contain CSYNC or SSYNC instructions too soon after conditional
8004           branches.  If this option is used, "__WORKAROUND_SPECULATIVE_SYNCS"
8005           is defined.
8006
8007       -mno-csync-anomaly
8008           Don't generate extra code to prevent CSYNC or SSYNC instructions
8009           from occurring too soon after a conditional branch.
8010
8011       -mlow-64k
8012           When enabled, the compiler is free to take advantage of the
8013           knowledge that the entire program fits into the low 64k of memory.
8014
8015       -mno-low-64k
8016           Assume that the program is arbitrarily large.  This is the default.
8017
8018       -mstack-check-l1
8019           Do stack checking using information placed into L1 scratchpad
8020           memory by the uClinux kernel.
8021
8022       -mid-shared-library
8023           Generate code that supports shared libraries via the library ID
8024           method.  This allows for execute in place and shared libraries in
8025           an environment without virtual memory management.  This option
8026           implies -fPIC.  With a bfin-elf target, this option implies -msim.
8027
8028       -mno-id-shared-library
8029           Generate code that doesn't assume ID based shared libraries are
8030           being used.  This is the default.
8031
8032       -mleaf-id-shared-library
8033           Generate code that supports shared libraries via the library ID
8034           method, but assumes that this library or executable won't link
8035           against any other ID shared libraries.  That allows the compiler to
8036           use faster code for jumps and calls.
8037
8038       -mno-leaf-id-shared-library
8039           Do not assume that the code being compiled won't link against any
8040           ID shared libraries.  Slower code will be generated for jump and
8041           call insns.
8042
8043       -mshared-library-id=n
8044           Specified the identification number of the ID based shared library
8045           being compiled.  Specifying a value of 0 will generate more compact
8046           code, specifying other values will force the allocation of that
8047           number to the current library but is no more space or time
8048           efficient than omitting this option.
8049
8050       -msep-data
8051           Generate code that allows the data segment to be located in a
8052           different area of memory from the text segment.  This allows for
8053           execute in place in an environment without virtual memory
8054           management by eliminating relocations against the text section.
8055
8056       -mno-sep-data
8057           Generate code that assumes that the data segment follows the text
8058           segment.  This is the default.
8059
8060       -mlong-calls
8061       -mno-long-calls
8062           Tells the compiler to perform function calls by first loading the
8063           address of the function into a register and then performing a
8064           subroutine call on this register.  This switch is needed if the
8065           target function will lie outside of the 24 bit addressing range of
8066           the offset based version of subroutine call instruction.
8067
8068           This feature is not enabled by default.  Specifying -mno-long-calls
8069           will restore the default behavior.  Note these switches have no
8070           effect on how the compiler generates code to handle function calls
8071           via function pointers.
8072
8073       -mfast-fp
8074           Link with the fast floating-point library. This library relaxes
8075           some of the IEEE floating-point standard's rules for checking
8076           inputs against Not-a-Number (NAN), in the interest of performance.
8077
8078       -minline-plt
8079           Enable inlining of PLT entries in function calls to functions that
8080           are not known to bind locally.  It has no effect without -mfdpic.
8081
8082       -mmulticore
8083           Build standalone application for multicore Blackfin processor.
8084           Proper start files and link scripts will be used to support
8085           multicore.  This option defines "__BFIN_MULTICORE". It can only be
8086           used with -mcpu=bf561[-sirevision]. It can be used with -mcorea or
8087           -mcoreb. If it's used without -mcorea or -mcoreb, single
8088           application/dual core programming model is used. In this model, the
8089           main function of Core B should be named as coreb_main. If it's used
8090           with -mcorea or -mcoreb, one application per core programming model
8091           is used.  If this option is not used, single core application
8092           programming model is used.
8093
8094       -mcorea
8095           Build standalone application for Core A of BF561 when using one
8096           application per core programming model. Proper start files and link
8097           scripts will be used to support Core A. This option defines
8098           "__BFIN_COREA". It must be used with -mmulticore.
8099
8100       -mcoreb
8101           Build standalone application for Core B of BF561 when using one
8102           application per core programming model. Proper start files and link
8103           scripts will be used to support Core B. This option defines
8104           "__BFIN_COREB". When this option is used, coreb_main should be used
8105           instead of main. It must be used with -mmulticore.
8106
8107       -msdram
8108           Build standalone application for SDRAM. Proper start files and link
8109           scripts will be used to put the application into SDRAM.  Loader
8110           should initialize SDRAM before loading the application into SDRAM.
8111           This option defines "__BFIN_SDRAM".
8112
8113       -micplb
8114           Assume that ICPLBs are enabled at runtime.  This has an effect on
8115           certain anomaly workarounds.  For Linux targets, the default is to
8116           assume ICPLBs are enabled; for standalone applications the default
8117           is off.
8118
8119   CRIS Options
8120       These options are defined specifically for the CRIS ports.
8121
8122       -march=architecture-type
8123       -mcpu=architecture-type
8124           Generate code for the specified architecture.  The choices for
8125           architecture-type are v3, v8 and v10 for respectively ETRAX 4,
8126           ETRAX 100, and ETRAX 100 LX.  Default is v0 except for cris-axis-
8127           linux-gnu, where the default is v10.
8128
8129       -mtune=architecture-type
8130           Tune to architecture-type everything applicable about the generated
8131           code, except for the ABI and the set of available instructions.
8132           The choices for architecture-type are the same as for
8133           -march=architecture-type.
8134
8135       -mmax-stack-frame=n
8136           Warn when the stack frame of a function exceeds n bytes.
8137
8138       -metrax4
8139       -metrax100
8140           The options -metrax4 and -metrax100 are synonyms for -march=v3 and
8141           -march=v8 respectively.
8142
8143       -mmul-bug-workaround
8144       -mno-mul-bug-workaround
8145           Work around a bug in the "muls" and "mulu" instructions for CPU
8146           models where it applies.  This option is active by default.
8147
8148       -mpdebug
8149           Enable CRIS-specific verbose debug-related information in the
8150           assembly code.  This option also has the effect to turn off the
8151           #NO_APP formatted-code indicator to the assembler at the beginning
8152           of the assembly file.
8153
8154       -mcc-init
8155           Do not use condition-code results from previous instruction; always
8156           emit compare and test instructions before use of condition codes.
8157
8158       -mno-side-effects
8159           Do not emit instructions with side-effects in addressing modes
8160           other than post-increment.
8161
8162       -mstack-align
8163       -mno-stack-align
8164       -mdata-align
8165       -mno-data-align
8166       -mconst-align
8167       -mno-const-align
8168           These options (no-options) arranges (eliminate arrangements) for
8169           the stack-frame, individual data and constants to be aligned for
8170           the maximum single data access size for the chosen CPU model.  The
8171           default is to arrange for 32-bit alignment.  ABI details such as
8172           structure layout are not affected by these options.
8173
8174       -m32-bit
8175       -m16-bit
8176       -m8-bit
8177           Similar to the stack- data- and const-align options above, these
8178           options arrange for stack-frame, writable data and constants to all
8179           be 32-bit, 16-bit or 8-bit aligned.  The default is 32-bit
8180           alignment.
8181
8182       -mno-prologue-epilogue
8183       -mprologue-epilogue
8184           With -mno-prologue-epilogue, the normal function prologue and
8185           epilogue that sets up the stack-frame are omitted and no return
8186           instructions or return sequences are generated in the code.  Use
8187           this option only together with visual inspection of the compiled
8188           code: no warnings or errors are generated when call-saved registers
8189           must be saved, or storage for local variable needs to be allocated.
8190
8191       -mno-gotplt
8192       -mgotplt
8193           With -fpic and -fPIC, don't generate (do generate) instruction
8194           sequences that load addresses for functions from the PLT part of
8195           the GOT rather than (traditional on other architectures) calls to
8196           the PLT.  The default is -mgotplt.
8197
8198       -melf
8199           Legacy no-op option only recognized with the cris-axis-elf and
8200           cris-axis-linux-gnu targets.
8201
8202       -mlinux
8203           Legacy no-op option only recognized with the cris-axis-linux-gnu
8204           target.
8205
8206       -sim
8207           This option, recognized for the cris-axis-elf arranges to link with
8208           input-output functions from a simulator library.  Code, initialized
8209           data and zero-initialized data are allocated consecutively.
8210
8211       -sim2
8212           Like -sim, but pass linker options to locate initialized data at
8213           0x40000000 and zero-initialized data at 0x80000000.
8214
8215   CRX Options
8216       These options are defined specifically for the CRX ports.
8217
8218       -mmac
8219           Enable the use of multiply-accumulate instructions. Disabled by
8220           default.
8221
8222       -mpush-args
8223           Push instructions will be used to pass outgoing arguments when
8224           functions are called. Enabled by default.
8225
8226   Darwin Options
8227       These options are defined for all architectures running the Darwin
8228       operating system.
8229
8230       FSF GCC on Darwin does not create "fat" object files; it will create an
8231       object file for the single architecture that it was built to target.
8232       Apple's GCC on Darwin does create "fat" files if multiple -arch options
8233       are used; it does so by running the compiler or linker multiple times
8234       and joining the results together with lipo.
8235
8236       The subtype of the file created (like ppc7400 or ppc970 or i686) is
8237       determined by the flags that specify the ISA that GCC is targetting,
8238       like -mcpu or -march.  The -force_cpusubtype_ALL option can be used to
8239       override this.
8240
8241       The Darwin tools vary in their behavior when presented with an ISA
8242       mismatch.  The assembler, as, will only permit instructions to be used
8243       that are valid for the subtype of the file it is generating, so you
8244       cannot put 64-bit instructions in an ppc750 object file.  The linker
8245       for shared libraries, /usr/bin/libtool, will fail and print an error if
8246       asked to create a shared library with a less restrictive subtype than
8247       its input files (for instance, trying to put a ppc970 object file in a
8248       ppc7400 library).  The linker for executables, ld, will quietly give
8249       the executable the most restrictive subtype of any of its input files.
8250
8251       -Fdir
8252           Add the framework directory dir to the head of the list of
8253           directories to be searched for header files.  These directories are
8254           interleaved with those specified by -I options and are scanned in a
8255           left-to-right order.
8256
8257           A framework directory is a directory with frameworks in it.  A
8258           framework is a directory with a "Headers" and/or "PrivateHeaders"
8259           directory contained directly in it that ends in ".framework".  The
8260           name of a framework is the name of this directory excluding the
8261           ".framework".  Headers associated with the framework are found in
8262           one of those two directories, with "Headers" being searched first.
8263           A subframework is a framework directory that is in a framework's
8264           "Frameworks" directory.  Includes of subframework headers can only
8265           appear in a header of a framework that contains the subframework,
8266           or in a sibling subframework header.  Two subframeworks are
8267           siblings if they occur in the same framework.  A subframework
8268           should not have the same name as a framework, a warning will be
8269           issued if this is violated.  Currently a subframework cannot have
8270           subframeworks, in the future, the mechanism may be extended to
8271           support this.  The standard frameworks can be found in
8272           "/System/Library/Frameworks" and "/Library/Frameworks".  An example
8273           include looks like "#include <Framework/header.h>", where Framework
8274           denotes the name of the framework and header.h is found in the
8275           "PrivateHeaders" or "Headers" directory.
8276
8277       -iframeworkdir
8278           Like -F except the directory is a treated as a system directory.
8279           The main difference between this -iframework and -F is that with
8280           -iframework the compiler does not warn about constructs contained
8281           within header files found via dir.  This option is valid only for
8282           the C family of languages.
8283
8284       -gused
8285           Emit debugging information for symbols that are used.  For STABS
8286           debugging format, this enables -feliminate-unused-debug-symbols.
8287           This is by default ON.
8288
8289       -gfull
8290           Emit debugging information for all symbols and types.
8291
8292       -mmacosx-version-min=version
8293           The earliest version of MacOS X that this executable will run on is
8294           version.  Typical values of version include 10.1, 10.2, and 10.3.9.
8295
8296           If the compiler was built to use the system's headers by default,
8297           then the default for this option is the system version on which the
8298           compiler is running, otherwise the default is to make choices which
8299           are compatible with as many systems and code bases as possible.
8300
8301       -mkernel
8302           Enable kernel development mode.  The -mkernel option sets -static,
8303           -fno-common, -fno-cxa-atexit, -fno-exceptions,
8304           -fno-non-call-exceptions, -fapple-kext, -fno-weak and -fno-rtti
8305           where applicable.  This mode also sets -mno-altivec, -msoft-float,
8306           -fno-builtin and -mlong-branch for PowerPC targets.
8307
8308       -mone-byte-bool
8309           Override the defaults for bool so that sizeof(bool)==1.  By default
8310           sizeof(bool) is 4 when compiling for Darwin/PowerPC and 1 when
8311           compiling for Darwin/x86, so this option has no effect on x86.
8312
8313           Warning: The -mone-byte-bool switch causes GCC to generate code
8314           that is not binary compatible with code generated without that
8315           switch.  Using this switch may require recompiling all other
8316           modules in a program, including system libraries.  Use this switch
8317           to conform to a non-default data model.
8318
8319       -mfix-and-continue
8320       -ffix-and-continue
8321       -findirect-data
8322           Generate code suitable for fast turn around development.  Needed to
8323           enable gdb to dynamically load ".o" files into already running
8324           programs.  -findirect-data and -ffix-and-continue are provided for
8325           backwards compatibility.
8326
8327       -all_load
8328           Loads all members of static archive libraries.  See man ld(1) for
8329           more information.
8330
8331       -arch_errors_fatal
8332           Cause the errors having to do with files that have the wrong
8333           architecture to be fatal.
8334
8335       -bind_at_load
8336           Causes the output file to be marked such that the dynamic linker
8337           will bind all undefined references when the file is loaded or
8338           launched.
8339
8340       -bundle
8341           Produce a Mach-o bundle format file.  See man ld(1) for more
8342           information.
8343
8344       -bundle_loader executable
8345           This option specifies the executable that will be loading the build
8346           output file being linked.  See man ld(1) for more information.
8347
8348       -dynamiclib
8349           When passed this option, GCC will produce a dynamic library instead
8350           of an executable when linking, using the Darwin libtool command.
8351
8352       -force_cpusubtype_ALL
8353           This causes GCC's output file to have the ALL subtype, instead of
8354           one controlled by the -mcpu or -march option.
8355
8356       -allowable_client  client_name
8357       -client_name
8358       -compatibility_version
8359       -current_version
8360       -dead_strip
8361       -dependency-file
8362       -dylib_file
8363       -dylinker_install_name
8364       -dynamic
8365       -exported_symbols_list
8366       -filelist
8367       -flat_namespace
8368       -force_flat_namespace
8369       -headerpad_max_install_names
8370       -image_base
8371       -init
8372       -install_name
8373       -keep_private_externs
8374       -multi_module
8375       -multiply_defined
8376       -multiply_defined_unused
8377       -noall_load
8378       -no_dead_strip_inits_and_terms
8379       -nofixprebinding
8380       -nomultidefs
8381       -noprebind
8382       -noseglinkedit
8383       -pagezero_size
8384       -prebind
8385       -prebind_all_twolevel_modules
8386       -private_bundle
8387       -read_only_relocs
8388       -sectalign
8389       -sectobjectsymbols
8390       -whyload
8391       -seg1addr
8392       -sectcreate
8393       -sectobjectsymbols
8394       -sectorder
8395       -segaddr
8396       -segs_read_only_addr
8397       -segs_read_write_addr
8398       -seg_addr_table
8399       -seg_addr_table_filename
8400       -seglinkedit
8401       -segprot
8402       -segs_read_only_addr
8403       -segs_read_write_addr
8404       -single_module
8405       -static
8406       -sub_library
8407       -sub_umbrella
8408       -twolevel_namespace
8409       -umbrella
8410       -undefined
8411       -unexported_symbols_list
8412       -weak_reference_mismatches
8413       -whatsloaded
8414           These options are passed to the Darwin linker.  The Darwin linker
8415           man page describes them in detail.
8416
8417   DEC Alpha Options
8418       These -m options are defined for the DEC Alpha implementations:
8419
8420       -mno-soft-float
8421       -msoft-float
8422           Use (do not use) the hardware floating-point instructions for
8423           floating-point operations.  When -msoft-float is specified,
8424           functions in libgcc.a will be used to perform floating-point
8425           operations.  Unless they are replaced by routines that emulate the
8426           floating-point operations, or compiled in such a way as to call
8427           such emulations routines, these routines will issue floating-point
8428           operations.   If you are compiling for an Alpha without floating-
8429           point operations, you must ensure that the library is built so as
8430           not to call them.
8431
8432           Note that Alpha implementations without floating-point operations
8433           are required to have floating-point registers.
8434
8435       -mfp-reg
8436       -mno-fp-regs
8437           Generate code that uses (does not use) the floating-point register
8438           set.  -mno-fp-regs implies -msoft-float.  If the floating-point
8439           register set is not used, floating point operands are passed in
8440           integer registers as if they were integers and floating-point
8441           results are passed in $0 instead of $f0.  This is a non-standard
8442           calling sequence, so any function with a floating-point argument or
8443           return value called by code compiled with -mno-fp-regs must also be
8444           compiled with that option.
8445
8446           A typical use of this option is building a kernel that does not
8447           use, and hence need not save and restore, any floating-point
8448           registers.
8449
8450       -mieee
8451           The Alpha architecture implements floating-point hardware optimized
8452           for maximum performance.  It is mostly compliant with the IEEE
8453           floating point standard.  However, for full compliance, software
8454           assistance is required.  This option generates code fully IEEE
8455           compliant code except that the inexact-flag is not maintained (see
8456           below).  If this option is turned on, the preprocessor macro
8457           "_IEEE_FP" is defined during compilation.  The resulting code is
8458           less efficient but is able to correctly support denormalized
8459           numbers and exceptional IEEE values such as not-a-number and
8460           plus/minus infinity.  Other Alpha compilers call this option
8461           -ieee_with_no_inexact.
8462
8463       -mieee-with-inexact
8464           This is like -mieee except the generated code also maintains the
8465           IEEE inexact-flag.  Turning on this option causes the generated
8466           code to implement fully-compliant IEEE math.  In addition to
8467           "_IEEE_FP", "_IEEE_FP_EXACT" is defined as a preprocessor macro.
8468           On some Alpha implementations the resulting code may execute
8469           significantly slower than the code generated by default.  Since
8470           there is very little code that depends on the inexact-flag, you
8471           should normally not specify this option.  Other Alpha compilers
8472           call this option -ieee_with_inexact.
8473
8474       -mfp-trap-mode=trap-mode
8475           This option controls what floating-point related traps are enabled.
8476           Other Alpha compilers call this option -fptm trap-mode.  The trap
8477           mode can be set to one of four values:
8478
8479           n   This is the default (normal) setting.  The only traps that are
8480               enabled are the ones that cannot be disabled in software (e.g.,
8481               division by zero trap).
8482
8483           u   In addition to the traps enabled by n, underflow traps are
8484               enabled as well.
8485
8486           su  Like u, but the instructions are marked to be safe for software
8487               completion (see Alpha architecture manual for details).
8488
8489           sui Like su, but inexact traps are enabled as well.
8490
8491       -mfp-rounding-mode=rounding-mode
8492           Selects the IEEE rounding mode.  Other Alpha compilers call this
8493           option -fprm rounding-mode.  The rounding-mode can be one of:
8494
8495           n   Normal IEEE rounding mode.  Floating point numbers are rounded
8496               towards the nearest machine number or towards the even machine
8497               number in case of a tie.
8498
8499           m   Round towards minus infinity.
8500
8501           c   Chopped rounding mode.  Floating point numbers are rounded
8502               towards zero.
8503
8504           d   Dynamic rounding mode.  A field in the floating point control
8505               register (fpcr, see Alpha architecture reference manual)
8506               controls the rounding mode in effect.  The C library
8507               initializes this register for rounding towards plus infinity.
8508               Thus, unless your program modifies the fpcr, d corresponds to
8509               round towards plus infinity.
8510
8511       -mtrap-precision=trap-precision
8512           In the Alpha architecture, floating point traps are imprecise.
8513           This means without software assistance it is impossible to recover
8514           from a floating trap and program execution normally needs to be
8515           terminated.  GCC can generate code that can assist operating system
8516           trap handlers in determining the exact location that caused a
8517           floating point trap.  Depending on the requirements of an
8518           application, different levels of precisions can be selected:
8519
8520           p   Program precision.  This option is the default and means a trap
8521               handler can only identify which program caused a floating point
8522               exception.
8523
8524           f   Function precision.  The trap handler can determine the
8525               function that caused a floating point exception.
8526
8527           i   Instruction precision.  The trap handler can determine the
8528               exact instruction that caused a floating point exception.
8529
8530           Other Alpha compilers provide the equivalent options called
8531           -scope_safe and -resumption_safe.
8532
8533       -mieee-conformant
8534           This option marks the generated code as IEEE conformant.  You must
8535           not use this option unless you also specify -mtrap-precision=i and
8536           either -mfp-trap-mode=su or -mfp-trap-mode=sui.  Its only effect is
8537           to emit the line .eflag 48 in the function prologue of the
8538           generated assembly file.  Under DEC Unix, this has the effect that
8539           IEEE-conformant math library routines will be linked in.
8540
8541       -mbuild-constants
8542           Normally GCC examines a 32- or 64-bit integer constant to see if it
8543           can construct it from smaller constants in two or three
8544           instructions.  If it cannot, it will output the constant as a
8545           literal and generate code to load it from the data segment at
8546           runtime.
8547
8548           Use this option to require GCC to construct all integer constants
8549           using code, even if it takes more instructions (the maximum is
8550           six).
8551
8552           You would typically use this option to build a shared library
8553           dynamic loader.  Itself a shared library, it must relocate itself
8554           in memory before it can find the variables and constants in its own
8555           data segment.
8556
8557       -malpha-as
8558       -mgas
8559           Select whether to generate code to be assembled by the vendor-
8560           supplied assembler (-malpha-as) or by the GNU assembler -mgas.
8561
8562       -mbwx
8563       -mno-bwx
8564       -mcix
8565       -mno-cix
8566       -mfix
8567       -mno-fix
8568       -mmax
8569       -mno-max
8570           Indicate whether GCC should generate code to use the optional BWX,
8571           CIX, FIX and MAX instruction sets.  The default is to use the
8572           instruction sets supported by the CPU type specified via -mcpu=
8573           option or that of the CPU on which GCC was built if none was
8574           specified.
8575
8576       -mfloat-vax
8577       -mfloat-ieee
8578           Generate code that uses (does not use) VAX F and G floating point
8579           arithmetic instead of IEEE single and double precision.
8580
8581       -mexplicit-relocs
8582       -mno-explicit-relocs
8583           Older Alpha assemblers provided no way to generate symbol
8584           relocations except via assembler macros.  Use of these macros does
8585           not allow optimal instruction scheduling.  GNU binutils as of
8586           version 2.12 supports a new syntax that allows the compiler to
8587           explicitly mark which relocations should apply to which
8588           instructions.  This option is mostly useful for debugging, as GCC
8589           detects the capabilities of the assembler when it is built and sets
8590           the default accordingly.
8591
8592       -msmall-data
8593       -mlarge-data
8594           When -mexplicit-relocs is in effect, static data is accessed via
8595           gp-relative relocations.  When -msmall-data is used, objects 8
8596           bytes long or smaller are placed in a small data area (the ".sdata"
8597           and ".sbss" sections) and are accessed via 16-bit relocations off
8598           of the $gp register.  This limits the size of the small data area
8599           to 64KB, but allows the variables to be directly accessed via a
8600           single instruction.
8601
8602           The default is -mlarge-data.  With this option the data area is
8603           limited to just below 2GB.  Programs that require more than 2GB of
8604           data must use "malloc" or "mmap" to allocate the data in the heap
8605           instead of in the program's data segment.
8606
8607           When generating code for shared libraries, -fpic implies
8608           -msmall-data and -fPIC implies -mlarge-data.
8609
8610       -msmall-text
8611       -mlarge-text
8612           When -msmall-text is used, the compiler assumes that the code of
8613           the entire program (or shared library) fits in 4MB, and is thus
8614           reachable with a branch instruction.  When -msmall-data is used,
8615           the compiler can assume that all local symbols share the same $gp
8616           value, and thus reduce the number of instructions required for a
8617           function call from 4 to 1.
8618
8619           The default is -mlarge-text.
8620
8621       -mcpu=cpu_type
8622           Set the instruction set and instruction scheduling parameters for
8623           machine type cpu_type.  You can specify either the EV style name or
8624           the corresponding chip number.  GCC supports scheduling parameters
8625           for the EV4, EV5 and EV6 family of processors and will choose the
8626           default values for the instruction set from the processor you
8627           specify.  If you do not specify a processor type, GCC will default
8628           to the processor on which the compiler was built.
8629
8630           Supported values for cpu_type are
8631
8632           ev4
8633           ev45
8634           21064
8635               Schedules as an EV4 and has no instruction set extensions.
8636
8637           ev5
8638           21164
8639               Schedules as an EV5 and has no instruction set extensions.
8640
8641           ev56
8642           21164a
8643               Schedules as an EV5 and supports the BWX extension.
8644
8645           pca56
8646           21164pc
8647           21164PC
8648               Schedules as an EV5 and supports the BWX and MAX extensions.
8649
8650           ev6
8651           21264
8652               Schedules as an EV6 and supports the BWX, FIX, and MAX
8653               extensions.
8654
8655           ev67
8656           21264a
8657               Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX
8658               extensions.
8659
8660           Native Linux/GNU toolchains also support the value native, which
8661           selects the best architecture option for the host processor.
8662           -mcpu=native has no effect if GCC does not recognize the processor.
8663
8664       -mtune=cpu_type
8665           Set only the instruction scheduling parameters for machine type
8666           cpu_type.  The instruction set is not changed.
8667
8668           Native Linux/GNU toolchains also support the value native, which
8669           selects the best architecture option for the host processor.
8670           -mtune=native has no effect if GCC does not recognize the
8671           processor.
8672
8673       -mmemory-latency=time
8674           Sets the latency the scheduler should assume for typical memory
8675           references as seen by the application.  This number is highly
8676           dependent on the memory access patterns used by the application and
8677           the size of the external cache on the machine.
8678
8679           Valid options for time are
8680
8681           number
8682               A decimal number representing clock cycles.
8683
8684           L1
8685           L2
8686           L3
8687           main
8688               The compiler contains estimates of the number of clock cycles
8689               for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches
8690               (also called Dcache, Scache, and Bcache), as well as to main
8691               memory.  Note that L3 is only valid for EV5.
8692
8693   DEC Alpha/VMS Options
8694       These -m options are defined for the DEC Alpha/VMS implementations:
8695
8696       -mvms-return-codes
8697           Return VMS condition codes from main.  The default is to return
8698           POSIX style condition (e.g. error) codes.
8699
8700   FR30 Options
8701       These options are defined specifically for the FR30 port.
8702
8703       -msmall-model
8704           Use the small address space model.  This can produce smaller code,
8705           but it does assume that all symbolic values and addresses will fit
8706           into a 20-bit range.
8707
8708       -mno-lsim
8709           Assume that run-time support has been provided and so there is no
8710           need to include the simulator library (libsim.a) on the linker
8711           command line.
8712
8713   FRV Options
8714       -mgpr-32
8715           Only use the first 32 general purpose registers.
8716
8717       -mgpr-64
8718           Use all 64 general purpose registers.
8719
8720       -mfpr-32
8721           Use only the first 32 floating point registers.
8722
8723       -mfpr-64
8724           Use all 64 floating point registers
8725
8726       -mhard-float
8727           Use hardware instructions for floating point operations.
8728
8729       -msoft-float
8730           Use library routines for floating point operations.
8731
8732       -malloc-cc
8733           Dynamically allocate condition code registers.
8734
8735       -mfixed-cc
8736           Do not try to dynamically allocate condition code registers, only
8737           use "icc0" and "fcc0".
8738
8739       -mdword
8740           Change ABI to use double word insns.
8741
8742       -mno-dword
8743           Do not use double word instructions.
8744
8745       -mdouble
8746           Use floating point double instructions.
8747
8748       -mno-double
8749           Do not use floating point double instructions.
8750
8751       -mmedia
8752           Use media instructions.
8753
8754       -mno-media
8755           Do not use media instructions.
8756
8757       -mmuladd
8758           Use multiply and add/subtract instructions.
8759
8760       -mno-muladd
8761           Do not use multiply and add/subtract instructions.
8762
8763       -mfdpic
8764           Select the FDPIC ABI, that uses function descriptors to represent
8765           pointers to functions.  Without any PIC/PIE-related options, it
8766           implies -fPIE.  With -fpic or -fpie, it assumes GOT entries and
8767           small data are within a 12-bit range from the GOT base address;
8768           with -fPIC or -fPIE, GOT offsets are computed with 32 bits.  With a
8769           bfin-elf target, this option implies -msim.
8770
8771       -minline-plt
8772           Enable inlining of PLT entries in function calls to functions that
8773           are not known to bind locally.  It has no effect without -mfdpic.
8774           It's enabled by default if optimizing for speed and compiling for
8775           shared libraries (i.e., -fPIC or -fpic), or when an optimization
8776           option such as -O3 or above is present in the command line.
8777
8778       -mTLS
8779           Assume a large TLS segment when generating thread-local code.
8780
8781       -mtls
8782           Do not assume a large TLS segment when generating thread-local
8783           code.
8784
8785       -mgprel-ro
8786           Enable the use of "GPREL" relocations in the FDPIC ABI for data
8787           that is known to be in read-only sections.  It's enabled by
8788           default, except for -fpic or -fpie: even though it may help make
8789           the global offset table smaller, it trades 1 instruction for 4.
8790           With -fPIC or -fPIE, it trades 3 instructions for 4, one of which
8791           may be shared by multiple symbols, and it avoids the need for a GOT
8792           entry for the referenced symbol, so it's more likely to be a win.
8793           If it is not, -mno-gprel-ro can be used to disable it.
8794
8795       -multilib-library-pic
8796           Link with the (library, not FD) pic libraries.  It's implied by
8797           -mlibrary-pic, as well as by -fPIC and -fpic without -mfdpic.  You
8798           should never have to use it explicitly.
8799
8800       -mlinked-fp
8801           Follow the EABI requirement of always creating a frame pointer
8802           whenever a stack frame is allocated.  This option is enabled by
8803           default and can be disabled with -mno-linked-fp.
8804
8805       -mlong-calls
8806           Use indirect addressing to call functions outside the current
8807           compilation unit.  This allows the functions to be placed anywhere
8808           within the 32-bit address space.
8809
8810       -malign-labels
8811           Try to align labels to an 8-byte boundary by inserting nops into
8812           the previous packet.  This option only has an effect when VLIW
8813           packing is enabled.  It doesn't create new packets; it merely adds
8814           nops to existing ones.
8815
8816       -mlibrary-pic
8817           Generate position-independent EABI code.
8818
8819       -macc-4
8820           Use only the first four media accumulator registers.
8821
8822       -macc-8
8823           Use all eight media accumulator registers.
8824
8825       -mpack
8826           Pack VLIW instructions.
8827
8828       -mno-pack
8829           Do not pack VLIW instructions.
8830
8831       -mno-eflags
8832           Do not mark ABI switches in e_flags.
8833
8834       -mcond-move
8835           Enable the use of conditional-move instructions (default).
8836
8837           This switch is mainly for debugging the compiler and will likely be
8838           removed in a future version.
8839
8840       -mno-cond-move
8841           Disable the use of conditional-move instructions.
8842
8843           This switch is mainly for debugging the compiler and will likely be
8844           removed in a future version.
8845
8846       -mscc
8847           Enable the use of conditional set instructions (default).
8848
8849           This switch is mainly for debugging the compiler and will likely be
8850           removed in a future version.
8851
8852       -mno-scc
8853           Disable the use of conditional set instructions.
8854
8855           This switch is mainly for debugging the compiler and will likely be
8856           removed in a future version.
8857
8858       -mcond-exec
8859           Enable the use of conditional execution (default).
8860
8861           This switch is mainly for debugging the compiler and will likely be
8862           removed in a future version.
8863
8864       -mno-cond-exec
8865           Disable the use of conditional execution.
8866
8867           This switch is mainly for debugging the compiler and will likely be
8868           removed in a future version.
8869
8870       -mvliw-branch
8871           Run a pass to pack branches into VLIW instructions (default).
8872
8873           This switch is mainly for debugging the compiler and will likely be
8874           removed in a future version.
8875
8876       -mno-vliw-branch
8877           Do not run a pass to pack branches into VLIW instructions.
8878
8879           This switch is mainly for debugging the compiler and will likely be
8880           removed in a future version.
8881
8882       -mmulti-cond-exec
8883           Enable optimization of "&&" and "||" in conditional execution
8884           (default).
8885
8886           This switch is mainly for debugging the compiler and will likely be
8887           removed in a future version.
8888
8889       -mno-multi-cond-exec
8890           Disable optimization of "&&" and "||" in conditional execution.
8891
8892           This switch is mainly for debugging the compiler and will likely be
8893           removed in a future version.
8894
8895       -mnested-cond-exec
8896           Enable nested conditional execution optimizations (default).
8897
8898           This switch is mainly for debugging the compiler and will likely be
8899           removed in a future version.
8900
8901       -mno-nested-cond-exec
8902           Disable nested conditional execution optimizations.
8903
8904           This switch is mainly for debugging the compiler and will likely be
8905           removed in a future version.
8906
8907       -moptimize-membar
8908           This switch removes redundant "membar" instructions from the
8909           compiler generated code.  It is enabled by default.
8910
8911       -mno-optimize-membar
8912           This switch disables the automatic removal of redundant "membar"
8913           instructions from the generated code.
8914
8915       -mtomcat-stats
8916           Cause gas to print out tomcat statistics.
8917
8918       -mcpu=cpu
8919           Select the processor type for which to generate code.  Possible
8920           values are frv, fr550, tomcat, fr500, fr450, fr405, fr400, fr300
8921           and simple.
8922
8923   GNU/Linux Options
8924       These -m options are defined for GNU/Linux targets:
8925
8926       -mglibc
8927           Use the GNU C library instead of uClibc.  This is the default
8928           except on *-*-linux-*uclibc* targets.
8929
8930       -muclibc
8931           Use uClibc instead of the GNU C library.  This is the default on
8932           *-*-linux-*uclibc* targets.
8933
8934   H8/300 Options
8935       These -m options are defined for the H8/300 implementations:
8936
8937       -mrelax
8938           Shorten some address references at link time, when possible; uses
8939           the linker option -relax.
8940
8941       -mh Generate code for the H8/300H.
8942
8943       -ms Generate code for the H8S.
8944
8945       -mn Generate code for the H8S and H8/300H in the normal mode.  This
8946           switch must be used either with -mh or -ms.
8947
8948       -ms2600
8949           Generate code for the H8S/2600.  This switch must be used with -ms.
8950
8951       -mint32
8952           Make "int" data 32 bits by default.
8953
8954       -malign-300
8955           On the H8/300H and H8S, use the same alignment rules as for the
8956           H8/300.  The default for the H8/300H and H8S is to align longs and
8957           floats on 4 byte boundaries.  -malign-300 causes them to be aligned
8958           on 2 byte boundaries.  This option has no effect on the H8/300.
8959
8960   HPPA Options
8961       These -m options are defined for the HPPA family of computers:
8962
8963       -march=architecture-type
8964           Generate code for the specified architecture.  The choices for
8965           architecture-type are 1.0 for PA 1.0, 1.1 for PA 1.1, and 2.0 for
8966           PA 2.0 processors.  Refer to /usr/lib/sched.models on an HP-UX
8967           system to determine the proper architecture option for your
8968           machine.  Code compiled for lower numbered architectures will run
8969           on higher numbered architectures, but not the other way around.
8970
8971       -mpa-risc-1-0
8972       -mpa-risc-1-1
8973       -mpa-risc-2-0
8974           Synonyms for -march=1.0, -march=1.1, and -march=2.0 respectively.
8975
8976       -mbig-switch
8977           Generate code suitable for big switch tables.  Use this option only
8978           if the assembler/linker complain about out of range branches within
8979           a switch table.
8980
8981       -mjump-in-delay
8982           Fill delay slots of function calls with unconditional jump
8983           instructions by modifying the return pointer for the function call
8984           to be the target of the conditional jump.
8985
8986       -mdisable-fpregs
8987           Prevent floating point registers from being used in any manner.
8988           This is necessary for compiling kernels which perform lazy context
8989           switching of floating point registers.  If you use this option and
8990           attempt to perform floating point operations, the compiler will
8991           abort.
8992
8993       -mdisable-indexing
8994           Prevent the compiler from using indexing address modes.  This
8995           avoids some rather obscure problems when compiling MIG generated
8996           code under MACH.
8997
8998       -mno-space-regs
8999           Generate code that assumes the target has no space registers.  This
9000           allows GCC to generate faster indirect calls and use unscaled index
9001           address modes.
9002
9003           Such code is suitable for level 0 PA systems and kernels.
9004
9005       -mfast-indirect-calls
9006           Generate code that assumes calls never cross space boundaries.
9007           This allows GCC to emit code which performs faster indirect calls.
9008
9009           This option will not work in the presence of shared libraries or
9010           nested functions.
9011
9012       -mfixed-range=register-range
9013           Generate code treating the given register range as fixed registers.
9014           A fixed register is one that the register allocator can not use.
9015           This is useful when compiling kernel code.  A register range is
9016           specified as two registers separated by a dash.  Multiple register
9017           ranges can be specified separated by a comma.
9018
9019       -mlong-load-store
9020           Generate 3-instruction load and store sequences as sometimes
9021           required by the HP-UX 10 linker.  This is equivalent to the +k
9022           option to the HP compilers.
9023
9024       -mportable-runtime
9025           Use the portable calling conventions proposed by HP for ELF
9026           systems.
9027
9028       -mgas
9029           Enable the use of assembler directives only GAS understands.
9030
9031       -mschedule=cpu-type
9032           Schedule code according to the constraints for the machine type
9033           cpu-type.  The choices for cpu-type are 700 7100, 7100LC, 7200,
9034           7300 and 8000.  Refer to /usr/lib/sched.models on an HP-UX system
9035           to determine the proper scheduling option for your machine.  The
9036           default scheduling is 8000.
9037
9038       -mlinker-opt
9039           Enable the optimization pass in the HP-UX linker.  Note this makes
9040           symbolic debugging impossible.  It also triggers a bug in the HP-UX
9041           8 and HP-UX 9 linkers in which they give bogus error messages when
9042           linking some programs.
9043
9044       -msoft-float
9045           Generate output containing library calls for floating point.
9046           Warning: the requisite libraries are not available for all HPPA
9047           targets.  Normally the facilities of the machine's usual C compiler
9048           are used, but this cannot be done directly in cross-compilation.
9049           You must make your own arrangements to provide suitable library
9050           functions for cross-compilation.
9051
9052           -msoft-float changes the calling convention in the output file;
9053           therefore, it is only useful if you compile all of a program with
9054           this option.  In particular, you need to compile libgcc.a, the
9055           library that comes with GCC, with -msoft-float in order for this to
9056           work.
9057
9058       -msio
9059           Generate the predefine, "_SIO", for server IO.  The default is
9060           -mwsio.  This generates the predefines, "__hp9000s700",
9061           "__hp9000s700__" and "_WSIO", for workstation IO.  These options
9062           are available under HP-UX and HI-UX.
9063
9064       -mgnu-ld
9065           Use GNU ld specific options.  This passes -shared to ld when
9066           building a shared library.  It is the default when GCC is
9067           configured, explicitly or implicitly, with the GNU linker.  This
9068           option does not have any affect on which ld is called, it only
9069           changes what parameters are passed to that ld.  The ld that is
9070           called is determined by the --with-ld configure option, GCC's
9071           program search path, and finally by the user's PATH.  The linker
9072           used by GCC can be printed using which `gcc -print-prog-name=ld`.
9073           This option is only available on the 64 bit HP-UX GCC, i.e.
9074           configured with hppa*64*-*-hpux*.
9075
9076       -mhp-ld
9077           Use HP ld specific options.  This passes -b to ld when building a
9078           shared library and passes +Accept TypeMismatch to ld on all links.
9079           It is the default when GCC is configured, explicitly or implicitly,
9080           with the HP linker.  This option does not have any affect on which
9081           ld is called, it only changes what parameters are passed to that
9082           ld.  The ld that is called is determined by the --with-ld configure
9083           option, GCC's program search path, and finally by the user's PATH.
9084           The linker used by GCC can be printed using which `gcc
9085           -print-prog-name=ld`.  This option is only available on the 64 bit
9086           HP-UX GCC, i.e. configured with hppa*64*-*-hpux*.
9087
9088       -mlong-calls
9089           Generate code that uses long call sequences.  This ensures that a
9090           call is always able to reach linker generated stubs.  The default
9091           is to generate long calls only when the distance from the call site
9092           to the beginning of the function or translation unit, as the case
9093           may be, exceeds a predefined limit set by the branch type being
9094           used.  The limits for normal calls are 7,600,000 and 240,000 bytes,
9095           respectively for the PA 2.0 and PA 1.X architectures.  Sibcalls are
9096           always limited at 240,000 bytes.
9097
9098           Distances are measured from the beginning of functions when using
9099           the -ffunction-sections option, or when using the -mgas and
9100           -mno-portable-runtime options together under HP-UX with the SOM
9101           linker.
9102
9103           It is normally not desirable to use this option as it will degrade
9104           performance.  However, it may be useful in large applications,
9105           particularly when partial linking is used to build the application.
9106
9107           The types of long calls used depends on the capabilities of the
9108           assembler and linker, and the type of code being generated.  The
9109           impact on systems that support long absolute calls, and long pic
9110           symbol-difference or pc-relative calls should be relatively small.
9111           However, an indirect call is used on 32-bit ELF systems in pic code
9112           and it is quite long.
9113
9114       -munix=unix-std
9115           Generate compiler predefines and select a startfile for the
9116           specified UNIX standard.  The choices for unix-std are 93, 95 and
9117           98.  93 is supported on all HP-UX versions.  95 is available on HP-
9118           UX 10.10 and later.  98 is available on HP-UX 11.11 and later.  The
9119           default values are 93 for HP-UX 10.00, 95 for HP-UX 10.10 though to
9120           11.00, and 98 for HP-UX 11.11 and later.
9121
9122           -munix=93 provides the same predefines as GCC 3.3 and 3.4.
9123           -munix=95 provides additional predefines for "XOPEN_UNIX" and
9124           "_XOPEN_SOURCE_EXTENDED", and the startfile unix95.o.  -munix=98
9125           provides additional predefines for "_XOPEN_UNIX",
9126           "_XOPEN_SOURCE_EXTENDED", "_INCLUDE__STDC_A1_SOURCE" and
9127           "_INCLUDE_XOPEN_SOURCE_500", and the startfile unix98.o.
9128
9129           It is important to note that this option changes the interfaces for
9130           various library routines.  It also affects the operational behavior
9131           of the C library.  Thus, extreme care is needed in using this
9132           option.
9133
9134           Library code that is intended to operate with more than one UNIX
9135           standard must test, set and restore the variable
9136           __xpg4_extended_mask as appropriate.  Most GNU software doesn't
9137           provide this capability.
9138
9139       -nolibdld
9140           Suppress the generation of link options to search libdld.sl when
9141           the -static option is specified on HP-UX 10 and later.
9142
9143       -static
9144           The HP-UX implementation of setlocale in libc has a dependency on
9145           libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
9146           when the -static option is specified, special link options are
9147           needed to resolve this dependency.
9148
9149           On HP-UX 10 and later, the GCC driver adds the necessary options to
9150           link with libdld.sl when the -static option is specified.  This
9151           causes the resulting binary to be dynamic.  On the 64-bit port, the
9152           linkers generate dynamic binaries by default in any case.  The
9153           -nolibdld option can be used to prevent the GCC driver from adding
9154           these link options.
9155
9156       -threads
9157           Add support for multithreading with the dce thread library under
9158           HP-UX.  This option sets flags for both the preprocessor and
9159           linker.
9160
9161   Intel 386 and AMD x86-64 Options
9162       These -m options are defined for the i386 and x86-64 family of
9163       computers:
9164
9165       -mtune=cpu-type
9166           Tune to cpu-type everything applicable about the generated code,
9167           except for the ABI and the set of available instructions.  The
9168           choices for cpu-type are:
9169
9170           generic
9171               Produce code optimized for the most common IA32/AMD64/EM64T
9172               processors.  If you know the CPU on which your code will run,
9173               then you should use the corresponding -mtune option instead of
9174               -mtune=generic.  But, if you do not know exactly what CPU users
9175               of your application will have, then you should use this option.
9176
9177               As new processors are deployed in the marketplace, the behavior
9178               of this option will change.  Therefore, if you upgrade to a
9179               newer version of GCC, the code generated option will change to
9180               reflect the processors that were most common when that version
9181               of GCC was released.
9182
9183               There is no -march=generic option because -march indicates the
9184               instruction set the compiler can use, and there is no generic
9185               instruction set applicable to all processors.  In contrast,
9186               -mtune indicates the processor (or, in this case, collection of
9187               processors) for which the code is optimized.
9188
9189           native
9190               This selects the CPU to tune for at compilation time by
9191               determining the processor type of the compiling machine.  Using
9192               -mtune=native will produce code optimized for the local machine
9193               under the constraints of the selected instruction set.  Using
9194               -march=native will enable all instruction subsets supported by
9195               the local machine (hence the result might not run on different
9196               machines).
9197
9198           i386
9199               Original Intel's i386 CPU.
9200
9201           i486
9202               Intel's i486 CPU.  (No scheduling is implemented for this
9203               chip.)
9204
9205           i586, pentium
9206               Intel Pentium CPU with no MMX support.
9207
9208           pentium-mmx
9209               Intel PentiumMMX CPU based on Pentium core with MMX instruction
9210               set support.
9211
9212           pentiumpro
9213               Intel PentiumPro CPU.
9214
9215           i686
9216               Same as "generic", but when used as "march" option, PentiumPro
9217               instruction set will be used, so the code will run on all i686
9218               family chips.
9219
9220           pentium2
9221               Intel Pentium2 CPU based on PentiumPro core with MMX
9222               instruction set support.
9223
9224           pentium3, pentium3m
9225               Intel Pentium3 CPU based on PentiumPro core with MMX and SSE
9226               instruction set support.
9227
9228           pentium-m
9229               Low power version of Intel Pentium3 CPU with MMX, SSE and SSE2
9230               instruction set support.  Used by Centrino notebooks.
9231
9232           pentium4, pentium4m
9233               Intel Pentium4 CPU with MMX, SSE and SSE2 instruction set
9234               support.
9235
9236           prescott
9237               Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2 and
9238               SSE3 instruction set support.
9239
9240           nocona
9241               Improved version of Intel Pentium4 CPU with 64-bit extensions,
9242               MMX, SSE, SSE2 and SSE3 instruction set support.
9243
9244           core2
9245               Intel Core2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3
9246               and SSSE3 instruction set support.
9247
9248           k6  AMD K6 CPU with MMX instruction set support.
9249
9250           k6-2, k6-3
9251               Improved versions of AMD K6 CPU with MMX and 3dNOW! instruction
9252               set support.
9253
9254           athlon, athlon-tbird
9255               AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and SSE
9256               prefetch instructions support.
9257
9258           athlon-4, athlon-xp, athlon-mp
9259               Improved AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and
9260               full SSE instruction set support.
9261
9262           k8, opteron, athlon64, athlon-fx
9263               AMD K8 core based CPUs with x86-64 instruction set support.
9264               (This supersets MMX, SSE, SSE2, 3dNOW!, enhanced 3dNOW! and
9265               64-bit instruction set extensions.)
9266
9267           k8-sse3, opteron-sse3, athlon64-sse3
9268               Improved versions of k8, opteron and athlon64 with SSE3
9269               instruction set support.
9270
9271           amdfam10, barcelona
9272               AMD Family 10h core based CPUs with x86-64 instruction set
9273               support.  (This supersets MMX, SSE, SSE2, SSE3, SSE4A, 3dNOW!,
9274               enhanced 3dNOW!, ABM and 64-bit instruction set extensions.)
9275
9276           winchip-c6
9277               IDT Winchip C6 CPU, dealt in same way as i486 with additional
9278               MMX instruction set support.
9279
9280           winchip2
9281               IDT Winchip2 CPU, dealt in same way as i486 with additional MMX
9282               and 3dNOW!  instruction set support.
9283
9284           c3  Via C3 CPU with MMX and 3dNOW! instruction set support.  (No
9285               scheduling is implemented for this chip.)
9286
9287           c3-2
9288               Via C3-2 CPU with MMX and SSE instruction set support.  (No
9289               scheduling is implemented for this chip.)
9290
9291           geode
9292               Embedded AMD CPU with MMX and 3dNOW! instruction set support.
9293
9294           While picking a specific cpu-type will schedule things
9295           appropriately for that particular chip, the compiler will not
9296           generate any code that does not run on the i386 without the
9297           -march=cpu-type option being used.
9298
9299       -march=cpu-type
9300           Generate instructions for the machine type cpu-type.  The choices
9301           for cpu-type are the same as for -mtune.  Moreover, specifying
9302           -march=cpu-type implies -mtune=cpu-type.
9303
9304       -mcpu=cpu-type
9305           A deprecated synonym for -mtune.
9306
9307       -mfpmath=unit
9308           Generate floating point arithmetics for selected unit unit.  The
9309           choices for unit are:
9310
9311           387 Use the standard 387 floating point coprocessor present
9312               majority of chips and emulated otherwise.  Code compiled with
9313               this option will run almost everywhere.  The temporary results
9314               are computed in 80bit precision instead of precision specified
9315               by the type resulting in slightly different results compared to
9316               most of other chips.  See -ffloat-store for more detailed
9317               description.
9318
9319               This is the default choice for i386 compiler.
9320
9321           sse Use scalar floating point instructions present in the SSE
9322               instruction set.  This instruction set is supported by Pentium3
9323               and newer chips, in the AMD line by Athlon-4, Athlon-xp and
9324               Athlon-mp chips.  The earlier version of SSE instruction set
9325               supports only single precision arithmetics, thus the double and
9326               extended precision arithmetics is still done using 387.  Later
9327               version, present only in Pentium4 and the future AMD x86-64
9328               chips supports double precision arithmetics too.
9329
9330               For the i386 compiler, you need to use -march=cpu-type, -msse
9331               or -msse2 switches to enable SSE extensions and make this
9332               option effective.  For the x86-64 compiler, these extensions
9333               are enabled by default.
9334
9335               The resulting code should be considerably faster in the
9336               majority of cases and avoid the numerical instability problems
9337               of 387 code, but may break some existing code that expects
9338               temporaries to be 80bit.
9339
9340               This is the default choice for the x86-64 compiler.
9341
9342           sse,387
9343           sse+387
9344           both
9345               Attempt to utilize both instruction sets at once.  This
9346               effectively double the amount of available registers and on
9347               chips with separate execution units for 387 and SSE the
9348               execution resources too.  Use this option with care, as it is
9349               still experimental, because the GCC register allocator does not
9350               model separate functional units well resulting in instable
9351               performance.
9352
9353       -masm=dialect
9354           Output asm instructions using selected dialect.  Supported choices
9355           are intel or att (the default one).  Darwin does not support intel.
9356
9357       -mieee-fp
9358       -mno-ieee-fp
9359           Control whether or not the compiler uses IEEE floating point
9360           comparisons.  These handle correctly the case where the result of a
9361           comparison is unordered.
9362
9363       -msoft-float
9364           Generate output containing library calls for floating point.
9365           Warning: the requisite libraries are not part of GCC.  Normally the
9366           facilities of the machine's usual C compiler are used, but this
9367           can't be done directly in cross-compilation.  You must make your
9368           own arrangements to provide suitable library functions for cross-
9369           compilation.
9370
9371           On machines where a function returns floating point results in the
9372           80387 register stack, some floating point opcodes may be emitted
9373           even if -msoft-float is used.
9374
9375       -mno-fp-ret-in-387
9376           Do not use the FPU registers for return values of functions.
9377
9378           The usual calling convention has functions return values of types
9379           "float" and "double" in an FPU register, even if there is no FPU.
9380           The idea is that the operating system should emulate an FPU.
9381
9382           The option -mno-fp-ret-in-387 causes such values to be returned in
9383           ordinary CPU registers instead.
9384
9385       -mno-fancy-math-387
9386           Some 387 emulators do not support the "sin", "cos" and "sqrt"
9387           instructions for the 387.  Specify this option to avoid generating
9388           those instructions.  This option is the default on FreeBSD, OpenBSD
9389           and NetBSD.  This option is overridden when -march indicates that
9390           the target cpu will always have an FPU and so the instruction will
9391           not need emulation.  As of revision 2.6.1, these instructions are
9392           not generated unless you also use the -funsafe-math-optimizations
9393           switch.
9394
9395       -malign-double
9396       -mno-align-double
9397           Control whether GCC aligns "double", "long double", and "long long"
9398           variables on a two word boundary or a one word boundary.  Aligning
9399           "double" variables on a two word boundary will produce code that
9400           runs somewhat faster on a Pentium at the expense of more memory.
9401
9402           On x86-64, -malign-double is enabled by default.
9403
9404           Warning: if you use the -malign-double switch, structures
9405           containing the above types will be aligned differently than the
9406           published application binary interface specifications for the 386
9407           and will not be binary compatible with structures in code compiled
9408           without that switch.
9409
9410       -m96bit-long-double
9411       -m128bit-long-double
9412           These switches control the size of "long double" type.  The i386
9413           application binary interface specifies the size to be 96 bits, so
9414           -m96bit-long-double is the default in 32 bit mode.
9415
9416           Modern architectures (Pentium and newer) would prefer "long double"
9417           to be aligned to an 8 or 16 byte boundary.  In arrays or structures
9418           conforming to the ABI, this would not be possible.  So specifying a
9419           -m128bit-long-double will align "long double" to a 16 byte boundary
9420           by padding the "long double" with an additional 32 bit zero.
9421
9422           In the x86-64 compiler, -m128bit-long-double is the default choice
9423           as its ABI specifies that "long double" is to be aligned on 16 byte
9424           boundary.
9425
9426           Notice that neither of these options enable any extra precision
9427           over the x87 standard of 80 bits for a "long double".
9428
9429           Warning: if you override the default value for your target ABI, the
9430           structures and arrays containing "long double" variables will
9431           change their size as well as function calling convention for
9432           function taking "long double" will be modified.  Hence they will
9433           not be binary compatible with arrays or structures in code compiled
9434           without that switch.
9435
9436       -mlarge-data-threshold=number
9437           When -mcmodel=medium is specified, the data greater than threshold
9438           are placed in large data section.  This value must be the same
9439           across all object linked into the binary and defaults to 65535.
9440
9441       -mrtd
9442           Use a different function-calling convention, in which functions
9443           that take a fixed number of arguments return with the "ret" num
9444           instruction, which pops their arguments while returning.  This
9445           saves one instruction in the caller since there is no need to pop
9446           the arguments there.
9447
9448           You can specify that an individual function is called with this
9449           calling sequence with the function attribute stdcall.  You can also
9450           override the -mrtd option by using the function attribute cdecl.
9451
9452           Warning: this calling convention is incompatible with the one
9453           normally used on Unix, so you cannot use it if you need to call
9454           libraries compiled with the Unix compiler.
9455
9456           Also, you must provide function prototypes for all functions that
9457           take variable numbers of arguments (including "printf"); otherwise
9458           incorrect code will be generated for calls to those functions.
9459
9460           In addition, seriously incorrect code will result if you call a
9461           function with too many arguments.  (Normally, extra arguments are
9462           harmlessly ignored.)
9463
9464       -mregparm=num
9465           Control how many registers are used to pass integer arguments.  By
9466           default, no registers are used to pass arguments, and at most 3
9467           registers can be used.  You can control this behavior for a
9468           specific function by using the function attribute regparm.
9469
9470           Warning: if you use this switch, and num is nonzero, then you must
9471           build all modules with the same value, including any libraries.
9472           This includes the system libraries and startup modules.
9473
9474       -msseregparm
9475           Use SSE register passing conventions for float and double arguments
9476           and return values.  You can control this behavior for a specific
9477           function by using the function attribute sseregparm.
9478
9479           Warning: if you use this switch then you must build all modules
9480           with the same value, including any libraries.  This includes the
9481           system libraries and startup modules.
9482
9483       -mpc32
9484       -mpc64
9485       -mpc80
9486           Set 80387 floating-point precision to 32, 64 or 80 bits.  When
9487           -mpc32 is specified, the significands of results of floating-point
9488           operations are rounded to 24 bits (single precision); -mpc64 rounds
9489           the significands of results of floating-point operations to 53 bits
9490           (double precision) and -mpc80 rounds the significands of results of
9491           floating-point operations to 64 bits (extended double precision),
9492           which is the default.  When this option is used, floating-point
9493           operations in higher precisions are not available to the programmer
9494           without setting the FPU control word explicitly.
9495
9496           Setting the rounding of floating-point operations to less than the
9497           default 80 bits can speed some programs by 2% or more.  Note that
9498           some mathematical libraries assume that extended precision (80 bit)
9499           floating-point operations are enabled by default; routines in such
9500           libraries could suffer significant loss of accuracy, typically
9501           through so-called "catastrophic cancellation", when this option is
9502           used to set the precision to less than extended precision.
9503
9504       -mstackrealign
9505           Realign the stack at entry.  On the Intel x86, the -mstackrealign
9506           option will generate an alternate prologue and epilogue that
9507           realigns the runtime stack if necessary.  This supports mixing
9508           legacy codes that keep a 4-byte aligned stack with modern codes
9509           that keep a 16-byte stack for SSE compatibility.  See also the
9510           attribute "force_align_arg_pointer", applicable to individual
9511           functions.
9512
9513       -mpreferred-stack-boundary=num
9514           Attempt to keep the stack boundary aligned to a 2 raised to num
9515           byte boundary.  If -mpreferred-stack-boundary is not specified, the
9516           default is 4 (16 bytes or 128 bits).
9517
9518       -mincoming-stack-boundary=num
9519           Assume the incoming stack is aligned to a 2 raised to num byte
9520           boundary.  If -mincoming-stack-boundary is not specified, the one
9521           specified by -mpreferred-stack-boundary will be used.
9522
9523           On Pentium and PentiumPro, "double" and "long double" values should
9524           be aligned to an 8 byte boundary (see -malign-double) or suffer
9525           significant run time performance penalties.  On Pentium III, the
9526           Streaming SIMD Extension (SSE) data type "__m128" may not work
9527           properly if it is not 16 byte aligned.
9528
9529           To ensure proper alignment of this values on the stack, the stack
9530           boundary must be as aligned as that required by any value stored on
9531           the stack.  Further, every function must be generated such that it
9532           keeps the stack aligned.  Thus calling a function compiled with a
9533           higher preferred stack boundary from a function compiled with a
9534           lower preferred stack boundary will most likely misalign the stack.
9535           It is recommended that libraries that use callbacks always use the
9536           default setting.
9537
9538           This extra alignment does consume extra stack space, and generally
9539           increases code size.  Code that is sensitive to stack space usage,
9540           such as embedded systems and operating system kernels, may want to
9541           reduce the preferred alignment to -mpreferred-stack-boundary=2.
9542
9543       -mmmx
9544       -mno-mmx
9545       -msse
9546       -mno-sse
9547       -msse2
9548       -mno-sse2
9549       -msse3
9550       -mno-sse3
9551       -mssse3
9552       -mno-ssse3
9553       -msse4.1
9554       -mno-sse4.1
9555       -msse4.2
9556       -mno-sse4.2
9557       -msse4
9558       -mno-sse4
9559       -mavx
9560       -mno-avx
9561       -maes
9562       -mno-aes
9563       -mpclmul
9564       -mno-pclmul
9565       -mfsgsbase
9566       -mno-fsgsbase
9567       -mrdrnd
9568       -mno-rdrnd
9569       -mf16c
9570       -mno-f16c
9571       -msse4a
9572       -mno-sse4a
9573       -mfma4
9574       -mno-fma4
9575       -mxop
9576       -mno-xop
9577       -mlwp
9578       -mno-lwp
9579       -m3dnow
9580       -mno-3dnow
9581       -mpopcnt
9582       -mno-popcnt
9583       -mabm
9584       -mno-abm
9585       -mbmi
9586       -mno-bmi
9587       -mtbm
9588       -mno-tbm
9589           These switches enable or disable the use of instructions in the
9590           MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, AVX, AES, PCLMUL, FSGSBASE,
9591           RDRND, F16C, SSE4A, FMA4, XOP, LWP, ABM, BMI, or 3DNow! extended
9592           instruction sets.  These extensions are also available as built-in
9593           functions: see X86 Built-in Functions, for details of the functions
9594           enabled and disabled by these switches.
9595
9596           To have SSE/SSE2 instructions generated automatically from
9597           floating-point code (as opposed to 387 instructions), see
9598           -mfpmath=sse.
9599
9600           GCC depresses SSEx instructions when -mavx is used. Instead, it
9601           generates new AVX instructions or AVX equivalence for all SSEx
9602           instructions when needed.
9603
9604           These options will enable GCC to use these extended instructions in
9605           generated code, even without -mfpmath=sse.  Applications which
9606           perform runtime CPU detection must compile separate files for each
9607           supported architecture, using the appropriate flags.  In
9608           particular, the file containing the CPU detection code should be
9609           compiled without these options.
9610
9611       -mfused-madd
9612       -mno-fused-madd
9613           Do (don't) generate code that uses the fused multiply/add or
9614           multiply/subtract instructions.  The default is to use these
9615           instructions.
9616
9617       -mcld
9618           This option instructs GCC to emit a "cld" instruction in the
9619           prologue of functions that use string instructions.  String
9620           instructions depend on the DF flag to select between autoincrement
9621           or autodecrement mode.  While the ABI specifies the DF flag to be
9622           cleared on function entry, some operating systems violate this
9623           specification by not clearing the DF flag in their exception
9624           dispatchers.  The exception handler can be invoked with the DF flag
9625           set which leads to wrong direction mode, when string instructions
9626           are used.  This option can be enabled by default on 32-bit x86
9627           targets by configuring GCC with the --enable-cld configure option.
9628           Generation of "cld" instructions can be suppressed with the
9629           -mno-cld compiler option in this case.
9630
9631       -mcx16
9632           This option will enable GCC to use CMPXCHG16B instruction in
9633           generated code.  CMPXCHG16B allows for atomic operations on 128-bit
9634           double quadword (or oword) data types.  This is useful for high
9635           resolution counters that could be updated by multiple processors
9636           (or cores).  This instruction is generated as part of atomic built-
9637           in functions: see Atomic Builtins for details.
9638
9639       -msahf
9640           This option will enable GCC to use SAHF instruction in generated
9641           64-bit code.  Early Intel CPUs with Intel 64 lacked LAHF and SAHF
9642           instructions supported by AMD64 until introduction of Pentium 4 G1
9643           step in December 2005.  LAHF and SAHF are load and store
9644           instructions, respectively, for certain status flags.  In 64-bit
9645           mode, SAHF instruction is used to optimize "fmod", "drem" or
9646           "remainder" built-in functions: see Other Builtins for details.
9647
9648       -mmovbe
9649           This option will enable GCC to use movbe instruction to implement
9650           "__builtin_bswap32" and "__builtin_bswap64".
9651
9652       -mcrc32
9653           This option will enable built-in functions,
9654           "__builtin_ia32_crc32qi", "__builtin_ia32_crc32hi".
9655           "__builtin_ia32_crc32si" and "__builtin_ia32_crc32di" to generate
9656           the crc32 machine instruction.
9657
9658       -mrecip
9659           This option will enable GCC to use RCPSS and RSQRTSS instructions
9660           (and their vectorized variants RCPPS and RSQRTPS) with an
9661           additional Newton-Raphson step to increase precision instead of
9662           DIVSS and SQRTSS (and their vectorized variants) for single
9663           precision floating point arguments.  These instructions are
9664           generated only when -funsafe-math-optimizations is enabled together
9665           with -finite-math-only and -fno-trapping-math.  Note that while the
9666           throughput of the sequence is higher than the throughput of the
9667           non-reciprocal instruction, the precision of the sequence can be
9668           decreased by up to 2 ulp (i.e. the inverse of 1.0 equals
9669           0.99999994).
9670
9671       -mveclibabi=type
9672           Specifies the ABI type to use for vectorizing intrinsics using an
9673           external library.  Supported types are "svml" for the Intel short
9674           vector math library and "acml" for the AMD math core library style
9675           of interfacing.  GCC will currently emit calls to "vmldExp2",
9676           "vmldLn2", "vmldLog102", "vmldLog102", "vmldPow2", "vmldTanh2",
9677           "vmldTan2", "vmldAtan2", "vmldAtanh2", "vmldCbrt2", "vmldSinh2",
9678           "vmldSin2", "vmldAsinh2", "vmldAsin2", "vmldCosh2", "vmldCos2",
9679           "vmldAcosh2", "vmldAcos2", "vmlsExp4", "vmlsLn4", "vmlsLog104",
9680           "vmlsLog104", "vmlsPow4", "vmlsTanh4", "vmlsTan4", "vmlsAtan4",
9681           "vmlsAtanh4", "vmlsCbrt4", "vmlsSinh4", "vmlsSin4", "vmlsAsinh4",
9682           "vmlsAsin4", "vmlsCosh4", "vmlsCos4", "vmlsAcosh4" and "vmlsAcos4"
9683           for corresponding function type when -mveclibabi=svml is used and
9684           "__vrd2_sin", "__vrd2_cos", "__vrd2_exp", "__vrd2_log",
9685           "__vrd2_log2", "__vrd2_log10", "__vrs4_sinf", "__vrs4_cosf",
9686           "__vrs4_expf", "__vrs4_logf", "__vrs4_log2f", "__vrs4_log10f" and
9687           "__vrs4_powf" for corresponding function type when -mveclibabi=acml
9688           is used. Both -ftree-vectorize and -funsafe-math-optimizations have
9689           to be enabled. A SVML or ACML ABI compatible library will have to
9690           be specified at link time.
9691
9692       -mpush-args
9693       -mno-push-args
9694           Use PUSH operations to store outgoing parameters.  This method is
9695           shorter and usually equally fast as method using SUB/MOV operations
9696           and is enabled by default.  In some cases disabling it may improve
9697           performance because of improved scheduling and reduced
9698           dependencies.
9699
9700       -maccumulate-outgoing-args
9701           If enabled, the maximum amount of space required for outgoing
9702           arguments will be computed in the function prologue.  This is
9703           faster on most modern CPUs because of reduced dependencies,
9704           improved scheduling and reduced stack usage when preferred stack
9705           boundary is not equal to 2.  The drawback is a notable increase in
9706           code size.  This switch implies -mno-push-args.
9707
9708       -mthreads
9709           Support thread-safe exception handling on Mingw32.  Code that
9710           relies on thread-safe exception handling must compile and link all
9711           code with the -mthreads option.  When compiling, -mthreads defines
9712           -D_MT; when linking, it links in a special thread helper library
9713           -lmingwthrd which cleans up per thread exception handling data.
9714
9715       -mno-align-stringops
9716           Do not align destination of inlined string operations.  This switch
9717           reduces code size and improves performance in case the destination
9718           is already aligned, but GCC doesn't know about it.
9719
9720       -minline-all-stringops
9721           By default GCC inlines string operations only when destination is
9722           known to be aligned at least to 4 byte boundary.  This enables more
9723           inlining, increase code size, but may improve performance of code
9724           that depends on fast memcpy, strlen and memset for short lengths.
9725
9726       -minline-stringops-dynamically
9727           For string operation of unknown size, inline runtime checks so for
9728           small blocks inline code is used, while for large blocks library
9729           call is used.
9730
9731       -mstringop-strategy=alg
9732           Overwrite internal decision heuristic about particular algorithm to
9733           inline string operation with.  The allowed values are "rep_byte",
9734           "rep_4byte", "rep_8byte" for expanding using i386 "rep" prefix of
9735           specified size, "byte_loop", "loop", "unrolled_loop" for expanding
9736           inline loop, "libcall" for always expanding library call.
9737
9738       -momit-leaf-frame-pointer
9739           Don't keep the frame pointer in a register for leaf functions.
9740           This avoids the instructions to save, set up and restore frame
9741           pointers and makes an extra register available in leaf functions.
9742           The option -fomit-frame-pointer removes the frame pointer for all
9743           functions which might make debugging harder.
9744
9745       -mtls-direct-seg-refs
9746       -mno-tls-direct-seg-refs
9747           Controls whether TLS variables may be accessed with offsets from
9748           the TLS segment register (%gs for 32-bit, %fs for 64-bit), or
9749           whether the thread base pointer must be added.  Whether or not this
9750           is legal depends on the operating system, and whether it maps the
9751           segment to cover the entire TLS area.
9752
9753           For systems that use GNU libc, the default is on.
9754
9755       -msse2avx
9756       -mno-sse2avx
9757           Specify that the assembler should encode SSE instructions with VEX
9758           prefix.  The option -mavx turns this on by default.
9759
9760       -mindirect-branch=choice
9761           Convert indirect call and jump with choice.  The default is keep,
9762           which keeps indirect call and jump unmodified.  thunk converts
9763           indirect call and jump to call and return thunk.  thunk-inline
9764           converts indirect call and jump to inlined call and return thunk.
9765           thunk-extern converts indirect call and jump to external call and
9766           return thunk provided in a separate object file.  You can control
9767           this behavior for a specific function by using the function
9768           attribute "indirect_branch".
9769
9770           Note that -mcmodel=large is incompatible with
9771           -mindirect-branch=thunk nor -mindirect-branch=thunk-extern since
9772           the thunk function may not be reachable in large code model.
9773
9774       -mfunction-return=choice
9775           Convert function return with choice.  The default is keep, which
9776           keeps function return unmodified.  thunk converts function return
9777           to call and return thunk.  thunk-inline converts function return to
9778           inlined call and return thunk.  thunk-extern converts function
9779           return to external call and return thunk provided in a separate
9780           object file.  You can control this behavior for a specific function
9781           by using the function attribute "function_return".
9782
9783           Note that -mcmodel=large is incompatible with
9784           -mfunction-return=thunk nor -mfunction-return=thunk-extern since
9785           the thunk function may not be reachable in large code model.
9786
9787       -mindirect-branch-register
9788           Force indirect call and jump via register.
9789
9790       These -m switches are supported in addition to the above on AMD x86-64
9791       processors in 64-bit environments.
9792
9793       -m32
9794       -m64
9795           Generate code for a 32-bit or 64-bit environment.  The 32-bit
9796           environment sets int, long and pointer to 32 bits and generates
9797           code that runs on any i386 system.  The 64-bit environment sets int
9798           to 32 bits and long and pointer to 64 bits and generates code for
9799           AMD's x86-64 architecture. For darwin only the -m64 option turns
9800           off the -fno-pic and -mdynamic-no-pic options.
9801
9802       -mno-red-zone
9803           Do not use a so called red zone for x86-64 code.  The red zone is
9804           mandated by the x86-64 ABI, it is a 128-byte area beyond the
9805           location of the stack pointer that will not be modified by signal
9806           or interrupt handlers and therefore can be used for temporary data
9807           without adjusting the stack pointer.  The flag -mno-red-zone
9808           disables this red zone.
9809
9810       -mcmodel=small
9811           Generate code for the small code model: the program and its symbols
9812           must be linked in the lower 2 GB of the address space.  Pointers
9813           are 64 bits.  Programs can be statically or dynamically linked.
9814           This is the default code model.
9815
9816       -mcmodel=kernel
9817           Generate code for the kernel code model.  The kernel runs in the
9818           negative 2 GB of the address space.  This model has to be used for
9819           Linux kernel code.
9820
9821       -mcmodel=medium
9822           Generate code for the medium model: The program is linked in the
9823           lower 2 GB of the address space.  Small symbols are also placed
9824           there.  Symbols with sizes larger than -mlarge-data-threshold are
9825           put into large data or bss sections and can be located above 2GB.
9826           Programs can be statically or dynamically linked.
9827
9828       -mcmodel=large
9829           Generate code for the large model: This model makes no assumptions
9830           about addresses and sizes of sections.
9831
9832   i386 and x86-64 Windows Options
9833       These additional options are available for Windows targets:
9834
9835       -mconsole
9836           This option is available for Cygwin and MinGW targets.  It
9837           specifies that a console application is to be generated, by
9838           instructing the linker to set the PE header subsystem type required
9839           for console applications.  This is the default behaviour for Cygwin
9840           and MinGW targets.
9841
9842       -mcygwin
9843           This option is available for Cygwin targets.  It specifies that the
9844           Cygwin internal interface is to be used for predefined preprocessor
9845           macros, C runtime libraries and related linker paths and options.
9846           For Cygwin targets this is the default behaviour.  This option is
9847           deprecated and will be removed in a future release.
9848
9849       -mno-cygwin
9850           This option is available for Cygwin targets.  It specifies that the
9851           MinGW internal interface is to be used instead of Cygwin's, by
9852           setting MinGW-related predefined macros and linker paths and
9853           default library options.  This option is deprecated and will be
9854           removed in a future release.
9855
9856       -mdll
9857           This option is available for Cygwin and MinGW targets.  It
9858           specifies that a DLL - a dynamic link library - is to be generated,
9859           enabling the selection of the required runtime startup object and
9860           entry point.
9861
9862       -mnop-fun-dllimport
9863           This option is available for Cygwin and MinGW targets.  It
9864           specifies that the dllimport attribute should be ignored.
9865
9866       -mthread
9867           This option is available for MinGW targets. It specifies that
9868           MinGW-specific thread support is to be used.
9869
9870       -mwin32
9871           This option is available for Cygwin and MinGW targets.  It
9872           specifies that the typical Windows pre-defined macros are to be set
9873           in the pre-processor, but does not influence the choice of runtime
9874           library/startup code.
9875
9876       -mwindows
9877           This option is available for Cygwin and MinGW targets.  It
9878           specifies that a GUI application is to be generated by instructing
9879           the linker to set the PE header subsystem type appropriately.
9880
9881       See also under i386 and x86-64 Options for standard options.
9882
9883   IA-64 Options
9884       These are the -m options defined for the Intel IA-64 architecture.
9885
9886       -mbig-endian
9887           Generate code for a big endian target.  This is the default for HP-
9888           UX.
9889
9890       -mlittle-endian
9891           Generate code for a little endian target.  This is the default for
9892           AIX5 and GNU/Linux.
9893
9894       -mgnu-as
9895       -mno-gnu-as
9896           Generate (or don't) code for the GNU assembler.  This is the
9897           default.
9898
9899       -mgnu-ld
9900       -mno-gnu-ld
9901           Generate (or don't) code for the GNU linker.  This is the default.
9902
9903       -mno-pic
9904           Generate code that does not use a global pointer register.  The
9905           result is not position independent code, and violates the IA-64
9906           ABI.
9907
9908       -mvolatile-asm-stop
9909       -mno-volatile-asm-stop
9910           Generate (or don't) a stop bit immediately before and after
9911           volatile asm statements.
9912
9913       -mregister-names
9914       -mno-register-names
9915           Generate (or don't) in, loc, and out register names for the stacked
9916           registers.  This may make assembler output more readable.
9917
9918       -mno-sdata
9919       -msdata
9920           Disable (or enable) optimizations that use the small data section.
9921           This may be useful for working around optimizer bugs.
9922
9923       -mconstant-gp
9924           Generate code that uses a single constant global pointer value.
9925           This is useful when compiling kernel code.
9926
9927       -mauto-pic
9928           Generate code that is self-relocatable.  This implies
9929           -mconstant-gp.  This is useful when compiling firmware code.
9930
9931       -minline-float-divide-min-latency
9932           Generate code for inline divides of floating point values using the
9933           minimum latency algorithm.
9934
9935       -minline-float-divide-max-throughput
9936           Generate code for inline divides of floating point values using the
9937           maximum throughput algorithm.
9938
9939       -minline-int-divide-min-latency
9940           Generate code for inline divides of integer values using the
9941           minimum latency algorithm.
9942
9943       -minline-int-divide-max-throughput
9944           Generate code for inline divides of integer values using the
9945           maximum throughput algorithm.
9946
9947       -minline-sqrt-min-latency
9948           Generate code for inline square roots using the minimum latency
9949           algorithm.
9950
9951       -minline-sqrt-max-throughput
9952           Generate code for inline square roots using the maximum throughput
9953           algorithm.
9954
9955       -mno-dwarf2-asm
9956       -mdwarf2-asm
9957           Don't (or do) generate assembler code for the DWARF2 line number
9958           debugging info.  This may be useful when not using the GNU
9959           assembler.
9960
9961       -mearly-stop-bits
9962       -mno-early-stop-bits
9963           Allow stop bits to be placed earlier than immediately preceding the
9964           instruction that triggered the stop bit.  This can improve
9965           instruction scheduling, but does not always do so.
9966
9967       -mfixed-range=register-range
9968           Generate code treating the given register range as fixed registers.
9969           A fixed register is one that the register allocator can not use.
9970           This is useful when compiling kernel code.  A register range is
9971           specified as two registers separated by a dash.  Multiple register
9972           ranges can be specified separated by a comma.
9973
9974       -mtls-size=tls-size
9975           Specify bit size of immediate TLS offsets.  Valid values are 14,
9976           22, and 64.
9977
9978       -mtune=cpu-type
9979           Tune the instruction scheduling for a particular CPU, Valid values
9980           are itanium, itanium1, merced, itanium2, and mckinley.
9981
9982       -mt
9983       -pthread
9984           Add support for multithreading using the POSIX threads library.
9985           This option sets flags for both the preprocessor and linker.  It
9986           does not affect the thread safety of object code produced by the
9987           compiler or that of libraries supplied with it.  These are HP-UX
9988           specific flags.
9989
9990       -milp32
9991       -mlp64
9992           Generate code for a 32-bit or 64-bit environment.  The 32-bit
9993           environment sets int, long and pointer to 32 bits.  The 64-bit
9994           environment sets int to 32 bits and long and pointer to 64 bits.
9995           These are HP-UX specific flags.
9996
9997       -mno-sched-br-data-spec
9998       -msched-br-data-spec
9999           (Dis/En)able data speculative scheduling before reload.  This will
10000           result in generation of the ld.a instructions and the corresponding
10001           check instructions (ld.c / chk.a).  The default is 'disable'.
10002
10003       -msched-ar-data-spec
10004       -mno-sched-ar-data-spec
10005           (En/Dis)able data speculative scheduling after reload.  This will
10006           result in generation of the ld.a instructions and the corresponding
10007           check instructions (ld.c / chk.a).  The default is 'enable'.
10008
10009       -mno-sched-control-spec
10010       -msched-control-spec
10011           (Dis/En)able control speculative scheduling.  This feature is
10012           available only during region scheduling (i.e. before reload).  This
10013           will result in generation of the ld.s instructions and the
10014           corresponding check instructions chk.s .  The default is 'disable'.
10015
10016       -msched-br-in-data-spec
10017       -mno-sched-br-in-data-spec
10018           (En/Dis)able speculative scheduling of the instructions that are
10019           dependent on the data speculative loads before reload.  This is
10020           effective only with -msched-br-data-spec enabled.  The default is
10021           'enable'.
10022
10023       -msched-ar-in-data-spec
10024       -mno-sched-ar-in-data-spec
10025           (En/Dis)able speculative scheduling of the instructions that are
10026           dependent on the data speculative loads after reload.  This is
10027           effective only with -msched-ar-data-spec enabled.  The default is
10028           'enable'.
10029
10030       -msched-in-control-spec
10031       -mno-sched-in-control-spec
10032           (En/Dis)able speculative scheduling of the instructions that are
10033           dependent on the control speculative loads.  This is effective only
10034           with -msched-control-spec enabled.  The default is 'enable'.
10035
10036       -msched-ldc
10037       -mno-sched-ldc
10038           (En/Dis)able use of simple data speculation checks ld.c .  If
10039           disabled, only chk.a instructions will be emitted to check data
10040           speculative loads.  The default is 'enable'.
10041
10042       -mno-sched-control-ldc
10043       -msched-control-ldc
10044           (Dis/En)able use of ld.c instructions to check control speculative
10045           loads.  If enabled, in case of control speculative load with no
10046           speculatively scheduled dependent instructions this load will be
10047           emitted as ld.sa and ld.c will be used to check it.  The default is
10048           'disable'.
10049
10050       -mno-sched-spec-verbose
10051       -msched-spec-verbose
10052           (Dis/En)able printing of the information about speculative motions.
10053
10054       -mno-sched-prefer-non-data-spec-insns
10055       -msched-prefer-non-data-spec-insns
10056           If enabled, data speculative instructions will be chosen for
10057           schedule only if there are no other choices at the moment.  This
10058           will make the use of the data speculation much more conservative.
10059           The default is 'disable'.
10060
10061       -mno-sched-prefer-non-control-spec-insns
10062       -msched-prefer-non-control-spec-insns
10063           If enabled, control speculative instructions will be chosen for
10064           schedule only if there are no other choices at the moment.  This
10065           will make the use of the control speculation much more
10066           conservative.  The default is 'disable'.
10067
10068       -mno-sched-count-spec-in-critical-path
10069       -msched-count-spec-in-critical-path
10070           If enabled, speculative dependencies will be considered during
10071           computation of the instructions priorities.  This will make the use
10072           of the speculation a bit more conservative.  The default is
10073           'disable'.
10074
10075   M32C Options
10076       -mcpu=name
10077           Select the CPU for which code is generated.  name may be one of r8c
10078           for the R8C/Tiny series, m16c for the M16C (up to /60) series,
10079           m32cm for the M16C/80 series, or m32c for the M32C/80 series.
10080
10081       -msim
10082           Specifies that the program will be run on the simulator.  This
10083           causes an alternate runtime library to be linked in which supports,
10084           for example, file I/O.  You must not use this option when
10085           generating programs that will run on real hardware; you must
10086           provide your own runtime library for whatever I/O functions are
10087           needed.
10088
10089       -memregs=number
10090           Specifies the number of memory-based pseudo-registers GCC will use
10091           during code generation.  These pseudo-registers will be used like
10092           real registers, so there is a tradeoff between GCC's ability to fit
10093           the code into available registers, and the performance penalty of
10094           using memory instead of registers.  Note that all modules in a
10095           program must be compiled with the same value for this option.
10096           Because of that, you must not use this option with the default
10097           runtime libraries gcc builds.
10098
10099   M32R/D Options
10100       These -m options are defined for Renesas M32R/D architectures:
10101
10102       -m32r2
10103           Generate code for the M32R/2.
10104
10105       -m32rx
10106           Generate code for the M32R/X.
10107
10108       -m32r
10109           Generate code for the M32R.  This is the default.
10110
10111       -mmodel=small
10112           Assume all objects live in the lower 16MB of memory (so that their
10113           addresses can be loaded with the "ld24" instruction), and assume
10114           all subroutines are reachable with the "bl" instruction.  This is
10115           the default.
10116
10117           The addressability of a particular object can be set with the
10118           "model" attribute.
10119
10120       -mmodel=medium
10121           Assume objects may be anywhere in the 32-bit address space (the
10122           compiler will generate "seth/add3" instructions to load their
10123           addresses), and assume all subroutines are reachable with the "bl"
10124           instruction.
10125
10126       -mmodel=large
10127           Assume objects may be anywhere in the 32-bit address space (the
10128           compiler will generate "seth/add3" instructions to load their
10129           addresses), and assume subroutines may not be reachable with the
10130           "bl" instruction (the compiler will generate the much slower
10131           "seth/add3/jl" instruction sequence).
10132
10133       -msdata=none
10134           Disable use of the small data area.  Variables will be put into one
10135           of .data, bss, or .rodata (unless the "section" attribute has been
10136           specified).  This is the default.
10137
10138           The small data area consists of sections .sdata and .sbss.  Objects
10139           may be explicitly put in the small data area with the "section"
10140           attribute using one of these sections.
10141
10142       -msdata=sdata
10143           Put small global and static data in the small data area, but do not
10144           generate special code to reference them.
10145
10146       -msdata=use
10147           Put small global and static data in the small data area, and
10148           generate special instructions to reference them.
10149
10150       -G num
10151           Put global and static objects less than or equal to num bytes into
10152           the small data or bss sections instead of the normal data or bss
10153           sections.  The default value of num is 8.  The -msdata option must
10154           be set to one of sdata or use for this option to have any effect.
10155
10156           All modules should be compiled with the same -G num value.
10157           Compiling with different values of num may or may not work; if it
10158           doesn't the linker will give an error message---incorrect code will
10159           not be generated.
10160
10161       -mdebug
10162           Makes the M32R specific code in the compiler display some
10163           statistics that might help in debugging programs.
10164
10165       -malign-loops
10166           Align all loops to a 32-byte boundary.
10167
10168       -mno-align-loops
10169           Do not enforce a 32-byte alignment for loops.  This is the default.
10170
10171       -missue-rate=number
10172           Issue number instructions per cycle.  number can only be 1 or 2.
10173
10174       -mbranch-cost=number
10175           number can only be 1 or 2.  If it is 1 then branches will be
10176           preferred over conditional code, if it is 2, then the opposite will
10177           apply.
10178
10179       -mflush-trap=number
10180           Specifies the trap number to use to flush the cache.  The default
10181           is 12.  Valid numbers are between 0 and 15 inclusive.
10182
10183       -mno-flush-trap
10184           Specifies that the cache cannot be flushed by using a trap.
10185
10186       -mflush-func=name
10187           Specifies the name of the operating system function to call to
10188           flush the cache.  The default is _flush_cache, but a function call
10189           will only be used if a trap is not available.
10190
10191       -mno-flush-func
10192           Indicates that there is no OS function for flushing the cache.
10193
10194   M680x0 Options
10195       These are the -m options defined for M680x0 and ColdFire processors.
10196       The default settings depend on which architecture was selected when the
10197       compiler was configured; the defaults for the most common choices are
10198       given below.
10199
10200       -march=arch
10201           Generate code for a specific M680x0 or ColdFire instruction set
10202           architecture.  Permissible values of arch for M680x0 architectures
10203           are: 68000, 68010, 68020, 68030, 68040, 68060 and cpu32.  ColdFire
10204           architectures are selected according to Freescale's ISA
10205           classification and the permissible values are: isaa, isaaplus, isab
10206           and isac.
10207
10208           gcc defines a macro __mcfarch__ whenever it is generating code for
10209           a ColdFire target.  The arch in this macro is one of the -march
10210           arguments given above.
10211
10212           When used together, -march and -mtune select code that runs on a
10213           family of similar processors but that is optimized for a particular
10214           microarchitecture.
10215
10216       -mcpu=cpu
10217           Generate code for a specific M680x0 or ColdFire processor.  The
10218           M680x0 cpus are: 68000, 68010, 68020, 68030, 68040, 68060, 68302,
10219           68332 and cpu32.  The ColdFire cpus are given by the table below,
10220           which also classifies the CPUs into families:
10221
10222           Family : -mcpu arguments
10223           51qe : 51qe
10224           5206 : 5202 5204 5206
10225           5206e : 5206e
10226           5208 : 5207 5208
10227           5211a : 5210a 5211a
10228           5213 : 5211 5212 5213
10229           5216 : 5214 5216
10230           52235 : 52230 52231 52232 52233 52234 52235
10231           5225 : 5224 5225
10232           5235 : 5232 5233 5234 5235 523x
10233           5249 : 5249
10234           5250 : 5250
10235           5271 : 5270 5271
10236           5272 : 5272
10237           5275 : 5274 5275
10238           5282 : 5280 5281 5282 528x
10239           5307 : 5307
10240           5329 : 5327 5328 5329 532x
10241           5373 : 5372 5373 537x
10242           5407 : 5407
10243           5475 : 5470 5471 5472 5473 5474 5475 547x 5480 5481 5482 5483 5484
10244           5485
10245
10246           -mcpu=cpu overrides -march=arch if arch is compatible with cpu.
10247           Other combinations of -mcpu and -march are rejected.
10248
10249           gcc defines the macro __mcf_cpu_cpu when ColdFire target cpu is
10250           selected.  It also defines __mcf_family_family, where the value of
10251           family is given by the table above.
10252
10253       -mtune=tune
10254           Tune the code for a particular microarchitecture, within the
10255           constraints set by -march and -mcpu.  The M680x0 microarchitectures
10256           are: 68000, 68010, 68020, 68030, 68040, 68060 and cpu32.  The
10257           ColdFire microarchitectures are: cfv1, cfv2, cfv3, cfv4 and cfv4e.
10258
10259           You can also use -mtune=68020-40 for code that needs to run
10260           relatively well on 68020, 68030 and 68040 targets.  -mtune=68020-60
10261           is similar but includes 68060 targets as well.  These two options
10262           select the same tuning decisions as -m68020-40 and -m68020-60
10263           respectively.
10264
10265           gcc defines the macros __mcarch and __mcarch__ when tuning for
10266           680x0 architecture arch.  It also defines mcarch unless either
10267           -ansi or a non-GNU -std option is used.  If gcc is tuning for a
10268           range of architectures, as selected by -mtune=68020-40 or
10269           -mtune=68020-60, it defines the macros for every architecture in
10270           the range.
10271
10272           gcc also defines the macro __muarch__ when tuning for ColdFire
10273           microarchitecture uarch, where uarch is one of the arguments given
10274           above.
10275
10276       -m68000
10277       -mc68000
10278           Generate output for a 68000.  This is the default when the compiler
10279           is configured for 68000-based systems.  It is equivalent to
10280           -march=68000.
10281
10282           Use this option for microcontrollers with a 68000 or EC000 core,
10283           including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
10284
10285       -m68010
10286           Generate output for a 68010.  This is the default when the compiler
10287           is configured for 68010-based systems.  It is equivalent to
10288           -march=68010.
10289
10290       -m68020
10291       -mc68020
10292           Generate output for a 68020.  This is the default when the compiler
10293           is configured for 68020-based systems.  It is equivalent to
10294           -march=68020.
10295
10296       -m68030
10297           Generate output for a 68030.  This is the default when the compiler
10298           is configured for 68030-based systems.  It is equivalent to
10299           -march=68030.
10300
10301       -m68040
10302           Generate output for a 68040.  This is the default when the compiler
10303           is configured for 68040-based systems.  It is equivalent to
10304           -march=68040.
10305
10306           This option inhibits the use of 68881/68882 instructions that have
10307           to be emulated by software on the 68040.  Use this option if your
10308           68040 does not have code to emulate those instructions.
10309
10310       -m68060
10311           Generate output for a 68060.  This is the default when the compiler
10312           is configured for 68060-based systems.  It is equivalent to
10313           -march=68060.
10314
10315           This option inhibits the use of 68020 and 68881/68882 instructions
10316           that have to be emulated by software on the 68060.  Use this option
10317           if your 68060 does not have code to emulate those instructions.
10318
10319       -mcpu32
10320           Generate output for a CPU32.  This is the default when the compiler
10321           is configured for CPU32-based systems.  It is equivalent to
10322           -march=cpu32.
10323
10324           Use this option for microcontrollers with a CPU32 or CPU32+ core,
10325           including the 68330, 68331, 68332, 68333, 68334, 68336, 68340,
10326           68341, 68349 and 68360.
10327
10328       -m5200
10329           Generate output for a 520X ColdFire CPU.  This is the default when
10330           the compiler is configured for 520X-based systems.  It is
10331           equivalent to -mcpu=5206, and is now deprecated in favor of that
10332           option.
10333
10334           Use this option for microcontroller with a 5200 core, including the
10335           MCF5202, MCF5203, MCF5204 and MCF5206.
10336
10337       -m5206e
10338           Generate output for a 5206e ColdFire CPU.  The option is now
10339           deprecated in favor of the equivalent -mcpu=5206e.
10340
10341       -m528x
10342           Generate output for a member of the ColdFire 528X family.  The
10343           option is now deprecated in favor of the equivalent -mcpu=528x.
10344
10345       -m5307
10346           Generate output for a ColdFire 5307 CPU.  The option is now
10347           deprecated in favor of the equivalent -mcpu=5307.
10348
10349       -m5407
10350           Generate output for a ColdFire 5407 CPU.  The option is now
10351           deprecated in favor of the equivalent -mcpu=5407.
10352
10353       -mcfv4e
10354           Generate output for a ColdFire V4e family CPU (e.g. 547x/548x).
10355           This includes use of hardware floating point instructions.  The
10356           option is equivalent to -mcpu=547x, and is now deprecated in favor
10357           of that option.
10358
10359       -m68020-40
10360           Generate output for a 68040, without using any of the new
10361           instructions.  This results in code which can run relatively
10362           efficiently on either a 68020/68881 or a 68030 or a 68040.  The
10363           generated code does use the 68881 instructions that are emulated on
10364           the 68040.
10365
10366           The option is equivalent to -march=68020 -mtune=68020-40.
10367
10368       -m68020-60
10369           Generate output for a 68060, without using any of the new
10370           instructions.  This results in code which can run relatively
10371           efficiently on either a 68020/68881 or a 68030 or a 68040.  The
10372           generated code does use the 68881 instructions that are emulated on
10373           the 68060.
10374
10375           The option is equivalent to -march=68020 -mtune=68020-60.
10376
10377       -mhard-float
10378       -m68881
10379           Generate floating-point instructions.  This is the default for
10380           68020 and above, and for ColdFire devices that have an FPU.  It
10381           defines the macro __HAVE_68881__ on M680x0 targets and __mcffpu__
10382           on ColdFire targets.
10383
10384       -msoft-float
10385           Do not generate floating-point instructions; use library calls
10386           instead.  This is the default for 68000, 68010, and 68832 targets.
10387           It is also the default for ColdFire devices that have no FPU.
10388
10389       -mdiv
10390       -mno-div
10391           Generate (do not generate) ColdFire hardware divide and remainder
10392           instructions.  If -march is used without -mcpu, the default is "on"
10393           for ColdFire architectures and "off" for M680x0 architectures.
10394           Otherwise, the default is taken from the target CPU (either the
10395           default CPU, or the one specified by -mcpu).  For example, the
10396           default is "off" for -mcpu=5206 and "on" for -mcpu=5206e.
10397
10398           gcc defines the macro __mcfhwdiv__ when this option is enabled.
10399
10400       -mshort
10401           Consider type "int" to be 16 bits wide, like "short int".
10402           Additionally, parameters passed on the stack are also aligned to a
10403           16-bit boundary even on targets whose API mandates promotion to
10404           32-bit.
10405
10406       -mno-short
10407           Do not consider type "int" to be 16 bits wide.  This is the
10408           default.
10409
10410       -mnobitfield
10411       -mno-bitfield
10412           Do not use the bit-field instructions.  The -m68000, -mcpu32 and
10413           -m5200 options imply -mnobitfield.
10414
10415       -mbitfield
10416           Do use the bit-field instructions.  The -m68020 option implies
10417           -mbitfield.  This is the default if you use a configuration
10418           designed for a 68020.
10419
10420       -mrtd
10421           Use a different function-calling convention, in which functions
10422           that take a fixed number of arguments return with the "rtd"
10423           instruction, which pops their arguments while returning.  This
10424           saves one instruction in the caller since there is no need to pop
10425           the arguments there.
10426
10427           This calling convention is incompatible with the one normally used
10428           on Unix, so you cannot use it if you need to call libraries
10429           compiled with the Unix compiler.
10430
10431           Also, you must provide function prototypes for all functions that
10432           take variable numbers of arguments (including "printf"); otherwise
10433           incorrect code will be generated for calls to those functions.
10434
10435           In addition, seriously incorrect code will result if you call a
10436           function with too many arguments.  (Normally, extra arguments are
10437           harmlessly ignored.)
10438
10439           The "rtd" instruction is supported by the 68010, 68020, 68030,
10440           68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
10441
10442       -mno-rtd
10443           Do not use the calling conventions selected by -mrtd.  This is the
10444           default.
10445
10446       -malign-int
10447       -mno-align-int
10448           Control whether GCC aligns "int", "long", "long long", "float",
10449           "double", and "long double" variables on a 32-bit boundary
10450           (-malign-int) or a 16-bit boundary (-mno-align-int).  Aligning
10451           variables on 32-bit boundaries produces code that runs somewhat
10452           faster on processors with 32-bit busses at the expense of more
10453           memory.
10454
10455           Warning: if you use the -malign-int switch, GCC will align
10456           structures containing the above types  differently than most
10457           published application binary interface specifications for the m68k.
10458
10459       -mpcrel
10460           Use the pc-relative addressing mode of the 68000 directly, instead
10461           of using a global offset table.  At present, this option implies
10462           -fpic, allowing at most a 16-bit offset for pc-relative addressing.
10463           -fPIC is not presently supported with -mpcrel, though this could be
10464           supported for 68020 and higher processors.
10465
10466       -mno-strict-align
10467       -mstrict-align
10468           Do not (do) assume that unaligned memory references will be handled
10469           by the system.
10470
10471       -msep-data
10472           Generate code that allows the data segment to be located in a
10473           different area of memory from the text segment.  This allows for
10474           execute in place in an environment without virtual memory
10475           management.  This option implies -fPIC.
10476
10477       -mno-sep-data
10478           Generate code that assumes that the data segment follows the text
10479           segment.  This is the default.
10480
10481       -mid-shared-library
10482           Generate code that supports shared libraries via the library ID
10483           method.  This allows for execute in place and shared libraries in
10484           an environment without virtual memory management.  This option
10485           implies -fPIC.
10486
10487       -mno-id-shared-library
10488           Generate code that doesn't assume ID based shared libraries are
10489           being used.  This is the default.
10490
10491       -mshared-library-id=n
10492           Specified the identification number of the ID based shared library
10493           being compiled.  Specifying a value of 0 will generate more compact
10494           code, specifying other values will force the allocation of that
10495           number to the current library but is no more space or time
10496           efficient than omitting this option.
10497
10498       -mxgot
10499       -mno-xgot
10500           When generating position-independent code for ColdFire, generate
10501           code that works if the GOT has more than 8192 entries.  This code
10502           is larger and slower than code generated without this option.  On
10503           M680x0 processors, this option is not needed; -fPIC suffices.
10504
10505           GCC normally uses a single instruction to load values from the GOT.
10506           While this is relatively efficient, it only works if the GOT is
10507           smaller than about 64k.  Anything larger causes the linker to
10508           report an error such as:
10509
10510                   relocation truncated to fit: R_68K_GOT16O foobar
10511
10512           If this happens, you should recompile your code with -mxgot.  It
10513           should then work with very large GOTs.  However, code generated
10514           with -mxgot is less efficient, since it takes 4 instructions to
10515           fetch the value of a global symbol.
10516
10517           Note that some linkers, including newer versions of the GNU linker,
10518           can create multiple GOTs and sort GOT entries.  If you have such a
10519           linker, you should only need to use -mxgot when compiling a single
10520           object file that accesses more than 8192 GOT entries.  Very few do.
10521
10522           These options have no effect unless GCC is generating position-
10523           independent code.
10524
10525   M68hc1x Options
10526       These are the -m options defined for the 68hc11 and 68hc12
10527       microcontrollers.  The default values for these options depends on
10528       which style of microcontroller was selected when the compiler was
10529       configured; the defaults for the most common choices are given below.
10530
10531       -m6811
10532       -m68hc11
10533           Generate output for a 68HC11.  This is the default when the
10534           compiler is configured for 68HC11-based systems.
10535
10536       -m6812
10537       -m68hc12
10538           Generate output for a 68HC12.  This is the default when the
10539           compiler is configured for 68HC12-based systems.
10540
10541       -m68S12
10542       -m68hcs12
10543           Generate output for a 68HCS12.
10544
10545       -mauto-incdec
10546           Enable the use of 68HC12 pre and post auto-increment and auto-
10547           decrement addressing modes.
10548
10549       -minmax
10550       -nominmax
10551           Enable the use of 68HC12 min and max instructions.
10552
10553       -mlong-calls
10554       -mno-long-calls
10555           Treat all calls as being far away (near).  If calls are assumed to
10556           be far away, the compiler will use the "call" instruction to call a
10557           function and the "rtc" instruction for returning.
10558
10559       -mshort
10560           Consider type "int" to be 16 bits wide, like "short int".
10561
10562       -msoft-reg-count=count
10563           Specify the number of pseudo-soft registers which are used for the
10564           code generation.  The maximum number is 32.  Using more pseudo-soft
10565           register may or may not result in better code depending on the
10566           program.  The default is 4 for 68HC11 and 2 for 68HC12.
10567
10568   MCore Options
10569       These are the -m options defined for the Motorola M*Core processors.
10570
10571       -mhardlit
10572       -mno-hardlit
10573           Inline constants into the code stream if it can be done in two
10574           instructions or less.
10575
10576       -mdiv
10577       -mno-div
10578           Use the divide instruction.  (Enabled by default).
10579
10580       -mrelax-immediate
10581       -mno-relax-immediate
10582           Allow arbitrary sized immediates in bit operations.
10583
10584       -mwide-bitfields
10585       -mno-wide-bitfields
10586           Always treat bit-fields as int-sized.
10587
10588       -m4byte-functions
10589       -mno-4byte-functions
10590           Force all functions to be aligned to a four byte boundary.
10591
10592       -mcallgraph-data
10593       -mno-callgraph-data
10594           Emit callgraph information.
10595
10596       -mslow-bytes
10597       -mno-slow-bytes
10598           Prefer word access when reading byte quantities.
10599
10600       -mlittle-endian
10601       -mbig-endian
10602           Generate code for a little endian target.
10603
10604       -m210
10605       -m340
10606           Generate code for the 210 processor.
10607
10608       -mno-lsim
10609           Assume that run-time support has been provided and so omit the
10610           simulator library (libsim.a) from the linker command line.
10611
10612       -mstack-increment=size
10613           Set the maximum amount for a single stack increment operation.
10614           Large values can increase the speed of programs which contain
10615           functions that need a large amount of stack space, but they can
10616           also trigger a segmentation fault if the stack is extended too
10617           much.  The default value is 0x1000.
10618
10619   MIPS Options
10620       -EB Generate big-endian code.
10621
10622       -EL Generate little-endian code.  This is the default for mips*el-*-*
10623           configurations.
10624
10625       -march=arch
10626           Generate code that will run on arch, which can be the name of a
10627           generic MIPS ISA, or the name of a particular processor.  The ISA
10628           names are: mips1, mips2, mips3, mips4, mips32, mips32r2, mips64 and
10629           mips64r2.  The processor names are: 4kc, 4km, 4kp, 4ksc, 4kec,
10630           4kem, 4kep, 4ksd, 5kc, 5kf, 20kc, 24kc, 24kf2_1, 24kf1_1, 24kec,
10631           24kef2_1, 24kef1_1, 34kc, 34kf2_1, 34kf1_1, 74kc, 74kf2_1, 74kf1_1,
10632           74kf3_2, loongson2e, loongson2f, m4k, octeon, orion, r2000, r3000,
10633           r3900, r4000, r4400, r4600, r4650, r6000, r8000, rm7000, rm9000,
10634           r10000, r12000, r14000, r16000, sb1, sr71000, vr4100, vr4111,
10635           vr4120, vr4130, vr4300, vr5000, vr5400, vr5500 and xlr.  The
10636           special value from-abi selects the most compatible architecture for
10637           the selected ABI (that is, mips1 for 32-bit ABIs and mips3 for
10638           64-bit ABIs).
10639
10640           Native Linux/GNU toolchains also support the value native, which
10641           selects the best architecture option for the host processor.
10642           -march=native has no effect if GCC does not recognize the
10643           processor.
10644
10645           In processor names, a final 000 can be abbreviated as k (for
10646           example, -march=r2k).  Prefixes are optional, and vr may be written
10647           r.
10648
10649           Names of the form nf2_1 refer to processors with FPUs clocked at
10650           half the rate of the core, names of the form nf1_1 refer to
10651           processors with FPUs clocked at the same rate as the core, and
10652           names of the form nf3_2 refer to processors with FPUs clocked a
10653           ratio of 3:2 with respect to the core.  For compatibility reasons,
10654           nf is accepted as a synonym for nf2_1 while nx and bfx are accepted
10655           as synonyms for nf1_1.
10656
10657           GCC defines two macros based on the value of this option.  The
10658           first is _MIPS_ARCH, which gives the name of target architecture,
10659           as a string.  The second has the form _MIPS_ARCH_foo, where foo is
10660           the capitalized value of _MIPS_ARCH.  For example, -march=r2000
10661           will set _MIPS_ARCH to "r2000" and define the macro
10662           _MIPS_ARCH_R2000.
10663
10664           Note that the _MIPS_ARCH macro uses the processor names given
10665           above.  In other words, it will have the full prefix and will not
10666           abbreviate 000 as k.  In the case of from-abi, the macro names the
10667           resolved architecture (either "mips1" or "mips3").  It names the
10668           default architecture when no -march option is given.
10669
10670       -mtune=arch
10671           Optimize for arch.  Among other things, this option controls the
10672           way instructions are scheduled, and the perceived cost of
10673           arithmetic operations.  The list of arch values is the same as for
10674           -march.
10675
10676           When this option is not used, GCC will optimize for the processor
10677           specified by -march.  By using -march and -mtune together, it is
10678           possible to generate code that will run on a family of processors,
10679           but optimize the code for one particular member of that family.
10680
10681           -mtune defines the macros _MIPS_TUNE and _MIPS_TUNE_foo, which work
10682           in the same way as the -march ones described above.
10683
10684       -mips1
10685           Equivalent to -march=mips1.
10686
10687       -mips2
10688           Equivalent to -march=mips2.
10689
10690       -mips3
10691           Equivalent to -march=mips3.
10692
10693       -mips4
10694           Equivalent to -march=mips4.
10695
10696       -mips32
10697           Equivalent to -march=mips32.
10698
10699       -mips32r2
10700           Equivalent to -march=mips32r2.
10701
10702       -mips64
10703           Equivalent to -march=mips64.
10704
10705       -mips64r2
10706           Equivalent to -march=mips64r2.
10707
10708       -mips16
10709       -mno-mips16
10710           Generate (do not generate) MIPS16 code.  If GCC is targetting a
10711           MIPS32 or MIPS64 architecture, it will make use of the MIPS16e ASE.
10712
10713           MIPS16 code generation can also be controlled on a per-function
10714           basis by means of "mips16" and "nomips16" attributes.
10715
10716       -mflip-mips16
10717           Generate MIPS16 code on alternating functions.  This option is
10718           provided for regression testing of mixed MIPS16/non-MIPS16 code
10719           generation, and is not intended for ordinary use in compiling user
10720           code.
10721
10722       -minterlink-mips16
10723       -mno-interlink-mips16
10724           Require (do not require) that non-MIPS16 code be link-compatible
10725           with MIPS16 code.
10726
10727           For example, non-MIPS16 code cannot jump directly to MIPS16 code;
10728           it must either use a call or an indirect jump.  -minterlink-mips16
10729           therefore disables direct jumps unless GCC knows that the target of
10730           the jump is not MIPS16.
10731
10732       -mabi=32
10733       -mabi=o64
10734       -mabi=n32
10735       -mabi=64
10736       -mabi=eabi
10737           Generate code for the given ABI.
10738
10739           Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
10740           generates 64-bit code when you select a 64-bit architecture, but
10741           you can use -mgp32 to get 32-bit code instead.
10742
10743           For information about the O64 ABI, see
10744           <http://gcc.gnu.org/projects/mipso64-abi.html>.
10745
10746           GCC supports a variant of the o32 ABI in which floating-point
10747           registers are 64 rather than 32 bits wide.  You can select this
10748           combination with -mabi=32 -mfp64.  This ABI relies on the mthc1 and
10749           mfhc1 instructions and is therefore only supported for MIPS32R2
10750           processors.
10751
10752           The register assignments for arguments and return values remain the
10753           same, but each scalar value is passed in a single 64-bit register
10754           rather than a pair of 32-bit registers.  For example, scalar
10755           floating-point values are returned in $f0 only, not a $f0/$f1 pair.
10756           The set of call-saved registers also remains the same, but all 64
10757           bits are saved.
10758
10759       -mabicalls
10760       -mno-abicalls
10761           Generate (do not generate) code that is suitable for SVR4-style
10762           dynamic objects.  -mabicalls is the default for SVR4-based systems.
10763
10764       -mshared
10765       -mno-shared
10766           Generate (do not generate) code that is fully position-independent,
10767           and that can therefore be linked into shared libraries.  This
10768           option only affects -mabicalls.
10769
10770           All -mabicalls code has traditionally been position-independent,
10771           regardless of options like -fPIC and -fpic.  However, as an
10772           extension, the GNU toolchain allows executables to use absolute
10773           accesses for locally-binding symbols.  It can also use shorter GP
10774           initialization sequences and generate direct calls to locally-
10775           defined functions.  This mode is selected by -mno-shared.
10776
10777           -mno-shared depends on binutils 2.16 or higher and generates
10778           objects that can only be linked by the GNU linker.  However, the
10779           option does not affect the ABI of the final executable; it only
10780           affects the ABI of relocatable objects.  Using -mno-shared will
10781           generally make executables both smaller and quicker.
10782
10783           -mshared is the default.
10784
10785       -mplt
10786       -mno-plt
10787           Assume (do not assume) that the static and dynamic linkers support
10788           PLTs and copy relocations.  This option only affects -mno-shared
10789           -mabicalls.  For the n64 ABI, this option has no effect without
10790           -msym32.
10791
10792           You can make -mplt the default by configuring GCC with
10793           --with-mips-plt.  The default is -mno-plt otherwise.
10794
10795       -mxgot
10796       -mno-xgot
10797           Lift (do not lift) the usual restrictions on the size of the global
10798           offset table.
10799
10800           GCC normally uses a single instruction to load values from the GOT.
10801           While this is relatively efficient, it will only work if the GOT is
10802           smaller than about 64k.  Anything larger will cause the linker to
10803           report an error such as:
10804
10805                   relocation truncated to fit: R_MIPS_GOT16 foobar
10806
10807           If this happens, you should recompile your code with -mxgot.  It
10808           should then work with very large GOTs, although it will also be
10809           less efficient, since it will take three instructions to fetch the
10810           value of a global symbol.
10811
10812           Note that some linkers can create multiple GOTs.  If you have such
10813           a linker, you should only need to use -mxgot when a single object
10814           file accesses more than 64k's worth of GOT entries.  Very few do.
10815
10816           These options have no effect unless GCC is generating position
10817           independent code.
10818
10819       -mgp32
10820           Assume that general-purpose registers are 32 bits wide.
10821
10822       -mgp64
10823           Assume that general-purpose registers are 64 bits wide.
10824
10825       -mfp32
10826           Assume that floating-point registers are 32 bits wide.
10827
10828       -mfp64
10829           Assume that floating-point registers are 64 bits wide.
10830
10831       -mhard-float
10832           Use floating-point coprocessor instructions.
10833
10834       -msoft-float
10835           Do not use floating-point coprocessor instructions.  Implement
10836           floating-point calculations using library calls instead.
10837
10838       -msingle-float
10839           Assume that the floating-point coprocessor only supports single-
10840           precision operations.
10841
10842       -mdouble-float
10843           Assume that the floating-point coprocessor supports double-
10844           precision operations.  This is the default.
10845
10846       -mllsc
10847       -mno-llsc
10848           Use (do not use) ll, sc, and sync instructions to implement atomic
10849           memory built-in functions.  When neither option is specified, GCC
10850           will use the instructions if the target architecture supports them.
10851
10852           -mllsc is useful if the runtime environment can emulate the
10853           instructions and -mno-llsc can be useful when compiling for
10854           nonstandard ISAs.  You can make either option the default by
10855           configuring GCC with --with-llsc and --without-llsc respectively.
10856           --with-llsc is the default for some configurations; see the
10857           installation documentation for details.
10858
10859       -mdsp
10860       -mno-dsp
10861           Use (do not use) revision 1 of the MIPS DSP ASE.
10862             This option defines the preprocessor macro __mips_dsp.  It also
10863           defines __mips_dsp_rev to 1.
10864
10865       -mdspr2
10866       -mno-dspr2
10867           Use (do not use) revision 2 of the MIPS DSP ASE.
10868             This option defines the preprocessor macros __mips_dsp and
10869           __mips_dspr2.  It also defines __mips_dsp_rev to 2.
10870
10871       -msmartmips
10872       -mno-smartmips
10873           Use (do not use) the MIPS SmartMIPS ASE.
10874
10875       -mpaired-single
10876       -mno-paired-single
10877           Use (do not use) paired-single floating-point instructions.
10878             This option requires hardware floating-point support to be
10879           enabled.
10880
10881       -mdmx
10882       -mno-mdmx
10883           Use (do not use) MIPS Digital Media Extension instructions.  This
10884           option can only be used when generating 64-bit code and requires
10885           hardware floating-point support to be enabled.
10886
10887       -mips3d
10888       -mno-mips3d
10889           Use (do not use) the MIPS-3D ASE.  The option -mips3d implies
10890           -mpaired-single.
10891
10892       -mmt
10893       -mno-mt
10894           Use (do not use) MT Multithreading instructions.
10895
10896       -mlong64
10897           Force "long" types to be 64 bits wide.  See -mlong32 for an
10898           explanation of the default and the way that the pointer size is
10899           determined.
10900
10901       -mlong32
10902           Force "long", "int", and pointer types to be 32 bits wide.
10903
10904           The default size of "int"s, "long"s and pointers depends on the
10905           ABI.  All the supported ABIs use 32-bit "int"s.  The n64 ABI uses
10906           64-bit "long"s, as does the 64-bit EABI; the others use 32-bit
10907           "long"s.  Pointers are the same size as "long"s, or the same size
10908           as integer registers, whichever is smaller.
10909
10910       -msym32
10911       -mno-sym32
10912           Assume (do not assume) that all symbols have 32-bit values,
10913           regardless of the selected ABI.  This option is useful in
10914           combination with -mabi=64 and -mno-abicalls because it allows GCC
10915           to generate shorter and faster references to symbolic addresses.
10916
10917       -G num
10918           Put definitions of externally-visible data in a small data section
10919           if that data is no bigger than num bytes.  GCC can then access the
10920           data more efficiently; see -mgpopt for details.
10921
10922           The default -G option depends on the configuration.
10923
10924       -mlocal-sdata
10925       -mno-local-sdata
10926           Extend (do not extend) the -G behavior to local data too, such as
10927           to static variables in C.  -mlocal-sdata is the default for all
10928           configurations.
10929
10930           If the linker complains that an application is using too much small
10931           data, you might want to try rebuilding the less performance-
10932           critical parts with -mno-local-sdata.  You might also want to build
10933           large libraries with -mno-local-sdata, so that the libraries leave
10934           more room for the main program.
10935
10936       -mextern-sdata
10937       -mno-extern-sdata
10938           Assume (do not assume) that externally-defined data will be in a
10939           small data section if that data is within the -G limit.
10940           -mextern-sdata is the default for all configurations.
10941
10942           If you compile a module Mod with -mextern-sdata -G num -mgpopt, and
10943           Mod references a variable Var that is no bigger than num bytes, you
10944           must make sure that Var is placed in a small data section.  If Var
10945           is defined by another module, you must either compile that module
10946           with a high-enough -G setting or attach a "section" attribute to
10947           Var's definition.  If Var is common, you must link the application
10948           with a high-enough -G setting.
10949
10950           The easiest way of satisfying these restrictions is to compile and
10951           link every module with the same -G option.  However, you may wish
10952           to build a library that supports several different small data
10953           limits.  You can do this by compiling the library with the highest
10954           supported -G setting and additionally using -mno-extern-sdata to
10955           stop the library from making assumptions about externally-defined
10956           data.
10957
10958       -mgpopt
10959       -mno-gpopt
10960           Use (do not use) GP-relative accesses for symbols that are known to
10961           be in a small data section; see -G, -mlocal-sdata and
10962           -mextern-sdata.  -mgpopt is the default for all configurations.
10963
10964           -mno-gpopt is useful for cases where the $gp register might not
10965           hold the value of "_gp".  For example, if the code is part of a
10966           library that might be used in a boot monitor, programs that call
10967           boot monitor routines will pass an unknown value in $gp.  (In such
10968           situations, the boot monitor itself would usually be compiled with
10969           -G0.)
10970
10971           -mno-gpopt implies -mno-local-sdata and -mno-extern-sdata.
10972
10973       -membedded-data
10974       -mno-embedded-data
10975           Allocate variables to the read-only data section first if possible,
10976           then next in the small data section if possible, otherwise in data.
10977           This gives slightly slower code than the default, but reduces the
10978           amount of RAM required when executing, and thus may be preferred
10979           for some embedded systems.
10980
10981       -muninit-const-in-rodata
10982       -mno-uninit-const-in-rodata
10983           Put uninitialized "const" variables in the read-only data section.
10984           This option is only meaningful in conjunction with -membedded-data.
10985
10986       -mcode-readable=setting
10987           Specify whether GCC may generate code that reads from executable
10988           sections.  There are three possible settings:
10989
10990           -mcode-readable=yes
10991               Instructions may freely access executable sections.  This is
10992               the default setting.
10993
10994           -mcode-readable=pcrel
10995               MIPS16 PC-relative load instructions can access executable
10996               sections, but other instructions must not do so.  This option
10997               is useful on 4KSc and 4KSd processors when the code TLBs have
10998               the Read Inhibit bit set.  It is also useful on processors that
10999               can be configured to have a dual instruction/data SRAM
11000               interface and that, like the M4K, automatically redirect PC-
11001               relative loads to the instruction RAM.
11002
11003           -mcode-readable=no
11004               Instructions must not access executable sections.  This option
11005               can be useful on targets that are configured to have a dual
11006               instruction/data SRAM interface but that (unlike the M4K) do
11007               not automatically redirect PC-relative loads to the instruction
11008               RAM.
11009
11010       -msplit-addresses
11011       -mno-split-addresses
11012           Enable (disable) use of the "%hi()" and "%lo()" assembler
11013           relocation operators.  This option has been superseded by
11014           -mexplicit-relocs but is retained for backwards compatibility.
11015
11016       -mexplicit-relocs
11017       -mno-explicit-relocs
11018           Use (do not use) assembler relocation operators when dealing with
11019           symbolic addresses.  The alternative, selected by
11020           -mno-explicit-relocs, is to use assembler macros instead.
11021
11022           -mexplicit-relocs is the default if GCC was configured to use an
11023           assembler that supports relocation operators.
11024
11025       -mcheck-zero-division
11026       -mno-check-zero-division
11027           Trap (do not trap) on integer division by zero.
11028
11029           The default is -mcheck-zero-division.
11030
11031       -mdivide-traps
11032       -mdivide-breaks
11033           MIPS systems check for division by zero by generating either a
11034           conditional trap or a break instruction.  Using traps results in
11035           smaller code, but is only supported on MIPS II and later.  Also,
11036           some versions of the Linux kernel have a bug that prevents trap
11037           from generating the proper signal ("SIGFPE").  Use -mdivide-traps
11038           to allow conditional traps on architectures that support them and
11039           -mdivide-breaks to force the use of breaks.
11040
11041           The default is usually -mdivide-traps, but this can be overridden
11042           at configure time using --with-divide=breaks.  Divide-by-zero
11043           checks can be completely disabled using -mno-check-zero-division.
11044
11045       -mmemcpy
11046       -mno-memcpy
11047           Force (do not force) the use of "memcpy()" for non-trivial block
11048           moves.  The default is -mno-memcpy, which allows GCC to inline most
11049           constant-sized copies.
11050
11051       -mlong-calls
11052       -mno-long-calls
11053           Disable (do not disable) use of the "jal" instruction.  Calling
11054           functions using "jal" is more efficient but requires the caller and
11055           callee to be in the same 256 megabyte segment.
11056
11057           This option has no effect on abicalls code.  The default is
11058           -mno-long-calls.
11059
11060       -mmad
11061       -mno-mad
11062           Enable (disable) use of the "mad", "madu" and "mul" instructions,
11063           as provided by the R4650 ISA.
11064
11065       -mfused-madd
11066       -mno-fused-madd
11067           Enable (disable) use of the floating point multiply-accumulate
11068           instructions, when they are available.  The default is
11069           -mfused-madd.
11070
11071           When multiply-accumulate instructions are used, the intermediate
11072           product is calculated to infinite precision and is not subject to
11073           the FCSR Flush to Zero bit.  This may be undesirable in some
11074           circumstances.
11075
11076       -nocpp
11077           Tell the MIPS assembler to not run its preprocessor over user
11078           assembler files (with a .s suffix) when assembling them.
11079
11080       -mfix-r4000
11081       -mno-fix-r4000
11082           Work around certain R4000 CPU errata:
11083
11084           -   A double-word or a variable shift may give an incorrect result
11085               if executed immediately after starting an integer division.
11086
11087           -   A double-word or a variable shift may give an incorrect result
11088               if executed while an integer multiplication is in progress.
11089
11090           -   An integer division may give an incorrect result if started in
11091               a delay slot of a taken branch or a jump.
11092
11093       -mfix-r4400
11094       -mno-fix-r4400
11095           Work around certain R4400 CPU errata:
11096
11097           -   A double-word or a variable shift may give an incorrect result
11098               if executed immediately after starting an integer division.
11099
11100       -mfix-r10000
11101       -mno-fix-r10000
11102           Work around certain R10000 errata:
11103
11104           -   "ll"/"sc" sequences may not behave atomically on revisions
11105               prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
11106
11107           This option can only be used if the target architecture supports
11108           branch-likely instructions.  -mfix-r10000 is the default when
11109           -march=r10000 is used; -mno-fix-r10000 is the default otherwise.
11110
11111       -mfix-vr4120
11112       -mno-fix-vr4120
11113           Work around certain VR4120 errata:
11114
11115           -   "dmultu" does not always produce the correct result.
11116
11117           -   "div" and "ddiv" do not always produce the correct result if
11118               one of the operands is negative.
11119
11120           The workarounds for the division errata rely on special functions
11121           in libgcc.a.  At present, these functions are only provided by the
11122           "mips64vr*-elf" configurations.
11123
11124           Other VR4120 errata require a nop to be inserted between certain
11125           pairs of instructions.  These errata are handled by the assembler,
11126           not by GCC itself.
11127
11128       -mfix-vr4130
11129           Work around the VR4130 "mflo"/"mfhi" errata.  The workarounds are
11130           implemented by the assembler rather than by GCC, although GCC will
11131           avoid using "mflo" and "mfhi" if the VR4130 "macc", "macchi",
11132           "dmacc" and "dmacchi" instructions are available instead.
11133
11134       -mfix-sb1
11135       -mno-fix-sb1
11136           Work around certain SB-1 CPU core errata.  (This flag currently
11137           works around the SB-1 revision 2 "F1" and "F2" floating point
11138           errata.)
11139
11140       -mr10k-cache-barrier=setting
11141           Specify whether GCC should insert cache barriers to avoid the side-
11142           effects of speculation on R10K processors.
11143
11144           In common with many processors, the R10K tries to predict the
11145           outcome of a conditional branch and speculatively executes
11146           instructions from the "taken" branch.  It later aborts these
11147           instructions if the predicted outcome was wrong.  However, on the
11148           R10K, even aborted instructions can have side effects.
11149
11150           This problem only affects kernel stores and, depending on the
11151           system, kernel loads.  As an example, a speculatively-executed
11152           store may load the target memory into cache and mark the cache line
11153           as dirty, even if the store itself is later aborted.  If a DMA
11154           operation writes to the same area of memory before the "dirty" line
11155           is flushed, the cached data will overwrite the DMA-ed data.  See
11156           the R10K processor manual for a full description, including other
11157           potential problems.
11158
11159           One workaround is to insert cache barrier instructions before every
11160           memory access that might be speculatively executed and that might
11161           have side effects even if aborted.  -mr10k-cache-barrier=setting
11162           controls GCC's implementation of this workaround.  It assumes that
11163           aborted accesses to any byte in the following regions will not have
11164           side effects:
11165
11166           1.  the memory occupied by the current function's stack frame;
11167
11168           2.  the memory occupied by an incoming stack argument;
11169
11170           3.  the memory occupied by an object with a link-time-constant
11171               address.
11172
11173           It is the kernel's responsibility to ensure that speculative
11174           accesses to these regions are indeed safe.
11175
11176           If the input program contains a function declaration such as:
11177
11178                   void foo (void);
11179
11180           then the implementation of "foo" must allow "j foo" and "jal foo"
11181           to be executed speculatively.  GCC honors this restriction for
11182           functions it compiles itself.  It expects non-GCC functions (such
11183           as hand-written assembly code) to do the same.
11184
11185           The option has three forms:
11186
11187           -mr10k-cache-barrier=load-store
11188               Insert a cache barrier before a load or store that might be
11189               speculatively executed and that might have side effects even if
11190               aborted.
11191
11192           -mr10k-cache-barrier=store
11193               Insert a cache barrier before a store that might be
11194               speculatively executed and that might have side effects even if
11195               aborted.
11196
11197           -mr10k-cache-barrier=none
11198               Disable the insertion of cache barriers.  This is the default
11199               setting.
11200
11201       -mflush-func=func
11202       -mno-flush-func
11203           Specifies the function to call to flush the I and D caches, or to
11204           not call any such function.  If called, the function must take the
11205           same arguments as the common "_flush_func()", that is, the address
11206           of the memory range for which the cache is being flushed, the size
11207           of the memory range, and the number 3 (to flush both caches).  The
11208           default depends on the target GCC was configured for, but commonly
11209           is either _flush_func or __cpu_flush.
11210
11211       mbranch-cost=num
11212           Set the cost of branches to roughly num "simple" instructions.
11213           This cost is only a heuristic and is not guaranteed to produce
11214           consistent results across releases.  A zero cost redundantly
11215           selects the default, which is based on the -mtune setting.
11216
11217       -mbranch-likely
11218       -mno-branch-likely
11219           Enable or disable use of Branch Likely instructions, regardless of
11220           the default for the selected architecture.  By default, Branch
11221           Likely instructions may be generated if they are supported by the
11222           selected architecture.  An exception is for the MIPS32 and MIPS64
11223           architectures and processors which implement those architectures;
11224           for those, Branch Likely instructions will not be generated by
11225           default because the MIPS32 and MIPS64 architectures specifically
11226           deprecate their use.
11227
11228       -mfp-exceptions
11229       -mno-fp-exceptions
11230           Specifies whether FP exceptions are enabled.  This affects how we
11231           schedule FP instructions for some processors.  The default is that
11232           FP exceptions are enabled.
11233
11234           For instance, on the SB-1, if FP exceptions are disabled, and we
11235           are emitting 64-bit code, then we can use both FP pipes.
11236           Otherwise, we can only use one FP pipe.
11237
11238       -mvr4130-align
11239       -mno-vr4130-align
11240           The VR4130 pipeline is two-way superscalar, but can only issue two
11241           instructions together if the first one is 8-byte aligned.  When
11242           this option is enabled, GCC will align pairs of instructions that
11243           it thinks should execute in parallel.
11244
11245           This option only has an effect when optimizing for the VR4130.  It
11246           normally makes code faster, but at the expense of making it bigger.
11247           It is enabled by default at optimization level -O3.
11248
11249   MMIX Options
11250       These options are defined for the MMIX:
11251
11252       -mlibfuncs
11253       -mno-libfuncs
11254           Specify that intrinsic library functions are being compiled,
11255           passing all values in registers, no matter the size.
11256
11257       -mepsilon
11258       -mno-epsilon
11259           Generate floating-point comparison instructions that compare with
11260           respect to the "rE" epsilon register.
11261
11262       -mabi=mmixware
11263       -mabi=gnu
11264           Generate code that passes function parameters and return values
11265           that (in the called function) are seen as registers $0 and up, as
11266           opposed to the GNU ABI which uses global registers $231 and up.
11267
11268       -mzero-extend
11269       -mno-zero-extend
11270           When reading data from memory in sizes shorter than 64 bits, use
11271           (do not use) zero-extending load instructions by default, rather
11272           than sign-extending ones.
11273
11274       -mknuthdiv
11275       -mno-knuthdiv
11276           Make the result of a division yielding a remainder have the same
11277           sign as the divisor.  With the default, -mno-knuthdiv, the sign of
11278           the remainder follows the sign of the dividend.  Both methods are
11279           arithmetically valid, the latter being almost exclusively used.
11280
11281       -mtoplevel-symbols
11282       -mno-toplevel-symbols
11283           Prepend (do not prepend) a : to all global symbols, so the assembly
11284           code can be used with the "PREFIX" assembly directive.
11285
11286       -melf
11287           Generate an executable in the ELF format, rather than the default
11288           mmo format used by the mmix simulator.
11289
11290       -mbranch-predict
11291       -mno-branch-predict
11292           Use (do not use) the probable-branch instructions, when static
11293           branch prediction indicates a probable branch.
11294
11295       -mbase-addresses
11296       -mno-base-addresses
11297           Generate (do not generate) code that uses base addresses.  Using a
11298           base address automatically generates a request (handled by the
11299           assembler and the linker) for a constant to be set up in a global
11300           register.  The register is used for one or more base address
11301           requests within the range 0 to 255 from the value held in the
11302           register.  The generally leads to short and fast code, but the
11303           number of different data items that can be addressed is limited.
11304           This means that a program that uses lots of static data may require
11305           -mno-base-addresses.
11306
11307       -msingle-exit
11308       -mno-single-exit
11309           Force (do not force) generated code to have a single exit point in
11310           each function.
11311
11312   MN10300 Options
11313       These -m options are defined for Matsushita MN10300 architectures:
11314
11315       -mmult-bug
11316           Generate code to avoid bugs in the multiply instructions for the
11317           MN10300 processors.  This is the default.
11318
11319       -mno-mult-bug
11320           Do not generate code to avoid bugs in the multiply instructions for
11321           the MN10300 processors.
11322
11323       -mam33
11324           Generate code which uses features specific to the AM33 processor.
11325
11326       -mno-am33
11327           Do not generate code which uses features specific to the AM33
11328           processor.  This is the default.
11329
11330       -mreturn-pointer-on-d0
11331           When generating a function which returns a pointer, return the
11332           pointer in both "a0" and "d0".  Otherwise, the pointer is returned
11333           only in a0, and attempts to call such functions without a prototype
11334           would result in errors.  Note that this option is on by default;
11335           use -mno-return-pointer-on-d0 to disable it.
11336
11337       -mno-crt0
11338           Do not link in the C run-time initialization object file.
11339
11340       -mrelax
11341           Indicate to the linker that it should perform a relaxation
11342           optimization pass to shorten branches, calls and absolute memory
11343           addresses.  This option only has an effect when used on the command
11344           line for the final link step.
11345
11346           This option makes symbolic debugging impossible.
11347
11348   PDP-11 Options
11349       These options are defined for the PDP-11:
11350
11351       -mfpu
11352           Use hardware FPP floating point.  This is the default.  (FIS
11353           floating point on the PDP-11/40 is not supported.)
11354
11355       -msoft-float
11356           Do not use hardware floating point.
11357
11358       -mac0
11359           Return floating-point results in ac0 (fr0 in Unix assembler
11360           syntax).
11361
11362       -mno-ac0
11363           Return floating-point results in memory.  This is the default.
11364
11365       -m40
11366           Generate code for a PDP-11/40.
11367
11368       -m45
11369           Generate code for a PDP-11/45.  This is the default.
11370
11371       -m10
11372           Generate code for a PDP-11/10.
11373
11374       -mbcopy-builtin
11375           Use inline "movmemhi" patterns for copying memory.  This is the
11376           default.
11377
11378       -mbcopy
11379           Do not use inline "movmemhi" patterns for copying memory.
11380
11381       -mint16
11382       -mno-int32
11383           Use 16-bit "int".  This is the default.
11384
11385       -mint32
11386       -mno-int16
11387           Use 32-bit "int".
11388
11389       -mfloat64
11390       -mno-float32
11391           Use 64-bit "float".  This is the default.
11392
11393       -mfloat32
11394       -mno-float64
11395           Use 32-bit "float".
11396
11397       -mabshi
11398           Use "abshi2" pattern.  This is the default.
11399
11400       -mno-abshi
11401           Do not use "abshi2" pattern.
11402
11403       -mbranch-expensive
11404           Pretend that branches are expensive.  This is for experimenting
11405           with code generation only.
11406
11407       -mbranch-cheap
11408           Do not pretend that branches are expensive.  This is the default.
11409
11410       -msplit
11411           Generate code for a system with split I&D.
11412
11413       -mno-split
11414           Generate code for a system without split I&D.  This is the default.
11415
11416       -munix-asm
11417           Use Unix assembler syntax.  This is the default when configured for
11418           pdp11-*-bsd.
11419
11420       -mdec-asm
11421           Use DEC assembler syntax.  This is the default when configured for
11422           any PDP-11 target other than pdp11-*-bsd.
11423
11424   picoChip Options
11425       These -m options are defined for picoChip implementations:
11426
11427       -mae=ae_type
11428           Set the instruction set, register set, and instruction scheduling
11429           parameters for array element type ae_type.  Supported values for
11430           ae_type are ANY, MUL, and MAC.
11431
11432           -mae=ANY selects a completely generic AE type.  Code generated with
11433           this option will run on any of the other AE types.  The code will
11434           not be as efficient as it would be if compiled for a specific AE
11435           type, and some types of operation (e.g., multiplication) will not
11436           work properly on all types of AE.
11437
11438           -mae=MUL selects a MUL AE type.  This is the most useful AE type
11439           for compiled code, and is the default.
11440
11441           -mae=MAC selects a DSP-style MAC AE.  Code compiled with this
11442           option may suffer from poor performance of byte (char)
11443           manipulation, since the DSP AE does not provide hardware support
11444           for byte load/stores.
11445
11446       -msymbol-as-address
11447           Enable the compiler to directly use a symbol name as an address in
11448           a load/store instruction, without first loading it into a register.
11449           Typically, the use of this option will generate larger programs,
11450           which run faster than when the option isn't used.  However, the
11451           results vary from program to program, so it is left as a user
11452           option, rather than being permanently enabled.
11453
11454       -mno-inefficient-warnings
11455           Disables warnings about the generation of inefficient code.  These
11456           warnings can be generated, for example, when compiling code which
11457           performs byte-level memory operations on the MAC AE type.  The MAC
11458           AE has no hardware support for byte-level memory operations, so all
11459           byte load/stores must be synthesized from word load/store
11460           operations.  This is inefficient and a warning will be generated
11461           indicating to the programmer that they should rewrite the code to
11462           avoid byte operations, or to target an AE type which has the
11463           necessary hardware support.  This option enables the warning to be
11464           turned off.
11465
11466   PowerPC Options
11467       These are listed under
11468
11469   IBM RS/6000 and PowerPC Options
11470       These -m options are defined for the IBM RS/6000 and PowerPC:
11471
11472       -mpower
11473       -mno-power
11474       -mpower2
11475       -mno-power2
11476       -mpowerpc
11477       -mno-powerpc
11478       -mpowerpc-gpopt
11479       -mno-powerpc-gpopt
11480       -mpowerpc-gfxopt
11481       -mno-powerpc-gfxopt
11482       -mpowerpc64
11483       -mno-powerpc64
11484       -mmfcrf
11485       -mno-mfcrf
11486       -mpopcntb
11487       -mno-popcntb
11488       -mpopcntd
11489       -mno-popcntd
11490       -mfprnd
11491       -mno-fprnd
11492       -mcmpb
11493       -mno-cmpb
11494       -mmfpgpr
11495       -mno-mfpgpr
11496       -mhard-dfp
11497       -mno-hard-dfp
11498           GCC supports two related instruction set architectures for the
11499           RS/6000 and PowerPC.  The POWER instruction set are those
11500           instructions supported by the rios chip set used in the original
11501           RS/6000 systems and the PowerPC instruction set is the architecture
11502           of the Freescale MPC5xx, MPC6xx, MPC8xx microprocessors, and the
11503           IBM 4xx, 6xx, and follow-on microprocessors.
11504
11505           Neither architecture is a subset of the other.  However there is a
11506           large common subset of instructions supported by both.  An MQ
11507           register is included in processors supporting the POWER
11508           architecture.
11509
11510           You use these options to specify which instructions are available
11511           on the processor you are using.  The default value of these options
11512           is determined when configuring GCC.  Specifying the -mcpu=cpu_type
11513           overrides the specification of these options.  We recommend you use
11514           the -mcpu=cpu_type option rather than the options listed above.
11515
11516           The -mpower option allows GCC to generate instructions that are
11517           found only in the POWER architecture and to use the MQ register.
11518           Specifying -mpower2 implies -power and also allows GCC to generate
11519           instructions that are present in the POWER2 architecture but not
11520           the original POWER architecture.
11521
11522           The -mpowerpc option allows GCC to generate instructions that are
11523           found only in the 32-bit subset of the PowerPC architecture.
11524           Specifying -mpowerpc-gpopt implies -mpowerpc and also allows GCC to
11525           use the optional PowerPC architecture instructions in the General
11526           Purpose group, including floating-point square root.  Specifying
11527           -mpowerpc-gfxopt implies -mpowerpc and also allows GCC to use the
11528           optional PowerPC architecture instructions in the Graphics group,
11529           including floating-point select.
11530
11531           The -mmfcrf option allows GCC to generate the move from condition
11532           register field instruction implemented on the POWER4 processor and
11533           other processors that support the PowerPC V2.01 architecture.  The
11534           -mpopcntb option allows GCC to generate the popcount and double
11535           precision FP reciprocal estimate instruction implemented on the
11536           POWER5 processor and other processors that support the PowerPC
11537           V2.02 architecture.  The -mpopcntd option allows GCC to generate
11538           the popcount instruction implemented on the POWER7 processor and
11539           other processors that support the PowerPC V2.06 architecture.  The
11540           -mfprnd option allows GCC to generate the FP round to integer
11541           instructions implemented on the POWER5+ processor and other
11542           processors that support the PowerPC V2.03 architecture.  The -mcmpb
11543           option allows GCC to generate the compare bytes instruction
11544           implemented on the POWER6 processor and other processors that
11545           support the PowerPC V2.05 architecture.  The -mmfpgpr option allows
11546           GCC to generate the FP move to/from general purpose register
11547           instructions implemented on the POWER6X processor and other
11548           processors that support the extended PowerPC V2.05 architecture.
11549           The -mhard-dfp option allows GCC to generate the decimal floating
11550           point instructions implemented on some POWER processors.
11551
11552           The -mpowerpc64 option allows GCC to generate the additional 64-bit
11553           instructions that are found in the full PowerPC64 architecture and
11554           to treat GPRs as 64-bit, doubleword quantities.  GCC defaults to
11555           -mno-powerpc64.
11556
11557           If you specify both -mno-power and -mno-powerpc, GCC will use only
11558           the instructions in the common subset of both architectures plus
11559           some special AIX common-mode calls, and will not use the MQ
11560           register.  Specifying both -mpower and -mpowerpc permits GCC to use
11561           any instruction from either architecture and to allow use of the MQ
11562           register; specify this for the Motorola MPC601.
11563
11564       -mnew-mnemonics
11565       -mold-mnemonics
11566           Select which mnemonics to use in the generated assembler code.
11567           With -mnew-mnemonics, GCC uses the assembler mnemonics defined for
11568           the PowerPC architecture.  With -mold-mnemonics it uses the
11569           assembler mnemonics defined for the POWER architecture.
11570           Instructions defined in only one architecture have only one
11571           mnemonic; GCC uses that mnemonic irrespective of which of these
11572           options is specified.
11573
11574           GCC defaults to the mnemonics appropriate for the architecture in
11575           use.  Specifying -mcpu=cpu_type sometimes overrides the value of
11576           these option.  Unless you are building a cross-compiler, you should
11577           normally not specify either -mnew-mnemonics or -mold-mnemonics, but
11578           should instead accept the default.
11579
11580       -mcpu=cpu_type
11581           Set architecture type, register usage, choice of mnemonics, and
11582           instruction scheduling parameters for machine type cpu_type.
11583           Supported values for cpu_type are 401, 403, 405, 405fp, 440, 440fp,
11584           464, 464fp, 505, 601, 602, 603, 603e, 604, 604e, 620, 630, 740,
11585           7400, 7450, 750, 801, 821, 823, 860, 970, 8540, e300c2, e300c3,
11586           e500mc, ec603e, G3, G4, G5, power, power2, power3, power4, power5,
11587           power5+, power6, power6x, power7, common, powerpc, powerpc64, rios,
11588           rios1, rios2, rsc, and rs64.
11589
11590           -mcpu=common selects a completely generic processor.  Code
11591           generated under this option will run on any POWER or PowerPC
11592           processor.  GCC will use only the instructions in the common subset
11593           of both architectures, and will not use the MQ register.  GCC
11594           assumes a generic processor model for scheduling purposes.
11595
11596           -mcpu=power, -mcpu=power2, -mcpu=powerpc, and -mcpu=powerpc64
11597           specify generic POWER, POWER2, pure 32-bit PowerPC (i.e., not
11598           MPC601), and 64-bit PowerPC architecture machine types, with an
11599           appropriate, generic processor model assumed for scheduling
11600           purposes.
11601
11602           The other options specify a specific processor.  Code generated
11603           under those options will run best on that processor, and may not
11604           run at all on others.
11605
11606           The -mcpu options automatically enable or disable the following
11607           options:
11608
11609           -maltivec  -mfprnd  -mhard-float  -mmfcrf  -mmultiple
11610           -mnew-mnemonics  -mpopcntb -mpopcntd  -mpower  -mpower2
11611           -mpowerpc64 -mpowerpc-gpopt  -mpowerpc-gfxopt  -msingle-float
11612           -mdouble-float -msimple-fpu -mstring  -mmulhw  -mdlmzb  -mmfpgpr
11613           -mvsx
11614
11615           The particular options set for any particular CPU will vary between
11616           compiler versions, depending on what setting seems to produce
11617           optimal code for that CPU; it doesn't necessarily reflect the
11618           actual hardware's capabilities.  If you wish to set an individual
11619           option to a particular value, you may specify it after the -mcpu
11620           option, like -mcpu=970 -mno-altivec.
11621
11622           On AIX, the -maltivec and -mpowerpc64 options are not enabled or
11623           disabled by the -mcpu option at present because AIX does not have
11624           full support for these options.  You may still enable or disable
11625           them individually if you're sure it'll work in your environment.
11626
11627       -mtune=cpu_type
11628           Set the instruction scheduling parameters for machine type
11629           cpu_type, but do not set the architecture type, register usage, or
11630           choice of mnemonics, as -mcpu=cpu_type would.  The same values for
11631           cpu_type are used for -mtune as for -mcpu.  If both are specified,
11632           the code generated will use the architecture, registers, and
11633           mnemonics set by -mcpu, but the scheduling parameters set by
11634           -mtune.
11635
11636       -mcmodel=small
11637           Generate PowerPC64 code for the small model: The TOC is limited to
11638           64k.
11639
11640       -mcmodel=medium
11641           Generate PowerPC64 code for the medium model: The TOC and other
11642           static data may be up to a total of 4G in size.
11643
11644       -mcmodel=large
11645           Generate PowerPC64 code for the large model: The TOC may be up to
11646           4G in size.  Other data and code is only limited by the 64-bit
11647           address space.
11648
11649       -mswdiv
11650       -mno-swdiv
11651           Generate code to compute division as reciprocal estimate and
11652           iterative refinement, creating opportunities for increased
11653           throughput.  This feature requires: optional PowerPC Graphics
11654           instruction set for single precision and FRE instruction for double
11655           precision, assuming divides cannot generate user-visible traps, and
11656           the domain values not include Infinities, denormals or zero
11657           denominator.
11658
11659       -maltivec
11660       -mno-altivec
11661           Generate code that uses (does not use) AltiVec instructions, and
11662           also enable the use of built-in functions that allow more direct
11663           access to the AltiVec instruction set.  You may also need to set
11664           -mabi=altivec to adjust the current ABI with AltiVec ABI
11665           enhancements.
11666
11667       -mvrsave
11668       -mno-vrsave
11669           Generate VRSAVE instructions when generating AltiVec code.
11670
11671       -mgen-cell-microcode
11672           Generate Cell microcode instructions
11673
11674       -mwarn-cell-microcode
11675           Warning when a Cell microcode instruction is going to emitted.  An
11676           example of a Cell microcode instruction is a variable shift.
11677
11678       -msecure-plt
11679           Generate code that allows ld and ld.so to build executables and
11680           shared libraries with non-exec .plt and .got sections.  This is a
11681           PowerPC 32-bit SYSV ABI option.
11682
11683       -mbss-plt
11684           Generate code that uses a BSS .plt section that ld.so fills in, and
11685           requires .plt and .got sections that are both writable and
11686           executable.  This is a PowerPC 32-bit SYSV ABI option.
11687
11688       -misel
11689       -mno-isel
11690           This switch enables or disables the generation of ISEL
11691           instructions.
11692
11693       -misel=yes/no
11694           This switch has been deprecated.  Use -misel and -mno-isel instead.
11695
11696       -mspe
11697       -mno-spe
11698           This switch enables or disables the generation of SPE simd
11699           instructions.
11700
11701       -mpaired
11702       -mno-paired
11703           This switch enables or disables the generation of PAIRED simd
11704           instructions.
11705
11706       -mspe=yes/no
11707           This option has been deprecated.  Use -mspe and -mno-spe instead.
11708
11709       -mvsx
11710       -mno-vsx
11711           Generate code that uses (does not use) vector/scalar (VSX)
11712           instructions, and also enable the use of built-in functions that
11713           allow more direct access to the VSX instruction set.
11714
11715       -mfloat-gprs=yes/single/double/no
11716       -mfloat-gprs
11717           This switch enables or disables the generation of floating point
11718           operations on the general purpose registers for architectures that
11719           support it.
11720
11721           The argument yes or single enables the use of single-precision
11722           floating point operations.
11723
11724           The argument double enables the use of single and double-precision
11725           floating point operations.
11726
11727           The argument no disables floating point operations on the general
11728           purpose registers.
11729
11730           This option is currently only available on the MPC854x.
11731
11732       -m32
11733       -m64
11734           Generate code for 32-bit or 64-bit environments of Darwin and SVR4
11735           targets (including GNU/Linux).  The 32-bit environment sets int,
11736           long and pointer to 32 bits and generates code that runs on any
11737           PowerPC variant.  The 64-bit environment sets int to 32 bits and
11738           long and pointer to 64 bits, and generates code for PowerPC64, as
11739           for -mpowerpc64.
11740
11741       -mfull-toc
11742       -mno-fp-in-toc
11743       -mno-sum-in-toc
11744       -mminimal-toc
11745           Modify generation of the TOC (Table Of Contents), which is created
11746           for every executable file.  The -mfull-toc option is selected by
11747           default.  In that case, GCC will allocate at least one TOC entry
11748           for each unique non-automatic variable reference in your program.
11749           GCC will also place floating-point constants in the TOC.  However,
11750           only 16,384 entries are available in the TOC.
11751
11752           If you receive a linker error message that saying you have
11753           overflowed the available TOC space, you can reduce the amount of
11754           TOC space used with the -mno-fp-in-toc and -mno-sum-in-toc options.
11755           -mno-fp-in-toc prevents GCC from putting floating-point constants
11756           in the TOC and -mno-sum-in-toc forces GCC to generate code to
11757           calculate the sum of an address and a constant at run-time instead
11758           of putting that sum into the TOC.  You may specify one or both of
11759           these options.  Each causes GCC to produce very slightly slower and
11760           larger code at the expense of conserving TOC space.
11761
11762           If you still run out of space in the TOC even when you specify both
11763           of these options, specify -mminimal-toc instead.  This option
11764           causes GCC to make only one TOC entry for every file.  When you
11765           specify this option, GCC will produce code that is slower and
11766           larger but which uses extremely little TOC space.  You may wish to
11767           use this option only on files that contain less frequently executed
11768           code.
11769
11770       -maix64
11771       -maix32
11772           Enable 64-bit AIX ABI and calling convention: 64-bit pointers,
11773           64-bit "long" type, and the infrastructure needed to support them.
11774           Specifying -maix64 implies -mpowerpc64 and -mpowerpc, while -maix32
11775           disables the 64-bit ABI and implies -mno-powerpc64.  GCC defaults
11776           to -maix32.
11777
11778       -mxl-compat
11779       -mno-xl-compat
11780           Produce code that conforms more closely to IBM XL compiler
11781           semantics when using AIX-compatible ABI.  Pass floating-point
11782           arguments to prototyped functions beyond the register save area
11783           (RSA) on the stack in addition to argument FPRs.  Do not assume
11784           that most significant double in 128-bit long double value is
11785           properly rounded when comparing values and converting to double.
11786           Use XL symbol names for long double support routines.
11787
11788           The AIX calling convention was extended but not initially
11789           documented to handle an obscure K&R C case of calling a function
11790           that takes the address of its arguments with fewer arguments than
11791           declared.  IBM XL compilers access floating point arguments which
11792           do not fit in the RSA from the stack when a subroutine is compiled
11793           without optimization.  Because always storing floating-point
11794           arguments on the stack is inefficient and rarely needed, this
11795           option is not enabled by default and only is necessary when calling
11796           subroutines compiled by IBM XL compilers without optimization.
11797
11798       -mpe
11799           Support IBM RS/6000 SP Parallel Environment (PE).  Link an
11800           application written to use message passing with special startup
11801           code to enable the application to run.  The system must have PE
11802           installed in the standard location (/usr/lpp/ppe.poe/), or the
11803           specs file must be overridden with the -specs= option to specify
11804           the appropriate directory location.  The Parallel Environment does
11805           not support threads, so the -mpe option and the -pthread option are
11806           incompatible.
11807
11808       -malign-natural
11809       -malign-power
11810           On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
11811           -malign-natural overrides the ABI-defined alignment of larger
11812           types, such as floating-point doubles, on their natural size-based
11813           boundary.  The option -malign-power instructs GCC to follow the
11814           ABI-specified alignment rules.  GCC defaults to the standard
11815           alignment defined in the ABI.
11816
11817           On 64-bit Darwin, natural alignment is the default, and
11818           -malign-power is not supported.
11819
11820       -msoft-float
11821       -mhard-float
11822           Generate code that does not use (uses) the floating-point register
11823           set.  Software floating point emulation is provided if you use the
11824           -msoft-float option, and pass the option to GCC when linking.
11825
11826       -msingle-float
11827       -mdouble-float
11828           Generate code for single or double-precision floating point
11829           operations.  -mdouble-float implies -msingle-float.
11830
11831       -msimple-fpu
11832           Do not generate sqrt and div instructions for hardware floating
11833           point unit.
11834
11835       -mfpu
11836           Specify type of floating point unit.  Valid values are sp_lite
11837           (equivalent to -msingle-float -msimple-fpu), dp_lite (equivalent to
11838           -mdouble-float -msimple-fpu), sp_full (equivalent to
11839           -msingle-float), and dp_full (equivalent to -mdouble-float).
11840
11841       -mxilinx-fpu
11842           Perform optimizations for floating point unit on Xilinx PPC
11843           405/440.
11844
11845       -mmultiple
11846       -mno-multiple
11847           Generate code that uses (does not use) the load multiple word
11848           instructions and the store multiple word instructions.  These
11849           instructions are generated by default on POWER systems, and not
11850           generated on PowerPC systems.  Do not use -mmultiple on little
11851           endian PowerPC systems, since those instructions do not work when
11852           the processor is in little endian mode.  The exceptions are PPC740
11853           and PPC750 which permit the instructions usage in little endian
11854           mode.
11855
11856       -mstring
11857       -mno-string
11858           Generate code that uses (does not use) the load string instructions
11859           and the store string word instructions to save multiple registers
11860           and do small block moves.  These instructions are generated by
11861           default on POWER systems, and not generated on PowerPC systems.  Do
11862           not use -mstring on little endian PowerPC systems, since those
11863           instructions do not work when the processor is in little endian
11864           mode.  The exceptions are PPC740 and PPC750 which permit the
11865           instructions usage in little endian mode.
11866
11867       -mupdate
11868       -mno-update
11869           Generate code that uses (does not use) the load or store
11870           instructions that update the base register to the address of the
11871           calculated memory location.  These instructions are generated by
11872           default.  If you use -mno-update, there is a small window between
11873           the time that the stack pointer is updated and the address of the
11874           previous frame is stored, which means code that walks the stack
11875           frame across interrupts or signals may get corrupted data.
11876
11877       -mavoid-indexed-addresses
11878       -mno-avoid-indexed-addresses
11879           Generate code that tries to avoid (not avoid) the use of indexed
11880           load or store instructions. These instructions can incur a
11881           performance penalty on Power6 processors in certain situations,
11882           such as when stepping through large arrays that cross a 16M
11883           boundary.  This option is enabled by default when targetting Power6
11884           and disabled otherwise.
11885
11886       -mfused-madd
11887       -mno-fused-madd
11888           Generate code that uses (does not use) the floating point multiply
11889           and accumulate instructions.  These instructions are generated by
11890           default if hardware floating is used.
11891
11892       -mmulhw
11893       -mno-mulhw
11894           Generate code that uses (does not use) the half-word multiply and
11895           multiply-accumulate instructions on the IBM 405, 440 and 464
11896           processors.  These instructions are generated by default when
11897           targetting those processors.
11898
11899       -mdlmzb
11900       -mno-dlmzb
11901           Generate code that uses (does not use) the string-search dlmzb
11902           instruction on the IBM 405, 440 and 464 processors.  This
11903           instruction is generated by default when targetting those
11904           processors.
11905
11906       -mno-bit-align
11907       -mbit-align
11908           On System V.4 and embedded PowerPC systems do not (do) force
11909           structures and unions that contain bit-fields to be aligned to the
11910           base type of the bit-field.
11911
11912           For example, by default a structure containing nothing but 8
11913           "unsigned" bit-fields of length 1 would be aligned to a 4 byte
11914           boundary and have a size of 4 bytes.  By using -mno-bit-align, the
11915           structure would be aligned to a 1 byte boundary and be one byte in
11916           size.
11917
11918       -mno-strict-align
11919       -mstrict-align
11920           On System V.4 and embedded PowerPC systems do not (do) assume that
11921           unaligned memory references will be handled by the system.
11922
11923       -mrelocatable
11924       -mno-relocatable
11925           On embedded PowerPC systems generate code that allows (does not
11926           allow) the program to be relocated to a different address at
11927           runtime.  If you use -mrelocatable on any module, all objects
11928           linked together must be compiled with -mrelocatable or
11929           -mrelocatable-lib.
11930
11931       -mrelocatable-lib
11932       -mno-relocatable-lib
11933           On embedded PowerPC systems generate code that allows (does not
11934           allow) the program to be relocated to a different address at
11935           runtime.  Modules compiled with -mrelocatable-lib can be linked
11936           with either modules compiled without -mrelocatable and
11937           -mrelocatable-lib or with modules compiled with the -mrelocatable
11938           options.
11939
11940       -mno-toc
11941       -mtoc
11942           On System V.4 and embedded PowerPC systems do not (do) assume that
11943           register 2 contains a pointer to a global area pointing to the
11944           addresses used in the program.
11945
11946       -mlittle
11947       -mlittle-endian
11948           On System V.4 and embedded PowerPC systems compile code for the
11949           processor in little endian mode.  The -mlittle-endian option is the
11950           same as -mlittle.
11951
11952       -mbig
11953       -mbig-endian
11954           On System V.4 and embedded PowerPC systems compile code for the
11955           processor in big endian mode.  The -mbig-endian option is the same
11956           as -mbig.
11957
11958       -mdynamic-no-pic
11959           On Darwin and Mac OS X systems, compile code so that it is not
11960           relocatable, but that its external references are relocatable.  The
11961           resulting code is suitable for applications, but not shared
11962           libraries.
11963
11964       -mprioritize-restricted-insns=priority
11965           This option controls the priority that is assigned to dispatch-slot
11966           restricted instructions during the second scheduling pass.  The
11967           argument priority takes the value 0/1/2 to assign
11968           no/highest/second-highest priority to dispatch slot restricted
11969           instructions.
11970
11971       -msched-costly-dep=dependence_type
11972           This option controls which dependences are considered costly by the
11973           target during instruction scheduling.  The argument dependence_type
11974           takes one of the following values: no: no dependence is costly,
11975           all: all dependences are costly, true_store_to_load: a true
11976           dependence from store to load is costly, store_to_load: any
11977           dependence from store to load is costly, number: any dependence
11978           which latency >= number is costly.
11979
11980       -minsert-sched-nops=scheme
11981           This option controls which nop insertion scheme will be used during
11982           the second scheduling pass.  The argument scheme takes one of the
11983           following values: no: Don't insert nops.  pad: Pad with nops any
11984           dispatch group which has vacant issue slots, according to the
11985           scheduler's grouping.  regroup_exact: Insert nops to force costly
11986           dependent insns into separate groups.  Insert exactly as many nops
11987           as needed to force an insn to a new group, according to the
11988           estimated processor grouping.  number: Insert nops to force costly
11989           dependent insns into separate groups.  Insert number nops to force
11990           an insn to a new group.
11991
11992       -mcall-sysv
11993           On System V.4 and embedded PowerPC systems compile code using
11994           calling conventions that adheres to the March 1995 draft of the
11995           System V Application Binary Interface, PowerPC processor
11996           supplement.  This is the default unless you configured GCC using
11997           powerpc-*-eabiaix.
11998
11999       -mcall-sysv-eabi
12000           Specify both -mcall-sysv and -meabi options.
12001
12002       -mcall-sysv-noeabi
12003           Specify both -mcall-sysv and -mno-eabi options.
12004
12005       -mcall-solaris
12006           On System V.4 and embedded PowerPC systems compile code for the
12007           Solaris operating system.
12008
12009       -mcall-linux
12010           On System V.4 and embedded PowerPC systems compile code for the
12011           Linux-based GNU system.
12012
12013       -mcall-gnu
12014           On System V.4 and embedded PowerPC systems compile code for the
12015           Hurd-based GNU system.
12016
12017       -mcall-netbsd
12018           On System V.4 and embedded PowerPC systems compile code for the
12019           NetBSD operating system.
12020
12021       -maix-struct-return
12022           Return all structures in memory (as specified by the AIX ABI).
12023
12024       -msvr4-struct-return
12025           Return structures smaller than 8 bytes in registers (as specified
12026           by the SVR4 ABI).
12027
12028       -mabi=abi-type
12029           Extend the current ABI with a particular extension, or remove such
12030           extension.  Valid values are altivec, no-altivec, spe, no-spe,
12031           ibmlongdouble, ieeelongdouble.
12032
12033       -mabi=spe
12034           Extend the current ABI with SPE ABI extensions.  This does not
12035           change the default ABI, instead it adds the SPE ABI extensions to
12036           the current ABI.
12037
12038       -mabi=no-spe
12039           Disable Booke SPE ABI extensions for the current ABI.
12040
12041       -mabi=ibmlongdouble
12042           Change the current ABI to use IBM extended precision long double.
12043           This is a PowerPC 32-bit SYSV ABI option.
12044
12045       -mabi=ieeelongdouble
12046           Change the current ABI to use IEEE extended precision long double.
12047           This is a PowerPC 32-bit Linux ABI option.
12048
12049       -mprototype
12050       -mno-prototype
12051           On System V.4 and embedded PowerPC systems assume that all calls to
12052           variable argument functions are properly prototyped.  Otherwise,
12053           the compiler must insert an instruction before every non prototyped
12054           call to set or clear bit 6 of the condition code register (CR) to
12055           indicate whether floating point values were passed in the floating
12056           point registers in case the function takes a variable arguments.
12057           With -mprototype, only calls to prototyped variable argument
12058           functions will set or clear the bit.
12059
12060       -msim
12061           On embedded PowerPC systems, assume that the startup module is
12062           called sim-crt0.o and that the standard C libraries are libsim.a
12063           and libc.a.  This is the default for powerpc-*-eabisim
12064           configurations.
12065
12066       -mmvme
12067           On embedded PowerPC systems, assume that the startup module is
12068           called crt0.o and the standard C libraries are libmvme.a and
12069           libc.a.
12070
12071       -mads
12072           On embedded PowerPC systems, assume that the startup module is
12073           called crt0.o and the standard C libraries are libads.a and libc.a.
12074
12075       -myellowknife
12076           On embedded PowerPC systems, assume that the startup module is
12077           called crt0.o and the standard C libraries are libyk.a and libc.a.
12078
12079       -mvxworks
12080           On System V.4 and embedded PowerPC systems, specify that you are
12081           compiling for a VxWorks system.
12082
12083       -memb
12084           On embedded PowerPC systems, set the PPC_EMB bit in the ELF flags
12085           header to indicate that eabi extended relocations are used.
12086
12087       -meabi
12088       -mno-eabi
12089           On System V.4 and embedded PowerPC systems do (do not) adhere to
12090           the Embedded Applications Binary Interface (eabi) which is a set of
12091           modifications to the System V.4 specifications.  Selecting -meabi
12092           means that the stack is aligned to an 8 byte boundary, a function
12093           "__eabi" is called to from "main" to set up the eabi environment,
12094           and the -msdata option can use both "r2" and "r13" to point to two
12095           separate small data areas.  Selecting -mno-eabi means that the
12096           stack is aligned to a 16 byte boundary, do not call an
12097           initialization function from "main", and the -msdata option will
12098           only use "r13" to point to a single small data area.  The -meabi
12099           option is on by default if you configured GCC using one of the
12100           powerpc*-*-eabi* options.
12101
12102       -msdata=eabi
12103           On System V.4 and embedded PowerPC systems, put small initialized
12104           "const" global and static data in the .sdata2 section, which is
12105           pointed to by register "r2".  Put small initialized non-"const"
12106           global and static data in the .sdata section, which is pointed to
12107           by register "r13".  Put small uninitialized global and static data
12108           in the .sbss section, which is adjacent to the .sdata section.  The
12109           -msdata=eabi option is incompatible with the -mrelocatable option.
12110           The -msdata=eabi option also sets the -memb option.
12111
12112       -msdata=sysv
12113           On System V.4 and embedded PowerPC systems, put small global and
12114           static data in the .sdata section, which is pointed to by register
12115           "r13".  Put small uninitialized global and static data in the .sbss
12116           section, which is adjacent to the .sdata section.  The -msdata=sysv
12117           option is incompatible with the -mrelocatable option.
12118
12119       -msdata=default
12120       -msdata
12121           On System V.4 and embedded PowerPC systems, if -meabi is used,
12122           compile code the same as -msdata=eabi, otherwise compile code the
12123           same as -msdata=sysv.
12124
12125       -msdata=data
12126           On System V.4 and embedded PowerPC systems, put small global data
12127           in the .sdata section.  Put small uninitialized global data in the
12128           .sbss section.  Do not use register "r13" to address small data
12129           however.  This is the default behavior unless other -msdata options
12130           are used.
12131
12132       -msdata=none
12133       -mno-sdata
12134           On embedded PowerPC systems, put all initialized global and static
12135           data in the .data section, and all uninitialized data in the .bss
12136           section.
12137
12138       -G num
12139           On embedded PowerPC systems, put global and static items less than
12140           or equal to num bytes into the small data or bss sections instead
12141           of the normal data or bss section.  By default, num is 8.  The -G
12142           num switch is also passed to the linker.  All modules should be
12143           compiled with the same -G num value.
12144
12145       -mregnames
12146       -mno-regnames
12147           On System V.4 and embedded PowerPC systems do (do not) emit
12148           register names in the assembly language output using symbolic
12149           forms.
12150
12151       -mlongcall
12152       -mno-longcall
12153           By default assume that all calls are far away so that a longer more
12154           expensive calling sequence is required.  This is required for calls
12155           further than 32 megabytes (33,554,432 bytes) from the current
12156           location.  A short call will be generated if the compiler knows the
12157           call cannot be that far away.  This setting can be overridden by
12158           the "shortcall" function attribute, or by "#pragma longcall(0)".
12159
12160           Some linkers are capable of detecting out-of-range calls and
12161           generating glue code on the fly.  On these systems, long calls are
12162           unnecessary and generate slower code.  As of this writing, the AIX
12163           linker can do this, as can the GNU linker for PowerPC/64.  It is
12164           planned to add this feature to the GNU linker for 32-bit PowerPC
12165           systems as well.
12166
12167           On Darwin/PPC systems, "#pragma longcall" will generate "jbsr
12168           callee, L42", plus a "branch island" (glue code).  The two target
12169           addresses represent the callee and the "branch island".  The
12170           Darwin/PPC linker will prefer the first address and generate a "bl
12171           callee" if the PPC "bl" instruction will reach the callee directly;
12172           otherwise, the linker will generate "bl L42" to call the "branch
12173           island".  The "branch island" is appended to the body of the
12174           calling function; it computes the full 32-bit address of the callee
12175           and jumps to it.
12176
12177           On Mach-O (Darwin) systems, this option directs the compiler emit
12178           to the glue for every direct call, and the Darwin linker decides
12179           whether to use or discard it.
12180
12181           In the future, we may cause GCC to ignore all longcall
12182           specifications when the linker is known to generate glue.
12183
12184       -pthread
12185           Adds support for multithreading with the pthreads library.  This
12186           option sets flags for both the preprocessor and linker.
12187
12188   S/390 and zSeries Options
12189       These are the -m options defined for the S/390 and zSeries
12190       architecture.
12191
12192       -mhard-float
12193       -msoft-float
12194           Use (do not use) the hardware floating-point instructions and
12195           registers for floating-point operations.  When -msoft-float is
12196           specified, functions in libgcc.a will be used to perform floating-
12197           point operations.  When -mhard-float is specified, the compiler
12198           generates IEEE floating-point instructions.  This is the default.
12199
12200       -mhard-dfp
12201       -mno-hard-dfp
12202           Use (do not use) the hardware decimal-floating-point instructions
12203           for decimal-floating-point operations.  When -mno-hard-dfp is
12204           specified, functions in libgcc.a will be used to perform decimal-
12205           floating-point operations.  When -mhard-dfp is specified, the
12206           compiler generates decimal-floating-point hardware instructions.
12207           This is the default for -march=z9-ec or higher.
12208
12209       -mlong-double-64
12210       -mlong-double-128
12211           These switches control the size of "long double" type. A size of
12212           64bit makes the "long double" type equivalent to the "double" type.
12213           This is the default.
12214
12215       -mbackchain
12216       -mno-backchain
12217           Store (do not store) the address of the caller's frame as backchain
12218           pointer into the callee's stack frame.  A backchain may be needed
12219           to allow debugging using tools that do not understand DWARF-2 call
12220           frame information.  When -mno-packed-stack is in effect, the
12221           backchain pointer is stored at the bottom of the stack frame; when
12222           -mpacked-stack is in effect, the backchain is placed into the
12223           topmost word of the 96/160 byte register save area.
12224
12225           In general, code compiled with -mbackchain is call-compatible with
12226           code compiled with -mmo-backchain; however, use of the backchain
12227           for debugging purposes usually requires that the whole binary is
12228           built with -mbackchain.  Note that the combination of -mbackchain,
12229           -mpacked-stack and -mhard-float is not supported.  In order to
12230           build a linux kernel use -msoft-float.
12231
12232           The default is to not maintain the backchain.
12233
12234       -mpacked-stack
12235       -mno-packed-stack
12236           Use (do not use) the packed stack layout.  When -mno-packed-stack
12237           is specified, the compiler uses the all fields of the 96/160 byte
12238           register save area only for their default purpose; unused fields
12239           still take up stack space.  When -mpacked-stack is specified,
12240           register save slots are densely packed at the top of the register
12241           save area; unused space is reused for other purposes, allowing for
12242           more efficient use of the available stack space.  However, when
12243           -mbackchain is also in effect, the topmost word of the save area is
12244           always used to store the backchain, and the return address register
12245           is always saved two words below the backchain.
12246
12247           As long as the stack frame backchain is not used, code generated
12248           with -mpacked-stack is call-compatible with code generated with
12249           -mno-packed-stack.  Note that some non-FSF releases of GCC 2.95 for
12250           S/390 or zSeries generated code that uses the stack frame backchain
12251           at run time, not just for debugging purposes.  Such code is not
12252           call-compatible with code compiled with -mpacked-stack.  Also, note
12253           that the combination of -mbackchain, -mpacked-stack and
12254           -mhard-float is not supported.  In order to build a linux kernel
12255           use -msoft-float.
12256
12257           The default is to not use the packed stack layout.
12258
12259       -msmall-exec
12260       -mno-small-exec
12261           Generate (or do not generate) code using the "bras" instruction to
12262           do subroutine calls.  This only works reliably if the total
12263           executable size does not exceed 64k.  The default is to use the
12264           "basr" instruction instead, which does not have this limitation.
12265
12266       -m64
12267       -m31
12268           When -m31 is specified, generate code compliant to the GNU/Linux
12269           for S/390 ABI.  When -m64 is specified, generate code compliant to
12270           the GNU/Linux for zSeries ABI.  This allows GCC in particular to
12271           generate 64-bit instructions.  For the s390 targets, the default is
12272           -m31, while the s390x targets default to -m64.
12273
12274       -mzarch
12275       -mesa
12276           When -mzarch is specified, generate code using the instructions
12277           available on z/Architecture.  When -mesa is specified, generate
12278           code using the instructions available on ESA/390.  Note that -mesa
12279           is not possible with -m64.  When generating code compliant to the
12280           GNU/Linux for S/390 ABI, the default is -mesa.  When generating
12281           code compliant to the GNU/Linux for zSeries ABI, the default is
12282           -mzarch.
12283
12284       -mmvcle
12285       -mno-mvcle
12286           Generate (or do not generate) code using the "mvcle" instruction to
12287           perform block moves.  When -mno-mvcle is specified, use a "mvc"
12288           loop instead.  This is the default unless optimizing for size.
12289
12290       -mdebug
12291       -mno-debug
12292           Print (or do not print) additional debug information when
12293           compiling.  The default is to not print debug information.
12294
12295       -march=cpu-type
12296           Generate code that will run on cpu-type, which is the name of a
12297           system representing a certain processor type.  Possible values for
12298           cpu-type are g5, g6, z900, z990, z9-109, z9-ec and z10.  When
12299           generating code using the instructions available on z/Architecture,
12300           the default is -march=z900.  Otherwise, the default is -march=g5.
12301
12302       -mtune=cpu-type
12303           Tune to cpu-type everything applicable about the generated code,
12304           except for the ABI and the set of available instructions.  The list
12305           of cpu-type values is the same as for -march.  The default is the
12306           value used for -march.
12307
12308       -mtpf-trace
12309       -mno-tpf-trace
12310           Generate code that adds (does not add) in TPF OS specific branches
12311           to trace routines in the operating system.  This option is off by
12312           default, even when compiling for the TPF OS.
12313
12314       -mfused-madd
12315       -mno-fused-madd
12316           Generate code that uses (does not use) the floating point multiply
12317           and accumulate instructions.  These instructions are generated by
12318           default if hardware floating point is used.
12319
12320       -mwarn-framesize=framesize
12321           Emit a warning if the current function exceeds the given frame
12322           size.  Because this is a compile time check it doesn't need to be a
12323           real problem when the program runs.  It is intended to identify
12324           functions which most probably cause a stack overflow.  It is useful
12325           to be used in an environment with limited stack size e.g. the linux
12326           kernel.
12327
12328       -mwarn-dynamicstack
12329           Emit a warning if the function calls alloca or uses dynamically
12330           sized arrays.  This is generally a bad idea with a limited stack
12331           size.
12332
12333       -mstack-guard=stack-guard
12334       -mstack-size=stack-size
12335           If these options are provided the s390 back end emits additional
12336           instructions in the function prologue which trigger a trap if the
12337           stack size is stack-guard bytes above the stack-size (remember that
12338           the stack on s390 grows downward).  If the stack-guard option is
12339           omitted the smallest power of 2 larger than the frame size of the
12340           compiled function is chosen.  These options are intended to be used
12341           to help debugging stack overflow problems.  The additionally
12342           emitted code causes only little overhead and hence can also be used
12343           in production like systems without greater performance degradation.
12344           The given values have to be exact powers of 2 and stack-size has to
12345           be greater than stack-guard without exceeding 64k.  In order to be
12346           efficient the extra code makes the assumption that the stack starts
12347           at an address aligned to the value given by stack-size.  The stack-
12348           guard option can only be used in conjunction with stack-size.
12349
12350       -mhotpatch=pre-halfwords,post-halfwords
12351           If the hotpatch option is enabled, a "hot-patching" function
12352           prologue is generated for all functions in the compilation unit.
12353           The funtion label is prepended with the given number of two-byte
12354           NOP instructions (pre-halfwords, maximum 1000000).  After the
12355           label, 2 * post-halfwords bytes are appended, using the largest NOP
12356           like instructions the architecture allows (maximum 1000000).
12357
12358           If both arguments are zero, hotpatching is disabled.
12359
12360           This option can be overridden for individual functions with the
12361           "hotpatch" attribute.
12362
12363   Score Options
12364       These options are defined for Score implementations:
12365
12366       -meb
12367           Compile code for big endian mode.  This is the default.
12368
12369       -mel
12370           Compile code for little endian mode.
12371
12372       -mnhwloop
12373           Disable generate bcnz instruction.
12374
12375       -muls
12376           Enable generate unaligned load and store instruction.
12377
12378       -mmac
12379           Enable the use of multiply-accumulate instructions. Disabled by
12380           default.
12381
12382       -mscore5
12383           Specify the SCORE5 as the target architecture.
12384
12385       -mscore5u
12386           Specify the SCORE5U of the target architecture.
12387
12388       -mscore7
12389           Specify the SCORE7 as the target architecture. This is the default.
12390
12391       -mscore7d
12392           Specify the SCORE7D as the target architecture.
12393
12394   SH Options
12395       These -m options are defined for the SH implementations:
12396
12397       -m1 Generate code for the SH1.
12398
12399       -m2 Generate code for the SH2.
12400
12401       -m2e
12402           Generate code for the SH2e.
12403
12404       -m3 Generate code for the SH3.
12405
12406       -m3e
12407           Generate code for the SH3e.
12408
12409       -m4-nofpu
12410           Generate code for the SH4 without a floating-point unit.
12411
12412       -m4-single-only
12413           Generate code for the SH4 with a floating-point unit that only
12414           supports single-precision arithmetic.
12415
12416       -m4-single
12417           Generate code for the SH4 assuming the floating-point unit is in
12418           single-precision mode by default.
12419
12420       -m4 Generate code for the SH4.
12421
12422       -m4a-nofpu
12423           Generate code for the SH4al-dsp, or for a SH4a in such a way that
12424           the floating-point unit is not used.
12425
12426       -m4a-single-only
12427           Generate code for the SH4a, in such a way that no double-precision
12428           floating point operations are used.
12429
12430       -m4a-single
12431           Generate code for the SH4a assuming the floating-point unit is in
12432           single-precision mode by default.
12433
12434       -m4a
12435           Generate code for the SH4a.
12436
12437       -m4al
12438           Same as -m4a-nofpu, except that it implicitly passes -dsp to the
12439           assembler.  GCC doesn't generate any DSP instructions at the
12440           moment.
12441
12442       -mb Compile code for the processor in big endian mode.
12443
12444       -ml Compile code for the processor in little endian mode.
12445
12446       -mdalign
12447           Align doubles at 64-bit boundaries.  Note that this changes the
12448           calling conventions, and thus some functions from the standard C
12449           library will not work unless you recompile it first with -mdalign.
12450
12451       -mrelax
12452           Shorten some address references at link time, when possible; uses
12453           the linker option -relax.
12454
12455       -mbigtable
12456           Use 32-bit offsets in "switch" tables.  The default is to use
12457           16-bit offsets.
12458
12459       -mbitops
12460           Enable the use of bit manipulation instructions on SH2A.
12461
12462       -mfmovd
12463           Enable the use of the instruction "fmovd".
12464
12465       -mhitachi
12466           Comply with the calling conventions defined by Renesas.
12467
12468       -mrenesas
12469           Comply with the calling conventions defined by Renesas.
12470
12471       -mno-renesas
12472           Comply with the calling conventions defined for GCC before the
12473           Renesas conventions were available.  This option is the default for
12474           all targets of the SH toolchain except for sh-symbianelf.
12475
12476       -mnomacsave
12477           Mark the "MAC" register as call-clobbered, even if -mhitachi is
12478           given.
12479
12480       -mieee
12481           Increase IEEE-compliance of floating-point code.  At the moment,
12482           this is equivalent to -fno-finite-math-only.  When generating 16
12483           bit SH opcodes, getting IEEE-conforming results for comparisons of
12484           NANs / infinities incurs extra overhead in every floating point
12485           comparison, therefore the default is set to -ffinite-math-only.
12486
12487       -minline-ic_invalidate
12488           Inline code to invalidate instruction cache entries after setting
12489           up nested function trampolines.  This option has no effect if
12490           -musermode is in effect and the selected code generation option
12491           (e.g. -m4) does not allow the use of the icbi instruction.  If the
12492           selected code generation option does not allow the use of the icbi
12493           instruction, and -musermode is not in effect, the inlined code will
12494           manipulate the instruction cache address array directly with an
12495           associative write.  This not only requires privileged mode, but it
12496           will also fail if the cache line had been mapped via the TLB and
12497           has become unmapped.
12498
12499       -misize
12500           Dump instruction size and location in the assembly code.
12501
12502       -mpadstruct
12503           This option is deprecated.  It pads structures to multiple of 4
12504           bytes, which is incompatible with the SH ABI.
12505
12506       -mspace
12507           Optimize for space instead of speed.  Implied by -Os.
12508
12509       -mprefergot
12510           When generating position-independent code, emit function calls
12511           using the Global Offset Table instead of the Procedure Linkage
12512           Table.
12513
12514       -musermode
12515           Don't generate privileged mode only code; implies
12516           -mno-inline-ic_invalidate if the inlined code would not work in
12517           user mode.  This is the default when the target is "sh-*-linux*".
12518
12519       -multcost=number
12520           Set the cost to assume for a multiply insn.
12521
12522       -mdiv=strategy
12523           Set the division strategy to use for SHmedia code.  strategy must
12524           be one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l,
12525           inv:call, inv:call2, inv:fp .  "fp" performs the operation in
12526           floating point.  This has a very high latency, but needs only a few
12527           instructions, so it might be a good choice if your code has enough
12528           easily exploitable ILP to allow the compiler to schedule the
12529           floating point instructions together with other instructions.
12530           Division by zero causes a floating point exception.  "inv" uses
12531           integer operations to calculate the inverse of the divisor, and
12532           then multiplies the dividend with the inverse.  This strategy
12533           allows cse and hoisting of the inverse calculation.  Division by
12534           zero calculates an unspecified result, but does not trap.
12535           "inv:minlat" is a variant of "inv" where if no cse / hoisting
12536           opportunities have been found, or if the entire operation has been
12537           hoisted to the same place, the last stages of the inverse
12538           calculation are intertwined with the final multiply to reduce the
12539           overall latency, at the expense of using a few more instructions,
12540           and thus offering fewer scheduling opportunities with other code.
12541           "call" calls a library function that usually implements the
12542           inv:minlat strategy.  This gives high code density for
12543           m5-*media-nofpu compilations.  "call2" uses a different entry point
12544           of the same library function, where it assumes that a pointer to a
12545           lookup table has already been set up, which exposes the pointer
12546           load to cse / code hoisting optimizations.  "inv:call", "inv:call2"
12547           and "inv:fp" all use the "inv" algorithm for initial code
12548           generation, but if the code stays unoptimized, revert to the
12549           "call", "call2", or "fp" strategies, respectively.  Note that the
12550           potentially-trapping side effect of division by zero is carried by
12551           a separate instruction, so it is possible that all the integer
12552           instructions are hoisted out, but the marker for the side effect
12553           stays where it is.  A recombination to fp operations or a call is
12554           not possible in that case.  "inv20u" and "inv20l" are variants of
12555           the "inv:minlat" strategy.  In the case that the inverse
12556           calculation was nor separated from the multiply, they speed up
12557           division where the dividend fits into 20 bits (plus sign where
12558           applicable), by inserting a test to skip a number of operations in
12559           this case; this test slows down the case of larger dividends.
12560           inv20u assumes the case of a such a small dividend to be unlikely,
12561           and inv20l assumes it to be likely.
12562
12563       -mdivsi3_libfunc=name
12564           Set the name of the library function used for 32 bit signed
12565           division to name.  This only affect the name used in the call and
12566           inv:call division strategies, and the compiler will still expect
12567           the same sets of input/output/clobbered registers as if this option
12568           was not present.
12569
12570       -mfixed-range=register-range
12571           Generate code treating the given register range as fixed registers.
12572           A fixed register is one that the register allocator can not use.
12573           This is useful when compiling kernel code.  A register range is
12574           specified as two registers separated by a dash.  Multiple register
12575           ranges can be specified separated by a comma.
12576
12577       -madjust-unroll
12578           Throttle unrolling to avoid thrashing target registers.  This
12579           option only has an effect if the gcc code base supports the
12580           TARGET_ADJUST_UNROLL_MAX target hook.
12581
12582       -mindexed-addressing
12583           Enable the use of the indexed addressing mode for
12584           SHmedia32/SHcompact.  This is only safe if the hardware and/or OS
12585           implement 32 bit wrap-around semantics for the indexed addressing
12586           mode.  The architecture allows the implementation of processors
12587           with 64 bit MMU, which the OS could use to get 32 bit addressing,
12588           but since no current hardware implementation supports this or any
12589           other way to make the indexed addressing mode safe to use in the 32
12590           bit ABI, the default is -mno-indexed-addressing.
12591
12592       -mgettrcost=number
12593           Set the cost assumed for the gettr instruction to number.  The
12594           default is 2 if -mpt-fixed is in effect, 100 otherwise.
12595
12596       -mpt-fixed
12597           Assume pt* instructions won't trap.  This will generally generate
12598           better scheduled code, but is unsafe on current hardware.  The
12599           current architecture definition says that ptabs and ptrel trap when
12600           the target anded with 3 is 3.  This has the unintentional effect of
12601           making it unsafe to schedule ptabs / ptrel before a branch, or
12602           hoist it out of a loop.  For example, __do_global_ctors, a part of
12603           libgcc that runs constructors at program startup, calls functions
12604           in a list which is delimited by -1.  With the -mpt-fixed option,
12605           the ptabs will be done before testing against -1.  That means that
12606           all the constructors will be run a bit quicker, but when the loop
12607           comes to the end of the list, the program crashes because ptabs
12608           loads -1 into a target register.  Since this option is unsafe for
12609           any hardware implementing the current architecture specification,
12610           the default is -mno-pt-fixed.  Unless the user specifies a specific
12611           cost with -mgettrcost, -mno-pt-fixed also implies -mgettrcost=100;
12612           this deters register allocation using target registers for storing
12613           ordinary integers.
12614
12615       -minvalid-symbols
12616           Assume symbols might be invalid.  Ordinary function symbols
12617           generated by the compiler will always be valid to load with
12618           movi/shori/ptabs or movi/shori/ptrel, but with assembler and/or
12619           linker tricks it is possible to generate symbols that will cause
12620           ptabs / ptrel to trap.  This option is only meaningful when
12621           -mno-pt-fixed is in effect.  It will then prevent cross-basic-block
12622           cse, hoisting and most scheduling of symbol loads.  The default is
12623           -mno-invalid-symbols.
12624
12625   SPARC Options
12626       These -m options are supported on the SPARC:
12627
12628       -mno-app-regs
12629       -mapp-regs
12630           Specify -mapp-regs to generate output using the global registers 2
12631           through 4, which the SPARC SVR4 ABI reserves for applications.
12632           This is the default.
12633
12634           To be fully SVR4 ABI compliant at the cost of some performance
12635           loss, specify -mno-app-regs.  You should compile libraries and
12636           system software with this option.
12637
12638       -mfpu
12639       -mhard-float
12640           Generate output containing floating point instructions.  This is
12641           the default.
12642
12643       -mno-fpu
12644       -msoft-float
12645           Generate output containing library calls for floating point.
12646           Warning: the requisite libraries are not available for all SPARC
12647           targets.  Normally the facilities of the machine's usual C compiler
12648           are used, but this cannot be done directly in cross-compilation.
12649           You must make your own arrangements to provide suitable library
12650           functions for cross-compilation.  The embedded targets sparc-*-aout
12651           and sparclite-*-* do provide software floating point support.
12652
12653           -msoft-float changes the calling convention in the output file;
12654           therefore, it is only useful if you compile all of a program with
12655           this option.  In particular, you need to compile libgcc.a, the
12656           library that comes with GCC, with -msoft-float in order for this to
12657           work.
12658
12659       -mhard-quad-float
12660           Generate output containing quad-word (long double) floating point
12661           instructions.
12662
12663       -msoft-quad-float
12664           Generate output containing library calls for quad-word (long
12665           double) floating point instructions.  The functions called are
12666           those specified in the SPARC ABI.  This is the default.
12667
12668           As of this writing, there are no SPARC implementations that have
12669           hardware support for the quad-word floating point instructions.
12670           They all invoke a trap handler for one of these instructions, and
12671           then the trap handler emulates the effect of the instruction.
12672           Because of the trap handler overhead, this is much slower than
12673           calling the ABI library routines.  Thus the -msoft-quad-float
12674           option is the default.
12675
12676       -mno-unaligned-doubles
12677       -munaligned-doubles
12678           Assume that doubles have 8 byte alignment.  This is the default.
12679
12680           With -munaligned-doubles, GCC assumes that doubles have 8 byte
12681           alignment only if they are contained in another type, or if they
12682           have an absolute address.  Otherwise, it assumes they have 4 byte
12683           alignment.  Specifying this option avoids some rare compatibility
12684           problems with code generated by other compilers.  It is not the
12685           default because it results in a performance loss, especially for
12686           floating point code.
12687
12688       -mno-faster-structs
12689       -mfaster-structs
12690           With -mfaster-structs, the compiler assumes that structures should
12691           have 8 byte alignment.  This enables the use of pairs of "ldd" and
12692           "std" instructions for copies in structure assignment, in place of
12693           twice as many "ld" and "st" pairs.  However, the use of this
12694           changed alignment directly violates the SPARC ABI.  Thus, it's
12695           intended only for use on targets where the developer acknowledges
12696           that their resulting code will not be directly in line with the
12697           rules of the ABI.
12698
12699       -mimpure-text
12700           -mimpure-text, used in addition to -shared, tells the compiler to
12701           not pass -z text to the linker when linking a shared object.  Using
12702           this option, you can link position-dependent code into a shared
12703           object.
12704
12705           -mimpure-text suppresses the "relocations remain against
12706           allocatable but non-writable sections" linker error message.
12707           However, the necessary relocations will trigger copy-on-write, and
12708           the shared object is not actually shared across processes.  Instead
12709           of using -mimpure-text, you should compile all source code with
12710           -fpic or -fPIC.
12711
12712           This option is only available on SunOS and Solaris.
12713
12714       -mcpu=cpu_type
12715           Set the instruction set, register set, and instruction scheduling
12716           parameters for machine type cpu_type.  Supported values for
12717           cpu_type are v7, cypress, v8, supersparc, sparclite, f930, f934,
12718           hypersparc, sparclite86x, sparclet, tsc701, v9, ultrasparc,
12719           ultrasparc3, niagara and niagara2.
12720
12721           Default instruction scheduling parameters are used for values that
12722           select an architecture and not an implementation.  These are v7,
12723           v8, sparclite, sparclet, v9.
12724
12725           Here is a list of each supported architecture and their supported
12726           implementations.
12727
12728                       v7:             cypress
12729                       v8:             supersparc, hypersparc
12730                       sparclite:      f930, f934, sparclite86x
12731                       sparclet:       tsc701
12732                       v9:             ultrasparc, ultrasparc3, niagara, niagara2
12733
12734           By default (unless configured otherwise), GCC generates code for
12735           the V7 variant of the SPARC architecture.  With -mcpu=cypress, the
12736           compiler additionally optimizes it for the Cypress CY7C602 chip, as
12737           used in the SPARCStation/SPARCServer 3xx series.  This is also
12738           appropriate for the older SPARCStation 1, 2, IPX etc.
12739
12740           With -mcpu=v8, GCC generates code for the V8 variant of the SPARC
12741           architecture.  The only difference from V7 code is that the
12742           compiler emits the integer multiply and integer divide instructions
12743           which exist in SPARC-V8 but not in SPARC-V7.  With
12744           -mcpu=supersparc, the compiler additionally optimizes it for the
12745           SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000
12746           series.
12747
12748           With -mcpu=sparclite, GCC generates code for the SPARClite variant
12749           of the SPARC architecture.  This adds the integer multiply, integer
12750           divide step and scan ("ffs") instructions which exist in SPARClite
12751           but not in SPARC-V7.  With -mcpu=f930, the compiler additionally
12752           optimizes it for the Fujitsu MB86930 chip, which is the original
12753           SPARClite, with no FPU.  With -mcpu=f934, the compiler additionally
12754           optimizes it for the Fujitsu MB86934 chip, which is the more recent
12755           SPARClite with FPU.
12756
12757           With -mcpu=sparclet, GCC generates code for the SPARClet variant of
12758           the SPARC architecture.  This adds the integer multiply,
12759           multiply/accumulate, integer divide step and scan ("ffs")
12760           instructions which exist in SPARClet but not in SPARC-V7.  With
12761           -mcpu=tsc701, the compiler additionally optimizes it for the TEMIC
12762           SPARClet chip.
12763
12764           With -mcpu=v9, GCC generates code for the V9 variant of the SPARC
12765           architecture.  This adds 64-bit integer and floating-point move
12766           instructions, 3 additional floating-point condition code registers
12767           and conditional move instructions.  With -mcpu=ultrasparc, the
12768           compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi
12769           chips.  With -mcpu=ultrasparc3, the compiler additionally optimizes
12770           it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ chips.  With
12771           -mcpu=niagara, the compiler additionally optimizes it for Sun
12772           UltraSPARC T1 chips.  With -mcpu=niagara2, the compiler
12773           additionally optimizes it for Sun UltraSPARC T2 chips.
12774
12775       -mtune=cpu_type
12776           Set the instruction scheduling parameters for machine type
12777           cpu_type, but do not set the instruction set or register set that
12778           the option -mcpu=cpu_type would.
12779
12780           The same values for -mcpu=cpu_type can be used for -mtune=cpu_type,
12781           but the only useful values are those that select a particular cpu
12782           implementation.  Those are cypress, supersparc, hypersparc, f930,
12783           f934, sparclite86x, tsc701, ultrasparc, ultrasparc3, niagara, and
12784           niagara2.
12785
12786       -mv8plus
12787       -mno-v8plus
12788           With -mv8plus, GCC generates code for the SPARC-V8+ ABI.  The
12789           difference from the V8 ABI is that the global and out registers are
12790           considered 64-bit wide.  This is enabled by default on Solaris in
12791           32-bit mode for all SPARC-V9 processors.
12792
12793       -mvis
12794       -mno-vis
12795           With -mvis, GCC generates code that takes advantage of the
12796           UltraSPARC Visual Instruction Set extensions.  The default is
12797           -mno-vis.
12798
12799       These -m options are supported in addition to the above on SPARC-V9
12800       processors in 64-bit environments:
12801
12802       -mlittle-endian
12803           Generate code for a processor running in little-endian mode.  It is
12804           only available for a few configurations and most notably not on
12805           Solaris and Linux.
12806
12807       -m32
12808       -m64
12809           Generate code for a 32-bit or 64-bit environment.  The 32-bit
12810           environment sets int, long and pointer to 32 bits.  The 64-bit
12811           environment sets int to 32 bits and long and pointer to 64 bits.
12812
12813       -mcmodel=medlow
12814           Generate code for the Medium/Low code model: 64-bit addresses,
12815           programs must be linked in the low 32 bits of memory.  Programs can
12816           be statically or dynamically linked.
12817
12818       -mcmodel=medmid
12819           Generate code for the Medium/Middle code model: 64-bit addresses,
12820           programs must be linked in the low 44 bits of memory, the text and
12821           data segments must be less than 2GB in size and the data segment
12822           must be located within 2GB of the text segment.
12823
12824       -mcmodel=medany
12825           Generate code for the Medium/Anywhere code model: 64-bit addresses,
12826           programs may be linked anywhere in memory, the text and data
12827           segments must be less than 2GB in size and the data segment must be
12828           located within 2GB of the text segment.
12829
12830       -mcmodel=embmedany
12831           Generate code for the Medium/Anywhere code model for embedded
12832           systems: 64-bit addresses, the text and data segments must be less
12833           than 2GB in size, both starting anywhere in memory (determined at
12834           link time).  The global register %g4 points to the base of the data
12835           segment.  Programs are statically linked and PIC is not supported.
12836
12837       -mstack-bias
12838       -mno-stack-bias
12839           With -mstack-bias, GCC assumes that the stack pointer, and frame
12840           pointer if present, are offset by -2047 which must be added back
12841           when making stack frame references.  This is the default in 64-bit
12842           mode.  Otherwise, assume no such offset is present.
12843
12844       These switches are supported in addition to the above on Solaris:
12845
12846       -threads
12847           Add support for multithreading using the Solaris threads library.
12848           This option sets flags for both the preprocessor and linker.  This
12849           option does not affect the thread safety of object code produced by
12850           the compiler or that of libraries supplied with it.
12851
12852       -pthreads
12853           Add support for multithreading using the POSIX threads library.
12854           This option sets flags for both the preprocessor and linker.  This
12855           option does not affect the thread safety of object code produced
12856           by the compiler or that of libraries supplied with it.
12857
12858       -pthread
12859           This is a synonym for -pthreads.
12860
12861   SPU Options
12862       These -m options are supported on the SPU:
12863
12864       -mwarn-reloc
12865       -merror-reloc
12866           The loader for SPU does not handle dynamic relocations.  By
12867           default, GCC will give an error when it generates code that
12868           requires a dynamic relocation.  -mno-error-reloc disables the
12869           error, -mwarn-reloc will generate a warning instead.
12870
12871       -msafe-dma
12872       -munsafe-dma
12873           Instructions which initiate or test completion of DMA must not be
12874           reordered with respect to loads and stores of the memory which is
12875           being accessed.  Users typically address this problem using the
12876           volatile keyword, but that can lead to inefficient code in places
12877           where the memory is known to not change.  Rather than mark the
12878           memory as volatile we treat the DMA instructions as potentially
12879           effecting all memory.  With -munsafe-dma users must use the
12880           volatile keyword to protect memory accesses.
12881
12882       -mbranch-hints
12883           By default, GCC will generate a branch hint instruction to avoid
12884           pipeline stalls for always taken or probably taken branches.  A
12885           hint will not be generated closer than 8 instructions away from its
12886           branch.  There is little reason to disable them, except for
12887           debugging purposes, or to make an object a little bit smaller.
12888
12889       -msmall-mem
12890       -mlarge-mem
12891           By default, GCC generates code assuming that addresses are never
12892           larger than 18 bits.  With -mlarge-mem code is generated that
12893           assumes a full 32 bit address.
12894
12895       -mstdmain
12896           By default, GCC links against startup code that assumes the SPU-
12897           style main function interface (which has an unconventional
12898           parameter list).  With -mstdmain, GCC will link your program
12899           against startup code that assumes a C99-style interface to "main",
12900           including a local copy of "argv" strings.
12901
12902       -mfixed-range=register-range
12903           Generate code treating the given register range as fixed registers.
12904           A fixed register is one that the register allocator can not use.
12905           This is useful when compiling kernel code.  A register range is
12906           specified as two registers separated by a dash.  Multiple register
12907           ranges can be specified separated by a comma.
12908
12909       -mdual-nops
12910       -mdual-nops=n
12911           By default, GCC will insert nops to increase dual issue when it
12912           expects it to increase performance.  n can be a value from 0 to 10.
12913           A smaller n will insert fewer nops.  10 is the default, 0 is the
12914           same as -mno-dual-nops.  Disabled with -Os.
12915
12916       -mhint-max-nops=n
12917           Maximum number of nops to insert for a branch hint.  A branch hint
12918           must be at least 8 instructions away from the branch it is
12919           effecting.  GCC will insert up to n nops to enforce this, otherwise
12920           it will not generate the branch hint.
12921
12922       -mhint-max-distance=n
12923           The encoding of the branch hint instruction limits the hint to be
12924           within 256 instructions of the branch it is effecting.  By default,
12925           GCC makes sure it is within 125.
12926
12927       -msafe-hints
12928           Work around a hardware bug which causes the SPU to stall
12929           indefinitely.  By default, GCC will insert the "hbrp" instruction
12930           to make sure this stall won't happen.
12931
12932   Options for System V
12933       These additional options are available on System V Release 4 for
12934       compatibility with other compilers on those systems:
12935
12936       -G  Create a shared object.  It is recommended that -symbolic or
12937           -shared be used instead.
12938
12939       -Qy Identify the versions of each tool used by the compiler, in a
12940           ".ident" assembler directive in the output.
12941
12942       -Qn Refrain from adding ".ident" directives to the output file (this is
12943           the default).
12944
12945       -YP,dirs
12946           Search the directories dirs, and no others, for libraries specified
12947           with -l.
12948
12949       -Ym,dir
12950           Look in the directory dir to find the M4 preprocessor.  The
12951           assembler uses this option.
12952
12953   V850 Options
12954       These -m options are defined for V850 implementations:
12955
12956       -mlong-calls
12957       -mno-long-calls
12958           Treat all calls as being far away (near).  If calls are assumed to
12959           be far away, the compiler will always load the functions address up
12960           into a register, and call indirect through the pointer.
12961
12962       -mno-ep
12963       -mep
12964           Do not optimize (do optimize) basic blocks that use the same index
12965           pointer 4 or more times to copy pointer into the "ep" register, and
12966           use the shorter "sld" and "sst" instructions.  The -mep option is
12967           on by default if you optimize.
12968
12969       -mno-prolog-function
12970       -mprolog-function
12971           Do not use (do use) external functions to save and restore
12972           registers at the prologue and epilogue of a function.  The external
12973           functions are slower, but use less code space if more than one
12974           function saves the same number of registers.  The -mprolog-function
12975           option is on by default if you optimize.
12976
12977       -mspace
12978           Try to make the code as small as possible.  At present, this just
12979           turns on the -mep and -mprolog-function options.
12980
12981       -mtda=n
12982           Put static or global variables whose size is n bytes or less into
12983           the tiny data area that register "ep" points to.  The tiny data
12984           area can hold up to 256 bytes in total (128 bytes for byte
12985           references).
12986
12987       -msda=n
12988           Put static or global variables whose size is n bytes or less into
12989           the small data area that register "gp" points to.  The small data
12990           area can hold up to 64 kilobytes.
12991
12992       -mzda=n
12993           Put static or global variables whose size is n bytes or less into
12994           the first 32 kilobytes of memory.
12995
12996       -mv850
12997           Specify that the target processor is the V850.
12998
12999       -mbig-switch
13000           Generate code suitable for big switch tables.  Use this option only
13001           if the assembler/linker complain about out of range branches within
13002           a switch table.
13003
13004       -mapp-regs
13005           This option will cause r2 and r5 to be used in the code generated
13006           by the compiler.  This setting is the default.
13007
13008       -mno-app-regs
13009           This option will cause r2 and r5 to be treated as fixed registers.
13010
13011       -mv850e1
13012           Specify that the target processor is the V850E1.  The preprocessor
13013           constants __v850e1__ and __v850e__ will be defined if this option
13014           is used.
13015
13016       -mv850e
13017           Specify that the target processor is the V850E.  The preprocessor
13018           constant __v850e__ will be defined if this option is used.
13019
13020           If neither -mv850 nor -mv850e nor -mv850e1 are defined then a
13021           default target processor will be chosen and the relevant __v850*__
13022           preprocessor constant will be defined.
13023
13024           The preprocessor constants __v850 and __v851__ are always defined,
13025           regardless of which processor variant is the target.
13026
13027       -mdisable-callt
13028           This option will suppress generation of the CALLT instruction for
13029           the v850e and v850e1 flavors of the v850 architecture.  The default
13030           is -mno-disable-callt which allows the CALLT instruction to be
13031           used.
13032
13033   VAX Options
13034       These -m options are defined for the VAX:
13035
13036       -munix
13037           Do not output certain jump instructions ("aobleq" and so on) that
13038           the Unix assembler for the VAX cannot handle across long ranges.
13039
13040       -mgnu
13041           Do output those jump instructions, on the assumption that you will
13042           assemble with the GNU assembler.
13043
13044       -mg Output code for g-format floating point numbers instead of
13045           d-format.
13046
13047   VxWorks Options
13048       The options in this section are defined for all VxWorks targets.
13049       Options specific to the target hardware are listed with the other
13050       options for that target.
13051
13052       -mrtp
13053           GCC can generate code for both VxWorks kernels and real time
13054           processes (RTPs).  This option switches from the former to the
13055           latter.  It also defines the preprocessor macro "__RTP__".
13056
13057       -non-static
13058           Link an RTP executable against shared libraries rather than static
13059           libraries.  The options -static and -shared can also be used for
13060           RTPs; -static is the default.
13061
13062       -Bstatic
13063       -Bdynamic
13064           These options are passed down to the linker.  They are defined for
13065           compatibility with Diab.
13066
13067       -Xbind-lazy
13068           Enable lazy binding of function calls.  This option is equivalent
13069           to -Wl,-z,now and is defined for compatibility with Diab.
13070
13071       -Xbind-now
13072           Disable lazy binding of function calls.  This option is the default
13073           and is defined for compatibility with Diab.
13074
13075   x86-64 Options
13076       These are listed under
13077
13078   Xstormy16 Options
13079       These options are defined for Xstormy16:
13080
13081       -msim
13082           Choose startup files and linker script suitable for the simulator.
13083
13084   Xtensa Options
13085       These options are supported for Xtensa targets:
13086
13087       -mconst16
13088       -mno-const16
13089           Enable or disable use of "CONST16" instructions for loading
13090           constant values.  The "CONST16" instruction is currently not a
13091           standard option from Tensilica.  When enabled, "CONST16"
13092           instructions are always used in place of the standard "L32R"
13093           instructions.  The use of "CONST16" is enabled by default only if
13094           the "L32R" instruction is not available.
13095
13096       -mfused-madd
13097       -mno-fused-madd
13098           Enable or disable use of fused multiply/add and multiply/subtract
13099           instructions in the floating-point option.  This has no effect if
13100           the floating-point option is not also enabled.  Disabling fused
13101           multiply/add and multiply/subtract instructions forces the compiler
13102           to use separate instructions for the multiply and add/subtract
13103           operations.  This may be desirable in some cases where strict IEEE
13104           754-compliant results are required: the fused multiply add/subtract
13105           instructions do not round the intermediate result, thereby
13106           producing results with more bits of precision than specified by the
13107           IEEE standard.  Disabling fused multiply add/subtract instructions
13108           also ensures that the program output is not sensitive to the
13109           compiler's ability to combine multiply and add/subtract operations.
13110
13111       -mserialize-volatile
13112       -mno-serialize-volatile
13113           When this option is enabled, GCC inserts "MEMW" instructions before
13114           "volatile" memory references to guarantee sequential consistency.
13115           The default is -mserialize-volatile.  Use -mno-serialize-volatile
13116           to omit the "MEMW" instructions.
13117
13118       -mtext-section-literals
13119       -mno-text-section-literals
13120           Control the treatment of literal pools.  The default is
13121           -mno-text-section-literals, which places literals in a separate
13122           section in the output file.  This allows the literal pool to be
13123           placed in a data RAM/ROM, and it also allows the linker to combine
13124           literal pools from separate object files to remove redundant
13125           literals and improve code size.  With -mtext-section-literals, the
13126           literals are interspersed in the text section in order to keep them
13127           as close as possible to their references.  This may be necessary
13128           for large assembly files.
13129
13130       -mtarget-align
13131       -mno-target-align
13132           When this option is enabled, GCC instructs the assembler to
13133           automatically align instructions to reduce branch penalties at the
13134           expense of some code density.  The assembler attempts to widen
13135           density instructions to align branch targets and the instructions
13136           following call instructions.  If there are not enough preceding
13137           safe density instructions to align a target, no widening will be
13138           performed.  The default is -mtarget-align.  These options do not
13139           affect the treatment of auto-aligned instructions like "LOOP",
13140           which the assembler will always align, either by widening density
13141           instructions or by inserting no-op instructions.
13142
13143       -mlongcalls
13144       -mno-longcalls
13145           When this option is enabled, GCC instructs the assembler to
13146           translate direct calls to indirect calls unless it can determine
13147           that the target of a direct call is in the range allowed by the
13148           call instruction.  This translation typically occurs for calls to
13149           functions in other source files.  Specifically, the assembler
13150           translates a direct "CALL" instruction into an "L32R" followed by a
13151           "CALLX" instruction.  The default is -mno-longcalls.  This option
13152           should be used in programs where the call target can potentially be
13153           out of range.  This option is implemented in the assembler, not the
13154           compiler, so the assembly code generated by GCC will still show
13155           direct call instructions---look at the disassembled object code to
13156           see the actual instructions.  Note that the assembler will use an
13157           indirect call for every cross-file call, not just those that really
13158           will be out of range.
13159
13160   zSeries Options
13161       These are listed under
13162
13163   Options for Code Generation Conventions
13164       These machine-independent options control the interface conventions
13165       used in code generation.
13166
13167       Most of them have both positive and negative forms; the negative form
13168       of -ffoo would be -fno-foo.  In the table below, only one of the forms
13169       is listed---the one which is not the default.  You can figure out the
13170       other form by either removing no- or adding it.
13171
13172       -fbounds-check
13173           For front-ends that support it, generate additional code to check
13174           that indices used to access arrays are within the declared range.
13175           This is currently only supported by the Java and Fortran front-
13176           ends, where this option defaults to true and false respectively.
13177
13178       -ftrapv
13179           This option generates traps for signed overflow on addition,
13180           subtraction, multiplication operations.
13181
13182       -fwrapv
13183           This option instructs the compiler to assume that signed arithmetic
13184           overflow of addition, subtraction and multiplication wraps around
13185           using twos-complement representation.  This flag enables some
13186           optimizations and disables others.  This option is enabled by
13187           default for the Java front-end, as required by the Java language
13188           specification.
13189
13190       -fexceptions
13191           Enable exception handling.  Generates extra code needed to
13192           propagate exceptions.  For some targets, this implies GCC will
13193           generate frame unwind information for all functions, which can
13194           produce significant data size overhead, although it does not affect
13195           execution.  If you do not specify this option, GCC will enable it
13196           by default for languages like C++ which normally require exception
13197           handling, and disable it for languages like C that do not normally
13198           require it.  However, you may need to enable this option when
13199           compiling C code that needs to interoperate properly with exception
13200           handlers written in C++.  You may also wish to disable this option
13201           if you are compiling older C++ programs that don't use exception
13202           handling.
13203
13204       -fnon-call-exceptions
13205           Generate code that allows trapping instructions to throw
13206           exceptions.  Note that this requires platform-specific runtime
13207           support that does not exist everywhere.  Moreover, it only allows
13208           trapping instructions to throw exceptions, i.e. memory references
13209           or floating point instructions.  It does not allow exceptions to be
13210           thrown from arbitrary signal handlers such as "SIGALRM".
13211
13212       -funwind-tables
13213           Similar to -fexceptions, except that it will just generate any
13214           needed static data, but will not affect the generated code in any
13215           other way.  You will normally not enable this option; instead, a
13216           language processor that needs this handling would enable it on your
13217           behalf.
13218
13219       -fasynchronous-unwind-tables
13220           Generate unwind table in dwarf2 format, if supported by target
13221           machine.  The table is exact at each instruction boundary, so it
13222           can be used for stack unwinding from asynchronous events (such as
13223           debugger or garbage collector).
13224
13225       -fpcc-struct-return
13226           Return "short" "struct" and "union" values in memory like longer
13227           ones, rather than in registers.  This convention is less efficient,
13228           but it has the advantage of allowing intercallability between GCC-
13229           compiled files and files compiled with other compilers,
13230           particularly the Portable C Compiler (pcc).
13231
13232           The precise convention for returning structures in memory depends
13233           on the target configuration macros.
13234
13235           Short structures and unions are those whose size and alignment
13236           match that of some integer type.
13237
13238           Warning: code compiled with the -fpcc-struct-return switch is not
13239           binary compatible with code compiled with the -freg-struct-return
13240           switch.  Use it to conform to a non-default application binary
13241           interface.
13242
13243       -freg-struct-return
13244           Return "struct" and "union" values in registers when possible.
13245           This is more efficient for small structures than
13246           -fpcc-struct-return.
13247
13248           If you specify neither -fpcc-struct-return nor -freg-struct-return,
13249           GCC defaults to whichever convention is standard for the target.
13250           If there is no standard convention, GCC defaults to
13251           -fpcc-struct-return, except on targets where GCC is the principal
13252           compiler.  In those cases, we can choose the standard, and we chose
13253           the more efficient register return alternative.
13254
13255           Warning: code compiled with the -freg-struct-return switch is not
13256           binary compatible with code compiled with the -fpcc-struct-return
13257           switch.  Use it to conform to a non-default application binary
13258           interface.
13259
13260       -fshort-enums
13261           Allocate to an "enum" type only as many bytes as it needs for the
13262           declared range of possible values.  Specifically, the "enum" type
13263           will be equivalent to the smallest integer type which has enough
13264           room.
13265
13266           Warning: the -fshort-enums switch causes GCC to generate code that
13267           is not binary compatible with code generated without that switch.
13268           Use it to conform to a non-default application binary interface.
13269
13270       -fshort-double
13271           Use the same size for "double" as for "float".
13272
13273           Warning: the -fshort-double switch causes GCC to generate code that
13274           is not binary compatible with code generated without that switch.
13275           Use it to conform to a non-default application binary interface.
13276
13277       -fshort-wchar
13278           Override the underlying type for wchar_t to be short unsigned int
13279           instead of the default for the target.  This option is useful for
13280           building programs to run under WINE.
13281
13282           Warning: the -fshort-wchar switch causes GCC to generate code that
13283           is not binary compatible with code generated without that switch.
13284           Use it to conform to a non-default application binary interface.
13285
13286       -fno-common
13287           In C code, controls the placement of uninitialized global
13288           variables.  Unix C compilers have traditionally permitted multiple
13289           definitions of such variables in different compilation units by
13290           placing the variables in a common block.  This is the behavior
13291           specified by -fcommon, and is the default for GCC on most targets.
13292           On the other hand, this behavior is not required by ISO C, and on
13293           some targets may carry a speed or code size penalty on variable
13294           references.  The -fno-common option specifies that the compiler
13295           should place uninitialized global variables in the data section of
13296           the object file, rather than generating them as common blocks.
13297           This has the effect that if the same variable is declared (without
13298           "extern") in two different compilations, you will get a multiple-
13299           definition error when you link them.  In this case, you must
13300           compile with -fcommon instead.  Compiling with -fno-common is
13301           useful on targets for which it provides better performance, or if
13302           you wish to verify that the program will work on other systems
13303           which always treat uninitialized variable declarations this way.
13304
13305       -fno-ident
13306           Ignore the #ident directive.
13307
13308       -finhibit-size-directive
13309           Don't output a ".size" assembler directive, or anything else that
13310           would cause trouble if the function is split in the middle, and the
13311           two halves are placed at locations far apart in memory.  This
13312           option is used when compiling crtstuff.c; you should not need to
13313           use it for anything else.
13314
13315       -fverbose-asm
13316           Put extra commentary information in the generated assembly code to
13317           make it more readable.  This option is generally only of use to
13318           those who actually need to read the generated assembly code
13319           (perhaps while debugging the compiler itself).
13320
13321           -fno-verbose-asm, the default, causes the extra information to be
13322           omitted and is useful when comparing two assembler files.
13323
13324       -frecord-gcc-switches
13325           This switch causes the command line that was used to invoke the
13326           compiler to be recorded into the object file that is being created.
13327           This switch is only implemented on some targets and the exact
13328           format of the recording is target and binary file format dependent,
13329           but it usually takes the form of a section containing ASCII text.
13330           This switch is related to the -fverbose-asm switch, but that switch
13331           only records information in the assembler output file as comments,
13332           so it never reaches the object file.
13333
13334       -fpic
13335           Generate position-independent code (PIC) suitable for use in a
13336           shared library, if supported for the target machine.  Such code
13337           accesses all constant addresses through a global offset table
13338           (GOT).  The dynamic loader resolves the GOT entries when the
13339           program starts (the dynamic loader is not part of GCC; it is part
13340           of the operating system).  If the GOT size for the linked
13341           executable exceeds a machine-specific maximum size, you get an
13342           error message from the linker indicating that -fpic does not work;
13343           in that case, recompile with -fPIC instead.  (These maximums are 8k
13344           on the SPARC and 32k on the m68k and RS/6000.  The 386 has no such
13345           limit.)
13346
13347           Position-independent code requires special support, and therefore
13348           works only on certain machines.  For the 386, GCC supports PIC for
13349           System V but not for the Sun 386i.  Code generated for the IBM
13350           RS/6000 is always position-independent.
13351
13352           When this flag is set, the macros "__pic__" and "__PIC__" are
13353           defined to 1.
13354
13355       -fPIC
13356           If supported for the target machine, emit position-independent
13357           code, suitable for dynamic linking and avoiding any limit on the
13358           size of the global offset table.  This option makes a difference on
13359           the m68k, PowerPC and SPARC.
13360
13361           Position-independent code requires special support, and therefore
13362           works only on certain machines.
13363
13364           When this flag is set, the macros "__pic__" and "__PIC__" are
13365           defined to 2.
13366
13367       -fpie
13368       -fPIE
13369           These options are similar to -fpic and -fPIC, but generated
13370           position independent code can be only linked into executables.
13371           Usually these options are used when -pie GCC option will be used
13372           during linking.
13373
13374           -fpie and -fPIE both define the macros "__pie__" and "__PIE__".
13375           The macros have the value 1 for -fpie and 2 for -fPIE.
13376
13377       -fno-jump-tables
13378           Do not use jump tables for switch statements even where it would be
13379           more efficient than other code generation strategies.  This option
13380           is of use in conjunction with -fpic or -fPIC for building code
13381           which forms part of a dynamic linker and cannot reference the
13382           address of a jump table.  On some targets, jump tables do not
13383           require a GOT and this option is not needed.
13384
13385       -ffixed-reg
13386           Treat the register named reg as a fixed register; generated code
13387           should never refer to it (except perhaps as a stack pointer, frame
13388           pointer or in some other fixed role).
13389
13390           reg must be the name of a register.  The register names accepted
13391           are machine-specific and are defined in the "REGISTER_NAMES" macro
13392           in the machine description macro file.
13393
13394           This flag does not have a negative form, because it specifies a
13395           three-way choice.
13396
13397       -fcall-used-reg
13398           Treat the register named reg as an allocable register that is
13399           clobbered by function calls.  It may be allocated for temporaries
13400           or variables that do not live across a call.  Functions compiled
13401           this way will not save and restore the register reg.
13402
13403           It is an error to used this flag with the frame pointer or stack
13404           pointer.  Use of this flag for other registers that have fixed
13405           pervasive roles in the machine's execution model will produce
13406           disastrous results.
13407
13408           This flag does not have a negative form, because it specifies a
13409           three-way choice.
13410
13411       -fcall-saved-reg
13412           Treat the register named reg as an allocable register saved by
13413           functions.  It may be allocated even for temporaries or variables
13414           that live across a call.  Functions compiled this way will save and
13415           restore the register reg if they use it.
13416
13417           It is an error to used this flag with the frame pointer or stack
13418           pointer.  Use of this flag for other registers that have fixed
13419           pervasive roles in the machine's execution model will produce
13420           disastrous results.
13421
13422           A different sort of disaster will result from the use of this flag
13423           for a register in which function values may be returned.
13424
13425           This flag does not have a negative form, because it specifies a
13426           three-way choice.
13427
13428       -fpack-struct[=n]
13429           Without a value specified, pack all structure members together
13430           without holes.  When a value is specified (which must be a small
13431           power of two), pack structure members according to this value,
13432           representing the maximum alignment (that is, objects with default
13433           alignment requirements larger than this will be output potentially
13434           unaligned at the next fitting location.
13435
13436           Warning: the -fpack-struct switch causes GCC to generate code that
13437           is not binary compatible with code generated without that switch.
13438           Additionally, it makes the code suboptimal.  Use it to conform to a
13439           non-default application binary interface.
13440
13441       -finstrument-functions
13442           Generate instrumentation calls for entry and exit to functions.
13443           Just after function entry and just before function exit, the
13444           following profiling functions will be called with the address of
13445           the current function and its call site.  (On some platforms,
13446           "__builtin_return_address" does not work beyond the current
13447           function, so the call site information may not be available to the
13448           profiling functions otherwise.)
13449
13450                   void __cyg_profile_func_enter (void *this_fn,
13451                                                  void *call_site);
13452                   void __cyg_profile_func_exit  (void *this_fn,
13453                                                  void *call_site);
13454
13455           The first argument is the address of the start of the current
13456           function, which may be looked up exactly in the symbol table.
13457
13458           This instrumentation is also done for functions expanded inline in
13459           other functions.  The profiling calls will indicate where,
13460           conceptually, the inline function is entered and exited.  This
13461           means that addressable versions of such functions must be
13462           available.  If all your uses of a function are expanded inline,
13463           this may mean an additional expansion of code size.  If you use
13464           extern inline in your C code, an addressable version of such
13465           functions must be provided.  (This is normally the case anyways,
13466           but if you get lucky and the optimizer always expands the functions
13467           inline, you might have gotten away without providing static
13468           copies.)
13469
13470           A function may be given the attribute "no_instrument_function", in
13471           which case this instrumentation will not be done.  This can be
13472           used, for example, for the profiling functions listed above, high-
13473           priority interrupt routines, and any functions from which the
13474           profiling functions cannot safely be called (perhaps signal
13475           handlers, if the profiling routines generate output or allocate
13476           memory).
13477
13478       -finstrument-functions-exclude-file-list=file,file,...
13479           Set the list of functions that are excluded from instrumentation
13480           (see the description of "-finstrument-functions").  If the file
13481           that contains a function definition matches with one of file, then
13482           that function is not instrumented.  The match is done on
13483           substrings: if the file parameter is a substring of the file name,
13484           it is considered to be a match.
13485
13486           For example,
13487           "-finstrument-functions-exclude-file-list=/bits/stl,include/sys"
13488           will exclude any inline function defined in files whose pathnames
13489           contain "/bits/stl" or "include/sys".
13490
13491           If, for some reason, you want to include letter ',' in one of sym,
13492           write ','. For example,
13493           "-finstrument-functions-exclude-file-list=',,tmp'" (note the single
13494           quote surrounding the option).
13495
13496       -finstrument-functions-exclude-function-list=sym,sym,...
13497           This is similar to "-finstrument-functions-exclude-file-list", but
13498           this option sets the list of function names to be excluded from
13499           instrumentation.  The function name to be matched is its user-
13500           visible name, such as "vector<int> blah(const vector<int> &)", not
13501           the internal mangled name (e.g., "_Z4blahRSt6vectorIiSaIiEE").  The
13502           match is done on substrings: if the sym parameter is a substring of
13503           the function name, it is considered to be a match.
13504
13505       -fstack-check
13506           Generate code to verify that you do not go beyond the boundary of
13507           the stack.  You should specify this flag if you are running in an
13508           environment with multiple threads, but only rarely need to specify
13509           it in a single-threaded environment since stack overflow is
13510           automatically detected on nearly all systems if there is only one
13511           stack.
13512
13513           Note that this switch does not actually cause checking to be done;
13514           the operating system or the language runtime must do that.  The
13515           switch causes generation of code to ensure that they see the stack
13516           being extended.
13517
13518           You can additionally specify a string parameter: "no" means no
13519           checking, "generic" means force the use of old-style checking,
13520           "specific" means use the best checking method and is equivalent to
13521           bare -fstack-check.
13522
13523           Old-style checking is a generic mechanism that requires no specific
13524           target support in the compiler but comes with the following
13525           drawbacks:
13526
13527           1.  Modified allocation strategy for large objects: they will
13528               always be allocated dynamically if their size exceeds a fixed
13529               threshold.
13530
13531           2.  Fixed limit on the size of the static frame of functions: when
13532               it is topped by a particular function, stack checking is not
13533               reliable and a warning is issued by the compiler.
13534
13535           3.  Inefficiency: because of both the modified allocation strategy
13536               and the generic implementation, the performances of the code
13537               are hampered.
13538
13539           Note that old-style stack checking is also the fallback method for
13540           "specific" if no target support has been added in the compiler.
13541
13542       -fstack-limit-register=reg
13543       -fstack-limit-symbol=sym
13544       -fno-stack-limit
13545           Generate code to ensure that the stack does not grow beyond a
13546           certain value, either the value of a register or the address of a
13547           symbol.  If the stack would grow beyond the value, a signal is
13548           raised.  For most targets, the signal is raised before the stack
13549           overruns the boundary, so it is possible to catch the signal
13550           without taking special precautions.
13551
13552           For instance, if the stack starts at absolute address 0x80000000
13553           and grows downwards, you can use the flags
13554           -fstack-limit-symbol=__stack_limit and
13555           -Wl,--defsym,__stack_limit=0x7ffe0000 to enforce a stack limit of
13556           128KB.  Note that this may only work with the GNU linker.
13557
13558       -fargument-alias
13559       -fargument-noalias
13560       -fargument-noalias-global
13561       -fargument-noalias-anything
13562           Specify the possible relationships among parameters and between
13563           parameters and global data.
13564
13565           -fargument-alias specifies that arguments (parameters) may alias
13566           each other and may alias global storage.-fargument-noalias
13567           specifies that arguments do not alias each other, but may alias
13568           global storage.-fargument-noalias-global specifies that arguments
13569           do not alias each other and do not alias global storage.
13570           -fargument-noalias-anything specifies that arguments do not alias
13571           any other storage.
13572
13573           Each language will automatically use whatever option is required by
13574           the language standard.  You should not need to use these options
13575           yourself.
13576
13577       -fleading-underscore
13578           This option and its counterpart, -fno-leading-underscore, forcibly
13579           change the way C symbols are represented in the object file.  One
13580           use is to help link with legacy assembly code.
13581
13582           Warning: the -fleading-underscore switch causes GCC to generate
13583           code that is not binary compatible with code generated without that
13584           switch.  Use it to conform to a non-default application binary
13585           interface.  Not all targets provide complete support for this
13586           switch.
13587
13588       -ftls-model=model
13589           Alter the thread-local storage model to be used.  The model
13590           argument should be one of "global-dynamic", "local-dynamic",
13591           "initial-exec" or "local-exec".
13592
13593           The default without -fpic is "initial-exec"; with -fpic the default
13594           is "global-dynamic".
13595
13596       -fvisibility=default|internal|hidden|protected
13597           Set the default ELF image symbol visibility to the specified
13598           option---all symbols will be marked with this unless overridden
13599           within the code.  Using this feature can very substantially improve
13600           linking and load times of shared object libraries, produce more
13601           optimized code, provide near-perfect API export and prevent symbol
13602           clashes.  It is strongly recommended that you use this in any
13603           shared objects you distribute.
13604
13605           Despite the nomenclature, "default" always means public ie;
13606           available to be linked against from outside the shared object.
13607           "protected" and "internal" are pretty useless in real-world usage
13608           so the only other commonly used option will be "hidden".  The
13609           default if -fvisibility isn't specified is "default", i.e., make
13610           every symbol public---this causes the same behavior as previous
13611           versions of GCC.
13612
13613           A good explanation of the benefits offered by ensuring ELF symbols
13614           have the correct visibility is given by "How To Write Shared
13615           Libraries" by Ulrich Drepper (which can be found at
13616           <http://people.redhat.com/~drepper/>)---however a superior solution
13617           made possible by this option to marking things hidden when the
13618           default is public is to make the default hidden and mark things
13619           public.  This is the norm with DLL's on Windows and with
13620           -fvisibility=hidden and "__attribute__ ((visibility("default")))"
13621           instead of "__declspec(dllexport)" you get almost identical
13622           semantics with identical syntax.  This is a great boon to those
13623           working with cross-platform projects.
13624
13625           For those adding visibility support to existing code, you may find
13626           #pragma GCC visibility of use.  This works by you enclosing the
13627           declarations you wish to set visibility for with (for example)
13628           #pragma GCC visibility push(hidden) and #pragma GCC visibility pop.
13629           Bear in mind that symbol visibility should be viewed as part of the
13630           API interface contract and thus all new code should always specify
13631           visibility when it is not the default ie; declarations only for use
13632           within the local DSO should always be marked explicitly as hidden
13633           as so to avoid PLT indirection overheads---making this abundantly
13634           clear also aids readability and self-documentation of the code.
13635           Note that due to ISO C++ specification requirements, operator new
13636           and operator delete must always be of default visibility.
13637
13638           Be aware that headers from outside your project, in particular
13639           system headers and headers from any other library you use, may not
13640           be expecting to be compiled with visibility other than the default.
13641           You may need to explicitly say #pragma GCC visibility push(default)
13642           before including any such headers.
13643
13644           extern declarations are not affected by -fvisibility, so a lot of
13645           code can be recompiled with -fvisibility=hidden with no
13646           modifications.  However, this means that calls to extern functions
13647           with no explicit visibility will use the PLT, so it is more
13648           effective to use __attribute ((visibility)) and/or #pragma GCC
13649           visibility to tell the compiler which extern declarations should be
13650           treated as hidden.
13651
13652           Note that -fvisibility does affect C++ vague linkage entities. This
13653           means that, for instance, an exception class that will be thrown
13654           between DSOs must be explicitly marked with default visibility so
13655           that the type_info nodes will be unified between the DSOs.
13656
13657           An overview of these techniques, their benefits and how to use them
13658           is at <http://gcc.gnu.org/wiki/Visibility>.
13659

ENVIRONMENT

13661       This section describes several environment variables that affect how
13662       GCC operates.  Some of them work by specifying directories or prefixes
13663       to use when searching for various kinds of files.  Some are used to
13664       specify other aspects of the compilation environment.
13665
13666       Note that you can also specify places to search using options such as
13667       -B, -I and -L.  These take precedence over places specified using
13668       environment variables, which in turn take precedence over those
13669       specified by the configuration of GCC.
13670
13671       LANG
13672       LC_CTYPE
13673       LC_MESSAGES
13674       LC_ALL
13675           These environment variables control the way that GCC uses
13676           localization information that allow GCC to work with different
13677           national conventions.  GCC inspects the locale categories LC_CTYPE
13678           and LC_MESSAGES if it has been configured to do so.  These locale
13679           categories can be set to any value supported by your installation.
13680           A typical value is en_GB.UTF-8 for English in the United Kingdom
13681           encoded in UTF-8.
13682
13683           The LC_CTYPE environment variable specifies character
13684           classification.  GCC uses it to determine the character boundaries
13685           in a string; this is needed for some multibyte encodings that
13686           contain quote and escape characters that would otherwise be
13687           interpreted as a string end or escape.
13688
13689           The LC_MESSAGES environment variable specifies the language to use
13690           in diagnostic messages.
13691
13692           If the LC_ALL environment variable is set, it overrides the value
13693           of LC_CTYPE and LC_MESSAGES; otherwise, LC_CTYPE and LC_MESSAGES
13694           default to the value of the LANG environment variable.  If none of
13695           these variables are set, GCC defaults to traditional C English
13696           behavior.
13697
13698       TMPDIR
13699           If TMPDIR is set, it specifies the directory to use for temporary
13700           files.  GCC uses temporary files to hold the output of one stage of
13701           compilation which is to be used as input to the next stage: for
13702           example, the output of the preprocessor, which is the input to the
13703           compiler proper.
13704
13705       GCC_EXEC_PREFIX
13706           If GCC_EXEC_PREFIX is set, it specifies a prefix to use in the
13707           names of the subprograms executed by the compiler.  No slash is
13708           added when this prefix is combined with the name of a subprogram,
13709           but you can specify a prefix that ends with a slash if you wish.
13710
13711           If GCC_EXEC_PREFIX is not set, GCC will attempt to figure out an
13712           appropriate prefix to use based on the pathname it was invoked
13713           with.
13714
13715           If GCC cannot find the subprogram using the specified prefix, it
13716           tries looking in the usual places for the subprogram.
13717
13718           The default value of GCC_EXEC_PREFIX is prefix/lib/gcc/ where
13719           prefix is the prefix to the installed compiler. In many cases
13720           prefix is the value of "prefix" when you ran the configure script.
13721
13722           Other prefixes specified with -B take precedence over this prefix.
13723
13724           This prefix is also used for finding files such as crt0.o that are
13725           used for linking.
13726
13727           In addition, the prefix is used in an unusual way in finding the
13728           directories to search for header files.  For each of the standard
13729           directories whose name normally begins with /usr/local/lib/gcc
13730           (more precisely, with the value of GCC_INCLUDE_DIR), GCC tries
13731           replacing that beginning with the specified prefix to produce an
13732           alternate directory name.  Thus, with -Bfoo/, GCC will search
13733           foo/bar where it would normally search /usr/local/lib/bar.  These
13734           alternate directories are searched first; the standard directories
13735           come next. If a standard directory begins with the configured
13736           prefix then the value of prefix is replaced by GCC_EXEC_PREFIX when
13737           looking for header files.
13738
13739       COMPILER_PATH
13740           The value of COMPILER_PATH is a colon-separated list of
13741           directories, much like PATH.  GCC tries the directories thus
13742           specified when searching for subprograms, if it can't find the
13743           subprograms using GCC_EXEC_PREFIX.
13744
13745       LIBRARY_PATH
13746           The value of LIBRARY_PATH is a colon-separated list of directories,
13747           much like PATH.  When configured as a native compiler, GCC tries
13748           the directories thus specified when searching for special linker
13749           files, if it can't find them using GCC_EXEC_PREFIX.  Linking using
13750           GCC also uses these directories when searching for ordinary
13751           libraries for the -l option (but directories specified with -L come
13752           first).
13753
13754       LANG
13755           This variable is used to pass locale information to the compiler.
13756           One way in which this information is used is to determine the
13757           character set to be used when character literals, string literals
13758           and comments are parsed in C and C++.  When the compiler is
13759           configured to allow multibyte characters, the following values for
13760           LANG are recognized:
13761
13762           C-JIS
13763               Recognize JIS characters.
13764
13765           C-SJIS
13766               Recognize SJIS characters.
13767
13768           C-EUCJP
13769               Recognize EUCJP characters.
13770
13771           If LANG is not defined, or if it has some other value, then the
13772           compiler will use mblen and mbtowc as defined by the default locale
13773           to recognize and translate multibyte characters.
13774
13775       Some additional environments variables affect the behavior of the
13776       preprocessor.
13777
13778       CPATH
13779       C_INCLUDE_PATH
13780       CPLUS_INCLUDE_PATH
13781       OBJC_INCLUDE_PATH
13782           Each variable's value is a list of directories separated by a
13783           special character, much like PATH, in which to look for header
13784           files.  The special character, "PATH_SEPARATOR", is target-
13785           dependent and determined at GCC build time.  For Microsoft Windows-
13786           based targets it is a semicolon, and for almost all other targets
13787           it is a colon.
13788
13789           CPATH specifies a list of directories to be searched as if
13790           specified with -I, but after any paths given with -I options on the
13791           command line.  This environment variable is used regardless of
13792           which language is being preprocessed.
13793
13794           The remaining environment variables apply only when preprocessing
13795           the particular language indicated.  Each specifies a list of
13796           directories to be searched as if specified with -isystem, but after
13797           any paths given with -isystem options on the command line.
13798
13799           In all these variables, an empty element instructs the compiler to
13800           search its current working directory.  Empty elements can appear at
13801           the beginning or end of a path.  For instance, if the value of
13802           CPATH is ":/special/include", that has the same effect as
13803           -I. -I/special/include.
13804
13805       DEPENDENCIES_OUTPUT
13806           If this variable is set, its value specifies how to output
13807           dependencies for Make based on the non-system header files
13808           processed by the compiler.  System header files are ignored in the
13809           dependency output.
13810
13811           The value of DEPENDENCIES_OUTPUT can be just a file name, in which
13812           case the Make rules are written to that file, guessing the target
13813           name from the source file name.  Or the value can have the form
13814           file target, in which case the rules are written to file file using
13815           target as the target name.
13816
13817           In other words, this environment variable is equivalent to
13818           combining the options -MM and -MF, with an optional -MT switch too.
13819
13820       SUNPRO_DEPENDENCIES
13821           This variable is the same as DEPENDENCIES_OUTPUT (see above),
13822           except that system header files are not ignored, so it implies -M
13823           rather than -MM.  However, the dependence on the main input file is
13824           omitted.
13825

BUGS

13827       For instructions on reporting bugs, see
13828       <http://bugzilla.redhat.com/bugzilla>.
13829

FOOTNOTES

13831       1.  On some systems, gcc -shared needs to build supplementary stub code
13832           for constructors to work.  On multi-libbed systems, gcc -shared
13833           must select the correct support libraries to link against.  Failing
13834           to supply the correct flags may lead to subtle defects.  Supplying
13835           them in cases where they are not necessary is innocuous.
13836

SEE ALSO

13838       gpl(7), gfdl(7), fsf-funding(7), cpp(1), gcov(1), as(1), ld(1), gdb(1),
13839       adb(1), dbx(1), sdb(1) and the Info entries for gcc, cpp, as, ld,
13840       binutils and gdb.
13841

AUTHOR

13843       See the Info entry for gcc, or
13844       <http://gcc.gnu.org/onlinedocs/gcc/Contributors.html>, for contributors
13845       to GCC.
13846
13848       Copyright (c) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
13849       1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free
13850       Software Foundation, Inc.
13851
13852       Permission is granted to copy, distribute and/or modify this document
13853       under the terms of the GNU Free Documentation License, Version 1.2 or
13854       any later version published by the Free Software Foundation; with the
13855       Invariant Sections being "GNU General Public License" and "Funding Free
13856       Software", the Front-Cover texts being (a) (see below), and with the
13857       Back-Cover Texts being (b) (see below).  A copy of the license is
13858       included in the gfdl(7) man page.
13859
13860       (a) The FSF's Front-Cover Text is:
13861
13862            A GNU Manual
13863
13864       (b) The FSF's Back-Cover Text is:
13865
13866            You have freedom to copy and modify this GNU Manual, like GNU
13867            software.  Copies published by the Free Software Foundation raise
13868            funds for GNU development.
13869
13870
13871
13872gcc-4.4.7                         2012-03-13                            GCC(1)
Impressum