1GCC(1) GNU GCC(1)
2
3
4
6 gcc - GNU project C and C++ compiler
7
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
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
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
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
13827 For instructions on reporting bugs, see
13828 <http://bugzilla.redhat.com/bugzilla>.
13829
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
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
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)