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
366 i386 and x86-64 Windows Options -mconsole -mcygwin -mno-cygwin
367 -mdll -mnop-fun-dllimport -mthread -mwin32 -mwindows
368
369 IA-64 Options -mbig-endian -mlittle-endian -mgnu-as -mgnu-ld
370 -mno-pic -mvolatile-asm-stop -mregister-names -mno-sdata
371 -mconstant-gp -mauto-pic -minline-float-divide-min-latency
372 -minline-float-divide-max-throughput
373 -minline-int-divide-min-latency -minline-int-divide-max-throughput
374 -minline-sqrt-min-latency -minline-sqrt-max-throughput
375 -mno-dwarf2-asm -mearly-stop-bits -mfixed-range=register-range
376 -mtls-size=tls-size -mtune=cpu-type -mt -pthread -milp32 -mlp64
377 -mno-sched-br-data-spec -msched-ar-data-spec
378 -mno-sched-control-spec -msched-br-in-data-spec
379 -msched-ar-in-data-spec -msched-in-control-spec -msched-ldc
380 -mno-sched-control-ldc -mno-sched-spec-verbose
381 -mno-sched-prefer-non-data-spec-insns
382 -mno-sched-prefer-non-control-spec-insns
383 -mno-sched-count-spec-in-critical-path
384
385 M32R/D Options -m32r2 -m32rx -m32r -mdebug -malign-loops
386 -mno-align-loops -missue-rate=number -mbranch-cost=number
387 -mmodel=code-size-model-type -msdata=sdata-type -mno-flush-func
388 -mflush-func=name -mno-flush-trap -mflush-trap=number -G num
389
390 M32C Options -mcpu=cpu -msim -memregs=number
391
392 M680x0 Options -march=arch -mcpu=cpu -mtune=tune -m68000 -m68020
393 -m68020-40 -m68020-60 -m68030 -m68040 -m68060 -mcpu32 -m5200
394 -m5206e -m528x -m5307 -m5407 -mcfv4e -mbitfield -mno-bitfield
395 -mc68000 -mc68020 -mnobitfield -mrtd -mno-rtd -mdiv -mno-div
396 -mshort -mno-short -mhard-float -m68881 -msoft-float -mpcrel
397 -malign-int -mstrict-align -msep-data -mno-sep-data
398 -mshared-library-id=n -mid-shared-library -mno-id-shared-library
399 -mxgot -mno-xgot
400
401 M68hc1x Options -m6811 -m6812 -m68hc11 -m68hc12 -m68hcs12
402 -mauto-incdec -minmax -mlong-calls -mshort
403 -msoft-reg-count=count
404
405 MCore Options -mhardlit -mno-hardlit -mdiv -mno-div
406 -mrelax-immediates -mno-relax-immediates -mwide-bitfields
407 -mno-wide-bitfields -m4byte-functions -mno-4byte-functions
408 -mcallgraph-data -mno-callgraph-data -mslow-bytes -mno-slow-bytes
409 -mno-lsim -mlittle-endian -mbig-endian -m210 -m340
410 -mstack-increment
411
412 MIPS Options -EL -EB -march=arch -mtune=arch -mips1 -mips2
413 -mips3 -mips4 -mips32 -mips32r2 -mips64 -mips64r2 -mips16
414 -mno-mips16 -mflip-mips16 -minterlink-mips16
415 -mno-interlink-mips16 -mabi=abi -mabicalls -mno-abicalls -mshared
416 -mno-shared -mplt -mno-plt -mxgot -mno-xgot -mgp32 -mgp64
417 -mfp32 -mfp64 -mhard-float -msoft-float -msingle-float
418 -mdouble-float -mdsp -mno-dsp -mdspr2 -mno-dspr2 -mfpu=fpu-type
419 -msmartmips -mno-smartmips -mpaired-single -mno-paired-single
420 -mdmx -mno-mdmx -mips3d -mno-mips3d -mmt -mno-mt -mllsc
421 -mno-llsc -mlong64 -mlong32 -msym32 -mno-sym32 -Gnum
422 -mlocal-sdata -mno-local-sdata -mextern-sdata -mno-extern-sdata
423 -mgpopt -mno-gopt -membedded-data -mno-embedded-data
424 -muninit-const-in-rodata -mno-uninit-const-in-rodata
425 -mcode-readable=setting -msplit-addresses -mno-split-addresses
426 -mexplicit-relocs -mno-explicit-relocs -mcheck-zero-division
427 -mno-check-zero-division -mdivide-traps -mdivide-breaks -mmemcpy
428 -mno-memcpy -mlong-calls -mno-long-calls -mmad -mno-mad
429 -mfused-madd -mno-fused-madd -nocpp -mfix-r4000 -mno-fix-r4000
430 -mfix-r4400 -mno-fix-r4400 -mfix-r10000 -mno-fix-r10000
431 -mfix-vr4120 -mno-fix-vr4120 -mfix-vr4130 -mno-fix-vr4130
432 -mfix-sb1 -mno-fix-sb1 -mflush-func=func -mno-flush-func
433 -mbranch-cost=num -mbranch-likely -mno-branch-likely
434 -mfp-exceptions -mno-fp-exceptions -mvr4130-align -mno-vr4130-align
435
436 MMIX Options -mlibfuncs -mno-libfuncs -mepsilon -mno-epsilon
437 -mabi=gnu -mabi=mmixware -mzero-extend -mknuthdiv
438 -mtoplevel-symbols -melf -mbranch-predict -mno-branch-predict
439 -mbase-addresses -mno-base-addresses -msingle-exit
440 -mno-single-exit
441
442 MN10300 Options -mmult-bug -mno-mult-bug -mam33 -mno-am33
443 -mam33-2 -mno-am33-2 -mreturn-pointer-on-d0 -mno-crt0 -mrelax
444
445 PDP-11 Options -mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45
446 -m10 -mbcopy -mbcopy-builtin -mint32 -mno-int16 -mint16
447 -mno-int32 -mfloat32 -mno-float64 -mfloat64 -mno-float32
448 -mabshi -mno-abshi -mbranch-expensive -mbranch-cheap -msplit
449 -mno-split -munix-asm -mdec-asm
450
451 picoChip Options -mae=ae_type -mvliw-lookahead=N
452 -msymbol-as-address -mno-inefficient-warnings
453
454 PowerPC Options See RS/6000 and PowerPC Options.
455
456 RS/6000 and PowerPC Options -mcpu=cpu-type -mtune=cpu-type
457 -mcmodel=code-model -mpower -mno-power -mpower2 -mno-power2
458 -mpowerpc -mpowerpc64 -mno-powerpc -maltivec -mno-altivec
459 -mpowerpc-gpopt -mno-powerpc-gpopt -mpowerpc-gfxopt
460 -mno-powerpc-gfxopt -mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb
461 -mpopcntd -mno-popcntd -mfprnd -mno-fprnd -mcmpb -mno-cmpb
462 -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp -mnew-mnemonics
463 -mold-mnemonics -mfull-toc -mminimal-toc -mno-fp-in-toc
464 -mno-sum-in-toc -m64 -m32 -mxl-compat -mno-xl-compat -mpe
465 -malign-power -malign-natural -msoft-float -mhard-float
466 -mmultiple -mno-multiple -msingle-float -mdouble-float
467 -msimple-fpu -mstring -mno-string -mupdate -mno-update
468 -mavoid-indexed-addresses -mno-avoid-indexed-addresses
469 -mfused-madd -mno-fused-madd -mbit-align -mno-bit-align
470 -mstrict-align -mno-strict-align -mrelocatable -mno-relocatable
471 -mrelocatable-lib -mno-relocatable-lib -mtoc -mno-toc -mlittle
472 -mlittle-endian -mbig -mbig-endian -mdynamic-no-pic -maltivec
473 -mswdiv -mprioritize-restricted-insns=priority
474 -msched-costly-dep=dependence_type -minsert-sched-nops=scheme
475 -mcall-sysv -mcall-netbsd -maix-struct-return
476 -msvr4-struct-return -mabi=abi-type -msecure-plt -mbss-plt -misel
477 -mno-isel -misel=yes -misel=no -mspe -mno-spe -mspe=yes -mspe=no
478 -mpaired -mgen-cell-microcode -mwarn-cell-microcode -mvrsave
479 -mno-vrsave -mmulhw -mno-mulhw -mdlmzb -mno-dlmzb -mfloat-gprs=yes
480 -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double -mprototype
481 -mno-prototype -msim -mmvme -mads -myellowknife -memb -msdata
482 -msdata=opt -mvxworks -G num -pthread
483
484 S/390 and zSeries Options -mtune=cpu-type -march=cpu-type
485 -mhard-float -msoft-float -mhard-dfp -mno-hard-dfp
486 -mlong-double-64 -mlong-double-128 -mbackchain -mno-backchain
487 -mpacked-stack -mno-packed-stack -msmall-exec -mno-small-exec
488 -mmvcle -mno-mvcle -m64 -m31 -mdebug -mno-debug -mesa -mzarch
489 -mtpf-trace -mno-tpf-trace -mfused-madd -mno-fused-madd
490 -mwarn-framesize -mwarn-dynamicstack -mstack-size -mstack-guard
491
492 Score Options -meb -mel -mnhwloop -muls -mmac -mscore5 -mscore5u
493 -mscore7 -mscore7d
494
495 SH Options -m1 -m2 -m2e -m3 -m3e -m4-nofpu -m4-single-only
496 -m4-single -m4 -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al
497 -m5-64media -m5-64media-nofpu -m5-32media -m5-32media-nofpu
498 -m5-compact -m5-compact-nofpu -mb -ml -mdalign -mrelax
499 -mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave
500 -mieee -mbitops -misize -minline-ic_invalidate -mpadstruct
501 -mspace -mprefergot -musermode -multcost=number -mdiv=strategy
502 -mdivsi3_libfunc=name -mfixed-range=register-range -madjust-unroll
503 -mindexed-addressing -mgettrcost=number -mpt-fixed
504 -minvalid-symbols
505
506 SPARC Options -mcpu=cpu-type -mtune=cpu-type -mcmodel=code-model
507 -m32 -m64 -mapp-regs -mno-app-regs -mfaster-structs
508 -mno-faster-structs -mfpu -mno-fpu -mhard-float -msoft-float
509 -mhard-quad-float -msoft-quad-float -mimpure-text
510 -mno-impure-text -mlittle-endian -mstack-bias -mno-stack-bias
511 -munaligned-doubles -mno-unaligned-doubles -mv8plus -mno-v8plus
512 -mvis -mno-vis -threads -pthreads -pthread
513
514 SPU Options -mwarn-reloc -merror-reloc -msafe-dma -munsafe-dma
515 -mbranch-hints -msmall-mem -mlarge-mem -mstdmain
516 -mfixed-range=register-range
517
518 System V Options -Qy -Qn -YP,paths -Ym,dir
519
520 V850 Options -mlong-calls -mno-long-calls -mep -mno-ep
521 -mprolog-function -mno-prolog-function -mspace -mtda=n -msda=n
522 -mzda=n -mapp-regs -mno-app-regs -mdisable-callt
523 -mno-disable-callt -mv850e1 -mv850e -mv850 -mbig-switch
524
525 VAX Options -mg -mgnu -munix
526
527 VxWorks Options -mrtp -non-static -Bstatic -Bdynamic -Xbind-lazy
528 -Xbind-now
529
530 x86-64 Options See i386 and x86-64 Options.
531
532 Xstormy16 Options -msim
533
534 Xtensa Options -mconst16 -mno-const16 -mfused-madd -mno-fused-madd
535 -mserialize-volatile -mno-serialize-volatile
536 -mtext-section-literals -mno-text-section-literals -mtarget-align
537 -mno-target-align -mlongcalls -mno-longcalls
538
539 zSeries Options See S/390 and zSeries Options.
540
541 Code Generation Options
542 -fcall-saved-reg -fcall-used-reg -ffixed-reg -fexceptions
543 -fnon-call-exceptions -funwind-tables -fasynchronous-unwind-tables
544 -finhibit-size-directive -finstrument-functions
545 -finstrument-functions-exclude-function-list=sym,sym,...
546 -finstrument-functions-exclude-file-list=file,file,... -fno-common
547 -fno-ident -fpcc-struct-return -fpic -fPIC -fpie -fPIE
548 -fno-jump-tables -frecord-gcc-switches -freg-struct-return
549 -fshort-enums -fshort-double -fshort-wchar -fverbose-asm
550 -fpack-struct[=n] -fstack-check -fstack-limit-register=reg
551 -fstack-limit-symbol=sym -fno-stack-limit -fargument-alias
552 -fargument-noalias -fargument-noalias-global
553 -fargument-noalias-anything -fleading-underscore -ftls-model=model
554 -ftrapv -fwrapv -fbounds-check -fvisibility
555
556 Options Controlling the Kind of Output
557 Compilation can involve up to four stages: preprocessing, compilation
558 proper, assembly and linking, always in that order. GCC is capable of
559 preprocessing and compiling several files either into several assembler
560 input files, or into one assembler input file; then each assembler
561 input file produces an object file, and linking combines all the object
562 files (those newly compiled, and those specified as input) into an
563 executable file.
564
565 For any given input file, the file name suffix determines what kind of
566 compilation is done:
567
568 file.c
569 C source code which must be preprocessed.
570
571 file.i
572 C source code which should not be preprocessed.
573
574 file.ii
575 C++ source code which should not be preprocessed.
576
577 file.m
578 Objective-C source code. Note that you must link with the libobjc
579 library to make an Objective-C program work.
580
581 file.mi
582 Objective-C source code which should not be preprocessed.
583
584 file.mm
585 file.M
586 Objective-C++ source code. Note that you must link with the
587 libobjc library to make an Objective-C++ program work. Note that
588 .M refers to a literal capital M.
589
590 file.mii
591 Objective-C++ source code which should not be preprocessed.
592
593 file.h
594 C, C++, Objective-C or Objective-C++ header file to be turned into
595 a precompiled header.
596
597 file.cc
598 file.cp
599 file.cxx
600 file.cpp
601 file.CPP
602 file.c++
603 file.C
604 C++ source code which must be preprocessed. Note that in .cxx, the
605 last two letters must both be literally x. Likewise, .C refers to
606 a literal capital C.
607
608 file.mm
609 file.M
610 Objective-C++ source code which must be preprocessed.
611
612 file.mii
613 Objective-C++ source code which should not be preprocessed.
614
615 file.hh
616 file.H
617 file.hp
618 file.hxx
619 file.hpp
620 file.HPP
621 file.h++
622 file.tcc
623 C++ header file to be turned into a precompiled header.
624
625 file.f
626 file.for
627 file.ftn
628 Fixed form Fortran source code which should not be preprocessed.
629
630 file.F
631 file.FOR
632 file.fpp
633 file.FPP
634 file.FTN
635 Fixed form Fortran source code which must be preprocessed (with the
636 traditional preprocessor).
637
638 file.f90
639 file.f95
640 file.f03
641 file.f08
642 Free form Fortran source code which should not be preprocessed.
643
644 file.F90
645 file.F95
646 file.F03
647 file.F08
648 Free form Fortran source code which must be preprocessed (with the
649 traditional preprocessor).
650
651 file.ads
652 Ada source code file which contains a library unit declaration (a
653 declaration of a package, subprogram, or generic, or a generic
654 instantiation), or a library unit renaming declaration (a package,
655 generic, or subprogram renaming declaration). Such files are also
656 called specs.
657
658 file.adb
659 Ada source code file containing a library unit body (a subprogram
660 or package body). Such files are also called bodies.
661
662 file.s
663 Assembler code.
664
665 file.S
666 file.sx
667 Assembler code which must be preprocessed.
668
669 other
670 An object file to be fed straight into linking. Any file name with
671 no recognized suffix is treated this way.
672
673 You can specify the input language explicitly with the -x option:
674
675 -x language
676 Specify explicitly the language for the following input files
677 (rather than letting the compiler choose a default based on the
678 file name suffix). This option applies to all following input
679 files until the next -x option. Possible values for language are:
680
681 c c-header c-cpp-output
682 c++ c++-header c++-cpp-output
683 objective-c objective-c-header objective-c-cpp-output
684 objective-c++ objective-c++-header objective-c++-cpp-output
685 assembler assembler-with-cpp
686 ada
687 f77 f77-cpp-input f95 f95-cpp-input
688 java
689
690 -x none
691 Turn off any specification of a language, so that subsequent files
692 are handled according to their file name suffixes (as they are if
693 -x has not been used at all).
694
695 -pass-exit-codes
696 Normally the gcc program will exit with the code of 1 if any phase
697 of the compiler returns a non-success return code. If you specify
698 -pass-exit-codes, the gcc program will instead return with
699 numerically highest error produced by any phase that returned an
700 error indication. The C, C++, and Fortran frontends return 4, if
701 an internal compiler error is encountered.
702
703 If you only want some of the stages of compilation, you can use -x (or
704 filename suffixes) to tell gcc where to start, and one of the options
705 -c, -S, or -E to say where gcc is to stop. Note that some combinations
706 (for example, -x cpp-output -E) instruct gcc to do nothing at all.
707
708 -c Compile or assemble the source files, but do not link. The linking
709 stage simply is not done. The ultimate output is in the form of an
710 object file for each source file.
711
712 By default, the object file name for a source file is made by
713 replacing the suffix .c, .i, .s, etc., with .o.
714
715 Unrecognized input files, not requiring compilation or assembly,
716 are ignored.
717
718 -S Stop after the stage of compilation proper; do not assemble. The
719 output is in the form of an assembler code file for each non-
720 assembler input file specified.
721
722 By default, the assembler file name for a source file is made by
723 replacing the suffix .c, .i, etc., with .s.
724
725 Input files that don't require compilation are ignored.
726
727 -E Stop after the preprocessing stage; do not run the compiler proper.
728 The output is in the form of preprocessed source code, which is
729 sent to the standard output.
730
731 Input files which don't require preprocessing are ignored.
732
733 -o file
734 Place output in file file. This applies regardless to whatever
735 sort of output is being produced, whether it be an executable file,
736 an object file, an assembler file or preprocessed C code.
737
738 If -o is not specified, the default is to put an executable file in
739 a.out, the object file for source.suffix in source.o, its assembler
740 file in source.s, a precompiled header file in source.suffix.gch,
741 and all preprocessed C source on standard output.
742
743 -v Print (on standard error output) the commands executed to run the
744 stages of compilation. Also print the version number of the
745 compiler driver program and of the preprocessor and the compiler
746 proper.
747
748 -###
749 Like -v except the commands are not executed and all command
750 arguments are quoted. This is useful for shell scripts to capture
751 the driver-generated command lines.
752
753 -pipe
754 Use pipes rather than temporary files for communication between the
755 various stages of compilation. This fails to work on some systems
756 where the assembler is unable to read from a pipe; but the GNU
757 assembler has no trouble.
758
759 -combine
760 If you are compiling multiple source files, this option tells the
761 driver to pass all the source files to the compiler at once (for
762 those languages for which the compiler can handle this). This will
763 allow intermodule analysis (IMA) to be performed by the compiler.
764 Currently the only language for which this is supported is C. If
765 you pass source files for multiple languages to the driver, using
766 this option, the driver will invoke the compiler(s) that support
767 IMA once each, passing each compiler all the source files
768 appropriate for it. For those languages that do not support IMA
769 this option will be ignored, and the compiler will be invoked once
770 for each source file in that language. If you use this option in
771 conjunction with -save-temps, the compiler will generate multiple
772 pre-processed files (one for each source file), but only one
773 (combined) .o or .s file.
774
775 --help
776 Print (on the standard output) a description of the command line
777 options understood by gcc. If the -v option is also specified then
778 --help will also be passed on to the various processes invoked by
779 gcc, so that they can display the command line options they accept.
780 If the -Wextra option has also been specified (prior to the --help
781 option), then command line options which have no documentation
782 associated with them will also be displayed.
783
784 --target-help
785 Print (on the standard output) a description of target-specific
786 command line options for each tool. For some targets extra target-
787 specific information may also be printed.
788
789 --help={class|[^]qualifier}[,...]
790 Print (on the standard output) a description of the command line
791 options understood by the compiler that fit into all specified
792 classes and qualifiers. These are the supported classes:
793
794 optimizers
795 This will display all of the optimization options supported by
796 the compiler.
797
798 warnings
799 This will display all of the options controlling warning
800 messages produced by the compiler.
801
802 target
803 This will display target-specific options. Unlike the
804 --target-help option however, target-specific options of the
805 linker and assembler will not be displayed. This is because
806 those tools do not currently support the extended --help=
807 syntax.
808
809 params
810 This will display the values recognized by the --param option.
811
812 language
813 This will display the options supported for language, where
814 language is the name of one of the languages supported in this
815 version of GCC.
816
817 common
818 This will display the options that are common to all languages.
819
820 These are the supported qualifiers:
821
822 undocumented
823 Display only those options which are undocumented.
824
825 joined
826 Display options which take an argument that appears after an
827 equal sign in the same continuous piece of text, such as:
828 --help=target.
829
830 separate
831 Display options which take an argument that appears as a
832 separate word following the original option, such as: -o
833 output-file.
834
835 Thus for example to display all the undocumented target-specific
836 switches supported by the compiler the following can be used:
837
838 --help=target,undocumented
839
840 The sense of a qualifier can be inverted by prefixing it with the ^
841 character, so for example to display all binary warning options
842 (i.e., ones that are either on or off and that do not take an
843 argument), which have a description the following can be used:
844
845 --help=warnings,^joined,^undocumented
846
847 The argument to --help= should not consist solely of inverted
848 qualifiers.
849
850 Combining several classes is possible, although this usually
851 restricts the output by so much that there is nothing to display.
852 One case where it does work however is when one of the classes is
853 target. So for example to display all the target-specific
854 optimization options the following can be used:
855
856 --help=target,optimizers
857
858 The --help= option can be repeated on the command line. Each
859 successive use will display its requested class of options,
860 skipping those that have already been displayed.
861
862 If the -Q option appears on the command line before the --help=
863 option, then the descriptive text displayed by --help= is changed.
864 Instead of describing the displayed options, an indication is given
865 as to whether the option is enabled, disabled or set to a specific
866 value (assuming that the compiler knows this at the point where the
867 --help= option is used).
868
869 Here is a truncated example from the ARM port of gcc:
870
871 % gcc -Q -mabi=2 --help=target -c
872 The following options are target specific:
873 -mabi= 2
874 -mabort-on-noreturn [disabled]
875 -mapcs [disabled]
876
877 The output is sensitive to the effects of previous command line
878 options, so for example it is possible to find out which
879 optimizations are enabled at -O2 by using:
880
881 -Q -O2 --help=optimizers
882
883 Alternatively you can discover which binary optimizations are
884 enabled by -O3 by using:
885
886 gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
887 gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
888 diff /tmp/O2-opts /tmp/O3-opts | grep enabled
889
890 --version
891 Display the version number and copyrights of the invoked GCC.
892
893 -wrapper
894 Invoke all subcommands under a wrapper program. It takes a single
895 comma separated list as an argument, which will be used to invoke
896 the wrapper:
897
898 gcc -c t.c -wrapper gdb,--args
899
900 This will invoke all subprograms of gcc under "gdb --args", thus
901 cc1 invocation will be "gdb --args cc1 ...".
902
903 @file
904 Read command-line options from file. The options read are inserted
905 in place of the original @file option. If file does not exist, or
906 cannot be read, then the option will be treated literally, and not
907 removed.
908
909 Options in file are separated by whitespace. A whitespace
910 character may be included in an option by surrounding the entire
911 option in either single or double quotes. Any character (including
912 a backslash) may be included by prefixing the character to be
913 included with a backslash. The file may itself contain additional
914 @file options; any such options will be processed recursively.
915
916 Compiling C++ Programs
917 C++ source files conventionally use one of the suffixes .C, .cc, .cpp,
918 .CPP, .c++, .cp, or .cxx; C++ header files often use .hh, .hpp, .H, or
919 (for shared template code) .tcc; and preprocessed C++ files use the
920 suffix .ii. GCC recognizes files with these names and compiles them as
921 C++ programs even if you call the compiler the same way as for
922 compiling C programs (usually with the name gcc).
923
924 However, the use of gcc does not add the C++ library. g++ is a program
925 that calls GCC and treats .c, .h and .i files as C++ source files
926 instead of C source files unless -x is used, and automatically
927 specifies linking against the C++ library. This program is also useful
928 when precompiling a C header file with a .h extension for use in C++
929 compilations. On many systems, g++ is also installed with the name
930 c++.
931
932 When you compile C++ programs, you may specify many of the same
933 command-line options that you use for compiling programs in any
934 language; or command-line options meaningful for C and related
935 languages; or options that are meaningful only for C++ programs.
936
937 Options Controlling C Dialect
938 The following options control the dialect of C (or languages derived
939 from C, such as C++, Objective-C and Objective-C++) that the compiler
940 accepts:
941
942 -ansi
943 In C mode, this is equivalent to -std=c89. In C++ mode, it is
944 equivalent to -std=c++98.
945
946 This turns off certain features of GCC that are incompatible with
947 ISO C90 (when compiling C code), or of standard C++ (when compiling
948 C++ code), such as the "asm" and "typeof" keywords, and predefined
949 macros such as "unix" and "vax" that identify the type of system
950 you are using. It also enables the undesirable and rarely used ISO
951 trigraph feature. For the C compiler, it disables recognition of
952 C++ style // comments as well as the "inline" keyword.
953
954 The alternate keywords "__asm__", "__extension__", "__inline__" and
955 "__typeof__" continue to work despite -ansi. You would not want to
956 use them in an ISO C program, of course, but it is useful to put
957 them in header files that might be included in compilations done
958 with -ansi. Alternate predefined macros such as "__unix__" and
959 "__vax__" are also available, with or without -ansi.
960
961 The -ansi option does not cause non-ISO programs to be rejected
962 gratuitously. For that, -pedantic is required in addition to
963 -ansi.
964
965 The macro "__STRICT_ANSI__" is predefined when the -ansi option is
966 used. Some header files may notice this macro and refrain from
967 declaring certain functions or defining certain macros that the ISO
968 standard doesn't call for; this is to avoid interfering with any
969 programs that might use these names for other things.
970
971 Functions that would normally be built in but do not have semantics
972 defined by ISO C (such as "alloca" and "ffs") are not built-in
973 functions when -ansi is used.
974
975 -std=
976 Determine the language standard. This option is currently only
977 supported when compiling C or C++.
978
979 The compiler can accept several base standards, such as c89 or
980 c++98, and GNU dialects of those standards, such as gnu89 or
981 gnu++98. By specifying a base standard, the compiler will accept
982 all programs following that standard and those using GNU extensions
983 that do not contradict it. For example, -std=c89 turns off certain
984 features of GCC that are incompatible with ISO C90, such as the
985 "asm" and "typeof" keywords, but not other GNU extensions that do
986 not have a meaning in ISO C90, such as omitting the middle term of
987 a "?:" expression. On the other hand, by specifying a GNU dialect
988 of a standard, all features the compiler support are enabled, even
989 when those features change the meaning of the base standard and
990 some strict-conforming programs may be rejected. The particular
991 standard is used by -pedantic to identify which features are GNU
992 extensions given that version of the standard. For example
993 -std=gnu89 -pedantic would warn about C++ style // comments, while
994 -std=gnu99 -pedantic would not.
995
996 A value for this option must be provided; possible values are
997
998 c89
999 iso9899:1990
1000 Support all ISO C90 programs (certain GNU extensions that
1001 conflict with ISO C90 are disabled). Same as -ansi for C code.
1002
1003 iso9899:199409
1004 ISO C90 as modified in amendment 1.
1005
1006 c99
1007 c9x
1008 iso9899:1999
1009 iso9899:199x
1010 ISO C99. Note that this standard is not yet fully supported;
1011 see <http://gcc.gnu.org/gcc-4.4/c99status.html> for more
1012 information. The names c9x and iso9899:199x are deprecated.
1013
1014 gnu89
1015 GNU dialect of ISO C90 (including some C99 features). This is
1016 the default for C code.
1017
1018 gnu99
1019 gnu9x
1020 GNU dialect of ISO C99. When ISO C99 is fully implemented in
1021 GCC, this will become the default. The name gnu9x is
1022 deprecated.
1023
1024 c++98
1025 The 1998 ISO C++ standard plus amendments. Same as -ansi for
1026 C++ code.
1027
1028 gnu++98
1029 GNU dialect of -std=c++98. This is the default for C++ code.
1030
1031 c++0x
1032 The working draft of the upcoming ISO C++0x standard. This
1033 option enables experimental features that are likely to be
1034 included in C++0x. The working draft is constantly changing,
1035 and any feature that is enabled by this flag may be removed
1036 from future versions of GCC if it is not part of the C++0x
1037 standard.
1038
1039 gnu++0x
1040 GNU dialect of -std=c++0x. This option enables experimental
1041 features that may be removed in future versions of GCC.
1042
1043 -fgnu89-inline
1044 The option -fgnu89-inline tells GCC to use the traditional GNU
1045 semantics for "inline" functions when in C99 mode.
1046 This option is accepted and ignored by GCC versions 4.1.3 up to
1047 but not including 4.3. In GCC versions 4.3 and later it changes
1048 the behavior of GCC in C99 mode. Using this option is roughly
1049 equivalent to adding the "gnu_inline" function attribute to all
1050 inline functions.
1051
1052 The option -fno-gnu89-inline explicitly tells GCC to use the C99
1053 semantics for "inline" when in C99 or gnu99 mode (i.e., it
1054 specifies the default behavior). This option was first supported
1055 in GCC 4.3. This option is not supported in C89 or gnu89 mode.
1056
1057 The preprocessor macros "__GNUC_GNU_INLINE__" and
1058 "__GNUC_STDC_INLINE__" may be used to check which semantics are in
1059 effect for "inline" functions.
1060
1061 -aux-info filename
1062 Output to the given filename prototyped declarations for all
1063 functions declared and/or defined in a translation unit, including
1064 those in header files. This option is silently ignored in any
1065 language other than C.
1066
1067 Besides declarations, the file indicates, in comments, the origin
1068 of each declaration (source file and line), whether the declaration
1069 was implicit, prototyped or unprototyped (I, N for new or O for
1070 old, respectively, in the first character after the line number and
1071 the colon), and whether it came from a declaration or a definition
1072 (C or F, respectively, in the following character). In the case of
1073 function definitions, a K&R-style list of arguments followed by
1074 their declarations is also provided, inside comments, after the
1075 declaration.
1076
1077 -fno-asm
1078 Do not recognize "asm", "inline" or "typeof" as a keyword, so that
1079 code can use these words as identifiers. You can use the keywords
1080 "__asm__", "__inline__" and "__typeof__" instead. -ansi implies
1081 -fno-asm.
1082
1083 In C++, this switch only affects the "typeof" keyword, since "asm"
1084 and "inline" are standard keywords. You may want to use the
1085 -fno-gnu-keywords flag instead, which has the same effect. In C99
1086 mode (-std=c99 or -std=gnu99), this switch only affects the "asm"
1087 and "typeof" keywords, since "inline" is a standard keyword in ISO
1088 C99.
1089
1090 -fno-builtin
1091 -fno-builtin-function
1092 Don't recognize built-in functions that do not begin with
1093 __builtin_ as prefix.
1094
1095 GCC normally generates special code to handle certain built-in
1096 functions more efficiently; for instance, calls to "alloca" may
1097 become single instructions that adjust the stack directly, and
1098 calls to "memcpy" may become inline copy loops. The resulting code
1099 is often both smaller and faster, but since the function calls no
1100 longer appear as such, you cannot set a breakpoint on those calls,
1101 nor can you change the behavior of the functions by linking with a
1102 different library. In addition, when a function is recognized as a
1103 built-in function, GCC may use information about that function to
1104 warn about problems with calls to that function, or to generate
1105 more efficient code, even if the resulting code still contains
1106 calls to that function. For example, warnings are given with
1107 -Wformat for bad calls to "printf", when "printf" is built in, and
1108 "strlen" is known not to modify global memory.
1109
1110 With the -fno-builtin-function option only the built-in function
1111 function is disabled. function must not begin with __builtin_. If
1112 a function is named that is not built-in in this version of GCC,
1113 this option is ignored. There is no corresponding
1114 -fbuiltin-function option; if you wish to enable built-in functions
1115 selectively when using -fno-builtin or -ffreestanding, you may
1116 define macros such as:
1117
1118 #define abs(n) __builtin_abs ((n))
1119 #define strcpy(d, s) __builtin_strcpy ((d), (s))
1120
1121 -fhosted
1122 Assert that compilation takes place in a hosted environment. This
1123 implies -fbuiltin. A hosted environment is one in which the entire
1124 standard library is available, and in which "main" has a return
1125 type of "int". Examples are nearly everything except a kernel.
1126 This is equivalent to -fno-freestanding.
1127
1128 -ffreestanding
1129 Assert that compilation takes place in a freestanding environment.
1130 This implies -fno-builtin. A freestanding environment is one in
1131 which the standard library may not exist, and program startup may
1132 not necessarily be at "main". The most obvious example is an OS
1133 kernel. This is equivalent to -fno-hosted.
1134
1135 -fopenmp
1136 Enable handling of OpenMP directives "#pragma omp" in C/C++ and
1137 "!$omp" in Fortran. When -fopenmp is specified, the compiler
1138 generates parallel code according to the OpenMP Application Program
1139 Interface v2.5 <http://www.openmp.org/>. This option implies
1140 -pthread, and thus is only supported on targets that have support
1141 for -pthread.
1142
1143 -fms-extensions
1144 Accept some non-standard constructs used in Microsoft header files.
1145
1146 Some cases of unnamed fields in structures and unions are only
1147 accepted with this option.
1148
1149 -trigraphs
1150 Support ISO C trigraphs. The -ansi option (and -std options for
1151 strict ISO C conformance) implies -trigraphs.
1152
1153 -no-integrated-cpp
1154 Performs a compilation in two passes: preprocessing and compiling.
1155 This option allows a user supplied "cc1", "cc1plus", or "cc1obj"
1156 via the -B option. The user supplied compilation step can then add
1157 in an additional preprocessing step after normal preprocessing but
1158 before compiling. The default is to use the integrated cpp
1159 (internal cpp)
1160
1161 The semantics of this option will change if "cc1", "cc1plus", and
1162 "cc1obj" are merged.
1163
1164 -traditional
1165 -traditional-cpp
1166 Formerly, these options caused GCC to attempt to emulate a pre-
1167 standard C compiler. They are now only supported with the -E
1168 switch. The preprocessor continues to support a pre-standard mode.
1169 See the GNU CPP manual for details.
1170
1171 -fcond-mismatch
1172 Allow conditional expressions with mismatched types in the second
1173 and third arguments. The value of such an expression is void.
1174 This option is not supported for C++.
1175
1176 -flax-vector-conversions
1177 Allow implicit conversions between vectors with differing numbers
1178 of elements and/or incompatible element types. This option should
1179 not be used for new code.
1180
1181 -funsigned-char
1182 Let the type "char" be unsigned, like "unsigned char".
1183
1184 Each kind of machine has a default for what "char" should be. It
1185 is either like "unsigned char" by default or like "signed char" by
1186 default.
1187
1188 Ideally, a portable program should always use "signed char" or
1189 "unsigned char" when it depends on the signedness of an object.
1190 But many programs have been written to use plain "char" and expect
1191 it to be signed, or expect it to be unsigned, depending on the
1192 machines they were written for. This option, and its inverse, let
1193 you make such a program work with the opposite default.
1194
1195 The type "char" is always a distinct type from each of "signed
1196 char" or "unsigned char", even though its behavior is always just
1197 like one of those two.
1198
1199 -fsigned-char
1200 Let the type "char" be signed, like "signed char".
1201
1202 Note that this is equivalent to -fno-unsigned-char, which is the
1203 negative form of -funsigned-char. Likewise, the option
1204 -fno-signed-char is equivalent to -funsigned-char.
1205
1206 -fsigned-bitfields
1207 -funsigned-bitfields
1208 -fno-signed-bitfields
1209 -fno-unsigned-bitfields
1210 These options control whether a bit-field is signed or unsigned,
1211 when the declaration does not use either "signed" or "unsigned".
1212 By default, such a bit-field is signed, because this is consistent:
1213 the basic integer types such as "int" are signed types.
1214
1215 Options Controlling C++ Dialect
1216 This section describes the command-line options that are only
1217 meaningful for C++ programs; but you can also use most of the GNU
1218 compiler options regardless of what language your program is in. For
1219 example, you might compile a file "firstClass.C" like this:
1220
1221 g++ -g -frepo -O -c firstClass.C
1222
1223 In this example, only -frepo is an option meant only for C++ programs;
1224 you can use the other options with any language supported by GCC.
1225
1226 Here is a list of options that are only for compiling C++ programs:
1227
1228 -fabi-version=n
1229 Use version n of the C++ ABI. Version 2 is the version of the C++
1230 ABI that first appeared in G++ 3.4. Version 1 is the version of
1231 the C++ ABI that first appeared in G++ 3.2. Version 0 will always
1232 be the version that conforms most closely to the C++ ABI
1233 specification. Therefore, the ABI obtained using version 0 will
1234 change as ABI bugs are fixed.
1235
1236 The default is version 2.
1237
1238 -fno-access-control
1239 Turn off all access checking. This switch is mainly useful for
1240 working around bugs in the access control code.
1241
1242 -fcheck-new
1243 Check that the pointer returned by "operator new" is non-null
1244 before attempting to modify the storage allocated. This check is
1245 normally unnecessary because the C++ standard specifies that
1246 "operator new" will only return 0 if it is declared throw(), in
1247 which case the compiler will always check the return value even
1248 without this option. In all other cases, when "operator new" has a
1249 non-empty exception specification, memory exhaustion is signalled
1250 by throwing "std::bad_alloc". See also new (nothrow).
1251
1252 -fconserve-space
1253 Put uninitialized or runtime-initialized global variables into the
1254 common segment, as C does. This saves space in the executable at
1255 the cost of not diagnosing duplicate definitions. If you compile
1256 with this flag and your program mysteriously crashes after "main()"
1257 has completed, you may have an object that is being destroyed twice
1258 because two definitions were merged.
1259
1260 This option is no longer useful on most targets, now that support
1261 has been added for putting variables into BSS without making them
1262 common.
1263
1264 -fno-deduce-init-list
1265 Disable deduction of a template type parameter as
1266 std::initializer_list from a brace-enclosed initializer list, i.e.
1267
1268 template <class T> auto forward(T t) -> decltype (realfn (t))
1269 {
1270 return realfn (t);
1271 }
1272
1273 void f()
1274 {
1275 forward({1,2}); // call forward<std::initializer_list<int>>
1276 }
1277
1278 This option is present because this deduction is an extension to
1279 the current specification in the C++0x working draft, and there was
1280 some concern about potential overload resolution problems.
1281
1282 -ffriend-injection
1283 Inject friend functions into the enclosing namespace, so that they
1284 are visible outside the scope of the class in which they are
1285 declared. Friend functions were documented to work this way in the
1286 old Annotated C++ Reference Manual, and versions of G++ before 4.1
1287 always worked that way. However, in ISO C++ a friend function
1288 which is not declared in an enclosing scope can only be found using
1289 argument dependent lookup. This option causes friends to be
1290 injected as they were in earlier releases.
1291
1292 This option is for compatibility, and may be removed in a future
1293 release of G++.
1294
1295 -fno-elide-constructors
1296 The C++ standard allows an implementation to omit creating a
1297 temporary which is only used to initialize another object of the
1298 same type. Specifying this option disables that optimization, and
1299 forces G++ to call the copy constructor in all cases.
1300
1301 -fno-enforce-eh-specs
1302 Don't generate code to check for violation of exception
1303 specifications at runtime. This option violates the C++ standard,
1304 but may be useful for reducing code size in production builds, much
1305 like defining NDEBUG. This does not give user code permission to
1306 throw exceptions in violation of the exception specifications; the
1307 compiler will still optimize based on the specifications, so
1308 throwing an unexpected exception will result in undefined behavior.
1309
1310 -ffor-scope
1311 -fno-for-scope
1312 If -ffor-scope is specified, the scope of variables declared in a
1313 for-init-statement is limited to the for loop itself, as specified
1314 by the C++ standard. If -fno-for-scope is specified, the scope of
1315 variables declared in a for-init-statement extends to the end of
1316 the enclosing scope, as was the case in old versions of G++, and
1317 other (traditional) implementations of C++.
1318
1319 The default if neither flag is given to follow the standard, but to
1320 allow and give a warning for old-style code that would otherwise be
1321 invalid, or have different behavior.
1322
1323 -fno-gnu-keywords
1324 Do not recognize "typeof" as a keyword, so that code can use this
1325 word as an identifier. You can use the keyword "__typeof__"
1326 instead. -ansi implies -fno-gnu-keywords.
1327
1328 -fno-implicit-templates
1329 Never emit code for non-inline templates which are instantiated
1330 implicitly (i.e. by use); only emit code for explicit
1331 instantiations.
1332
1333 -fno-implicit-inline-templates
1334 Don't emit code for implicit instantiations of inline templates,
1335 either. The default is to handle inlines differently so that
1336 compiles with and without optimization will need the same set of
1337 explicit instantiations.
1338
1339 -fno-implement-inlines
1340 To save space, do not emit out-of-line copies of inline functions
1341 controlled by #pragma implementation. This will cause linker
1342 errors if these functions are not inlined everywhere they are
1343 called.
1344
1345 -fms-extensions
1346 Disable pedantic warnings about constructs used in MFC, such as
1347 implicit int and getting a pointer to member function via non-
1348 standard syntax.
1349
1350 -fno-nonansi-builtins
1351 Disable built-in declarations of functions that are not mandated by
1352 ANSI/ISO C. These include "ffs", "alloca", "_exit", "index",
1353 "bzero", "conjf", and other related functions.
1354
1355 -fno-operator-names
1356 Do not treat the operator name keywords "and", "bitand", "bitor",
1357 "compl", "not", "or" and "xor" as synonyms as keywords.
1358
1359 -fno-optional-diags
1360 Disable diagnostics that the standard says a compiler does not need
1361 to issue. Currently, the only such diagnostic issued by G++ is the
1362 one for a name having multiple meanings within a class.
1363
1364 -fpermissive
1365 Downgrade some diagnostics about nonconformant code from errors to
1366 warnings. Thus, using -fpermissive will allow some nonconforming
1367 code to compile.
1368
1369 -frepo
1370 Enable automatic template instantiation at link time. This option
1371 also implies -fno-implicit-templates.
1372
1373 -fno-rtti
1374 Disable generation of information about every class with virtual
1375 functions for use by the C++ runtime type identification features
1376 (dynamic_cast and typeid). If you don't use those parts of the
1377 language, you can save some space by using this flag. Note that
1378 exception handling uses the same information, but it will generate
1379 it as needed. The dynamic_cast operator can still be used for casts
1380 that do not require runtime type information, i.e. casts to "void
1381 *" or to unambiguous base classes.
1382
1383 -fstats
1384 Emit statistics about front-end processing at the end of the
1385 compilation. This information is generally only useful to the G++
1386 development team.
1387
1388 -fstrict-enums
1389 Allow the compiler to optimize using the assumption that a value of
1390 enumeration type can only be one of the values of the enumeration
1391 (as defined in the C++ standard; basically, a value which can be
1392 represented in the minimum number of bits needed to represent all
1393 the enumerators). This assumption may not be valid if the program
1394 uses a cast to convert an arbitrary integer value to the
1395 enumeration type.
1396
1397 -ftemplate-depth-n
1398 Set the maximum instantiation depth for template classes to n. A
1399 limit on the template instantiation depth is needed to detect
1400 endless recursions during template class instantiation. ANSI/ISO
1401 C++ conforming programs must not rely on a maximum depth greater
1402 than 17.
1403
1404 -fno-threadsafe-statics
1405 Do not emit the extra code to use the routines specified in the C++
1406 ABI for thread-safe initialization of local statics. You can use
1407 this option to reduce code size slightly in code that doesn't need
1408 to be thread-safe.
1409
1410 -fuse-cxa-atexit
1411 Register destructors for objects with static storage duration with
1412 the "__cxa_atexit" function rather than the "atexit" function.
1413 This option is required for fully standards-compliant handling of
1414 static destructors, but will only work if your C library supports
1415 "__cxa_atexit".
1416
1417 -fno-use-cxa-get-exception-ptr
1418 Don't use the "__cxa_get_exception_ptr" runtime routine. This will
1419 cause "std::uncaught_exception" to be incorrect, but is necessary
1420 if the runtime routine is not available.
1421
1422 -fvisibility-inlines-hidden
1423 This switch declares that the user does not attempt to compare
1424 pointers to inline methods where the addresses of the two functions
1425 were taken in different shared objects.
1426
1427 The effect of this is that GCC may, effectively, mark inline
1428 methods with "__attribute__ ((visibility ("hidden")))" so that they
1429 do not appear in the export table of a DSO and do not require a PLT
1430 indirection when used within the DSO. Enabling this option can
1431 have a dramatic effect on load and link times of a DSO as it
1432 massively reduces the size of the dynamic export table when the
1433 library makes heavy use of templates.
1434
1435 The behavior of this switch is not quite the same as marking the
1436 methods as hidden directly, because it does not affect static
1437 variables local to the function or cause the compiler to deduce
1438 that the function is defined in only one shared object.
1439
1440 You may mark a method as having a visibility explicitly to negate
1441 the effect of the switch for that method. For example, if you do
1442 want to compare pointers to a particular inline method, you might
1443 mark it as having default visibility. Marking the enclosing class
1444 with explicit visibility will have no effect.
1445
1446 Explicitly instantiated inline methods are unaffected by this
1447 option as their linkage might otherwise cross a shared library
1448 boundary.
1449
1450 -fvisibility-ms-compat
1451 This flag attempts to use visibility settings to make GCC's C++
1452 linkage model compatible with that of Microsoft Visual Studio.
1453
1454 The flag makes these changes to GCC's linkage model:
1455
1456 1. It sets the default visibility to "hidden", like
1457 -fvisibility=hidden.
1458
1459 2. Types, but not their members, are not hidden by default.
1460
1461 3. The One Definition Rule is relaxed for types without explicit
1462 visibility specifications which are defined in more than one
1463 different shared object: those declarations are permitted if
1464 they would have been permitted when this option was not used.
1465
1466 In new code it is better to use -fvisibility=hidden and export
1467 those classes which are intended to be externally visible.
1468 Unfortunately it is possible for code to rely, perhaps
1469 accidentally, on the Visual Studio behavior.
1470
1471 Among the consequences of these changes are that static data
1472 members of the same type with the same name but defined in
1473 different shared objects will be different, so changing one will
1474 not change the other; and that pointers to function members defined
1475 in different shared objects may not compare equal. When this flag
1476 is given, it is a violation of the ODR to define types with the
1477 same name differently.
1478
1479 -fno-weak
1480 Do not use weak symbol support, even if it is provided by the
1481 linker. By default, G++ will use weak symbols if they are
1482 available. This option exists only for testing, and should not be
1483 used by end-users; it will result in inferior code and has no
1484 benefits. This option may be removed in a future release of G++.
1485
1486 -nostdinc++
1487 Do not search for header files in the standard directories specific
1488 to C++, but do still search the other standard directories. (This
1489 option is used when building the C++ library.)
1490
1491 In addition, these optimization, warning, and code generation options
1492 have meanings only for C++ programs:
1493
1494 -fno-default-inline
1495 Do not assume inline for functions defined inside a class scope.
1496 Note that these functions will have linkage like inline
1497 functions; they just won't be inlined by default.
1498
1499 -Wabi (C, Objective-C, C++ and Objective-C++ only)
1500 Warn when G++ generates code that is probably not compatible with
1501 the vendor-neutral C++ ABI. Although an effort has been made to
1502 warn about all such cases, there are probably some cases that are
1503 not warned about, even though G++ is generating incompatible code.
1504 There may also be cases where warnings are emitted even though the
1505 code that is generated will be compatible.
1506
1507 You should rewrite your code to avoid these warnings if you are
1508 concerned about the fact that code generated by G++ may not be
1509 binary compatible with code generated by other compilers.
1510
1511 The known incompatibilities at this point include:
1512
1513 · Incorrect handling of tail-padding for bit-fields. G++ may
1514 attempt to pack data into the same byte as a base class. For
1515 example:
1516
1517 struct A { virtual void f(); int f1 : 1; };
1518 struct B : public A { int f2 : 1; };
1519
1520 In this case, G++ will place "B::f2" into the same byte
1521 as"A::f1"; other compilers will not. You can avoid this
1522 problem by explicitly padding "A" so that its size is a
1523 multiple of the byte size on your platform; that will cause G++
1524 and other compilers to layout "B" identically.
1525
1526 · Incorrect handling of tail-padding for virtual bases. G++ does
1527 not use tail padding when laying out virtual bases. For
1528 example:
1529
1530 struct A { virtual void f(); char c1; };
1531 struct B { B(); char c2; };
1532 struct C : public A, public virtual B {};
1533
1534 In this case, G++ will not place "B" into the tail-padding for
1535 "A"; other compilers will. You can avoid this problem by
1536 explicitly padding "A" so that its size is a multiple of its
1537 alignment (ignoring virtual base classes); that will cause G++
1538 and other compilers to layout "C" identically.
1539
1540 · Incorrect handling of bit-fields with declared widths greater
1541 than that of their underlying types, when the bit-fields appear
1542 in a union. For example:
1543
1544 union U { int i : 4096; };
1545
1546 Assuming that an "int" does not have 4096 bits, G++ will make
1547 the union too small by the number of bits in an "int".
1548
1549 · Empty classes can be placed at incorrect offsets. For example:
1550
1551 struct A {};
1552
1553 struct B {
1554 A a;
1555 virtual void f ();
1556 };
1557
1558 struct C : public B, public A {};
1559
1560 G++ will place the "A" base class of "C" at a nonzero offset;
1561 it should be placed at offset zero. G++ mistakenly believes
1562 that the "A" data member of "B" is already at offset zero.
1563
1564 · Names of template functions whose types involve "typename" or
1565 template template parameters can be mangled incorrectly.
1566
1567 template <typename Q>
1568 void f(typename Q::X) {}
1569
1570 template <template <typename> class Q>
1571 void f(typename Q<int>::X) {}
1572
1573 Instantiations of these templates may be mangled incorrectly.
1574
1575 It also warns psABI related changes. The known psABI changes at
1576 this point include:
1577
1578 · For SYSV/x86-64, when passing union with long double, it is
1579 changed to pass in memory as specified in psABI. For example:
1580
1581 union U {
1582 long double ld;
1583 int i;
1584 };
1585
1586 "union U" will always be passed in memory.
1587
1588 -Wctor-dtor-privacy (C++ and Objective-C++ only)
1589 Warn when a class seems unusable because all the constructors or
1590 destructors in that class are private, and it has neither friends
1591 nor public static member functions.
1592
1593 -Wnon-virtual-dtor (C++ and Objective-C++ only)
1594 Warn when a class has virtual functions and accessible non-virtual
1595 destructor, in which case it would be possible but unsafe to delete
1596 an instance of a derived class through a pointer to the base class.
1597 This warning is also enabled if -Weffc++ is specified.
1598
1599 -Wreorder (C++ and Objective-C++ only)
1600 Warn when the order of member initializers given in the code does
1601 not match the order in which they must be executed. For instance:
1602
1603 struct A {
1604 int i;
1605 int j;
1606 A(): j (0), i (1) { }
1607 };
1608
1609 The compiler will rearrange the member initializers for i and j to
1610 match the declaration order of the members, emitting a warning to
1611 that effect. This warning is enabled by -Wall.
1612
1613 The following -W... options are not affected by -Wall.
1614
1615 -Weffc++ (C++ and Objective-C++ only)
1616 Warn about violations of the following style guidelines from Scott
1617 Meyers' Effective C++ book:
1618
1619 · Item 11: Define a copy constructor and an assignment operator
1620 for classes with dynamically allocated memory.
1621
1622 · Item 12: Prefer initialization to assignment in constructors.
1623
1624 · Item 14: Make destructors virtual in base classes.
1625
1626 · Item 15: Have "operator=" return a reference to *this.
1627
1628 · Item 23: Don't try to return a reference when you must return
1629 an object.
1630
1631 Also warn about violations of the following style guidelines from
1632 Scott Meyers' More Effective C++ book:
1633
1634 · Item 6: Distinguish between prefix and postfix forms of
1635 increment and decrement operators.
1636
1637 · Item 7: Never overload "&&", "||", or ",".
1638
1639 When selecting this option, be aware that the standard library
1640 headers do not obey all of these guidelines; use grep -v to filter
1641 out those warnings.
1642
1643 -Wstrict-null-sentinel (C++ and Objective-C++ only)
1644 Warn also about the use of an uncasted "NULL" as sentinel. When
1645 compiling only with GCC this is a valid sentinel, as "NULL" is
1646 defined to "__null". Although it is a null pointer constant not a
1647 null pointer, it is guaranteed to be of the same size as a pointer.
1648 But this use is not portable across different compilers.
1649
1650 -Wno-non-template-friend (C++ and Objective-C++ only)
1651 Disable warnings when non-templatized friend functions are declared
1652 within a template. Since the advent of explicit template
1653 specification support in G++, if the name of the friend is an
1654 unqualified-id (i.e., friend foo(int)), the C++ language
1655 specification demands that the friend declare or define an
1656 ordinary, nontemplate function. (Section 14.5.3). Before G++
1657 implemented explicit specification, unqualified-ids could be
1658 interpreted as a particular specialization of a templatized
1659 function. Because this non-conforming behavior is no longer the
1660 default behavior for G++, -Wnon-template-friend allows the compiler
1661 to check existing code for potential trouble spots and is on by
1662 default. This new compiler behavior can be turned off with
1663 -Wno-non-template-friend which keeps the conformant compiler code
1664 but disables the helpful warning.
1665
1666 -Wold-style-cast (C++ and Objective-C++ only)
1667 Warn if an old-style (C-style) cast to a non-void type is used
1668 within a C++ program. The new-style casts (dynamic_cast,
1669 static_cast, reinterpret_cast, and const_cast) are less vulnerable
1670 to unintended effects and much easier to search for.
1671
1672 -Woverloaded-virtual (C++ and Objective-C++ only)
1673 Warn when a function declaration hides virtual functions from a
1674 base class. For example, in:
1675
1676 struct A {
1677 virtual void f();
1678 };
1679
1680 struct B: public A {
1681 void f(int);
1682 };
1683
1684 the "A" class version of "f" is hidden in "B", and code like:
1685
1686 B* b;
1687 b->f();
1688
1689 will fail to compile.
1690
1691 -Wno-pmf-conversions (C++ and Objective-C++ only)
1692 Disable the diagnostic for converting a bound pointer to member
1693 function to a plain pointer.
1694
1695 -Wsign-promo (C++ and Objective-C++ only)
1696 Warn when overload resolution chooses a promotion from unsigned or
1697 enumerated type to a signed type, over a conversion to an unsigned
1698 type of the same size. Previous versions of G++ would try to
1699 preserve unsignedness, but the standard mandates the current
1700 behavior.
1701
1702 struct A {
1703 operator int ();
1704 A& operator = (int);
1705 };
1706
1707 main ()
1708 {
1709 A a,b;
1710 a = b;
1711 }
1712
1713 In this example, G++ will synthesize a default A& operator = (const
1714 A&);, while cfront will use the user-defined operator =.
1715
1716 Options Controlling Objective-C and Objective-C++ Dialects
1717 (NOTE: This manual does not describe the Objective-C and Objective-C++
1718 languages themselves. See
1719
1720 This section describes the command-line options that are only
1721 meaningful for Objective-C and Objective-C++ programs, but you can also
1722 use most of the language-independent GNU compiler options. For
1723 example, you might compile a file "some_class.m" like this:
1724
1725 gcc -g -fgnu-runtime -O -c some_class.m
1726
1727 In this example, -fgnu-runtime is an option meant only for Objective-C
1728 and Objective-C++ programs; you can use the other options with any
1729 language supported by GCC.
1730
1731 Note that since Objective-C is an extension of the C language,
1732 Objective-C compilations may also use options specific to the C front-
1733 end (e.g., -Wtraditional). Similarly, Objective-C++ compilations may
1734 use C++-specific options (e.g., -Wabi).
1735
1736 Here is a list of options that are only for compiling Objective-C and
1737 Objective-C++ programs:
1738
1739 -fconstant-string-class=class-name
1740 Use class-name as the name of the class to instantiate for each
1741 literal string specified with the syntax "@"..."". The default
1742 class name is "NXConstantString" if the GNU runtime is being used,
1743 and "NSConstantString" if the NeXT runtime is being used (see
1744 below). The -fconstant-cfstrings option, if also present, will
1745 override the -fconstant-string-class setting and cause "@"...""
1746 literals to be laid out as constant CoreFoundation strings.
1747
1748 -fgnu-runtime
1749 Generate object code compatible with the standard GNU Objective-C
1750 runtime. This is the default for most types of systems.
1751
1752 -fnext-runtime
1753 Generate output compatible with the NeXT runtime. This is the
1754 default for NeXT-based systems, including Darwin and Mac OS X. The
1755 macro "__NEXT_RUNTIME__" is predefined if (and only if) this option
1756 is used.
1757
1758 -fno-nil-receivers
1759 Assume that all Objective-C message dispatches (e.g., "[receiver
1760 message:arg]") in this translation unit ensure that the receiver is
1761 not "nil". This allows for more efficient entry points in the
1762 runtime to be used. Currently, this option is only available in
1763 conjunction with the NeXT runtime on Mac OS X 10.3 and later.
1764
1765 -fobjc-call-cxx-cdtors
1766 For each Objective-C class, check if any of its instance variables
1767 is a C++ object with a non-trivial default constructor. If so,
1768 synthesize a special "- (id) .cxx_construct" instance method that
1769 will run non-trivial default constructors on any such instance
1770 variables, in order, and then return "self". Similarly, check if
1771 any instance variable is a C++ object with a non-trivial
1772 destructor, and if so, synthesize a special "- (void)
1773 .cxx_destruct" method that will run all such default destructors,
1774 in reverse order.
1775
1776 The "- (id) .cxx_construct" and/or "- (void) .cxx_destruct" methods
1777 thusly generated will only operate on instance variables declared
1778 in the current Objective-C class, and not those inherited from
1779 superclasses. It is the responsibility of the Objective-C runtime
1780 to invoke all such methods in an object's inheritance hierarchy.
1781 The "- (id) .cxx_construct" methods will be invoked by the runtime
1782 immediately after a new object instance is allocated; the "- (void)
1783 .cxx_destruct" methods will be invoked immediately before the
1784 runtime deallocates an object instance.
1785
1786 As of this writing, only the NeXT runtime on Mac OS X 10.4 and
1787 later has support for invoking the "- (id) .cxx_construct" and "-
1788 (void) .cxx_destruct" methods.
1789
1790 -fobjc-direct-dispatch
1791 Allow fast jumps to the message dispatcher. On Darwin this is
1792 accomplished via the comm page.
1793
1794 -fobjc-exceptions
1795 Enable syntactic support for structured exception handling in
1796 Objective-C, similar to what is offered by C++ and Java. This
1797 option is unavailable in conjunction with the NeXT runtime on Mac
1798 OS X 10.2 and earlier.
1799
1800 @try {
1801 ...
1802 @throw expr;
1803 ...
1804 }
1805 @catch (AnObjCClass *exc) {
1806 ...
1807 @throw expr;
1808 ...
1809 @throw;
1810 ...
1811 }
1812 @catch (AnotherClass *exc) {
1813 ...
1814 }
1815 @catch (id allOthers) {
1816 ...
1817 }
1818 @finally {
1819 ...
1820 @throw expr;
1821 ...
1822 }
1823
1824 The @throw statement may appear anywhere in an Objective-C or
1825 Objective-C++ program; when used inside of a @catch block, the
1826 @throw may appear without an argument (as shown above), in which
1827 case the object caught by the @catch will be rethrown.
1828
1829 Note that only (pointers to) Objective-C objects may be thrown and
1830 caught using this scheme. When an object is thrown, it will be
1831 caught by the nearest @catch clause capable of handling objects of
1832 that type, analogously to how "catch" blocks work in C++ and Java.
1833 A "@catch(id ...)" clause (as shown above) may also be provided to
1834 catch any and all Objective-C exceptions not caught by previous
1835 @catch clauses (if any).
1836
1837 The @finally clause, if present, will be executed upon exit from
1838 the immediately preceding "@try ... @catch" section. This will
1839 happen regardless of whether any exceptions are thrown, caught or
1840 rethrown inside the "@try ... @catch" section, analogously to the
1841 behavior of the "finally" clause in Java.
1842
1843 There are several caveats to using the new exception mechanism:
1844
1845 · Although currently designed to be binary compatible with
1846 "NS_HANDLER"-style idioms provided by the "NSException" class,
1847 the new exceptions can only be used on Mac OS X 10.3 (Panther)
1848 and later systems, due to additional functionality needed in
1849 the (NeXT) Objective-C runtime.
1850
1851 · As mentioned above, the new exceptions do not support handling
1852 types other than Objective-C objects. Furthermore, when used
1853 from Objective-C++, the Objective-C exception model does not
1854 interoperate with C++ exceptions at this time. This means you
1855 cannot @throw an exception from Objective-C and "catch" it in
1856 C++, or vice versa (i.e., "throw ... @catch").
1857
1858 The -fobjc-exceptions switch also enables the use of
1859 synchronization blocks for thread-safe execution:
1860
1861 @synchronized (ObjCClass *guard) {
1862 ...
1863 }
1864
1865 Upon entering the @synchronized block, a thread of execution shall
1866 first check whether a lock has been placed on the corresponding
1867 "guard" object by another thread. If it has, the current thread
1868 shall wait until the other thread relinquishes its lock. Once
1869 "guard" becomes available, the current thread will place its own
1870 lock on it, execute the code contained in the @synchronized block,
1871 and finally relinquish the lock (thereby making "guard" available
1872 to other threads).
1873
1874 Unlike Java, Objective-C does not allow for entire methods to be
1875 marked @synchronized. Note that throwing exceptions out of
1876 @synchronized blocks is allowed, and will cause the guarding object
1877 to be unlocked properly.
1878
1879 -fobjc-gc
1880 Enable garbage collection (GC) in Objective-C and Objective-C++
1881 programs.
1882
1883 -freplace-objc-classes
1884 Emit a special marker instructing ld(1) not to statically link in
1885 the resulting object file, and allow dyld(1) to load it in at run
1886 time instead. This is used in conjunction with the Fix-and-
1887 Continue debugging mode, where the object file in question may be
1888 recompiled and dynamically reloaded in the course of program
1889 execution, without the need to restart the program itself.
1890 Currently, Fix-and-Continue functionality is only available in
1891 conjunction with the NeXT runtime on Mac OS X 10.3 and later.
1892
1893 -fzero-link
1894 When compiling for the NeXT runtime, the compiler ordinarily
1895 replaces calls to "objc_getClass("...")" (when the name of the
1896 class is known at compile time) with static class references that
1897 get initialized at load time, which improves run-time performance.
1898 Specifying the -fzero-link flag suppresses this behavior and causes
1899 calls to "objc_getClass("...")" to be retained. This is useful in
1900 Zero-Link debugging mode, since it allows for individual class
1901 implementations to be modified during program execution.
1902
1903 -gen-decls
1904 Dump interface declarations for all classes seen in the source file
1905 to a file named sourcename.decl.
1906
1907 -Wassign-intercept (Objective-C and Objective-C++ only)
1908 Warn whenever an Objective-C assignment is being intercepted by the
1909 garbage collector.
1910
1911 -Wno-protocol (Objective-C and Objective-C++ only)
1912 If a class is declared to implement a protocol, a warning is issued
1913 for every method in the protocol that is not implemented by the
1914 class. The default behavior is to issue a warning for every method
1915 not explicitly implemented in the class, even if a method
1916 implementation is inherited from the superclass. If you use the
1917 -Wno-protocol option, then methods inherited from the superclass
1918 are considered to be implemented, and no warning is issued for
1919 them.
1920
1921 -Wselector (Objective-C and Objective-C++ only)
1922 Warn if multiple methods of different types for the same selector
1923 are found during compilation. The check is performed on the list
1924 of methods in the final stage of compilation. Additionally, a
1925 check is performed for each selector appearing in a
1926 "@selector(...)" expression, and a corresponding method for that
1927 selector has been found during compilation. Because these checks
1928 scan the method table only at the end of compilation, these
1929 warnings are not produced if the final stage of compilation is not
1930 reached, for example because an error is found during compilation,
1931 or because the -fsyntax-only option is being used.
1932
1933 -Wstrict-selector-match (Objective-C and Objective-C++ only)
1934 Warn if multiple methods with differing argument and/or return
1935 types are found for a given selector when attempting to send a
1936 message using this selector to a receiver of type "id" or "Class".
1937 When this flag is off (which is the default behavior), the compiler
1938 will omit such warnings if any differences found are confined to
1939 types which share the same size and alignment.
1940
1941 -Wundeclared-selector (Objective-C and Objective-C++ only)
1942 Warn if a "@selector(...)" expression referring to an undeclared
1943 selector is found. A selector is considered undeclared if no
1944 method with that name has been declared before the "@selector(...)"
1945 expression, either explicitly in an @interface or @protocol
1946 declaration, or implicitly in an @implementation section. This
1947 option always performs its checks as soon as a "@selector(...)"
1948 expression is found, while -Wselector only performs its checks in
1949 the final stage of compilation. This also enforces the coding
1950 style convention that methods and selectors must be declared before
1951 being used.
1952
1953 -print-objc-runtime-info
1954 Generate C header describing the largest structure that is passed
1955 by value, if any.
1956
1957 Options to Control Diagnostic Messages Formatting
1958 Traditionally, diagnostic messages have been formatted irrespective of
1959 the output device's aspect (e.g. its width, ...). The options
1960 described below can be used to control the diagnostic messages
1961 formatting algorithm, e.g. how many characters per line, how often
1962 source location information should be reported. Right now, only the
1963 C++ front end can honor these options. However it is expected, in the
1964 near future, that the remaining front ends would be able to digest them
1965 correctly.
1966
1967 -fmessage-length=n
1968 Try to format error messages so that they fit on lines of about n
1969 characters. The default is 72 characters for g++ and 0 for the
1970 rest of the front ends supported by GCC. If n is zero, then no
1971 line-wrapping will be done; each error message will appear on a
1972 single line.
1973
1974 -fdiagnostics-show-location=once
1975 Only meaningful in line-wrapping mode. Instructs the diagnostic
1976 messages reporter to emit once source location information; that
1977 is, in case the message is too long to fit on a single physical
1978 line and has to be wrapped, the source location won't be emitted
1979 (as prefix) again, over and over, in subsequent continuation lines.
1980 This is the default behavior.
1981
1982 -fdiagnostics-show-location=every-line
1983 Only meaningful in line-wrapping mode. Instructs the diagnostic
1984 messages reporter to emit the same source location information (as
1985 prefix) for physical lines that result from the process of breaking
1986 a message which is too long to fit on a single line.
1987
1988 -fdiagnostics-show-option
1989 This option instructs the diagnostic machinery to add text to each
1990 diagnostic emitted, which indicates which command line option
1991 directly controls that diagnostic, when such an option is known to
1992 the diagnostic machinery.
1993
1994 -Wcoverage-mismatch
1995 Warn if feedback profiles do not match when using the -fprofile-use
1996 option. If a source file was changed between -fprofile-gen and
1997 -fprofile-use, the files with the profile feedback can fail to
1998 match the source file and GCC can not use the profile feedback
1999 information. By default, GCC emits an error message in this case.
2000 The option -Wcoverage-mismatch emits a warning instead of an error.
2001 GCC does not use appropriate feedback profiles, so using this
2002 option can result in poorly optimized code. This option is useful
2003 only in the case of very minor changes such as bug fixes to an
2004 existing code-base.
2005
2006 Options to Request or Suppress Warnings
2007 Warnings are diagnostic messages that report constructions which are
2008 not inherently erroneous but which are risky or suggest there may have
2009 been an error.
2010
2011 The following language-independent options do not enable specific
2012 warnings but control the kinds of diagnostics produced by GCC.
2013
2014 -fsyntax-only
2015 Check the code for syntax errors, but don't do anything beyond
2016 that.
2017
2018 -w Inhibit all warning messages.
2019
2020 -Werror
2021 Make all warnings into errors.
2022
2023 -Werror=
2024 Make the specified warning into an error. The specifier for a
2025 warning is appended, for example -Werror=switch turns the warnings
2026 controlled by -Wswitch into errors. This switch takes a negative
2027 form, to be used to negate -Werror for specific warnings, for
2028 example -Wno-error=switch makes -Wswitch warnings not be errors,
2029 even when -Werror is in effect. You can use the
2030 -fdiagnostics-show-option option to have each controllable warning
2031 amended with the option which controls it, to determine what to use
2032 with this option.
2033
2034 Note that specifying -Werror=foo automatically implies -Wfoo.
2035 However, -Wno-error=foo does not imply anything.
2036
2037 -Wfatal-errors
2038 This option causes the compiler to abort compilation on the first
2039 error occurred rather than trying to keep going and printing
2040 further error messages.
2041
2042 You can request many specific warnings with options beginning -W, for
2043 example -Wimplicit to request warnings on implicit declarations. Each
2044 of these specific warning options also has a negative form beginning
2045 -Wno- to turn off warnings; for example, -Wno-implicit. This manual
2046 lists only one of the two forms, whichever is not the default. For
2047 further, language-specific options also refer to C++ Dialect Options
2048 and Objective-C and Objective-C++ Dialect Options.
2049
2050 -pedantic
2051 Issue all the warnings demanded by strict ISO C and ISO C++; reject
2052 all programs that use forbidden extensions, and some other programs
2053 that do not follow ISO C and ISO C++. For ISO C, follows the
2054 version of the ISO C standard specified by any -std option used.
2055
2056 Valid ISO C and ISO C++ programs should compile properly with or
2057 without this option (though a rare few will require -ansi or a -std
2058 option specifying the required version of ISO C). However, without
2059 this option, certain GNU extensions and traditional C and C++
2060 features are supported as well. With this option, they are
2061 rejected.
2062
2063 -pedantic does not cause warning messages for use of the alternate
2064 keywords whose names begin and end with __. Pedantic warnings are
2065 also disabled in the expression that follows "__extension__".
2066 However, only system header files should use these escape routes;
2067 application programs should avoid them.
2068
2069 Some users try to use -pedantic to check programs for strict ISO C
2070 conformance. They soon find that it does not do quite what they
2071 want: it finds some non-ISO practices, but not all---only those for
2072 which ISO C requires a diagnostic, and some others for which
2073 diagnostics have been added.
2074
2075 A feature to report any failure to conform to ISO C might be useful
2076 in some instances, but would require considerable additional work
2077 and would be quite different from -pedantic. We don't have plans
2078 to support such a feature in the near future.
2079
2080 Where the standard specified with -std represents a GNU extended
2081 dialect of C, such as gnu89 or gnu99, there is a corresponding base
2082 standard, the version of ISO C on which the GNU extended dialect is
2083 based. Warnings from -pedantic are given where they are required
2084 by the base standard. (It would not make sense for such warnings
2085 to be given only for features not in the specified GNU C dialect,
2086 since by definition the GNU dialects of C include all features the
2087 compiler supports with the given option, and there would be nothing
2088 to warn about.)
2089
2090 -pedantic-errors
2091 Like -pedantic, except that errors are produced rather than
2092 warnings.
2093
2094 -Wall
2095 This enables all the warnings about constructions that some users
2096 consider questionable, and that are easy to avoid (or modify to
2097 prevent the warning), even in conjunction with macros. This also
2098 enables some language-specific warnings described in C++ Dialect
2099 Options and Objective-C and Objective-C++ Dialect Options.
2100
2101 -Wall turns on the following warning flags:
2102
2103 -Waddress -Warray-bounds (only with -O2) -Wc++0x-compat
2104 -Wchar-subscripts -Wimplicit-int -Wimplicit-function-declaration
2105 -Wcomment -Wformat -Wmain (only for C/ObjC and unless
2106 -ffreestanding) -Wmissing-braces -Wnonnull -Wparentheses
2107 -Wpointer-sign -Wreorder -Wreturn-type -Wsequence-point
2108 -Wsign-compare (only in C++) -Wstrict-aliasing -Wstrict-overflow=1
2109 -Wswitch -Wtrigraphs -Wuninitialized -Wunknown-pragmas
2110 -Wunused-function -Wunused-label -Wunused-value -Wunused-variable
2111 -Wvolatile-register-var
2112
2113 Note that some warning flags are not implied by -Wall. Some of
2114 them warn about constructions that users generally do not consider
2115 questionable, but which occasionally you might wish to check for;
2116 others warn about constructions that are necessary or hard to avoid
2117 in some cases, and there is no simple way to modify the code to
2118 suppress the warning. Some of them are enabled by -Wextra but many
2119 of them must be enabled individually.
2120
2121 -Wextra
2122 This enables some extra warning flags that are not enabled by
2123 -Wall. (This option used to be called -W. The older name is still
2124 supported, but the newer name is more descriptive.)
2125
2126 -Wclobbered -Wempty-body -Wignored-qualifiers
2127 -Wmissing-field-initializers -Wmissing-parameter-type (C only)
2128 -Wold-style-declaration (C only) -Woverride-init -Wsign-compare
2129 -Wtype-limits -Wuninitialized -Wunused-parameter (only with
2130 -Wunused or -Wall)
2131
2132 The option -Wextra also prints warning messages for the following
2133 cases:
2134
2135 · A pointer is compared against integer zero with <, <=, >, or
2136 >=.
2137
2138 · (C++ only) An enumerator and a non-enumerator both appear in a
2139 conditional expression.
2140
2141 · (C++ only) Ambiguous virtual bases.
2142
2143 · (C++ only) Subscripting an array which has been declared
2144 register.
2145
2146 · (C++ only) Taking the address of a variable which has been
2147 declared register.
2148
2149 · (C++ only) A base class is not initialized in a derived class'
2150 copy constructor.
2151
2152 -Wchar-subscripts
2153 Warn if an array subscript has type "char". This is a common cause
2154 of error, as programmers often forget that this type is signed on
2155 some machines. This warning is enabled by -Wall.
2156
2157 -Wcomment
2158 Warn whenever a comment-start sequence /* appears in a /* comment,
2159 or whenever a Backslash-Newline appears in a // comment. This
2160 warning is enabled by -Wall.
2161
2162 -Wformat
2163 Check calls to "printf" and "scanf", etc., to make sure that the
2164 arguments supplied have types appropriate to the format string
2165 specified, and that the conversions specified in the format string
2166 make sense. This includes standard functions, and others specified
2167 by format attributes, in the "printf", "scanf", "strftime" and
2168 "strfmon" (an X/Open extension, not in the C standard) families (or
2169 other target-specific families). Which functions are checked
2170 without format attributes having been specified depends on the
2171 standard version selected, and such checks of functions without the
2172 attribute specified are disabled by -ffreestanding or -fno-builtin.
2173
2174 The formats are checked against the format features supported by
2175 GNU libc version 2.2. These include all ISO C90 and C99 features,
2176 as well as features from the Single Unix Specification and some BSD
2177 and GNU extensions. Other library implementations may not support
2178 all these features; GCC does not support warning about features
2179 that go beyond a particular library's limitations. However, if
2180 -pedantic is used with -Wformat, warnings will be given about
2181 format features not in the selected standard version (but not for
2182 "strfmon" formats, since those are not in any version of the C
2183 standard).
2184
2185 Since -Wformat also checks for null format arguments for several
2186 functions, -Wformat also implies -Wnonnull.
2187
2188 -Wformat is included in -Wall. For more control over some aspects
2189 of format checking, the options -Wformat-y2k,
2190 -Wno-format-extra-args, -Wno-format-zero-length,
2191 -Wformat-nonliteral, -Wformat-security, and -Wformat=2 are
2192 available, but are not included in -Wall.
2193
2194 -Wformat-y2k
2195 If -Wformat is specified, also warn about "strftime" formats which
2196 may yield only a two-digit year.
2197
2198 -Wno-format-contains-nul
2199 If -Wformat is specified, do not warn about format strings that
2200 contain NUL bytes.
2201
2202 -Wno-format-extra-args
2203 If -Wformat is specified, do not warn about excess arguments to a
2204 "printf" or "scanf" format function. The C standard specifies that
2205 such arguments are ignored.
2206
2207 Where the unused arguments lie between used arguments that are
2208 specified with $ operand number specifications, normally warnings
2209 are still given, since the implementation could not know what type
2210 to pass to "va_arg" to skip the unused arguments. However, in the
2211 case of "scanf" formats, this option will suppress the warning if
2212 the unused arguments are all pointers, since the Single Unix
2213 Specification says that such unused arguments are allowed.
2214
2215 -Wno-format-zero-length (C and Objective-C only)
2216 If -Wformat is specified, do not warn about zero-length formats.
2217 The C standard specifies that zero-length formats are allowed.
2218
2219 -Wformat-nonliteral
2220 If -Wformat is specified, also warn if the format string is not a
2221 string literal and so cannot be checked, unless the format function
2222 takes its format arguments as a "va_list".
2223
2224 -Wformat-security
2225 If -Wformat is specified, also warn about uses of format functions
2226 that represent possible security problems. At present, this warns
2227 about calls to "printf" and "scanf" functions where the format
2228 string is not a string literal and there are no format arguments,
2229 as in "printf (foo);". This may be a security hole if the format
2230 string came from untrusted input and contains %n. (This is
2231 currently a subset of what -Wformat-nonliteral warns about, but in
2232 future warnings may be added to -Wformat-security that are not
2233 included in -Wformat-nonliteral.)
2234
2235 -Wformat=2
2236 Enable -Wformat plus format checks not included in -Wformat.
2237 Currently equivalent to -Wformat -Wformat-nonliteral
2238 -Wformat-security -Wformat-y2k.
2239
2240 -Wnonnull (C and Objective-C only)
2241 Warn about passing a null pointer for arguments marked as requiring
2242 a non-null value by the "nonnull" function attribute.
2243
2244 -Wnonnull is included in -Wall and -Wformat. It can be disabled
2245 with the -Wno-nonnull option.
2246
2247 -Winit-self (C, C++, Objective-C and Objective-C++ only)
2248 Warn about uninitialized variables which are initialized with
2249 themselves. Note this option can only be used with the
2250 -Wuninitialized option.
2251
2252 For example, GCC will warn about "i" being uninitialized in the
2253 following snippet only when -Winit-self has been specified:
2254
2255 int f()
2256 {
2257 int i = i;
2258 return i;
2259 }
2260
2261 -Wimplicit-int (C and Objective-C only)
2262 Warn when a declaration does not specify a type. This warning is
2263 enabled by -Wall.
2264
2265 -Wimplicit-function-declaration (C and Objective-C only)
2266 Give a warning whenever a function is used before being declared.
2267 In C99 mode (-std=c99 or -std=gnu99), this warning is enabled by
2268 default and it is made into an error by -pedantic-errors. This
2269 warning is also enabled by -Wall.
2270
2271 -Wimplicit
2272 Same as -Wimplicit-int and -Wimplicit-function-declaration. This
2273 warning is enabled by -Wall.
2274
2275 -Wignored-qualifiers (C and C++ only)
2276 Warn if the return type of a function has a type qualifier such as
2277 "const". For ISO C such a type qualifier has no effect, since the
2278 value returned by a function is not an lvalue. For C++, the
2279 warning is only emitted for scalar types or "void". ISO C
2280 prohibits qualified "void" return types on function definitions, so
2281 such return types always receive a warning even without this
2282 option.
2283
2284 This warning is also enabled by -Wextra.
2285
2286 -Wmain
2287 Warn if the type of main is suspicious. main should be a function
2288 with external linkage, returning int, taking either zero arguments,
2289 two, or three arguments of appropriate types. This warning is
2290 enabled by default in C++ and is enabled by either -Wall or
2291 -pedantic.
2292
2293 -Wmissing-braces
2294 Warn if an aggregate or union initializer is not fully bracketed.
2295 In the following example, the initializer for a is not fully
2296 bracketed, but that for b is fully bracketed.
2297
2298 int a[2][2] = { 0, 1, 2, 3 };
2299 int b[2][2] = { { 0, 1 }, { 2, 3 } };
2300
2301 This warning is enabled by -Wall.
2302
2303 -Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)
2304 Warn if a user-supplied include directory does not exist.
2305
2306 -Wparentheses
2307 Warn if parentheses are omitted in certain contexts, such as when
2308 there is an assignment in a context where a truth value is
2309 expected, or when operators are nested whose precedence people
2310 often get confused about.
2311
2312 Also warn if a comparison like x<=y<=z appears; this is equivalent
2313 to (x<=y ? 1 : 0) <= z, which is a different interpretation from
2314 that of ordinary mathematical notation.
2315
2316 Also warn about constructions where there may be confusion to which
2317 "if" statement an "else" branch belongs. Here is an example of
2318 such a case:
2319
2320 {
2321 if (a)
2322 if (b)
2323 foo ();
2324 else
2325 bar ();
2326 }
2327
2328 In C/C++, every "else" branch belongs to the innermost possible
2329 "if" statement, which in this example is "if (b)". This is often
2330 not what the programmer expected, as illustrated in the above
2331 example by indentation the programmer chose. When there is the
2332 potential for this confusion, GCC will issue a warning when this
2333 flag is specified. To eliminate the warning, add explicit braces
2334 around the innermost "if" statement so there is no way the "else"
2335 could belong to the enclosing "if". The resulting code would look
2336 like this:
2337
2338 {
2339 if (a)
2340 {
2341 if (b)
2342 foo ();
2343 else
2344 bar ();
2345 }
2346 }
2347
2348 This warning is enabled by -Wall.
2349
2350 -Wsequence-point
2351 Warn about code that may have undefined semantics because of
2352 violations of sequence point rules in the C and C++ standards.
2353
2354 The C and C++ standards defines the order in which expressions in a
2355 C/C++ program are evaluated in terms of sequence points, which
2356 represent a partial ordering between the execution of parts of the
2357 program: those executed before the sequence point, and those
2358 executed after it. These occur after the evaluation of a full
2359 expression (one which is not part of a larger expression), after
2360 the evaluation of the first operand of a "&&", "||", "? :" or ","
2361 (comma) operator, before a function is called (but after the
2362 evaluation of its arguments and the expression denoting the called
2363 function), and in certain other places. Other than as expressed by
2364 the sequence point rules, the order of evaluation of subexpressions
2365 of an expression is not specified. All these rules describe only a
2366 partial order rather than a total order, since, for example, if two
2367 functions are called within one expression with no sequence point
2368 between them, the order in which the functions are called is not
2369 specified. However, the standards committee have ruled that
2370 function calls do not overlap.
2371
2372 It is not specified when between sequence points modifications to
2373 the values of objects take effect. Programs whose behavior depends
2374 on this have undefined behavior; the C and C++ standards specify
2375 that "Between the previous and next sequence point an object shall
2376 have its stored value modified at most once by the evaluation of an
2377 expression. Furthermore, the prior value shall be read only to
2378 determine the value to be stored.". If a program breaks these
2379 rules, the results on any particular implementation are entirely
2380 unpredictable.
2381
2382 Examples of code with undefined behavior are "a = a++;", "a[n] =
2383 b[n++]" and "a[i++] = i;". Some more complicated cases are not
2384 diagnosed by this option, and it may give an occasional false
2385 positive result, but in general it has been found fairly effective
2386 at detecting this sort of problem in programs.
2387
2388 The standard is worded confusingly, therefore there is some debate
2389 over the precise meaning of the sequence point rules in subtle
2390 cases. Links to discussions of the problem, including proposed
2391 formal definitions, may be found on the GCC readings page, at
2392 <http://gcc.gnu.org/readings.html>.
2393
2394 This warning is enabled by -Wall for C and C++.
2395
2396 -Wreturn-type
2397 Warn whenever a function is defined with a return-type that
2398 defaults to "int". Also warn about any "return" statement with no
2399 return-value in a function whose return-type is not "void" (falling
2400 off the end of the function body is considered returning without a
2401 value), and about a "return" statement with a expression in a
2402 function whose return-type is "void".
2403
2404 For C++, a function without return type always produces a
2405 diagnostic message, even when -Wno-return-type is specified. The
2406 only exceptions are main and functions defined in system headers.
2407
2408 This warning is enabled by -Wall.
2409
2410 -Wswitch
2411 Warn whenever a "switch" statement has an index of enumerated type
2412 and lacks a "case" for one or more of the named codes of that
2413 enumeration. (The presence of a "default" label prevents this
2414 warning.) "case" labels outside the enumeration range also provoke
2415 warnings when this option is used. This warning is enabled by
2416 -Wall.
2417
2418 -Wswitch-default
2419 Warn whenever a "switch" statement does not have a "default" case.
2420
2421 -Wswitch-enum
2422 Warn whenever a "switch" statement has an index of enumerated type
2423 and lacks a "case" for one or more of the named codes of that
2424 enumeration. "case" labels outside the enumeration range also
2425 provoke warnings when this option is used.
2426
2427 -Wsync-nand (C and C++ only)
2428 Warn when "__sync_fetch_and_nand" and "__sync_nand_and_fetch"
2429 built-in functions are used. These functions changed semantics in
2430 GCC 4.4.
2431
2432 -Wtrigraphs
2433 Warn if any trigraphs are encountered that might change the meaning
2434 of the program (trigraphs within comments are not warned about).
2435 This warning is enabled by -Wall.
2436
2437 -Wunused-but-set-parameter
2438 Warn whenever a function parameter is assigned to, but otherwise
2439 unused (aside from its declaration).
2440
2441 To suppress this warning use the unused attribute.
2442
2443 -Wunused-but-set-variable
2444 Warn whenever a local variable is assigned to, but otherwise unused
2445 (aside from its declaration).
2446
2447 To suppress this warning use the unused attribute.
2448
2449 -Wunused-function
2450 Warn whenever a static function is declared but not defined or a
2451 non-inline static function is unused. This warning is enabled by
2452 -Wall.
2453
2454 -Wunused-label
2455 Warn whenever a label is declared but not used. This warning is
2456 enabled by -Wall.
2457
2458 To suppress this warning use the unused attribute.
2459
2460 -Wunused-parameter
2461 Warn whenever a function parameter is unused aside from its
2462 declaration.
2463
2464 To suppress this warning use the unused attribute.
2465
2466 -Wunused-variable
2467 Warn whenever a local variable or non-constant static variable is
2468 unused aside from its declaration. This warning is enabled by
2469 -Wall.
2470
2471 To suppress this warning use the unused attribute.
2472
2473 -Wunused-value
2474 Warn whenever a statement computes a result that is explicitly not
2475 used. To suppress this warning cast the unused expression to void.
2476 This includes an expression-statement or the left-hand side of a
2477 comma expression that contains no side effects. For example, an
2478 expression such as x[i,j] will cause a warning, while x[(void)i,j]
2479 will not.
2480
2481 This warning is enabled by -Wall.
2482
2483 -Wunused
2484 All the above -Wunused options combined.
2485
2486 In order to get a warning about an unused function parameter, you
2487 must either specify -Wextra -Wunused (note that -Wall implies
2488 -Wunused), or separately specify -Wunused-parameter.
2489
2490 -Wuninitialized
2491 Warn if an automatic variable is used without first being
2492 initialized or if a variable may be clobbered by a "setjmp" call.
2493 In C++, warn if a non-static reference or non-static const member
2494 appears in a class without constructors.
2495
2496 If you want to warn about code which uses the uninitialized value
2497 of the variable in its own initializer, use the -Winit-self option.
2498
2499 These warnings occur for individual uninitialized or clobbered
2500 elements of structure, union or array variables as well as for
2501 variables which are uninitialized or clobbered as a whole. They do
2502 not occur for variables or elements declared "volatile". Because
2503 these warnings depend on optimization, the exact variables or
2504 elements for which there are warnings will depend on the precise
2505 optimization options and version of GCC used.
2506
2507 Note that there may be no warning about a variable that is used
2508 only to compute a value that itself is never used, because such
2509 computations may be deleted by data flow analysis before the
2510 warnings are printed.
2511
2512 These warnings are made optional because GCC is not smart enough to
2513 see all the reasons why the code might be correct despite appearing
2514 to have an error. Here is one example of how this can happen:
2515
2516 {
2517 int x;
2518 switch (y)
2519 {
2520 case 1: x = 1;
2521 break;
2522 case 2: x = 4;
2523 break;
2524 case 3: x = 5;
2525 }
2526 foo (x);
2527 }
2528
2529 If the value of "y" is always 1, 2 or 3, then "x" is always
2530 initialized, but GCC doesn't know this. Here is another common
2531 case:
2532
2533 {
2534 int save_y;
2535 if (change_y) save_y = y, y = new_y;
2536 ...
2537 if (change_y) y = save_y;
2538 }
2539
2540 This has no bug because "save_y" is used only if it is set.
2541
2542 This option also warns when a non-volatile automatic variable might
2543 be changed by a call to "longjmp". These warnings as well are
2544 possible only in optimizing compilation.
2545
2546 The compiler sees only the calls to "setjmp". It cannot know where
2547 "longjmp" will be called; in fact, a signal handler could call it
2548 at any point in the code. As a result, you may get a warning even
2549 when there is in fact no problem because "longjmp" cannot in fact
2550 be called at the place which would cause a problem.
2551
2552 Some spurious warnings can be avoided if you declare all the
2553 functions you use that never return as "noreturn".
2554
2555 This warning is enabled by -Wall or -Wextra.
2556
2557 -Wunknown-pragmas
2558 Warn when a #pragma directive is encountered which is not
2559 understood by GCC. If this command line option is used, warnings
2560 will even be issued for unknown pragmas in system header files.
2561 This is not the case if the warnings were only enabled by the -Wall
2562 command line option.
2563
2564 -Wno-pragmas
2565 Do not warn about misuses of pragmas, such as incorrect parameters,
2566 invalid syntax, or conflicts between pragmas. See also
2567 -Wunknown-pragmas.
2568
2569 -Wstrict-aliasing
2570 This option is only active when -fstrict-aliasing is active. It
2571 warns about code which might break the strict aliasing rules that
2572 the compiler is using for optimization. The warning does not catch
2573 all cases, but does attempt to catch the more common pitfalls. It
2574 is included in -Wall. It is equivalent to -Wstrict-aliasing=3
2575
2576 -Wstrict-aliasing=n
2577 This option is only active when -fstrict-aliasing is active. It
2578 warns about code which might break the strict aliasing rules that
2579 the compiler is using for optimization. Higher levels correspond
2580 to higher accuracy (fewer false positives). Higher levels also
2581 correspond to more effort, similar to the way -O works.
2582 -Wstrict-aliasing is equivalent to -Wstrict-aliasing=n, with n=3.
2583
2584 Level 1: Most aggressive, quick, least accurate. Possibly useful
2585 when higher levels do not warn but -fstrict-aliasing still breaks
2586 the code, as it has very few false negatives. However, it has many
2587 false positives. Warns for all pointer conversions between
2588 possibly incompatible types, even if never dereferenced. Runs in
2589 the frontend only.
2590
2591 Level 2: Aggressive, quick, not too precise. May still have many
2592 false positives (not as many as level 1 though), and few false
2593 negatives (but possibly more than level 1). Unlike level 1, it
2594 only warns when an address is taken. Warns about incomplete types.
2595 Runs in the frontend only.
2596
2597 Level 3 (default for -Wstrict-aliasing): Should have very few false
2598 positives and few false negatives. Slightly slower than levels 1
2599 or 2 when optimization is enabled. Takes care of the common
2600 punn+dereference pattern in the frontend: "*(int*)&some_float". If
2601 optimization is enabled, it also runs in the backend, where it
2602 deals with multiple statement cases using flow-sensitive points-to
2603 information. Only warns when the converted pointer is
2604 dereferenced. Does not warn about incomplete types.
2605
2606 -Wstrict-overflow
2607 -Wstrict-overflow=n
2608 This option is only active when -fstrict-overflow is active. It
2609 warns about cases where the compiler optimizes based on the
2610 assumption that signed overflow does not occur. Note that it does
2611 not warn about all cases where the code might overflow: it only
2612 warns about cases where the compiler implements some optimization.
2613 Thus this warning depends on the optimization level.
2614
2615 An optimization which assumes that signed overflow does not occur
2616 is perfectly safe if the values of the variables involved are such
2617 that overflow never does, in fact, occur. Therefore this warning
2618 can easily give a false positive: a warning about code which is not
2619 actually a problem. To help focus on important issues, several
2620 warning levels are defined. No warnings are issued for the use of
2621 undefined signed overflow when estimating how many iterations a
2622 loop will require, in particular when determining whether a loop
2623 will be executed at all.
2624
2625 -Wstrict-overflow=1
2626 Warn about cases which are both questionable and easy to avoid.
2627 For example: "x + 1 > x"; with -fstrict-overflow, the compiler
2628 will simplify this to 1. This level of -Wstrict-overflow is
2629 enabled by -Wall; higher levels are not, and must be explicitly
2630 requested.
2631
2632 -Wstrict-overflow=2
2633 Also warn about other cases where a comparison is simplified to
2634 a constant. For example: "abs (x) >= 0". This can only be
2635 simplified when -fstrict-overflow is in effect, because "abs
2636 (INT_MIN)" overflows to "INT_MIN", which is less than zero.
2637 -Wstrict-overflow (with no level) is the same as
2638 -Wstrict-overflow=2.
2639
2640 -Wstrict-overflow=3
2641 Also warn about other cases where a comparison is simplified.
2642 For example: "x + 1 > 1" will be simplified to "x > 0".
2643
2644 -Wstrict-overflow=4
2645 Also warn about other simplifications not covered by the above
2646 cases. For example: "(x * 10) / 5" will be simplified to "x *
2647 2".
2648
2649 -Wstrict-overflow=5
2650 Also warn about cases where the compiler reduces the magnitude
2651 of a constant involved in a comparison. For example: "x + 2 >
2652 y" will be simplified to "x + 1 >= y". This is reported only
2653 at the highest warning level because this simplification
2654 applies to many comparisons, so this warning level will give a
2655 very large number of false positives.
2656
2657 -Warray-bounds
2658 This option is only active when -ftree-vrp is active (default for
2659 -O2 and above). It warns about subscripts to arrays that are always
2660 out of bounds. This warning is enabled by -Wall.
2661
2662 -Wno-div-by-zero
2663 Do not warn about compile-time integer division by zero. Floating
2664 point division by zero is not warned about, as it can be a
2665 legitimate way of obtaining infinities and NaNs.
2666
2667 -Wsystem-headers
2668 Print warning messages for constructs found in system header files.
2669 Warnings from system headers are normally suppressed, on the
2670 assumption that they usually do not indicate real problems and
2671 would only make the compiler output harder to read. Using this
2672 command line option tells GCC to emit warnings from system headers
2673 as if they occurred in user code. However, note that using -Wall
2674 in conjunction with this option will not warn about unknown pragmas
2675 in system headers---for that, -Wunknown-pragmas must also be used.
2676
2677 -Wfloat-equal
2678 Warn if floating point values are used in equality comparisons.
2679
2680 The idea behind this is that sometimes it is convenient (for the
2681 programmer) to consider floating-point values as approximations to
2682 infinitely precise real numbers. If you are doing this, then you
2683 need to compute (by analyzing the code, or in some other way) the
2684 maximum or likely maximum error that the computation introduces,
2685 and allow for it when performing comparisons (and when producing
2686 output, but that's a different problem). In particular, instead of
2687 testing for equality, you would check to see whether the two values
2688 have ranges that overlap; and this is done with the relational
2689 operators, so equality comparisons are probably mistaken.
2690
2691 -Wtraditional (C and Objective-C only)
2692 Warn about certain constructs that behave differently in
2693 traditional and ISO C. Also warn about ISO C constructs that have
2694 no traditional C equivalent, and/or problematic constructs which
2695 should be avoided.
2696
2697 · Macro parameters that appear within string literals in the
2698 macro body. In traditional C macro replacement takes place
2699 within string literals, but does not in ISO C.
2700
2701 · In traditional C, some preprocessor directives did not exist.
2702 Traditional preprocessors would only consider a line to be a
2703 directive if the # appeared in column 1 on the line. Therefore
2704 -Wtraditional warns about directives that traditional C
2705 understands but would ignore because the # does not appear as
2706 the first character on the line. It also suggests you hide
2707 directives like #pragma not understood by traditional C by
2708 indenting them. Some traditional implementations would not
2709 recognize #elif, so it suggests avoiding it altogether.
2710
2711 · A function-like macro that appears without arguments.
2712
2713 · The unary plus operator.
2714
2715 · The U integer constant suffix, or the F or L floating point
2716 constant suffixes. (Traditional C does support the L suffix on
2717 integer constants.) Note, these suffixes appear in macros
2718 defined in the system headers of most modern systems, e.g. the
2719 _MIN/_MAX macros in "<limits.h>". Use of these macros in user
2720 code might normally lead to spurious warnings, however GCC's
2721 integrated preprocessor has enough context to avoid warning in
2722 these cases.
2723
2724 · A function declared external in one block and then used after
2725 the end of the block.
2726
2727 · A "switch" statement has an operand of type "long".
2728
2729 · A non-"static" function declaration follows a "static" one.
2730 This construct is not accepted by some traditional C compilers.
2731
2732 · The ISO type of an integer constant has a different width or
2733 signedness from its traditional type. This warning is only
2734 issued if the base of the constant is ten. I.e. hexadecimal or
2735 octal values, which typically represent bit patterns, are not
2736 warned about.
2737
2738 · Usage of ISO string concatenation is detected.
2739
2740 · Initialization of automatic aggregates.
2741
2742 · Identifier conflicts with labels. Traditional C lacks a
2743 separate namespace for labels.
2744
2745 · Initialization of unions. If the initializer is zero, the
2746 warning is omitted. This is done under the assumption that the
2747 zero initializer in user code appears conditioned on e.g.
2748 "__STDC__" to avoid missing initializer warnings and relies on
2749 default initialization to zero in the traditional C case.
2750
2751 · Conversions by prototypes between fixed/floating point values
2752 and vice versa. The absence of these prototypes when compiling
2753 with traditional C would cause serious problems. This is a
2754 subset of the possible conversion warnings, for the full set
2755 use -Wtraditional-conversion.
2756
2757 · Use of ISO C style function definitions. This warning
2758 intentionally is not issued for prototype declarations or
2759 variadic functions because these ISO C features will appear in
2760 your code when using libiberty's traditional C compatibility
2761 macros, "PARAMS" and "VPARAMS". This warning is also bypassed
2762 for nested functions because that feature is already a GCC
2763 extension and thus not relevant to traditional C compatibility.
2764
2765 -Wtraditional-conversion (C and Objective-C only)
2766 Warn if a prototype causes a type conversion that is different from
2767 what would happen to the same argument in the absence of a
2768 prototype. This includes conversions of fixed point to floating
2769 and vice versa, and conversions changing the width or signedness of
2770 a fixed point argument except when the same as the default
2771 promotion.
2772
2773 -Wdeclaration-after-statement (C and Objective-C only)
2774 Warn when a declaration is found after a statement in a block.
2775 This construct, known from C++, was introduced with ISO C99 and is
2776 by default allowed in GCC. It is not supported by ISO C90 and was
2777 not supported by GCC versions before GCC 3.0.
2778
2779 -Wundef
2780 Warn if an undefined identifier is evaluated in an #if directive.
2781
2782 -Wno-endif-labels
2783 Do not warn whenever an #else or an #endif are followed by text.
2784
2785 -Wshadow
2786 Warn whenever a local variable shadows another local variable,
2787 parameter or global variable or whenever a built-in function is
2788 shadowed.
2789
2790 -Wlarger-than=len
2791 Warn whenever an object of larger than len bytes is defined.
2792
2793 -Wframe-larger-than=len
2794 Warn if the size of a function frame is larger than len bytes. The
2795 computation done to determine the stack frame size is approximate
2796 and not conservative. The actual requirements may be somewhat
2797 greater than len even if you do not get a warning. In addition,
2798 any space allocated via "alloca", variable-length arrays, or
2799 related constructs is not included by the compiler when determining
2800 whether or not to issue a warning.
2801
2802 -Wunsafe-loop-optimizations
2803 Warn if the loop cannot be optimized because the compiler could not
2804 assume anything on the bounds of the loop indices. With
2805 -funsafe-loop-optimizations warn if the compiler made such
2806 assumptions.
2807
2808 -Wno-pedantic-ms-format (MinGW targets only)
2809 Disables the warnings about non-ISO "printf" / "scanf" format width
2810 specifiers "I32", "I64", and "I" used on Windows targets depending
2811 on the MS runtime, when you are using the options -Wformat and
2812 -pedantic without gnu-extensions.
2813
2814 -Wpointer-arith
2815 Warn about anything that depends on the "size of" a function type
2816 or of "void". GNU C assigns these types a size of 1, for
2817 convenience in calculations with "void *" pointers and pointers to
2818 functions. In C++, warn also when an arithmetic operation involves
2819 "NULL". This warning is also enabled by -pedantic.
2820
2821 -Wtype-limits
2822 Warn if a comparison is always true or always false due to the
2823 limited range of the data type, but do not warn for constant
2824 expressions. For example, warn if an unsigned variable is compared
2825 against zero with < or >=. This warning is also enabled by
2826 -Wextra.
2827
2828 -Wbad-function-cast (C and Objective-C only)
2829 Warn whenever a function call is cast to a non-matching type. For
2830 example, warn if "int malloc()" is cast to "anything *".
2831
2832 -Wc++-compat (C and Objective-C only)
2833 Warn about ISO C constructs that are outside of the common subset
2834 of ISO C and ISO C++, e.g. request for implicit conversion from
2835 "void *" to a pointer to non-"void" type.
2836
2837 -Wc++0x-compat (C++ and Objective-C++ only)
2838 Warn about C++ constructs whose meaning differs between ISO C++
2839 1998 and ISO C++ 200x, e.g., identifiers in ISO C++ 1998 that will
2840 become keywords in ISO C++ 200x. This warning is enabled by -Wall.
2841
2842 -Wcast-qual
2843 Warn whenever a pointer is cast so as to remove a type qualifier
2844 from the target type. For example, warn if a "const char *" is
2845 cast to an ordinary "char *".
2846
2847 -Wcast-align
2848 Warn whenever a pointer is cast such that the required alignment of
2849 the target is increased. For example, warn if a "char *" is cast
2850 to an "int *" on machines where integers can only be accessed at
2851 two- or four-byte boundaries.
2852
2853 -Wwrite-strings
2854 When compiling C, give string constants the type "const
2855 char[length]" so that copying the address of one into a non-"const"
2856 "char *" pointer will get a warning. These warnings will help you
2857 find at compile time code that can try to write into a string
2858 constant, but only if you have been very careful about using
2859 "const" in declarations and prototypes. Otherwise, it will just be
2860 a nuisance. This is why we did not make -Wall request these
2861 warnings.
2862
2863 When compiling C++, warn about the deprecated conversion from
2864 string literals to "char *". This warning is enabled by default
2865 for C++ programs.
2866
2867 -Wclobbered
2868 Warn for variables that might be changed by longjmp or vfork. This
2869 warning is also enabled by -Wextra.
2870
2871 -Wconversion
2872 Warn for implicit conversions that may alter a value. This includes
2873 conversions between real and integer, like "abs (x)" when "x" is
2874 "double"; conversions between signed and unsigned, like "unsigned
2875 ui = -1"; and conversions to smaller types, like "sqrtf (M_PI)". Do
2876 not warn for explicit casts like "abs ((int) x)" and "ui =
2877 (unsigned) -1", or if the value is not changed by the conversion
2878 like in "abs (2.0)". Warnings about conversions between signed and
2879 unsigned integers can be disabled by using -Wno-sign-conversion.
2880
2881 For C++, also warn for conversions between "NULL" and non-pointer
2882 types; confusing overload resolution for user-defined conversions;
2883 and conversions that will never use a type conversion operator:
2884 conversions to "void", the same type, a base class or a reference
2885 to them. Warnings about conversions between signed and unsigned
2886 integers are disabled by default in C++ unless -Wsign-conversion is
2887 explicitly enabled.
2888
2889 -Wempty-body
2890 Warn if an empty body occurs in an if, else or do while statement.
2891 This warning is also enabled by -Wextra.
2892
2893 -Wenum-compare (C++ and Objective-C++ only)
2894 Warn about a comparison between values of different enum types.
2895 This warning is enabled by default.
2896
2897 -Wsign-compare
2898 Warn when a comparison between signed and unsigned values could
2899 produce an incorrect result when the signed value is converted to
2900 unsigned. This warning is also enabled by -Wextra; to get the
2901 other warnings of -Wextra without this warning, use -Wextra
2902 -Wno-sign-compare.
2903
2904 -Wsign-conversion
2905 Warn for implicit conversions that may change the sign of an
2906 integer value, like assigning a signed integer expression to an
2907 unsigned integer variable. An explicit cast silences the warning.
2908 In C, this option is enabled also by -Wconversion.
2909
2910 -Waddress
2911 Warn about suspicious uses of memory addresses. These include using
2912 the address of a function in a conditional expression, such as
2913 "void func(void); if (func)", and comparisons against the memory
2914 address of a string literal, such as "if (x == "abc")". Such uses
2915 typically indicate a programmer error: the address of a function
2916 always evaluates to true, so their use in a conditional usually
2917 indicate that the programmer forgot the parentheses in a function
2918 call; and comparisons against string literals result in unspecified
2919 behavior and are not portable in C, so they usually indicate that
2920 the programmer intended to use "strcmp". This warning is enabled
2921 by -Wall.
2922
2923 -Wlogical-op
2924 Warn about suspicious uses of logical operators in expressions.
2925 This includes using logical operators in contexts where a bit-wise
2926 operator is likely to be expected.
2927
2928 -Waggregate-return
2929 Warn if any functions that return structures or unions are defined
2930 or called. (In languages where you can return an array, this also
2931 elicits a warning.)
2932
2933 -Wno-attributes
2934 Do not warn if an unexpected "__attribute__" is used, such as
2935 unrecognized attributes, function attributes applied to variables,
2936 etc. This will not stop errors for incorrect use of supported
2937 attributes.
2938
2939 -Wno-builtin-macro-redefined
2940 Do not warn if certain built-in macros are redefined. This
2941 suppresses warnings for redefinition of "__TIMESTAMP__",
2942 "__TIME__", "__DATE__", "__FILE__", and "__BASE_FILE__".
2943
2944 -Wstrict-prototypes (C and Objective-C only)
2945 Warn if a function is declared or defined without specifying the
2946 argument types. (An old-style function definition is permitted
2947 without a warning if preceded by a declaration which specifies the
2948 argument types.)
2949
2950 -Wold-style-declaration (C and Objective-C only)
2951 Warn for obsolescent usages, according to the C Standard, in a
2952 declaration. For example, warn if storage-class specifiers like
2953 "static" are not the first things in a declaration. This warning
2954 is also enabled by -Wextra.
2955
2956 -Wold-style-definition (C and Objective-C only)
2957 Warn if an old-style function definition is used. A warning is
2958 given even if there is a previous prototype.
2959
2960 -Wmissing-parameter-type (C and Objective-C only)
2961 A function parameter is declared without a type specifier in
2962 K&R-style functions:
2963
2964 void foo(bar) { }
2965
2966 This warning is also enabled by -Wextra.
2967
2968 -Wmissing-prototypes (C and Objective-C only)
2969 Warn if a global function is defined without a previous prototype
2970 declaration. This warning is issued even if the definition itself
2971 provides a prototype. The aim is to detect global functions that
2972 fail to be declared in header files.
2973
2974 -Wmissing-declarations
2975 Warn if a global function is defined without a previous
2976 declaration. Do so even if the definition itself provides a
2977 prototype. Use this option to detect global functions that are not
2978 declared in header files. In C++, no warnings are issued for
2979 function templates, or for inline functions, or for functions in
2980 anonymous namespaces.
2981
2982 -Wmissing-field-initializers
2983 Warn if a structure's initializer has some fields missing. For
2984 example, the following code would cause such a warning, because
2985 "x.h" is implicitly zero:
2986
2987 struct s { int f, g, h; };
2988 struct s x = { 3, 4 };
2989
2990 This option does not warn about designated initializers, so the
2991 following modification would not trigger a warning:
2992
2993 struct s { int f, g, h; };
2994 struct s x = { .f = 3, .g = 4 };
2995
2996 This warning is included in -Wextra. To get other -Wextra warnings
2997 without this one, use -Wextra -Wno-missing-field-initializers.
2998
2999 -Wmissing-noreturn
3000 Warn about functions which might be candidates for attribute
3001 "noreturn". Note these are only possible candidates, not absolute
3002 ones. Care should be taken to manually verify functions actually
3003 do not ever return before adding the "noreturn" attribute,
3004 otherwise subtle code generation bugs could be introduced. You
3005 will not get a warning for "main" in hosted C environments.
3006
3007 -Wmissing-format-attribute
3008 Warn about function pointers which might be candidates for "format"
3009 attributes. Note these are only possible candidates, not absolute
3010 ones. GCC will guess that function pointers with "format"
3011 attributes that are used in assignment, initialization, parameter
3012 passing or return statements should have a corresponding "format"
3013 attribute in the resulting type. I.e. the left-hand side of the
3014 assignment or initialization, the type of the parameter variable,
3015 or the return type of the containing function respectively should
3016 also have a "format" attribute to avoid the warning.
3017
3018 GCC will also warn about function definitions which might be
3019 candidates for "format" attributes. Again, these are only possible
3020 candidates. GCC will guess that "format" attributes might be
3021 appropriate for any function that calls a function like "vprintf"
3022 or "vscanf", but this might not always be the case, and some
3023 functions for which "format" attributes are appropriate may not be
3024 detected.
3025
3026 -Wno-multichar
3027 Do not warn if a multicharacter constant ('FOOF') is used. Usually
3028 they indicate a typo in the user's code, as they have
3029 implementation-defined values, and should not be used in portable
3030 code.
3031
3032 -Wnormalized=<none|id|nfc|nfkc>
3033 In ISO C and ISO C++, two identifiers are different if they are
3034 different sequences of characters. However, sometimes when
3035 characters outside the basic ASCII character set are used, you can
3036 have two different character sequences that look the same. To
3037 avoid confusion, the ISO 10646 standard sets out some normalization
3038 rules which when applied ensure that two sequences that look the
3039 same are turned into the same sequence. GCC can warn you if you
3040 are using identifiers which have not been normalized; this option
3041 controls that warning.
3042
3043 There are four levels of warning that GCC supports. The default is
3044 -Wnormalized=nfc, which warns about any identifier which is not in
3045 the ISO 10646 "C" normalized form, NFC. NFC is the recommended
3046 form for most uses.
3047
3048 Unfortunately, there are some characters which ISO C and ISO C++
3049 allow in identifiers that when turned into NFC aren't allowable as
3050 identifiers. That is, there's no way to use these symbols in
3051 portable ISO C or C++ and have all your identifiers in NFC.
3052 -Wnormalized=id suppresses the warning for these characters. It is
3053 hoped that future versions of the standards involved will correct
3054 this, which is why this option is not the default.
3055
3056 You can switch the warning off for all characters by writing
3057 -Wnormalized=none. You would only want to do this if you were
3058 using some other normalization scheme (like "D"), because otherwise
3059 you can easily create bugs that are literally impossible to see.
3060
3061 Some characters in ISO 10646 have distinct meanings but look
3062 identical in some fonts or display methodologies, especially once
3063 formatting has been applied. For instance "\u207F", "SUPERSCRIPT
3064 LATIN SMALL LETTER N", will display just like a regular "n" which
3065 has been placed in a superscript. ISO 10646 defines the NFKC
3066 normalization scheme to convert all these into a standard form as
3067 well, and GCC will warn if your code is not in NFKC if you use
3068 -Wnormalized=nfkc. This warning is comparable to warning about
3069 every identifier that contains the letter O because it might be
3070 confused with the digit 0, and so is not the default, but may be
3071 useful as a local coding convention if the programming environment
3072 is unable to be fixed to display these characters distinctly.
3073
3074 -Wno-deprecated
3075 Do not warn about usage of deprecated features.
3076
3077 -Wno-deprecated-declarations
3078 Do not warn about uses of functions, variables, and types marked as
3079 deprecated by using the "deprecated" attribute.
3080
3081 -Wno-overflow
3082 Do not warn about compile-time overflow in constant expressions.
3083
3084 -Woverride-init (C and Objective-C only)
3085 Warn if an initialized field without side effects is overridden
3086 when using designated initializers.
3087
3088 This warning is included in -Wextra. To get other -Wextra warnings
3089 without this one, use -Wextra -Wno-override-init.
3090
3091 -Wpacked
3092 Warn if a structure is given the packed attribute, but the packed
3093 attribute has no effect on the layout or size of the structure.
3094 Such structures may be mis-aligned for little benefit. For
3095 instance, in this code, the variable "f.x" in "struct bar" will be
3096 misaligned even though "struct bar" does not itself have the packed
3097 attribute:
3098
3099 struct foo {
3100 int x;
3101 char a, b, c, d;
3102 } __attribute__((packed));
3103 struct bar {
3104 char z;
3105 struct foo f;
3106 };
3107
3108 -Wpacked-bitfield-compat
3109 The 4.1, 4.2 and 4.3 series of GCC ignore the "packed" attribute on
3110 bit-fields of type "char". This has been fixed in GCC 4.4 but the
3111 change can lead to differences in the structure layout. GCC
3112 informs you when the offset of such a field has changed in GCC 4.4.
3113 For example there is no longer a 4-bit padding between field "a"
3114 and "b" in this structure:
3115
3116 struct foo
3117 {
3118 char a:4;
3119 char b:8;
3120 } __attribute__ ((packed));
3121
3122 This warning is enabled by default. Use
3123 -Wno-packed-bitfield-compat to disable this warning.
3124
3125 -Wpadded
3126 Warn if padding is included in a structure, either to align an
3127 element of the structure or to align the whole structure.
3128 Sometimes when this happens it is possible to rearrange the fields
3129 of the structure to reduce the padding and so make the structure
3130 smaller.
3131
3132 -Wredundant-decls
3133 Warn if anything is declared more than once in the same scope, even
3134 in cases where multiple declaration is valid and changes nothing.
3135
3136 -Wnested-externs (C and Objective-C only)
3137 Warn if an "extern" declaration is encountered within a function.
3138
3139 -Wunreachable-code
3140 Warn if the compiler detects that code will never be executed.
3141
3142 This option is intended to warn when the compiler detects that at
3143 least a whole line of source code will never be executed, because
3144 some condition is never satisfied or because it is after a
3145 procedure that never returns.
3146
3147 It is possible for this option to produce a warning even though
3148 there are circumstances under which part of the affected line can
3149 be executed, so care should be taken when removing apparently-
3150 unreachable code.
3151
3152 For instance, when a function is inlined, a warning may mean that
3153 the line is unreachable in only one inlined copy of the function.
3154
3155 This option is not made part of -Wall because in a debugging
3156 version of a program there is often substantial code which checks
3157 correct functioning of the program and is, hopefully, unreachable
3158 because the program does work. Another common use of unreachable
3159 code is to provide behavior which is selectable at compile-time.
3160
3161 -Winline
3162 Warn if a function can not be inlined and it was declared as
3163 inline. Even with this option, the compiler will not warn about
3164 failures to inline functions declared in system headers.
3165
3166 The compiler uses a variety of heuristics to determine whether or
3167 not to inline a function. For example, the compiler takes into
3168 account the size of the function being inlined and the amount of
3169 inlining that has already been done in the current function.
3170 Therefore, seemingly insignificant changes in the source program
3171 can cause the warnings produced by -Winline to appear or disappear.
3172
3173 -Wno-invalid-offsetof (C++ and Objective-C++ only)
3174 Suppress warnings from applying the offsetof macro to a non-POD
3175 type. According to the 1998 ISO C++ standard, applying offsetof to
3176 a non-POD type is undefined. In existing C++ implementations,
3177 however, offsetof typically gives meaningful results even when
3178 applied to certain kinds of non-POD types. (Such as a simple struct
3179 that fails to be a POD type only by virtue of having a
3180 constructor.) This flag is for users who are aware that they are
3181 writing nonportable code and who have deliberately chosen to ignore
3182 the warning about it.
3183
3184 The restrictions on offsetof may be relaxed in a future version of
3185 the C++ standard.
3186
3187 -Wno-int-to-pointer-cast (C and Objective-C only)
3188 Suppress warnings from casts to pointer type of an integer of a
3189 different size.
3190
3191 -Wno-pointer-to-int-cast (C and Objective-C only)
3192 Suppress warnings from casts from a pointer to an integer type of a
3193 different size.
3194
3195 -Winvalid-pch
3196 Warn if a precompiled header is found in the search path but can't
3197 be used.
3198
3199 -Wlong-long
3200 Warn if long long type is used. This is default. To inhibit the
3201 warning messages, use -Wno-long-long. Flags -Wlong-long and
3202 -Wno-long-long are taken into account only when -pedantic flag is
3203 used.
3204
3205 -Wvariadic-macros
3206 Warn if variadic macros are used in pedantic ISO C90 mode, or the
3207 GNU alternate syntax when in pedantic ISO C99 mode. This is
3208 default. To inhibit the warning messages, use
3209 -Wno-variadic-macros.
3210
3211 -Wvla
3212 Warn if variable length array is used in the code. -Wno-vla will
3213 prevent the -pedantic warning of the variable length array.
3214
3215 -Wvolatile-register-var
3216 Warn if a register variable is declared volatile. The volatile
3217 modifier does not inhibit all optimizations that may eliminate
3218 reads and/or writes to register variables. This warning is enabled
3219 by -Wall.
3220
3221 -Wdisabled-optimization
3222 Warn if a requested optimization pass is disabled. This warning
3223 does not generally indicate that there is anything wrong with your
3224 code; it merely indicates that GCC's optimizers were unable to
3225 handle the code effectively. Often, the problem is that your code
3226 is too big or too complex; GCC will refuse to optimize programs
3227 when the optimization itself is likely to take inordinate amounts
3228 of time.
3229
3230 -Wpointer-sign (C and Objective-C only)
3231 Warn for pointer argument passing or assignment with different
3232 signedness. This option is only supported for C and Objective-C.
3233 It is implied by -Wall and by -pedantic, which can be disabled with
3234 -Wno-pointer-sign.
3235
3236 -Wstack-protector
3237 This option is only active when -fstack-protector is active. It
3238 warns about functions that will not be protected against stack
3239 smashing.
3240
3241 -Wno-mudflap
3242 Suppress warnings about constructs that cannot be instrumented by
3243 -fmudflap.
3244
3245 -Woverlength-strings
3246 Warn about string constants which are longer than the "minimum
3247 maximum" length specified in the C standard. Modern compilers
3248 generally allow string constants which are much longer than the
3249 standard's minimum limit, but very portable programs should avoid
3250 using longer strings.
3251
3252 The limit applies after string constant concatenation, and does not
3253 count the trailing NUL. In C89, the limit was 509 characters; in
3254 C99, it was raised to 4095. C++98 does not specify a normative
3255 minimum maximum, so we do not diagnose overlength strings in C++.
3256
3257 This option is implied by -pedantic, and can be disabled with
3258 -Wno-overlength-strings.
3259
3260 Options for Debugging Your Program or GCC
3261 GCC has various special options that are used for debugging either your
3262 program or GCC:
3263
3264 -g Produce debugging information in the operating system's native
3265 format (stabs, COFF, XCOFF, or DWARF 2). GDB can work with this
3266 debugging information.
3267
3268 On most systems that use stabs format, -g enables use of extra
3269 debugging information that only GDB can use; this extra information
3270 makes debugging work better in GDB but will probably make other
3271 debuggers crash or refuse to read the program. If you want to
3272 control for certain whether to generate the extra information, use
3273 -gstabs+, -gstabs, -gxcoff+, -gxcoff, or -gvms (see below).
3274
3275 GCC allows you to use -g with -O. The shortcuts taken by optimized
3276 code may occasionally produce surprising results: some variables
3277 you declared may not exist at all; flow of control may briefly move
3278 where you did not expect it; some statements may not be executed
3279 because they compute constant results or their values were already
3280 at hand; some statements may execute in different places because
3281 they were moved out of loops.
3282
3283 Nevertheless it proves possible to debug optimized output. This
3284 makes it reasonable to use the optimizer for programs that might
3285 have bugs.
3286
3287 The following options are useful when GCC is generated with the
3288 capability for more than one debugging format.
3289
3290 -ggdb
3291 Produce debugging information for use by GDB. This means to use
3292 the most expressive format available (DWARF 2, stabs, or the native
3293 format if neither of those are supported), including GDB extensions
3294 if at all possible.
3295
3296 -gstabs
3297 Produce debugging information in stabs format (if that is
3298 supported), without GDB extensions. This is the format used by DBX
3299 on most BSD systems. On MIPS, Alpha and System V Release 4 systems
3300 this option produces stabs debugging output which is not understood
3301 by DBX or SDB. On System V Release 4 systems this option requires
3302 the GNU assembler.
3303
3304 -feliminate-unused-debug-symbols
3305 Produce debugging information in stabs format (if that is
3306 supported), for only symbols that are actually used.
3307
3308 -femit-class-debug-always
3309 Instead of emitting debugging information for a C++ class in only
3310 one object file, emit it in all object files using the class. This
3311 option should be used only with debuggers that are unable to handle
3312 the way GCC normally emits debugging information for classes
3313 because using this option will increase the size of debugging
3314 information by as much as a factor of two.
3315
3316 -gstabs+
3317 Produce debugging information in stabs format (if that is
3318 supported), using GNU extensions understood only by the GNU
3319 debugger (GDB). The use of these extensions is likely to make
3320 other debuggers crash or refuse to read the program.
3321
3322 -gcoff
3323 Produce debugging information in COFF format (if that is
3324 supported). This is the format used by SDB on most System V
3325 systems prior to System V Release 4.
3326
3327 -gxcoff
3328 Produce debugging information in XCOFF format (if that is
3329 supported). This is the format used by the DBX debugger on IBM
3330 RS/6000 systems.
3331
3332 -gxcoff+
3333 Produce debugging information in XCOFF format (if that is
3334 supported), using GNU extensions understood only by the GNU
3335 debugger (GDB). The use of these extensions is likely to make
3336 other debuggers crash or refuse to read the program, and may cause
3337 assemblers other than the GNU assembler (GAS) to fail with an
3338 error.
3339
3340 -gdwarf-version
3341 Produce debugging information in DWARF format (if that is
3342 supported). This is the format used by DBX on IRIX 6. The value
3343 of version may be either 2 or 3; the default version is 3.
3344
3345 Note that with DWARF version 2 some ports require, and will always
3346 use, some non-conflicting DWARF 3 extensions in the unwind tables.
3347
3348 -gstrict-dwarf
3349 Disallow using extensions of later DWARF standard version than
3350 selected with -gdwarf-version. On most targets using non-
3351 conflicting DWARF extensions from later standard versions is
3352 allowed.
3353
3354 -gno-strict-dwarf
3355 Allow using extensions of later DWARF standard version than
3356 selected with -gdwarf-version.
3357
3358 -gvms
3359 Produce debugging information in VMS debug format (if that is
3360 supported). This is the format used by DEBUG on VMS systems.
3361
3362 -glevel
3363 -ggdblevel
3364 -gstabslevel
3365 -gcofflevel
3366 -gxcofflevel
3367 -gvmslevel
3368 Request debugging information and also use level to specify how
3369 much information. The default level is 2.
3370
3371 Level 0 produces no debug information at all. Thus, -g0 negates
3372 -g.
3373
3374 Level 1 produces minimal information, enough for making backtraces
3375 in parts of the program that you don't plan to debug. This
3376 includes descriptions of functions and external variables, but no
3377 information about local variables and no line numbers.
3378
3379 Level 3 includes extra information, such as all the macro
3380 definitions present in the program. Some debuggers support macro
3381 expansion when you use -g3.
3382
3383 -gdwarf-2 does not accept a concatenated debug level, because GCC
3384 used to support an option -gdwarf that meant to generate debug
3385 information in version 1 of the DWARF format (which is very
3386 different from version 2), and it would have been too confusing.
3387 That debug format is long obsolete, but the option cannot be
3388 changed now. Instead use an additional -glevel option to change
3389 the debug level for DWARF.
3390
3391 -gtoggle
3392 Turn off generation of debug info, if leaving out this option would
3393 have generated it, or turn it on at level 2 otherwise. The
3394 position of this argument in the command line does not matter, it
3395 takes effect after all other options are processed, and it does so
3396 only once, no matter how many times it is given. This is mainly
3397 intended to be used with -fcompare-debug.
3398
3399 -fdump-final-insns[=file]
3400 Dump the final internal representation (RTL) to file. If the
3401 optional argument is omitted (or if file is "."), the name of the
3402 dump file will be determined by appending ".gkd" to the compilation
3403 output file name.
3404
3405 -fcompare-debug[=opts]
3406 If no error occurs during compilation, run the compiler a second
3407 time, adding opts and -fcompare-debug-second to the arguments
3408 passed to the second compilation. Dump the final internal
3409 representation in both compilations, and print an error if they
3410 differ.
3411
3412 If the equal sign is omitted, the default -gtoggle is used.
3413
3414 The environment variable GCC_COMPARE_DEBUG, if defined, non-empty
3415 and nonzero, implicitly enables -fcompare-debug. If
3416 GCC_COMPARE_DEBUG is defined to a string starting with a dash, then
3417 it is used for opts, otherwise the default -gtoggle is used.
3418
3419 -fcompare-debug=, with the equal sign but without opts, is
3420 equivalent to -fno-compare-debug, which disables the dumping of the
3421 final representation and the second compilation, preventing even
3422 GCC_COMPARE_DEBUG from taking effect.
3423
3424 To verify full coverage during -fcompare-debug testing, set
3425 GCC_COMPARE_DEBUG to say -fcompare-debug-not-overridden, which GCC
3426 will reject as an invalid option in any actual compilation (rather
3427 than preprocessing, assembly or linking). To get just a warning,
3428 setting GCC_COMPARE_DEBUG to -w%n-fcompare-debug not overridden
3429 will do.
3430
3431 -fcompare-debug-second
3432 This option is implicitly passed to the compiler for the second
3433 compilation requested by -fcompare-debug, along with options to
3434 silence warnings, and omitting other options that would cause side-
3435 effect compiler outputs to files or to the standard output. Dump
3436 files and preserved temporary files are renamed so as to contain
3437 the ".gk" additional extension during the second compilation, to
3438 avoid overwriting those generated by the first.
3439
3440 When this option is passed to the compiler driver, it causes the
3441 first compilation to be skipped, which makes it useful for little
3442 other than debugging the compiler proper.
3443
3444 -feliminate-dwarf2-dups
3445 Compress DWARF2 debugging information by eliminating duplicated
3446 information about each symbol. This option only makes sense when
3447 generating DWARF2 debugging information with -gdwarf-2.
3448
3449 -femit-struct-debug-baseonly
3450 Emit debug information for struct-like types only when the base
3451 name of the compilation source file matches the base name of file
3452 in which the struct was defined.
3453
3454 This option substantially reduces the size of debugging
3455 information, but at significant potential loss in type information
3456 to the debugger. See -femit-struct-debug-reduced for a less
3457 aggressive option. See -femit-struct-debug-detailed for more
3458 detailed control.
3459
3460 This option works only with DWARF 2.
3461
3462 -femit-struct-debug-reduced
3463 Emit debug information for struct-like types only when the base
3464 name of the compilation source file matches the base name of file
3465 in which the type was defined, unless the struct is a template or
3466 defined in a system header.
3467
3468 This option significantly reduces the size of debugging
3469 information, with some potential loss in type information to the
3470 debugger. See -femit-struct-debug-baseonly for a more aggressive
3471 option. See -femit-struct-debug-detailed for more detailed
3472 control.
3473
3474 This option works only with DWARF 2.
3475
3476 -femit-struct-debug-detailed[=spec-list]
3477 Specify the struct-like types for which the compiler will generate
3478 debug information. The intent is to reduce duplicate struct debug
3479 information between different object files within the same program.
3480
3481 This option is a detailed version of -femit-struct-debug-reduced
3482 and -femit-struct-debug-baseonly, which will serve for most needs.
3483
3484 A specification has the syntax
3485 [dir:|ind:][ord:|gen:](any|sys|base|none)
3486
3487 The optional first word limits the specification to structs that
3488 are used directly (dir:) or used indirectly (ind:). A struct type
3489 is used directly when it is the type of a variable, member.
3490 Indirect uses arise through pointers to structs. That is, when use
3491 of an incomplete struct would be legal, the use is indirect. An
3492 example is struct one direct; struct two * indirect;.
3493
3494 The optional second word limits the specification to ordinary
3495 structs (ord:) or generic structs (gen:). Generic structs are a
3496 bit complicated to explain. For C++, these are non-explicit
3497 specializations of template classes, or non-template classes within
3498 the above. Other programming languages have generics, but
3499 -femit-struct-debug-detailed does not yet implement them.
3500
3501 The third word specifies the source files for those structs for
3502 which the compiler will emit debug information. The values none
3503 and any have the normal meaning. The value base means that the
3504 base of name of the file in which the type declaration appears must
3505 match the base of the name of the main compilation file. In
3506 practice, this means that types declared in foo.c and foo.h will
3507 have debug information, but types declared in other header will
3508 not. The value sys means those types satisfying base or declared
3509 in system or compiler headers.
3510
3511 You may need to experiment to determine the best settings for your
3512 application.
3513
3514 The default is -femit-struct-debug-detailed=all.
3515
3516 This option works only with DWARF 2.
3517
3518 -fno-merge-debug-strings
3519 Direct the linker to not merge together strings in the debugging
3520 information which are identical in different object files. Merging
3521 is not supported by all assemblers or linkers. Merging decreases
3522 the size of the debug information in the output file at the cost of
3523 increasing link processing time. Merging is enabled by default.
3524
3525 -fdebug-prefix-map=old=new
3526 When compiling files in directory old, record debugging information
3527 describing them as in new instead.
3528
3529 -fno-dwarf2-cfi-asm
3530 Emit DWARF 2 unwind info as compiler generated ".eh_frame" section
3531 instead of using GAS ".cfi_*" directives.
3532
3533 -p Generate extra code to write profile information suitable for the
3534 analysis program prof. You must use this option when compiling the
3535 source files you want data about, and you must also use it when
3536 linking.
3537
3538 -pg Generate extra code to write profile information suitable for the
3539 analysis program gprof. You must use this option when compiling
3540 the source files you want data about, and you must also use it when
3541 linking.
3542
3543 -Q Makes the compiler print out each function name as it is compiled,
3544 and print some statistics about each pass when it finishes.
3545
3546 -ftime-report
3547 Makes the compiler print some statistics about the time consumed by
3548 each pass when it finishes.
3549
3550 -fmem-report
3551 Makes the compiler print some statistics about permanent memory
3552 allocation when it finishes.
3553
3554 -fpre-ipa-mem-report
3555 -fpost-ipa-mem-report
3556 Makes the compiler print some statistics about permanent memory
3557 allocation before or after interprocedural optimization.
3558
3559 -fprofile-arcs
3560 Add code so that program flow arcs are instrumented. During
3561 execution the program records how many times each branch and call
3562 is executed and how many times it is taken or returns. When the
3563 compiled program exits it saves this data to a file called
3564 auxname.gcda for each source file. The data may be used for
3565 profile-directed optimizations (-fbranch-probabilities), or for
3566 test coverage analysis (-ftest-coverage). Each object file's
3567 auxname is generated from the name of the output file, if
3568 explicitly specified and it is not the final executable, otherwise
3569 it is the basename of the source file. In both cases any suffix is
3570 removed (e.g. foo.gcda for input file dir/foo.c, or dir/foo.gcda
3571 for output file specified as -o dir/foo.o).
3572
3573 --coverage
3574 This option is used to compile and link code instrumented for
3575 coverage analysis. The option is a synonym for -fprofile-arcs
3576 -ftest-coverage (when compiling) and -lgcov (when linking). See
3577 the documentation for those options for more details.
3578
3579 · Compile the source files with -fprofile-arcs plus optimization
3580 and code generation options. For test coverage analysis, use
3581 the additional -ftest-coverage option. You do not need to
3582 profile every source file in a program.
3583
3584 · Link your object files with -lgcov or -fprofile-arcs (the
3585 latter implies the former).
3586
3587 · Run the program on a representative workload to generate the
3588 arc profile information. This may be repeated any number of
3589 times. You can run concurrent instances of your program, and
3590 provided that the file system supports locking, the data files
3591 will be correctly updated. Also "fork" calls are detected and
3592 correctly handled (double counting will not happen).
3593
3594 · For profile-directed optimizations, compile the source files
3595 again with the same optimization and code generation options
3596 plus -fbranch-probabilities.
3597
3598 · For test coverage analysis, use gcov to produce human readable
3599 information from the .gcno and .gcda files. Refer to the gcov
3600 documentation for further information.
3601
3602 With -fprofile-arcs, for each function of your program GCC creates
3603 a program flow graph, then finds a spanning tree for the graph.
3604 Only arcs that are not on the spanning tree have to be
3605 instrumented: the compiler adds code to count the number of times
3606 that these arcs are executed. When an arc is the only exit or only
3607 entrance to a block, the instrumentation code can be added to the
3608 block; otherwise, a new basic block must be created to hold the
3609 instrumentation code.
3610
3611 -ftest-coverage
3612 Produce a notes file that the gcov code-coverage utility can use to
3613 show program coverage. Each source file's note file is called
3614 auxname.gcno. Refer to the -fprofile-arcs option above for a
3615 description of auxname and instructions on how to generate test
3616 coverage data. Coverage data will match the source files more
3617 closely, if you do not optimize.
3618
3619 -fdbg-cnt-list
3620 Print the name and the counter upperbound for all debug counters.
3621
3622 -fdbg-cnt=counter-value-list
3623 Set the internal debug counter upperbound. counter-value-list is a
3624 comma-separated list of name:value pairs which sets the upperbound
3625 of each debug counter name to value. All debug counters have the
3626 initial upperbound of UINT_MAX, thus dbg_cnt() returns true always
3627 unless the upperbound is set by this option. e.g. With
3628 -fdbg-cnt=dce:10,tail_call:0 dbg_cnt(dce) will return true only for
3629 first 10 invocations and dbg_cnt(tail_call) will return false
3630 always.
3631
3632 -dletters
3633 -fdump-rtl-pass
3634 Says to make debugging dumps during compilation at times specified
3635 by letters. This is used for debugging the RTL-based passes of
3636 the compiler. The file names for most of the dumps are made by
3637 appending a pass number and a word to the dumpname. dumpname is
3638 generated from the name of the output file, if explicitly specified
3639 and it is not an executable, otherwise it is the basename of the
3640 source file. These switches may have different effects when -E is
3641 used for preprocessing.
3642
3643 Debug dumps can be enabled with a -fdump-rtl switch or some -d
3644 option letters. Here are the possible letters for use in pass and
3645 letters, and their meanings:
3646
3647 -fdump-rtl-alignments
3648 Dump after branch alignments have been computed.
3649
3650 -fdump-rtl-asmcons
3651 Dump after fixing rtl statements that have unsatisfied in/out
3652 constraints.
3653
3654 -fdump-rtl-auto_inc_dec
3655 Dump after auto-inc-dec discovery. This pass is only run on
3656 architectures that have auto inc or auto dec instructions.
3657
3658 -fdump-rtl-barriers
3659 Dump after cleaning up the barrier instructions.
3660
3661 -fdump-rtl-bbpart
3662 Dump after partitioning hot and cold basic blocks.
3663
3664 -fdump-rtl-bbro
3665 Dump after block reordering.
3666
3667 -fdump-rtl-btl1
3668 -fdump-rtl-btl2
3669 -fdump-rtl-btl1 and -fdump-rtl-btl2 enable dumping after the
3670 two branch target load optimization passes.
3671
3672 -fdump-rtl-bypass
3673 Dump after jump bypassing and control flow optimizations.
3674
3675 -fdump-rtl-combine
3676 Dump after the RTL instruction combination pass.
3677
3678 -fdump-rtl-compgotos
3679 Dump after duplicating the computed gotos.
3680
3681 -fdump-rtl-ce1
3682 -fdump-rtl-ce2
3683 -fdump-rtl-ce3
3684 -fdump-rtl-ce1, -fdump-rtl-ce2, and -fdump-rtl-ce3 enable
3685 dumping after the three if conversion passes.
3686
3687 -fdump-rtl-cprop_hardreg
3688 Dump after hard register copy propagation.
3689
3690 -fdump-rtl-csa
3691 Dump after combining stack adjustments.
3692
3693 -fdump-rtl-cse1
3694 -fdump-rtl-cse2
3695 -fdump-rtl-cse1 and -fdump-rtl-cse2 enable dumping after the
3696 two common sub-expression elimination passes.
3697
3698 -fdump-rtl-dce
3699 Dump after the standalone dead code elimination passes.
3700
3701 -fdump-rtl-dbr
3702 Dump after delayed branch scheduling.
3703
3704 -fdump-rtl-dce1
3705 -fdump-rtl-dce2
3706 -fdump-rtl-dce1 and -fdump-rtl-dce2 enable dumping after the
3707 two dead store elimination passes.
3708
3709 -fdump-rtl-eh
3710 Dump after finalization of EH handling code.
3711
3712 -fdump-rtl-eh_ranges
3713 Dump after conversion of EH handling range regions.
3714
3715 -fdump-rtl-expand
3716 Dump after RTL generation.
3717
3718 -fdump-rtl-fwprop1
3719 -fdump-rtl-fwprop2
3720 -fdump-rtl-fwprop1 and -fdump-rtl-fwprop2 enable dumping after
3721 the two forward propagation passes.
3722
3723 -fdump-rtl-gcse1
3724 -fdump-rtl-gcse2
3725 -fdump-rtl-gcse1 and -fdump-rtl-gcse2 enable dumping after
3726 global common subexpression elimination.
3727
3728 -fdump-rtl-init-regs
3729 Dump after the initialization of the registers.
3730
3731 -fdump-rtl-initvals
3732 Dump after the computation of the initial value sets.
3733
3734 -fdump-rtl-into_cfglayout
3735 Dump after converting to cfglayout mode.
3736
3737 -fdump-rtl-ira
3738 Dump after iterated register allocation.
3739
3740 -fdump-rtl-jump
3741 Dump after the second jump optimization.
3742
3743 -fdump-rtl-loop2
3744 -fdump-rtl-loop2 enables dumping after the rtl loop
3745 optimization passes.
3746
3747 -fdump-rtl-mach
3748 Dump after performing the machine dependent reorganization
3749 pass, if that pass exists.
3750
3751 -fdump-rtl-mode_sw
3752 Dump after removing redundant mode switches.
3753
3754 -fdump-rtl-rnreg
3755 Dump after register renumbering.
3756
3757 -fdump-rtl-outof_cfglayout
3758 Dump after converting from cfglayout mode.
3759
3760 -fdump-rtl-peephole2
3761 Dump after the peephole pass.
3762
3763 -fdump-rtl-postreload
3764 Dump after post-reload optimizations.
3765
3766 -fdump-rtl-pro_and_epilogue
3767 Dump after generating the function pro and epilogues.
3768
3769 -fdump-rtl-regmove
3770 Dump after the register move pass.
3771
3772 -fdump-rtl-sched1
3773 -fdump-rtl-sched2
3774 -fdump-rtl-sched1 and -fdump-rtl-sched2 enable dumping after
3775 the basic block scheduling passes.
3776
3777 -fdump-rtl-see
3778 Dump after sign extension elimination.
3779
3780 -fdump-rtl-seqabstr
3781 Dump after common sequence discovery.
3782
3783 -fdump-rtl-shorten
3784 Dump after shortening branches.
3785
3786 -fdump-rtl-sibling
3787 Dump after sibling call optimizations.
3788
3789 -fdump-rtl-split1
3790 -fdump-rtl-split2
3791 -fdump-rtl-split3
3792 -fdump-rtl-split4
3793 -fdump-rtl-split5
3794 -fdump-rtl-split1, -fdump-rtl-split2, -fdump-rtl-split3,
3795 -fdump-rtl-split4 and -fdump-rtl-split5 enable dumping after
3796 five rounds of instruction splitting.
3797
3798 -fdump-rtl-sms
3799 Dump after modulo scheduling. This pass is only run on some
3800 architectures.
3801
3802 -fdump-rtl-stack
3803 Dump after conversion from GCC's "flat register file" registers
3804 to the x87's stack-like registers. This pass is only run on
3805 x86 variants.
3806
3807 -fdump-rtl-subreg1
3808 -fdump-rtl-subreg2
3809 -fdump-rtl-subreg1 and -fdump-rtl-subreg2 enable dumping after
3810 the two subreg expansion passes.
3811
3812 -fdump-rtl-unshare
3813 Dump after all rtl has been unshared.
3814
3815 -fdump-rtl-vartrack
3816 Dump after variable tracking.
3817
3818 -fdump-rtl-vregs
3819 Dump after converting virtual registers to hard registers.
3820
3821 -fdump-rtl-web
3822 Dump after live range splitting.
3823
3824 -fdump-rtl-regclass
3825 -fdump-rtl-subregs_of_mode_init
3826 -fdump-rtl-subregs_of_mode_finish
3827 -fdump-rtl-dfinit
3828 -fdump-rtl-dfinish
3829 These dumps are defined but always produce empty files.
3830
3831 -fdump-rtl-all
3832 Produce all the dumps listed above.
3833
3834 -dA Annotate the assembler output with miscellaneous debugging
3835 information.
3836
3837 -dD Dump all macro definitions, at the end of preprocessing, in
3838 addition to normal output.
3839
3840 -dH Produce a core dump whenever an error occurs.
3841
3842 -dm Print statistics on memory usage, at the end of the run, to
3843 standard error.
3844
3845 -dp Annotate the assembler output with a comment indicating which
3846 pattern and alternative was used. The length of each
3847 instruction is also printed.
3848
3849 -dP Dump the RTL in the assembler output as a comment before each
3850 instruction. Also turns on -dp annotation.
3851
3852 -dv For each of the other indicated dump files (-fdump-rtl-pass),
3853 dump a representation of the control flow graph suitable for
3854 viewing with VCG to file.pass.vcg.
3855
3856 -dx Just generate RTL for a function instead of compiling it.
3857 Usually used with -fdump-rtl-expand.
3858
3859 -dy Dump debugging information during parsing, to standard error.
3860
3861 -fdump-noaddr
3862 When doing debugging dumps, suppress address output. This makes it
3863 more feasible to use diff on debugging dumps for compiler
3864 invocations with different compiler binaries and/or different text
3865 / bss / data / heap / stack / dso start locations.
3866
3867 -fdump-unnumbered
3868 When doing debugging dumps, suppress instruction numbers and
3869 address output. This makes it more feasible to use diff on
3870 debugging dumps for compiler invocations with different options, in
3871 particular with and without -g.
3872
3873 -fdump-unnumbered-links
3874 When doing debugging dumps (see -d option above), suppress
3875 instruction numbers for the links to the previous and next
3876 instructions in a sequence.
3877
3878 -fdump-translation-unit (C++ only)
3879 -fdump-translation-unit-options (C++ only)
3880 Dump a representation of the tree structure for the entire
3881 translation unit to a file. The file name is made by appending .tu
3882 to the source file name. If the -options form is used, options
3883 controls the details of the dump as described for the -fdump-tree
3884 options.
3885
3886 -fdump-class-hierarchy (C++ only)
3887 -fdump-class-hierarchy-options (C++ only)
3888 Dump a representation of each class's hierarchy and virtual
3889 function table layout to a file. The file name is made by
3890 appending .class to the source file name. If the -options form is
3891 used, options controls the details of the dump as described for the
3892 -fdump-tree options.
3893
3894 -fdump-ipa-switch
3895 Control the dumping at various stages of inter-procedural analysis
3896 language tree to a file. The file name is generated by appending a
3897 switch specific suffix to the source file name. The following
3898 dumps are possible:
3899
3900 all Enables all inter-procedural analysis dumps.
3901
3902 cgraph
3903 Dumps information about call-graph optimization, unused
3904 function removal, and inlining decisions.
3905
3906 inline
3907 Dump after function inlining.
3908
3909 -fdump-statistics-option
3910 Enable and control dumping of pass statistics in a separate file.
3911 The file name is generated by appending a suffix ending in
3912 .statistics to the source file name. If the -option form is used,
3913 -stats will cause counters to be summed over the whole compilation
3914 unit while -details will dump every event as the passes generate
3915 them. The default with no option is to sum counters for each
3916 function compiled.
3917
3918 -fdump-tree-switch
3919 -fdump-tree-switch-options
3920 Control the dumping at various stages of processing the
3921 intermediate language tree to a file. The file name is generated
3922 by appending a switch specific suffix to the source file name. If
3923 the -options form is used, options is a list of - separated options
3924 that control the details of the dump. Not all options are
3925 applicable to all dumps, those which are not meaningful will be
3926 ignored. The following options are available
3927
3928 address
3929 Print the address of each node. Usually this is not meaningful
3930 as it changes according to the environment and source file.
3931 Its primary use is for tying up a dump file with a debug
3932 environment.
3933
3934 slim
3935 Inhibit dumping of members of a scope or body of a function
3936 merely because that scope has been reached. Only dump such
3937 items when they are directly reachable by some other path.
3938 When dumping pretty-printed trees, this option inhibits dumping
3939 the bodies of control structures.
3940
3941 raw Print a raw representation of the tree. By default, trees are
3942 pretty-printed into a C-like representation.
3943
3944 details
3945 Enable more detailed dumps (not honored by every dump option).
3946
3947 stats
3948 Enable dumping various statistics about the pass (not honored
3949 by every dump option).
3950
3951 blocks
3952 Enable showing basic block boundaries (disabled in raw dumps).
3953
3954 vops
3955 Enable showing virtual operands for every statement.
3956
3957 lineno
3958 Enable showing line numbers for statements.
3959
3960 uid Enable showing the unique ID ("DECL_UID") for each variable.
3961
3962 verbose
3963 Enable showing the tree dump for each statement.
3964
3965 all Turn on all options, except raw, slim, verbose and lineno.
3966
3967 The following tree dumps are possible:
3968
3969 original
3970 Dump before any tree based optimization, to file.original.
3971
3972 optimized
3973 Dump after all tree based optimization, to file.optimized.
3974
3975 gimple
3976 Dump each function before and after the gimplification pass to
3977 a file. The file name is made by appending .gimple to the
3978 source file name.
3979
3980 cfg Dump the control flow graph of each function to a file. The
3981 file name is made by appending .cfg to the source file name.
3982
3983 vcg Dump the control flow graph of each function to a file in VCG
3984 format. The file name is made by appending .vcg to the source
3985 file name. Note that if the file contains more than one
3986 function, the generated file cannot be used directly by VCG.
3987 You will need to cut and paste each function's graph into its
3988 own separate file first.
3989
3990 ch Dump each function after copying loop headers. The file name
3991 is made by appending .ch to the source file name.
3992
3993 ssa Dump SSA related information to a file. The file name is made
3994 by appending .ssa to the source file name.
3995
3996 alias
3997 Dump aliasing information for each function. The file name is
3998 made by appending .alias to the source file name.
3999
4000 ccp Dump each function after CCP. The file name is made by
4001 appending .ccp to the source file name.
4002
4003 storeccp
4004 Dump each function after STORE-CCP. The file name is made by
4005 appending .storeccp to the source file name.
4006
4007 pre Dump trees after partial redundancy elimination. The file name
4008 is made by appending .pre to the source file name.
4009
4010 fre Dump trees after full redundancy elimination. The file name is
4011 made by appending .fre to the source file name.
4012
4013 copyprop
4014 Dump trees after copy propagation. The file name is made by
4015 appending .copyprop to the source file name.
4016
4017 store_copyprop
4018 Dump trees after store copy-propagation. The file name is made
4019 by appending .store_copyprop to the source file name.
4020
4021 dce Dump each function after dead code elimination. The file name
4022 is made by appending .dce to the source file name.
4023
4024 mudflap
4025 Dump each function after adding mudflap instrumentation. The
4026 file name is made by appending .mudflap to the source file
4027 name.
4028
4029 sra Dump each function after performing scalar replacement of
4030 aggregates. The file name is made by appending .sra to the
4031 source file name.
4032
4033 sink
4034 Dump each function after performing code sinking. The file
4035 name is made by appending .sink to the source file name.
4036
4037 dom Dump each function after applying dominator tree optimizations.
4038 The file name is made by appending .dom to the source file
4039 name.
4040
4041 dse Dump each function after applying dead store elimination. The
4042 file name is made by appending .dse to the source file name.
4043
4044 phiopt
4045 Dump each function after optimizing PHI nodes into straightline
4046 code. The file name is made by appending .phiopt to the source
4047 file name.
4048
4049 forwprop
4050 Dump each function after forward propagating single use
4051 variables. The file name is made by appending .forwprop to the
4052 source file name.
4053
4054 copyrename
4055 Dump each function after applying the copy rename optimization.
4056 The file name is made by appending .copyrename to the source
4057 file name.
4058
4059 nrv Dump each function after applying the named return value
4060 optimization on generic trees. The file name is made by
4061 appending .nrv to the source file name.
4062
4063 vect
4064 Dump each function after applying vectorization of loops. The
4065 file name is made by appending .vect to the source file name.
4066
4067 vrp Dump each function after Value Range Propagation (VRP). The
4068 file name is made by appending .vrp to the source file name.
4069
4070 all Enable all the available tree dumps with the flags provided in
4071 this option.
4072
4073 -ftree-vectorizer-verbose=n
4074 This option controls the amount of debugging output the vectorizer
4075 prints. This information is written to standard error, unless
4076 -fdump-tree-all or -fdump-tree-vect is specified, in which case it
4077 is output to the usual dump listing file, .vect. For n=0 no
4078 diagnostic information is reported. If n=1 the vectorizer reports
4079 each loop that got vectorized, and the total number of loops that
4080 got vectorized. If n=2 the vectorizer also reports non-vectorized
4081 loops that passed the first analysis phase (vect_analyze_loop_form)
4082 - i.e. countable, inner-most, single-bb, single-entry/exit loops.
4083 This is the same verbosity level that -fdump-tree-vect-stats uses.
4084 Higher verbosity levels mean either more information dumped for
4085 each reported loop, or same amount of information reported for more
4086 loops: If n=3, alignment related information is added to the
4087 reports. If n=4, data-references related information (e.g. memory
4088 dependences, memory access-patterns) is added to the reports. If
4089 n=5, the vectorizer reports also non-vectorized inner-most loops
4090 that did not pass the first analysis phase (i.e., may not be
4091 countable, or may have complicated control-flow). If n=6, the
4092 vectorizer reports also non-vectorized nested loops. For n=7, all
4093 the information the vectorizer generates during its analysis and
4094 transformation is reported. This is the same verbosity level that
4095 -fdump-tree-vect-details uses.
4096
4097 -frandom-seed=string
4098 This option provides a seed that GCC uses when it would otherwise
4099 use random numbers. It is used to generate certain symbol names
4100 that have to be different in every compiled file. It is also used
4101 to place unique stamps in coverage data files and the object files
4102 that produce them. You can use the -frandom-seed option to produce
4103 reproducibly identical object files.
4104
4105 The string should be different for every file you compile.
4106
4107 -fsched-verbose=n
4108 On targets that use instruction scheduling, this option controls
4109 the amount of debugging output the scheduler prints. This
4110 information is written to standard error, unless -fdump-rtl-sched1
4111 or -fdump-rtl-sched2 is specified, in which case it is output to
4112 the usual dump listing file, .sched or .sched2 respectively.
4113 However for n greater than nine, the output is always printed to
4114 standard error.
4115
4116 For n greater than zero, -fsched-verbose outputs the same
4117 information as -fdump-rtl-sched1 and -fdump-rtl-sched2. For n
4118 greater than one, it also output basic block probabilities,
4119 detailed ready list information and unit/insn info. For n greater
4120 than two, it includes RTL at abort point, control-flow and regions
4121 info. And for n over four, -fsched-verbose also includes
4122 dependence info.
4123
4124 -save-temps
4125 Store the usual "temporary" intermediate files permanently; place
4126 them in the current directory and name them based on the source
4127 file. Thus, compiling foo.c with -c -save-temps would produce
4128 files foo.i and foo.s, as well as foo.o. This creates a
4129 preprocessed foo.i output file even though the compiler now
4130 normally uses an integrated preprocessor.
4131
4132 When used in combination with the -x command line option,
4133 -save-temps is sensible enough to avoid over writing an input
4134 source file with the same extension as an intermediate file. The
4135 corresponding intermediate file may be obtained by renaming the
4136 source file before using -save-temps.
4137
4138 -time[=file]
4139 Report the CPU time taken by each subprocess in the compilation
4140 sequence. For C source files, this is the compiler proper and
4141 assembler (plus the linker if linking is done).
4142
4143 Without the specification of an output file, the output looks like
4144 this:
4145
4146 # cc1 0.12 0.01
4147 # as 0.00 0.01
4148
4149 The first number on each line is the "user time", that is time
4150 spent executing the program itself. The second number is "system
4151 time", time spent executing operating system routines on behalf of
4152 the program. Both numbers are in seconds.
4153
4154 With the specification of an output file, the output is appended to
4155 the named file, and it looks like this:
4156
4157 0.12 0.01 cc1 <options>
4158 0.00 0.01 as <options>
4159
4160 The "user time" and the "system time" are moved before the program
4161 name, and the options passed to the program are displayed, so that
4162 one can later tell what file was being compiled, and with which
4163 options.
4164
4165 -fvar-tracking
4166 Run variable tracking pass. It computes where variables are stored
4167 at each position in code. Better debugging information is then
4168 generated (if the debugging information format supports this
4169 information).
4170
4171 It is enabled by default when compiling with optimization (-Os, -O,
4172 -O2, ...), debugging information (-g) and the debug info format
4173 supports it.
4174
4175 -fvar-tracking-assignments
4176 Annotate assignments to user variables early in the compilation and
4177 attempt to carry the annotations over throughout the compilation
4178 all the way to the end, in an attempt to improve debug information
4179 while optimizing.
4180
4181 It can be enabled even if var-tracking is disabled, in which case
4182 annotations will be created and maintained, but discarded at the
4183 end.
4184
4185 -fvar-tracking-assignments-toggle
4186 Toggle -fvar-tracking-assignments, in the same way that -gtoggle
4187 toggles -g.
4188
4189 -print-file-name=library
4190 Print the full absolute name of the library file library that would
4191 be used when linking---and don't do anything else. With this
4192 option, GCC does not compile or link anything; it just prints the
4193 file name.
4194
4195 -print-multi-directory
4196 Print the directory name corresponding to the multilib selected by
4197 any other switches present in the command line. This directory is
4198 supposed to exist in GCC_EXEC_PREFIX.
4199
4200 -print-multi-lib
4201 Print the mapping from multilib directory names to compiler
4202 switches that enable them. The directory name is separated from
4203 the switches by ;, and each switch starts with an @} instead of the
4204 @samp{-, without spaces between multiple switches. This is
4205 supposed to ease shell-processing.
4206
4207 -print-multi-os-directory
4208 Print the path to OS libraries for the selected multilib, relative
4209 to some lib subdirectory. If OS libraries are present in the lib
4210 subdirectory and no multilibs are used, this is usually just ., if
4211 OS libraries are present in libsuffix sibling directories this
4212 prints e.g. ../lib64, ../lib or ../lib32, or if OS libraries are
4213 present in lib/subdir subdirectories it prints e.g. amd64, sparcv9
4214 or ev6.
4215
4216 -print-prog-name=program
4217 Like -print-file-name, but searches for a program such as cpp.
4218
4219 -print-libgcc-file-name
4220 Same as -print-file-name=libgcc.a.
4221
4222 This is useful when you use -nostdlib or -nodefaultlibs but you do
4223 want to link with libgcc.a. You can do
4224
4225 gcc -nostdlib <files>... `gcc -print-libgcc-file-name`
4226
4227 -print-search-dirs
4228 Print the name of the configured installation directory and a list
4229 of program and library directories gcc will search---and don't do
4230 anything else.
4231
4232 This is useful when gcc prints the error message installation
4233 problem, cannot exec cpp0: No such file or directory. To resolve
4234 this you either need to put cpp0 and the other compiler components
4235 where gcc expects to find them, or you can set the environment
4236 variable GCC_EXEC_PREFIX to the directory where you installed them.
4237 Don't forget the trailing /.
4238
4239 -print-sysroot
4240 Print the target sysroot directory that will be used during
4241 compilation. This is the target sysroot specified either at
4242 configure time or using the --sysroot option, possibly with an
4243 extra suffix that depends on compilation options. If no target
4244 sysroot is specified, the option prints nothing.
4245
4246 -print-sysroot-headers-suffix
4247 Print the suffix added to the target sysroot when searching for
4248 headers, or give an error if the compiler is not configured with
4249 such a suffix---and don't do anything else.
4250
4251 -dumpmachine
4252 Print the compiler's target machine (for example,
4253 i686-pc-linux-gnu)---and don't do anything else.
4254
4255 -dumpversion
4256 Print the compiler version (for example, 3.0)---and don't do
4257 anything else.
4258
4259 -dumpspecs
4260 Print the compiler's built-in specs---and don't do anything else.
4261 (This is used when GCC itself is being built.)
4262
4263 -feliminate-unused-debug-types
4264 Normally, when producing DWARF2 output, GCC will emit debugging
4265 information for all types declared in a compilation unit,
4266 regardless of whether or not they are actually used in that
4267 compilation unit. Sometimes this is useful, such as if, in the
4268 debugger, you want to cast a value to a type that is not actually
4269 used in your program (but is declared). More often, however, this
4270 results in a significant amount of wasted space. With this option,
4271 GCC will avoid producing debug symbol output for types that are
4272 nowhere used in the source file being compiled.
4273
4274 Options That Control Optimization
4275 These options control various sorts of optimizations.
4276
4277 Without any optimization option, the compiler's goal is to reduce the
4278 cost of compilation and to make debugging produce the expected results.
4279 Statements are independent: if you stop the program with a breakpoint
4280 between statements, you can then assign a new value to any variable or
4281 change the program counter to any other statement in the function and
4282 get exactly the results you would expect from the source code.
4283
4284 Turning on optimization flags makes the compiler attempt to improve the
4285 performance and/or code size at the expense of compilation time and
4286 possibly the ability to debug the program.
4287
4288 The compiler performs optimization based on the knowledge it has of the
4289 program. Compiling multiple files at once to a single output file mode
4290 allows the compiler to use information gained from all of the files
4291 when compiling each of them.
4292
4293 Not all optimizations are controlled directly by a flag. Only
4294 optimizations that have a flag are listed.
4295
4296 -O
4297 -O1 Optimize. Optimizing compilation takes somewhat more time, and a
4298 lot more memory for a large function.
4299
4300 With -O, the compiler tries to reduce code size and execution time,
4301 without performing any optimizations that take a great deal of
4302 compilation time.
4303
4304 -O turns on the following optimization flags:
4305
4306 -fauto-inc-dec -fcprop-registers -fdce -fdefer-pop -fdelayed-branch
4307 -fdse -fguess-branch-probability -fif-conversion2 -fif-conversion
4308 -finline-small-functions -fipa-pure-const -fipa-reference
4309 -fmerge-constants -fsplit-wide-types -ftree-builtin-call-dce
4310 -ftree-ccp -ftree-ch -ftree-copyrename -ftree-dce
4311 -ftree-dominator-opts -ftree-dse -ftree-fre -ftree-sra -ftree-ter
4312 -funit-at-a-time
4313
4314 -O also turns on -fomit-frame-pointer on machines where doing so
4315 does not interfere with debugging.
4316
4317 -O2 Optimize even more. GCC performs nearly all supported
4318 optimizations that do not involve a space-speed tradeoff. As
4319 compared to -O, this option increases both compilation time and the
4320 performance of the generated code.
4321
4322 -O2 turns on all optimization flags specified by -O. It also turns
4323 on the following optimization flags: -fthread-jumps
4324 -falign-functions -falign-jumps -falign-loops -falign-labels
4325 -fcaller-saves -fcrossjumping -fcse-follow-jumps -fcse-skip-blocks
4326 -fdelete-null-pointer-checks -fexpensive-optimizations -fgcse
4327 -fgcse-lm -findirect-inlining -foptimize-sibling-calls -fpeephole2
4328 -fregmove -freorder-blocks -freorder-functions
4329 -frerun-cse-after-loop -fsched-interblock -fsched-spec
4330 -fschedule-insns -fschedule-insns2 -fstrict-aliasing
4331 -fstrict-overflow -ftree-switch-conversion -ftree-pre -ftree-vrp
4332
4333 Please note the warning under -fgcse about invoking -O2 on programs
4334 that use computed gotos.
4335
4336 -O3 Optimize yet more. -O3 turns on all optimizations specified by -O2
4337 and also turns on the -finline-functions, -funswitch-loops,
4338 -fpredictive-commoning, -fgcse-after-reload, -ftree-vectorize and
4339 -fipa-cp-clone options.
4340
4341 -O0 Reduce compilation time and make debugging produce the expected
4342 results. This is the default.
4343
4344 -Os Optimize for size. -Os enables all -O2 optimizations that do not
4345 typically increase code size. It also performs further
4346 optimizations designed to reduce code size.
4347
4348 -Os disables the following optimization flags: -falign-functions
4349 -falign-jumps -falign-loops -falign-labels -freorder-blocks
4350 -freorder-blocks-and-partition -fprefetch-loop-arrays
4351 -ftree-vect-loop-version
4352
4353 If you use multiple -O options, with or without level numbers, the
4354 last such option is the one that is effective.
4355
4356 Options of the form -fflag specify machine-independent flags. Most
4357 flags have both positive and negative forms; the negative form of -ffoo
4358 would be -fno-foo. In the table below, only one of the forms is
4359 listed---the one you typically will use. You can figure out the other
4360 form by either removing no- or adding it.
4361
4362 The following options control specific optimizations. They are either
4363 activated by -O options or are related to ones that are. You can use
4364 the following flags in the rare cases when "fine-tuning" of
4365 optimizations to be performed is desired.
4366
4367 -fno-default-inline
4368 Do not make member functions inline by default merely because they
4369 are defined inside the class scope (C++ only). Otherwise, when you
4370 specify -O, member functions defined inside class scope are
4371 compiled inline by default; i.e., you don't need to add inline in
4372 front of the member function name.
4373
4374 -fno-defer-pop
4375 Always pop the arguments to each function call as soon as that
4376 function returns. For machines which must pop arguments after a
4377 function call, the compiler normally lets arguments accumulate on
4378 the stack for several function calls and pops them all at once.
4379
4380 Disabled at levels -O, -O2, -O3, -Os.
4381
4382 -fforward-propagate
4383 Perform a forward propagation pass on RTL. The pass tries to
4384 combine two instructions and checks if the result can be
4385 simplified. If loop unrolling is active, two passes are performed
4386 and the second is scheduled after loop unrolling.
4387
4388 This option is enabled by default at optimization levels -O2, -O3,
4389 -Os.
4390
4391 -fomit-frame-pointer
4392 Don't keep the frame pointer in a register for functions that don't
4393 need one. This avoids the instructions to save, set up and restore
4394 frame pointers; it also makes an extra register available in many
4395 functions. It also makes debugging impossible on some machines.
4396
4397 On some machines, such as the VAX, this flag has no effect, because
4398 the standard calling sequence automatically handles the frame
4399 pointer and nothing is saved by pretending it doesn't exist. The
4400 machine-description macro "FRAME_POINTER_REQUIRED" controls whether
4401 a target machine supports this flag.
4402
4403 Enabled at levels -O, -O2, -O3, -Os.
4404
4405 -foptimize-sibling-calls
4406 Optimize sibling and tail recursive calls.
4407
4408 Enabled at levels -O2, -O3, -Os.
4409
4410 -fno-inline
4411 Don't pay attention to the "inline" keyword. Normally this option
4412 is used to keep the compiler from expanding any functions inline.
4413 Note that if you are not optimizing, no functions can be expanded
4414 inline.
4415
4416 -finline-small-functions
4417 Integrate functions into their callers when their body is smaller
4418 than expected function call code (so overall size of program gets
4419 smaller). The compiler heuristically decides which functions are
4420 simple enough to be worth integrating in this way.
4421
4422 Enabled at level -O2.
4423
4424 -findirect-inlining
4425 Inline also indirect calls that are discovered to be known at
4426 compile time thanks to previous inlining. This option has any
4427 effect only when inlining itself is turned on by the
4428 -finline-functions or -finline-small-functions options.
4429
4430 Enabled at level -O2.
4431
4432 -finline-functions
4433 Integrate all simple functions into their callers. The compiler
4434 heuristically decides which functions are simple enough to be worth
4435 integrating in this way.
4436
4437 If all calls to a given function are integrated, and the function
4438 is declared "static", then the function is normally not output as
4439 assembler code in its own right.
4440
4441 Enabled at level -O3.
4442
4443 -finline-functions-called-once
4444 Consider all "static" functions called once for inlining into their
4445 caller even if they are not marked "inline". If a call to a given
4446 function is integrated, then the function is not output as
4447 assembler code in its own right.
4448
4449 Enabled at levels -O1, -O2, -O3 and -Os.
4450
4451 -fearly-inlining
4452 Inline functions marked by "always_inline" and functions whose body
4453 seems smaller than the function call overhead early before doing
4454 -fprofile-generate instrumentation and real inlining pass. Doing
4455 so makes profiling significantly cheaper and usually inlining
4456 faster on programs having large chains of nested wrapper functions.
4457
4458 Enabled by default.
4459
4460 -finline-limit=n
4461 By default, GCC limits the size of functions that can be inlined.
4462 This flag allows coarse control of this limit. n is the size of
4463 functions that can be inlined in number of pseudo instructions.
4464
4465 Inlining is actually controlled by a number of parameters, which
4466 may be specified individually by using --param name=value. The
4467 -finline-limit=n option sets some of these parameters as follows:
4468
4469 max-inline-insns-single
4470 is set to n/2.
4471
4472 max-inline-insns-auto
4473 is set to n/2.
4474
4475 See below for a documentation of the individual parameters
4476 controlling inlining and for the defaults of these parameters.
4477
4478 Note: there may be no value to -finline-limit that results in
4479 default behavior.
4480
4481 Note: pseudo instruction represents, in this particular context, an
4482 abstract measurement of function's size. In no way does it
4483 represent a count of assembly instructions and as such its exact
4484 meaning might change from one release to an another.
4485
4486 -fkeep-inline-functions
4487 In C, emit "static" functions that are declared "inline" into the
4488 object file, even if the function has been inlined into all of its
4489 callers. This switch does not affect functions using the "extern
4490 inline" extension in GNU C89. In C++, emit any and all inline
4491 functions into the object file.
4492
4493 -fkeep-static-consts
4494 Emit variables declared "static const" when optimization isn't
4495 turned on, even if the variables aren't referenced.
4496
4497 GCC enables this option by default. If you want to force the
4498 compiler to check if the variable was referenced, regardless of
4499 whether or not optimization is turned on, use the
4500 -fno-keep-static-consts option.
4501
4502 -fmerge-constants
4503 Attempt to merge identical constants (string constants and floating
4504 point constants) across compilation units.
4505
4506 This option is the default for optimized compilation if the
4507 assembler and linker support it. Use -fno-merge-constants to
4508 inhibit this behavior.
4509
4510 Enabled at levels -O, -O2, -O3, -Os.
4511
4512 -fmerge-all-constants
4513 Attempt to merge identical constants and identical variables.
4514
4515 This option implies -fmerge-constants. In addition to
4516 -fmerge-constants this considers e.g. even constant initialized
4517 arrays or initialized constant variables with integral or floating
4518 point types. Languages like C or C++ require each variable,
4519 including multiple instances of the same variable in recursive
4520 calls, to have distinct locations, so using this option will result
4521 in non-conforming behavior.
4522
4523 -fmodulo-sched
4524 Perform swing modulo scheduling immediately before the first
4525 scheduling pass. This pass looks at innermost loops and reorders
4526 their instructions by overlapping different iterations.
4527
4528 -fmodulo-sched-allow-regmoves
4529 Perform more aggressive SMS based modulo scheduling with register
4530 moves allowed. By setting this flag certain anti-dependences edges
4531 will be deleted which will trigger the generation of reg-moves
4532 based on the life-range analysis. This option is effective only
4533 with -fmodulo-sched enabled.
4534
4535 -fno-branch-count-reg
4536 Do not use "decrement and branch" instructions on a count register,
4537 but instead generate a sequence of instructions that decrement a
4538 register, compare it against zero, then branch based upon the
4539 result. This option is only meaningful on architectures that
4540 support such instructions, which include x86, PowerPC, IA-64 and
4541 S/390.
4542
4543 The default is -fbranch-count-reg.
4544
4545 -fno-function-cse
4546 Do not put function addresses in registers; make each instruction
4547 that calls a constant function contain the function's address
4548 explicitly.
4549
4550 This option results in less efficient code, but some strange hacks
4551 that alter the assembler output may be confused by the
4552 optimizations performed when this option is not used.
4553
4554 The default is -ffunction-cse
4555
4556 -fno-zero-initialized-in-bss
4557 If the target supports a BSS section, GCC by default puts variables
4558 that are initialized to zero into BSS. This can save space in the
4559 resulting code.
4560
4561 This option turns off this behavior because some programs
4562 explicitly rely on variables going to the data section. E.g., so
4563 that the resulting executable can find the beginning of that
4564 section and/or make assumptions based on that.
4565
4566 The default is -fzero-initialized-in-bss.
4567
4568 -fmudflap -fmudflapth -fmudflapir
4569 For front-ends that support it (C and C++), instrument all risky
4570 pointer/array dereferencing operations, some standard library
4571 string/heap functions, and some other associated constructs with
4572 range/validity tests. Modules so instrumented should be immune to
4573 buffer overflows, invalid heap use, and some other classes of C/C++
4574 programming errors. The instrumentation relies on a separate
4575 runtime library (libmudflap), which will be linked into a program
4576 if -fmudflap is given at link time. Run-time behavior of the
4577 instrumented program is controlled by the MUDFLAP_OPTIONS
4578 environment variable. See "env MUDFLAP_OPTIONS=-help a.out" for
4579 its options.
4580
4581 Use -fmudflapth instead of -fmudflap to compile and to link if your
4582 program is multi-threaded. Use -fmudflapir, in addition to
4583 -fmudflap or -fmudflapth, if instrumentation should ignore pointer
4584 reads. This produces less instrumentation (and therefore faster
4585 execution) and still provides some protection against outright
4586 memory corrupting writes, but allows erroneously read data to
4587 propagate within a program.
4588
4589 -fthread-jumps
4590 Perform optimizations where we check to see if a jump branches to a
4591 location where another comparison subsumed by the first is found.
4592 If so, the first branch is redirected to either the destination of
4593 the second branch or a point immediately following it, depending on
4594 whether the condition is known to be true or false.
4595
4596 Enabled at levels -O2, -O3, -Os.
4597
4598 -fsplit-wide-types
4599 When using a type that occupies multiple registers, such as "long
4600 long" on a 32-bit system, split the registers apart and allocate
4601 them independently. This normally generates better code for those
4602 types, but may make debugging more difficult.
4603
4604 Enabled at levels -O, -O2, -O3, -Os.
4605
4606 -fcse-follow-jumps
4607 In common subexpression elimination (CSE), scan through jump
4608 instructions when the target of the jump is not reached by any
4609 other path. For example, when CSE encounters an "if" statement
4610 with an "else" clause, CSE will follow the jump when the condition
4611 tested is false.
4612
4613 Enabled at levels -O2, -O3, -Os.
4614
4615 -fcse-skip-blocks
4616 This is similar to -fcse-follow-jumps, but causes CSE to follow
4617 jumps which conditionally skip over blocks. When CSE encounters a
4618 simple "if" statement with no else clause, -fcse-skip-blocks causes
4619 CSE to follow the jump around the body of the "if".
4620
4621 Enabled at levels -O2, -O3, -Os.
4622
4623 -frerun-cse-after-loop
4624 Re-run common subexpression elimination after loop optimizations
4625 has been performed.
4626
4627 Enabled at levels -O2, -O3, -Os.
4628
4629 -fgcse
4630 Perform a global common subexpression elimination pass. This pass
4631 also performs global constant and copy propagation.
4632
4633 Note: When compiling a program using computed gotos, a GCC
4634 extension, you may get better runtime performance if you disable
4635 the global common subexpression elimination pass by adding
4636 -fno-gcse to the command line.
4637
4638 Enabled at levels -O2, -O3, -Os.
4639
4640 -fgcse-lm
4641 When -fgcse-lm is enabled, global common subexpression elimination
4642 will attempt to move loads which are only killed by stores into
4643 themselves. This allows a loop containing a load/store sequence to
4644 be changed to a load outside the loop, and a copy/store within the
4645 loop.
4646
4647 Enabled by default when gcse is enabled.
4648
4649 -fgcse-sm
4650 When -fgcse-sm is enabled, a store motion pass is run after global
4651 common subexpression elimination. This pass will attempt to move
4652 stores out of loops. When used in conjunction with -fgcse-lm,
4653 loops containing a load/store sequence can be changed to a load
4654 before the loop and a store after the loop.
4655
4656 Not enabled at any optimization level.
4657
4658 -fgcse-las
4659 When -fgcse-las is enabled, the global common subexpression
4660 elimination pass eliminates redundant loads that come after stores
4661 to the same memory location (both partial and full redundancies).
4662
4663 Not enabled at any optimization level.
4664
4665 -fgcse-after-reload
4666 When -fgcse-after-reload is enabled, a redundant load elimination
4667 pass is performed after reload. The purpose of this pass is to
4668 cleanup redundant spilling.
4669
4670 -funsafe-loop-optimizations
4671 If given, the loop optimizer will assume that loop indices do not
4672 overflow, and that the loops with nontrivial exit condition are not
4673 infinite. This enables a wider range of loop optimizations even if
4674 the loop optimizer itself cannot prove that these assumptions are
4675 valid. Using -Wunsafe-loop-optimizations, the compiler will warn
4676 you if it finds this kind of loop.
4677
4678 -fcrossjumping
4679 Perform cross-jumping transformation. This transformation unifies
4680 equivalent code and save code size. The resulting code may or may
4681 not perform better than without cross-jumping.
4682
4683 Enabled at levels -O2, -O3, -Os.
4684
4685 -fauto-inc-dec
4686 Combine increments or decrements of addresses with memory accesses.
4687 This pass is always skipped on architectures that do not have
4688 instructions to support this. Enabled by default at -O and higher
4689 on architectures that support this.
4690
4691 -fdce
4692 Perform dead code elimination (DCE) on RTL. Enabled by default at
4693 -O and higher.
4694
4695 -fdse
4696 Perform dead store elimination (DSE) on RTL. Enabled by default at
4697 -O and higher.
4698
4699 -fif-conversion
4700 Attempt to transform conditional jumps into branch-less
4701 equivalents. This include use of conditional moves, min, max, set
4702 flags and abs instructions, and some tricks doable by standard
4703 arithmetics. The use of conditional execution on chips where it is
4704 available is controlled by "if-conversion2".
4705
4706 Enabled at levels -O, -O2, -O3, -Os.
4707
4708 -fif-conversion2
4709 Use conditional execution (where available) to transform
4710 conditional jumps into branch-less equivalents.
4711
4712 Enabled at levels -O, -O2, -O3, -Os.
4713
4714 -fdelete-null-pointer-checks
4715 Use global dataflow analysis to identify and eliminate useless
4716 checks for null pointers. The compiler assumes that dereferencing
4717 a null pointer would have halted the program. If a pointer is
4718 checked after it has already been dereferenced, it cannot be null.
4719
4720 In some environments, this assumption is not true, and programs can
4721 safely dereference null pointers. Use
4722 -fno-delete-null-pointer-checks to disable this optimization for
4723 programs which depend on that behavior.
4724
4725 Enabled at levels -O2, -O3, -Os.
4726
4727 -fexpensive-optimizations
4728 Perform a number of minor optimizations that are relatively
4729 expensive.
4730
4731 Enabled at levels -O2, -O3, -Os.
4732
4733 -foptimize-register-move
4734 -fregmove
4735 Attempt to reassign register numbers in move instructions and as
4736 operands of other simple instructions in order to maximize the
4737 amount of register tying. This is especially helpful on machines
4738 with two-operand instructions.
4739
4740 Note -fregmove and -foptimize-register-move are the same
4741 optimization.
4742
4743 Enabled at levels -O2, -O3, -Os.
4744
4745 -fira-algorithm=algorithm
4746 Use specified coloring algorithm for the integrated register
4747 allocator. The algorithm argument should be "priority" or "CB".
4748 The first algorithm specifies Chow's priority coloring, the second
4749 one specifies Chaitin-Briggs coloring. The second algorithm can be
4750 unimplemented for some architectures. If it is implemented, it is
4751 the default because Chaitin-Briggs coloring as a rule generates a
4752 better code.
4753
4754 -fira-region=region
4755 Use specified regions for the integrated register allocator. The
4756 region argument should be one of "all", "mixed", or "one". The
4757 first value means using all loops as register allocation regions,
4758 the second value which is the default means using all loops except
4759 for loops with small register pressure as the regions, and third
4760 one means using all function as a single region. The first value
4761 can give best result for machines with small size and irregular
4762 register set, the third one results in faster and generates decent
4763 code and the smallest size code, and the default value usually give
4764 the best results in most cases and for most architectures.
4765
4766 -fira-coalesce
4767 Do optimistic register coalescing. This option might be profitable
4768 for architectures with big regular register files.
4769
4770 -fno-ira-share-save-slots
4771 Switch off sharing stack slots used for saving call used hard
4772 registers living through a call. Each hard register will get a
4773 separate stack slot and as a result function stack frame will be
4774 bigger.
4775
4776 -fno-ira-share-spill-slots
4777 Switch off sharing stack slots allocated for pseudo-registers.
4778 Each pseudo-register which did not get a hard register will get a
4779 separate stack slot and as a result function stack frame will be
4780 bigger.
4781
4782 -fira-verbose=n
4783 Set up how verbose dump file for the integrated register allocator
4784 will be. Default value is 5. If the value is greater or equal to
4785 10, the dump file will be stderr as if the value were n minus 10.
4786
4787 -fdelayed-branch
4788 If supported for the target machine, attempt to reorder
4789 instructions to exploit instruction slots available after delayed
4790 branch instructions.
4791
4792 Enabled at levels -O, -O2, -O3, -Os.
4793
4794 -fschedule-insns
4795 If supported for the target machine, attempt to reorder
4796 instructions to eliminate execution stalls due to required data
4797 being unavailable. This helps machines that have slow floating
4798 point or memory load instructions by allowing other instructions to
4799 be issued until the result of the load or floating point
4800 instruction is required.
4801
4802 Enabled at levels -O2, -O3, -Os.
4803
4804 -fschedule-insns2
4805 Similar to -fschedule-insns, but requests an additional pass of
4806 instruction scheduling after register allocation has been done.
4807 This is especially useful on machines with a relatively small
4808 number of registers and where memory load instructions take more
4809 than one cycle.
4810
4811 Enabled at levels -O2, -O3, -Os.
4812
4813 -fno-sched-interblock
4814 Don't schedule instructions across basic blocks. This is normally
4815 enabled by default when scheduling before register allocation, i.e.
4816 with -fschedule-insns or at -O2 or higher.
4817
4818 -fno-sched-spec
4819 Don't allow speculative motion of non-load instructions. This is
4820 normally enabled by default when scheduling before register
4821 allocation, i.e. with -fschedule-insns or at -O2 or higher.
4822
4823 -fsched-spec-load
4824 Allow speculative motion of some load instructions. This only
4825 makes sense when scheduling before register allocation, i.e. with
4826 -fschedule-insns or at -O2 or higher.
4827
4828 -fsched-spec-load-dangerous
4829 Allow speculative motion of more load instructions. This only
4830 makes sense when scheduling before register allocation, i.e. with
4831 -fschedule-insns or at -O2 or higher.
4832
4833 -fsched-stalled-insns
4834 -fsched-stalled-insns=n
4835 Define how many insns (if any) can be moved prematurely from the
4836 queue of stalled insns into the ready list, during the second
4837 scheduling pass. -fno-sched-stalled-insns means that no insns will
4838 be moved prematurely, -fsched-stalled-insns=0 means there is no
4839 limit on how many queued insns can be moved prematurely.
4840 -fsched-stalled-insns without a value is equivalent to
4841 -fsched-stalled-insns=1.
4842
4843 -fsched-stalled-insns-dep
4844 -fsched-stalled-insns-dep=n
4845 Define how many insn groups (cycles) will be examined for a
4846 dependency on a stalled insn that is candidate for premature
4847 removal from the queue of stalled insns. This has an effect only
4848 during the second scheduling pass, and only if
4849 -fsched-stalled-insns is used. -fno-sched-stalled-insns-dep is
4850 equivalent to -fsched-stalled-insns-dep=0.
4851 -fsched-stalled-insns-dep without a value is equivalent to
4852 -fsched-stalled-insns-dep=1.
4853
4854 -fsched2-use-superblocks
4855 When scheduling after register allocation, do use superblock
4856 scheduling algorithm. Superblock scheduling allows motion across
4857 basic block boundaries resulting on faster schedules. This option
4858 is experimental, as not all machine descriptions used by GCC model
4859 the CPU closely enough to avoid unreliable results from the
4860 algorithm.
4861
4862 This only makes sense when scheduling after register allocation,
4863 i.e. with -fschedule-insns2 or at -O2 or higher.
4864
4865 -fsched2-use-traces
4866 Use -fsched2-use-superblocks algorithm when scheduling after
4867 register allocation and additionally perform code duplication in
4868 order to increase the size of superblocks using tracer pass. See
4869 -ftracer for details on trace formation.
4870
4871 This mode should produce faster but significantly longer programs.
4872 Also without -fbranch-probabilities the traces constructed may not
4873 match the reality and hurt the performance. This only makes sense
4874 when scheduling after register allocation, i.e. with
4875 -fschedule-insns2 or at -O2 or higher.
4876
4877 -fsee
4878 Eliminate redundant sign extension instructions and move the non-
4879 redundant ones to optimal placement using lazy code motion (LCM).
4880
4881 -freschedule-modulo-scheduled-loops
4882 The modulo scheduling comes before the traditional scheduling, if a
4883 loop was modulo scheduled we may want to prevent the later
4884 scheduling passes from changing its schedule, we use this option to
4885 control that.
4886
4887 -fselective-scheduling
4888 Schedule instructions using selective scheduling algorithm.
4889 Selective scheduling runs instead of the first scheduler pass.
4890
4891 -fselective-scheduling2
4892 Schedule instructions using selective scheduling algorithm.
4893 Selective scheduling runs instead of the second scheduler pass.
4894
4895 -fsel-sched-pipelining
4896 Enable software pipelining of innermost loops during selective
4897 scheduling. This option has no effect until one of
4898 -fselective-scheduling or -fselective-scheduling2 is turned on.
4899
4900 -fsel-sched-pipelining-outer-loops
4901 When pipelining loops during selective scheduling, also pipeline
4902 outer loops. This option has no effect until
4903 -fsel-sched-pipelining is turned on.
4904
4905 -fcaller-saves
4906 Enable values to be allocated in registers that will be clobbered
4907 by function calls, by emitting extra instructions to save and
4908 restore the registers around such calls. Such allocation is done
4909 only when it seems to result in better code than would otherwise be
4910 produced.
4911
4912 This option is always enabled by default on certain machines,
4913 usually those which have no call-preserved registers to use
4914 instead.
4915
4916 Enabled at levels -O2, -O3, -Os.
4917
4918 -fconserve-stack
4919 Attempt to minimize stack usage. The compiler will attempt to use
4920 less stack space, even if that makes the program slower. This
4921 option implies setting the large-stack-frame parameter to 100 and
4922 the large-stack-frame-growth parameter to 400.
4923
4924 -ftree-reassoc
4925 Perform reassociation on trees. This flag is enabled by default at
4926 -O and higher.
4927
4928 -ftree-pre
4929 Perform partial redundancy elimination (PRE) on trees. This flag
4930 is enabled by default at -O2 and -O3.
4931
4932 -ftree-fre
4933 Perform full redundancy elimination (FRE) on trees. The difference
4934 between FRE and PRE is that FRE only considers expressions that are
4935 computed on all paths leading to the redundant computation. This
4936 analysis is faster than PRE, though it exposes fewer redundancies.
4937 This flag is enabled by default at -O and higher.
4938
4939 -ftree-copy-prop
4940 Perform copy propagation on trees. This pass eliminates
4941 unnecessary copy operations. This flag is enabled by default at -O
4942 and higher.
4943
4944 -fipa-pure-const
4945 Discover which functions are pure or constant. Enabled by default
4946 at -O and higher.
4947
4948 -fipa-reference
4949 Discover which static variables do not escape cannot escape the
4950 compilation unit. Enabled by default at -O and higher.
4951
4952 -fipa-struct-reorg
4953 Perform structure reorganization optimization, that change C-like
4954 structures layout in order to better utilize spatial locality.
4955 This transformation is effective for programs containing arrays of
4956 structures. Available in two compilation modes: profile-based
4957 (enabled with -fprofile-generate) or static (which uses built-in
4958 heuristics). Require -fipa-type-escape to provide the safety of
4959 this transformation. It works only in whole program mode, so it
4960 requires -fwhole-program and -combine to be enabled. Structures
4961 considered cold by this transformation are not affected (see
4962 --param struct-reorg-cold-struct-ratio=value).
4963
4964 With this flag, the program debug info reflects a new structure
4965 layout.
4966
4967 -fipa-pta
4968 Perform interprocedural pointer analysis. This option is
4969 experimental and does not affect generated code.
4970
4971 -fipa-cp
4972 Perform interprocedural constant propagation. This optimization
4973 analyzes the program to determine when values passed to functions
4974 are constants and then optimizes accordingly. This optimization
4975 can substantially increase performance if the application has
4976 constants passed to functions. This flag is enabled by default at
4977 -O2, -Os and -O3.
4978
4979 -fipa-cp-clone
4980 Perform function cloning to make interprocedural constant
4981 propagation stronger. When enabled, interprocedural constant
4982 propagation will perform function cloning when externally visible
4983 function can be called with constant arguments. Because this
4984 optimization can create multiple copies of functions, it may
4985 significantly increase code size (see --param
4986 ipcp-unit-growth=value). This flag is enabled by default at -O3.
4987
4988 -fipa-matrix-reorg
4989 Perform matrix flattening and transposing. Matrix flattening tries
4990 to replace a m-dimensional matrix with its equivalent n-dimensional
4991 matrix, where n < m. This reduces the level of indirection needed
4992 for accessing the elements of the matrix. The second optimization
4993 is matrix transposing that attempts to change the order of the
4994 matrix's dimensions in order to improve cache locality. Both
4995 optimizations need the -fwhole-program flag. Transposing is
4996 enabled only if profiling information is available.
4997
4998 -ftree-sink
4999 Perform forward store motion on trees. This flag is enabled by
5000 default at -O and higher.
5001
5002 -ftree-ccp
5003 Perform sparse conditional constant propagation (CCP) on trees.
5004 This pass only operates on local scalar variables and is enabled by
5005 default at -O and higher.
5006
5007 -ftree-switch-conversion
5008 Perform conversion of simple initializations in a switch to
5009 initializations from a scalar array. This flag is enabled by
5010 default at -O2 and higher.
5011
5012 -ftree-dce
5013 Perform dead code elimination (DCE) on trees. This flag is enabled
5014 by default at -O and higher.
5015
5016 -ftree-builtin-call-dce
5017 Perform conditional dead code elimination (DCE) for calls to
5018 builtin functions that may set "errno" but are otherwise side-
5019 effect free. This flag is enabled by default at -O2 and higher if
5020 -Os is not also specified.
5021
5022 -ftree-dominator-opts
5023 Perform a variety of simple scalar cleanups (constant/copy
5024 propagation, redundancy elimination, range propagation and
5025 expression simplification) based on a dominator tree traversal.
5026 This also performs jump threading (to reduce jumps to jumps). This
5027 flag is enabled by default at -O and higher.
5028
5029 -ftree-dse
5030 Perform dead store elimination (DSE) on trees. A dead store is a
5031 store into a memory location which will later be overwritten by
5032 another store without any intervening loads. In this case the
5033 earlier store can be deleted. This flag is enabled by default at
5034 -O and higher.
5035
5036 -ftree-ch
5037 Perform loop header copying on trees. This is beneficial since it
5038 increases effectiveness of code motion optimizations. It also
5039 saves one jump. This flag is enabled by default at -O and higher.
5040 It is not enabled for -Os, since it usually increases code size.
5041
5042 -ftree-loop-optimize
5043 Perform loop optimizations on trees. This flag is enabled by
5044 default at -O and higher.
5045
5046 -ftree-loop-linear
5047 Perform linear loop transformations on tree. This flag can improve
5048 cache performance and allow further loop optimizations to take
5049 place.
5050
5051 -floop-interchange
5052 Perform loop interchange transformations on loops. Interchanging
5053 two nested loops switches the inner and outer loops. For example,
5054 given a loop like:
5055
5056 DO J = 1, M
5057 DO I = 1, N
5058 A(J, I) = A(J, I) * C
5059 ENDDO
5060 ENDDO
5061
5062 loop interchange will transform the loop as if the user had
5063 written:
5064
5065 DO I = 1, N
5066 DO J = 1, M
5067 A(J, I) = A(J, I) * C
5068 ENDDO
5069 ENDDO
5070
5071 which can be beneficial when "N" is larger than the caches, because
5072 in Fortran, the elements of an array are stored in memory
5073 contiguously by column, and the original loop iterates over rows,
5074 potentially creating at each access a cache miss. This
5075 optimization applies to all the languages supported by GCC and is
5076 not limited to Fortran. To use this code transformation, GCC has
5077 to be configured with --with-ppl and --with-cloog to enable the
5078 Graphite loop transformation infrastructure.
5079
5080 -floop-strip-mine
5081 Perform loop strip mining transformations on loops. Strip mining
5082 splits a loop into two nested loops. The outer loop has strides
5083 equal to the strip size and the inner loop has strides of the
5084 original loop within a strip. For example, given a loop like:
5085
5086 DO I = 1, N
5087 A(I) = A(I) + C
5088 ENDDO
5089
5090 loop strip mining will transform the loop as if the user had
5091 written:
5092
5093 DO II = 1, N, 4
5094 DO I = II, min (II + 3, N)
5095 A(I) = A(I) + C
5096 ENDDO
5097 ENDDO
5098
5099 This optimization applies to all the languages supported by GCC and
5100 is not limited to Fortran. To use this code transformation, GCC
5101 has to be configured with --with-ppl and --with-cloog to enable the
5102 Graphite loop transformation infrastructure.
5103
5104 -floop-block
5105 Perform loop blocking transformations on loops. Blocking strip
5106 mines each loop in the loop nest such that the memory accesses of
5107 the element loops fit inside caches. For example, given a loop
5108 like:
5109
5110 DO I = 1, N
5111 DO J = 1, M
5112 A(J, I) = B(I) + C(J)
5113 ENDDO
5114 ENDDO
5115
5116 loop blocking will transform the loop as if the user had written:
5117
5118 DO II = 1, N, 64
5119 DO JJ = 1, M, 64
5120 DO I = II, min (II + 63, N)
5121 DO J = JJ, min (JJ + 63, M)
5122 A(J, I) = B(I) + C(J)
5123 ENDDO
5124 ENDDO
5125 ENDDO
5126 ENDDO
5127
5128 which can be beneficial when "M" is larger than the caches, because
5129 the innermost loop will iterate over a smaller amount of data that
5130 can be kept in the caches. This optimization applies to all the
5131 languages supported by GCC and is not limited to Fortran. To use
5132 this code transformation, GCC has to be configured with --with-ppl
5133 and --with-cloog to enable the Graphite loop transformation
5134 infrastructure.
5135
5136 -fcheck-data-deps
5137 Compare the results of several data dependence analyzers. This
5138 option is used for debugging the data dependence analyzers.
5139
5140 -ftree-loop-distribution
5141 Perform loop distribution. This flag can improve cache performance
5142 on big loop bodies and allow further loop optimizations, like
5143 parallelization or vectorization, to take place. For example, the
5144 loop
5145
5146 DO I = 1, N
5147 A(I) = B(I) + C
5148 D(I) = E(I) * F
5149 ENDDO
5150
5151 is transformed to
5152
5153 DO I = 1, N
5154 A(I) = B(I) + C
5155 ENDDO
5156 DO I = 1, N
5157 D(I) = E(I) * F
5158 ENDDO
5159
5160 -ftree-loop-im
5161 Perform loop invariant motion on trees. This pass moves only
5162 invariants that would be hard to handle at RTL level (function
5163 calls, operations that expand to nontrivial sequences of insns).
5164 With -funswitch-loops it also moves operands of conditions that are
5165 invariant out of the loop, so that we can use just trivial
5166 invariantness analysis in loop unswitching. The pass also includes
5167 store motion.
5168
5169 -ftree-loop-ivcanon
5170 Create a canonical counter for number of iterations in the loop for
5171 that determining number of iterations requires complicated
5172 analysis. Later optimizations then may determine the number
5173 easily. Useful especially in connection with unrolling.
5174
5175 -fivopts
5176 Perform induction variable optimizations (strength reduction,
5177 induction variable merging and induction variable elimination) on
5178 trees.
5179
5180 -ftree-parallelize-loops=n
5181 Parallelize loops, i.e., split their iteration space to run in n
5182 threads. This is only possible for loops whose iterations are
5183 independent and can be arbitrarily reordered. The optimization is
5184 only profitable on multiprocessor machines, for loops that are CPU-
5185 intensive, rather than constrained e.g. by memory bandwidth. This
5186 option implies -pthread, and thus is only supported on targets that
5187 have support for -pthread.
5188
5189 -ftree-sra
5190 Perform scalar replacement of aggregates. This pass replaces
5191 structure references with scalars to prevent committing structures
5192 to memory too early. This flag is enabled by default at -O and
5193 higher.
5194
5195 -ftree-copyrename
5196 Perform copy renaming on trees. This pass attempts to rename
5197 compiler temporaries to other variables at copy locations, usually
5198 resulting in variable names which more closely resemble the
5199 original variables. This flag is enabled by default at -O and
5200 higher.
5201
5202 -ftree-coalesce-inlined-vars
5203 Permit the copyrename pass to subject inlined variables to
5204 coalescing into other variables. This may harm debug information
5205 of such inlined variables, but it will keep variables of the main
5206 function apart from each other, such that they are more likely to
5207 contain the expected values in a debugging session.
5208
5209 -ftree-coalesce-vars
5210 Permit the copyrename pass to subject all variables to SSA
5211 coalescing. This may severely limit the ability to debug an
5212 optimized program compiled without -fvar-tracking-assignments. In
5213 the negated form, this flag prevents SSA coalescing of user
5214 variables, including inlined ones.
5215
5216 -ftree-ter
5217 Perform temporary expression replacement during the SSA->normal
5218 phase. Single use/single def temporaries are replaced at their use
5219 location with their defining expression. This results in non-
5220 GIMPLE code, but gives the expanders much more complex trees to
5221 work on resulting in better RTL generation. This is enabled by
5222 default at -O and higher.
5223
5224 -ftree-vectorize
5225 Perform loop vectorization on trees. This flag is enabled by
5226 default at -O3.
5227
5228 -ftree-vect-loop-version
5229 Perform loop versioning when doing loop vectorization on trees.
5230 When a loop appears to be vectorizable except that data alignment
5231 or data dependence cannot be determined at compile time then
5232 vectorized and non-vectorized versions of the loop are generated
5233 along with runtime checks for alignment or dependence to control
5234 which version is executed. This option is enabled by default
5235 except at level -Os where it is disabled.
5236
5237 -fvect-cost-model
5238 Enable cost model for vectorization.
5239
5240 -ftree-vrp
5241 Perform Value Range Propagation on trees. This is similar to the
5242 constant propagation pass, but instead of values, ranges of values
5243 are propagated. This allows the optimizers to remove unnecessary
5244 range checks like array bound checks and null pointer checks. This
5245 is enabled by default at -O2 and higher. Null pointer check
5246 elimination is only done if -fdelete-null-pointer-checks is
5247 enabled.
5248
5249 -ftracer
5250 Perform tail duplication to enlarge superblock size. This
5251 transformation simplifies the control flow of the function allowing
5252 other optimizations to do better job.
5253
5254 -funroll-loops
5255 Unroll loops whose number of iterations can be determined at
5256 compile time or upon entry to the loop. -funroll-loops implies
5257 -frerun-cse-after-loop. This option makes code larger, and may or
5258 may not make it run faster.
5259
5260 -funroll-all-loops
5261 Unroll all loops, even if their number of iterations is uncertain
5262 when the loop is entered. This usually makes programs run more
5263 slowly. -funroll-all-loops implies the same options as
5264 -funroll-loops,
5265
5266 -fsplit-ivs-in-unroller
5267 Enables expressing of values of induction variables in later
5268 iterations of the unrolled loop using the value in the first
5269 iteration. This breaks long dependency chains, thus improving
5270 efficiency of the scheduling passes.
5271
5272 Combination of -fweb and CSE is often sufficient to obtain the same
5273 effect. However in cases the loop body is more complicated than a
5274 single basic block, this is not reliable. It also does not work at
5275 all on some of the architectures due to restrictions in the CSE
5276 pass.
5277
5278 This optimization is enabled by default.
5279
5280 -fvariable-expansion-in-unroller
5281 With this option, the compiler will create multiple copies of some
5282 local variables when unrolling a loop which can result in superior
5283 code.
5284
5285 -fpredictive-commoning
5286 Perform predictive commoning optimization, i.e., reusing
5287 computations (especially memory loads and stores) performed in
5288 previous iterations of loops.
5289
5290 This option is enabled at level -O3.
5291
5292 -fprefetch-loop-arrays
5293 If supported by the target machine, generate instructions to
5294 prefetch memory to improve the performance of loops that access
5295 large arrays.
5296
5297 This option may generate better or worse code; results are highly
5298 dependent on the structure of loops within the source code.
5299
5300 Disabled at level -Os.
5301
5302 -fno-peephole
5303 -fno-peephole2
5304 Disable any machine-specific peephole optimizations. The
5305 difference between -fno-peephole and -fno-peephole2 is in how they
5306 are implemented in the compiler; some targets use one, some use the
5307 other, a few use both.
5308
5309 -fpeephole is enabled by default. -fpeephole2 enabled at levels
5310 -O2, -O3, -Os.
5311
5312 -fno-guess-branch-probability
5313 Do not guess branch probabilities using heuristics.
5314
5315 GCC will use heuristics to guess branch probabilities if they are
5316 not provided by profiling feedback (-fprofile-arcs). These
5317 heuristics are based on the control flow graph. If some branch
5318 probabilities are specified by __builtin_expect, then the
5319 heuristics will be used to guess branch probabilities for the rest
5320 of the control flow graph, taking the __builtin_expect info into
5321 account. The interactions between the heuristics and
5322 __builtin_expect can be complex, and in some cases, it may be
5323 useful to disable the heuristics so that the effects of
5324 __builtin_expect are easier to understand.
5325
5326 The default is -fguess-branch-probability at levels -O, -O2, -O3,
5327 -Os.
5328
5329 -freorder-blocks
5330 Reorder basic blocks in the compiled function in order to reduce
5331 number of taken branches and improve code locality.
5332
5333 Enabled at levels -O2, -O3.
5334
5335 -freorder-blocks-and-partition
5336 In addition to reordering basic blocks in the compiled function, in
5337 order to reduce number of taken branches, partitions hot and cold
5338 basic blocks into separate sections of the assembly and .o files,
5339 to improve paging and cache locality performance.
5340
5341 This optimization is automatically turned off in the presence of
5342 exception handling, for linkonce sections, for functions with a
5343 user-defined section attribute and on any architecture that does
5344 not support named sections.
5345
5346 -freorder-functions
5347 Reorder functions in the object file in order to improve code
5348 locality. This is implemented by using special subsections
5349 ".text.hot" for most frequently executed functions and
5350 ".text.unlikely" for unlikely executed functions. Reordering is
5351 done by the linker so object file format must support named
5352 sections and linker must place them in a reasonable way.
5353
5354 Also profile feedback must be available in to make this option
5355 effective. See -fprofile-arcs for details.
5356
5357 Enabled at levels -O2, -O3, -Os.
5358
5359 -fstrict-aliasing
5360 Allow the compiler to assume the strictest aliasing rules
5361 applicable to the language being compiled. For C (and C++), this
5362 activates optimizations based on the type of expressions. In
5363 particular, an object of one type is assumed never to reside at the
5364 same address as an object of a different type, unless the types are
5365 almost the same. For example, an "unsigned int" can alias an
5366 "int", but not a "void*" or a "double". A character type may alias
5367 any other type.
5368
5369 Pay special attention to code like this:
5370
5371 union a_union {
5372 int i;
5373 double d;
5374 };
5375
5376 int f() {
5377 union a_union t;
5378 t.d = 3.0;
5379 return t.i;
5380 }
5381
5382 The practice of reading from a different union member than the one
5383 most recently written to (called "type-punning") is common. Even
5384 with -fstrict-aliasing, type-punning is allowed, provided the
5385 memory is accessed through the union type. So, the code above will
5386 work as expected. However, this code might not:
5387
5388 int f() {
5389 union a_union t;
5390 int* ip;
5391 t.d = 3.0;
5392 ip = &t.i;
5393 return *ip;
5394 }
5395
5396 Similarly, access by taking the address, casting the resulting
5397 pointer and dereferencing the result has undefined behavior, even
5398 if the cast uses a union type, e.g.:
5399
5400 int f() {
5401 double d = 3.0;
5402 return ((union a_union *) &d)->i;
5403 }
5404
5405 The -fstrict-aliasing option is enabled at levels -O2, -O3, -Os.
5406
5407 -fstrict-overflow
5408 Allow the compiler to assume strict signed overflow rules,
5409 depending on the language being compiled. For C (and C++) this
5410 means that overflow when doing arithmetic with signed numbers is
5411 undefined, which means that the compiler may assume that it will
5412 not happen. This permits various optimizations. For example, the
5413 compiler will assume that an expression like "i + 10 > i" will
5414 always be true for signed "i". This assumption is only valid if
5415 signed overflow is undefined, as the expression is false if "i +
5416 10" overflows when using twos complement arithmetic. When this
5417 option is in effect any attempt to determine whether an operation
5418 on signed numbers will overflow must be written carefully to not
5419 actually involve overflow.
5420
5421 This option also allows the compiler to assume strict pointer
5422 semantics: given a pointer to an object, if adding an offset to
5423 that pointer does not produce a pointer to the same object, the
5424 addition is undefined. This permits the compiler to conclude that
5425 "p + u > p" is always true for a pointer "p" and unsigned integer
5426 "u". This assumption is only valid because pointer wraparound is
5427 undefined, as the expression is false if "p + u" overflows using
5428 twos complement arithmetic.
5429
5430 See also the -fwrapv option. Using -fwrapv means that integer
5431 signed overflow is fully defined: it wraps. When -fwrapv is used,
5432 there is no difference between -fstrict-overflow and
5433 -fno-strict-overflow for integers. With -fwrapv certain types of
5434 overflow are permitted. For example, if the compiler gets an
5435 overflow when doing arithmetic on constants, the overflowed value
5436 can still be used with -fwrapv, but not otherwise.
5437
5438 The -fstrict-overflow option is enabled at levels -O2, -O3, -Os.
5439
5440 -falign-functions
5441 -falign-functions=n
5442 Align the start of functions to the next power-of-two greater than
5443 n, skipping up to n bytes. For instance, -falign-functions=32
5444 aligns functions to the next 32-byte boundary, but
5445 -falign-functions=24 would align to the next 32-byte boundary only
5446 if this can be done by skipping 23 bytes or less.
5447
5448 -fno-align-functions and -falign-functions=1 are equivalent and
5449 mean that functions will not be aligned.
5450
5451 Some assemblers only support this flag when n is a power of two; in
5452 that case, it is rounded up.
5453
5454 If n is not specified or is zero, use a machine-dependent default.
5455
5456 Enabled at levels -O2, -O3.
5457
5458 -falign-labels
5459 -falign-labels=n
5460 Align all branch targets to a power-of-two boundary, skipping up to
5461 n bytes like -falign-functions. This option can easily make code
5462 slower, because it must insert dummy operations for when the branch
5463 target is reached in the usual flow of the code.
5464
5465 -fno-align-labels and -falign-labels=1 are equivalent and mean that
5466 labels will not be aligned.
5467
5468 If -falign-loops or -falign-jumps are applicable and are greater
5469 than this value, then their values are used instead.
5470
5471 If n is not specified or is zero, use a machine-dependent default
5472 which is very likely to be 1, meaning no alignment.
5473
5474 Enabled at levels -O2, -O3.
5475
5476 -falign-loops
5477 -falign-loops=n
5478 Align loops to a power-of-two boundary, skipping up to n bytes like
5479 -falign-functions. The hope is that the loop will be executed many
5480 times, which will make up for any execution of the dummy
5481 operations.
5482
5483 -fno-align-loops and -falign-loops=1 are equivalent and mean that
5484 loops will not be aligned.
5485
5486 If n is not specified or is zero, use a machine-dependent default.
5487
5488 Enabled at levels -O2, -O3.
5489
5490 -falign-jumps
5491 -falign-jumps=n
5492 Align branch targets to a power-of-two boundary, for branch targets
5493 where the targets can only be reached by jumping, skipping up to n
5494 bytes like -falign-functions. In this case, no dummy operations
5495 need be executed.
5496
5497 -fno-align-jumps and -falign-jumps=1 are equivalent and mean that
5498 loops will not be aligned.
5499
5500 If n is not specified or is zero, use a machine-dependent default.
5501
5502 Enabled at levels -O2, -O3.
5503
5504 -funit-at-a-time
5505 This option is left for compatibility reasons. -funit-at-a-time has
5506 no effect, while -fno-unit-at-a-time implies -fno-toplevel-reorder
5507 and -fno-section-anchors.
5508
5509 Enabled by default.
5510
5511 -fno-toplevel-reorder
5512 Do not reorder top-level functions, variables, and "asm"
5513 statements. Output them in the same order that they appear in the
5514 input file. When this option is used, unreferenced static
5515 variables will not be removed. This option is intended to support
5516 existing code which relies on a particular ordering. For new code,
5517 it is better to use attributes.
5518
5519 Enabled at level -O0. When disabled explicitly, it also imply
5520 -fno-section-anchors that is otherwise enabled at -O0 on some
5521 targets.
5522
5523 -fweb
5524 Constructs webs as commonly used for register allocation purposes
5525 and assign each web individual pseudo register. This allows the
5526 register allocation pass to operate on pseudos directly, but also
5527 strengthens several other optimization passes, such as CSE, loop
5528 optimizer and trivial dead code remover. It can, however, make
5529 debugging impossible, since variables will no longer stay in a
5530 "home register".
5531
5532 Enabled by default with -funroll-loops.
5533
5534 -fwhole-program
5535 Assume that the current compilation unit represents whole program
5536 being compiled. All public functions and variables with the
5537 exception of "main" and those merged by attribute
5538 "externally_visible" become static functions and in a affect gets
5539 more aggressively optimized by interprocedural optimizers. While
5540 this option is equivalent to proper use of "static" keyword for
5541 programs consisting of single file, in combination with option
5542 --combine this flag can be used to compile most of smaller scale C
5543 programs since the functions and variables become local for the
5544 whole combined compilation unit, not for the single source file
5545 itself.
5546
5547 This option is not supported for Fortran programs.
5548
5549 -fcprop-registers
5550 After register allocation and post-register allocation instruction
5551 splitting, we perform a copy-propagation pass to try to reduce
5552 scheduling dependencies and occasionally eliminate the copy.
5553
5554 Enabled at levels -O, -O2, -O3, -Os.
5555
5556 -fprofile-correction
5557 Profiles collected using an instrumented binary for multi-threaded
5558 programs may be inconsistent due to missed counter updates. When
5559 this option is specified, GCC will use heuristics to correct or
5560 smooth out such inconsistencies. By default, GCC will emit an error
5561 message when an inconsistent profile is detected.
5562
5563 -fprofile-dir=path
5564 Set the directory to search the profile data files in to path.
5565 This option affects only the profile data generated by
5566 -fprofile-generate, -ftest-coverage, -fprofile-arcs and used by
5567 -fprofile-use and -fbranch-probabilities and its related options.
5568 By default, GCC will use the current directory as path thus the
5569 profile data file will appear in the same directory as the object
5570 file.
5571
5572 -fprofile-generate
5573 -fprofile-generate=path
5574 Enable options usually used for instrumenting application to
5575 produce profile useful for later recompilation with profile
5576 feedback based optimization. You must use -fprofile-generate both
5577 when compiling and when linking your program.
5578
5579 The following options are enabled: "-fprofile-arcs",
5580 "-fprofile-values", "-fvpt".
5581
5582 If path is specified, GCC will look at the path to find the profile
5583 feedback data files. See -fprofile-dir.
5584
5585 -fprofile-use
5586 -fprofile-use=path
5587 Enable profile feedback directed optimizations, and optimizations
5588 generally profitable only with profile feedback available.
5589
5590 The following options are enabled: "-fbranch-probabilities",
5591 "-fvpt", "-funroll-loops", "-fpeel-loops", "-ftracer"
5592
5593 By default, GCC emits an error message if the feedback profiles do
5594 not match the source code. This error can be turned into a warning
5595 by using -Wcoverage-mismatch. Note this may result in poorly
5596 optimized code.
5597
5598 If path is specified, GCC will look at the path to find the profile
5599 feedback data files. See -fprofile-dir.
5600
5601 The following options control compiler behavior regarding floating
5602 point arithmetic. These options trade off between speed and
5603 correctness. All must be specifically enabled.
5604
5605 -ffloat-store
5606 Do not store floating point variables in registers, and inhibit
5607 other options that might change whether a floating point value is
5608 taken from a register or memory.
5609
5610 This option prevents undesirable excess precision on machines such
5611 as the 68000 where the floating registers (of the 68881) keep more
5612 precision than a "double" is supposed to have. Similarly for the
5613 x86 architecture. For most programs, the excess precision does
5614 only good, but a few programs rely on the precise definition of
5615 IEEE floating point. Use -ffloat-store for such programs, after
5616 modifying them to store all pertinent intermediate computations
5617 into variables.
5618
5619 -ffast-math
5620 Sets -fno-math-errno, -funsafe-math-optimizations,
5621 -ffinite-math-only, -fno-rounding-math, -fno-signaling-nans and
5622 -fcx-limited-range.
5623
5624 This option causes the preprocessor macro "__FAST_MATH__" to be
5625 defined.
5626
5627 This option is not turned on by any -O option since it can result
5628 in incorrect output for programs which depend on an exact
5629 implementation of IEEE or ISO rules/specifications for math
5630 functions. It may, however, yield faster code for programs that do
5631 not require the guarantees of these specifications.
5632
5633 -fno-math-errno
5634 Do not set ERRNO after calling math functions that are executed
5635 with a single instruction, e.g., sqrt. A program that relies on
5636 IEEE exceptions for math error handling may want to use this flag
5637 for speed while maintaining IEEE arithmetic compatibility.
5638
5639 This option is not turned on by any -O option since it can result
5640 in incorrect output for programs which depend on an exact
5641 implementation of IEEE or ISO rules/specifications for math
5642 functions. It may, however, yield faster code for programs that do
5643 not require the guarantees of these specifications.
5644
5645 The default is -fmath-errno.
5646
5647 On Darwin systems, the math library never sets "errno". There is
5648 therefore no reason for the compiler to consider the possibility
5649 that it might, and -fno-math-errno is the default.
5650
5651 -funsafe-math-optimizations
5652 Allow optimizations for floating-point arithmetic that (a) assume
5653 that arguments and results are valid and (b) may violate IEEE or
5654 ANSI standards. When used at link-time, it may include libraries
5655 or startup files that change the default FPU control word or other
5656 similar optimizations.
5657
5658 This option is not turned on by any -O option since it can result
5659 in incorrect output for programs which depend on an exact
5660 implementation of IEEE or ISO rules/specifications for math
5661 functions. It may, however, yield faster code for programs that do
5662 not require the guarantees of these specifications. Enables
5663 -fno-signed-zeros, -fno-trapping-math, -fassociative-math and
5664 -freciprocal-math.
5665
5666 The default is -fno-unsafe-math-optimizations.
5667
5668 -fassociative-math
5669 Allow re-association of operands in series of floating-point
5670 operations. This violates the ISO C and C++ language standard by
5671 possibly changing computation result. NOTE: re-ordering may change
5672 the sign of zero as well as ignore NaNs and inhibit or create
5673 underflow or overflow (and thus cannot be used on a code which
5674 relies on rounding behavior like "(x + 2**52) - 2**52)". May also
5675 reorder floating-point comparisons and thus may not be used when
5676 ordered comparisons are required. This option requires that both
5677 -fno-signed-zeros and -fno-trapping-math be in effect. Moreover,
5678 it doesn't make much sense with -frounding-math.
5679
5680 The default is -fno-associative-math.
5681
5682 -freciprocal-math
5683 Allow the reciprocal of a value to be used instead of dividing by
5684 the value if this enables optimizations. For example "x / y" can
5685 be replaced with "x * (1/y)" which is useful if "(1/y)" is subject
5686 to common subexpression elimination. Note that this loses
5687 precision and increases the number of flops operating on the value.
5688
5689 The default is -fno-reciprocal-math.
5690
5691 -ffinite-math-only
5692 Allow optimizations for floating-point arithmetic that assume that
5693 arguments and results are not NaNs or +-Infs.
5694
5695 This option is not turned on by any -O option since it can result
5696 in incorrect output for programs which depend on an exact
5697 implementation of IEEE or ISO rules/specifications for math
5698 functions. It may, however, yield faster code for programs that do
5699 not require the guarantees of these specifications.
5700
5701 The default is -fno-finite-math-only.
5702
5703 -fno-signed-zeros
5704 Allow optimizations for floating point arithmetic that ignore the
5705 signedness of zero. IEEE arithmetic specifies the behavior of
5706 distinct +0.0 and -0.0 values, which then prohibits simplification
5707 of expressions such as x+0.0 or 0.0*x (even with
5708 -ffinite-math-only). This option implies that the sign of a zero
5709 result isn't significant.
5710
5711 The default is -fsigned-zeros.
5712
5713 -fno-trapping-math
5714 Compile code assuming that floating-point operations cannot
5715 generate user-visible traps. These traps include division by zero,
5716 overflow, underflow, inexact result and invalid operation. This
5717 option requires that -fno-signaling-nans be in effect. Setting
5718 this option may allow faster code if one relies on "non-stop" IEEE
5719 arithmetic, for example.
5720
5721 This option should never be turned on by any -O option since it can
5722 result in incorrect output for programs which depend on an exact
5723 implementation of IEEE or ISO rules/specifications for math
5724 functions.
5725
5726 The default is -ftrapping-math.
5727
5728 -frounding-math
5729 Disable transformations and optimizations that assume default
5730 floating point rounding behavior. This is round-to-zero for all
5731 floating point to integer conversions, and round-to-nearest for all
5732 other arithmetic truncations. This option should be specified for
5733 programs that change the FP rounding mode dynamically, or that may
5734 be executed with a non-default rounding mode. This option disables
5735 constant folding of floating point expressions at compile-time
5736 (which may be affected by rounding mode) and arithmetic
5737 transformations that are unsafe in the presence of sign-dependent
5738 rounding modes.
5739
5740 The default is -fno-rounding-math.
5741
5742 This option is experimental and does not currently guarantee to
5743 disable all GCC optimizations that are affected by rounding mode.
5744 Future versions of GCC may provide finer control of this setting
5745 using C99's "FENV_ACCESS" pragma. This command line option will be
5746 used to specify the default state for "FENV_ACCESS".
5747
5748 -frtl-abstract-sequences
5749 It is a size optimization method. This option is to find identical
5750 sequences of code, which can be turned into pseudo-procedures and
5751 then replace all occurrences with calls to the newly created
5752 subroutine. It is kind of an opposite of -finline-functions. This
5753 optimization runs at RTL level.
5754
5755 -fsignaling-nans
5756 Compile code assuming that IEEE signaling NaNs may generate user-
5757 visible traps during floating-point operations. Setting this
5758 option disables optimizations that may change the number of
5759 exceptions visible with signaling NaNs. This option implies
5760 -ftrapping-math.
5761
5762 This option causes the preprocessor macro "__SUPPORT_SNAN__" to be
5763 defined.
5764
5765 The default is -fno-signaling-nans.
5766
5767 This option is experimental and does not currently guarantee to
5768 disable all GCC optimizations that affect signaling NaN behavior.
5769
5770 -fsingle-precision-constant
5771 Treat floating point constant as single precision constant instead
5772 of implicitly converting it to double precision constant.
5773
5774 -fcx-limited-range
5775 When enabled, this option states that a range reduction step is not
5776 needed when performing complex division. Also, there is no
5777 checking whether the result of a complex multiplication or division
5778 is "NaN + I*NaN", with an attempt to rescue the situation in that
5779 case. The default is -fno-cx-limited-range, but is enabled by
5780 -ffast-math.
5781
5782 This option controls the default setting of the ISO C99
5783 "CX_LIMITED_RANGE" pragma. Nevertheless, the option applies to all
5784 languages.
5785
5786 -fcx-fortran-rules
5787 Complex multiplication and division follow Fortran rules. Range
5788 reduction is done as part of complex division, but there is no
5789 checking whether the result of a complex multiplication or division
5790 is "NaN + I*NaN", with an attempt to rescue the situation in that
5791 case.
5792
5793 The default is -fno-cx-fortran-rules.
5794
5795 The following options control optimizations that may improve
5796 performance, but are not enabled by any -O options. This section
5797 includes experimental options that may produce broken code.
5798
5799 -fbranch-probabilities
5800 After running a program compiled with -fprofile-arcs, you can
5801 compile it a second time using -fbranch-probabilities, to improve
5802 optimizations based on the number of times each branch was taken.
5803 When the program compiled with -fprofile-arcs exits it saves arc
5804 execution counts to a file called sourcename.gcda for each source
5805 file. The information in this data file is very dependent on the
5806 structure of the generated code, so you must use the same source
5807 code and the same optimization options for both compilations.
5808
5809 With -fbranch-probabilities, GCC puts a REG_BR_PROB note on each
5810 JUMP_INSN and CALL_INSN. These can be used to improve
5811 optimization. Currently, they are only used in one place: in
5812 reorg.c, instead of guessing which path a branch is mostly to take,
5813 the REG_BR_PROB values are used to exactly determine which path is
5814 taken more often.
5815
5816 -fprofile-values
5817 If combined with -fprofile-arcs, it adds code so that some data
5818 about values of expressions in the program is gathered.
5819
5820 With -fbranch-probabilities, it reads back the data gathered from
5821 profiling values of expressions and adds REG_VALUE_PROFILE notes to
5822 instructions for their later usage in optimizations.
5823
5824 Enabled with -fprofile-generate and -fprofile-use.
5825
5826 -fvpt
5827 If combined with -fprofile-arcs, it instructs the compiler to add a
5828 code to gather information about values of expressions.
5829
5830 With -fbranch-probabilities, it reads back the data gathered and
5831 actually performs the optimizations based on them. Currently the
5832 optimizations include specialization of division operation using
5833 the knowledge about the value of the denominator.
5834
5835 -frename-registers
5836 Attempt to avoid false dependencies in scheduled code by making use
5837 of registers left over after register allocation. This
5838 optimization will most benefit processors with lots of registers.
5839 Depending on the debug information format adopted by the target,
5840 however, it can make debugging impossible, since variables will no
5841 longer stay in a "home register".
5842
5843 Enabled by default with -funroll-loops.
5844
5845 -ftracer
5846 Perform tail duplication to enlarge superblock size. This
5847 transformation simplifies the control flow of the function allowing
5848 other optimizations to do better job.
5849
5850 Enabled with -fprofile-use.
5851
5852 -funroll-loops
5853 Unroll loops whose number of iterations can be determined at
5854 compile time or upon entry to the loop. -funroll-loops implies
5855 -frerun-cse-after-loop, -fweb and -frename-registers. It also
5856 turns on complete loop peeling (i.e. complete removal of loops with
5857 small constant number of iterations). This option makes code
5858 larger, and may or may not make it run faster.
5859
5860 Enabled with -fprofile-use.
5861
5862 -funroll-all-loops
5863 Unroll all loops, even if their number of iterations is uncertain
5864 when the loop is entered. This usually makes programs run more
5865 slowly. -funroll-all-loops implies the same options as
5866 -funroll-loops.
5867
5868 -fpeel-loops
5869 Peels the loops for that there is enough information that they do
5870 not roll much (from profile feedback). It also turns on complete
5871 loop peeling (i.e. complete removal of loops with small constant
5872 number of iterations).
5873
5874 Enabled with -fprofile-use.
5875
5876 -fmove-loop-invariants
5877 Enables the loop invariant motion pass in the RTL loop optimizer.
5878 Enabled at level -O1
5879
5880 -funswitch-loops
5881 Move branches with loop invariant conditions out of the loop, with
5882 duplicates of the loop on both branches (modified according to
5883 result of the condition).
5884
5885 -ffunction-sections
5886 -fdata-sections
5887 Place each function or data item into its own section in the output
5888 file if the target supports arbitrary sections. The name of the
5889 function or the name of the data item determines the section's name
5890 in the output file.
5891
5892 Use these options on systems where the linker can perform
5893 optimizations to improve locality of reference in the instruction
5894 space. Most systems using the ELF object format and SPARC
5895 processors running Solaris 2 have linkers with such optimizations.
5896 AIX may have these optimizations in the future.
5897
5898 Only use these options when there are significant benefits from
5899 doing so. When you specify these options, the assembler and linker
5900 will create larger object and executable files and will also be
5901 slower. You will not be able to use "gprof" on all systems if you
5902 specify this option and you may have problems with debugging if you
5903 specify both this option and -g.
5904
5905 -fbranch-target-load-optimize
5906 Perform branch target register load optimization before prologue /
5907 epilogue threading. The use of target registers can typically be
5908 exposed only during reload, thus hoisting loads out of loops and
5909 doing inter-block scheduling needs a separate optimization pass.
5910
5911 -fbranch-target-load-optimize2
5912 Perform branch target register load optimization after prologue /
5913 epilogue threading.
5914
5915 -fbtr-bb-exclusive
5916 When performing branch target register load optimization, don't
5917 reuse branch target registers in within any basic block.
5918
5919 -fstack-protector
5920 Emit extra code to check for buffer overflows, such as stack
5921 smashing attacks. This is done by adding a guard variable to
5922 functions with vulnerable objects. This includes functions that
5923 call alloca, and functions with buffers larger than 8 bytes. The
5924 guards are initialized when a function is entered and then checked
5925 when the function exits. If a guard check fails, an error message
5926 is printed and the program exits.
5927
5928 -fstack-protector-all
5929 Like -fstack-protector except that all functions are protected.
5930
5931 -fsection-anchors
5932 Try to reduce the number of symbolic address calculations by using
5933 shared "anchor" symbols to address nearby objects. This
5934 transformation can help to reduce the number of GOT entries and GOT
5935 accesses on some targets.
5936
5937 For example, the implementation of the following function "foo":
5938
5939 static int a, b, c;
5940 int foo (void) { return a + b + c; }
5941
5942 would usually calculate the addresses of all three variables, but
5943 if you compile it with -fsection-anchors, it will access the
5944 variables from a common anchor point instead. The effect is
5945 similar to the following pseudocode (which isn't valid C):
5946
5947 int foo (void)
5948 {
5949 register int *xr = &x;
5950 return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
5951 }
5952
5953 Not all targets support this option.
5954
5955 --param name=value
5956 In some places, GCC uses various constants to control the amount of
5957 optimization that is done. For example, GCC will not inline
5958 functions that contain more that a certain number of instructions.
5959 You can control some of these constants on the command-line using
5960 the --param option.
5961
5962 The names of specific parameters, and the meaning of the values,
5963 are tied to the internals of the compiler, and are subject to
5964 change without notice in future releases.
5965
5966 In each case, the value is an integer. The allowable choices for
5967 name are given in the following table:
5968
5969 sra-max-structure-size
5970 The maximum structure size, in bytes, at which the scalar
5971 replacement of aggregates (SRA) optimization will perform block
5972 copies. The default value, 0, implies that GCC will select the
5973 most appropriate size itself.
5974
5975 sra-field-structure-ratio
5976 The threshold ratio (as a percentage) between instantiated
5977 fields and the complete structure size. We say that if the
5978 ratio of the number of bytes in instantiated fields to the
5979 number of bytes in the complete structure exceeds this
5980 parameter, then block copies are not used. The default is 75.
5981
5982 struct-reorg-cold-struct-ratio
5983 The threshold ratio (as a percentage) between a structure
5984 frequency and the frequency of the hottest structure in the
5985 program. This parameter is used by struct-reorg optimization
5986 enabled by -fipa-struct-reorg. We say that if the ratio of a
5987 structure frequency, calculated by profiling, to the hottest
5988 structure frequency in the program is less than this parameter,
5989 then structure reorganization is not applied to this structure.
5990 The default is 10.
5991
5992 predictable-branch-cost-outcome
5993 When branch is predicted to be taken with probability lower
5994 than this threshold (in percent), then it is considered well
5995 predictable. The default is 10.
5996
5997 max-crossjump-edges
5998 The maximum number of incoming edges to consider for
5999 crossjumping. The algorithm used by -fcrossjumping is O(N^2)
6000 in the number of edges incoming to each block. Increasing
6001 values mean more aggressive optimization, making the compile
6002 time increase with probably small improvement in executable
6003 size.
6004
6005 min-crossjump-insns
6006 The minimum number of instructions which must be matched at the
6007 end of two blocks before crossjumping will be performed on
6008 them. This value is ignored in the case where all instructions
6009 in the block being crossjumped from are matched. The default
6010 value is 5.
6011
6012 max-grow-copy-bb-insns
6013 The maximum code size expansion factor when copying basic
6014 blocks instead of jumping. The expansion is relative to a jump
6015 instruction. The default value is 8.
6016
6017 max-goto-duplication-insns
6018 The maximum number of instructions to duplicate to a block that
6019 jumps to a computed goto. To avoid O(N^2) behavior in a number
6020 of passes, GCC factors computed gotos early in the compilation
6021 process, and unfactors them as late as possible. Only computed
6022 jumps at the end of a basic blocks with no more than max-goto-
6023 duplication-insns are unfactored. The default value is 8.
6024
6025 max-delay-slot-insn-search
6026 The maximum number of instructions to consider when looking for
6027 an instruction to fill a delay slot. If more than this
6028 arbitrary number of instructions is searched, the time savings
6029 from filling the delay slot will be minimal so stop searching.
6030 Increasing values mean more aggressive optimization, making the
6031 compile time increase with probably small improvement in
6032 executable run time.
6033
6034 max-delay-slot-live-search
6035 When trying to fill delay slots, the maximum number of
6036 instructions to consider when searching for a block with valid
6037 live register information. Increasing this arbitrarily chosen
6038 value means more aggressive optimization, increasing the
6039 compile time. This parameter should be removed when the delay
6040 slot code is rewritten to maintain the control-flow graph.
6041
6042 max-gcse-memory
6043 The approximate maximum amount of memory that will be allocated
6044 in order to perform the global common subexpression elimination
6045 optimization. If more memory than specified is required, the
6046 optimization will not be done.
6047
6048 max-gcse-passes
6049 The maximum number of passes of GCSE to run. The default is 1.
6050
6051 max-pending-list-length
6052 The maximum number of pending dependencies scheduling will
6053 allow before flushing the current state and starting over.
6054 Large functions with few branches or calls can create
6055 excessively large lists which needlessly consume memory and
6056 resources.
6057
6058 max-inline-insns-single
6059 Several parameters control the tree inliner used in gcc. This
6060 number sets the maximum number of instructions (counted in
6061 GCC's internal representation) in a single function that the
6062 tree inliner will consider for inlining. This only affects
6063 functions declared inline and methods implemented in a class
6064 declaration (C++). The default value is 450.
6065
6066 max-inline-insns-auto
6067 When you use -finline-functions (included in -O3), a lot of
6068 functions that would otherwise not be considered for inlining
6069 by the compiler will be investigated. To those functions, a
6070 different (more restrictive) limit compared to functions
6071 declared inline can be applied. The default value is 90.
6072
6073 large-function-insns
6074 The limit specifying really large functions. For functions
6075 larger than this limit after inlining, inlining is constrained
6076 by --param large-function-growth. This parameter is useful
6077 primarily to avoid extreme compilation time caused by non-
6078 linear algorithms used by the backend. The default value is
6079 2700.
6080
6081 large-function-growth
6082 Specifies maximal growth of large function caused by inlining
6083 in percents. The default value is 100 which limits large
6084 function growth to 2.0 times the original size.
6085
6086 large-unit-insns
6087 The limit specifying large translation unit. Growth caused by
6088 inlining of units larger than this limit is limited by --param
6089 inline-unit-growth. For small units this might be too tight
6090 (consider unit consisting of function A that is inline and B
6091 that just calls A three time. If B is small relative to A, the
6092 growth of unit is 300\% and yet such inlining is very sane.
6093 For very large units consisting of small inlineable functions
6094 however the overall unit growth limit is needed to avoid
6095 exponential explosion of code size. Thus for smaller units,
6096 the size is increased to --param large-unit-insns before
6097 applying --param inline-unit-growth. The default is 10000
6098
6099 inline-unit-growth
6100 Specifies maximal overall growth of the compilation unit caused
6101 by inlining. The default value is 30 which limits unit growth
6102 to 1.3 times the original size.
6103
6104 ipcp-unit-growth
6105 Specifies maximal overall growth of the compilation unit caused
6106 by interprocedural constant propagation. The default value is
6107 10 which limits unit growth to 1.1 times the original size.
6108
6109 large-stack-frame
6110 The limit specifying large stack frames. While inlining the
6111 algorithm is trying to not grow past this limit too much.
6112 Default value is 256 bytes.
6113
6114 large-stack-frame-growth
6115 Specifies maximal growth of large stack frames caused by
6116 inlining in percents. The default value is 1000 which limits
6117 large stack frame growth to 11 times the original size.
6118
6119 max-inline-insns-recursive
6120 max-inline-insns-recursive-auto
6121 Specifies maximum number of instructions out-of-line copy of
6122 self recursive inline function can grow into by performing
6123 recursive inlining.
6124
6125 For functions declared inline --param max-inline-insns-
6126 recursive is taken into account. For function not declared
6127 inline, recursive inlining happens only when -finline-functions
6128 (included in -O3) is enabled and --param max-inline-insns-
6129 recursive-auto is used. The default value is 450.
6130
6131 max-inline-recursive-depth
6132 max-inline-recursive-depth-auto
6133 Specifies maximum recursion depth used by the recursive
6134 inlining.
6135
6136 For functions declared inline --param max-inline-recursive-
6137 depth is taken into account. For function not declared inline,
6138 recursive inlining happens only when -finline-functions
6139 (included in -O3) is enabled and --param max-inline-recursive-
6140 depth-auto is used. The default value is 8.
6141
6142 min-inline-recursive-probability
6143 Recursive inlining is profitable only for function having deep
6144 recursion in average and can hurt for function having little
6145 recursion depth by increasing the prologue size or complexity
6146 of function body to other optimizers.
6147
6148 When profile feedback is available (see -fprofile-generate) the
6149 actual recursion depth can be guessed from probability that
6150 function will recurse via given call expression. This
6151 parameter limits inlining only to call expression whose
6152 probability exceeds given threshold (in percents). The default
6153 value is 10.
6154
6155 inline-call-cost
6156 Specify cost of call instruction relative to simple arithmetics
6157 operations (having cost of 1). Increasing this cost
6158 disqualifies inlining of non-leaf functions and at the same
6159 time increases size of leaf function that is believed to reduce
6160 function size by being inlined. In effect it increases amount
6161 of inlining for code having large abstraction penalty (many
6162 functions that just pass the arguments to other functions) and
6163 decrease inlining for code with low abstraction penalty. The
6164 default value is 12.
6165
6166 min-vect-loop-bound
6167 The minimum number of iterations under which a loop will not
6168 get vectorized when -ftree-vectorize is used. The number of
6169 iterations after vectorization needs to be greater than the
6170 value specified by this option to allow vectorization. The
6171 default value is 0.
6172
6173 max-unrolled-insns
6174 The maximum number of instructions that a loop should have if
6175 that loop is unrolled, and if the loop is unrolled, it
6176 determines how many times the loop code is unrolled.
6177
6178 max-average-unrolled-insns
6179 The maximum number of instructions biased by probabilities of
6180 their execution that a loop should have if that loop is
6181 unrolled, and if the loop is unrolled, it determines how many
6182 times the loop code is unrolled.
6183
6184 max-unroll-times
6185 The maximum number of unrollings of a single loop.
6186
6187 max-peeled-insns
6188 The maximum number of instructions that a loop should have if
6189 that loop is peeled, and if the loop is peeled, it determines
6190 how many times the loop code is peeled.
6191
6192 max-peel-times
6193 The maximum number of peelings of a single loop.
6194
6195 max-completely-peeled-insns
6196 The maximum number of insns of a completely peeled loop.
6197
6198 max-completely-peel-times
6199 The maximum number of iterations of a loop to be suitable for
6200 complete peeling.
6201
6202 max-completely-peel-loop-nest-depth
6203 The maximum depth of a loop nest suitable for complete peeling.
6204
6205 max-unswitch-insns
6206 The maximum number of insns of an unswitched loop.
6207
6208 max-unswitch-level
6209 The maximum number of branches unswitched in a single loop.
6210
6211 lim-expensive
6212 The minimum cost of an expensive expression in the loop
6213 invariant motion.
6214
6215 iv-consider-all-candidates-bound
6216 Bound on number of candidates for induction variables below
6217 that all candidates are considered for each use in induction
6218 variable optimizations. Only the most relevant candidates are
6219 considered if there are more candidates, to avoid quadratic
6220 time complexity.
6221
6222 iv-max-considered-uses
6223 The induction variable optimizations give up on loops that
6224 contain more induction variable uses.
6225
6226 iv-always-prune-cand-set-bound
6227 If number of candidates in the set is smaller than this value,
6228 we always try to remove unnecessary ivs from the set during its
6229 optimization when a new iv is added to the set.
6230
6231 scev-max-expr-size
6232 Bound on size of expressions used in the scalar evolutions
6233 analyzer. Large expressions slow the analyzer.
6234
6235 omega-max-vars
6236 The maximum number of variables in an Omega constraint system.
6237 The default value is 128.
6238
6239 omega-max-geqs
6240 The maximum number of inequalities in an Omega constraint
6241 system. The default value is 256.
6242
6243 omega-max-eqs
6244 The maximum number of equalities in an Omega constraint system.
6245 The default value is 128.
6246
6247 omega-max-wild-cards
6248 The maximum number of wildcard variables that the Omega solver
6249 will be able to insert. The default value is 18.
6250
6251 omega-hash-table-size
6252 The size of the hash table in the Omega solver. The default
6253 value is 550.
6254
6255 omega-max-keys
6256 The maximal number of keys used by the Omega solver. The
6257 default value is 500.
6258
6259 omega-eliminate-redundant-constraints
6260 When set to 1, use expensive methods to eliminate all redundant
6261 constraints. The default value is 0.
6262
6263 vect-max-version-for-alignment-checks
6264 The maximum number of runtime checks that can be performed when
6265 doing loop versioning for alignment in the vectorizer. See
6266 option ftree-vect-loop-version for more information.
6267
6268 vect-max-version-for-alias-checks
6269 The maximum number of runtime checks that can be performed when
6270 doing loop versioning for alias in the vectorizer. See option
6271 ftree-vect-loop-version for more information.
6272
6273 max-iterations-to-track
6274 The maximum number of iterations of a loop the brute force
6275 algorithm for analysis of # of iterations of the loop tries to
6276 evaluate.
6277
6278 hot-bb-count-fraction
6279 Select fraction of the maximal count of repetitions of basic
6280 block in program given basic block needs to have to be
6281 considered hot.
6282
6283 hot-bb-frequency-fraction
6284 Select fraction of the maximal frequency of executions of basic
6285 block in function given basic block needs to have to be
6286 considered hot
6287
6288 max-predicted-iterations
6289 The maximum number of loop iterations we predict statically.
6290 This is useful in cases where function contain single loop with
6291 known bound and other loop with unknown. We predict the known
6292 number of iterations correctly, while the unknown number of
6293 iterations average to roughly 10. This means that the loop
6294 without bounds would appear artificially cold relative to the
6295 other one.
6296
6297 align-threshold
6298 Select fraction of the maximal frequency of executions of basic
6299 block in function given basic block will get aligned.
6300
6301 align-loop-iterations
6302 A loop expected to iterate at lest the selected number of
6303 iterations will get aligned.
6304
6305 tracer-dynamic-coverage
6306 tracer-dynamic-coverage-feedback
6307 This value is used to limit superblock formation once the given
6308 percentage of executed instructions is covered. This limits
6309 unnecessary code size expansion.
6310
6311 The tracer-dynamic-coverage-feedback is used only when profile
6312 feedback is available. The real profiles (as opposed to
6313 statically estimated ones) are much less balanced allowing the
6314 threshold to be larger value.
6315
6316 tracer-max-code-growth
6317 Stop tail duplication once code growth has reached given
6318 percentage. This is rather hokey argument, as most of the
6319 duplicates will be eliminated later in cross jumping, so it may
6320 be set to much higher values than is the desired code growth.
6321
6322 tracer-min-branch-ratio
6323 Stop reverse growth when the reverse probability of best edge
6324 is less than this threshold (in percent).
6325
6326 tracer-min-branch-ratio
6327 tracer-min-branch-ratio-feedback
6328 Stop forward growth if the best edge do have probability lower
6329 than this threshold.
6330
6331 Similarly to tracer-dynamic-coverage two values are present,
6332 one for compilation for profile feedback and one for
6333 compilation without. The value for compilation with profile
6334 feedback needs to be more conservative (higher) in order to
6335 make tracer effective.
6336
6337 max-cse-path-length
6338 Maximum number of basic blocks on path that cse considers. The
6339 default is 10.
6340
6341 max-cse-insns
6342 The maximum instructions CSE process before flushing. The
6343 default is 1000.
6344
6345 max-aliased-vops
6346 Maximum number of virtual operands per function allowed to
6347 represent aliases before triggering the alias partitioning
6348 heuristic. Alias partitioning reduces compile times and memory
6349 consumption needed for aliasing at the expense of precision
6350 loss in alias information. The default value for this
6351 parameter is 100 for -O1, 500 for -O2 and 1000 for -O3.
6352
6353 Notice that if a function contains more memory statements than
6354 the value of this parameter, it is not really possible to
6355 achieve this reduction. In this case, the compiler will use
6356 the number of memory statements as the value for max-aliased-
6357 vops.
6358
6359 avg-aliased-vops
6360 Average number of virtual operands per statement allowed to
6361 represent aliases before triggering the alias partitioning
6362 heuristic. This works in conjunction with max-aliased-vops.
6363 If a function contains more than max-aliased-vops virtual
6364 operators, then memory symbols will be grouped into memory
6365 partitions until either the total number of virtual operators
6366 is below max-aliased-vops or the average number of virtual
6367 operators per memory statement is below avg-aliased-vops. The
6368 default value for this parameter is 1 for -O1 and -O2, and 3
6369 for -O3.
6370
6371 ggc-min-expand
6372 GCC uses a garbage collector to manage its own memory
6373 allocation. This parameter specifies the minimum percentage by
6374 which the garbage collector's heap should be allowed to expand
6375 between collections. Tuning this may improve compilation
6376 speed; it has no effect on code generation.
6377
6378 The default is 30% + 70% * (RAM/1GB) with an upper bound of
6379 100% when RAM >= 1GB. If "getrlimit" is available, the notion
6380 of "RAM" is the smallest of actual RAM and "RLIMIT_DATA" or
6381 "RLIMIT_AS". If GCC is not able to calculate RAM on a
6382 particular platform, the lower bound of 30% is used. Setting
6383 this parameter and ggc-min-heapsize to zero causes a full
6384 collection to occur at every opportunity. This is extremely
6385 slow, but can be useful for debugging.
6386
6387 ggc-min-heapsize
6388 Minimum size of the garbage collector's heap before it begins
6389 bothering to collect garbage. The first collection occurs
6390 after the heap expands by ggc-min-expand% beyond ggc-min-
6391 heapsize. Again, tuning this may improve compilation speed,
6392 and has no effect on code generation.
6393
6394 The default is the smaller of RAM/8, RLIMIT_RSS, or a limit
6395 which tries to ensure that RLIMIT_DATA or RLIMIT_AS are not
6396 exceeded, but with a lower bound of 4096 (four megabytes) and
6397 an upper bound of 131072 (128 megabytes). If GCC is not able
6398 to calculate RAM on a particular platform, the lower bound is
6399 used. Setting this parameter very large effectively disables
6400 garbage collection. Setting this parameter and ggc-min-expand
6401 to zero causes a full collection to occur at every opportunity.
6402
6403 max-reload-search-insns
6404 The maximum number of instruction reload should look backward
6405 for equivalent register. Increasing values mean more
6406 aggressive optimization, making the compile time increase with
6407 probably slightly better performance. The default value is
6408 100.
6409
6410 max-cselib-memory-locations
6411 The maximum number of memory locations cselib should take into
6412 account. Increasing values mean more aggressive optimization,
6413 making the compile time increase with probably slightly better
6414 performance. The default value is 500.
6415
6416 reorder-blocks-duplicate
6417 reorder-blocks-duplicate-feedback
6418 Used by basic block reordering pass to decide whether to use
6419 unconditional branch or duplicate the code on its destination.
6420 Code is duplicated when its estimated size is smaller than this
6421 value multiplied by the estimated size of unconditional jump in
6422 the hot spots of the program.
6423
6424 The reorder-block-duplicate-feedback is used only when profile
6425 feedback is available and may be set to higher values than
6426 reorder-block-duplicate since information about the hot spots
6427 is more accurate.
6428
6429 max-sched-ready-insns
6430 The maximum number of instructions ready to be issued the
6431 scheduler should consider at any given time during the first
6432 scheduling pass. Increasing values mean more thorough
6433 searches, making the compilation time increase with probably
6434 little benefit. The default value is 100.
6435
6436 max-sched-region-blocks
6437 The maximum number of blocks in a region to be considered for
6438 interblock scheduling. The default value is 10.
6439
6440 max-pipeline-region-blocks
6441 The maximum number of blocks in a region to be considered for
6442 pipelining in the selective scheduler. The default value is
6443 15.
6444
6445 max-sched-region-insns
6446 The maximum number of insns in a region to be considered for
6447 interblock scheduling. The default value is 100.
6448
6449 max-pipeline-region-insns
6450 The maximum number of insns in a region to be considered for
6451 pipelining in the selective scheduler. The default value is
6452 200.
6453
6454 min-spec-prob
6455 The minimum probability (in percents) of reaching a source
6456 block for interblock speculative scheduling. The default value
6457 is 40.
6458
6459 max-sched-extend-regions-iters
6460 The maximum number of iterations through CFG to extend regions.
6461 0 - disable region extension, N - do at most N iterations. The
6462 default value is 0.
6463
6464 max-sched-insn-conflict-delay
6465 The maximum conflict delay for an insn to be considered for
6466 speculative motion. The default value is 3.
6467
6468 sched-spec-prob-cutoff
6469 The minimal probability of speculation success (in percents),
6470 so that speculative insn will be scheduled. The default value
6471 is 40.
6472
6473 sched-mem-true-dep-cost
6474 Minimal distance (in CPU cycles) between store and load
6475 targeting same memory locations. The default value is 1.
6476
6477 selsched-max-lookahead
6478 The maximum size of the lookahead window of selective
6479 scheduling. It is a depth of search for available
6480 instructions. The default value is 50.
6481
6482 selsched-max-sched-times
6483 The maximum number of times that an instruction will be
6484 scheduled during selective scheduling. This is the limit on
6485 the number of iterations through which the instruction may be
6486 pipelined. The default value is 2.
6487
6488 selsched-max-insns-to-rename
6489 The maximum number of best instructions in the ready list that
6490 are considered for renaming in the selective scheduler. The
6491 default value is 2.
6492
6493 max-last-value-rtl
6494 The maximum size measured as number of RTLs that can be
6495 recorded in an expression in combiner for a pseudo register as
6496 last known value of that register. The default is 10000.
6497
6498 integer-share-limit
6499 Small integer constants can use a shared data structure,
6500 reducing the compiler's memory usage and increasing its speed.
6501 This sets the maximum value of a shared integer constant. The
6502 default value is 256.
6503
6504 min-virtual-mappings
6505 Specifies the minimum number of virtual mappings in the
6506 incremental SSA updater that should be registered to trigger
6507 the virtual mappings heuristic defined by virtual-mappings-
6508 ratio. The default value is 100.
6509
6510 virtual-mappings-ratio
6511 If the number of virtual mappings is virtual-mappings-ratio
6512 bigger than the number of virtual symbols to be updated, then
6513 the incremental SSA updater switches to a full update for those
6514 symbols. The default ratio is 3.
6515
6516 ssp-buffer-size
6517 The minimum size of buffers (i.e. arrays) that will receive
6518 stack smashing protection when -fstack-protection is used.
6519
6520 max-jump-thread-duplication-stmts
6521 Maximum number of statements allowed in a block that needs to
6522 be duplicated when threading jumps.
6523
6524 max-fields-for-field-sensitive
6525 Maximum number of fields in a structure we will treat in a
6526 field sensitive manner during pointer analysis. The default is
6527 zero for -O0, and -O1 and 100 for -Os, -O2, and -O3.
6528
6529 prefetch-latency
6530 Estimate on average number of instructions that are executed
6531 before prefetch finishes. The distance we prefetch ahead is
6532 proportional to this constant. Increasing this number may also
6533 lead to less streams being prefetched (see simultaneous-
6534 prefetches).
6535
6536 simultaneous-prefetches
6537 Maximum number of prefetches that can run at the same time.
6538
6539 l1-cache-line-size
6540 The size of cache line in L1 cache, in bytes.
6541
6542 l1-cache-size
6543 The size of L1 cache, in kilobytes.
6544
6545 l2-cache-size
6546 The size of L2 cache, in kilobytes.
6547
6548 use-canonical-types
6549 Whether the compiler should use the "canonical" type system.
6550 By default, this should always be 1, which uses a more
6551 efficient internal mechanism for comparing types in C++ and
6552 Objective-C++. However, if bugs in the canonical type system
6553 are causing compilation failures, set this value to 0 to
6554 disable canonical types.
6555
6556 switch-conversion-max-branch-ratio
6557 Switch initialization conversion will refuse to create arrays
6558 that are bigger than switch-conversion-max-branch-ratio times
6559 the number of branches in the switch.
6560
6561 max-partial-antic-length
6562 Maximum length of the partial antic set computed during the
6563 tree partial redundancy elimination optimization (-ftree-pre)
6564 when optimizing at -O3 and above. For some sorts of source
6565 code the enhanced partial redundancy elimination optimization
6566 can run away, consuming all of the memory available on the host
6567 machine. This parameter sets a limit on the length of the sets
6568 that are computed, which prevents the runaway behavior.
6569 Setting a value of 0 for this parameter will allow an unlimited
6570 set length.
6571
6572 sccvn-max-scc-size
6573 Maximum size of a strongly connected component (SCC) during
6574 SCCVN processing. If this limit is hit, SCCVN processing for
6575 the whole function will not be done and optimizations depending
6576 on it will be disabled. The default maximum SCC size is 10000.
6577
6578 ira-max-loops-num
6579 IRA uses a regional register allocation by default. If a
6580 function contains loops more than number given by the
6581 parameter, only at most given number of the most frequently
6582 executed loops will form regions for the regional register
6583 allocation. The default value of the parameter is 100.
6584
6585 ira-max-conflict-table-size
6586 Although IRA uses a sophisticated algorithm of compression
6587 conflict table, the table can be still big for huge functions.
6588 If the conflict table for a function could be more than size in
6589 MB given by the parameter, the conflict table is not built and
6590 faster, simpler, and lower quality register allocation
6591 algorithm will be used. The algorithm do not use pseudo-
6592 register conflicts. The default value of the parameter is
6593 2000.
6594
6595 loop-invariant-max-bbs-in-loop
6596 Loop invariant motion can be very expensive, both in compile
6597 time and in amount of needed compile time memory, with very
6598 large loops. Loops with more basic blocks than this parameter
6599 won't have loop invariant motion optimization performed on
6600 them. The default value of the parameter is 1000 for -O1 and
6601 10000 for -O2 and above.
6602
6603 max-vartrack-size
6604 Sets a maximum number of hash table slots to use during
6605 variable tracking dataflow analysis of any function. If this
6606 limit is exceeded with variable tracking at assignments
6607 enabled, analysis for that function is retried without it,
6608 after removing all debug insns from the function. If the limit
6609 is exceeded even without debug insns, var tracking analysis is
6610 completely disabled for the function. Setting the parameter to
6611 zero makes it unlimited.
6612
6613 min-nondebug-insn-uid
6614 Use uids starting at this parameter for nondebug insns. The
6615 range below the parameter is reserved exclusively for debug
6616 insns created by -fvar-tracking-assignments, but debug insns
6617 may get (non-overlapping) uids above it if the reserved range
6618 is exhausted.
6619
6620 Options Controlling the Preprocessor
6621 These options control the C preprocessor, which is run on each C source
6622 file before actual compilation.
6623
6624 If you use the -E option, nothing is done except preprocessing. Some
6625 of these options make sense only together with -E because they cause
6626 the preprocessor output to be unsuitable for actual compilation.
6627
6628 -Wp,option
6629 You can use -Wp,option to bypass the compiler driver and pass
6630 option directly through to the preprocessor. If option contains
6631 commas, it is split into multiple options at the commas. However,
6632 many options are modified, translated or interpreted by the
6633 compiler driver before being passed to the preprocessor, and -Wp
6634 forcibly bypasses this phase. The preprocessor's direct interface
6635 is undocumented and subject to change, so whenever possible you
6636 should avoid using -Wp and let the driver handle the options
6637 instead.
6638
6639 -Xpreprocessor option
6640 Pass option as an option to the preprocessor. You can use this to
6641 supply system-specific preprocessor options which GCC does not know
6642 how to recognize.
6643
6644 If you want to pass an option that takes an argument, you must use
6645 -Xpreprocessor twice, once for the option and once for the
6646 argument.
6647
6648 -D name
6649 Predefine name as a macro, with definition 1.
6650
6651 -D name=definition
6652 The contents of definition are tokenized and processed as if they
6653 appeared during translation phase three in a #define directive. In
6654 particular, the definition will be truncated by embedded newline
6655 characters.
6656
6657 If you are invoking the preprocessor from a shell or shell-like
6658 program you may need to use the shell's quoting syntax to protect
6659 characters such as spaces that have a meaning in the shell syntax.
6660
6661 If you wish to define a function-like macro on the command line,
6662 write its argument list with surrounding parentheses before the
6663 equals sign (if any). Parentheses are meaningful to most shells,
6664 so you will need to quote the option. With sh and csh,
6665 -D'name(args...)=definition' works.
6666
6667 -D and -U options are processed in the order they are given on the
6668 command line. All -imacros file and -include file options are
6669 processed after all -D and -U options.
6670
6671 -U name
6672 Cancel any previous definition of name, either built in or provided
6673 with a -D option.
6674
6675 -undef
6676 Do not predefine any system-specific or GCC-specific macros. The
6677 standard predefined macros remain defined.
6678
6679 -I dir
6680 Add the directory dir to the list of directories to be searched for
6681 header files. Directories named by -I are searched before the
6682 standard system include directories. If the directory dir is a
6683 standard system include directory, the option is ignored to ensure
6684 that the default search order for system directories and the
6685 special treatment of system headers are not defeated . If dir
6686 begins with "=", then the "=" will be replaced by the sysroot
6687 prefix; see --sysroot and -isysroot.
6688
6689 -o file
6690 Write output to file. This is the same as specifying file as the
6691 second non-option argument to cpp. gcc has a different
6692 interpretation of a second non-option argument, so you must use -o
6693 to specify the output file.
6694
6695 -Wall
6696 Turns on all optional warnings which are desirable for normal code.
6697 At present this is -Wcomment, -Wtrigraphs, -Wmultichar and a
6698 warning about integer promotion causing a change of sign in "#if"
6699 expressions. Note that many of the preprocessor's warnings are on
6700 by default and have no options to control them.
6701
6702 -Wcomment
6703 -Wcomments
6704 Warn whenever a comment-start sequence /* appears in a /* comment,
6705 or whenever a backslash-newline appears in a // comment. (Both
6706 forms have the same effect.)
6707
6708 -Wtrigraphs
6709 Most trigraphs in comments cannot affect the meaning of the
6710 program. However, a trigraph that would form an escaped newline
6711 (??/ at the end of a line) can, by changing where the comment
6712 begins or ends. Therefore, only trigraphs that would form escaped
6713 newlines produce warnings inside a comment.
6714
6715 This option is implied by -Wall. If -Wall is not given, this
6716 option is still enabled unless trigraphs are enabled. To get
6717 trigraph conversion without warnings, but get the other -Wall
6718 warnings, use -trigraphs -Wall -Wno-trigraphs.
6719
6720 -Wtraditional
6721 Warn about certain constructs that behave differently in
6722 traditional and ISO C. Also warn about ISO C constructs that have
6723 no traditional C equivalent, and problematic constructs which
6724 should be avoided.
6725
6726 -Wundef
6727 Warn whenever an identifier which is not a macro is encountered in
6728 an #if directive, outside of defined. Such identifiers are
6729 replaced with zero.
6730
6731 -Wunused-macros
6732 Warn about macros defined in the main file that are unused. A
6733 macro is used if it is expanded or tested for existence at least
6734 once. The preprocessor will also warn if the macro has not been
6735 used at the time it is redefined or undefined.
6736
6737 Built-in macros, macros defined on the command line, and macros
6738 defined in include files are not warned about.
6739
6740 Note: If a macro is actually used, but only used in skipped
6741 conditional blocks, then CPP will report it as unused. To avoid
6742 the warning in such a case, you might improve the scope of the
6743 macro's definition by, for example, moving it into the first
6744 skipped block. Alternatively, you could provide a dummy use with
6745 something like:
6746
6747 #if defined the_macro_causing_the_warning
6748 #endif
6749
6750 -Wendif-labels
6751 Warn whenever an #else or an #endif are followed by text. This
6752 usually happens in code of the form
6753
6754 #if FOO
6755 ...
6756 #else FOO
6757 ...
6758 #endif FOO
6759
6760 The second and third "FOO" should be in comments, but often are not
6761 in older programs. This warning is on by default.
6762
6763 -Werror
6764 Make all warnings into hard errors. Source code which triggers
6765 warnings will be rejected.
6766
6767 -Wsystem-headers
6768 Issue warnings for code in system headers. These are normally
6769 unhelpful in finding bugs in your own code, therefore suppressed.
6770 If you are responsible for the system library, you may want to see
6771 them.
6772
6773 -w Suppress all warnings, including those which GNU CPP issues by
6774 default.
6775
6776 -pedantic
6777 Issue all the mandatory diagnostics listed in the C standard. Some
6778 of them are left out by default, since they trigger frequently on
6779 harmless code.
6780
6781 -pedantic-errors
6782 Issue all the mandatory diagnostics, and make all mandatory
6783 diagnostics into errors. This includes mandatory diagnostics that
6784 GCC issues without -pedantic but treats as warnings.
6785
6786 -M Instead of outputting the result of preprocessing, output a rule
6787 suitable for make describing the dependencies of the main source
6788 file. The preprocessor outputs one make rule containing the object
6789 file name for that source file, a colon, and the names of all the
6790 included files, including those coming from -include or -imacros
6791 command line options.
6792
6793 Unless specified explicitly (with -MT or -MQ), the object file name
6794 consists of the name of the source file with any suffix replaced
6795 with object file suffix and with any leading directory parts
6796 removed. If there are many included files then the rule is split
6797 into several lines using \-newline. The rule has no commands.
6798
6799 This option does not suppress the preprocessor's debug output, such
6800 as -dM. To avoid mixing such debug output with the dependency
6801 rules you should explicitly specify the dependency output file with
6802 -MF, or use an environment variable like DEPENDENCIES_OUTPUT.
6803 Debug output will still be sent to the regular output stream as
6804 normal.
6805
6806 Passing -M to the driver implies -E, and suppresses warnings with
6807 an implicit -w.
6808
6809 -MM Like -M but do not mention header files that are found in system
6810 header directories, nor header files that are included, directly or
6811 indirectly, from such a header.
6812
6813 This implies that the choice of angle brackets or double quotes in
6814 an #include directive does not in itself determine whether that
6815 header will appear in -MM dependency output. This is a slight
6816 change in semantics from GCC versions 3.0 and earlier.
6817
6818 -MF file
6819 When used with -M or -MM, specifies a file to write the
6820 dependencies to. If no -MF switch is given the preprocessor sends
6821 the rules to the same place it would have sent preprocessed output.
6822
6823 When used with the driver options -MD or -MMD, -MF overrides the
6824 default dependency output file.
6825
6826 -MG In conjunction with an option such as -M requesting dependency
6827 generation, -MG assumes missing header files are generated files
6828 and adds them to the dependency list without raising an error. The
6829 dependency filename is taken directly from the "#include" directive
6830 without prepending any path. -MG also suppresses preprocessed
6831 output, as a missing header file renders this useless.
6832
6833 This feature is used in automatic updating of makefiles.
6834
6835 -MP This option instructs CPP to add a phony target for each dependency
6836 other than the main file, causing each to depend on nothing. These
6837 dummy rules work around errors make gives if you remove header
6838 files without updating the Makefile to match.
6839
6840 This is typical output:
6841
6842 test.o: test.c test.h
6843
6844 test.h:
6845
6846 -MT target
6847 Change the target of the rule emitted by dependency generation. By
6848 default CPP takes the name of the main input file, deletes any
6849 directory components and any file suffix such as .c, and appends
6850 the platform's usual object suffix. The result is the target.
6851
6852 An -MT option will set the target to be exactly the string you
6853 specify. If you want multiple targets, you can specify them as a
6854 single argument to -MT, or use multiple -MT options.
6855
6856 For example, -MT '$(objpfx)foo.o' might give
6857
6858 $(objpfx)foo.o: foo.c
6859
6860 -MQ target
6861 Same as -MT, but it quotes any characters which are special to
6862 Make. -MQ '$(objpfx)foo.o' gives
6863
6864 $$(objpfx)foo.o: foo.c
6865
6866 The default target is automatically quoted, as if it were given
6867 with -MQ.
6868
6869 -MD -MD is equivalent to -M -MF file, except that -E is not implied.
6870 The driver determines file based on whether an -o option is given.
6871 If it is, the driver uses its argument but with a suffix of .d,
6872 otherwise it takes the name of the input file, removes any
6873 directory components and suffix, and applies a .d suffix.
6874
6875 If -MD is used in conjunction with -E, any -o switch is understood
6876 to specify the dependency output file, but if used without -E, each
6877 -o is understood to specify a target object file.
6878
6879 Since -E is not implied, -MD can be used to generate a dependency
6880 output file as a side-effect of the compilation process.
6881
6882 -MMD
6883 Like -MD except mention only user header files, not system header
6884 files.
6885
6886 -fpch-deps
6887 When using precompiled headers, this flag will cause the
6888 dependency-output flags to also list the files from the precompiled
6889 header's dependencies. If not specified only the precompiled
6890 header would be listed and not the files that were used to create
6891 it because those files are not consulted when a precompiled header
6892 is used.
6893
6894 -fpch-preprocess
6895 This option allows use of a precompiled header together with -E.
6896 It inserts a special "#pragma", "#pragma GCC pch_preprocess
6897 "<filename>"" in the output to mark the place where the precompiled
6898 header was found, and its filename. When -fpreprocessed is in use,
6899 GCC recognizes this "#pragma" and loads the PCH.
6900
6901 This option is off by default, because the resulting preprocessed
6902 output is only really suitable as input to GCC. It is switched on
6903 by -save-temps.
6904
6905 You should not write this "#pragma" in your own code, but it is
6906 safe to edit the filename if the PCH file is available in a
6907 different location. The filename may be absolute or it may be
6908 relative to GCC's current directory.
6909
6910 -x c
6911 -x c++
6912 -x objective-c
6913 -x assembler-with-cpp
6914 Specify the source language: C, C++, Objective-C, or assembly.
6915 This has nothing to do with standards conformance or extensions; it
6916 merely selects which base syntax to expect. If you give none of
6917 these options, cpp will deduce the language from the extension of
6918 the source file: .c, .cc, .m, or .S. Some other common extensions
6919 for C++ and assembly are also recognized. If cpp does not
6920 recognize the extension, it will treat the file as C; this is the
6921 most generic mode.
6922
6923 Note: Previous versions of cpp accepted a -lang option which
6924 selected both the language and the standards conformance level.
6925 This option has been removed, because it conflicts with the -l
6926 option.
6927
6928 -std=standard
6929 -ansi
6930 Specify the standard to which the code should conform. Currently
6931 CPP knows about C and C++ standards; others may be added in the
6932 future.
6933
6934 standard may be one of:
6935
6936 "iso9899:1990"
6937 "c89"
6938 The ISO C standard from 1990. c89 is the customary shorthand
6939 for this version of the standard.
6940
6941 The -ansi option is equivalent to -std=c89.
6942
6943 "iso9899:199409"
6944 The 1990 C standard, as amended in 1994.
6945
6946 "iso9899:1999"
6947 "c99"
6948 "iso9899:199x"
6949 "c9x"
6950 The revised ISO C standard, published in December 1999. Before
6951 publication, this was known as C9X.
6952
6953 "gnu89"
6954 The 1990 C standard plus GNU extensions. This is the default.
6955
6956 "gnu99"
6957 "gnu9x"
6958 The 1999 C standard plus GNU extensions.
6959
6960 "c++98"
6961 The 1998 ISO C++ standard plus amendments.
6962
6963 "gnu++98"
6964 The same as -std=c++98 plus GNU extensions. This is the
6965 default for C++ code.
6966
6967 -I- Split the include path. Any directories specified with -I options
6968 before -I- are searched only for headers requested with
6969 "#include "file""; they are not searched for "#include <file>". If
6970 additional directories are specified with -I options after the -I-,
6971 those directories are searched for all #include directives.
6972
6973 In addition, -I- inhibits the use of the directory of the current
6974 file directory as the first search directory for "#include "file"".
6975 This option has been deprecated.
6976
6977 -nostdinc
6978 Do not search the standard system directories for header files.
6979 Only the directories you have specified with -I options (and the
6980 directory of the current file, if appropriate) are searched.
6981
6982 -nostdinc++
6983 Do not search for header files in the C++-specific standard
6984 directories, but do still search the other standard directories.
6985 (This option is used when building the C++ library.)
6986
6987 -include file
6988 Process file as if "#include "file"" appeared as the first line of
6989 the primary source file. However, the first directory searched for
6990 file is the preprocessor's working directory instead of the
6991 directory containing the main source file. If not found there, it
6992 is searched for in the remainder of the "#include "..."" search
6993 chain as normal.
6994
6995 If multiple -include options are given, the files are included in
6996 the order they appear on the command line.
6997
6998 -imacros file
6999 Exactly like -include, except that any output produced by scanning
7000 file is thrown away. Macros it defines remain defined. This
7001 allows you to acquire all the macros from a header without also
7002 processing its declarations.
7003
7004 All files specified by -imacros are processed before all files
7005 specified by -include.
7006
7007 -idirafter dir
7008 Search dir for header files, but do it after all directories
7009 specified with -I and the standard system directories have been
7010 exhausted. dir is treated as a system include directory. If dir
7011 begins with "=", then the "=" will be replaced by the sysroot
7012 prefix; see --sysroot and -isysroot.
7013
7014 -iprefix prefix
7015 Specify prefix as the prefix for subsequent -iwithprefix options.
7016 If the prefix represents a directory, you should include the final
7017 /.
7018
7019 -iwithprefix dir
7020 -iwithprefixbefore dir
7021 Append dir to the prefix specified previously with -iprefix, and
7022 add the resulting directory to the include search path.
7023 -iwithprefixbefore puts it in the same place -I would; -iwithprefix
7024 puts it where -idirafter would.
7025
7026 -isysroot dir
7027 This option is like the --sysroot option, but applies only to
7028 header files. See the --sysroot option for more information.
7029
7030 -imultilib dir
7031 Use dir as a subdirectory of the directory containing target-
7032 specific C++ headers.
7033
7034 -isystem dir
7035 Search dir for header files, after all directories specified by -I
7036 but before the standard system directories. Mark it as a system
7037 directory, so that it gets the same special treatment as is applied
7038 to the standard system directories. If dir begins with "=", then
7039 the "=" will be replaced by the sysroot prefix; see --sysroot and
7040 -isysroot.
7041
7042 -iquote dir
7043 Search dir only for header files requested with "#include "file"";
7044 they are not searched for "#include <file>", before all directories
7045 specified by -I and before the standard system directories. If dir
7046 begins with "=", then the "=" will be replaced by the sysroot
7047 prefix; see --sysroot and -isysroot.
7048
7049 -fdirectives-only
7050 When preprocessing, handle directives, but do not expand macros.
7051
7052 The option's behavior depends on the -E and -fpreprocessed options.
7053
7054 With -E, preprocessing is limited to the handling of directives
7055 such as "#define", "#ifdef", and "#error". Other preprocessor
7056 operations, such as macro expansion and trigraph conversion are not
7057 performed. In addition, the -dD option is implicitly enabled.
7058
7059 With -fpreprocessed, predefinition of command line and most builtin
7060 macros is disabled. Macros such as "__LINE__", which are
7061 contextually dependent, are handled normally. This enables
7062 compilation of files previously preprocessed with "-E
7063 -fdirectives-only".
7064
7065 With both -E and -fpreprocessed, the rules for -fpreprocessed take
7066 precedence. This enables full preprocessing of files previously
7067 preprocessed with "-E -fdirectives-only".
7068
7069 -fdollars-in-identifiers
7070 Accept $ in identifiers.
7071
7072 -fextended-identifiers
7073 Accept universal character names in identifiers. This option is
7074 experimental; in a future version of GCC, it will be enabled by
7075 default for C99 and C++.
7076
7077 -fpreprocessed
7078 Indicate to the preprocessor that the input file has already been
7079 preprocessed. This suppresses things like macro expansion,
7080 trigraph conversion, escaped newline splicing, and processing of
7081 most directives. The preprocessor still recognizes and removes
7082 comments, so that you can pass a file preprocessed with -C to the
7083 compiler without problems. In this mode the integrated
7084 preprocessor is little more than a tokenizer for the front ends.
7085
7086 -fpreprocessed is implicit if the input file has one of the
7087 extensions .i, .ii or .mi. These are the extensions that GCC uses
7088 for preprocessed files created by -save-temps.
7089
7090 -ftabstop=width
7091 Set the distance between tab stops. This helps the preprocessor
7092 report correct column numbers in warnings or errors, even if tabs
7093 appear on the line. If the value is less than 1 or greater than
7094 100, the option is ignored. The default is 8.
7095
7096 -fexec-charset=charset
7097 Set the execution character set, used for string and character
7098 constants. The default is UTF-8. charset can be any encoding
7099 supported by the system's "iconv" library routine.
7100
7101 -fwide-exec-charset=charset
7102 Set the wide execution character set, used for wide string and
7103 character constants. The default is UTF-32 or UTF-16, whichever
7104 corresponds to the width of "wchar_t". As with -fexec-charset,
7105 charset can be any encoding supported by the system's "iconv"
7106 library routine; however, you will have problems with encodings
7107 that do not fit exactly in "wchar_t".
7108
7109 -finput-charset=charset
7110 Set the input character set, used for translation from the
7111 character set of the input file to the source character set used by
7112 GCC. If the locale does not specify, or GCC cannot get this
7113 information from the locale, the default is UTF-8. This can be
7114 overridden by either the locale or this command line option.
7115 Currently the command line option takes precedence if there's a
7116 conflict. charset can be any encoding supported by the system's
7117 "iconv" library routine.
7118
7119 -fworking-directory
7120 Enable generation of linemarkers in the preprocessor output that
7121 will let the compiler know the current working directory at the
7122 time of preprocessing. When this option is enabled, the
7123 preprocessor will emit, after the initial linemarker, a second
7124 linemarker with the current working directory followed by two
7125 slashes. GCC will use this directory, when it's present in the
7126 preprocessed input, as the directory emitted as the current working
7127 directory in some debugging information formats. This option is
7128 implicitly enabled if debugging information is enabled, but this
7129 can be inhibited with the negated form -fno-working-directory. If
7130 the -P flag is present in the command line, this option has no
7131 effect, since no "#line" directives are emitted whatsoever.
7132
7133 -fno-show-column
7134 Do not print column numbers in diagnostics. This may be necessary
7135 if diagnostics are being scanned by a program that does not
7136 understand the column numbers, such as dejagnu.
7137
7138 -A predicate=answer
7139 Make an assertion with the predicate predicate and answer answer.
7140 This form is preferred to the older form -A predicate(answer),
7141 which is still supported, because it does not use shell special
7142 characters.
7143
7144 -A -predicate=answer
7145 Cancel an assertion with the predicate predicate and answer answer.
7146
7147 -dCHARS
7148 CHARS is a sequence of one or more of the following characters, and
7149 must not be preceded by a space. Other characters are interpreted
7150 by the compiler proper, or reserved for future versions of GCC, and
7151 so are silently ignored. If you specify characters whose behavior
7152 conflicts, the result is undefined.
7153
7154 M Instead of the normal output, generate a list of #define
7155 directives for all the macros defined during the execution of
7156 the preprocessor, including predefined macros. This gives you
7157 a way of finding out what is predefined in your version of the
7158 preprocessor. Assuming you have no file foo.h, the command
7159
7160 touch foo.h; cpp -dM foo.h
7161
7162 will show all the predefined macros.
7163
7164 If you use -dM without the -E option, -dM is interpreted as a
7165 synonym for -fdump-rtl-mach.
7166
7167 D Like M except in two respects: it does not include the
7168 predefined macros, and it outputs both the #define directives
7169 and the result of preprocessing. Both kinds of output go to
7170 the standard output file.
7171
7172 N Like D, but emit only the macro names, not their expansions.
7173
7174 I Output #include directives in addition to the result of
7175 preprocessing.
7176
7177 U Like D except that only macros that are expanded, or whose
7178 definedness is tested in preprocessor directives, are output;
7179 the output is delayed until the use or test of the macro; and
7180 #undef directives are also output for macros tested but
7181 undefined at the time.
7182
7183 -P Inhibit generation of linemarkers in the output from the
7184 preprocessor. This might be useful when running the preprocessor
7185 on something that is not C code, and will be sent to a program
7186 which might be confused by the linemarkers.
7187
7188 -C Do not discard comments. All comments are passed through to the
7189 output file, except for comments in processed directives, which are
7190 deleted along with the directive.
7191
7192 You should be prepared for side effects when using -C; it causes
7193 the preprocessor to treat comments as tokens in their own right.
7194 For example, comments appearing at the start of what would be a
7195 directive line have the effect of turning that line into an
7196 ordinary source line, since the first token on the line is no
7197 longer a #.
7198
7199 -CC Do not discard comments, including during macro expansion. This is
7200 like -C, except that comments contained within macros are also
7201 passed through to the output file where the macro is expanded.
7202
7203 In addition to the side-effects of the -C option, the -CC option
7204 causes all C++-style comments inside a macro to be converted to
7205 C-style comments. This is to prevent later use of that macro from
7206 inadvertently commenting out the remainder of the source line.
7207
7208 The -CC option is generally used to support lint comments.
7209
7210 -traditional-cpp
7211 Try to imitate the behavior of old-fashioned C preprocessors, as
7212 opposed to ISO C preprocessors.
7213
7214 -trigraphs
7215 Process trigraph sequences. These are three-character sequences,
7216 all starting with ??, that are defined by ISO C to stand for single
7217 characters. For example, ??/ stands for \, so '??/n' is a
7218 character constant for a newline. By default, GCC ignores
7219 trigraphs, but in standard-conforming modes it converts them. See
7220 the -std and -ansi options.
7221
7222 The nine trigraphs and their replacements are
7223
7224 Trigraph: ??( ??) ??< ??> ??= ??/ ??' ??! ??-
7225 Replacement: [ ] { } # \ ^ | ~
7226
7227 -remap
7228 Enable special code to work around file systems which only permit
7229 very short file names, such as MS-DOS.
7230
7231 --help
7232 --target-help
7233 Print text describing all the command line options instead of
7234 preprocessing anything.
7235
7236 -v Verbose mode. Print out GNU CPP's version number at the beginning
7237 of execution, and report the final form of the include path.
7238
7239 -H Print the name of each header file used, in addition to other
7240 normal activities. Each name is indented to show how deep in the
7241 #include stack it is. Precompiled header files are also printed,
7242 even if they are found to be invalid; an invalid precompiled header
7243 file is printed with ...x and a valid one with ...! .
7244
7245 -version
7246 --version
7247 Print out GNU CPP's version number. With one dash, proceed to
7248 preprocess as normal. With two dashes, exit immediately.
7249
7250 Passing Options to the Assembler
7251 You can pass options to the assembler.
7252
7253 -Wa,option
7254 Pass option as an option to the assembler. If option contains
7255 commas, it is split into multiple options at the commas.
7256
7257 -Xassembler option
7258 Pass option as an option to the assembler. You can use this to
7259 supply system-specific assembler options which GCC does not know
7260 how to recognize.
7261
7262 If you want to pass an option that takes an argument, you must use
7263 -Xassembler twice, once for the option and once for the argument.
7264
7265 Options for Linking
7266 These options come into play when the compiler links object files into
7267 an executable output file. They are meaningless if the compiler is not
7268 doing a link step.
7269
7270 object-file-name
7271 A file name that does not end in a special recognized suffix is
7272 considered to name an object file or library. (Object files are
7273 distinguished from libraries by the linker according to the file
7274 contents.) If linking is done, these object files are used as
7275 input to the linker.
7276
7277 -c
7278 -S
7279 -E If any of these options is used, then the linker is not run, and
7280 object file names should not be used as arguments.
7281
7282 -llibrary
7283 -l library
7284 Search the library named library when linking. (The second
7285 alternative with the library as a separate argument is only for
7286 POSIX compliance and is not recommended.)
7287
7288 It makes a difference where in the command you write this option;
7289 the linker searches and processes libraries and object files in the
7290 order they are specified. Thus, foo.o -lz bar.o searches library z
7291 after file foo.o but before bar.o. If bar.o refers to functions in
7292 z, those functions may not be loaded.
7293
7294 The linker searches a standard list of directories for the library,
7295 which is actually a file named liblibrary.a. The linker then uses
7296 this file as if it had been specified precisely by name.
7297
7298 The directories searched include several standard system
7299 directories plus any that you specify with -L.
7300
7301 Normally the files found this way are library files---archive files
7302 whose members are object files. The linker handles an archive file
7303 by scanning through it for members which define symbols that have
7304 so far been referenced but not defined. But if the file that is
7305 found is an ordinary object file, it is linked in the usual
7306 fashion. The only difference between using an -l option and
7307 specifying a file name is that -l surrounds library with lib and .a
7308 and searches several directories.
7309
7310 -lobjc
7311 You need this special case of the -l option in order to link an
7312 Objective-C or Objective-C++ program.
7313
7314 -nostartfiles
7315 Do not use the standard system startup files when linking. The
7316 standard system libraries are used normally, unless -nostdlib or
7317 -nodefaultlibs is used.
7318
7319 -nodefaultlibs
7320 Do not use the standard system libraries when linking. Only the
7321 libraries you specify will be passed to the linker. The standard
7322 startup files are used normally, unless -nostartfiles is used. The
7323 compiler may generate calls to "memcmp", "memset", "memcpy" and
7324 "memmove". These entries are usually resolved by entries in libc.
7325 These entry points should be supplied through some other mechanism
7326 when this option is specified.
7327
7328 -nostdlib
7329 Do not use the standard system startup files or libraries when
7330 linking. No startup files and only the libraries you specify will
7331 be passed to the linker. The compiler may generate calls to
7332 "memcmp", "memset", "memcpy" and "memmove". These entries are
7333 usually resolved by entries in libc. These entry points should be
7334 supplied through some other mechanism when this option is
7335 specified.
7336
7337 One of the standard libraries bypassed by -nostdlib and
7338 -nodefaultlibs is libgcc.a, a library of internal subroutines that
7339 GCC uses to overcome shortcomings of particular machines, or
7340 special needs for some languages.
7341
7342 In most cases, you need libgcc.a even when you want to avoid other
7343 standard libraries. In other words, when you specify -nostdlib or
7344 -nodefaultlibs you should usually specify -lgcc as well. This
7345 ensures that you have no unresolved references to internal GCC
7346 library subroutines. (For example, __main, used to ensure C++
7347 constructors will be called.)
7348
7349 -pie
7350 Produce a position independent executable on targets which support
7351 it. For predictable results, you must also specify the same set of
7352 options that were used to generate code (-fpie, -fPIE, or model
7353 suboptions) when you specify this option.
7354
7355 -rdynamic
7356 Pass the flag -export-dynamic to the ELF linker, on targets that
7357 support it. This instructs the linker to add all symbols, not only
7358 used ones, to the dynamic symbol table. This option is needed for
7359 some uses of "dlopen" or to allow obtaining backtraces from within
7360 a program.
7361
7362 -s Remove all symbol table and relocation information from the
7363 executable.
7364
7365 -static
7366 On systems that support dynamic linking, this prevents linking with
7367 the shared libraries. On other systems, this option has no effect.
7368
7369 -shared
7370 Produce a shared object which can then be linked with other objects
7371 to form an executable. Not all systems support this option. For
7372 predictable results, you must also specify the same set of options
7373 that were used to generate code (-fpic, -fPIC, or model suboptions)
7374 when you specify this option.[1]
7375
7376 -shared-libgcc
7377 -static-libgcc
7378 On systems that provide libgcc as a shared library, these options
7379 force the use of either the shared or static version respectively.
7380 If no shared version of libgcc was built when the compiler was
7381 configured, these options have no effect.
7382
7383 There are several situations in which an application should use the
7384 shared libgcc instead of the static version. The most common of
7385 these is when the application wishes to throw and catch exceptions
7386 across different shared libraries. In that case, each of the
7387 libraries as well as the application itself should use the shared
7388 libgcc.
7389
7390 Therefore, the G++ and GCJ drivers automatically add -shared-libgcc
7391 whenever you build a shared library or a main executable, because
7392 C++ and Java programs typically use exceptions, so this is the
7393 right thing to do.
7394
7395 If, instead, you use the GCC driver to create shared libraries, you
7396 may find that they will not always be linked with the shared
7397 libgcc. If GCC finds, at its configuration time, that you have a
7398 non-GNU linker or a GNU linker that does not support option
7399 --eh-frame-hdr, it will link the shared version of libgcc into
7400 shared libraries by default. Otherwise, it will take advantage of
7401 the linker and optimize away the linking with the shared version of
7402 libgcc, linking with the static version of libgcc by default. This
7403 allows exceptions to propagate through such shared libraries,
7404 without incurring relocation costs at library load time.
7405
7406 However, if a library or main executable is supposed to throw or
7407 catch exceptions, you must link it using the G++ or GCJ driver, as
7408 appropriate for the languages used in the program, or using the
7409 option -shared-libgcc, such that it is linked with the shared
7410 libgcc.
7411
7412 -symbolic
7413 Bind references to global symbols when building a shared object.
7414 Warn about any unresolved references (unless overridden by the link
7415 editor option -Xlinker -z -Xlinker defs). Only a few systems
7416 support this option.
7417
7418 -T script
7419 Use script as the linker script. This option is supported by most
7420 systems using the GNU linker. On some targets, such as bare-board
7421 targets without an operating system, the -T option may be required
7422 when linking to avoid references to undefined symbols.
7423
7424 -Xlinker option
7425 Pass option as an option to the linker. You can use this to supply
7426 system-specific linker options which GCC does not know how to
7427 recognize.
7428
7429 If you want to pass an option that takes a separate argument, you
7430 must use -Xlinker twice, once for the option and once for the
7431 argument. For example, to pass -assert definitions, you must write
7432 -Xlinker -assert -Xlinker definitions. It does not work to write
7433 -Xlinker "-assert definitions", because this passes the entire
7434 string as a single argument, which is not what the linker expects.
7435
7436 When using the GNU linker, it is usually more convenient to pass
7437 arguments to linker options using the option=value syntax than as
7438 separate arguments. For example, you can specify -Xlinker
7439 -Map=output.map rather than -Xlinker -Map -Xlinker output.map.
7440 Other linkers may not support this syntax for command-line options.
7441
7442 -Wl,option
7443 Pass option as an option to the linker. If option contains commas,
7444 it is split into multiple options at the commas. You can use this
7445 syntax to pass an argument to the option. For example,
7446 -Wl,-Map,output.map passes -Map output.map to the linker. When
7447 using the GNU linker, you can also get the same effect with
7448 -Wl,-Map=output.map.
7449
7450 -u symbol
7451 Pretend the symbol symbol is undefined, to force linking of library
7452 modules to define it. You can use -u multiple times with different
7453 symbols to force loading of additional library modules.
7454
7455 Options for Directory Search
7456 These options specify directories to search for header files, for
7457 libraries and for parts of the compiler:
7458
7459 -Idir
7460 Add the directory dir to the head of the list of directories to be
7461 searched for header files. This can be used to override a system
7462 header file, substituting your own version, since these directories
7463 are searched before the system header file directories. However,
7464 you should not use this option to add directories that contain
7465 vendor-supplied system header files (use -isystem for that). If
7466 you use more than one -I option, the directories are scanned in
7467 left-to-right order; the standard system directories come after.
7468
7469 If a standard system include directory, or a directory specified
7470 with -isystem, is also specified with -I, the -I option will be
7471 ignored. The directory will still be searched but as a system
7472 directory at its normal position in the system include chain. This
7473 is to ensure that GCC's procedure to fix buggy system headers and
7474 the ordering for the include_next directive are not inadvertently
7475 changed. If you really need to change the search order for system
7476 directories, use the -nostdinc and/or -isystem options.
7477
7478 -iquotedir
7479 Add the directory dir to the head of the list of directories to be
7480 searched for header files only for the case of #include "file";
7481 they are not searched for #include <file>, otherwise just like -I.
7482
7483 -Ldir
7484 Add directory dir to the list of directories to be searched for -l.
7485
7486 -Bprefix
7487 This option specifies where to find the executables, libraries,
7488 include files, and data files of the compiler itself.
7489
7490 The compiler driver program runs one or more of the subprograms
7491 cpp, cc1, as and ld. It tries prefix as a prefix for each program
7492 it tries to run, both with and without machine/version/.
7493
7494 For each subprogram to be run, the compiler driver first tries the
7495 -B prefix, if any. If that name is not found, or if -B was not
7496 specified, the driver tries two standard prefixes, which are
7497 /usr/lib/gcc/ and /usr/local/lib/gcc/. If neither of those results
7498 in a file name that is found, the unmodified program name is
7499 searched for using the directories specified in your PATH
7500 environment variable.
7501
7502 The compiler will check to see if the path provided by the -B
7503 refers to a directory, and if necessary it will add a directory
7504 separator character at the end of the path.
7505
7506 -B prefixes that effectively specify directory names also apply to
7507 libraries in the linker, because the compiler translates these
7508 options into -L options for the linker. They also apply to
7509 includes files in the preprocessor, because the compiler translates
7510 these options into -isystem options for the preprocessor. In this
7511 case, the compiler appends include to the prefix.
7512
7513 The run-time support file libgcc.a can also be searched for using
7514 the -B prefix, if needed. If it is not found there, the two
7515 standard prefixes above are tried, and that is all. The file is
7516 left out of the link if it is not found by those means.
7517
7518 Another way to specify a prefix much like the -B prefix is to use
7519 the environment variable GCC_EXEC_PREFIX.
7520
7521 As a special kludge, if the path provided by -B is [dir/]stageN/,
7522 where N is a number in the range 0 to 9, then it will be replaced
7523 by [dir/]include. This is to help with boot-strapping the
7524 compiler.
7525
7526 -specs=file
7527 Process file after the compiler reads in the standard specs file,
7528 in order to override the defaults that the gcc driver program uses
7529 when determining what switches to pass to cc1, cc1plus, as, ld,
7530 etc. More than one -specs=file can be specified on the command
7531 line, and they are processed in order, from left to right.
7532
7533 --sysroot=dir
7534 Use dir as the logical root directory for headers and libraries.
7535 For example, if the compiler would normally search for headers in
7536 /usr/include and libraries in /usr/lib, it will instead search
7537 dir/usr/include and dir/usr/lib.
7538
7539 If you use both this option and the -isysroot option, then the
7540 --sysroot option will apply to libraries, but the -isysroot option
7541 will apply to header files.
7542
7543 The GNU linker (beginning with version 2.16) has the necessary
7544 support for this option. If your linker does not support this
7545 option, the header file aspect of --sysroot will still work, but
7546 the library aspect will not.
7547
7548 -I- This option has been deprecated. Please use -iquote instead for -I
7549 directories before the -I- and remove the -I-. Any directories you
7550 specify with -I options before the -I- option are searched only for
7551 the case of #include "file"; they are not searched for #include
7552 <file>.
7553
7554 If additional directories are specified with -I options after the
7555 -I-, these directories are searched for all #include directives.
7556 (Ordinarily all -I directories are used this way.)
7557
7558 In addition, the -I- option inhibits the use of the current
7559 directory (where the current input file came from) as the first
7560 search directory for #include "file". There is no way to override
7561 this effect of -I-. With -I. you can specify searching the
7562 directory which was current when the compiler was invoked. That is
7563 not exactly the same as what the preprocessor does by default, but
7564 it is often satisfactory.
7565
7566 -I- does not inhibit the use of the standard system directories for
7567 header files. Thus, -I- and -nostdinc are independent.
7568
7569 Specifying Target Machine and Compiler Version
7570 The usual way to run GCC is to run the executable called gcc, or
7571 <machine>-gcc when cross-compiling, or <machine>-gcc-<version> to run a
7572 version other than the one that was installed last. Sometimes this is
7573 inconvenient, so GCC provides options that will switch to another
7574 cross-compiler or version.
7575
7576 -b machine
7577 The argument machine specifies the target machine for compilation.
7578
7579 The value to use for machine is the same as was specified as the
7580 machine type when configuring GCC as a cross-compiler. For
7581 example, if a cross-compiler was configured with configure arm-elf,
7582 meaning to compile for an arm processor with elf binaries, then you
7583 would specify -b arm-elf to run that cross compiler. Because there
7584 are other options beginning with -b, the configuration must contain
7585 a hyphen, or -b alone should be one argument followed by the
7586 configuration in the next argument.
7587
7588 -V version
7589 The argument version specifies which version of GCC to run. This
7590 is useful when multiple versions are installed. For example,
7591 version might be 4.0, meaning to run GCC version 4.0.
7592
7593 The -V and -b options work by running the <machine>-gcc-<version>
7594 executable, so there's no real reason to use them if you can just run
7595 that directly.
7596
7597 Hardware Models and Configurations
7598 Earlier we discussed the standard option -b which chooses among
7599 different installed compilers for completely different target machines,
7600 such as VAX vs. 68000 vs. 80386.
7601
7602 In addition, each of these target machine types can have its own
7603 special options, starting with -m, to choose among various hardware
7604 models or configurations---for example, 68010 vs 68020, floating
7605 coprocessor or none. A single installed version of the compiler can
7606 compile for any model or configuration, according to the options
7607 specified.
7608
7609 Some configurations of the compiler also support additional special
7610 options, usually for compatibility with other compilers on the same
7611 platform.
7612
7613 ARC Options
7614 These options are defined for ARC implementations:
7615
7616 -EL Compile code for little endian mode. This is the default.
7617
7618 -EB Compile code for big endian mode.
7619
7620 -mmangle-cpu
7621 Prepend the name of the cpu to all public symbol names. In
7622 multiple-processor systems, there are many ARC variants with
7623 different instruction and register set characteristics. This flag
7624 prevents code compiled for one cpu to be linked with code compiled
7625 for another. No facility exists for handling variants that are
7626 "almost identical". This is an all or nothing option.
7627
7628 -mcpu=cpu
7629 Compile code for ARC variant cpu. Which variants are supported
7630 depend on the configuration. All variants support -mcpu=base, this
7631 is the default.
7632
7633 -mtext=text-section
7634 -mdata=data-section
7635 -mrodata=readonly-data-section
7636 Put functions, data, and readonly data in text-section, data-
7637 section, and readonly-data-section respectively by default. This
7638 can be overridden with the "section" attribute.
7639
7640 -mfix-cortex-m3-ldrd
7641 Some Cortex-M3 cores can cause data corruption when "ldrd"
7642 instructions with overlapping destination and base registers are
7643 used. This option avoids generating these instructions. This
7644 option is enabled by default when -mcpu=cortex-m3 is specified.
7645
7646 ARM Options
7647 These -m options are defined for Advanced RISC Machines (ARM)
7648 architectures:
7649
7650 -mabi=name
7651 Generate code for the specified ABI. Permissible values are: apcs-
7652 gnu, atpcs, aapcs, aapcs-linux and iwmmxt.
7653
7654 -mapcs-frame
7655 Generate a stack frame that is compliant with the ARM Procedure
7656 Call Standard for all functions, even if this is not strictly
7657 necessary for correct execution of the code. Specifying
7658 -fomit-frame-pointer with this option will cause the stack frames
7659 not to be generated for leaf functions. The default is
7660 -mno-apcs-frame.
7661
7662 -mapcs
7663 This is a synonym for -mapcs-frame.
7664
7665 -mthumb-interwork
7666 Generate code which supports calling between the ARM and Thumb
7667 instruction sets. Without this option the two instruction sets
7668 cannot be reliably used inside one program. The default is
7669 -mno-thumb-interwork, since slightly larger code is generated when
7670 -mthumb-interwork is specified.
7671
7672 -mno-sched-prolog
7673 Prevent the reordering of instructions in the function prolog, or
7674 the merging of those instruction with the instructions in the
7675 function's body. This means that all functions will start with a
7676 recognizable set of instructions (or in fact one of a choice from a
7677 small set of different function prologues), and this information
7678 can be used to locate the start if functions inside an executable
7679 piece of code. The default is -msched-prolog.
7680
7681 -mfloat-abi=name
7682 Specifies which floating-point ABI to use. Permissible values are:
7683 soft, softfp and hard.
7684
7685 Specifying soft causes GCC to generate output containing library
7686 calls for floating-point operations. softfp allows the generation
7687 of code using hardware floating-point instructions, but still uses
7688 the soft-float calling conventions. hard allows generation of
7689 floating-point instructions and uses FPU-specific calling
7690 conventions.
7691
7692 Using -mfloat-abi=hard with VFP coprocessors is not supported. Use
7693 -mfloat-abi=softfp with the appropriate -mfpu option to allow the
7694 compiler to generate code that makes use of the hardware floating-
7695 point capabilities for these CPUs.
7696
7697 The default depends on the specific target configuration. Note
7698 that the hard-float and soft-float ABIs are not link-compatible;
7699 you must compile your entire program with the same ABI, and link
7700 with a compatible set of libraries.
7701
7702 -mhard-float
7703 Equivalent to -mfloat-abi=hard.
7704
7705 -msoft-float
7706 Equivalent to -mfloat-abi=soft.
7707
7708 -mlittle-endian
7709 Generate code for a processor running in little-endian mode. This
7710 is the default for all standard configurations.
7711
7712 -mbig-endian
7713 Generate code for a processor running in big-endian mode; the
7714 default is to compile code for a little-endian processor.
7715
7716 -mwords-little-endian
7717 This option only applies when generating code for big-endian
7718 processors. Generate code for a little-endian word order but a
7719 big-endian byte order. That is, a byte order of the form 32107654.
7720 Note: this option should only be used if you require compatibility
7721 with code for big-endian ARM processors generated by versions of
7722 the compiler prior to 2.8.
7723
7724 -mcpu=name
7725 This specifies the name of the target ARM processor. GCC uses this
7726 name to determine what kind of instructions it can emit when
7727 generating assembly code. Permissible names are: arm2, arm250,
7728 arm3, arm6, arm60, arm600, arm610, arm620, arm7, arm7m, arm7d,
7729 arm7dm, arm7di, arm7dmi, arm70, arm700, arm700i, arm710, arm710c,
7730 arm7100, arm720, arm7500, arm7500fe, arm7tdmi, arm7tdmi-s, arm710t,
7731 arm720t, arm740t, strongarm, strongarm110, strongarm1100,
7732 strongarm1110, arm8, arm810, arm9, arm9e, arm920, arm920t, arm922t,
7733 arm946e-s, arm966e-s, arm968e-s, arm926ej-s, arm940t, arm9tdmi,
7734 arm10tdmi, arm1020t, arm1026ej-s, arm10e, arm1020e, arm1022e,
7735 arm1136j-s, arm1136jf-s, mpcore, mpcorenovfp, arm1156t2-s,
7736 arm1176jz-s, arm1176jzf-s, cortex-a8, cortex-a9, cortex-r4,
7737 cortex-r4f, cortex-m3, cortex-m1, xscale, iwmmxt, iwmmxt2, ep9312.
7738
7739 -mtune=name
7740 This option is very similar to the -mcpu= option, except that
7741 instead of specifying the actual target processor type, and hence
7742 restricting which instructions can be used, it specifies that GCC
7743 should tune the performance of the code as if the target were of
7744 the type specified in this option, but still choosing the
7745 instructions that it will generate based on the cpu specified by a
7746 -mcpu= option. For some ARM implementations better performance can
7747 be obtained by using this option.
7748
7749 -march=name
7750 This specifies the name of the target ARM architecture. GCC uses
7751 this name to determine what kind of instructions it can emit when
7752 generating assembly code. This option can be used in conjunction
7753 with or instead of the -mcpu= option. Permissible names are:
7754 armv2, armv2a, armv3, armv3m, armv4, armv4t, armv5, armv5t, armv5e,
7755 armv5te, armv6, armv6j, armv6t2, armv6z, armv6zk, armv6-m, armv7,
7756 armv7-a, armv7-r, armv7-m, iwmmxt, iwmmxt2, ep9312.
7757
7758 -mfpu=name
7759 -mfpe=number
7760 -mfp=number
7761 This specifies what floating point hardware (or hardware emulation)
7762 is available on the target. Permissible names are: fpa, fpe2,
7763 fpe3, maverick, vfp, vfpv3, vfpv3-d16 and neon. -mfp and -mfpe are
7764 synonyms for -mfpu=fpenumber, for compatibility with older versions
7765 of GCC.
7766
7767 If -msoft-float is specified this specifies the format of floating
7768 point values.
7769
7770 -mstructure-size-boundary=n
7771 The size of all structures and unions will be rounded up to a
7772 multiple of the number of bits set by this option. Permissible
7773 values are 8, 32 and 64. The default value varies for different
7774 toolchains. For the COFF targeted toolchain the default value is
7775 8. A value of 64 is only allowed if the underlying ABI supports
7776 it.
7777
7778 Specifying the larger number can produce faster, more efficient
7779 code, but can also increase the size of the program. Different
7780 values are potentially incompatible. Code compiled with one value
7781 cannot necessarily expect to work with code or libraries compiled
7782 with another value, if they exchange information using structures
7783 or unions.
7784
7785 -mabort-on-noreturn
7786 Generate a call to the function "abort" at the end of a "noreturn"
7787 function. It will be executed if the function tries to return.
7788
7789 -mlong-calls
7790 -mno-long-calls
7791 Tells the compiler to perform function calls by first loading the
7792 address of the function into a register and then performing a
7793 subroutine call on this register. This switch is needed if the
7794 target function will lie outside of the 64 megabyte addressing
7795 range of the offset based version of subroutine call instruction.
7796
7797 Even if this switch is enabled, not all function calls will be
7798 turned into long calls. The heuristic is that static functions,
7799 functions which have the short-call attribute, functions that are
7800 inside the scope of a #pragma no_long_calls directive and functions
7801 whose definitions have already been compiled within the current
7802 compilation unit, will not be turned into long calls. The
7803 exception to this rule is that weak function definitions, functions
7804 with the long-call attribute or the section attribute, and
7805 functions that are within the scope of a #pragma long_calls
7806 directive, will always be turned into long calls.
7807
7808 This feature is not enabled by default. Specifying -mno-long-calls
7809 will restore the default behavior, as will placing the function
7810 calls within the scope of a #pragma long_calls_off directive. Note
7811 these switches have no effect on how the compiler generates code to
7812 handle function calls via function pointers.
7813
7814 -msingle-pic-base
7815 Treat the register used for PIC addressing as read-only, rather
7816 than loading it in the prologue for each function. The run-time
7817 system is responsible for initializing this register with an
7818 appropriate value before execution begins.
7819
7820 -mpic-register=reg
7821 Specify the register to be used for PIC addressing. The default is
7822 R10 unless stack-checking is enabled, when R9 is used.
7823
7824 -mcirrus-fix-invalid-insns
7825 Insert NOPs into the instruction stream to in order to work around
7826 problems with invalid Maverick instruction combinations. This
7827 option is only valid if the -mcpu=ep9312 option has been used to
7828 enable generation of instructions for the Cirrus Maverick floating
7829 point co-processor. This option is not enabled by default, since
7830 the problem is only present in older Maverick implementations. The
7831 default can be re-enabled by use of the
7832 -mno-cirrus-fix-invalid-insns switch.
7833
7834 -mpoke-function-name
7835 Write the name of each function into the text section, directly
7836 preceding the function prologue. The generated code is similar to
7837 this:
7838
7839 t0
7840 .ascii "arm_poke_function_name", 0
7841 .align
7842 t1
7843 .word 0xff000000 + (t1 - t0)
7844 arm_poke_function_name
7845 mov ip, sp
7846 stmfd sp!, {fp, ip, lr, pc}
7847 sub fp, ip, #4
7848
7849 When performing a stack backtrace, code can inspect the value of
7850 "pc" stored at "fp + 0". If the trace function then looks at
7851 location "pc - 12" and the top 8 bits are set, then we know that
7852 there is a function name embedded immediately preceding this
7853 location and has length "((pc[-3]) & 0xff000000)".
7854
7855 -mthumb
7856 Generate code for the Thumb instruction set. The default is to use
7857 the 32-bit ARM instruction set. This option automatically enables
7858 either 16-bit Thumb-1 or mixed 16/32-bit Thumb-2 instructions based
7859 on the -mcpu=name and -march=name options.
7860
7861 -mtpcs-frame
7862 Generate a stack frame that is compliant with the Thumb Procedure
7863 Call Standard for all non-leaf functions. (A leaf function is one
7864 that does not call any other functions.) The default is
7865 -mno-tpcs-frame.
7866
7867 -mtpcs-leaf-frame
7868 Generate a stack frame that is compliant with the Thumb Procedure
7869 Call Standard for all leaf functions. (A leaf function is one that
7870 does not call any other functions.) The default is
7871 -mno-apcs-leaf-frame.
7872
7873 -mcallee-super-interworking
7874 Gives all externally visible functions in the file being compiled
7875 an ARM instruction set header which switches to Thumb mode before
7876 executing the rest of the function. This allows these functions to
7877 be called from non-interworking code.
7878
7879 -mcaller-super-interworking
7880 Allows calls via function pointers (including virtual functions) to
7881 execute correctly regardless of whether the target code has been
7882 compiled for interworking or not. There is a small overhead in the
7883 cost of executing a function pointer if this option is enabled.
7884
7885 -mtp=name
7886 Specify the access model for the thread local storage pointer. The
7887 valid models are soft, which generates calls to "__aeabi_read_tp",
7888 cp15, which fetches the thread pointer from "cp15" directly
7889 (supported in the arm6k architecture), and auto, which uses the
7890 best available method for the selected processor. The default
7891 setting is auto.
7892
7893 -mword-relocations
7894 Only generate absolute relocations on word sized values (i.e.
7895 R_ARM_ABS32). This is enabled by default on targets (uClinux,
7896 SymbianOS) where the runtime loader imposes this restriction, and
7897 when -fpic or -fPIC is specified.
7898
7899 AVR Options
7900 These options are defined for AVR implementations:
7901
7902 -mmcu=mcu
7903 Specify ATMEL AVR instruction set or MCU type.
7904
7905 Instruction set avr1 is for the minimal AVR core, not supported by
7906 the C compiler, only for assembler programs (MCU types: at90s1200,
7907 attiny10, attiny11, attiny12, attiny15, attiny28).
7908
7909 Instruction set avr2 (default) is for the classic AVR core with up
7910 to 8K program memory space (MCU types: at90s2313, at90s2323,
7911 attiny22, at90s2333, at90s2343, at90s4414, at90s4433, at90s4434,
7912 at90s8515, at90c8534, at90s8535).
7913
7914 Instruction set avr3 is for the classic AVR core with up to 128K
7915 program memory space (MCU types: atmega103, atmega603, at43usb320,
7916 at76c711).
7917
7918 Instruction set avr4 is for the enhanced AVR core with up to 8K
7919 program memory space (MCU types: atmega8, atmega83, atmega85).
7920
7921 Instruction set avr5 is for the enhanced AVR core with up to 128K
7922 program memory space (MCU types: atmega16, atmega161, atmega163,
7923 atmega32, atmega323, atmega64, atmega128, at43usb355, at94k).
7924
7925 -msize
7926 Output instruction sizes to the asm file.
7927
7928 -mno-interrupts
7929 Generated code is not compatible with hardware interrupts. Code
7930 size will be smaller.
7931
7932 -mcall-prologues
7933 Functions prologues/epilogues expanded as call to appropriate
7934 subroutines. Code size will be smaller.
7935
7936 -mno-tablejump
7937 Do not generate tablejump insns which sometimes increase code size.
7938 The option is now deprecated in favor of the equivalent
7939 -fno-jump-tables
7940
7941 -mtiny-stack
7942 Change only the low 8 bits of the stack pointer.
7943
7944 -mint8
7945 Assume int to be 8 bit integer. This affects the sizes of all
7946 types: A char will be 1 byte, an int will be 1 byte, an long will
7947 be 2 bytes and long long will be 4 bytes. Please note that this
7948 option does not comply to the C standards, but it will provide you
7949 with smaller code size.
7950
7951 Blackfin Options
7952 -mcpu=cpu[-sirevision]
7953 Specifies the name of the target Blackfin processor. Currently,
7954 cpu can be one of bf512, bf514, bf516, bf518, bf522, bf523, bf524,
7955 bf525, bf526, bf527, bf531, bf532, bf533, bf534, bf536, bf537,
7956 bf538, bf539, bf542, bf544, bf547, bf548, bf549, bf561. The
7957 optional sirevision specifies the silicon revision of the target
7958 Blackfin processor. Any workarounds available for the targeted
7959 silicon revision will be enabled. If sirevision is none, no
7960 workarounds are enabled. If sirevision is any, all workarounds for
7961 the targeted processor will be enabled. The "__SILICON_REVISION__"
7962 macro is defined to two hexadecimal digits representing the major
7963 and minor numbers in the silicon revision. If sirevision is none,
7964 the "__SILICON_REVISION__" is not defined. If sirevision is any,
7965 the "__SILICON_REVISION__" is defined to be 0xffff. If this
7966 optional sirevision is not used, GCC assumes the latest known
7967 silicon revision of the targeted Blackfin processor.
7968
7969 Support for bf561 is incomplete. For bf561, Only the processor
7970 macro is defined. Without this option, bf532 is used as the
7971 processor by default. The corresponding predefined processor
7972 macros for cpu is to be defined. And for bfin-elf toolchain, this
7973 causes the hardware BSP provided by libgloss to be linked in if
7974 -msim is not given.
7975
7976 -msim
7977 Specifies that the program will be run on the simulator. This
7978 causes the simulator BSP provided by libgloss to be linked in.
7979 This option has effect only for bfin-elf toolchain. Certain other
7980 options, such as -mid-shared-library and -mfdpic, imply -msim.
7981
7982 -momit-leaf-frame-pointer
7983 Don't keep the frame pointer in a register for leaf functions.
7984 This avoids the instructions to save, set up and restore frame
7985 pointers and makes an extra register available in leaf functions.
7986 The option -fomit-frame-pointer removes the frame pointer for all
7987 functions which might make debugging harder.
7988
7989 -mspecld-anomaly
7990 When enabled, the compiler will ensure that the generated code does
7991 not contain speculative loads after jump instructions. If this
7992 option is used, "__WORKAROUND_SPECULATIVE_LOADS" is defined.
7993
7994 -mno-specld-anomaly
7995 Don't generate extra code to prevent speculative loads from
7996 occurring.
7997
7998 -mcsync-anomaly
7999 When enabled, the compiler will ensure that the generated code does
8000 not contain CSYNC or SSYNC instructions too soon after conditional
8001 branches. If this option is used, "__WORKAROUND_SPECULATIVE_SYNCS"
8002 is defined.
8003
8004 -mno-csync-anomaly
8005 Don't generate extra code to prevent CSYNC or SSYNC instructions
8006 from occurring too soon after a conditional branch.
8007
8008 -mlow-64k
8009 When enabled, the compiler is free to take advantage of the
8010 knowledge that the entire program fits into the low 64k of memory.
8011
8012 -mno-low-64k
8013 Assume that the program is arbitrarily large. This is the default.
8014
8015 -mstack-check-l1
8016 Do stack checking using information placed into L1 scratchpad
8017 memory by the uClinux kernel.
8018
8019 -mid-shared-library
8020 Generate code that supports shared libraries via the library ID
8021 method. This allows for execute in place and shared libraries in
8022 an environment without virtual memory management. This option
8023 implies -fPIC. With a bfin-elf target, this option implies -msim.
8024
8025 -mno-id-shared-library
8026 Generate code that doesn't assume ID based shared libraries are
8027 being used. This is the default.
8028
8029 -mleaf-id-shared-library
8030 Generate code that supports shared libraries via the library ID
8031 method, but assumes that this library or executable won't link
8032 against any other ID shared libraries. That allows the compiler to
8033 use faster code for jumps and calls.
8034
8035 -mno-leaf-id-shared-library
8036 Do not assume that the code being compiled won't link against any
8037 ID shared libraries. Slower code will be generated for jump and
8038 call insns.
8039
8040 -mshared-library-id=n
8041 Specified the identification number of the ID based shared library
8042 being compiled. Specifying a value of 0 will generate more compact
8043 code, specifying other values will force the allocation of that
8044 number to the current library but is no more space or time
8045 efficient than omitting this option.
8046
8047 -msep-data
8048 Generate code that allows the data segment to be located in a
8049 different area of memory from the text segment. This allows for
8050 execute in place in an environment without virtual memory
8051 management by eliminating relocations against the text section.
8052
8053 -mno-sep-data
8054 Generate code that assumes that the data segment follows the text
8055 segment. This is the default.
8056
8057 -mlong-calls
8058 -mno-long-calls
8059 Tells the compiler to perform function calls by first loading the
8060 address of the function into a register and then performing a
8061 subroutine call on this register. This switch is needed if the
8062 target function will lie outside of the 24 bit addressing range of
8063 the offset based version of subroutine call instruction.
8064
8065 This feature is not enabled by default. Specifying -mno-long-calls
8066 will restore the default behavior. Note these switches have no
8067 effect on how the compiler generates code to handle function calls
8068 via function pointers.
8069
8070 -mfast-fp
8071 Link with the fast floating-point library. This library relaxes
8072 some of the IEEE floating-point standard's rules for checking
8073 inputs against Not-a-Number (NAN), in the interest of performance.
8074
8075 -minline-plt
8076 Enable inlining of PLT entries in function calls to functions that
8077 are not known to bind locally. It has no effect without -mfdpic.
8078
8079 -mmulticore
8080 Build standalone application for multicore Blackfin processor.
8081 Proper start files and link scripts will be used to support
8082 multicore. This option defines "__BFIN_MULTICORE". It can only be
8083 used with -mcpu=bf561[-sirevision]. It can be used with -mcorea or
8084 -mcoreb. If it's used without -mcorea or -mcoreb, single
8085 application/dual core programming model is used. In this model, the
8086 main function of Core B should be named as coreb_main. If it's used
8087 with -mcorea or -mcoreb, one application per core programming model
8088 is used. If this option is not used, single core application
8089 programming model is used.
8090
8091 -mcorea
8092 Build standalone application for Core A of BF561 when using one
8093 application per core programming model. Proper start files and link
8094 scripts will be used to support Core A. This option defines
8095 "__BFIN_COREA". It must be used with -mmulticore.
8096
8097 -mcoreb
8098 Build standalone application for Core B of BF561 when using one
8099 application per core programming model. Proper start files and link
8100 scripts will be used to support Core B. This option defines
8101 "__BFIN_COREB". When this option is used, coreb_main should be used
8102 instead of main. It must be used with -mmulticore.
8103
8104 -msdram
8105 Build standalone application for SDRAM. Proper start files and link
8106 scripts will be used to put the application into SDRAM. Loader
8107 should initialize SDRAM before loading the application into SDRAM.
8108 This option defines "__BFIN_SDRAM".
8109
8110 -micplb
8111 Assume that ICPLBs are enabled at runtime. This has an effect on
8112 certain anomaly workarounds. For Linux targets, the default is to
8113 assume ICPLBs are enabled; for standalone applications the default
8114 is off.
8115
8116 CRIS Options
8117 These options are defined specifically for the CRIS ports.
8118
8119 -march=architecture-type
8120 -mcpu=architecture-type
8121 Generate code for the specified architecture. The choices for
8122 architecture-type are v3, v8 and v10 for respectively ETRAX 4,
8123 ETRAX 100, and ETRAX 100 LX. Default is v0 except for cris-axis-
8124 linux-gnu, where the default is v10.
8125
8126 -mtune=architecture-type
8127 Tune to architecture-type everything applicable about the generated
8128 code, except for the ABI and the set of available instructions.
8129 The choices for architecture-type are the same as for
8130 -march=architecture-type.
8131
8132 -mmax-stack-frame=n
8133 Warn when the stack frame of a function exceeds n bytes.
8134
8135 -metrax4
8136 -metrax100
8137 The options -metrax4 and -metrax100 are synonyms for -march=v3 and
8138 -march=v8 respectively.
8139
8140 -mmul-bug-workaround
8141 -mno-mul-bug-workaround
8142 Work around a bug in the "muls" and "mulu" instructions for CPU
8143 models where it applies. This option is active by default.
8144
8145 -mpdebug
8146 Enable CRIS-specific verbose debug-related information in the
8147 assembly code. This option also has the effect to turn off the
8148 #NO_APP formatted-code indicator to the assembler at the beginning
8149 of the assembly file.
8150
8151 -mcc-init
8152 Do not use condition-code results from previous instruction; always
8153 emit compare and test instructions before use of condition codes.
8154
8155 -mno-side-effects
8156 Do not emit instructions with side-effects in addressing modes
8157 other than post-increment.
8158
8159 -mstack-align
8160 -mno-stack-align
8161 -mdata-align
8162 -mno-data-align
8163 -mconst-align
8164 -mno-const-align
8165 These options (no-options) arranges (eliminate arrangements) for
8166 the stack-frame, individual data and constants to be aligned for
8167 the maximum single data access size for the chosen CPU model. The
8168 default is to arrange for 32-bit alignment. ABI details such as
8169 structure layout are not affected by these options.
8170
8171 -m32-bit
8172 -m16-bit
8173 -m8-bit
8174 Similar to the stack- data- and const-align options above, these
8175 options arrange for stack-frame, writable data and constants to all
8176 be 32-bit, 16-bit or 8-bit aligned. The default is 32-bit
8177 alignment.
8178
8179 -mno-prologue-epilogue
8180 -mprologue-epilogue
8181 With -mno-prologue-epilogue, the normal function prologue and
8182 epilogue that sets up the stack-frame are omitted and no return
8183 instructions or return sequences are generated in the code. Use
8184 this option only together with visual inspection of the compiled
8185 code: no warnings or errors are generated when call-saved registers
8186 must be saved, or storage for local variable needs to be allocated.
8187
8188 -mno-gotplt
8189 -mgotplt
8190 With -fpic and -fPIC, don't generate (do generate) instruction
8191 sequences that load addresses for functions from the PLT part of
8192 the GOT rather than (traditional on other architectures) calls to
8193 the PLT. The default is -mgotplt.
8194
8195 -melf
8196 Legacy no-op option only recognized with the cris-axis-elf and
8197 cris-axis-linux-gnu targets.
8198
8199 -mlinux
8200 Legacy no-op option only recognized with the cris-axis-linux-gnu
8201 target.
8202
8203 -sim
8204 This option, recognized for the cris-axis-elf arranges to link with
8205 input-output functions from a simulator library. Code, initialized
8206 data and zero-initialized data are allocated consecutively.
8207
8208 -sim2
8209 Like -sim, but pass linker options to locate initialized data at
8210 0x40000000 and zero-initialized data at 0x80000000.
8211
8212 CRX Options
8213 These options are defined specifically for the CRX ports.
8214
8215 -mmac
8216 Enable the use of multiply-accumulate instructions. Disabled by
8217 default.
8218
8219 -mpush-args
8220 Push instructions will be used to pass outgoing arguments when
8221 functions are called. Enabled by default.
8222
8223 Darwin Options
8224 These options are defined for all architectures running the Darwin
8225 operating system.
8226
8227 FSF GCC on Darwin does not create "fat" object files; it will create an
8228 object file for the single architecture that it was built to target.
8229 Apple's GCC on Darwin does create "fat" files if multiple -arch options
8230 are used; it does so by running the compiler or linker multiple times
8231 and joining the results together with lipo.
8232
8233 The subtype of the file created (like ppc7400 or ppc970 or i686) is
8234 determined by the flags that specify the ISA that GCC is targetting,
8235 like -mcpu or -march. The -force_cpusubtype_ALL option can be used to
8236 override this.
8237
8238 The Darwin tools vary in their behavior when presented with an ISA
8239 mismatch. The assembler, as, will only permit instructions to be used
8240 that are valid for the subtype of the file it is generating, so you
8241 cannot put 64-bit instructions in an ppc750 object file. The linker
8242 for shared libraries, /usr/bin/libtool, will fail and print an error if
8243 asked to create a shared library with a less restrictive subtype than
8244 its input files (for instance, trying to put a ppc970 object file in a
8245 ppc7400 library). The linker for executables, ld, will quietly give
8246 the executable the most restrictive subtype of any of its input files.
8247
8248 -Fdir
8249 Add the framework directory dir to the head of the list of
8250 directories to be searched for header files. These directories are
8251 interleaved with those specified by -I options and are scanned in a
8252 left-to-right order.
8253
8254 A framework directory is a directory with frameworks in it. A
8255 framework is a directory with a "Headers" and/or "PrivateHeaders"
8256 directory contained directly in it that ends in ".framework". The
8257 name of a framework is the name of this directory excluding the
8258 ".framework". Headers associated with the framework are found in
8259 one of those two directories, with "Headers" being searched first.
8260 A subframework is a framework directory that is in a framework's
8261 "Frameworks" directory. Includes of subframework headers can only
8262 appear in a header of a framework that contains the subframework,
8263 or in a sibling subframework header. Two subframeworks are
8264 siblings if they occur in the same framework. A subframework
8265 should not have the same name as a framework, a warning will be
8266 issued if this is violated. Currently a subframework cannot have
8267 subframeworks, in the future, the mechanism may be extended to
8268 support this. The standard frameworks can be found in
8269 "/System/Library/Frameworks" and "/Library/Frameworks". An example
8270 include looks like "#include <Framework/header.h>", where Framework
8271 denotes the name of the framework and header.h is found in the
8272 "PrivateHeaders" or "Headers" directory.
8273
8274 -iframeworkdir
8275 Like -F except the directory is a treated as a system directory.
8276 The main difference between this -iframework and -F is that with
8277 -iframework the compiler does not warn about constructs contained
8278 within header files found via dir. This option is valid only for
8279 the C family of languages.
8280
8281 -gused
8282 Emit debugging information for symbols that are used. For STABS
8283 debugging format, this enables -feliminate-unused-debug-symbols.
8284 This is by default ON.
8285
8286 -gfull
8287 Emit debugging information for all symbols and types.
8288
8289 -mmacosx-version-min=version
8290 The earliest version of MacOS X that this executable will run on is
8291 version. Typical values of version include 10.1, 10.2, and 10.3.9.
8292
8293 If the compiler was built to use the system's headers by default,
8294 then the default for this option is the system version on which the
8295 compiler is running, otherwise the default is to make choices which
8296 are compatible with as many systems and code bases as possible.
8297
8298 -mkernel
8299 Enable kernel development mode. The -mkernel option sets -static,
8300 -fno-common, -fno-cxa-atexit, -fno-exceptions,
8301 -fno-non-call-exceptions, -fapple-kext, -fno-weak and -fno-rtti
8302 where applicable. This mode also sets -mno-altivec, -msoft-float,
8303 -fno-builtin and -mlong-branch for PowerPC targets.
8304
8305 -mone-byte-bool
8306 Override the defaults for bool so that sizeof(bool)==1. By default
8307 sizeof(bool) is 4 when compiling for Darwin/PowerPC and 1 when
8308 compiling for Darwin/x86, so this option has no effect on x86.
8309
8310 Warning: The -mone-byte-bool switch causes GCC to generate code
8311 that is not binary compatible with code generated without that
8312 switch. Using this switch may require recompiling all other
8313 modules in a program, including system libraries. Use this switch
8314 to conform to a non-default data model.
8315
8316 -mfix-and-continue
8317 -ffix-and-continue
8318 -findirect-data
8319 Generate code suitable for fast turn around development. Needed to
8320 enable gdb to dynamically load ".o" files into already running
8321 programs. -findirect-data and -ffix-and-continue are provided for
8322 backwards compatibility.
8323
8324 -all_load
8325 Loads all members of static archive libraries. See man ld(1) for
8326 more information.
8327
8328 -arch_errors_fatal
8329 Cause the errors having to do with files that have the wrong
8330 architecture to be fatal.
8331
8332 -bind_at_load
8333 Causes the output file to be marked such that the dynamic linker
8334 will bind all undefined references when the file is loaded or
8335 launched.
8336
8337 -bundle
8338 Produce a Mach-o bundle format file. See man ld(1) for more
8339 information.
8340
8341 -bundle_loader executable
8342 This option specifies the executable that will be loading the build
8343 output file being linked. See man ld(1) for more information.
8344
8345 -dynamiclib
8346 When passed this option, GCC will produce a dynamic library instead
8347 of an executable when linking, using the Darwin libtool command.
8348
8349 -force_cpusubtype_ALL
8350 This causes GCC's output file to have the ALL subtype, instead of
8351 one controlled by the -mcpu or -march option.
8352
8353 -allowable_client client_name
8354 -client_name
8355 -compatibility_version
8356 -current_version
8357 -dead_strip
8358 -dependency-file
8359 -dylib_file
8360 -dylinker_install_name
8361 -dynamic
8362 -exported_symbols_list
8363 -filelist
8364 -flat_namespace
8365 -force_flat_namespace
8366 -headerpad_max_install_names
8367 -image_base
8368 -init
8369 -install_name
8370 -keep_private_externs
8371 -multi_module
8372 -multiply_defined
8373 -multiply_defined_unused
8374 -noall_load
8375 -no_dead_strip_inits_and_terms
8376 -nofixprebinding
8377 -nomultidefs
8378 -noprebind
8379 -noseglinkedit
8380 -pagezero_size
8381 -prebind
8382 -prebind_all_twolevel_modules
8383 -private_bundle
8384 -read_only_relocs
8385 -sectalign
8386 -sectobjectsymbols
8387 -whyload
8388 -seg1addr
8389 -sectcreate
8390 -sectobjectsymbols
8391 -sectorder
8392 -segaddr
8393 -segs_read_only_addr
8394 -segs_read_write_addr
8395 -seg_addr_table
8396 -seg_addr_table_filename
8397 -seglinkedit
8398 -segprot
8399 -segs_read_only_addr
8400 -segs_read_write_addr
8401 -single_module
8402 -static
8403 -sub_library
8404 -sub_umbrella
8405 -twolevel_namespace
8406 -umbrella
8407 -undefined
8408 -unexported_symbols_list
8409 -weak_reference_mismatches
8410 -whatsloaded
8411 These options are passed to the Darwin linker. The Darwin linker
8412 man page describes them in detail.
8413
8414 DEC Alpha Options
8415 These -m options are defined for the DEC Alpha implementations:
8416
8417 -mno-soft-float
8418 -msoft-float
8419 Use (do not use) the hardware floating-point instructions for
8420 floating-point operations. When -msoft-float is specified,
8421 functions in libgcc.a will be used to perform floating-point
8422 operations. Unless they are replaced by routines that emulate the
8423 floating-point operations, or compiled in such a way as to call
8424 such emulations routines, these routines will issue floating-point
8425 operations. If you are compiling for an Alpha without floating-
8426 point operations, you must ensure that the library is built so as
8427 not to call them.
8428
8429 Note that Alpha implementations without floating-point operations
8430 are required to have floating-point registers.
8431
8432 -mfp-reg
8433 -mno-fp-regs
8434 Generate code that uses (does not use) the floating-point register
8435 set. -mno-fp-regs implies -msoft-float. If the floating-point
8436 register set is not used, floating point operands are passed in
8437 integer registers as if they were integers and floating-point
8438 results are passed in $0 instead of $f0. This is a non-standard
8439 calling sequence, so any function with a floating-point argument or
8440 return value called by code compiled with -mno-fp-regs must also be
8441 compiled with that option.
8442
8443 A typical use of this option is building a kernel that does not
8444 use, and hence need not save and restore, any floating-point
8445 registers.
8446
8447 -mieee
8448 The Alpha architecture implements floating-point hardware optimized
8449 for maximum performance. It is mostly compliant with the IEEE
8450 floating point standard. However, for full compliance, software
8451 assistance is required. This option generates code fully IEEE
8452 compliant code except that the inexact-flag is not maintained (see
8453 below). If this option is turned on, the preprocessor macro
8454 "_IEEE_FP" is defined during compilation. The resulting code is
8455 less efficient but is able to correctly support denormalized
8456 numbers and exceptional IEEE values such as not-a-number and
8457 plus/minus infinity. Other Alpha compilers call this option
8458 -ieee_with_no_inexact.
8459
8460 -mieee-with-inexact
8461 This is like -mieee except the generated code also maintains the
8462 IEEE inexact-flag. Turning on this option causes the generated
8463 code to implement fully-compliant IEEE math. In addition to
8464 "_IEEE_FP", "_IEEE_FP_EXACT" is defined as a preprocessor macro.
8465 On some Alpha implementations the resulting code may execute
8466 significantly slower than the code generated by default. Since
8467 there is very little code that depends on the inexact-flag, you
8468 should normally not specify this option. Other Alpha compilers
8469 call this option -ieee_with_inexact.
8470
8471 -mfp-trap-mode=trap-mode
8472 This option controls what floating-point related traps are enabled.
8473 Other Alpha compilers call this option -fptm trap-mode. The trap
8474 mode can be set to one of four values:
8475
8476 n This is the default (normal) setting. The only traps that are
8477 enabled are the ones that cannot be disabled in software (e.g.,
8478 division by zero trap).
8479
8480 u In addition to the traps enabled by n, underflow traps are
8481 enabled as well.
8482
8483 su Like u, but the instructions are marked to be safe for software
8484 completion (see Alpha architecture manual for details).
8485
8486 sui Like su, but inexact traps are enabled as well.
8487
8488 -mfp-rounding-mode=rounding-mode
8489 Selects the IEEE rounding mode. Other Alpha compilers call this
8490 option -fprm rounding-mode. The rounding-mode can be one of:
8491
8492 n Normal IEEE rounding mode. Floating point numbers are rounded
8493 towards the nearest machine number or towards the even machine
8494 number in case of a tie.
8495
8496 m Round towards minus infinity.
8497
8498 c Chopped rounding mode. Floating point numbers are rounded
8499 towards zero.
8500
8501 d Dynamic rounding mode. A field in the floating point control
8502 register (fpcr, see Alpha architecture reference manual)
8503 controls the rounding mode in effect. The C library
8504 initializes this register for rounding towards plus infinity.
8505 Thus, unless your program modifies the fpcr, d corresponds to
8506 round towards plus infinity.
8507
8508 -mtrap-precision=trap-precision
8509 In the Alpha architecture, floating point traps are imprecise.
8510 This means without software assistance it is impossible to recover
8511 from a floating trap and program execution normally needs to be
8512 terminated. GCC can generate code that can assist operating system
8513 trap handlers in determining the exact location that caused a
8514 floating point trap. Depending on the requirements of an
8515 application, different levels of precisions can be selected:
8516
8517 p Program precision. This option is the default and means a trap
8518 handler can only identify which program caused a floating point
8519 exception.
8520
8521 f Function precision. The trap handler can determine the
8522 function that caused a floating point exception.
8523
8524 i Instruction precision. The trap handler can determine the
8525 exact instruction that caused a floating point exception.
8526
8527 Other Alpha compilers provide the equivalent options called
8528 -scope_safe and -resumption_safe.
8529
8530 -mieee-conformant
8531 This option marks the generated code as IEEE conformant. You must
8532 not use this option unless you also specify -mtrap-precision=i and
8533 either -mfp-trap-mode=su or -mfp-trap-mode=sui. Its only effect is
8534 to emit the line .eflag 48 in the function prologue of the
8535 generated assembly file. Under DEC Unix, this has the effect that
8536 IEEE-conformant math library routines will be linked in.
8537
8538 -mbuild-constants
8539 Normally GCC examines a 32- or 64-bit integer constant to see if it
8540 can construct it from smaller constants in two or three
8541 instructions. If it cannot, it will output the constant as a
8542 literal and generate code to load it from the data segment at
8543 runtime.
8544
8545 Use this option to require GCC to construct all integer constants
8546 using code, even if it takes more instructions (the maximum is
8547 six).
8548
8549 You would typically use this option to build a shared library
8550 dynamic loader. Itself a shared library, it must relocate itself
8551 in memory before it can find the variables and constants in its own
8552 data segment.
8553
8554 -malpha-as
8555 -mgas
8556 Select whether to generate code to be assembled by the vendor-
8557 supplied assembler (-malpha-as) or by the GNU assembler -mgas.
8558
8559 -mbwx
8560 -mno-bwx
8561 -mcix
8562 -mno-cix
8563 -mfix
8564 -mno-fix
8565 -mmax
8566 -mno-max
8567 Indicate whether GCC should generate code to use the optional BWX,
8568 CIX, FIX and MAX instruction sets. The default is to use the
8569 instruction sets supported by the CPU type specified via -mcpu=
8570 option or that of the CPU on which GCC was built if none was
8571 specified.
8572
8573 -mfloat-vax
8574 -mfloat-ieee
8575 Generate code that uses (does not use) VAX F and G floating point
8576 arithmetic instead of IEEE single and double precision.
8577
8578 -mexplicit-relocs
8579 -mno-explicit-relocs
8580 Older Alpha assemblers provided no way to generate symbol
8581 relocations except via assembler macros. Use of these macros does
8582 not allow optimal instruction scheduling. GNU binutils as of
8583 version 2.12 supports a new syntax that allows the compiler to
8584 explicitly mark which relocations should apply to which
8585 instructions. This option is mostly useful for debugging, as GCC
8586 detects the capabilities of the assembler when it is built and sets
8587 the default accordingly.
8588
8589 -msmall-data
8590 -mlarge-data
8591 When -mexplicit-relocs is in effect, static data is accessed via
8592 gp-relative relocations. When -msmall-data is used, objects 8
8593 bytes long or smaller are placed in a small data area (the ".sdata"
8594 and ".sbss" sections) and are accessed via 16-bit relocations off
8595 of the $gp register. This limits the size of the small data area
8596 to 64KB, but allows the variables to be directly accessed via a
8597 single instruction.
8598
8599 The default is -mlarge-data. With this option the data area is
8600 limited to just below 2GB. Programs that require more than 2GB of
8601 data must use "malloc" or "mmap" to allocate the data in the heap
8602 instead of in the program's data segment.
8603
8604 When generating code for shared libraries, -fpic implies
8605 -msmall-data and -fPIC implies -mlarge-data.
8606
8607 -msmall-text
8608 -mlarge-text
8609 When -msmall-text is used, the compiler assumes that the code of
8610 the entire program (or shared library) fits in 4MB, and is thus
8611 reachable with a branch instruction. When -msmall-data is used,
8612 the compiler can assume that all local symbols share the same $gp
8613 value, and thus reduce the number of instructions required for a
8614 function call from 4 to 1.
8615
8616 The default is -mlarge-text.
8617
8618 -mcpu=cpu_type
8619 Set the instruction set and instruction scheduling parameters for
8620 machine type cpu_type. You can specify either the EV style name or
8621 the corresponding chip number. GCC supports scheduling parameters
8622 for the EV4, EV5 and EV6 family of processors and will choose the
8623 default values for the instruction set from the processor you
8624 specify. If you do not specify a processor type, GCC will default
8625 to the processor on which the compiler was built.
8626
8627 Supported values for cpu_type are
8628
8629 ev4
8630 ev45
8631 21064
8632 Schedules as an EV4 and has no instruction set extensions.
8633
8634 ev5
8635 21164
8636 Schedules as an EV5 and has no instruction set extensions.
8637
8638 ev56
8639 21164a
8640 Schedules as an EV5 and supports the BWX extension.
8641
8642 pca56
8643 21164pc
8644 21164PC
8645 Schedules as an EV5 and supports the BWX and MAX extensions.
8646
8647 ev6
8648 21264
8649 Schedules as an EV6 and supports the BWX, FIX, and MAX
8650 extensions.
8651
8652 ev67
8653 21264a
8654 Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX
8655 extensions.
8656
8657 Native Linux/GNU toolchains also support the value native, which
8658 selects the best architecture option for the host processor.
8659 -mcpu=native has no effect if GCC does not recognize the processor.
8660
8661 -mtune=cpu_type
8662 Set only the instruction scheduling parameters for machine type
8663 cpu_type. The instruction set is not changed.
8664
8665 Native Linux/GNU toolchains also support the value native, which
8666 selects the best architecture option for the host processor.
8667 -mtune=native has no effect if GCC does not recognize the
8668 processor.
8669
8670 -mmemory-latency=time
8671 Sets the latency the scheduler should assume for typical memory
8672 references as seen by the application. This number is highly
8673 dependent on the memory access patterns used by the application and
8674 the size of the external cache on the machine.
8675
8676 Valid options for time are
8677
8678 number
8679 A decimal number representing clock cycles.
8680
8681 L1
8682 L2
8683 L3
8684 main
8685 The compiler contains estimates of the number of clock cycles
8686 for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches
8687 (also called Dcache, Scache, and Bcache), as well as to main
8688 memory. Note that L3 is only valid for EV5.
8689
8690 DEC Alpha/VMS Options
8691 These -m options are defined for the DEC Alpha/VMS implementations:
8692
8693 -mvms-return-codes
8694 Return VMS condition codes from main. The default is to return
8695 POSIX style condition (e.g. error) codes.
8696
8697 FR30 Options
8698 These options are defined specifically for the FR30 port.
8699
8700 -msmall-model
8701 Use the small address space model. This can produce smaller code,
8702 but it does assume that all symbolic values and addresses will fit
8703 into a 20-bit range.
8704
8705 -mno-lsim
8706 Assume that run-time support has been provided and so there is no
8707 need to include the simulator library (libsim.a) on the linker
8708 command line.
8709
8710 FRV Options
8711 -mgpr-32
8712 Only use the first 32 general purpose registers.
8713
8714 -mgpr-64
8715 Use all 64 general purpose registers.
8716
8717 -mfpr-32
8718 Use only the first 32 floating point registers.
8719
8720 -mfpr-64
8721 Use all 64 floating point registers
8722
8723 -mhard-float
8724 Use hardware instructions for floating point operations.
8725
8726 -msoft-float
8727 Use library routines for floating point operations.
8728
8729 -malloc-cc
8730 Dynamically allocate condition code registers.
8731
8732 -mfixed-cc
8733 Do not try to dynamically allocate condition code registers, only
8734 use "icc0" and "fcc0".
8735
8736 -mdword
8737 Change ABI to use double word insns.
8738
8739 -mno-dword
8740 Do not use double word instructions.
8741
8742 -mdouble
8743 Use floating point double instructions.
8744
8745 -mno-double
8746 Do not use floating point double instructions.
8747
8748 -mmedia
8749 Use media instructions.
8750
8751 -mno-media
8752 Do not use media instructions.
8753
8754 -mmuladd
8755 Use multiply and add/subtract instructions.
8756
8757 -mno-muladd
8758 Do not use multiply and add/subtract instructions.
8759
8760 -mfdpic
8761 Select the FDPIC ABI, that uses function descriptors to represent
8762 pointers to functions. Without any PIC/PIE-related options, it
8763 implies -fPIE. With -fpic or -fpie, it assumes GOT entries and
8764 small data are within a 12-bit range from the GOT base address;
8765 with -fPIC or -fPIE, GOT offsets are computed with 32 bits. With a
8766 bfin-elf target, this option implies -msim.
8767
8768 -minline-plt
8769 Enable inlining of PLT entries in function calls to functions that
8770 are not known to bind locally. It has no effect without -mfdpic.
8771 It's enabled by default if optimizing for speed and compiling for
8772 shared libraries (i.e., -fPIC or -fpic), or when an optimization
8773 option such as -O3 or above is present in the command line.
8774
8775 -mTLS
8776 Assume a large TLS segment when generating thread-local code.
8777
8778 -mtls
8779 Do not assume a large TLS segment when generating thread-local
8780 code.
8781
8782 -mgprel-ro
8783 Enable the use of "GPREL" relocations in the FDPIC ABI for data
8784 that is known to be in read-only sections. It's enabled by
8785 default, except for -fpic or -fpie: even though it may help make
8786 the global offset table smaller, it trades 1 instruction for 4.
8787 With -fPIC or -fPIE, it trades 3 instructions for 4, one of which
8788 may be shared by multiple symbols, and it avoids the need for a GOT
8789 entry for the referenced symbol, so it's more likely to be a win.
8790 If it is not, -mno-gprel-ro can be used to disable it.
8791
8792 -multilib-library-pic
8793 Link with the (library, not FD) pic libraries. It's implied by
8794 -mlibrary-pic, as well as by -fPIC and -fpic without -mfdpic. You
8795 should never have to use it explicitly.
8796
8797 -mlinked-fp
8798 Follow the EABI requirement of always creating a frame pointer
8799 whenever a stack frame is allocated. This option is enabled by
8800 default and can be disabled with -mno-linked-fp.
8801
8802 -mlong-calls
8803 Use indirect addressing to call functions outside the current
8804 compilation unit. This allows the functions to be placed anywhere
8805 within the 32-bit address space.
8806
8807 -malign-labels
8808 Try to align labels to an 8-byte boundary by inserting nops into
8809 the previous packet. This option only has an effect when VLIW
8810 packing is enabled. It doesn't create new packets; it merely adds
8811 nops to existing ones.
8812
8813 -mlibrary-pic
8814 Generate position-independent EABI code.
8815
8816 -macc-4
8817 Use only the first four media accumulator registers.
8818
8819 -macc-8
8820 Use all eight media accumulator registers.
8821
8822 -mpack
8823 Pack VLIW instructions.
8824
8825 -mno-pack
8826 Do not pack VLIW instructions.
8827
8828 -mno-eflags
8829 Do not mark ABI switches in e_flags.
8830
8831 -mcond-move
8832 Enable the use of conditional-move instructions (default).
8833
8834 This switch is mainly for debugging the compiler and will likely be
8835 removed in a future version.
8836
8837 -mno-cond-move
8838 Disable the use of conditional-move instructions.
8839
8840 This switch is mainly for debugging the compiler and will likely be
8841 removed in a future version.
8842
8843 -mscc
8844 Enable the use of conditional set instructions (default).
8845
8846 This switch is mainly for debugging the compiler and will likely be
8847 removed in a future version.
8848
8849 -mno-scc
8850 Disable the use of conditional set instructions.
8851
8852 This switch is mainly for debugging the compiler and will likely be
8853 removed in a future version.
8854
8855 -mcond-exec
8856 Enable the use of conditional execution (default).
8857
8858 This switch is mainly for debugging the compiler and will likely be
8859 removed in a future version.
8860
8861 -mno-cond-exec
8862 Disable the use of conditional execution.
8863
8864 This switch is mainly for debugging the compiler and will likely be
8865 removed in a future version.
8866
8867 -mvliw-branch
8868 Run a pass to pack branches into VLIW instructions (default).
8869
8870 This switch is mainly for debugging the compiler and will likely be
8871 removed in a future version.
8872
8873 -mno-vliw-branch
8874 Do not run a pass to pack branches into VLIW instructions.
8875
8876 This switch is mainly for debugging the compiler and will likely be
8877 removed in a future version.
8878
8879 -mmulti-cond-exec
8880 Enable optimization of "&&" and "||" in conditional execution
8881 (default).
8882
8883 This switch is mainly for debugging the compiler and will likely be
8884 removed in a future version.
8885
8886 -mno-multi-cond-exec
8887 Disable optimization of "&&" and "||" in conditional execution.
8888
8889 This switch is mainly for debugging the compiler and will likely be
8890 removed in a future version.
8891
8892 -mnested-cond-exec
8893 Enable nested conditional execution optimizations (default).
8894
8895 This switch is mainly for debugging the compiler and will likely be
8896 removed in a future version.
8897
8898 -mno-nested-cond-exec
8899 Disable nested conditional execution optimizations.
8900
8901 This switch is mainly for debugging the compiler and will likely be
8902 removed in a future version.
8903
8904 -moptimize-membar
8905 This switch removes redundant "membar" instructions from the
8906 compiler generated code. It is enabled by default.
8907
8908 -mno-optimize-membar
8909 This switch disables the automatic removal of redundant "membar"
8910 instructions from the generated code.
8911
8912 -mtomcat-stats
8913 Cause gas to print out tomcat statistics.
8914
8915 -mcpu=cpu
8916 Select the processor type for which to generate code. Possible
8917 values are frv, fr550, tomcat, fr500, fr450, fr405, fr400, fr300
8918 and simple.
8919
8920 GNU/Linux Options
8921 These -m options are defined for GNU/Linux targets:
8922
8923 -mglibc
8924 Use the GNU C library instead of uClibc. This is the default
8925 except on *-*-linux-*uclibc* targets.
8926
8927 -muclibc
8928 Use uClibc instead of the GNU C library. This is the default on
8929 *-*-linux-*uclibc* targets.
8930
8931 H8/300 Options
8932 These -m options are defined for the H8/300 implementations:
8933
8934 -mrelax
8935 Shorten some address references at link time, when possible; uses
8936 the linker option -relax.
8937
8938 -mh Generate code for the H8/300H.
8939
8940 -ms Generate code for the H8S.
8941
8942 -mn Generate code for the H8S and H8/300H in the normal mode. This
8943 switch must be used either with -mh or -ms.
8944
8945 -ms2600
8946 Generate code for the H8S/2600. This switch must be used with -ms.
8947
8948 -mint32
8949 Make "int" data 32 bits by default.
8950
8951 -malign-300
8952 On the H8/300H and H8S, use the same alignment rules as for the
8953 H8/300. The default for the H8/300H and H8S is to align longs and
8954 floats on 4 byte boundaries. -malign-300 causes them to be aligned
8955 on 2 byte boundaries. This option has no effect on the H8/300.
8956
8957 HPPA Options
8958 These -m options are defined for the HPPA family of computers:
8959
8960 -march=architecture-type
8961 Generate code for the specified architecture. The choices for
8962 architecture-type are 1.0 for PA 1.0, 1.1 for PA 1.1, and 2.0 for
8963 PA 2.0 processors. Refer to /usr/lib/sched.models on an HP-UX
8964 system to determine the proper architecture option for your
8965 machine. Code compiled for lower numbered architectures will run
8966 on higher numbered architectures, but not the other way around.
8967
8968 -mpa-risc-1-0
8969 -mpa-risc-1-1
8970 -mpa-risc-2-0
8971 Synonyms for -march=1.0, -march=1.1, and -march=2.0 respectively.
8972
8973 -mbig-switch
8974 Generate code suitable for big switch tables. Use this option only
8975 if the assembler/linker complain about out of range branches within
8976 a switch table.
8977
8978 -mjump-in-delay
8979 Fill delay slots of function calls with unconditional jump
8980 instructions by modifying the return pointer for the function call
8981 to be the target of the conditional jump.
8982
8983 -mdisable-fpregs
8984 Prevent floating point registers from being used in any manner.
8985 This is necessary for compiling kernels which perform lazy context
8986 switching of floating point registers. If you use this option and
8987 attempt to perform floating point operations, the compiler will
8988 abort.
8989
8990 -mdisable-indexing
8991 Prevent the compiler from using indexing address modes. This
8992 avoids some rather obscure problems when compiling MIG generated
8993 code under MACH.
8994
8995 -mno-space-regs
8996 Generate code that assumes the target has no space registers. This
8997 allows GCC to generate faster indirect calls and use unscaled index
8998 address modes.
8999
9000 Such code is suitable for level 0 PA systems and kernels.
9001
9002 -mfast-indirect-calls
9003 Generate code that assumes calls never cross space boundaries.
9004 This allows GCC to emit code which performs faster indirect calls.
9005
9006 This option will not work in the presence of shared libraries or
9007 nested functions.
9008
9009 -mfixed-range=register-range
9010 Generate code treating the given register range as fixed registers.
9011 A fixed register is one that the register allocator can not use.
9012 This is useful when compiling kernel code. A register range is
9013 specified as two registers separated by a dash. Multiple register
9014 ranges can be specified separated by a comma.
9015
9016 -mlong-load-store
9017 Generate 3-instruction load and store sequences as sometimes
9018 required by the HP-UX 10 linker. This is equivalent to the +k
9019 option to the HP compilers.
9020
9021 -mportable-runtime
9022 Use the portable calling conventions proposed by HP for ELF
9023 systems.
9024
9025 -mgas
9026 Enable the use of assembler directives only GAS understands.
9027
9028 -mschedule=cpu-type
9029 Schedule code according to the constraints for the machine type
9030 cpu-type. The choices for cpu-type are 700 7100, 7100LC, 7200,
9031 7300 and 8000. Refer to /usr/lib/sched.models on an HP-UX system
9032 to determine the proper scheduling option for your machine. The
9033 default scheduling is 8000.
9034
9035 -mlinker-opt
9036 Enable the optimization pass in the HP-UX linker. Note this makes
9037 symbolic debugging impossible. It also triggers a bug in the HP-UX
9038 8 and HP-UX 9 linkers in which they give bogus error messages when
9039 linking some programs.
9040
9041 -msoft-float
9042 Generate output containing library calls for floating point.
9043 Warning: the requisite libraries are not available for all HPPA
9044 targets. Normally the facilities of the machine's usual C compiler
9045 are used, but this cannot be done directly in cross-compilation.
9046 You must make your own arrangements to provide suitable library
9047 functions for cross-compilation.
9048
9049 -msoft-float changes the calling convention in the output file;
9050 therefore, it is only useful if you compile all of a program with
9051 this option. In particular, you need to compile libgcc.a, the
9052 library that comes with GCC, with -msoft-float in order for this to
9053 work.
9054
9055 -msio
9056 Generate the predefine, "_SIO", for server IO. The default is
9057 -mwsio. This generates the predefines, "__hp9000s700",
9058 "__hp9000s700__" and "_WSIO", for workstation IO. These options
9059 are available under HP-UX and HI-UX.
9060
9061 -mgnu-ld
9062 Use GNU ld specific options. This passes -shared to ld when
9063 building a shared library. It is the default when GCC is
9064 configured, explicitly or implicitly, with the GNU linker. This
9065 option does not have any affect on which ld is called, it only
9066 changes what parameters are passed to that ld. The ld that is
9067 called is determined by the --with-ld configure option, GCC's
9068 program search path, and finally by the user's PATH. The linker
9069 used by GCC can be printed using which `gcc -print-prog-name=ld`.
9070 This option is only available on the 64 bit HP-UX GCC, i.e.
9071 configured with hppa*64*-*-hpux*.
9072
9073 -mhp-ld
9074 Use HP ld specific options. This passes -b to ld when building a
9075 shared library and passes +Accept TypeMismatch to ld on all links.
9076 It is the default when GCC is configured, explicitly or implicitly,
9077 with the HP linker. This option does not have any affect on which
9078 ld is called, it only changes what parameters are passed to that
9079 ld. The ld that is called is determined by the --with-ld configure
9080 option, GCC's program search path, and finally by the user's PATH.
9081 The linker used by GCC can be printed using which `gcc
9082 -print-prog-name=ld`. This option is only available on the 64 bit
9083 HP-UX GCC, i.e. configured with hppa*64*-*-hpux*.
9084
9085 -mlong-calls
9086 Generate code that uses long call sequences. This ensures that a
9087 call is always able to reach linker generated stubs. The default
9088 is to generate long calls only when the distance from the call site
9089 to the beginning of the function or translation unit, as the case
9090 may be, exceeds a predefined limit set by the branch type being
9091 used. The limits for normal calls are 7,600,000 and 240,000 bytes,
9092 respectively for the PA 2.0 and PA 1.X architectures. Sibcalls are
9093 always limited at 240,000 bytes.
9094
9095 Distances are measured from the beginning of functions when using
9096 the -ffunction-sections option, or when using the -mgas and
9097 -mno-portable-runtime options together under HP-UX with the SOM
9098 linker.
9099
9100 It is normally not desirable to use this option as it will degrade
9101 performance. However, it may be useful in large applications,
9102 particularly when partial linking is used to build the application.
9103
9104 The types of long calls used depends on the capabilities of the
9105 assembler and linker, and the type of code being generated. The
9106 impact on systems that support long absolute calls, and long pic
9107 symbol-difference or pc-relative calls should be relatively small.
9108 However, an indirect call is used on 32-bit ELF systems in pic code
9109 and it is quite long.
9110
9111 -munix=unix-std
9112 Generate compiler predefines and select a startfile for the
9113 specified UNIX standard. The choices for unix-std are 93, 95 and
9114 98. 93 is supported on all HP-UX versions. 95 is available on HP-
9115 UX 10.10 and later. 98 is available on HP-UX 11.11 and later. The
9116 default values are 93 for HP-UX 10.00, 95 for HP-UX 10.10 though to
9117 11.00, and 98 for HP-UX 11.11 and later.
9118
9119 -munix=93 provides the same predefines as GCC 3.3 and 3.4.
9120 -munix=95 provides additional predefines for "XOPEN_UNIX" and
9121 "_XOPEN_SOURCE_EXTENDED", and the startfile unix95.o. -munix=98
9122 provides additional predefines for "_XOPEN_UNIX",
9123 "_XOPEN_SOURCE_EXTENDED", "_INCLUDE__STDC_A1_SOURCE" and
9124 "_INCLUDE_XOPEN_SOURCE_500", and the startfile unix98.o.
9125
9126 It is important to note that this option changes the interfaces for
9127 various library routines. It also affects the operational behavior
9128 of the C library. Thus, extreme care is needed in using this
9129 option.
9130
9131 Library code that is intended to operate with more than one UNIX
9132 standard must test, set and restore the variable
9133 __xpg4_extended_mask as appropriate. Most GNU software doesn't
9134 provide this capability.
9135
9136 -nolibdld
9137 Suppress the generation of link options to search libdld.sl when
9138 the -static option is specified on HP-UX 10 and later.
9139
9140 -static
9141 The HP-UX implementation of setlocale in libc has a dependency on
9142 libdld.sl. There isn't an archive version of libdld.sl. Thus,
9143 when the -static option is specified, special link options are
9144 needed to resolve this dependency.
9145
9146 On HP-UX 10 and later, the GCC driver adds the necessary options to
9147 link with libdld.sl when the -static option is specified. This
9148 causes the resulting binary to be dynamic. On the 64-bit port, the
9149 linkers generate dynamic binaries by default in any case. The
9150 -nolibdld option can be used to prevent the GCC driver from adding
9151 these link options.
9152
9153 -threads
9154 Add support for multithreading with the dce thread library under
9155 HP-UX. This option sets flags for both the preprocessor and
9156 linker.
9157
9158 Intel 386 and AMD x86-64 Options
9159 These -m options are defined for the i386 and x86-64 family of
9160 computers:
9161
9162 -mtune=cpu-type
9163 Tune to cpu-type everything applicable about the generated code,
9164 except for the ABI and the set of available instructions. The
9165 choices for cpu-type are:
9166
9167 generic
9168 Produce code optimized for the most common IA32/AMD64/EM64T
9169 processors. If you know the CPU on which your code will run,
9170 then you should use the corresponding -mtune option instead of
9171 -mtune=generic. But, if you do not know exactly what CPU users
9172 of your application will have, then you should use this option.
9173
9174 As new processors are deployed in the marketplace, the behavior
9175 of this option will change. Therefore, if you upgrade to a
9176 newer version of GCC, the code generated option will change to
9177 reflect the processors that were most common when that version
9178 of GCC was released.
9179
9180 There is no -march=generic option because -march indicates the
9181 instruction set the compiler can use, and there is no generic
9182 instruction set applicable to all processors. In contrast,
9183 -mtune indicates the processor (or, in this case, collection of
9184 processors) for which the code is optimized.
9185
9186 native
9187 This selects the CPU to tune for at compilation time by
9188 determining the processor type of the compiling machine. Using
9189 -mtune=native will produce code optimized for the local machine
9190 under the constraints of the selected instruction set. Using
9191 -march=native will enable all instruction subsets supported by
9192 the local machine (hence the result might not run on different
9193 machines).
9194
9195 i386
9196 Original Intel's i386 CPU.
9197
9198 i486
9199 Intel's i486 CPU. (No scheduling is implemented for this
9200 chip.)
9201
9202 i586, pentium
9203 Intel Pentium CPU with no MMX support.
9204
9205 pentium-mmx
9206 Intel PentiumMMX CPU based on Pentium core with MMX instruction
9207 set support.
9208
9209 pentiumpro
9210 Intel PentiumPro CPU.
9211
9212 i686
9213 Same as "generic", but when used as "march" option, PentiumPro
9214 instruction set will be used, so the code will run on all i686
9215 family chips.
9216
9217 pentium2
9218 Intel Pentium2 CPU based on PentiumPro core with MMX
9219 instruction set support.
9220
9221 pentium3, pentium3m
9222 Intel Pentium3 CPU based on PentiumPro core with MMX and SSE
9223 instruction set support.
9224
9225 pentium-m
9226 Low power version of Intel Pentium3 CPU with MMX, SSE and SSE2
9227 instruction set support. Used by Centrino notebooks.
9228
9229 pentium4, pentium4m
9230 Intel Pentium4 CPU with MMX, SSE and SSE2 instruction set
9231 support.
9232
9233 prescott
9234 Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2 and
9235 SSE3 instruction set support.
9236
9237 nocona
9238 Improved version of Intel Pentium4 CPU with 64-bit extensions,
9239 MMX, SSE, SSE2 and SSE3 instruction set support.
9240
9241 core2
9242 Intel Core2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3
9243 and SSSE3 instruction set support.
9244
9245 k6 AMD K6 CPU with MMX instruction set support.
9246
9247 k6-2, k6-3
9248 Improved versions of AMD K6 CPU with MMX and 3dNOW! instruction
9249 set support.
9250
9251 athlon, athlon-tbird
9252 AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and SSE
9253 prefetch instructions support.
9254
9255 athlon-4, athlon-xp, athlon-mp
9256 Improved AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and
9257 full SSE instruction set support.
9258
9259 k8, opteron, athlon64, athlon-fx
9260 AMD K8 core based CPUs with x86-64 instruction set support.
9261 (This supersets MMX, SSE, SSE2, 3dNOW!, enhanced 3dNOW! and
9262 64-bit instruction set extensions.)
9263
9264 k8-sse3, opteron-sse3, athlon64-sse3
9265 Improved versions of k8, opteron and athlon64 with SSE3
9266 instruction set support.
9267
9268 amdfam10, barcelona
9269 AMD Family 10h core based CPUs with x86-64 instruction set
9270 support. (This supersets MMX, SSE, SSE2, SSE3, SSE4A, 3dNOW!,
9271 enhanced 3dNOW!, ABM and 64-bit instruction set extensions.)
9272
9273 winchip-c6
9274 IDT Winchip C6 CPU, dealt in same way as i486 with additional
9275 MMX instruction set support.
9276
9277 winchip2
9278 IDT Winchip2 CPU, dealt in same way as i486 with additional MMX
9279 and 3dNOW! instruction set support.
9280
9281 c3 Via C3 CPU with MMX and 3dNOW! instruction set support. (No
9282 scheduling is implemented for this chip.)
9283
9284 c3-2
9285 Via C3-2 CPU with MMX and SSE instruction set support. (No
9286 scheduling is implemented for this chip.)
9287
9288 geode
9289 Embedded AMD CPU with MMX and 3dNOW! instruction set support.
9290
9291 While picking a specific cpu-type will schedule things
9292 appropriately for that particular chip, the compiler will not
9293 generate any code that does not run on the i386 without the
9294 -march=cpu-type option being used.
9295
9296 -march=cpu-type
9297 Generate instructions for the machine type cpu-type. The choices
9298 for cpu-type are the same as for -mtune. Moreover, specifying
9299 -march=cpu-type implies -mtune=cpu-type.
9300
9301 -mcpu=cpu-type
9302 A deprecated synonym for -mtune.
9303
9304 -mfpmath=unit
9305 Generate floating point arithmetics for selected unit unit. The
9306 choices for unit are:
9307
9308 387 Use the standard 387 floating point coprocessor present
9309 majority of chips and emulated otherwise. Code compiled with
9310 this option will run almost everywhere. The temporary results
9311 are computed in 80bit precision instead of precision specified
9312 by the type resulting in slightly different results compared to
9313 most of other chips. See -ffloat-store for more detailed
9314 description.
9315
9316 This is the default choice for i386 compiler.
9317
9318 sse Use scalar floating point instructions present in the SSE
9319 instruction set. This instruction set is supported by Pentium3
9320 and newer chips, in the AMD line by Athlon-4, Athlon-xp and
9321 Athlon-mp chips. The earlier version of SSE instruction set
9322 supports only single precision arithmetics, thus the double and
9323 extended precision arithmetics is still done using 387. Later
9324 version, present only in Pentium4 and the future AMD x86-64
9325 chips supports double precision arithmetics too.
9326
9327 For the i386 compiler, you need to use -march=cpu-type, -msse
9328 or -msse2 switches to enable SSE extensions and make this
9329 option effective. For the x86-64 compiler, these extensions
9330 are enabled by default.
9331
9332 The resulting code should be considerably faster in the
9333 majority of cases and avoid the numerical instability problems
9334 of 387 code, but may break some existing code that expects
9335 temporaries to be 80bit.
9336
9337 This is the default choice for the x86-64 compiler.
9338
9339 sse,387
9340 sse+387
9341 both
9342 Attempt to utilize both instruction sets at once. This
9343 effectively double the amount of available registers and on
9344 chips with separate execution units for 387 and SSE the
9345 execution resources too. Use this option with care, as it is
9346 still experimental, because the GCC register allocator does not
9347 model separate functional units well resulting in instable
9348 performance.
9349
9350 -masm=dialect
9351 Output asm instructions using selected dialect. Supported choices
9352 are intel or att (the default one). Darwin does not support intel.
9353
9354 -mieee-fp
9355 -mno-ieee-fp
9356 Control whether or not the compiler uses IEEE floating point
9357 comparisons. These handle correctly the case where the result of a
9358 comparison is unordered.
9359
9360 -msoft-float
9361 Generate output containing library calls for floating point.
9362 Warning: the requisite libraries are not part of GCC. Normally the
9363 facilities of the machine's usual C compiler are used, but this
9364 can't be done directly in cross-compilation. You must make your
9365 own arrangements to provide suitable library functions for cross-
9366 compilation.
9367
9368 On machines where a function returns floating point results in the
9369 80387 register stack, some floating point opcodes may be emitted
9370 even if -msoft-float is used.
9371
9372 -mno-fp-ret-in-387
9373 Do not use the FPU registers for return values of functions.
9374
9375 The usual calling convention has functions return values of types
9376 "float" and "double" in an FPU register, even if there is no FPU.
9377 The idea is that the operating system should emulate an FPU.
9378
9379 The option -mno-fp-ret-in-387 causes such values to be returned in
9380 ordinary CPU registers instead.
9381
9382 -mno-fancy-math-387
9383 Some 387 emulators do not support the "sin", "cos" and "sqrt"
9384 instructions for the 387. Specify this option to avoid generating
9385 those instructions. This option is the default on FreeBSD, OpenBSD
9386 and NetBSD. This option is overridden when -march indicates that
9387 the target cpu will always have an FPU and so the instruction will
9388 not need emulation. As of revision 2.6.1, these instructions are
9389 not generated unless you also use the -funsafe-math-optimizations
9390 switch.
9391
9392 -malign-double
9393 -mno-align-double
9394 Control whether GCC aligns "double", "long double", and "long long"
9395 variables on a two word boundary or a one word boundary. Aligning
9396 "double" variables on a two word boundary will produce code that
9397 runs somewhat faster on a Pentium at the expense of more memory.
9398
9399 On x86-64, -malign-double is enabled by default.
9400
9401 Warning: if you use the -malign-double switch, structures
9402 containing the above types will be aligned differently than the
9403 published application binary interface specifications for the 386
9404 and will not be binary compatible with structures in code compiled
9405 without that switch.
9406
9407 -m96bit-long-double
9408 -m128bit-long-double
9409 These switches control the size of "long double" type. The i386
9410 application binary interface specifies the size to be 96 bits, so
9411 -m96bit-long-double is the default in 32 bit mode.
9412
9413 Modern architectures (Pentium and newer) would prefer "long double"
9414 to be aligned to an 8 or 16 byte boundary. In arrays or structures
9415 conforming to the ABI, this would not be possible. So specifying a
9416 -m128bit-long-double will align "long double" to a 16 byte boundary
9417 by padding the "long double" with an additional 32 bit zero.
9418
9419 In the x86-64 compiler, -m128bit-long-double is the default choice
9420 as its ABI specifies that "long double" is to be aligned on 16 byte
9421 boundary.
9422
9423 Notice that neither of these options enable any extra precision
9424 over the x87 standard of 80 bits for a "long double".
9425
9426 Warning: if you override the default value for your target ABI, the
9427 structures and arrays containing "long double" variables will
9428 change their size as well as function calling convention for
9429 function taking "long double" will be modified. Hence they will
9430 not be binary compatible with arrays or structures in code compiled
9431 without that switch.
9432
9433 -mlarge-data-threshold=number
9434 When -mcmodel=medium is specified, the data greater than threshold
9435 are placed in large data section. This value must be the same
9436 across all object linked into the binary and defaults to 65535.
9437
9438 -mrtd
9439 Use a different function-calling convention, in which functions
9440 that take a fixed number of arguments return with the "ret" num
9441 instruction, which pops their arguments while returning. This
9442 saves one instruction in the caller since there is no need to pop
9443 the arguments there.
9444
9445 You can specify that an individual function is called with this
9446 calling sequence with the function attribute stdcall. You can also
9447 override the -mrtd option by using the function attribute cdecl.
9448
9449 Warning: this calling convention is incompatible with the one
9450 normally used on Unix, so you cannot use it if you need to call
9451 libraries compiled with the Unix compiler.
9452
9453 Also, you must provide function prototypes for all functions that
9454 take variable numbers of arguments (including "printf"); otherwise
9455 incorrect code will be generated for calls to those functions.
9456
9457 In addition, seriously incorrect code will result if you call a
9458 function with too many arguments. (Normally, extra arguments are
9459 harmlessly ignored.)
9460
9461 -mregparm=num
9462 Control how many registers are used to pass integer arguments. By
9463 default, no registers are used to pass arguments, and at most 3
9464 registers can be used. You can control this behavior for a
9465 specific function by using the function attribute regparm.
9466
9467 Warning: if you use this switch, and num is nonzero, then you must
9468 build all modules with the same value, including any libraries.
9469 This includes the system libraries and startup modules.
9470
9471 -msseregparm
9472 Use SSE register passing conventions for float and double arguments
9473 and return values. You can control this behavior for a specific
9474 function by using the function attribute sseregparm.
9475
9476 Warning: if you use this switch then you must build all modules
9477 with the same value, including any libraries. This includes the
9478 system libraries and startup modules.
9479
9480 -mpc32
9481 -mpc64
9482 -mpc80
9483 Set 80387 floating-point precision to 32, 64 or 80 bits. When
9484 -mpc32 is specified, the significands of results of floating-point
9485 operations are rounded to 24 bits (single precision); -mpc64 rounds
9486 the significands of results of floating-point operations to 53 bits
9487 (double precision) and -mpc80 rounds the significands of results of
9488 floating-point operations to 64 bits (extended double precision),
9489 which is the default. When this option is used, floating-point
9490 operations in higher precisions are not available to the programmer
9491 without setting the FPU control word explicitly.
9492
9493 Setting the rounding of floating-point operations to less than the
9494 default 80 bits can speed some programs by 2% or more. Note that
9495 some mathematical libraries assume that extended precision (80 bit)
9496 floating-point operations are enabled by default; routines in such
9497 libraries could suffer significant loss of accuracy, typically
9498 through so-called "catastrophic cancellation", when this option is
9499 used to set the precision to less than extended precision.
9500
9501 -mstackrealign
9502 Realign the stack at entry. On the Intel x86, the -mstackrealign
9503 option will generate an alternate prologue and epilogue that
9504 realigns the runtime stack if necessary. This supports mixing
9505 legacy codes that keep a 4-byte aligned stack with modern codes
9506 that keep a 16-byte stack for SSE compatibility. See also the
9507 attribute "force_align_arg_pointer", applicable to individual
9508 functions.
9509
9510 -mpreferred-stack-boundary=num
9511 Attempt to keep the stack boundary aligned to a 2 raised to num
9512 byte boundary. If -mpreferred-stack-boundary is not specified, the
9513 default is 4 (16 bytes or 128 bits).
9514
9515 -mincoming-stack-boundary=num
9516 Assume the incoming stack is aligned to a 2 raised to num byte
9517 boundary. If -mincoming-stack-boundary is not specified, the one
9518 specified by -mpreferred-stack-boundary will be used.
9519
9520 On Pentium and PentiumPro, "double" and "long double" values should
9521 be aligned to an 8 byte boundary (see -malign-double) or suffer
9522 significant run time performance penalties. On Pentium III, the
9523 Streaming SIMD Extension (SSE) data type "__m128" may not work
9524 properly if it is not 16 byte aligned.
9525
9526 To ensure proper alignment of this values on the stack, the stack
9527 boundary must be as aligned as that required by any value stored on
9528 the stack. Further, every function must be generated such that it
9529 keeps the stack aligned. Thus calling a function compiled with a
9530 higher preferred stack boundary from a function compiled with a
9531 lower preferred stack boundary will most likely misalign the stack.
9532 It is recommended that libraries that use callbacks always use the
9533 default setting.
9534
9535 This extra alignment does consume extra stack space, and generally
9536 increases code size. Code that is sensitive to stack space usage,
9537 such as embedded systems and operating system kernels, may want to
9538 reduce the preferred alignment to -mpreferred-stack-boundary=2.
9539
9540 -mmmx
9541 -mno-mmx
9542 -msse
9543 -mno-sse
9544 -msse2
9545 -mno-sse2
9546 -msse3
9547 -mno-sse3
9548 -mssse3
9549 -mno-ssse3
9550 -msse4.1
9551 -mno-sse4.1
9552 -msse4.2
9553 -mno-sse4.2
9554 -msse4
9555 -mno-sse4
9556 -mavx
9557 -mno-avx
9558 -maes
9559 -mno-aes
9560 -mpclmul
9561 -mno-pclmul
9562 -mfsgsbase
9563 -mno-fsgsbase
9564 -mrdrnd
9565 -mno-rdrnd
9566 -mf16c
9567 -mno-f16c
9568 -msse4a
9569 -mno-sse4a
9570 -mfma4
9571 -mno-fma4
9572 -mxop
9573 -mno-xop
9574 -mlwp
9575 -mno-lwp
9576 -m3dnow
9577 -mno-3dnow
9578 -mpopcnt
9579 -mno-popcnt
9580 -mabm
9581 -mno-abm
9582 -mbmi
9583 -mno-bmi
9584 -mtbm
9585 -mno-tbm
9586 These switches enable or disable the use of instructions in the
9587 MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, AVX, AES, PCLMUL, FSGSBASE,
9588 RDRND, F16C, SSE4A, FMA4, XOP, LWP, ABM, BMI, or 3DNow! extended
9589 instruction sets. These extensions are also available as built-in
9590 functions: see X86 Built-in Functions, for details of the functions
9591 enabled and disabled by these switches.
9592
9593 To have SSE/SSE2 instructions generated automatically from
9594 floating-point code (as opposed to 387 instructions), see
9595 -mfpmath=sse.
9596
9597 GCC depresses SSEx instructions when -mavx is used. Instead, it
9598 generates new AVX instructions or AVX equivalence for all SSEx
9599 instructions when needed.
9600
9601 These options will enable GCC to use these extended instructions in
9602 generated code, even without -mfpmath=sse. Applications which
9603 perform runtime CPU detection must compile separate files for each
9604 supported architecture, using the appropriate flags. In
9605 particular, the file containing the CPU detection code should be
9606 compiled without these options.
9607
9608 -mfused-madd
9609 -mno-fused-madd
9610 Do (don't) generate code that uses the fused multiply/add or
9611 multiply/subtract instructions. The default is to use these
9612 instructions.
9613
9614 -mcld
9615 This option instructs GCC to emit a "cld" instruction in the
9616 prologue of functions that use string instructions. String
9617 instructions depend on the DF flag to select between autoincrement
9618 or autodecrement mode. While the ABI specifies the DF flag to be
9619 cleared on function entry, some operating systems violate this
9620 specification by not clearing the DF flag in their exception
9621 dispatchers. The exception handler can be invoked with the DF flag
9622 set which leads to wrong direction mode, when string instructions
9623 are used. This option can be enabled by default on 32-bit x86
9624 targets by configuring GCC with the --enable-cld configure option.
9625 Generation of "cld" instructions can be suppressed with the
9626 -mno-cld compiler option in this case.
9627
9628 -mcx16
9629 This option will enable GCC to use CMPXCHG16B instruction in
9630 generated code. CMPXCHG16B allows for atomic operations on 128-bit
9631 double quadword (or oword) data types. This is useful for high
9632 resolution counters that could be updated by multiple processors
9633 (or cores). This instruction is generated as part of atomic built-
9634 in functions: see Atomic Builtins for details.
9635
9636 -msahf
9637 This option will enable GCC to use SAHF instruction in generated
9638 64-bit code. Early Intel CPUs with Intel 64 lacked LAHF and SAHF
9639 instructions supported by AMD64 until introduction of Pentium 4 G1
9640 step in December 2005. LAHF and SAHF are load and store
9641 instructions, respectively, for certain status flags. In 64-bit
9642 mode, SAHF instruction is used to optimize "fmod", "drem" or
9643 "remainder" built-in functions: see Other Builtins for details.
9644
9645 -mmovbe
9646 This option will enable GCC to use movbe instruction to implement
9647 "__builtin_bswap32" and "__builtin_bswap64".
9648
9649 -mcrc32
9650 This option will enable built-in functions,
9651 "__builtin_ia32_crc32qi", "__builtin_ia32_crc32hi".
9652 "__builtin_ia32_crc32si" and "__builtin_ia32_crc32di" to generate
9653 the crc32 machine instruction.
9654
9655 -mrecip
9656 This option will enable GCC to use RCPSS and RSQRTSS instructions
9657 (and their vectorized variants RCPPS and RSQRTPS) with an
9658 additional Newton-Raphson step to increase precision instead of
9659 DIVSS and SQRTSS (and their vectorized variants) for single
9660 precision floating point arguments. These instructions are
9661 generated only when -funsafe-math-optimizations is enabled together
9662 with -finite-math-only and -fno-trapping-math. Note that while the
9663 throughput of the sequence is higher than the throughput of the
9664 non-reciprocal instruction, the precision of the sequence can be
9665 decreased by up to 2 ulp (i.e. the inverse of 1.0 equals
9666 0.99999994).
9667
9668 -mveclibabi=type
9669 Specifies the ABI type to use for vectorizing intrinsics using an
9670 external library. Supported types are "svml" for the Intel short
9671 vector math library and "acml" for the AMD math core library style
9672 of interfacing. GCC will currently emit calls to "vmldExp2",
9673 "vmldLn2", "vmldLog102", "vmldLog102", "vmldPow2", "vmldTanh2",
9674 "vmldTan2", "vmldAtan2", "vmldAtanh2", "vmldCbrt2", "vmldSinh2",
9675 "vmldSin2", "vmldAsinh2", "vmldAsin2", "vmldCosh2", "vmldCos2",
9676 "vmldAcosh2", "vmldAcos2", "vmlsExp4", "vmlsLn4", "vmlsLog104",
9677 "vmlsLog104", "vmlsPow4", "vmlsTanh4", "vmlsTan4", "vmlsAtan4",
9678 "vmlsAtanh4", "vmlsCbrt4", "vmlsSinh4", "vmlsSin4", "vmlsAsinh4",
9679 "vmlsAsin4", "vmlsCosh4", "vmlsCos4", "vmlsAcosh4" and "vmlsAcos4"
9680 for corresponding function type when -mveclibabi=svml is used and
9681 "__vrd2_sin", "__vrd2_cos", "__vrd2_exp", "__vrd2_log",
9682 "__vrd2_log2", "__vrd2_log10", "__vrs4_sinf", "__vrs4_cosf",
9683 "__vrs4_expf", "__vrs4_logf", "__vrs4_log2f", "__vrs4_log10f" and
9684 "__vrs4_powf" for corresponding function type when -mveclibabi=acml
9685 is used. Both -ftree-vectorize and -funsafe-math-optimizations have
9686 to be enabled. A SVML or ACML ABI compatible library will have to
9687 be specified at link time.
9688
9689 -mpush-args
9690 -mno-push-args
9691 Use PUSH operations to store outgoing parameters. This method is
9692 shorter and usually equally fast as method using SUB/MOV operations
9693 and is enabled by default. In some cases disabling it may improve
9694 performance because of improved scheduling and reduced
9695 dependencies.
9696
9697 -maccumulate-outgoing-args
9698 If enabled, the maximum amount of space required for outgoing
9699 arguments will be computed in the function prologue. This is
9700 faster on most modern CPUs because of reduced dependencies,
9701 improved scheduling and reduced stack usage when preferred stack
9702 boundary is not equal to 2. The drawback is a notable increase in
9703 code size. This switch implies -mno-push-args.
9704
9705 -mthreads
9706 Support thread-safe exception handling on Mingw32. Code that
9707 relies on thread-safe exception handling must compile and link all
9708 code with the -mthreads option. When compiling, -mthreads defines
9709 -D_MT; when linking, it links in a special thread helper library
9710 -lmingwthrd which cleans up per thread exception handling data.
9711
9712 -mno-align-stringops
9713 Do not align destination of inlined string operations. This switch
9714 reduces code size and improves performance in case the destination
9715 is already aligned, but GCC doesn't know about it.
9716
9717 -minline-all-stringops
9718 By default GCC inlines string operations only when destination is
9719 known to be aligned at least to 4 byte boundary. This enables more
9720 inlining, increase code size, but may improve performance of code
9721 that depends on fast memcpy, strlen and memset for short lengths.
9722
9723 -minline-stringops-dynamically
9724 For string operation of unknown size, inline runtime checks so for
9725 small blocks inline code is used, while for large blocks library
9726 call is used.
9727
9728 -mstringop-strategy=alg
9729 Overwrite internal decision heuristic about particular algorithm to
9730 inline string operation with. The allowed values are "rep_byte",
9731 "rep_4byte", "rep_8byte" for expanding using i386 "rep" prefix of
9732 specified size, "byte_loop", "loop", "unrolled_loop" for expanding
9733 inline loop, "libcall" for always expanding library call.
9734
9735 -momit-leaf-frame-pointer
9736 Don't keep the frame pointer in a register for leaf functions.
9737 This avoids the instructions to save, set up and restore frame
9738 pointers and makes an extra register available in leaf functions.
9739 The option -fomit-frame-pointer removes the frame pointer for all
9740 functions which might make debugging harder.
9741
9742 -mtls-direct-seg-refs
9743 -mno-tls-direct-seg-refs
9744 Controls whether TLS variables may be accessed with offsets from
9745 the TLS segment register (%gs for 32-bit, %fs for 64-bit), or
9746 whether the thread base pointer must be added. Whether or not this
9747 is legal depends on the operating system, and whether it maps the
9748 segment to cover the entire TLS area.
9749
9750 For systems that use GNU libc, the default is on.
9751
9752 -msse2avx
9753 -mno-sse2avx
9754 Specify that the assembler should encode SSE instructions with VEX
9755 prefix. The option -mavx turns this on by default.
9756
9757 These -m switches are supported in addition to the above on AMD x86-64
9758 processors in 64-bit environments.
9759
9760 -m32
9761 -m64
9762 Generate code for a 32-bit or 64-bit environment. The 32-bit
9763 environment sets int, long and pointer to 32 bits and generates
9764 code that runs on any i386 system. The 64-bit environment sets int
9765 to 32 bits and long and pointer to 64 bits and generates code for
9766 AMD's x86-64 architecture. For darwin only the -m64 option turns
9767 off the -fno-pic and -mdynamic-no-pic options.
9768
9769 -mno-red-zone
9770 Do not use a so called red zone for x86-64 code. The red zone is
9771 mandated by the x86-64 ABI, it is a 128-byte area beyond the
9772 location of the stack pointer that will not be modified by signal
9773 or interrupt handlers and therefore can be used for temporary data
9774 without adjusting the stack pointer. The flag -mno-red-zone
9775 disables this red zone.
9776
9777 -mcmodel=small
9778 Generate code for the small code model: the program and its symbols
9779 must be linked in the lower 2 GB of the address space. Pointers
9780 are 64 bits. Programs can be statically or dynamically linked.
9781 This is the default code model.
9782
9783 -mcmodel=kernel
9784 Generate code for the kernel code model. The kernel runs in the
9785 negative 2 GB of the address space. This model has to be used for
9786 Linux kernel code.
9787
9788 -mcmodel=medium
9789 Generate code for the medium model: The program is linked in the
9790 lower 2 GB of the address space. Small symbols are also placed
9791 there. Symbols with sizes larger than -mlarge-data-threshold are
9792 put into large data or bss sections and can be located above 2GB.
9793 Programs can be statically or dynamically linked.
9794
9795 -mcmodel=large
9796 Generate code for the large model: This model makes no assumptions
9797 about addresses and sizes of sections.
9798
9799 i386 and x86-64 Windows Options
9800 These additional options are available for Windows targets:
9801
9802 -mconsole
9803 This option is available for Cygwin and MinGW targets. It
9804 specifies that a console application is to be generated, by
9805 instructing the linker to set the PE header subsystem type required
9806 for console applications. This is the default behaviour for Cygwin
9807 and MinGW targets.
9808
9809 -mcygwin
9810 This option is available for Cygwin targets. It specifies that the
9811 Cygwin internal interface is to be used for predefined preprocessor
9812 macros, C runtime libraries and related linker paths and options.
9813 For Cygwin targets this is the default behaviour. This option is
9814 deprecated and will be removed in a future release.
9815
9816 -mno-cygwin
9817 This option is available for Cygwin targets. It specifies that the
9818 MinGW internal interface is to be used instead of Cygwin's, by
9819 setting MinGW-related predefined macros and linker paths and
9820 default library options. This option is deprecated and will be
9821 removed in a future release.
9822
9823 -mdll
9824 This option is available for Cygwin and MinGW targets. It
9825 specifies that a DLL - a dynamic link library - is to be generated,
9826 enabling the selection of the required runtime startup object and
9827 entry point.
9828
9829 -mnop-fun-dllimport
9830 This option is available for Cygwin and MinGW targets. It
9831 specifies that the dllimport attribute should be ignored.
9832
9833 -mthread
9834 This option is available for MinGW targets. It specifies that
9835 MinGW-specific thread support is to be used.
9836
9837 -mwin32
9838 This option is available for Cygwin and MinGW targets. It
9839 specifies that the typical Windows pre-defined macros are to be set
9840 in the pre-processor, but does not influence the choice of runtime
9841 library/startup code.
9842
9843 -mwindows
9844 This option is available for Cygwin and MinGW targets. It
9845 specifies that a GUI application is to be generated by instructing
9846 the linker to set the PE header subsystem type appropriately.
9847
9848 See also under i386 and x86-64 Options for standard options.
9849
9850 IA-64 Options
9851 These are the -m options defined for the Intel IA-64 architecture.
9852
9853 -mbig-endian
9854 Generate code for a big endian target. This is the default for HP-
9855 UX.
9856
9857 -mlittle-endian
9858 Generate code for a little endian target. This is the default for
9859 AIX5 and GNU/Linux.
9860
9861 -mgnu-as
9862 -mno-gnu-as
9863 Generate (or don't) code for the GNU assembler. This is the
9864 default.
9865
9866 -mgnu-ld
9867 -mno-gnu-ld
9868 Generate (or don't) code for the GNU linker. This is the default.
9869
9870 -mno-pic
9871 Generate code that does not use a global pointer register. The
9872 result is not position independent code, and violates the IA-64
9873 ABI.
9874
9875 -mvolatile-asm-stop
9876 -mno-volatile-asm-stop
9877 Generate (or don't) a stop bit immediately before and after
9878 volatile asm statements.
9879
9880 -mregister-names
9881 -mno-register-names
9882 Generate (or don't) in, loc, and out register names for the stacked
9883 registers. This may make assembler output more readable.
9884
9885 -mno-sdata
9886 -msdata
9887 Disable (or enable) optimizations that use the small data section.
9888 This may be useful for working around optimizer bugs.
9889
9890 -mconstant-gp
9891 Generate code that uses a single constant global pointer value.
9892 This is useful when compiling kernel code.
9893
9894 -mauto-pic
9895 Generate code that is self-relocatable. This implies
9896 -mconstant-gp. This is useful when compiling firmware code.
9897
9898 -minline-float-divide-min-latency
9899 Generate code for inline divides of floating point values using the
9900 minimum latency algorithm.
9901
9902 -minline-float-divide-max-throughput
9903 Generate code for inline divides of floating point values using the
9904 maximum throughput algorithm.
9905
9906 -minline-int-divide-min-latency
9907 Generate code for inline divides of integer values using the
9908 minimum latency algorithm.
9909
9910 -minline-int-divide-max-throughput
9911 Generate code for inline divides of integer values using the
9912 maximum throughput algorithm.
9913
9914 -minline-sqrt-min-latency
9915 Generate code for inline square roots using the minimum latency
9916 algorithm.
9917
9918 -minline-sqrt-max-throughput
9919 Generate code for inline square roots using the maximum throughput
9920 algorithm.
9921
9922 -mno-dwarf2-asm
9923 -mdwarf2-asm
9924 Don't (or do) generate assembler code for the DWARF2 line number
9925 debugging info. This may be useful when not using the GNU
9926 assembler.
9927
9928 -mearly-stop-bits
9929 -mno-early-stop-bits
9930 Allow stop bits to be placed earlier than immediately preceding the
9931 instruction that triggered the stop bit. This can improve
9932 instruction scheduling, but does not always do so.
9933
9934 -mfixed-range=register-range
9935 Generate code treating the given register range as fixed registers.
9936 A fixed register is one that the register allocator can not use.
9937 This is useful when compiling kernel code. A register range is
9938 specified as two registers separated by a dash. Multiple register
9939 ranges can be specified separated by a comma.
9940
9941 -mtls-size=tls-size
9942 Specify bit size of immediate TLS offsets. Valid values are 14,
9943 22, and 64.
9944
9945 -mtune=cpu-type
9946 Tune the instruction scheduling for a particular CPU, Valid values
9947 are itanium, itanium1, merced, itanium2, and mckinley.
9948
9949 -mt
9950 -pthread
9951 Add support for multithreading using the POSIX threads library.
9952 This option sets flags for both the preprocessor and linker. It
9953 does not affect the thread safety of object code produced by the
9954 compiler or that of libraries supplied with it. These are HP-UX
9955 specific flags.
9956
9957 -milp32
9958 -mlp64
9959 Generate code for a 32-bit or 64-bit environment. The 32-bit
9960 environment sets int, long and pointer to 32 bits. The 64-bit
9961 environment sets int to 32 bits and long and pointer to 64 bits.
9962 These are HP-UX specific flags.
9963
9964 -mno-sched-br-data-spec
9965 -msched-br-data-spec
9966 (Dis/En)able data speculative scheduling before reload. This will
9967 result in generation of the ld.a instructions and the corresponding
9968 check instructions (ld.c / chk.a). The default is 'disable'.
9969
9970 -msched-ar-data-spec
9971 -mno-sched-ar-data-spec
9972 (En/Dis)able data speculative scheduling after reload. This will
9973 result in generation of the ld.a instructions and the corresponding
9974 check instructions (ld.c / chk.a). The default is 'enable'.
9975
9976 -mno-sched-control-spec
9977 -msched-control-spec
9978 (Dis/En)able control speculative scheduling. This feature is
9979 available only during region scheduling (i.e. before reload). This
9980 will result in generation of the ld.s instructions and the
9981 corresponding check instructions chk.s . The default is 'disable'.
9982
9983 -msched-br-in-data-spec
9984 -mno-sched-br-in-data-spec
9985 (En/Dis)able speculative scheduling of the instructions that are
9986 dependent on the data speculative loads before reload. This is
9987 effective only with -msched-br-data-spec enabled. The default is
9988 'enable'.
9989
9990 -msched-ar-in-data-spec
9991 -mno-sched-ar-in-data-spec
9992 (En/Dis)able speculative scheduling of the instructions that are
9993 dependent on the data speculative loads after reload. This is
9994 effective only with -msched-ar-data-spec enabled. The default is
9995 'enable'.
9996
9997 -msched-in-control-spec
9998 -mno-sched-in-control-spec
9999 (En/Dis)able speculative scheduling of the instructions that are
10000 dependent on the control speculative loads. This is effective only
10001 with -msched-control-spec enabled. The default is 'enable'.
10002
10003 -msched-ldc
10004 -mno-sched-ldc
10005 (En/Dis)able use of simple data speculation checks ld.c . If
10006 disabled, only chk.a instructions will be emitted to check data
10007 speculative loads. The default is 'enable'.
10008
10009 -mno-sched-control-ldc
10010 -msched-control-ldc
10011 (Dis/En)able use of ld.c instructions to check control speculative
10012 loads. If enabled, in case of control speculative load with no
10013 speculatively scheduled dependent instructions this load will be
10014 emitted as ld.sa and ld.c will be used to check it. The default is
10015 'disable'.
10016
10017 -mno-sched-spec-verbose
10018 -msched-spec-verbose
10019 (Dis/En)able printing of the information about speculative motions.
10020
10021 -mno-sched-prefer-non-data-spec-insns
10022 -msched-prefer-non-data-spec-insns
10023 If enabled, data speculative instructions will be chosen for
10024 schedule only if there are no other choices at the moment. This
10025 will make the use of the data speculation much more conservative.
10026 The default is 'disable'.
10027
10028 -mno-sched-prefer-non-control-spec-insns
10029 -msched-prefer-non-control-spec-insns
10030 If enabled, control speculative instructions will be chosen for
10031 schedule only if there are no other choices at the moment. This
10032 will make the use of the control speculation much more
10033 conservative. The default is 'disable'.
10034
10035 -mno-sched-count-spec-in-critical-path
10036 -msched-count-spec-in-critical-path
10037 If enabled, speculative dependencies will be considered during
10038 computation of the instructions priorities. This will make the use
10039 of the speculation a bit more conservative. The default is
10040 'disable'.
10041
10042 M32C Options
10043 -mcpu=name
10044 Select the CPU for which code is generated. name may be one of r8c
10045 for the R8C/Tiny series, m16c for the M16C (up to /60) series,
10046 m32cm for the M16C/80 series, or m32c for the M32C/80 series.
10047
10048 -msim
10049 Specifies that the program will be run on the simulator. This
10050 causes an alternate runtime library to be linked in which supports,
10051 for example, file I/O. You must not use this option when
10052 generating programs that will run on real hardware; you must
10053 provide your own runtime library for whatever I/O functions are
10054 needed.
10055
10056 -memregs=number
10057 Specifies the number of memory-based pseudo-registers GCC will use
10058 during code generation. These pseudo-registers will be used like
10059 real registers, so there is a tradeoff between GCC's ability to fit
10060 the code into available registers, and the performance penalty of
10061 using memory instead of registers. Note that all modules in a
10062 program must be compiled with the same value for this option.
10063 Because of that, you must not use this option with the default
10064 runtime libraries gcc builds.
10065
10066 M32R/D Options
10067 These -m options are defined for Renesas M32R/D architectures:
10068
10069 -m32r2
10070 Generate code for the M32R/2.
10071
10072 -m32rx
10073 Generate code for the M32R/X.
10074
10075 -m32r
10076 Generate code for the M32R. This is the default.
10077
10078 -mmodel=small
10079 Assume all objects live in the lower 16MB of memory (so that their
10080 addresses can be loaded with the "ld24" instruction), and assume
10081 all subroutines are reachable with the "bl" instruction. This is
10082 the default.
10083
10084 The addressability of a particular object can be set with the
10085 "model" attribute.
10086
10087 -mmodel=medium
10088 Assume objects may be anywhere in the 32-bit address space (the
10089 compiler will generate "seth/add3" instructions to load their
10090 addresses), and assume all subroutines are reachable with the "bl"
10091 instruction.
10092
10093 -mmodel=large
10094 Assume objects may be anywhere in the 32-bit address space (the
10095 compiler will generate "seth/add3" instructions to load their
10096 addresses), and assume subroutines may not be reachable with the
10097 "bl" instruction (the compiler will generate the much slower
10098 "seth/add3/jl" instruction sequence).
10099
10100 -msdata=none
10101 Disable use of the small data area. Variables will be put into one
10102 of .data, bss, or .rodata (unless the "section" attribute has been
10103 specified). This is the default.
10104
10105 The small data area consists of sections .sdata and .sbss. Objects
10106 may be explicitly put in the small data area with the "section"
10107 attribute using one of these sections.
10108
10109 -msdata=sdata
10110 Put small global and static data in the small data area, but do not
10111 generate special code to reference them.
10112
10113 -msdata=use
10114 Put small global and static data in the small data area, and
10115 generate special instructions to reference them.
10116
10117 -G num
10118 Put global and static objects less than or equal to num bytes into
10119 the small data or bss sections instead of the normal data or bss
10120 sections. The default value of num is 8. The -msdata option must
10121 be set to one of sdata or use for this option to have any effect.
10122
10123 All modules should be compiled with the same -G num value.
10124 Compiling with different values of num may or may not work; if it
10125 doesn't the linker will give an error message---incorrect code will
10126 not be generated.
10127
10128 -mdebug
10129 Makes the M32R specific code in the compiler display some
10130 statistics that might help in debugging programs.
10131
10132 -malign-loops
10133 Align all loops to a 32-byte boundary.
10134
10135 -mno-align-loops
10136 Do not enforce a 32-byte alignment for loops. This is the default.
10137
10138 -missue-rate=number
10139 Issue number instructions per cycle. number can only be 1 or 2.
10140
10141 -mbranch-cost=number
10142 number can only be 1 or 2. If it is 1 then branches will be
10143 preferred over conditional code, if it is 2, then the opposite will
10144 apply.
10145
10146 -mflush-trap=number
10147 Specifies the trap number to use to flush the cache. The default
10148 is 12. Valid numbers are between 0 and 15 inclusive.
10149
10150 -mno-flush-trap
10151 Specifies that the cache cannot be flushed by using a trap.
10152
10153 -mflush-func=name
10154 Specifies the name of the operating system function to call to
10155 flush the cache. The default is _flush_cache, but a function call
10156 will only be used if a trap is not available.
10157
10158 -mno-flush-func
10159 Indicates that there is no OS function for flushing the cache.
10160
10161 M680x0 Options
10162 These are the -m options defined for M680x0 and ColdFire processors.
10163 The default settings depend on which architecture was selected when the
10164 compiler was configured; the defaults for the most common choices are
10165 given below.
10166
10167 -march=arch
10168 Generate code for a specific M680x0 or ColdFire instruction set
10169 architecture. Permissible values of arch for M680x0 architectures
10170 are: 68000, 68010, 68020, 68030, 68040, 68060 and cpu32. ColdFire
10171 architectures are selected according to Freescale's ISA
10172 classification and the permissible values are: isaa, isaaplus, isab
10173 and isac.
10174
10175 gcc defines a macro __mcfarch__ whenever it is generating code for
10176 a ColdFire target. The arch in this macro is one of the -march
10177 arguments given above.
10178
10179 When used together, -march and -mtune select code that runs on a
10180 family of similar processors but that is optimized for a particular
10181 microarchitecture.
10182
10183 -mcpu=cpu
10184 Generate code for a specific M680x0 or ColdFire processor. The
10185 M680x0 cpus are: 68000, 68010, 68020, 68030, 68040, 68060, 68302,
10186 68332 and cpu32. The ColdFire cpus are given by the table below,
10187 which also classifies the CPUs into families:
10188
10189 Family : -mcpu arguments
10190 51qe : 51qe
10191 5206 : 5202 5204 5206
10192 5206e : 5206e
10193 5208 : 5207 5208
10194 5211a : 5210a 5211a
10195 5213 : 5211 5212 5213
10196 5216 : 5214 5216
10197 52235 : 52230 52231 52232 52233 52234 52235
10198 5225 : 5224 5225
10199 5235 : 5232 5233 5234 5235 523x
10200 5249 : 5249
10201 5250 : 5250
10202 5271 : 5270 5271
10203 5272 : 5272
10204 5275 : 5274 5275
10205 5282 : 5280 5281 5282 528x
10206 5307 : 5307
10207 5329 : 5327 5328 5329 532x
10208 5373 : 5372 5373 537x
10209 5407 : 5407
10210 5475 : 5470 5471 5472 5473 5474 5475 547x 5480 5481 5482 5483 5484
10211 5485
10212
10213 -mcpu=cpu overrides -march=arch if arch is compatible with cpu.
10214 Other combinations of -mcpu and -march are rejected.
10215
10216 gcc defines the macro __mcf_cpu_cpu when ColdFire target cpu is
10217 selected. It also defines __mcf_family_family, where the value of
10218 family is given by the table above.
10219
10220 -mtune=tune
10221 Tune the code for a particular microarchitecture, within the
10222 constraints set by -march and -mcpu. The M680x0 microarchitectures
10223 are: 68000, 68010, 68020, 68030, 68040, 68060 and cpu32. The
10224 ColdFire microarchitectures are: cfv1, cfv2, cfv3, cfv4 and cfv4e.
10225
10226 You can also use -mtune=68020-40 for code that needs to run
10227 relatively well on 68020, 68030 and 68040 targets. -mtune=68020-60
10228 is similar but includes 68060 targets as well. These two options
10229 select the same tuning decisions as -m68020-40 and -m68020-60
10230 respectively.
10231
10232 gcc defines the macros __mcarch and __mcarch__ when tuning for
10233 680x0 architecture arch. It also defines mcarch unless either
10234 -ansi or a non-GNU -std option is used. If gcc is tuning for a
10235 range of architectures, as selected by -mtune=68020-40 or
10236 -mtune=68020-60, it defines the macros for every architecture in
10237 the range.
10238
10239 gcc also defines the macro __muarch__ when tuning for ColdFire
10240 microarchitecture uarch, where uarch is one of the arguments given
10241 above.
10242
10243 -m68000
10244 -mc68000
10245 Generate output for a 68000. This is the default when the compiler
10246 is configured for 68000-based systems. It is equivalent to
10247 -march=68000.
10248
10249 Use this option for microcontrollers with a 68000 or EC000 core,
10250 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
10251
10252 -m68010
10253 Generate output for a 68010. This is the default when the compiler
10254 is configured for 68010-based systems. It is equivalent to
10255 -march=68010.
10256
10257 -m68020
10258 -mc68020
10259 Generate output for a 68020. This is the default when the compiler
10260 is configured for 68020-based systems. It is equivalent to
10261 -march=68020.
10262
10263 -m68030
10264 Generate output for a 68030. This is the default when the compiler
10265 is configured for 68030-based systems. It is equivalent to
10266 -march=68030.
10267
10268 -m68040
10269 Generate output for a 68040. This is the default when the compiler
10270 is configured for 68040-based systems. It is equivalent to
10271 -march=68040.
10272
10273 This option inhibits the use of 68881/68882 instructions that have
10274 to be emulated by software on the 68040. Use this option if your
10275 68040 does not have code to emulate those instructions.
10276
10277 -m68060
10278 Generate output for a 68060. This is the default when the compiler
10279 is configured for 68060-based systems. It is equivalent to
10280 -march=68060.
10281
10282 This option inhibits the use of 68020 and 68881/68882 instructions
10283 that have to be emulated by software on the 68060. Use this option
10284 if your 68060 does not have code to emulate those instructions.
10285
10286 -mcpu32
10287 Generate output for a CPU32. This is the default when the compiler
10288 is configured for CPU32-based systems. It is equivalent to
10289 -march=cpu32.
10290
10291 Use this option for microcontrollers with a CPU32 or CPU32+ core,
10292 including the 68330, 68331, 68332, 68333, 68334, 68336, 68340,
10293 68341, 68349 and 68360.
10294
10295 -m5200
10296 Generate output for a 520X ColdFire CPU. This is the default when
10297 the compiler is configured for 520X-based systems. It is
10298 equivalent to -mcpu=5206, and is now deprecated in favor of that
10299 option.
10300
10301 Use this option for microcontroller with a 5200 core, including the
10302 MCF5202, MCF5203, MCF5204 and MCF5206.
10303
10304 -m5206e
10305 Generate output for a 5206e ColdFire CPU. The option is now
10306 deprecated in favor of the equivalent -mcpu=5206e.
10307
10308 -m528x
10309 Generate output for a member of the ColdFire 528X family. The
10310 option is now deprecated in favor of the equivalent -mcpu=528x.
10311
10312 -m5307
10313 Generate output for a ColdFire 5307 CPU. The option is now
10314 deprecated in favor of the equivalent -mcpu=5307.
10315
10316 -m5407
10317 Generate output for a ColdFire 5407 CPU. The option is now
10318 deprecated in favor of the equivalent -mcpu=5407.
10319
10320 -mcfv4e
10321 Generate output for a ColdFire V4e family CPU (e.g. 547x/548x).
10322 This includes use of hardware floating point instructions. The
10323 option is equivalent to -mcpu=547x, and is now deprecated in favor
10324 of that option.
10325
10326 -m68020-40
10327 Generate output for a 68040, without using any of the new
10328 instructions. This results in code which can run relatively
10329 efficiently on either a 68020/68881 or a 68030 or a 68040. The
10330 generated code does use the 68881 instructions that are emulated on
10331 the 68040.
10332
10333 The option is equivalent to -march=68020 -mtune=68020-40.
10334
10335 -m68020-60
10336 Generate output for a 68060, without using any of the new
10337 instructions. This results in code which can run relatively
10338 efficiently on either a 68020/68881 or a 68030 or a 68040. The
10339 generated code does use the 68881 instructions that are emulated on
10340 the 68060.
10341
10342 The option is equivalent to -march=68020 -mtune=68020-60.
10343
10344 -mhard-float
10345 -m68881
10346 Generate floating-point instructions. This is the default for
10347 68020 and above, and for ColdFire devices that have an FPU. It
10348 defines the macro __HAVE_68881__ on M680x0 targets and __mcffpu__
10349 on ColdFire targets.
10350
10351 -msoft-float
10352 Do not generate floating-point instructions; use library calls
10353 instead. This is the default for 68000, 68010, and 68832 targets.
10354 It is also the default for ColdFire devices that have no FPU.
10355
10356 -mdiv
10357 -mno-div
10358 Generate (do not generate) ColdFire hardware divide and remainder
10359 instructions. If -march is used without -mcpu, the default is "on"
10360 for ColdFire architectures and "off" for M680x0 architectures.
10361 Otherwise, the default is taken from the target CPU (either the
10362 default CPU, or the one specified by -mcpu). For example, the
10363 default is "off" for -mcpu=5206 and "on" for -mcpu=5206e.
10364
10365 gcc defines the macro __mcfhwdiv__ when this option is enabled.
10366
10367 -mshort
10368 Consider type "int" to be 16 bits wide, like "short int".
10369 Additionally, parameters passed on the stack are also aligned to a
10370 16-bit boundary even on targets whose API mandates promotion to
10371 32-bit.
10372
10373 -mno-short
10374 Do not consider type "int" to be 16 bits wide. This is the
10375 default.
10376
10377 -mnobitfield
10378 -mno-bitfield
10379 Do not use the bit-field instructions. The -m68000, -mcpu32 and
10380 -m5200 options imply -mnobitfield.
10381
10382 -mbitfield
10383 Do use the bit-field instructions. The -m68020 option implies
10384 -mbitfield. This is the default if you use a configuration
10385 designed for a 68020.
10386
10387 -mrtd
10388 Use a different function-calling convention, in which functions
10389 that take a fixed number of arguments return with the "rtd"
10390 instruction, which pops their arguments while returning. This
10391 saves one instruction in the caller since there is no need to pop
10392 the arguments there.
10393
10394 This calling convention is incompatible with the one normally used
10395 on Unix, so you cannot use it if you need to call libraries
10396 compiled with the Unix compiler.
10397
10398 Also, you must provide function prototypes for all functions that
10399 take variable numbers of arguments (including "printf"); otherwise
10400 incorrect code will be generated for calls to those functions.
10401
10402 In addition, seriously incorrect code will result if you call a
10403 function with too many arguments. (Normally, extra arguments are
10404 harmlessly ignored.)
10405
10406 The "rtd" instruction is supported by the 68010, 68020, 68030,
10407 68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
10408
10409 -mno-rtd
10410 Do not use the calling conventions selected by -mrtd. This is the
10411 default.
10412
10413 -malign-int
10414 -mno-align-int
10415 Control whether GCC aligns "int", "long", "long long", "float",
10416 "double", and "long double" variables on a 32-bit boundary
10417 (-malign-int) or a 16-bit boundary (-mno-align-int). Aligning
10418 variables on 32-bit boundaries produces code that runs somewhat
10419 faster on processors with 32-bit busses at the expense of more
10420 memory.
10421
10422 Warning: if you use the -malign-int switch, GCC will align
10423 structures containing the above types differently than most
10424 published application binary interface specifications for the m68k.
10425
10426 -mpcrel
10427 Use the pc-relative addressing mode of the 68000 directly, instead
10428 of using a global offset table. At present, this option implies
10429 -fpic, allowing at most a 16-bit offset for pc-relative addressing.
10430 -fPIC is not presently supported with -mpcrel, though this could be
10431 supported for 68020 and higher processors.
10432
10433 -mno-strict-align
10434 -mstrict-align
10435 Do not (do) assume that unaligned memory references will be handled
10436 by the system.
10437
10438 -msep-data
10439 Generate code that allows the data segment to be located in a
10440 different area of memory from the text segment. This allows for
10441 execute in place in an environment without virtual memory
10442 management. This option implies -fPIC.
10443
10444 -mno-sep-data
10445 Generate code that assumes that the data segment follows the text
10446 segment. This is the default.
10447
10448 -mid-shared-library
10449 Generate code that supports shared libraries via the library ID
10450 method. This allows for execute in place and shared libraries in
10451 an environment without virtual memory management. This option
10452 implies -fPIC.
10453
10454 -mno-id-shared-library
10455 Generate code that doesn't assume ID based shared libraries are
10456 being used. This is the default.
10457
10458 -mshared-library-id=n
10459 Specified the identification number of the ID based shared library
10460 being compiled. Specifying a value of 0 will generate more compact
10461 code, specifying other values will force the allocation of that
10462 number to the current library but is no more space or time
10463 efficient than omitting this option.
10464
10465 -mxgot
10466 -mno-xgot
10467 When generating position-independent code for ColdFire, generate
10468 code that works if the GOT has more than 8192 entries. This code
10469 is larger and slower than code generated without this option. On
10470 M680x0 processors, this option is not needed; -fPIC suffices.
10471
10472 GCC normally uses a single instruction to load values from the GOT.
10473 While this is relatively efficient, it only works if the GOT is
10474 smaller than about 64k. Anything larger causes the linker to
10475 report an error such as:
10476
10477 relocation truncated to fit: R_68K_GOT16O foobar
10478
10479 If this happens, you should recompile your code with -mxgot. It
10480 should then work with very large GOTs. However, code generated
10481 with -mxgot is less efficient, since it takes 4 instructions to
10482 fetch the value of a global symbol.
10483
10484 Note that some linkers, including newer versions of the GNU linker,
10485 can create multiple GOTs and sort GOT entries. If you have such a
10486 linker, you should only need to use -mxgot when compiling a single
10487 object file that accesses more than 8192 GOT entries. Very few do.
10488
10489 These options have no effect unless GCC is generating position-
10490 independent code.
10491
10492 M68hc1x Options
10493 These are the -m options defined for the 68hc11 and 68hc12
10494 microcontrollers. The default values for these options depends on
10495 which style of microcontroller was selected when the compiler was
10496 configured; the defaults for the most common choices are given below.
10497
10498 -m6811
10499 -m68hc11
10500 Generate output for a 68HC11. This is the default when the
10501 compiler is configured for 68HC11-based systems.
10502
10503 -m6812
10504 -m68hc12
10505 Generate output for a 68HC12. This is the default when the
10506 compiler is configured for 68HC12-based systems.
10507
10508 -m68S12
10509 -m68hcs12
10510 Generate output for a 68HCS12.
10511
10512 -mauto-incdec
10513 Enable the use of 68HC12 pre and post auto-increment and auto-
10514 decrement addressing modes.
10515
10516 -minmax
10517 -nominmax
10518 Enable the use of 68HC12 min and max instructions.
10519
10520 -mlong-calls
10521 -mno-long-calls
10522 Treat all calls as being far away (near). If calls are assumed to
10523 be far away, the compiler will use the "call" instruction to call a
10524 function and the "rtc" instruction for returning.
10525
10526 -mshort
10527 Consider type "int" to be 16 bits wide, like "short int".
10528
10529 -msoft-reg-count=count
10530 Specify the number of pseudo-soft registers which are used for the
10531 code generation. The maximum number is 32. Using more pseudo-soft
10532 register may or may not result in better code depending on the
10533 program. The default is 4 for 68HC11 and 2 for 68HC12.
10534
10535 MCore Options
10536 These are the -m options defined for the Motorola M*Core processors.
10537
10538 -mhardlit
10539 -mno-hardlit
10540 Inline constants into the code stream if it can be done in two
10541 instructions or less.
10542
10543 -mdiv
10544 -mno-div
10545 Use the divide instruction. (Enabled by default).
10546
10547 -mrelax-immediate
10548 -mno-relax-immediate
10549 Allow arbitrary sized immediates in bit operations.
10550
10551 -mwide-bitfields
10552 -mno-wide-bitfields
10553 Always treat bit-fields as int-sized.
10554
10555 -m4byte-functions
10556 -mno-4byte-functions
10557 Force all functions to be aligned to a four byte boundary.
10558
10559 -mcallgraph-data
10560 -mno-callgraph-data
10561 Emit callgraph information.
10562
10563 -mslow-bytes
10564 -mno-slow-bytes
10565 Prefer word access when reading byte quantities.
10566
10567 -mlittle-endian
10568 -mbig-endian
10569 Generate code for a little endian target.
10570
10571 -m210
10572 -m340
10573 Generate code for the 210 processor.
10574
10575 -mno-lsim
10576 Assume that run-time support has been provided and so omit the
10577 simulator library (libsim.a) from the linker command line.
10578
10579 -mstack-increment=size
10580 Set the maximum amount for a single stack increment operation.
10581 Large values can increase the speed of programs which contain
10582 functions that need a large amount of stack space, but they can
10583 also trigger a segmentation fault if the stack is extended too
10584 much. The default value is 0x1000.
10585
10586 MIPS Options
10587 -EB Generate big-endian code.
10588
10589 -EL Generate little-endian code. This is the default for mips*el-*-*
10590 configurations.
10591
10592 -march=arch
10593 Generate code that will run on arch, which can be the name of a
10594 generic MIPS ISA, or the name of a particular processor. The ISA
10595 names are: mips1, mips2, mips3, mips4, mips32, mips32r2, mips64 and
10596 mips64r2. The processor names are: 4kc, 4km, 4kp, 4ksc, 4kec,
10597 4kem, 4kep, 4ksd, 5kc, 5kf, 20kc, 24kc, 24kf2_1, 24kf1_1, 24kec,
10598 24kef2_1, 24kef1_1, 34kc, 34kf2_1, 34kf1_1, 74kc, 74kf2_1, 74kf1_1,
10599 74kf3_2, loongson2e, loongson2f, m4k, octeon, orion, r2000, r3000,
10600 r3900, r4000, r4400, r4600, r4650, r6000, r8000, rm7000, rm9000,
10601 r10000, r12000, r14000, r16000, sb1, sr71000, vr4100, vr4111,
10602 vr4120, vr4130, vr4300, vr5000, vr5400, vr5500 and xlr. The
10603 special value from-abi selects the most compatible architecture for
10604 the selected ABI (that is, mips1 for 32-bit ABIs and mips3 for
10605 64-bit ABIs).
10606
10607 Native Linux/GNU toolchains also support the value native, which
10608 selects the best architecture option for the host processor.
10609 -march=native has no effect if GCC does not recognize the
10610 processor.
10611
10612 In processor names, a final 000 can be abbreviated as k (for
10613 example, -march=r2k). Prefixes are optional, and vr may be written
10614 r.
10615
10616 Names of the form nf2_1 refer to processors with FPUs clocked at
10617 half the rate of the core, names of the form nf1_1 refer to
10618 processors with FPUs clocked at the same rate as the core, and
10619 names of the form nf3_2 refer to processors with FPUs clocked a
10620 ratio of 3:2 with respect to the core. For compatibility reasons,
10621 nf is accepted as a synonym for nf2_1 while nx and bfx are accepted
10622 as synonyms for nf1_1.
10623
10624 GCC defines two macros based on the value of this option. The
10625 first is _MIPS_ARCH, which gives the name of target architecture,
10626 as a string. The second has the form _MIPS_ARCH_foo, where foo is
10627 the capitalized value of _MIPS_ARCH. For example, -march=r2000
10628 will set _MIPS_ARCH to "r2000" and define the macro
10629 _MIPS_ARCH_R2000.
10630
10631 Note that the _MIPS_ARCH macro uses the processor names given
10632 above. In other words, it will have the full prefix and will not
10633 abbreviate 000 as k. In the case of from-abi, the macro names the
10634 resolved architecture (either "mips1" or "mips3"). It names the
10635 default architecture when no -march option is given.
10636
10637 -mtune=arch
10638 Optimize for arch. Among other things, this option controls the
10639 way instructions are scheduled, and the perceived cost of
10640 arithmetic operations. The list of arch values is the same as for
10641 -march.
10642
10643 When this option is not used, GCC will optimize for the processor
10644 specified by -march. By using -march and -mtune together, it is
10645 possible to generate code that will run on a family of processors,
10646 but optimize the code for one particular member of that family.
10647
10648 -mtune defines the macros _MIPS_TUNE and _MIPS_TUNE_foo, which work
10649 in the same way as the -march ones described above.
10650
10651 -mips1
10652 Equivalent to -march=mips1.
10653
10654 -mips2
10655 Equivalent to -march=mips2.
10656
10657 -mips3
10658 Equivalent to -march=mips3.
10659
10660 -mips4
10661 Equivalent to -march=mips4.
10662
10663 -mips32
10664 Equivalent to -march=mips32.
10665
10666 -mips32r2
10667 Equivalent to -march=mips32r2.
10668
10669 -mips64
10670 Equivalent to -march=mips64.
10671
10672 -mips64r2
10673 Equivalent to -march=mips64r2.
10674
10675 -mips16
10676 -mno-mips16
10677 Generate (do not generate) MIPS16 code. If GCC is targetting a
10678 MIPS32 or MIPS64 architecture, it will make use of the MIPS16e ASE.
10679
10680 MIPS16 code generation can also be controlled on a per-function
10681 basis by means of "mips16" and "nomips16" attributes.
10682
10683 -mflip-mips16
10684 Generate MIPS16 code on alternating functions. This option is
10685 provided for regression testing of mixed MIPS16/non-MIPS16 code
10686 generation, and is not intended for ordinary use in compiling user
10687 code.
10688
10689 -minterlink-mips16
10690 -mno-interlink-mips16
10691 Require (do not require) that non-MIPS16 code be link-compatible
10692 with MIPS16 code.
10693
10694 For example, non-MIPS16 code cannot jump directly to MIPS16 code;
10695 it must either use a call or an indirect jump. -minterlink-mips16
10696 therefore disables direct jumps unless GCC knows that the target of
10697 the jump is not MIPS16.
10698
10699 -mabi=32
10700 -mabi=o64
10701 -mabi=n32
10702 -mabi=64
10703 -mabi=eabi
10704 Generate code for the given ABI.
10705
10706 Note that the EABI has a 32-bit and a 64-bit variant. GCC normally
10707 generates 64-bit code when you select a 64-bit architecture, but
10708 you can use -mgp32 to get 32-bit code instead.
10709
10710 For information about the O64 ABI, see
10711 <http://gcc.gnu.org/projects/mipso64-abi.html>.
10712
10713 GCC supports a variant of the o32 ABI in which floating-point
10714 registers are 64 rather than 32 bits wide. You can select this
10715 combination with -mabi=32 -mfp64. This ABI relies on the mthc1 and
10716 mfhc1 instructions and is therefore only supported for MIPS32R2
10717 processors.
10718
10719 The register assignments for arguments and return values remain the
10720 same, but each scalar value is passed in a single 64-bit register
10721 rather than a pair of 32-bit registers. For example, scalar
10722 floating-point values are returned in $f0 only, not a $f0/$f1 pair.
10723 The set of call-saved registers also remains the same, but all 64
10724 bits are saved.
10725
10726 -mabicalls
10727 -mno-abicalls
10728 Generate (do not generate) code that is suitable for SVR4-style
10729 dynamic objects. -mabicalls is the default for SVR4-based systems.
10730
10731 -mshared
10732 -mno-shared
10733 Generate (do not generate) code that is fully position-independent,
10734 and that can therefore be linked into shared libraries. This
10735 option only affects -mabicalls.
10736
10737 All -mabicalls code has traditionally been position-independent,
10738 regardless of options like -fPIC and -fpic. However, as an
10739 extension, the GNU toolchain allows executables to use absolute
10740 accesses for locally-binding symbols. It can also use shorter GP
10741 initialization sequences and generate direct calls to locally-
10742 defined functions. This mode is selected by -mno-shared.
10743
10744 -mno-shared depends on binutils 2.16 or higher and generates
10745 objects that can only be linked by the GNU linker. However, the
10746 option does not affect the ABI of the final executable; it only
10747 affects the ABI of relocatable objects. Using -mno-shared will
10748 generally make executables both smaller and quicker.
10749
10750 -mshared is the default.
10751
10752 -mplt
10753 -mno-plt
10754 Assume (do not assume) that the static and dynamic linkers support
10755 PLTs and copy relocations. This option only affects -mno-shared
10756 -mabicalls. For the n64 ABI, this option has no effect without
10757 -msym32.
10758
10759 You can make -mplt the default by configuring GCC with
10760 --with-mips-plt. The default is -mno-plt otherwise.
10761
10762 -mxgot
10763 -mno-xgot
10764 Lift (do not lift) the usual restrictions on the size of the global
10765 offset table.
10766
10767 GCC normally uses a single instruction to load values from the GOT.
10768 While this is relatively efficient, it will only work if the GOT is
10769 smaller than about 64k. Anything larger will cause the linker to
10770 report an error such as:
10771
10772 relocation truncated to fit: R_MIPS_GOT16 foobar
10773
10774 If this happens, you should recompile your code with -mxgot. It
10775 should then work with very large GOTs, although it will also be
10776 less efficient, since it will take three instructions to fetch the
10777 value of a global symbol.
10778
10779 Note that some linkers can create multiple GOTs. If you have such
10780 a linker, you should only need to use -mxgot when a single object
10781 file accesses more than 64k's worth of GOT entries. Very few do.
10782
10783 These options have no effect unless GCC is generating position
10784 independent code.
10785
10786 -mgp32
10787 Assume that general-purpose registers are 32 bits wide.
10788
10789 -mgp64
10790 Assume that general-purpose registers are 64 bits wide.
10791
10792 -mfp32
10793 Assume that floating-point registers are 32 bits wide.
10794
10795 -mfp64
10796 Assume that floating-point registers are 64 bits wide.
10797
10798 -mhard-float
10799 Use floating-point coprocessor instructions.
10800
10801 -msoft-float
10802 Do not use floating-point coprocessor instructions. Implement
10803 floating-point calculations using library calls instead.
10804
10805 -msingle-float
10806 Assume that the floating-point coprocessor only supports single-
10807 precision operations.
10808
10809 -mdouble-float
10810 Assume that the floating-point coprocessor supports double-
10811 precision operations. This is the default.
10812
10813 -mllsc
10814 -mno-llsc
10815 Use (do not use) ll, sc, and sync instructions to implement atomic
10816 memory built-in functions. When neither option is specified, GCC
10817 will use the instructions if the target architecture supports them.
10818
10819 -mllsc is useful if the runtime environment can emulate the
10820 instructions and -mno-llsc can be useful when compiling for
10821 nonstandard ISAs. You can make either option the default by
10822 configuring GCC with --with-llsc and --without-llsc respectively.
10823 --with-llsc is the default for some configurations; see the
10824 installation documentation for details.
10825
10826 -mdsp
10827 -mno-dsp
10828 Use (do not use) revision 1 of the MIPS DSP ASE.
10829 This option defines the preprocessor macro __mips_dsp. It also
10830 defines __mips_dsp_rev to 1.
10831
10832 -mdspr2
10833 -mno-dspr2
10834 Use (do not use) revision 2 of the MIPS DSP ASE.
10835 This option defines the preprocessor macros __mips_dsp and
10836 __mips_dspr2. It also defines __mips_dsp_rev to 2.
10837
10838 -msmartmips
10839 -mno-smartmips
10840 Use (do not use) the MIPS SmartMIPS ASE.
10841
10842 -mpaired-single
10843 -mno-paired-single
10844 Use (do not use) paired-single floating-point instructions.
10845 This option requires hardware floating-point support to be
10846 enabled.
10847
10848 -mdmx
10849 -mno-mdmx
10850 Use (do not use) MIPS Digital Media Extension instructions. This
10851 option can only be used when generating 64-bit code and requires
10852 hardware floating-point support to be enabled.
10853
10854 -mips3d
10855 -mno-mips3d
10856 Use (do not use) the MIPS-3D ASE. The option -mips3d implies
10857 -mpaired-single.
10858
10859 -mmt
10860 -mno-mt
10861 Use (do not use) MT Multithreading instructions.
10862
10863 -mlong64
10864 Force "long" types to be 64 bits wide. See -mlong32 for an
10865 explanation of the default and the way that the pointer size is
10866 determined.
10867
10868 -mlong32
10869 Force "long", "int", and pointer types to be 32 bits wide.
10870
10871 The default size of "int"s, "long"s and pointers depends on the
10872 ABI. All the supported ABIs use 32-bit "int"s. The n64 ABI uses
10873 64-bit "long"s, as does the 64-bit EABI; the others use 32-bit
10874 "long"s. Pointers are the same size as "long"s, or the same size
10875 as integer registers, whichever is smaller.
10876
10877 -msym32
10878 -mno-sym32
10879 Assume (do not assume) that all symbols have 32-bit values,
10880 regardless of the selected ABI. This option is useful in
10881 combination with -mabi=64 and -mno-abicalls because it allows GCC
10882 to generate shorter and faster references to symbolic addresses.
10883
10884 -G num
10885 Put definitions of externally-visible data in a small data section
10886 if that data is no bigger than num bytes. GCC can then access the
10887 data more efficiently; see -mgpopt for details.
10888
10889 The default -G option depends on the configuration.
10890
10891 -mlocal-sdata
10892 -mno-local-sdata
10893 Extend (do not extend) the -G behavior to local data too, such as
10894 to static variables in C. -mlocal-sdata is the default for all
10895 configurations.
10896
10897 If the linker complains that an application is using too much small
10898 data, you might want to try rebuilding the less performance-
10899 critical parts with -mno-local-sdata. You might also want to build
10900 large libraries with -mno-local-sdata, so that the libraries leave
10901 more room for the main program.
10902
10903 -mextern-sdata
10904 -mno-extern-sdata
10905 Assume (do not assume) that externally-defined data will be in a
10906 small data section if that data is within the -G limit.
10907 -mextern-sdata is the default for all configurations.
10908
10909 If you compile a module Mod with -mextern-sdata -G num -mgpopt, and
10910 Mod references a variable Var that is no bigger than num bytes, you
10911 must make sure that Var is placed in a small data section. If Var
10912 is defined by another module, you must either compile that module
10913 with a high-enough -G setting or attach a "section" attribute to
10914 Var's definition. If Var is common, you must link the application
10915 with a high-enough -G setting.
10916
10917 The easiest way of satisfying these restrictions is to compile and
10918 link every module with the same -G option. However, you may wish
10919 to build a library that supports several different small data
10920 limits. You can do this by compiling the library with the highest
10921 supported -G setting and additionally using -mno-extern-sdata to
10922 stop the library from making assumptions about externally-defined
10923 data.
10924
10925 -mgpopt
10926 -mno-gpopt
10927 Use (do not use) GP-relative accesses for symbols that are known to
10928 be in a small data section; see -G, -mlocal-sdata and
10929 -mextern-sdata. -mgpopt is the default for all configurations.
10930
10931 -mno-gpopt is useful for cases where the $gp register might not
10932 hold the value of "_gp". For example, if the code is part of a
10933 library that might be used in a boot monitor, programs that call
10934 boot monitor routines will pass an unknown value in $gp. (In such
10935 situations, the boot monitor itself would usually be compiled with
10936 -G0.)
10937
10938 -mno-gpopt implies -mno-local-sdata and -mno-extern-sdata.
10939
10940 -membedded-data
10941 -mno-embedded-data
10942 Allocate variables to the read-only data section first if possible,
10943 then next in the small data section if possible, otherwise in data.
10944 This gives slightly slower code than the default, but reduces the
10945 amount of RAM required when executing, and thus may be preferred
10946 for some embedded systems.
10947
10948 -muninit-const-in-rodata
10949 -mno-uninit-const-in-rodata
10950 Put uninitialized "const" variables in the read-only data section.
10951 This option is only meaningful in conjunction with -membedded-data.
10952
10953 -mcode-readable=setting
10954 Specify whether GCC may generate code that reads from executable
10955 sections. There are three possible settings:
10956
10957 -mcode-readable=yes
10958 Instructions may freely access executable sections. This is
10959 the default setting.
10960
10961 -mcode-readable=pcrel
10962 MIPS16 PC-relative load instructions can access executable
10963 sections, but other instructions must not do so. This option
10964 is useful on 4KSc and 4KSd processors when the code TLBs have
10965 the Read Inhibit bit set. It is also useful on processors that
10966 can be configured to have a dual instruction/data SRAM
10967 interface and that, like the M4K, automatically redirect PC-
10968 relative loads to the instruction RAM.
10969
10970 -mcode-readable=no
10971 Instructions must not access executable sections. This option
10972 can be useful on targets that are configured to have a dual
10973 instruction/data SRAM interface but that (unlike the M4K) do
10974 not automatically redirect PC-relative loads to the instruction
10975 RAM.
10976
10977 -msplit-addresses
10978 -mno-split-addresses
10979 Enable (disable) use of the "%hi()" and "%lo()" assembler
10980 relocation operators. This option has been superseded by
10981 -mexplicit-relocs but is retained for backwards compatibility.
10982
10983 -mexplicit-relocs
10984 -mno-explicit-relocs
10985 Use (do not use) assembler relocation operators when dealing with
10986 symbolic addresses. The alternative, selected by
10987 -mno-explicit-relocs, is to use assembler macros instead.
10988
10989 -mexplicit-relocs is the default if GCC was configured to use an
10990 assembler that supports relocation operators.
10991
10992 -mcheck-zero-division
10993 -mno-check-zero-division
10994 Trap (do not trap) on integer division by zero.
10995
10996 The default is -mcheck-zero-division.
10997
10998 -mdivide-traps
10999 -mdivide-breaks
11000 MIPS systems check for division by zero by generating either a
11001 conditional trap or a break instruction. Using traps results in
11002 smaller code, but is only supported on MIPS II and later. Also,
11003 some versions of the Linux kernel have a bug that prevents trap
11004 from generating the proper signal ("SIGFPE"). Use -mdivide-traps
11005 to allow conditional traps on architectures that support them and
11006 -mdivide-breaks to force the use of breaks.
11007
11008 The default is usually -mdivide-traps, but this can be overridden
11009 at configure time using --with-divide=breaks. Divide-by-zero
11010 checks can be completely disabled using -mno-check-zero-division.
11011
11012 -mmemcpy
11013 -mno-memcpy
11014 Force (do not force) the use of "memcpy()" for non-trivial block
11015 moves. The default is -mno-memcpy, which allows GCC to inline most
11016 constant-sized copies.
11017
11018 -mlong-calls
11019 -mno-long-calls
11020 Disable (do not disable) use of the "jal" instruction. Calling
11021 functions using "jal" is more efficient but requires the caller and
11022 callee to be in the same 256 megabyte segment.
11023
11024 This option has no effect on abicalls code. The default is
11025 -mno-long-calls.
11026
11027 -mmad
11028 -mno-mad
11029 Enable (disable) use of the "mad", "madu" and "mul" instructions,
11030 as provided by the R4650 ISA.
11031
11032 -mfused-madd
11033 -mno-fused-madd
11034 Enable (disable) use of the floating point multiply-accumulate
11035 instructions, when they are available. The default is
11036 -mfused-madd.
11037
11038 When multiply-accumulate instructions are used, the intermediate
11039 product is calculated to infinite precision and is not subject to
11040 the FCSR Flush to Zero bit. This may be undesirable in some
11041 circumstances.
11042
11043 -nocpp
11044 Tell the MIPS assembler to not run its preprocessor over user
11045 assembler files (with a .s suffix) when assembling them.
11046
11047 -mfix-r4000
11048 -mno-fix-r4000
11049 Work around certain R4000 CPU errata:
11050
11051 - A double-word or a variable shift may give an incorrect result
11052 if executed immediately after starting an integer division.
11053
11054 - A double-word or a variable shift may give an incorrect result
11055 if executed while an integer multiplication is in progress.
11056
11057 - An integer division may give an incorrect result if started in
11058 a delay slot of a taken branch or a jump.
11059
11060 -mfix-r4400
11061 -mno-fix-r4400
11062 Work around certain R4400 CPU errata:
11063
11064 - A double-word or a variable shift may give an incorrect result
11065 if executed immediately after starting an integer division.
11066
11067 -mfix-r10000
11068 -mno-fix-r10000
11069 Work around certain R10000 errata:
11070
11071 - "ll"/"sc" sequences may not behave atomically on revisions
11072 prior to 3.0. They may deadlock on revisions 2.6 and earlier.
11073
11074 This option can only be used if the target architecture supports
11075 branch-likely instructions. -mfix-r10000 is the default when
11076 -march=r10000 is used; -mno-fix-r10000 is the default otherwise.
11077
11078 -mfix-vr4120
11079 -mno-fix-vr4120
11080 Work around certain VR4120 errata:
11081
11082 - "dmultu" does not always produce the correct result.
11083
11084 - "div" and "ddiv" do not always produce the correct result if
11085 one of the operands is negative.
11086
11087 The workarounds for the division errata rely on special functions
11088 in libgcc.a. At present, these functions are only provided by the
11089 "mips64vr*-elf" configurations.
11090
11091 Other VR4120 errata require a nop to be inserted between certain
11092 pairs of instructions. These errata are handled by the assembler,
11093 not by GCC itself.
11094
11095 -mfix-vr4130
11096 Work around the VR4130 "mflo"/"mfhi" errata. The workarounds are
11097 implemented by the assembler rather than by GCC, although GCC will
11098 avoid using "mflo" and "mfhi" if the VR4130 "macc", "macchi",
11099 "dmacc" and "dmacchi" instructions are available instead.
11100
11101 -mfix-sb1
11102 -mno-fix-sb1
11103 Work around certain SB-1 CPU core errata. (This flag currently
11104 works around the SB-1 revision 2 "F1" and "F2" floating point
11105 errata.)
11106
11107 -mr10k-cache-barrier=setting
11108 Specify whether GCC should insert cache barriers to avoid the side-
11109 effects of speculation on R10K processors.
11110
11111 In common with many processors, the R10K tries to predict the
11112 outcome of a conditional branch and speculatively executes
11113 instructions from the "taken" branch. It later aborts these
11114 instructions if the predicted outcome was wrong. However, on the
11115 R10K, even aborted instructions can have side effects.
11116
11117 This problem only affects kernel stores and, depending on the
11118 system, kernel loads. As an example, a speculatively-executed
11119 store may load the target memory into cache and mark the cache line
11120 as dirty, even if the store itself is later aborted. If a DMA
11121 operation writes to the same area of memory before the "dirty" line
11122 is flushed, the cached data will overwrite the DMA-ed data. See
11123 the R10K processor manual for a full description, including other
11124 potential problems.
11125
11126 One workaround is to insert cache barrier instructions before every
11127 memory access that might be speculatively executed and that might
11128 have side effects even if aborted. -mr10k-cache-barrier=setting
11129 controls GCC's implementation of this workaround. It assumes that
11130 aborted accesses to any byte in the following regions will not have
11131 side effects:
11132
11133 1. the memory occupied by the current function's stack frame;
11134
11135 2. the memory occupied by an incoming stack argument;
11136
11137 3. the memory occupied by an object with a link-time-constant
11138 address.
11139
11140 It is the kernel's responsibility to ensure that speculative
11141 accesses to these regions are indeed safe.
11142
11143 If the input program contains a function declaration such as:
11144
11145 void foo (void);
11146
11147 then the implementation of "foo" must allow "j foo" and "jal foo"
11148 to be executed speculatively. GCC honors this restriction for
11149 functions it compiles itself. It expects non-GCC functions (such
11150 as hand-written assembly code) to do the same.
11151
11152 The option has three forms:
11153
11154 -mr10k-cache-barrier=load-store
11155 Insert a cache barrier before a load or store that might be
11156 speculatively executed and that might have side effects even if
11157 aborted.
11158
11159 -mr10k-cache-barrier=store
11160 Insert a cache barrier before a store that might be
11161 speculatively executed and that might have side effects even if
11162 aborted.
11163
11164 -mr10k-cache-barrier=none
11165 Disable the insertion of cache barriers. This is the default
11166 setting.
11167
11168 -mflush-func=func
11169 -mno-flush-func
11170 Specifies the function to call to flush the I and D caches, or to
11171 not call any such function. If called, the function must take the
11172 same arguments as the common "_flush_func()", that is, the address
11173 of the memory range for which the cache is being flushed, the size
11174 of the memory range, and the number 3 (to flush both caches). The
11175 default depends on the target GCC was configured for, but commonly
11176 is either _flush_func or __cpu_flush.
11177
11178 mbranch-cost=num
11179 Set the cost of branches to roughly num "simple" instructions.
11180 This cost is only a heuristic and is not guaranteed to produce
11181 consistent results across releases. A zero cost redundantly
11182 selects the default, which is based on the -mtune setting.
11183
11184 -mbranch-likely
11185 -mno-branch-likely
11186 Enable or disable use of Branch Likely instructions, regardless of
11187 the default for the selected architecture. By default, Branch
11188 Likely instructions may be generated if they are supported by the
11189 selected architecture. An exception is for the MIPS32 and MIPS64
11190 architectures and processors which implement those architectures;
11191 for those, Branch Likely instructions will not be generated by
11192 default because the MIPS32 and MIPS64 architectures specifically
11193 deprecate their use.
11194
11195 -mfp-exceptions
11196 -mno-fp-exceptions
11197 Specifies whether FP exceptions are enabled. This affects how we
11198 schedule FP instructions for some processors. The default is that
11199 FP exceptions are enabled.
11200
11201 For instance, on the SB-1, if FP exceptions are disabled, and we
11202 are emitting 64-bit code, then we can use both FP pipes.
11203 Otherwise, we can only use one FP pipe.
11204
11205 -mvr4130-align
11206 -mno-vr4130-align
11207 The VR4130 pipeline is two-way superscalar, but can only issue two
11208 instructions together if the first one is 8-byte aligned. When
11209 this option is enabled, GCC will align pairs of instructions that
11210 it thinks should execute in parallel.
11211
11212 This option only has an effect when optimizing for the VR4130. It
11213 normally makes code faster, but at the expense of making it bigger.
11214 It is enabled by default at optimization level -O3.
11215
11216 MMIX Options
11217 These options are defined for the MMIX:
11218
11219 -mlibfuncs
11220 -mno-libfuncs
11221 Specify that intrinsic library functions are being compiled,
11222 passing all values in registers, no matter the size.
11223
11224 -mepsilon
11225 -mno-epsilon
11226 Generate floating-point comparison instructions that compare with
11227 respect to the "rE" epsilon register.
11228
11229 -mabi=mmixware
11230 -mabi=gnu
11231 Generate code that passes function parameters and return values
11232 that (in the called function) are seen as registers $0 and up, as
11233 opposed to the GNU ABI which uses global registers $231 and up.
11234
11235 -mzero-extend
11236 -mno-zero-extend
11237 When reading data from memory in sizes shorter than 64 bits, use
11238 (do not use) zero-extending load instructions by default, rather
11239 than sign-extending ones.
11240
11241 -mknuthdiv
11242 -mno-knuthdiv
11243 Make the result of a division yielding a remainder have the same
11244 sign as the divisor. With the default, -mno-knuthdiv, the sign of
11245 the remainder follows the sign of the dividend. Both methods are
11246 arithmetically valid, the latter being almost exclusively used.
11247
11248 -mtoplevel-symbols
11249 -mno-toplevel-symbols
11250 Prepend (do not prepend) a : to all global symbols, so the assembly
11251 code can be used with the "PREFIX" assembly directive.
11252
11253 -melf
11254 Generate an executable in the ELF format, rather than the default
11255 mmo format used by the mmix simulator.
11256
11257 -mbranch-predict
11258 -mno-branch-predict
11259 Use (do not use) the probable-branch instructions, when static
11260 branch prediction indicates a probable branch.
11261
11262 -mbase-addresses
11263 -mno-base-addresses
11264 Generate (do not generate) code that uses base addresses. Using a
11265 base address automatically generates a request (handled by the
11266 assembler and the linker) for a constant to be set up in a global
11267 register. The register is used for one or more base address
11268 requests within the range 0 to 255 from the value held in the
11269 register. The generally leads to short and fast code, but the
11270 number of different data items that can be addressed is limited.
11271 This means that a program that uses lots of static data may require
11272 -mno-base-addresses.
11273
11274 -msingle-exit
11275 -mno-single-exit
11276 Force (do not force) generated code to have a single exit point in
11277 each function.
11278
11279 MN10300 Options
11280 These -m options are defined for Matsushita MN10300 architectures:
11281
11282 -mmult-bug
11283 Generate code to avoid bugs in the multiply instructions for the
11284 MN10300 processors. This is the default.
11285
11286 -mno-mult-bug
11287 Do not generate code to avoid bugs in the multiply instructions for
11288 the MN10300 processors.
11289
11290 -mam33
11291 Generate code which uses features specific to the AM33 processor.
11292
11293 -mno-am33
11294 Do not generate code which uses features specific to the AM33
11295 processor. This is the default.
11296
11297 -mreturn-pointer-on-d0
11298 When generating a function which returns a pointer, return the
11299 pointer in both "a0" and "d0". Otherwise, the pointer is returned
11300 only in a0, and attempts to call such functions without a prototype
11301 would result in errors. Note that this option is on by default;
11302 use -mno-return-pointer-on-d0 to disable it.
11303
11304 -mno-crt0
11305 Do not link in the C run-time initialization object file.
11306
11307 -mrelax
11308 Indicate to the linker that it should perform a relaxation
11309 optimization pass to shorten branches, calls and absolute memory
11310 addresses. This option only has an effect when used on the command
11311 line for the final link step.
11312
11313 This option makes symbolic debugging impossible.
11314
11315 PDP-11 Options
11316 These options are defined for the PDP-11:
11317
11318 -mfpu
11319 Use hardware FPP floating point. This is the default. (FIS
11320 floating point on the PDP-11/40 is not supported.)
11321
11322 -msoft-float
11323 Do not use hardware floating point.
11324
11325 -mac0
11326 Return floating-point results in ac0 (fr0 in Unix assembler
11327 syntax).
11328
11329 -mno-ac0
11330 Return floating-point results in memory. This is the default.
11331
11332 -m40
11333 Generate code for a PDP-11/40.
11334
11335 -m45
11336 Generate code for a PDP-11/45. This is the default.
11337
11338 -m10
11339 Generate code for a PDP-11/10.
11340
11341 -mbcopy-builtin
11342 Use inline "movmemhi" patterns for copying memory. This is the
11343 default.
11344
11345 -mbcopy
11346 Do not use inline "movmemhi" patterns for copying memory.
11347
11348 -mint16
11349 -mno-int32
11350 Use 16-bit "int". This is the default.
11351
11352 -mint32
11353 -mno-int16
11354 Use 32-bit "int".
11355
11356 -mfloat64
11357 -mno-float32
11358 Use 64-bit "float". This is the default.
11359
11360 -mfloat32
11361 -mno-float64
11362 Use 32-bit "float".
11363
11364 -mabshi
11365 Use "abshi2" pattern. This is the default.
11366
11367 -mno-abshi
11368 Do not use "abshi2" pattern.
11369
11370 -mbranch-expensive
11371 Pretend that branches are expensive. This is for experimenting
11372 with code generation only.
11373
11374 -mbranch-cheap
11375 Do not pretend that branches are expensive. This is the default.
11376
11377 -msplit
11378 Generate code for a system with split I&D.
11379
11380 -mno-split
11381 Generate code for a system without split I&D. This is the default.
11382
11383 -munix-asm
11384 Use Unix assembler syntax. This is the default when configured for
11385 pdp11-*-bsd.
11386
11387 -mdec-asm
11388 Use DEC assembler syntax. This is the default when configured for
11389 any PDP-11 target other than pdp11-*-bsd.
11390
11391 picoChip Options
11392 These -m options are defined for picoChip implementations:
11393
11394 -mae=ae_type
11395 Set the instruction set, register set, and instruction scheduling
11396 parameters for array element type ae_type. Supported values for
11397 ae_type are ANY, MUL, and MAC.
11398
11399 -mae=ANY selects a completely generic AE type. Code generated with
11400 this option will run on any of the other AE types. The code will
11401 not be as efficient as it would be if compiled for a specific AE
11402 type, and some types of operation (e.g., multiplication) will not
11403 work properly on all types of AE.
11404
11405 -mae=MUL selects a MUL AE type. This is the most useful AE type
11406 for compiled code, and is the default.
11407
11408 -mae=MAC selects a DSP-style MAC AE. Code compiled with this
11409 option may suffer from poor performance of byte (char)
11410 manipulation, since the DSP AE does not provide hardware support
11411 for byte load/stores.
11412
11413 -msymbol-as-address
11414 Enable the compiler to directly use a symbol name as an address in
11415 a load/store instruction, without first loading it into a register.
11416 Typically, the use of this option will generate larger programs,
11417 which run faster than when the option isn't used. However, the
11418 results vary from program to program, so it is left as a user
11419 option, rather than being permanently enabled.
11420
11421 -mno-inefficient-warnings
11422 Disables warnings about the generation of inefficient code. These
11423 warnings can be generated, for example, when compiling code which
11424 performs byte-level memory operations on the MAC AE type. The MAC
11425 AE has no hardware support for byte-level memory operations, so all
11426 byte load/stores must be synthesized from word load/store
11427 operations. This is inefficient and a warning will be generated
11428 indicating to the programmer that they should rewrite the code to
11429 avoid byte operations, or to target an AE type which has the
11430 necessary hardware support. This option enables the warning to be
11431 turned off.
11432
11433 PowerPC Options
11434 These are listed under
11435
11436 IBM RS/6000 and PowerPC Options
11437 These -m options are defined for the IBM RS/6000 and PowerPC:
11438
11439 -mpower
11440 -mno-power
11441 -mpower2
11442 -mno-power2
11443 -mpowerpc
11444 -mno-powerpc
11445 -mpowerpc-gpopt
11446 -mno-powerpc-gpopt
11447 -mpowerpc-gfxopt
11448 -mno-powerpc-gfxopt
11449 -mpowerpc64
11450 -mno-powerpc64
11451 -mmfcrf
11452 -mno-mfcrf
11453 -mpopcntb
11454 -mno-popcntb
11455 -mpopcntd
11456 -mno-popcntd
11457 -mfprnd
11458 -mno-fprnd
11459 -mcmpb
11460 -mno-cmpb
11461 -mmfpgpr
11462 -mno-mfpgpr
11463 -mhard-dfp
11464 -mno-hard-dfp
11465 GCC supports two related instruction set architectures for the
11466 RS/6000 and PowerPC. The POWER instruction set are those
11467 instructions supported by the rios chip set used in the original
11468 RS/6000 systems and the PowerPC instruction set is the architecture
11469 of the Freescale MPC5xx, MPC6xx, MPC8xx microprocessors, and the
11470 IBM 4xx, 6xx, and follow-on microprocessors.
11471
11472 Neither architecture is a subset of the other. However there is a
11473 large common subset of instructions supported by both. An MQ
11474 register is included in processors supporting the POWER
11475 architecture.
11476
11477 You use these options to specify which instructions are available
11478 on the processor you are using. The default value of these options
11479 is determined when configuring GCC. Specifying the -mcpu=cpu_type
11480 overrides the specification of these options. We recommend you use
11481 the -mcpu=cpu_type option rather than the options listed above.
11482
11483 The -mpower option allows GCC to generate instructions that are
11484 found only in the POWER architecture and to use the MQ register.
11485 Specifying -mpower2 implies -power and also allows GCC to generate
11486 instructions that are present in the POWER2 architecture but not
11487 the original POWER architecture.
11488
11489 The -mpowerpc option allows GCC to generate instructions that are
11490 found only in the 32-bit subset of the PowerPC architecture.
11491 Specifying -mpowerpc-gpopt implies -mpowerpc and also allows GCC to
11492 use the optional PowerPC architecture instructions in the General
11493 Purpose group, including floating-point square root. Specifying
11494 -mpowerpc-gfxopt implies -mpowerpc and also allows GCC to use the
11495 optional PowerPC architecture instructions in the Graphics group,
11496 including floating-point select.
11497
11498 The -mmfcrf option allows GCC to generate the move from condition
11499 register field instruction implemented on the POWER4 processor and
11500 other processors that support the PowerPC V2.01 architecture. The
11501 -mpopcntb option allows GCC to generate the popcount and double
11502 precision FP reciprocal estimate instruction implemented on the
11503 POWER5 processor and other processors that support the PowerPC
11504 V2.02 architecture. The -mpopcntd option allows GCC to generate
11505 the popcount instruction implemented on the POWER7 processor and
11506 other processors that support the PowerPC V2.06 architecture. The
11507 -mfprnd option allows GCC to generate the FP round to integer
11508 instructions implemented on the POWER5+ processor and other
11509 processors that support the PowerPC V2.03 architecture. The -mcmpb
11510 option allows GCC to generate the compare bytes instruction
11511 implemented on the POWER6 processor and other processors that
11512 support the PowerPC V2.05 architecture. The -mmfpgpr option allows
11513 GCC to generate the FP move to/from general purpose register
11514 instructions implemented on the POWER6X processor and other
11515 processors that support the extended PowerPC V2.05 architecture.
11516 The -mhard-dfp option allows GCC to generate the decimal floating
11517 point instructions implemented on some POWER processors.
11518
11519 The -mpowerpc64 option allows GCC to generate the additional 64-bit
11520 instructions that are found in the full PowerPC64 architecture and
11521 to treat GPRs as 64-bit, doubleword quantities. GCC defaults to
11522 -mno-powerpc64.
11523
11524 If you specify both -mno-power and -mno-powerpc, GCC will use only
11525 the instructions in the common subset of both architectures plus
11526 some special AIX common-mode calls, and will not use the MQ
11527 register. Specifying both -mpower and -mpowerpc permits GCC to use
11528 any instruction from either architecture and to allow use of the MQ
11529 register; specify this for the Motorola MPC601.
11530
11531 -mnew-mnemonics
11532 -mold-mnemonics
11533 Select which mnemonics to use in the generated assembler code.
11534 With -mnew-mnemonics, GCC uses the assembler mnemonics defined for
11535 the PowerPC architecture. With -mold-mnemonics it uses the
11536 assembler mnemonics defined for the POWER architecture.
11537 Instructions defined in only one architecture have only one
11538 mnemonic; GCC uses that mnemonic irrespective of which of these
11539 options is specified.
11540
11541 GCC defaults to the mnemonics appropriate for the architecture in
11542 use. Specifying -mcpu=cpu_type sometimes overrides the value of
11543 these option. Unless you are building a cross-compiler, you should
11544 normally not specify either -mnew-mnemonics or -mold-mnemonics, but
11545 should instead accept the default.
11546
11547 -mcpu=cpu_type
11548 Set architecture type, register usage, choice of mnemonics, and
11549 instruction scheduling parameters for machine type cpu_type.
11550 Supported values for cpu_type are 401, 403, 405, 405fp, 440, 440fp,
11551 464, 464fp, 505, 601, 602, 603, 603e, 604, 604e, 620, 630, 740,
11552 7400, 7450, 750, 801, 821, 823, 860, 970, 8540, e300c2, e300c3,
11553 e500mc, ec603e, G3, G4, G5, power, power2, power3, power4, power5,
11554 power5+, power6, power6x, power7, common, powerpc, powerpc64, rios,
11555 rios1, rios2, rsc, and rs64.
11556
11557 -mcpu=common selects a completely generic processor. Code
11558 generated under this option will run on any POWER or PowerPC
11559 processor. GCC will use only the instructions in the common subset
11560 of both architectures, and will not use the MQ register. GCC
11561 assumes a generic processor model for scheduling purposes.
11562
11563 -mcpu=power, -mcpu=power2, -mcpu=powerpc, and -mcpu=powerpc64
11564 specify generic POWER, POWER2, pure 32-bit PowerPC (i.e., not
11565 MPC601), and 64-bit PowerPC architecture machine types, with an
11566 appropriate, generic processor model assumed for scheduling
11567 purposes.
11568
11569 The other options specify a specific processor. Code generated
11570 under those options will run best on that processor, and may not
11571 run at all on others.
11572
11573 The -mcpu options automatically enable or disable the following
11574 options:
11575
11576 -maltivec -mfprnd -mhard-float -mmfcrf -mmultiple
11577 -mnew-mnemonics -mpopcntb -mpopcntd -mpower -mpower2
11578 -mpowerpc64 -mpowerpc-gpopt -mpowerpc-gfxopt -msingle-float
11579 -mdouble-float -msimple-fpu -mstring -mmulhw -mdlmzb -mmfpgpr
11580 -mvsx
11581
11582 The particular options set for any particular CPU will vary between
11583 compiler versions, depending on what setting seems to produce
11584 optimal code for that CPU; it doesn't necessarily reflect the
11585 actual hardware's capabilities. If you wish to set an individual
11586 option to a particular value, you may specify it after the -mcpu
11587 option, like -mcpu=970 -mno-altivec.
11588
11589 On AIX, the -maltivec and -mpowerpc64 options are not enabled or
11590 disabled by the -mcpu option at present because AIX does not have
11591 full support for these options. You may still enable or disable
11592 them individually if you're sure it'll work in your environment.
11593
11594 -mtune=cpu_type
11595 Set the instruction scheduling parameters for machine type
11596 cpu_type, but do not set the architecture type, register usage, or
11597 choice of mnemonics, as -mcpu=cpu_type would. The same values for
11598 cpu_type are used for -mtune as for -mcpu. If both are specified,
11599 the code generated will use the architecture, registers, and
11600 mnemonics set by -mcpu, but the scheduling parameters set by
11601 -mtune.
11602
11603 -mcmodel=small
11604 Generate PowerPC64 code for the small model: The TOC is limited to
11605 64k.
11606
11607 -mcmodel=medium
11608 Generate PowerPC64 code for the medium model: The TOC and other
11609 static data may be up to a total of 4G in size.
11610
11611 -mcmodel=large
11612 Generate PowerPC64 code for the large model: The TOC may be up to
11613 4G in size. Other data and code is only limited by the 64-bit
11614 address space.
11615
11616 -mswdiv
11617 -mno-swdiv
11618 Generate code to compute division as reciprocal estimate and
11619 iterative refinement, creating opportunities for increased
11620 throughput. This feature requires: optional PowerPC Graphics
11621 instruction set for single precision and FRE instruction for double
11622 precision, assuming divides cannot generate user-visible traps, and
11623 the domain values not include Infinities, denormals or zero
11624 denominator.
11625
11626 -maltivec
11627 -mno-altivec
11628 Generate code that uses (does not use) AltiVec instructions, and
11629 also enable the use of built-in functions that allow more direct
11630 access to the AltiVec instruction set. You may also need to set
11631 -mabi=altivec to adjust the current ABI with AltiVec ABI
11632 enhancements.
11633
11634 -mvrsave
11635 -mno-vrsave
11636 Generate VRSAVE instructions when generating AltiVec code.
11637
11638 -mgen-cell-microcode
11639 Generate Cell microcode instructions
11640
11641 -mwarn-cell-microcode
11642 Warning when a Cell microcode instruction is going to emitted. An
11643 example of a Cell microcode instruction is a variable shift.
11644
11645 -msecure-plt
11646 Generate code that allows ld and ld.so to build executables and
11647 shared libraries with non-exec .plt and .got sections. This is a
11648 PowerPC 32-bit SYSV ABI option.
11649
11650 -mbss-plt
11651 Generate code that uses a BSS .plt section that ld.so fills in, and
11652 requires .plt and .got sections that are both writable and
11653 executable. This is a PowerPC 32-bit SYSV ABI option.
11654
11655 -misel
11656 -mno-isel
11657 This switch enables or disables the generation of ISEL
11658 instructions.
11659
11660 -misel=yes/no
11661 This switch has been deprecated. Use -misel and -mno-isel instead.
11662
11663 -mspe
11664 -mno-spe
11665 This switch enables or disables the generation of SPE simd
11666 instructions.
11667
11668 -mpaired
11669 -mno-paired
11670 This switch enables or disables the generation of PAIRED simd
11671 instructions.
11672
11673 -mspe=yes/no
11674 This option has been deprecated. Use -mspe and -mno-spe instead.
11675
11676 -mvsx
11677 -mno-vsx
11678 Generate code that uses (does not use) vector/scalar (VSX)
11679 instructions, and also enable the use of built-in functions that
11680 allow more direct access to the VSX instruction set.
11681
11682 -mfloat-gprs=yes/single/double/no
11683 -mfloat-gprs
11684 This switch enables or disables the generation of floating point
11685 operations on the general purpose registers for architectures that
11686 support it.
11687
11688 The argument yes or single enables the use of single-precision
11689 floating point operations.
11690
11691 The argument double enables the use of single and double-precision
11692 floating point operations.
11693
11694 The argument no disables floating point operations on the general
11695 purpose registers.
11696
11697 This option is currently only available on the MPC854x.
11698
11699 -m32
11700 -m64
11701 Generate code for 32-bit or 64-bit environments of Darwin and SVR4
11702 targets (including GNU/Linux). The 32-bit environment sets int,
11703 long and pointer to 32 bits and generates code that runs on any
11704 PowerPC variant. The 64-bit environment sets int to 32 bits and
11705 long and pointer to 64 bits, and generates code for PowerPC64, as
11706 for -mpowerpc64.
11707
11708 -mfull-toc
11709 -mno-fp-in-toc
11710 -mno-sum-in-toc
11711 -mminimal-toc
11712 Modify generation of the TOC (Table Of Contents), which is created
11713 for every executable file. The -mfull-toc option is selected by
11714 default. In that case, GCC will allocate at least one TOC entry
11715 for each unique non-automatic variable reference in your program.
11716 GCC will also place floating-point constants in the TOC. However,
11717 only 16,384 entries are available in the TOC.
11718
11719 If you receive a linker error message that saying you have
11720 overflowed the available TOC space, you can reduce the amount of
11721 TOC space used with the -mno-fp-in-toc and -mno-sum-in-toc options.
11722 -mno-fp-in-toc prevents GCC from putting floating-point constants
11723 in the TOC and -mno-sum-in-toc forces GCC to generate code to
11724 calculate the sum of an address and a constant at run-time instead
11725 of putting that sum into the TOC. You may specify one or both of
11726 these options. Each causes GCC to produce very slightly slower and
11727 larger code at the expense of conserving TOC space.
11728
11729 If you still run out of space in the TOC even when you specify both
11730 of these options, specify -mminimal-toc instead. This option
11731 causes GCC to make only one TOC entry for every file. When you
11732 specify this option, GCC will produce code that is slower and
11733 larger but which uses extremely little TOC space. You may wish to
11734 use this option only on files that contain less frequently executed
11735 code.
11736
11737 -maix64
11738 -maix32
11739 Enable 64-bit AIX ABI and calling convention: 64-bit pointers,
11740 64-bit "long" type, and the infrastructure needed to support them.
11741 Specifying -maix64 implies -mpowerpc64 and -mpowerpc, while -maix32
11742 disables the 64-bit ABI and implies -mno-powerpc64. GCC defaults
11743 to -maix32.
11744
11745 -mxl-compat
11746 -mno-xl-compat
11747 Produce code that conforms more closely to IBM XL compiler
11748 semantics when using AIX-compatible ABI. Pass floating-point
11749 arguments to prototyped functions beyond the register save area
11750 (RSA) on the stack in addition to argument FPRs. Do not assume
11751 that most significant double in 128-bit long double value is
11752 properly rounded when comparing values and converting to double.
11753 Use XL symbol names for long double support routines.
11754
11755 The AIX calling convention was extended but not initially
11756 documented to handle an obscure K&R C case of calling a function
11757 that takes the address of its arguments with fewer arguments than
11758 declared. IBM XL compilers access floating point arguments which
11759 do not fit in the RSA from the stack when a subroutine is compiled
11760 without optimization. Because always storing floating-point
11761 arguments on the stack is inefficient and rarely needed, this
11762 option is not enabled by default and only is necessary when calling
11763 subroutines compiled by IBM XL compilers without optimization.
11764
11765 -mpe
11766 Support IBM RS/6000 SP Parallel Environment (PE). Link an
11767 application written to use message passing with special startup
11768 code to enable the application to run. The system must have PE
11769 installed in the standard location (/usr/lpp/ppe.poe/), or the
11770 specs file must be overridden with the -specs= option to specify
11771 the appropriate directory location. The Parallel Environment does
11772 not support threads, so the -mpe option and the -pthread option are
11773 incompatible.
11774
11775 -malign-natural
11776 -malign-power
11777 On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
11778 -malign-natural overrides the ABI-defined alignment of larger
11779 types, such as floating-point doubles, on their natural size-based
11780 boundary. The option -malign-power instructs GCC to follow the
11781 ABI-specified alignment rules. GCC defaults to the standard
11782 alignment defined in the ABI.
11783
11784 On 64-bit Darwin, natural alignment is the default, and
11785 -malign-power is not supported.
11786
11787 -msoft-float
11788 -mhard-float
11789 Generate code that does not use (uses) the floating-point register
11790 set. Software floating point emulation is provided if you use the
11791 -msoft-float option, and pass the option to GCC when linking.
11792
11793 -msingle-float
11794 -mdouble-float
11795 Generate code for single or double-precision floating point
11796 operations. -mdouble-float implies -msingle-float.
11797
11798 -msimple-fpu
11799 Do not generate sqrt and div instructions for hardware floating
11800 point unit.
11801
11802 -mfpu
11803 Specify type of floating point unit. Valid values are sp_lite
11804 (equivalent to -msingle-float -msimple-fpu), dp_lite (equivalent to
11805 -mdouble-float -msimple-fpu), sp_full (equivalent to
11806 -msingle-float), and dp_full (equivalent to -mdouble-float).
11807
11808 -mxilinx-fpu
11809 Perform optimizations for floating point unit on Xilinx PPC
11810 405/440.
11811
11812 -mmultiple
11813 -mno-multiple
11814 Generate code that uses (does not use) the load multiple word
11815 instructions and the store multiple word instructions. These
11816 instructions are generated by default on POWER systems, and not
11817 generated on PowerPC systems. Do not use -mmultiple on little
11818 endian PowerPC systems, since those instructions do not work when
11819 the processor is in little endian mode. The exceptions are PPC740
11820 and PPC750 which permit the instructions usage in little endian
11821 mode.
11822
11823 -mstring
11824 -mno-string
11825 Generate code that uses (does not use) the load string instructions
11826 and the store string word instructions to save multiple registers
11827 and do small block moves. These instructions are generated by
11828 default on POWER systems, and not generated on PowerPC systems. Do
11829 not use -mstring on little endian PowerPC systems, since those
11830 instructions do not work when the processor is in little endian
11831 mode. The exceptions are PPC740 and PPC750 which permit the
11832 instructions usage in little endian mode.
11833
11834 -mupdate
11835 -mno-update
11836 Generate code that uses (does not use) the load or store
11837 instructions that update the base register to the address of the
11838 calculated memory location. These instructions are generated by
11839 default. If you use -mno-update, there is a small window between
11840 the time that the stack pointer is updated and the address of the
11841 previous frame is stored, which means code that walks the stack
11842 frame across interrupts or signals may get corrupted data.
11843
11844 -mavoid-indexed-addresses
11845 -mno-avoid-indexed-addresses
11846 Generate code that tries to avoid (not avoid) the use of indexed
11847 load or store instructions. These instructions can incur a
11848 performance penalty on Power6 processors in certain situations,
11849 such as when stepping through large arrays that cross a 16M
11850 boundary. This option is enabled by default when targetting Power6
11851 and disabled otherwise.
11852
11853 -mfused-madd
11854 -mno-fused-madd
11855 Generate code that uses (does not use) the floating point multiply
11856 and accumulate instructions. These instructions are generated by
11857 default if hardware floating is used.
11858
11859 -mmulhw
11860 -mno-mulhw
11861 Generate code that uses (does not use) the half-word multiply and
11862 multiply-accumulate instructions on the IBM 405, 440 and 464
11863 processors. These instructions are generated by default when
11864 targetting those processors.
11865
11866 -mdlmzb
11867 -mno-dlmzb
11868 Generate code that uses (does not use) the string-search dlmzb
11869 instruction on the IBM 405, 440 and 464 processors. This
11870 instruction is generated by default when targetting those
11871 processors.
11872
11873 -mno-bit-align
11874 -mbit-align
11875 On System V.4 and embedded PowerPC systems do not (do) force
11876 structures and unions that contain bit-fields to be aligned to the
11877 base type of the bit-field.
11878
11879 For example, by default a structure containing nothing but 8
11880 "unsigned" bit-fields of length 1 would be aligned to a 4 byte
11881 boundary and have a size of 4 bytes. By using -mno-bit-align, the
11882 structure would be aligned to a 1 byte boundary and be one byte in
11883 size.
11884
11885 -mno-strict-align
11886 -mstrict-align
11887 On System V.4 and embedded PowerPC systems do not (do) assume that
11888 unaligned memory references will be handled by the system.
11889
11890 -mrelocatable
11891 -mno-relocatable
11892 On embedded PowerPC systems generate code that allows (does not
11893 allow) the program to be relocated to a different address at
11894 runtime. If you use -mrelocatable on any module, all objects
11895 linked together must be compiled with -mrelocatable or
11896 -mrelocatable-lib.
11897
11898 -mrelocatable-lib
11899 -mno-relocatable-lib
11900 On embedded PowerPC systems generate code that allows (does not
11901 allow) the program to be relocated to a different address at
11902 runtime. Modules compiled with -mrelocatable-lib can be linked
11903 with either modules compiled without -mrelocatable and
11904 -mrelocatable-lib or with modules compiled with the -mrelocatable
11905 options.
11906
11907 -mno-toc
11908 -mtoc
11909 On System V.4 and embedded PowerPC systems do not (do) assume that
11910 register 2 contains a pointer to a global area pointing to the
11911 addresses used in the program.
11912
11913 -mlittle
11914 -mlittle-endian
11915 On System V.4 and embedded PowerPC systems compile code for the
11916 processor in little endian mode. The -mlittle-endian option is the
11917 same as -mlittle.
11918
11919 -mbig
11920 -mbig-endian
11921 On System V.4 and embedded PowerPC systems compile code for the
11922 processor in big endian mode. The -mbig-endian option is the same
11923 as -mbig.
11924
11925 -mdynamic-no-pic
11926 On Darwin and Mac OS X systems, compile code so that it is not
11927 relocatable, but that its external references are relocatable. The
11928 resulting code is suitable for applications, but not shared
11929 libraries.
11930
11931 -mprioritize-restricted-insns=priority
11932 This option controls the priority that is assigned to dispatch-slot
11933 restricted instructions during the second scheduling pass. The
11934 argument priority takes the value 0/1/2 to assign
11935 no/highest/second-highest priority to dispatch slot restricted
11936 instructions.
11937
11938 -msched-costly-dep=dependence_type
11939 This option controls which dependences are considered costly by the
11940 target during instruction scheduling. The argument dependence_type
11941 takes one of the following values: no: no dependence is costly,
11942 all: all dependences are costly, true_store_to_load: a true
11943 dependence from store to load is costly, store_to_load: any
11944 dependence from store to load is costly, number: any dependence
11945 which latency >= number is costly.
11946
11947 -minsert-sched-nops=scheme
11948 This option controls which nop insertion scheme will be used during
11949 the second scheduling pass. The argument scheme takes one of the
11950 following values: no: Don't insert nops. pad: Pad with nops any
11951 dispatch group which has vacant issue slots, according to the
11952 scheduler's grouping. regroup_exact: Insert nops to force costly
11953 dependent insns into separate groups. Insert exactly as many nops
11954 as needed to force an insn to a new group, according to the
11955 estimated processor grouping. number: Insert nops to force costly
11956 dependent insns into separate groups. Insert number nops to force
11957 an insn to a new group.
11958
11959 -mcall-sysv
11960 On System V.4 and embedded PowerPC systems compile code using
11961 calling conventions that adheres to the March 1995 draft of the
11962 System V Application Binary Interface, PowerPC processor
11963 supplement. This is the default unless you configured GCC using
11964 powerpc-*-eabiaix.
11965
11966 -mcall-sysv-eabi
11967 Specify both -mcall-sysv and -meabi options.
11968
11969 -mcall-sysv-noeabi
11970 Specify both -mcall-sysv and -mno-eabi options.
11971
11972 -mcall-solaris
11973 On System V.4 and embedded PowerPC systems compile code for the
11974 Solaris operating system.
11975
11976 -mcall-linux
11977 On System V.4 and embedded PowerPC systems compile code for the
11978 Linux-based GNU system.
11979
11980 -mcall-gnu
11981 On System V.4 and embedded PowerPC systems compile code for the
11982 Hurd-based GNU system.
11983
11984 -mcall-netbsd
11985 On System V.4 and embedded PowerPC systems compile code for the
11986 NetBSD operating system.
11987
11988 -maix-struct-return
11989 Return all structures in memory (as specified by the AIX ABI).
11990
11991 -msvr4-struct-return
11992 Return structures smaller than 8 bytes in registers (as specified
11993 by the SVR4 ABI).
11994
11995 -mabi=abi-type
11996 Extend the current ABI with a particular extension, or remove such
11997 extension. Valid values are altivec, no-altivec, spe, no-spe,
11998 ibmlongdouble, ieeelongdouble.
11999
12000 -mabi=spe
12001 Extend the current ABI with SPE ABI extensions. This does not
12002 change the default ABI, instead it adds the SPE ABI extensions to
12003 the current ABI.
12004
12005 -mabi=no-spe
12006 Disable Booke SPE ABI extensions for the current ABI.
12007
12008 -mabi=ibmlongdouble
12009 Change the current ABI to use IBM extended precision long double.
12010 This is a PowerPC 32-bit SYSV ABI option.
12011
12012 -mabi=ieeelongdouble
12013 Change the current ABI to use IEEE extended precision long double.
12014 This is a PowerPC 32-bit Linux ABI option.
12015
12016 -mprototype
12017 -mno-prototype
12018 On System V.4 and embedded PowerPC systems assume that all calls to
12019 variable argument functions are properly prototyped. Otherwise,
12020 the compiler must insert an instruction before every non prototyped
12021 call to set or clear bit 6 of the condition code register (CR) to
12022 indicate whether floating point values were passed in the floating
12023 point registers in case the function takes a variable arguments.
12024 With -mprototype, only calls to prototyped variable argument
12025 functions will set or clear the bit.
12026
12027 -msim
12028 On embedded PowerPC systems, assume that the startup module is
12029 called sim-crt0.o and that the standard C libraries are libsim.a
12030 and libc.a. This is the default for powerpc-*-eabisim
12031 configurations.
12032
12033 -mmvme
12034 On embedded PowerPC systems, assume that the startup module is
12035 called crt0.o and the standard C libraries are libmvme.a and
12036 libc.a.
12037
12038 -mads
12039 On embedded PowerPC systems, assume that the startup module is
12040 called crt0.o and the standard C libraries are libads.a and libc.a.
12041
12042 -myellowknife
12043 On embedded PowerPC systems, assume that the startup module is
12044 called crt0.o and the standard C libraries are libyk.a and libc.a.
12045
12046 -mvxworks
12047 On System V.4 and embedded PowerPC systems, specify that you are
12048 compiling for a VxWorks system.
12049
12050 -memb
12051 On embedded PowerPC systems, set the PPC_EMB bit in the ELF flags
12052 header to indicate that eabi extended relocations are used.
12053
12054 -meabi
12055 -mno-eabi
12056 On System V.4 and embedded PowerPC systems do (do not) adhere to
12057 the Embedded Applications Binary Interface (eabi) which is a set of
12058 modifications to the System V.4 specifications. Selecting -meabi
12059 means that the stack is aligned to an 8 byte boundary, a function
12060 "__eabi" is called to from "main" to set up the eabi environment,
12061 and the -msdata option can use both "r2" and "r13" to point to two
12062 separate small data areas. Selecting -mno-eabi means that the
12063 stack is aligned to a 16 byte boundary, do not call an
12064 initialization function from "main", and the -msdata option will
12065 only use "r13" to point to a single small data area. The -meabi
12066 option is on by default if you configured GCC using one of the
12067 powerpc*-*-eabi* options.
12068
12069 -msdata=eabi
12070 On System V.4 and embedded PowerPC systems, put small initialized
12071 "const" global and static data in the .sdata2 section, which is
12072 pointed to by register "r2". Put small initialized non-"const"
12073 global and static data in the .sdata section, which is pointed to
12074 by register "r13". Put small uninitialized global and static data
12075 in the .sbss section, which is adjacent to the .sdata section. The
12076 -msdata=eabi option is incompatible with the -mrelocatable option.
12077 The -msdata=eabi option also sets the -memb option.
12078
12079 -msdata=sysv
12080 On System V.4 and embedded PowerPC systems, put small global and
12081 static data in the .sdata section, which is pointed to by register
12082 "r13". Put small uninitialized global and static data in the .sbss
12083 section, which is adjacent to the .sdata section. The -msdata=sysv
12084 option is incompatible with the -mrelocatable option.
12085
12086 -msdata=default
12087 -msdata
12088 On System V.4 and embedded PowerPC systems, if -meabi is used,
12089 compile code the same as -msdata=eabi, otherwise compile code the
12090 same as -msdata=sysv.
12091
12092 -msdata=data
12093 On System V.4 and embedded PowerPC systems, put small global data
12094 in the .sdata section. Put small uninitialized global data in the
12095 .sbss section. Do not use register "r13" to address small data
12096 however. This is the default behavior unless other -msdata options
12097 are used.
12098
12099 -msdata=none
12100 -mno-sdata
12101 On embedded PowerPC systems, put all initialized global and static
12102 data in the .data section, and all uninitialized data in the .bss
12103 section.
12104
12105 -G num
12106 On embedded PowerPC systems, put global and static items less than
12107 or equal to num bytes into the small data or bss sections instead
12108 of the normal data or bss section. By default, num is 8. The -G
12109 num switch is also passed to the linker. All modules should be
12110 compiled with the same -G num value.
12111
12112 -mregnames
12113 -mno-regnames
12114 On System V.4 and embedded PowerPC systems do (do not) emit
12115 register names in the assembly language output using symbolic
12116 forms.
12117
12118 -mlongcall
12119 -mno-longcall
12120 By default assume that all calls are far away so that a longer more
12121 expensive calling sequence is required. This is required for calls
12122 further than 32 megabytes (33,554,432 bytes) from the current
12123 location. A short call will be generated if the compiler knows the
12124 call cannot be that far away. This setting can be overridden by
12125 the "shortcall" function attribute, or by "#pragma longcall(0)".
12126
12127 Some linkers are capable of detecting out-of-range calls and
12128 generating glue code on the fly. On these systems, long calls are
12129 unnecessary and generate slower code. As of this writing, the AIX
12130 linker can do this, as can the GNU linker for PowerPC/64. It is
12131 planned to add this feature to the GNU linker for 32-bit PowerPC
12132 systems as well.
12133
12134 On Darwin/PPC systems, "#pragma longcall" will generate "jbsr
12135 callee, L42", plus a "branch island" (glue code). The two target
12136 addresses represent the callee and the "branch island". The
12137 Darwin/PPC linker will prefer the first address and generate a "bl
12138 callee" if the PPC "bl" instruction will reach the callee directly;
12139 otherwise, the linker will generate "bl L42" to call the "branch
12140 island". The "branch island" is appended to the body of the
12141 calling function; it computes the full 32-bit address of the callee
12142 and jumps to it.
12143
12144 On Mach-O (Darwin) systems, this option directs the compiler emit
12145 to the glue for every direct call, and the Darwin linker decides
12146 whether to use or discard it.
12147
12148 In the future, we may cause GCC to ignore all longcall
12149 specifications when the linker is known to generate glue.
12150
12151 -pthread
12152 Adds support for multithreading with the pthreads library. This
12153 option sets flags for both the preprocessor and linker.
12154
12155 S/390 and zSeries Options
12156 These are the -m options defined for the S/390 and zSeries
12157 architecture.
12158
12159 -mhard-float
12160 -msoft-float
12161 Use (do not use) the hardware floating-point instructions and
12162 registers for floating-point operations. When -msoft-float is
12163 specified, functions in libgcc.a will be used to perform floating-
12164 point operations. When -mhard-float is specified, the compiler
12165 generates IEEE floating-point instructions. This is the default.
12166
12167 -mhard-dfp
12168 -mno-hard-dfp
12169 Use (do not use) the hardware decimal-floating-point instructions
12170 for decimal-floating-point operations. When -mno-hard-dfp is
12171 specified, functions in libgcc.a will be used to perform decimal-
12172 floating-point operations. When -mhard-dfp is specified, the
12173 compiler generates decimal-floating-point hardware instructions.
12174 This is the default for -march=z9-ec or higher.
12175
12176 -mlong-double-64
12177 -mlong-double-128
12178 These switches control the size of "long double" type. A size of
12179 64bit makes the "long double" type equivalent to the "double" type.
12180 This is the default.
12181
12182 -mbackchain
12183 -mno-backchain
12184 Store (do not store) the address of the caller's frame as backchain
12185 pointer into the callee's stack frame. A backchain may be needed
12186 to allow debugging using tools that do not understand DWARF-2 call
12187 frame information. When -mno-packed-stack is in effect, the
12188 backchain pointer is stored at the bottom of the stack frame; when
12189 -mpacked-stack is in effect, the backchain is placed into the
12190 topmost word of the 96/160 byte register save area.
12191
12192 In general, code compiled with -mbackchain is call-compatible with
12193 code compiled with -mmo-backchain; however, use of the backchain
12194 for debugging purposes usually requires that the whole binary is
12195 built with -mbackchain. Note that the combination of -mbackchain,
12196 -mpacked-stack and -mhard-float is not supported. In order to
12197 build a linux kernel use -msoft-float.
12198
12199 The default is to not maintain the backchain.
12200
12201 -mpacked-stack
12202 -mno-packed-stack
12203 Use (do not use) the packed stack layout. When -mno-packed-stack
12204 is specified, the compiler uses the all fields of the 96/160 byte
12205 register save area only for their default purpose; unused fields
12206 still take up stack space. When -mpacked-stack is specified,
12207 register save slots are densely packed at the top of the register
12208 save area; unused space is reused for other purposes, allowing for
12209 more efficient use of the available stack space. However, when
12210 -mbackchain is also in effect, the topmost word of the save area is
12211 always used to store the backchain, and the return address register
12212 is always saved two words below the backchain.
12213
12214 As long as the stack frame backchain is not used, code generated
12215 with -mpacked-stack is call-compatible with code generated with
12216 -mno-packed-stack. Note that some non-FSF releases of GCC 2.95 for
12217 S/390 or zSeries generated code that uses the stack frame backchain
12218 at run time, not just for debugging purposes. Such code is not
12219 call-compatible with code compiled with -mpacked-stack. Also, note
12220 that the combination of -mbackchain, -mpacked-stack and
12221 -mhard-float is not supported. In order to build a linux kernel
12222 use -msoft-float.
12223
12224 The default is to not use the packed stack layout.
12225
12226 -msmall-exec
12227 -mno-small-exec
12228 Generate (or do not generate) code using the "bras" instruction to
12229 do subroutine calls. This only works reliably if the total
12230 executable size does not exceed 64k. The default is to use the
12231 "basr" instruction instead, which does not have this limitation.
12232
12233 -m64
12234 -m31
12235 When -m31 is specified, generate code compliant to the GNU/Linux
12236 for S/390 ABI. When -m64 is specified, generate code compliant to
12237 the GNU/Linux for zSeries ABI. This allows GCC in particular to
12238 generate 64-bit instructions. For the s390 targets, the default is
12239 -m31, while the s390x targets default to -m64.
12240
12241 -mzarch
12242 -mesa
12243 When -mzarch is specified, generate code using the instructions
12244 available on z/Architecture. When -mesa is specified, generate
12245 code using the instructions available on ESA/390. Note that -mesa
12246 is not possible with -m64. When generating code compliant to the
12247 GNU/Linux for S/390 ABI, the default is -mesa. When generating
12248 code compliant to the GNU/Linux for zSeries ABI, the default is
12249 -mzarch.
12250
12251 -mmvcle
12252 -mno-mvcle
12253 Generate (or do not generate) code using the "mvcle" instruction to
12254 perform block moves. When -mno-mvcle is specified, use a "mvc"
12255 loop instead. This is the default unless optimizing for size.
12256
12257 -mdebug
12258 -mno-debug
12259 Print (or do not print) additional debug information when
12260 compiling. The default is to not print debug information.
12261
12262 -march=cpu-type
12263 Generate code that will run on cpu-type, which is the name of a
12264 system representing a certain processor type. Possible values for
12265 cpu-type are g5, g6, z900, z990, z9-109, z9-ec and z10. When
12266 generating code using the instructions available on z/Architecture,
12267 the default is -march=z900. Otherwise, the default is -march=g5.
12268
12269 -mtune=cpu-type
12270 Tune to cpu-type everything applicable about the generated code,
12271 except for the ABI and the set of available instructions. The list
12272 of cpu-type values is the same as for -march. The default is the
12273 value used for -march.
12274
12275 -mtpf-trace
12276 -mno-tpf-trace
12277 Generate code that adds (does not add) in TPF OS specific branches
12278 to trace routines in the operating system. This option is off by
12279 default, even when compiling for the TPF OS.
12280
12281 -mfused-madd
12282 -mno-fused-madd
12283 Generate code that uses (does not use) the floating point multiply
12284 and accumulate instructions. These instructions are generated by
12285 default if hardware floating point is used.
12286
12287 -mwarn-framesize=framesize
12288 Emit a warning if the current function exceeds the given frame
12289 size. Because this is a compile time check it doesn't need to be a
12290 real problem when the program runs. It is intended to identify
12291 functions which most probably cause a stack overflow. It is useful
12292 to be used in an environment with limited stack size e.g. the linux
12293 kernel.
12294
12295 -mwarn-dynamicstack
12296 Emit a warning if the function calls alloca or uses dynamically
12297 sized arrays. This is generally a bad idea with a limited stack
12298 size.
12299
12300 -mstack-guard=stack-guard
12301 -mstack-size=stack-size
12302 If these options are provided the s390 back end emits additional
12303 instructions in the function prologue which trigger a trap if the
12304 stack size is stack-guard bytes above the stack-size (remember that
12305 the stack on s390 grows downward). If the stack-guard option is
12306 omitted the smallest power of 2 larger than the frame size of the
12307 compiled function is chosen. These options are intended to be used
12308 to help debugging stack overflow problems. The additionally
12309 emitted code causes only little overhead and hence can also be used
12310 in production like systems without greater performance degradation.
12311 The given values have to be exact powers of 2 and stack-size has to
12312 be greater than stack-guard without exceeding 64k. In order to be
12313 efficient the extra code makes the assumption that the stack starts
12314 at an address aligned to the value given by stack-size. The stack-
12315 guard option can only be used in conjunction with stack-size.
12316
12317 Score Options
12318 These options are defined for Score implementations:
12319
12320 -meb
12321 Compile code for big endian mode. This is the default.
12322
12323 -mel
12324 Compile code for little endian mode.
12325
12326 -mnhwloop
12327 Disable generate bcnz instruction.
12328
12329 -muls
12330 Enable generate unaligned load and store instruction.
12331
12332 -mmac
12333 Enable the use of multiply-accumulate instructions. Disabled by
12334 default.
12335
12336 -mscore5
12337 Specify the SCORE5 as the target architecture.
12338
12339 -mscore5u
12340 Specify the SCORE5U of the target architecture.
12341
12342 -mscore7
12343 Specify the SCORE7 as the target architecture. This is the default.
12344
12345 -mscore7d
12346 Specify the SCORE7D as the target architecture.
12347
12348 SH Options
12349 These -m options are defined for the SH implementations:
12350
12351 -m1 Generate code for the SH1.
12352
12353 -m2 Generate code for the SH2.
12354
12355 -m2e
12356 Generate code for the SH2e.
12357
12358 -m3 Generate code for the SH3.
12359
12360 -m3e
12361 Generate code for the SH3e.
12362
12363 -m4-nofpu
12364 Generate code for the SH4 without a floating-point unit.
12365
12366 -m4-single-only
12367 Generate code for the SH4 with a floating-point unit that only
12368 supports single-precision arithmetic.
12369
12370 -m4-single
12371 Generate code for the SH4 assuming the floating-point unit is in
12372 single-precision mode by default.
12373
12374 -m4 Generate code for the SH4.
12375
12376 -m4a-nofpu
12377 Generate code for the SH4al-dsp, or for a SH4a in such a way that
12378 the floating-point unit is not used.
12379
12380 -m4a-single-only
12381 Generate code for the SH4a, in such a way that no double-precision
12382 floating point operations are used.
12383
12384 -m4a-single
12385 Generate code for the SH4a assuming the floating-point unit is in
12386 single-precision mode by default.
12387
12388 -m4a
12389 Generate code for the SH4a.
12390
12391 -m4al
12392 Same as -m4a-nofpu, except that it implicitly passes -dsp to the
12393 assembler. GCC doesn't generate any DSP instructions at the
12394 moment.
12395
12396 -mb Compile code for the processor in big endian mode.
12397
12398 -ml Compile code for the processor in little endian mode.
12399
12400 -mdalign
12401 Align doubles at 64-bit boundaries. Note that this changes the
12402 calling conventions, and thus some functions from the standard C
12403 library will not work unless you recompile it first with -mdalign.
12404
12405 -mrelax
12406 Shorten some address references at link time, when possible; uses
12407 the linker option -relax.
12408
12409 -mbigtable
12410 Use 32-bit offsets in "switch" tables. The default is to use
12411 16-bit offsets.
12412
12413 -mbitops
12414 Enable the use of bit manipulation instructions on SH2A.
12415
12416 -mfmovd
12417 Enable the use of the instruction "fmovd".
12418
12419 -mhitachi
12420 Comply with the calling conventions defined by Renesas.
12421
12422 -mrenesas
12423 Comply with the calling conventions defined by Renesas.
12424
12425 -mno-renesas
12426 Comply with the calling conventions defined for GCC before the
12427 Renesas conventions were available. This option is the default for
12428 all targets of the SH toolchain except for sh-symbianelf.
12429
12430 -mnomacsave
12431 Mark the "MAC" register as call-clobbered, even if -mhitachi is
12432 given.
12433
12434 -mieee
12435 Increase IEEE-compliance of floating-point code. At the moment,
12436 this is equivalent to -fno-finite-math-only. When generating 16
12437 bit SH opcodes, getting IEEE-conforming results for comparisons of
12438 NANs / infinities incurs extra overhead in every floating point
12439 comparison, therefore the default is set to -ffinite-math-only.
12440
12441 -minline-ic_invalidate
12442 Inline code to invalidate instruction cache entries after setting
12443 up nested function trampolines. This option has no effect if
12444 -musermode is in effect and the selected code generation option
12445 (e.g. -m4) does not allow the use of the icbi instruction. If the
12446 selected code generation option does not allow the use of the icbi
12447 instruction, and -musermode is not in effect, the inlined code will
12448 manipulate the instruction cache address array directly with an
12449 associative write. This not only requires privileged mode, but it
12450 will also fail if the cache line had been mapped via the TLB and
12451 has become unmapped.
12452
12453 -misize
12454 Dump instruction size and location in the assembly code.
12455
12456 -mpadstruct
12457 This option is deprecated. It pads structures to multiple of 4
12458 bytes, which is incompatible with the SH ABI.
12459
12460 -mspace
12461 Optimize for space instead of speed. Implied by -Os.
12462
12463 -mprefergot
12464 When generating position-independent code, emit function calls
12465 using the Global Offset Table instead of the Procedure Linkage
12466 Table.
12467
12468 -musermode
12469 Don't generate privileged mode only code; implies
12470 -mno-inline-ic_invalidate if the inlined code would not work in
12471 user mode. This is the default when the target is "sh-*-linux*".
12472
12473 -multcost=number
12474 Set the cost to assume for a multiply insn.
12475
12476 -mdiv=strategy
12477 Set the division strategy to use for SHmedia code. strategy must
12478 be one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l,
12479 inv:call, inv:call2, inv:fp . "fp" performs the operation in
12480 floating point. This has a very high latency, but needs only a few
12481 instructions, so it might be a good choice if your code has enough
12482 easily exploitable ILP to allow the compiler to schedule the
12483 floating point instructions together with other instructions.
12484 Division by zero causes a floating point exception. "inv" uses
12485 integer operations to calculate the inverse of the divisor, and
12486 then multiplies the dividend with the inverse. This strategy
12487 allows cse and hoisting of the inverse calculation. Division by
12488 zero calculates an unspecified result, but does not trap.
12489 "inv:minlat" is a variant of "inv" where if no cse / hoisting
12490 opportunities have been found, or if the entire operation has been
12491 hoisted to the same place, the last stages of the inverse
12492 calculation are intertwined with the final multiply to reduce the
12493 overall latency, at the expense of using a few more instructions,
12494 and thus offering fewer scheduling opportunities with other code.
12495 "call" calls a library function that usually implements the
12496 inv:minlat strategy. This gives high code density for
12497 m5-*media-nofpu compilations. "call2" uses a different entry point
12498 of the same library function, where it assumes that a pointer to a
12499 lookup table has already been set up, which exposes the pointer
12500 load to cse / code hoisting optimizations. "inv:call", "inv:call2"
12501 and "inv:fp" all use the "inv" algorithm for initial code
12502 generation, but if the code stays unoptimized, revert to the
12503 "call", "call2", or "fp" strategies, respectively. Note that the
12504 potentially-trapping side effect of division by zero is carried by
12505 a separate instruction, so it is possible that all the integer
12506 instructions are hoisted out, but the marker for the side effect
12507 stays where it is. A recombination to fp operations or a call is
12508 not possible in that case. "inv20u" and "inv20l" are variants of
12509 the "inv:minlat" strategy. In the case that the inverse
12510 calculation was nor separated from the multiply, they speed up
12511 division where the dividend fits into 20 bits (plus sign where
12512 applicable), by inserting a test to skip a number of operations in
12513 this case; this test slows down the case of larger dividends.
12514 inv20u assumes the case of a such a small dividend to be unlikely,
12515 and inv20l assumes it to be likely.
12516
12517 -mdivsi3_libfunc=name
12518 Set the name of the library function used for 32 bit signed
12519 division to name. This only affect the name used in the call and
12520 inv:call division strategies, and the compiler will still expect
12521 the same sets of input/output/clobbered registers as if this option
12522 was not present.
12523
12524 -mfixed-range=register-range
12525 Generate code treating the given register range as fixed registers.
12526 A fixed register is one that the register allocator can not use.
12527 This is useful when compiling kernel code. A register range is
12528 specified as two registers separated by a dash. Multiple register
12529 ranges can be specified separated by a comma.
12530
12531 -madjust-unroll
12532 Throttle unrolling to avoid thrashing target registers. This
12533 option only has an effect if the gcc code base supports the
12534 TARGET_ADJUST_UNROLL_MAX target hook.
12535
12536 -mindexed-addressing
12537 Enable the use of the indexed addressing mode for
12538 SHmedia32/SHcompact. This is only safe if the hardware and/or OS
12539 implement 32 bit wrap-around semantics for the indexed addressing
12540 mode. The architecture allows the implementation of processors
12541 with 64 bit MMU, which the OS could use to get 32 bit addressing,
12542 but since no current hardware implementation supports this or any
12543 other way to make the indexed addressing mode safe to use in the 32
12544 bit ABI, the default is -mno-indexed-addressing.
12545
12546 -mgettrcost=number
12547 Set the cost assumed for the gettr instruction to number. The
12548 default is 2 if -mpt-fixed is in effect, 100 otherwise.
12549
12550 -mpt-fixed
12551 Assume pt* instructions won't trap. This will generally generate
12552 better scheduled code, but is unsafe on current hardware. The
12553 current architecture definition says that ptabs and ptrel trap when
12554 the target anded with 3 is 3. This has the unintentional effect of
12555 making it unsafe to schedule ptabs / ptrel before a branch, or
12556 hoist it out of a loop. For example, __do_global_ctors, a part of
12557 libgcc that runs constructors at program startup, calls functions
12558 in a list which is delimited by -1. With the -mpt-fixed option,
12559 the ptabs will be done before testing against -1. That means that
12560 all the constructors will be run a bit quicker, but when the loop
12561 comes to the end of the list, the program crashes because ptabs
12562 loads -1 into a target register. Since this option is unsafe for
12563 any hardware implementing the current architecture specification,
12564 the default is -mno-pt-fixed. Unless the user specifies a specific
12565 cost with -mgettrcost, -mno-pt-fixed also implies -mgettrcost=100;
12566 this deters register allocation using target registers for storing
12567 ordinary integers.
12568
12569 -minvalid-symbols
12570 Assume symbols might be invalid. Ordinary function symbols
12571 generated by the compiler will always be valid to load with
12572 movi/shori/ptabs or movi/shori/ptrel, but with assembler and/or
12573 linker tricks it is possible to generate symbols that will cause
12574 ptabs / ptrel to trap. This option is only meaningful when
12575 -mno-pt-fixed is in effect. It will then prevent cross-basic-block
12576 cse, hoisting and most scheduling of symbol loads. The default is
12577 -mno-invalid-symbols.
12578
12579 SPARC Options
12580 These -m options are supported on the SPARC:
12581
12582 -mno-app-regs
12583 -mapp-regs
12584 Specify -mapp-regs to generate output using the global registers 2
12585 through 4, which the SPARC SVR4 ABI reserves for applications.
12586 This is the default.
12587
12588 To be fully SVR4 ABI compliant at the cost of some performance
12589 loss, specify -mno-app-regs. You should compile libraries and
12590 system software with this option.
12591
12592 -mfpu
12593 -mhard-float
12594 Generate output containing floating point instructions. This is
12595 the default.
12596
12597 -mno-fpu
12598 -msoft-float
12599 Generate output containing library calls for floating point.
12600 Warning: the requisite libraries are not available for all SPARC
12601 targets. Normally the facilities of the machine's usual C compiler
12602 are used, but this cannot be done directly in cross-compilation.
12603 You must make your own arrangements to provide suitable library
12604 functions for cross-compilation. The embedded targets sparc-*-aout
12605 and sparclite-*-* do provide software floating point support.
12606
12607 -msoft-float changes the calling convention in the output file;
12608 therefore, it is only useful if you compile all of a program with
12609 this option. In particular, you need to compile libgcc.a, the
12610 library that comes with GCC, with -msoft-float in order for this to
12611 work.
12612
12613 -mhard-quad-float
12614 Generate output containing quad-word (long double) floating point
12615 instructions.
12616
12617 -msoft-quad-float
12618 Generate output containing library calls for quad-word (long
12619 double) floating point instructions. The functions called are
12620 those specified in the SPARC ABI. This is the default.
12621
12622 As of this writing, there are no SPARC implementations that have
12623 hardware support for the quad-word floating point instructions.
12624 They all invoke a trap handler for one of these instructions, and
12625 then the trap handler emulates the effect of the instruction.
12626 Because of the trap handler overhead, this is much slower than
12627 calling the ABI library routines. Thus the -msoft-quad-float
12628 option is the default.
12629
12630 -mno-unaligned-doubles
12631 -munaligned-doubles
12632 Assume that doubles have 8 byte alignment. This is the default.
12633
12634 With -munaligned-doubles, GCC assumes that doubles have 8 byte
12635 alignment only if they are contained in another type, or if they
12636 have an absolute address. Otherwise, it assumes they have 4 byte
12637 alignment. Specifying this option avoids some rare compatibility
12638 problems with code generated by other compilers. It is not the
12639 default because it results in a performance loss, especially for
12640 floating point code.
12641
12642 -mno-faster-structs
12643 -mfaster-structs
12644 With -mfaster-structs, the compiler assumes that structures should
12645 have 8 byte alignment. This enables the use of pairs of "ldd" and
12646 "std" instructions for copies in structure assignment, in place of
12647 twice as many "ld" and "st" pairs. However, the use of this
12648 changed alignment directly violates the SPARC ABI. Thus, it's
12649 intended only for use on targets where the developer acknowledges
12650 that their resulting code will not be directly in line with the
12651 rules of the ABI.
12652
12653 -mimpure-text
12654 -mimpure-text, used in addition to -shared, tells the compiler to
12655 not pass -z text to the linker when linking a shared object. Using
12656 this option, you can link position-dependent code into a shared
12657 object.
12658
12659 -mimpure-text suppresses the "relocations remain against
12660 allocatable but non-writable sections" linker error message.
12661 However, the necessary relocations will trigger copy-on-write, and
12662 the shared object is not actually shared across processes. Instead
12663 of using -mimpure-text, you should compile all source code with
12664 -fpic or -fPIC.
12665
12666 This option is only available on SunOS and Solaris.
12667
12668 -mcpu=cpu_type
12669 Set the instruction set, register set, and instruction scheduling
12670 parameters for machine type cpu_type. Supported values for
12671 cpu_type are v7, cypress, v8, supersparc, sparclite, f930, f934,
12672 hypersparc, sparclite86x, sparclet, tsc701, v9, ultrasparc,
12673 ultrasparc3, niagara and niagara2.
12674
12675 Default instruction scheduling parameters are used for values that
12676 select an architecture and not an implementation. These are v7,
12677 v8, sparclite, sparclet, v9.
12678
12679 Here is a list of each supported architecture and their supported
12680 implementations.
12681
12682 v7: cypress
12683 v8: supersparc, hypersparc
12684 sparclite: f930, f934, sparclite86x
12685 sparclet: tsc701
12686 v9: ultrasparc, ultrasparc3, niagara, niagara2
12687
12688 By default (unless configured otherwise), GCC generates code for
12689 the V7 variant of the SPARC architecture. With -mcpu=cypress, the
12690 compiler additionally optimizes it for the Cypress CY7C602 chip, as
12691 used in the SPARCStation/SPARCServer 3xx series. This is also
12692 appropriate for the older SPARCStation 1, 2, IPX etc.
12693
12694 With -mcpu=v8, GCC generates code for the V8 variant of the SPARC
12695 architecture. The only difference from V7 code is that the
12696 compiler emits the integer multiply and integer divide instructions
12697 which exist in SPARC-V8 but not in SPARC-V7. With
12698 -mcpu=supersparc, the compiler additionally optimizes it for the
12699 SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000
12700 series.
12701
12702 With -mcpu=sparclite, GCC generates code for the SPARClite variant
12703 of the SPARC architecture. This adds the integer multiply, integer
12704 divide step and scan ("ffs") instructions which exist in SPARClite
12705 but not in SPARC-V7. With -mcpu=f930, the compiler additionally
12706 optimizes it for the Fujitsu MB86930 chip, which is the original
12707 SPARClite, with no FPU. With -mcpu=f934, the compiler additionally
12708 optimizes it for the Fujitsu MB86934 chip, which is the more recent
12709 SPARClite with FPU.
12710
12711 With -mcpu=sparclet, GCC generates code for the SPARClet variant of
12712 the SPARC architecture. This adds the integer multiply,
12713 multiply/accumulate, integer divide step and scan ("ffs")
12714 instructions which exist in SPARClet but not in SPARC-V7. With
12715 -mcpu=tsc701, the compiler additionally optimizes it for the TEMIC
12716 SPARClet chip.
12717
12718 With -mcpu=v9, GCC generates code for the V9 variant of the SPARC
12719 architecture. This adds 64-bit integer and floating-point move
12720 instructions, 3 additional floating-point condition code registers
12721 and conditional move instructions. With -mcpu=ultrasparc, the
12722 compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi
12723 chips. With -mcpu=ultrasparc3, the compiler additionally optimizes
12724 it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ chips. With
12725 -mcpu=niagara, the compiler additionally optimizes it for Sun
12726 UltraSPARC T1 chips. With -mcpu=niagara2, the compiler
12727 additionally optimizes it for Sun UltraSPARC T2 chips.
12728
12729 -mtune=cpu_type
12730 Set the instruction scheduling parameters for machine type
12731 cpu_type, but do not set the instruction set or register set that
12732 the option -mcpu=cpu_type would.
12733
12734 The same values for -mcpu=cpu_type can be used for -mtune=cpu_type,
12735 but the only useful values are those that select a particular cpu
12736 implementation. Those are cypress, supersparc, hypersparc, f930,
12737 f934, sparclite86x, tsc701, ultrasparc, ultrasparc3, niagara, and
12738 niagara2.
12739
12740 -mv8plus
12741 -mno-v8plus
12742 With -mv8plus, GCC generates code for the SPARC-V8+ ABI. The
12743 difference from the V8 ABI is that the global and out registers are
12744 considered 64-bit wide. This is enabled by default on Solaris in
12745 32-bit mode for all SPARC-V9 processors.
12746
12747 -mvis
12748 -mno-vis
12749 With -mvis, GCC generates code that takes advantage of the
12750 UltraSPARC Visual Instruction Set extensions. The default is
12751 -mno-vis.
12752
12753 These -m options are supported in addition to the above on SPARC-V9
12754 processors in 64-bit environments:
12755
12756 -mlittle-endian
12757 Generate code for a processor running in little-endian mode. It is
12758 only available for a few configurations and most notably not on
12759 Solaris and Linux.
12760
12761 -m32
12762 -m64
12763 Generate code for a 32-bit or 64-bit environment. The 32-bit
12764 environment sets int, long and pointer to 32 bits. The 64-bit
12765 environment sets int to 32 bits and long and pointer to 64 bits.
12766
12767 -mcmodel=medlow
12768 Generate code for the Medium/Low code model: 64-bit addresses,
12769 programs must be linked in the low 32 bits of memory. Programs can
12770 be statically or dynamically linked.
12771
12772 -mcmodel=medmid
12773 Generate code for the Medium/Middle code model: 64-bit addresses,
12774 programs must be linked in the low 44 bits of memory, the text and
12775 data segments must be less than 2GB in size and the data segment
12776 must be located within 2GB of the text segment.
12777
12778 -mcmodel=medany
12779 Generate code for the Medium/Anywhere code model: 64-bit addresses,
12780 programs may be linked anywhere in memory, the text and data
12781 segments must be less than 2GB in size and the data segment must be
12782 located within 2GB of the text segment.
12783
12784 -mcmodel=embmedany
12785 Generate code for the Medium/Anywhere code model for embedded
12786 systems: 64-bit addresses, the text and data segments must be less
12787 than 2GB in size, both starting anywhere in memory (determined at
12788 link time). The global register %g4 points to the base of the data
12789 segment. Programs are statically linked and PIC is not supported.
12790
12791 -mstack-bias
12792 -mno-stack-bias
12793 With -mstack-bias, GCC assumes that the stack pointer, and frame
12794 pointer if present, are offset by -2047 which must be added back
12795 when making stack frame references. This is the default in 64-bit
12796 mode. Otherwise, assume no such offset is present.
12797
12798 These switches are supported in addition to the above on Solaris:
12799
12800 -threads
12801 Add support for multithreading using the Solaris threads library.
12802 This option sets flags for both the preprocessor and linker. This
12803 option does not affect the thread safety of object code produced by
12804 the compiler or that of libraries supplied with it.
12805
12806 -pthreads
12807 Add support for multithreading using the POSIX threads library.
12808 This option sets flags for both the preprocessor and linker. This
12809 option does not affect the thread safety of object code produced
12810 by the compiler or that of libraries supplied with it.
12811
12812 -pthread
12813 This is a synonym for -pthreads.
12814
12815 SPU Options
12816 These -m options are supported on the SPU:
12817
12818 -mwarn-reloc
12819 -merror-reloc
12820 The loader for SPU does not handle dynamic relocations. By
12821 default, GCC will give an error when it generates code that
12822 requires a dynamic relocation. -mno-error-reloc disables the
12823 error, -mwarn-reloc will generate a warning instead.
12824
12825 -msafe-dma
12826 -munsafe-dma
12827 Instructions which initiate or test completion of DMA must not be
12828 reordered with respect to loads and stores of the memory which is
12829 being accessed. Users typically address this problem using the
12830 volatile keyword, but that can lead to inefficient code in places
12831 where the memory is known to not change. Rather than mark the
12832 memory as volatile we treat the DMA instructions as potentially
12833 effecting all memory. With -munsafe-dma users must use the
12834 volatile keyword to protect memory accesses.
12835
12836 -mbranch-hints
12837 By default, GCC will generate a branch hint instruction to avoid
12838 pipeline stalls for always taken or probably taken branches. A
12839 hint will not be generated closer than 8 instructions away from its
12840 branch. There is little reason to disable them, except for
12841 debugging purposes, or to make an object a little bit smaller.
12842
12843 -msmall-mem
12844 -mlarge-mem
12845 By default, GCC generates code assuming that addresses are never
12846 larger than 18 bits. With -mlarge-mem code is generated that
12847 assumes a full 32 bit address.
12848
12849 -mstdmain
12850 By default, GCC links against startup code that assumes the SPU-
12851 style main function interface (which has an unconventional
12852 parameter list). With -mstdmain, GCC will link your program
12853 against startup code that assumes a C99-style interface to "main",
12854 including a local copy of "argv" strings.
12855
12856 -mfixed-range=register-range
12857 Generate code treating the given register range as fixed registers.
12858 A fixed register is one that the register allocator can not use.
12859 This is useful when compiling kernel code. A register range is
12860 specified as two registers separated by a dash. Multiple register
12861 ranges can be specified separated by a comma.
12862
12863 -mdual-nops
12864 -mdual-nops=n
12865 By default, GCC will insert nops to increase dual issue when it
12866 expects it to increase performance. n can be a value from 0 to 10.
12867 A smaller n will insert fewer nops. 10 is the default, 0 is the
12868 same as -mno-dual-nops. Disabled with -Os.
12869
12870 -mhint-max-nops=n
12871 Maximum number of nops to insert for a branch hint. A branch hint
12872 must be at least 8 instructions away from the branch it is
12873 effecting. GCC will insert up to n nops to enforce this, otherwise
12874 it will not generate the branch hint.
12875
12876 -mhint-max-distance=n
12877 The encoding of the branch hint instruction limits the hint to be
12878 within 256 instructions of the branch it is effecting. By default,
12879 GCC makes sure it is within 125.
12880
12881 -msafe-hints
12882 Work around a hardware bug which causes the SPU to stall
12883 indefinitely. By default, GCC will insert the "hbrp" instruction
12884 to make sure this stall won't happen.
12885
12886 Options for System V
12887 These additional options are available on System V Release 4 for
12888 compatibility with other compilers on those systems:
12889
12890 -G Create a shared object. It is recommended that -symbolic or
12891 -shared be used instead.
12892
12893 -Qy Identify the versions of each tool used by the compiler, in a
12894 ".ident" assembler directive in the output.
12895
12896 -Qn Refrain from adding ".ident" directives to the output file (this is
12897 the default).
12898
12899 -YP,dirs
12900 Search the directories dirs, and no others, for libraries specified
12901 with -l.
12902
12903 -Ym,dir
12904 Look in the directory dir to find the M4 preprocessor. The
12905 assembler uses this option.
12906
12907 V850 Options
12908 These -m options are defined for V850 implementations:
12909
12910 -mlong-calls
12911 -mno-long-calls
12912 Treat all calls as being far away (near). If calls are assumed to
12913 be far away, the compiler will always load the functions address up
12914 into a register, and call indirect through the pointer.
12915
12916 -mno-ep
12917 -mep
12918 Do not optimize (do optimize) basic blocks that use the same index
12919 pointer 4 or more times to copy pointer into the "ep" register, and
12920 use the shorter "sld" and "sst" instructions. The -mep option is
12921 on by default if you optimize.
12922
12923 -mno-prolog-function
12924 -mprolog-function
12925 Do not use (do use) external functions to save and restore
12926 registers at the prologue and epilogue of a function. The external
12927 functions are slower, but use less code space if more than one
12928 function saves the same number of registers. The -mprolog-function
12929 option is on by default if you optimize.
12930
12931 -mspace
12932 Try to make the code as small as possible. At present, this just
12933 turns on the -mep and -mprolog-function options.
12934
12935 -mtda=n
12936 Put static or global variables whose size is n bytes or less into
12937 the tiny data area that register "ep" points to. The tiny data
12938 area can hold up to 256 bytes in total (128 bytes for byte
12939 references).
12940
12941 -msda=n
12942 Put static or global variables whose size is n bytes or less into
12943 the small data area that register "gp" points to. The small data
12944 area can hold up to 64 kilobytes.
12945
12946 -mzda=n
12947 Put static or global variables whose size is n bytes or less into
12948 the first 32 kilobytes of memory.
12949
12950 -mv850
12951 Specify that the target processor is the V850.
12952
12953 -mbig-switch
12954 Generate code suitable for big switch tables. Use this option only
12955 if the assembler/linker complain about out of range branches within
12956 a switch table.
12957
12958 -mapp-regs
12959 This option will cause r2 and r5 to be used in the code generated
12960 by the compiler. This setting is the default.
12961
12962 -mno-app-regs
12963 This option will cause r2 and r5 to be treated as fixed registers.
12964
12965 -mv850e1
12966 Specify that the target processor is the V850E1. The preprocessor
12967 constants __v850e1__ and __v850e__ will be defined if this option
12968 is used.
12969
12970 -mv850e
12971 Specify that the target processor is the V850E. The preprocessor
12972 constant __v850e__ will be defined if this option is used.
12973
12974 If neither -mv850 nor -mv850e nor -mv850e1 are defined then a
12975 default target processor will be chosen and the relevant __v850*__
12976 preprocessor constant will be defined.
12977
12978 The preprocessor constants __v850 and __v851__ are always defined,
12979 regardless of which processor variant is the target.
12980
12981 -mdisable-callt
12982 This option will suppress generation of the CALLT instruction for
12983 the v850e and v850e1 flavors of the v850 architecture. The default
12984 is -mno-disable-callt which allows the CALLT instruction to be
12985 used.
12986
12987 VAX Options
12988 These -m options are defined for the VAX:
12989
12990 -munix
12991 Do not output certain jump instructions ("aobleq" and so on) that
12992 the Unix assembler for the VAX cannot handle across long ranges.
12993
12994 -mgnu
12995 Do output those jump instructions, on the assumption that you will
12996 assemble with the GNU assembler.
12997
12998 -mg Output code for g-format floating point numbers instead of
12999 d-format.
13000
13001 VxWorks Options
13002 The options in this section are defined for all VxWorks targets.
13003 Options specific to the target hardware are listed with the other
13004 options for that target.
13005
13006 -mrtp
13007 GCC can generate code for both VxWorks kernels and real time
13008 processes (RTPs). This option switches from the former to the
13009 latter. It also defines the preprocessor macro "__RTP__".
13010
13011 -non-static
13012 Link an RTP executable against shared libraries rather than static
13013 libraries. The options -static and -shared can also be used for
13014 RTPs; -static is the default.
13015
13016 -Bstatic
13017 -Bdynamic
13018 These options are passed down to the linker. They are defined for
13019 compatibility with Diab.
13020
13021 -Xbind-lazy
13022 Enable lazy binding of function calls. This option is equivalent
13023 to -Wl,-z,now and is defined for compatibility with Diab.
13024
13025 -Xbind-now
13026 Disable lazy binding of function calls. This option is the default
13027 and is defined for compatibility with Diab.
13028
13029 x86-64 Options
13030 These are listed under
13031
13032 Xstormy16 Options
13033 These options are defined for Xstormy16:
13034
13035 -msim
13036 Choose startup files and linker script suitable for the simulator.
13037
13038 Xtensa Options
13039 These options are supported for Xtensa targets:
13040
13041 -mconst16
13042 -mno-const16
13043 Enable or disable use of "CONST16" instructions for loading
13044 constant values. The "CONST16" instruction is currently not a
13045 standard option from Tensilica. When enabled, "CONST16"
13046 instructions are always used in place of the standard "L32R"
13047 instructions. The use of "CONST16" is enabled by default only if
13048 the "L32R" instruction is not available.
13049
13050 -mfused-madd
13051 -mno-fused-madd
13052 Enable or disable use of fused multiply/add and multiply/subtract
13053 instructions in the floating-point option. This has no effect if
13054 the floating-point option is not also enabled. Disabling fused
13055 multiply/add and multiply/subtract instructions forces the compiler
13056 to use separate instructions for the multiply and add/subtract
13057 operations. This may be desirable in some cases where strict IEEE
13058 754-compliant results are required: the fused multiply add/subtract
13059 instructions do not round the intermediate result, thereby
13060 producing results with more bits of precision than specified by the
13061 IEEE standard. Disabling fused multiply add/subtract instructions
13062 also ensures that the program output is not sensitive to the
13063 compiler's ability to combine multiply and add/subtract operations.
13064
13065 -mserialize-volatile
13066 -mno-serialize-volatile
13067 When this option is enabled, GCC inserts "MEMW" instructions before
13068 "volatile" memory references to guarantee sequential consistency.
13069 The default is -mserialize-volatile. Use -mno-serialize-volatile
13070 to omit the "MEMW" instructions.
13071
13072 -mtext-section-literals
13073 -mno-text-section-literals
13074 Control the treatment of literal pools. The default is
13075 -mno-text-section-literals, which places literals in a separate
13076 section in the output file. This allows the literal pool to be
13077 placed in a data RAM/ROM, and it also allows the linker to combine
13078 literal pools from separate object files to remove redundant
13079 literals and improve code size. With -mtext-section-literals, the
13080 literals are interspersed in the text section in order to keep them
13081 as close as possible to their references. This may be necessary
13082 for large assembly files.
13083
13084 -mtarget-align
13085 -mno-target-align
13086 When this option is enabled, GCC instructs the assembler to
13087 automatically align instructions to reduce branch penalties at the
13088 expense of some code density. The assembler attempts to widen
13089 density instructions to align branch targets and the instructions
13090 following call instructions. If there are not enough preceding
13091 safe density instructions to align a target, no widening will be
13092 performed. The default is -mtarget-align. These options do not
13093 affect the treatment of auto-aligned instructions like "LOOP",
13094 which the assembler will always align, either by widening density
13095 instructions or by inserting no-op instructions.
13096
13097 -mlongcalls
13098 -mno-longcalls
13099 When this option is enabled, GCC instructs the assembler to
13100 translate direct calls to indirect calls unless it can determine
13101 that the target of a direct call is in the range allowed by the
13102 call instruction. This translation typically occurs for calls to
13103 functions in other source files. Specifically, the assembler
13104 translates a direct "CALL" instruction into an "L32R" followed by a
13105 "CALLX" instruction. The default is -mno-longcalls. This option
13106 should be used in programs where the call target can potentially be
13107 out of range. This option is implemented in the assembler, not the
13108 compiler, so the assembly code generated by GCC will still show
13109 direct call instructions---look at the disassembled object code to
13110 see the actual instructions. Note that the assembler will use an
13111 indirect call for every cross-file call, not just those that really
13112 will be out of range.
13113
13114 zSeries Options
13115 These are listed under
13116
13117 Options for Code Generation Conventions
13118 These machine-independent options control the interface conventions
13119 used in code generation.
13120
13121 Most of them have both positive and negative forms; the negative form
13122 of -ffoo would be -fno-foo. In the table below, only one of the forms
13123 is listed---the one which is not the default. You can figure out the
13124 other form by either removing no- or adding it.
13125
13126 -fbounds-check
13127 For front-ends that support it, generate additional code to check
13128 that indices used to access arrays are within the declared range.
13129 This is currently only supported by the Java and Fortran front-
13130 ends, where this option defaults to true and false respectively.
13131
13132 -ftrapv
13133 This option generates traps for signed overflow on addition,
13134 subtraction, multiplication operations.
13135
13136 -fwrapv
13137 This option instructs the compiler to assume that signed arithmetic
13138 overflow of addition, subtraction and multiplication wraps around
13139 using twos-complement representation. This flag enables some
13140 optimizations and disables others. This option is enabled by
13141 default for the Java front-end, as required by the Java language
13142 specification.
13143
13144 -fexceptions
13145 Enable exception handling. Generates extra code needed to
13146 propagate exceptions. For some targets, this implies GCC will
13147 generate frame unwind information for all functions, which can
13148 produce significant data size overhead, although it does not affect
13149 execution. If you do not specify this option, GCC will enable it
13150 by default for languages like C++ which normally require exception
13151 handling, and disable it for languages like C that do not normally
13152 require it. However, you may need to enable this option when
13153 compiling C code that needs to interoperate properly with exception
13154 handlers written in C++. You may also wish to disable this option
13155 if you are compiling older C++ programs that don't use exception
13156 handling.
13157
13158 -fnon-call-exceptions
13159 Generate code that allows trapping instructions to throw
13160 exceptions. Note that this requires platform-specific runtime
13161 support that does not exist everywhere. Moreover, it only allows
13162 trapping instructions to throw exceptions, i.e. memory references
13163 or floating point instructions. It does not allow exceptions to be
13164 thrown from arbitrary signal handlers such as "SIGALRM".
13165
13166 -funwind-tables
13167 Similar to -fexceptions, except that it will just generate any
13168 needed static data, but will not affect the generated code in any
13169 other way. You will normally not enable this option; instead, a
13170 language processor that needs this handling would enable it on your
13171 behalf.
13172
13173 -fasynchronous-unwind-tables
13174 Generate unwind table in dwarf2 format, if supported by target
13175 machine. The table is exact at each instruction boundary, so it
13176 can be used for stack unwinding from asynchronous events (such as
13177 debugger or garbage collector).
13178
13179 -fpcc-struct-return
13180 Return "short" "struct" and "union" values in memory like longer
13181 ones, rather than in registers. This convention is less efficient,
13182 but it has the advantage of allowing intercallability between GCC-
13183 compiled files and files compiled with other compilers,
13184 particularly the Portable C Compiler (pcc).
13185
13186 The precise convention for returning structures in memory depends
13187 on the target configuration macros.
13188
13189 Short structures and unions are those whose size and alignment
13190 match that of some integer type.
13191
13192 Warning: code compiled with the -fpcc-struct-return switch is not
13193 binary compatible with code compiled with the -freg-struct-return
13194 switch. Use it to conform to a non-default application binary
13195 interface.
13196
13197 -freg-struct-return
13198 Return "struct" and "union" values in registers when possible.
13199 This is more efficient for small structures than
13200 -fpcc-struct-return.
13201
13202 If you specify neither -fpcc-struct-return nor -freg-struct-return,
13203 GCC defaults to whichever convention is standard for the target.
13204 If there is no standard convention, GCC defaults to
13205 -fpcc-struct-return, except on targets where GCC is the principal
13206 compiler. In those cases, we can choose the standard, and we chose
13207 the more efficient register return alternative.
13208
13209 Warning: code compiled with the -freg-struct-return switch is not
13210 binary compatible with code compiled with the -fpcc-struct-return
13211 switch. Use it to conform to a non-default application binary
13212 interface.
13213
13214 -fshort-enums
13215 Allocate to an "enum" type only as many bytes as it needs for the
13216 declared range of possible values. Specifically, the "enum" type
13217 will be equivalent to the smallest integer type which has enough
13218 room.
13219
13220 Warning: the -fshort-enums switch causes GCC to generate code that
13221 is not binary compatible with code generated without that switch.
13222 Use it to conform to a non-default application binary interface.
13223
13224 -fshort-double
13225 Use the same size for "double" as for "float".
13226
13227 Warning: the -fshort-double switch causes GCC to generate code that
13228 is not binary compatible with code generated without that switch.
13229 Use it to conform to a non-default application binary interface.
13230
13231 -fshort-wchar
13232 Override the underlying type for wchar_t to be short unsigned int
13233 instead of the default for the target. This option is useful for
13234 building programs to run under WINE.
13235
13236 Warning: the -fshort-wchar switch causes GCC to generate code that
13237 is not binary compatible with code generated without that switch.
13238 Use it to conform to a non-default application binary interface.
13239
13240 -fno-common
13241 In C code, controls the placement of uninitialized global
13242 variables. Unix C compilers have traditionally permitted multiple
13243 definitions of such variables in different compilation units by
13244 placing the variables in a common block. This is the behavior
13245 specified by -fcommon, and is the default for GCC on most targets.
13246 On the other hand, this behavior is not required by ISO C, and on
13247 some targets may carry a speed or code size penalty on variable
13248 references. The -fno-common option specifies that the compiler
13249 should place uninitialized global variables in the data section of
13250 the object file, rather than generating them as common blocks.
13251 This has the effect that if the same variable is declared (without
13252 "extern") in two different compilations, you will get a multiple-
13253 definition error when you link them. In this case, you must
13254 compile with -fcommon instead. Compiling with -fno-common is
13255 useful on targets for which it provides better performance, or if
13256 you wish to verify that the program will work on other systems
13257 which always treat uninitialized variable declarations this way.
13258
13259 -fno-ident
13260 Ignore the #ident directive.
13261
13262 -finhibit-size-directive
13263 Don't output a ".size" assembler directive, or anything else that
13264 would cause trouble if the function is split in the middle, and the
13265 two halves are placed at locations far apart in memory. This
13266 option is used when compiling crtstuff.c; you should not need to
13267 use it for anything else.
13268
13269 -fverbose-asm
13270 Put extra commentary information in the generated assembly code to
13271 make it more readable. This option is generally only of use to
13272 those who actually need to read the generated assembly code
13273 (perhaps while debugging the compiler itself).
13274
13275 -fno-verbose-asm, the default, causes the extra information to be
13276 omitted and is useful when comparing two assembler files.
13277
13278 -frecord-gcc-switches
13279 This switch causes the command line that was used to invoke the
13280 compiler to be recorded into the object file that is being created.
13281 This switch is only implemented on some targets and the exact
13282 format of the recording is target and binary file format dependent,
13283 but it usually takes the form of a section containing ASCII text.
13284 This switch is related to the -fverbose-asm switch, but that switch
13285 only records information in the assembler output file as comments,
13286 so it never reaches the object file.
13287
13288 -fpic
13289 Generate position-independent code (PIC) suitable for use in a
13290 shared library, if supported for the target machine. Such code
13291 accesses all constant addresses through a global offset table
13292 (GOT). The dynamic loader resolves the GOT entries when the
13293 program starts (the dynamic loader is not part of GCC; it is part
13294 of the operating system). If the GOT size for the linked
13295 executable exceeds a machine-specific maximum size, you get an
13296 error message from the linker indicating that -fpic does not work;
13297 in that case, recompile with -fPIC instead. (These maximums are 8k
13298 on the SPARC and 32k on the m68k and RS/6000. The 386 has no such
13299 limit.)
13300
13301 Position-independent code requires special support, and therefore
13302 works only on certain machines. For the 386, GCC supports PIC for
13303 System V but not for the Sun 386i. Code generated for the IBM
13304 RS/6000 is always position-independent.
13305
13306 When this flag is set, the macros "__pic__" and "__PIC__" are
13307 defined to 1.
13308
13309 -fPIC
13310 If supported for the target machine, emit position-independent
13311 code, suitable for dynamic linking and avoiding any limit on the
13312 size of the global offset table. This option makes a difference on
13313 the m68k, PowerPC and SPARC.
13314
13315 Position-independent code requires special support, and therefore
13316 works only on certain machines.
13317
13318 When this flag is set, the macros "__pic__" and "__PIC__" are
13319 defined to 2.
13320
13321 -fpie
13322 -fPIE
13323 These options are similar to -fpic and -fPIC, but generated
13324 position independent code can be only linked into executables.
13325 Usually these options are used when -pie GCC option will be used
13326 during linking.
13327
13328 -fpie and -fPIE both define the macros "__pie__" and "__PIE__".
13329 The macros have the value 1 for -fpie and 2 for -fPIE.
13330
13331 -fno-jump-tables
13332 Do not use jump tables for switch statements even where it would be
13333 more efficient than other code generation strategies. This option
13334 is of use in conjunction with -fpic or -fPIC for building code
13335 which forms part of a dynamic linker and cannot reference the
13336 address of a jump table. On some targets, jump tables do not
13337 require a GOT and this option is not needed.
13338
13339 -ffixed-reg
13340 Treat the register named reg as a fixed register; generated code
13341 should never refer to it (except perhaps as a stack pointer, frame
13342 pointer or in some other fixed role).
13343
13344 reg must be the name of a register. The register names accepted
13345 are machine-specific and are defined in the "REGISTER_NAMES" macro
13346 in the machine description macro file.
13347
13348 This flag does not have a negative form, because it specifies a
13349 three-way choice.
13350
13351 -fcall-used-reg
13352 Treat the register named reg as an allocable register that is
13353 clobbered by function calls. It may be allocated for temporaries
13354 or variables that do not live across a call. Functions compiled
13355 this way will not save and restore the register reg.
13356
13357 It is an error to used this flag with the frame pointer or stack
13358 pointer. Use of this flag for other registers that have fixed
13359 pervasive roles in the machine's execution model will produce
13360 disastrous results.
13361
13362 This flag does not have a negative form, because it specifies a
13363 three-way choice.
13364
13365 -fcall-saved-reg
13366 Treat the register named reg as an allocable register saved by
13367 functions. It may be allocated even for temporaries or variables
13368 that live across a call. Functions compiled this way will save and
13369 restore the register reg if they use it.
13370
13371 It is an error to used this flag with the frame pointer or stack
13372 pointer. Use of this flag for other registers that have fixed
13373 pervasive roles in the machine's execution model will produce
13374 disastrous results.
13375
13376 A different sort of disaster will result from the use of this flag
13377 for a register in which function values may be returned.
13378
13379 This flag does not have a negative form, because it specifies a
13380 three-way choice.
13381
13382 -fpack-struct[=n]
13383 Without a value specified, pack all structure members together
13384 without holes. When a value is specified (which must be a small
13385 power of two), pack structure members according to this value,
13386 representing the maximum alignment (that is, objects with default
13387 alignment requirements larger than this will be output potentially
13388 unaligned at the next fitting location.
13389
13390 Warning: the -fpack-struct switch causes GCC to generate code that
13391 is not binary compatible with code generated without that switch.
13392 Additionally, it makes the code suboptimal. Use it to conform to a
13393 non-default application binary interface.
13394
13395 -finstrument-functions
13396 Generate instrumentation calls for entry and exit to functions.
13397 Just after function entry and just before function exit, the
13398 following profiling functions will be called with the address of
13399 the current function and its call site. (On some platforms,
13400 "__builtin_return_address" does not work beyond the current
13401 function, so the call site information may not be available to the
13402 profiling functions otherwise.)
13403
13404 void __cyg_profile_func_enter (void *this_fn,
13405 void *call_site);
13406 void __cyg_profile_func_exit (void *this_fn,
13407 void *call_site);
13408
13409 The first argument is the address of the start of the current
13410 function, which may be looked up exactly in the symbol table.
13411
13412 This instrumentation is also done for functions expanded inline in
13413 other functions. The profiling calls will indicate where,
13414 conceptually, the inline function is entered and exited. This
13415 means that addressable versions of such functions must be
13416 available. If all your uses of a function are expanded inline,
13417 this may mean an additional expansion of code size. If you use
13418 extern inline in your C code, an addressable version of such
13419 functions must be provided. (This is normally the case anyways,
13420 but if you get lucky and the optimizer always expands the functions
13421 inline, you might have gotten away without providing static
13422 copies.)
13423
13424 A function may be given the attribute "no_instrument_function", in
13425 which case this instrumentation will not be done. This can be
13426 used, for example, for the profiling functions listed above, high-
13427 priority interrupt routines, and any functions from which the
13428 profiling functions cannot safely be called (perhaps signal
13429 handlers, if the profiling routines generate output or allocate
13430 memory).
13431
13432 -finstrument-functions-exclude-file-list=file,file,...
13433 Set the list of functions that are excluded from instrumentation
13434 (see the description of "-finstrument-functions"). If the file
13435 that contains a function definition matches with one of file, then
13436 that function is not instrumented. The match is done on
13437 substrings: if the file parameter is a substring of the file name,
13438 it is considered to be a match.
13439
13440 For example,
13441 "-finstrument-functions-exclude-file-list=/bits/stl,include/sys"
13442 will exclude any inline function defined in files whose pathnames
13443 contain "/bits/stl" or "include/sys".
13444
13445 If, for some reason, you want to include letter ',' in one of sym,
13446 write ','. For example,
13447 "-finstrument-functions-exclude-file-list=',,tmp'" (note the single
13448 quote surrounding the option).
13449
13450 -finstrument-functions-exclude-function-list=sym,sym,...
13451 This is similar to "-finstrument-functions-exclude-file-list", but
13452 this option sets the list of function names to be excluded from
13453 instrumentation. The function name to be matched is its user-
13454 visible name, such as "vector<int> blah(const vector<int> &)", not
13455 the internal mangled name (e.g., "_Z4blahRSt6vectorIiSaIiEE"). The
13456 match is done on substrings: if the sym parameter is a substring of
13457 the function name, it is considered to be a match.
13458
13459 -fstack-check
13460 Generate code to verify that you do not go beyond the boundary of
13461 the stack. You should specify this flag if you are running in an
13462 environment with multiple threads, but only rarely need to specify
13463 it in a single-threaded environment since stack overflow is
13464 automatically detected on nearly all systems if there is only one
13465 stack.
13466
13467 Note that this switch does not actually cause checking to be done;
13468 the operating system or the language runtime must do that. The
13469 switch causes generation of code to ensure that they see the stack
13470 being extended.
13471
13472 You can additionally specify a string parameter: "no" means no
13473 checking, "generic" means force the use of old-style checking,
13474 "specific" means use the best checking method and is equivalent to
13475 bare -fstack-check.
13476
13477 Old-style checking is a generic mechanism that requires no specific
13478 target support in the compiler but comes with the following
13479 drawbacks:
13480
13481 1. Modified allocation strategy for large objects: they will
13482 always be allocated dynamically if their size exceeds a fixed
13483 threshold.
13484
13485 2. Fixed limit on the size of the static frame of functions: when
13486 it is topped by a particular function, stack checking is not
13487 reliable and a warning is issued by the compiler.
13488
13489 3. Inefficiency: because of both the modified allocation strategy
13490 and the generic implementation, the performances of the code
13491 are hampered.
13492
13493 Note that old-style stack checking is also the fallback method for
13494 "specific" if no target support has been added in the compiler.
13495
13496 -fstack-limit-register=reg
13497 -fstack-limit-symbol=sym
13498 -fno-stack-limit
13499 Generate code to ensure that the stack does not grow beyond a
13500 certain value, either the value of a register or the address of a
13501 symbol. If the stack would grow beyond the value, a signal is
13502 raised. For most targets, the signal is raised before the stack
13503 overruns the boundary, so it is possible to catch the signal
13504 without taking special precautions.
13505
13506 For instance, if the stack starts at absolute address 0x80000000
13507 and grows downwards, you can use the flags
13508 -fstack-limit-symbol=__stack_limit and
13509 -Wl,--defsym,__stack_limit=0x7ffe0000 to enforce a stack limit of
13510 128KB. Note that this may only work with the GNU linker.
13511
13512 -fargument-alias
13513 -fargument-noalias
13514 -fargument-noalias-global
13515 -fargument-noalias-anything
13516 Specify the possible relationships among parameters and between
13517 parameters and global data.
13518
13519 -fargument-alias specifies that arguments (parameters) may alias
13520 each other and may alias global storage.-fargument-noalias
13521 specifies that arguments do not alias each other, but may alias
13522 global storage.-fargument-noalias-global specifies that arguments
13523 do not alias each other and do not alias global storage.
13524 -fargument-noalias-anything specifies that arguments do not alias
13525 any other storage.
13526
13527 Each language will automatically use whatever option is required by
13528 the language standard. You should not need to use these options
13529 yourself.
13530
13531 -fleading-underscore
13532 This option and its counterpart, -fno-leading-underscore, forcibly
13533 change the way C symbols are represented in the object file. One
13534 use is to help link with legacy assembly code.
13535
13536 Warning: the -fleading-underscore switch causes GCC to generate
13537 code that is not binary compatible with code generated without that
13538 switch. Use it to conform to a non-default application binary
13539 interface. Not all targets provide complete support for this
13540 switch.
13541
13542 -ftls-model=model
13543 Alter the thread-local storage model to be used. The model
13544 argument should be one of "global-dynamic", "local-dynamic",
13545 "initial-exec" or "local-exec".
13546
13547 The default without -fpic is "initial-exec"; with -fpic the default
13548 is "global-dynamic".
13549
13550 -fvisibility=default|internal|hidden|protected
13551 Set the default ELF image symbol visibility to the specified
13552 option---all symbols will be marked with this unless overridden
13553 within the code. Using this feature can very substantially improve
13554 linking and load times of shared object libraries, produce more
13555 optimized code, provide near-perfect API export and prevent symbol
13556 clashes. It is strongly recommended that you use this in any
13557 shared objects you distribute.
13558
13559 Despite the nomenclature, "default" always means public ie;
13560 available to be linked against from outside the shared object.
13561 "protected" and "internal" are pretty useless in real-world usage
13562 so the only other commonly used option will be "hidden". The
13563 default if -fvisibility isn't specified is "default", i.e., make
13564 every symbol public---this causes the same behavior as previous
13565 versions of GCC.
13566
13567 A good explanation of the benefits offered by ensuring ELF symbols
13568 have the correct visibility is given by "How To Write Shared
13569 Libraries" by Ulrich Drepper (which can be found at
13570 <http://people.redhat.com/~drepper/>)---however a superior solution
13571 made possible by this option to marking things hidden when the
13572 default is public is to make the default hidden and mark things
13573 public. This is the norm with DLL's on Windows and with
13574 -fvisibility=hidden and "__attribute__ ((visibility("default")))"
13575 instead of "__declspec(dllexport)" you get almost identical
13576 semantics with identical syntax. This is a great boon to those
13577 working with cross-platform projects.
13578
13579 For those adding visibility support to existing code, you may find
13580 #pragma GCC visibility of use. This works by you enclosing the
13581 declarations you wish to set visibility for with (for example)
13582 #pragma GCC visibility push(hidden) and #pragma GCC visibility pop.
13583 Bear in mind that symbol visibility should be viewed as part of the
13584 API interface contract and thus all new code should always specify
13585 visibility when it is not the default ie; declarations only for use
13586 within the local DSO should always be marked explicitly as hidden
13587 as so to avoid PLT indirection overheads---making this abundantly
13588 clear also aids readability and self-documentation of the code.
13589 Note that due to ISO C++ specification requirements, operator new
13590 and operator delete must always be of default visibility.
13591
13592 Be aware that headers from outside your project, in particular
13593 system headers and headers from any other library you use, may not
13594 be expecting to be compiled with visibility other than the default.
13595 You may need to explicitly say #pragma GCC visibility push(default)
13596 before including any such headers.
13597
13598 extern declarations are not affected by -fvisibility, so a lot of
13599 code can be recompiled with -fvisibility=hidden with no
13600 modifications. However, this means that calls to extern functions
13601 with no explicit visibility will use the PLT, so it is more
13602 effective to use __attribute ((visibility)) and/or #pragma GCC
13603 visibility to tell the compiler which extern declarations should be
13604 treated as hidden.
13605
13606 Note that -fvisibility does affect C++ vague linkage entities. This
13607 means that, for instance, an exception class that will be thrown
13608 between DSOs must be explicitly marked with default visibility so
13609 that the type_info nodes will be unified between the DSOs.
13610
13611 An overview of these techniques, their benefits and how to use them
13612 is at <http://gcc.gnu.org/wiki/Visibility>.
13613
13615 This section describes several environment variables that affect how
13616 GCC operates. Some of them work by specifying directories or prefixes
13617 to use when searching for various kinds of files. Some are used to
13618 specify other aspects of the compilation environment.
13619
13620 Note that you can also specify places to search using options such as
13621 -B, -I and -L. These take precedence over places specified using
13622 environment variables, which in turn take precedence over those
13623 specified by the configuration of GCC.
13624
13625 LANG
13626 LC_CTYPE
13627 LC_MESSAGES
13628 LC_ALL
13629 These environment variables control the way that GCC uses
13630 localization information that allow GCC to work with different
13631 national conventions. GCC inspects the locale categories LC_CTYPE
13632 and LC_MESSAGES if it has been configured to do so. These locale
13633 categories can be set to any value supported by your installation.
13634 A typical value is en_GB.UTF-8 for English in the United Kingdom
13635 encoded in UTF-8.
13636
13637 The LC_CTYPE environment variable specifies character
13638 classification. GCC uses it to determine the character boundaries
13639 in a string; this is needed for some multibyte encodings that
13640 contain quote and escape characters that would otherwise be
13641 interpreted as a string end or escape.
13642
13643 The LC_MESSAGES environment variable specifies the language to use
13644 in diagnostic messages.
13645
13646 If the LC_ALL environment variable is set, it overrides the value
13647 of LC_CTYPE and LC_MESSAGES; otherwise, LC_CTYPE and LC_MESSAGES
13648 default to the value of the LANG environment variable. If none of
13649 these variables are set, GCC defaults to traditional C English
13650 behavior.
13651
13652 TMPDIR
13653 If TMPDIR is set, it specifies the directory to use for temporary
13654 files. GCC uses temporary files to hold the output of one stage of
13655 compilation which is to be used as input to the next stage: for
13656 example, the output of the preprocessor, which is the input to the
13657 compiler proper.
13658
13659 GCC_EXEC_PREFIX
13660 If GCC_EXEC_PREFIX is set, it specifies a prefix to use in the
13661 names of the subprograms executed by the compiler. No slash is
13662 added when this prefix is combined with the name of a subprogram,
13663 but you can specify a prefix that ends with a slash if you wish.
13664
13665 If GCC_EXEC_PREFIX is not set, GCC will attempt to figure out an
13666 appropriate prefix to use based on the pathname it was invoked
13667 with.
13668
13669 If GCC cannot find the subprogram using the specified prefix, it
13670 tries looking in the usual places for the subprogram.
13671
13672 The default value of GCC_EXEC_PREFIX is prefix/lib/gcc/ where
13673 prefix is the prefix to the installed compiler. In many cases
13674 prefix is the value of "prefix" when you ran the configure script.
13675
13676 Other prefixes specified with -B take precedence over this prefix.
13677
13678 This prefix is also used for finding files such as crt0.o that are
13679 used for linking.
13680
13681 In addition, the prefix is used in an unusual way in finding the
13682 directories to search for header files. For each of the standard
13683 directories whose name normally begins with /usr/local/lib/gcc
13684 (more precisely, with the value of GCC_INCLUDE_DIR), GCC tries
13685 replacing that beginning with the specified prefix to produce an
13686 alternate directory name. Thus, with -Bfoo/, GCC will search
13687 foo/bar where it would normally search /usr/local/lib/bar. These
13688 alternate directories are searched first; the standard directories
13689 come next. If a standard directory begins with the configured
13690 prefix then the value of prefix is replaced by GCC_EXEC_PREFIX when
13691 looking for header files.
13692
13693 COMPILER_PATH
13694 The value of COMPILER_PATH is a colon-separated list of
13695 directories, much like PATH. GCC tries the directories thus
13696 specified when searching for subprograms, if it can't find the
13697 subprograms using GCC_EXEC_PREFIX.
13698
13699 LIBRARY_PATH
13700 The value of LIBRARY_PATH is a colon-separated list of directories,
13701 much like PATH. When configured as a native compiler, GCC tries
13702 the directories thus specified when searching for special linker
13703 files, if it can't find them using GCC_EXEC_PREFIX. Linking using
13704 GCC also uses these directories when searching for ordinary
13705 libraries for the -l option (but directories specified with -L come
13706 first).
13707
13708 LANG
13709 This variable is used to pass locale information to the compiler.
13710 One way in which this information is used is to determine the
13711 character set to be used when character literals, string literals
13712 and comments are parsed in C and C++. When the compiler is
13713 configured to allow multibyte characters, the following values for
13714 LANG are recognized:
13715
13716 C-JIS
13717 Recognize JIS characters.
13718
13719 C-SJIS
13720 Recognize SJIS characters.
13721
13722 C-EUCJP
13723 Recognize EUCJP characters.
13724
13725 If LANG is not defined, or if it has some other value, then the
13726 compiler will use mblen and mbtowc as defined by the default locale
13727 to recognize and translate multibyte characters.
13728
13729 Some additional environments variables affect the behavior of the
13730 preprocessor.
13731
13732 CPATH
13733 C_INCLUDE_PATH
13734 CPLUS_INCLUDE_PATH
13735 OBJC_INCLUDE_PATH
13736 Each variable's value is a list of directories separated by a
13737 special character, much like PATH, in which to look for header
13738 files. The special character, "PATH_SEPARATOR", is target-
13739 dependent and determined at GCC build time. For Microsoft Windows-
13740 based targets it is a semicolon, and for almost all other targets
13741 it is a colon.
13742
13743 CPATH specifies a list of directories to be searched as if
13744 specified with -I, but after any paths given with -I options on the
13745 command line. This environment variable is used regardless of
13746 which language is being preprocessed.
13747
13748 The remaining environment variables apply only when preprocessing
13749 the particular language indicated. Each specifies a list of
13750 directories to be searched as if specified with -isystem, but after
13751 any paths given with -isystem options on the command line.
13752
13753 In all these variables, an empty element instructs the compiler to
13754 search its current working directory. Empty elements can appear at
13755 the beginning or end of a path. For instance, if the value of
13756 CPATH is ":/special/include", that has the same effect as
13757 -I. -I/special/include.
13758
13759 DEPENDENCIES_OUTPUT
13760 If this variable is set, its value specifies how to output
13761 dependencies for Make based on the non-system header files
13762 processed by the compiler. System header files are ignored in the
13763 dependency output.
13764
13765 The value of DEPENDENCIES_OUTPUT can be just a file name, in which
13766 case the Make rules are written to that file, guessing the target
13767 name from the source file name. Or the value can have the form
13768 file target, in which case the rules are written to file file using
13769 target as the target name.
13770
13771 In other words, this environment variable is equivalent to
13772 combining the options -MM and -MF, with an optional -MT switch too.
13773
13774 SUNPRO_DEPENDENCIES
13775 This variable is the same as DEPENDENCIES_OUTPUT (see above),
13776 except that system header files are not ignored, so it implies -M
13777 rather than -MM. However, the dependence on the main input file is
13778 omitted.
13779
13781 For instructions on reporting bugs, see
13782 <http://bugzilla.redhat.com/bugzilla>.
13783
13785 1. On some systems, gcc -shared needs to build supplementary stub code
13786 for constructors to work. On multi-libbed systems, gcc -shared
13787 must select the correct support libraries to link against. Failing
13788 to supply the correct flags may lead to subtle defects. Supplying
13789 them in cases where they are not necessary is innocuous.
13790
13792 gpl(7), gfdl(7), fsf-funding(7), cpp(1), gcov(1), as(1), ld(1), gdb(1),
13793 adb(1), dbx(1), sdb(1) and the Info entries for gcc, cpp, as, ld,
13794 binutils and gdb.
13795
13797 See the Info entry for gcc, or
13798 <http://gcc.gnu.org/onlinedocs/gcc/Contributors.html>, for contributors
13799 to GCC.
13800
13802 Copyright (c) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
13803 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free
13804 Software Foundation, Inc.
13805
13806 Permission is granted to copy, distribute and/or modify this document
13807 under the terms of the GNU Free Documentation License, Version 1.2 or
13808 any later version published by the Free Software Foundation; with the
13809 Invariant Sections being "GNU General Public License" and "Funding Free
13810 Software", the Front-Cover texts being (a) (see below), and with the
13811 Back-Cover Texts being (b) (see below). A copy of the license is
13812 included in the gfdl(7) man page.
13813
13814 (a) The FSF's Front-Cover Text is:
13815
13816 A GNU Manual
13817
13818 (b) The FSF's Back-Cover Text is:
13819
13820 You have freedom to copy and modify this GNU Manual, like GNU
13821 software. Copies published by the Free Software Foundation raise
13822 funds for GNU development.
13823
13824
13825
13826gcc-4.4.7 2012-03-13 GCC(1)