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...] [-Wpedantic]
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 is -fno-foo.
51 This manual documents only one of these two forms, whichever one is not
52 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 -no-canonical-prefixes -pipe -pass-exit-codes
61 -x language -v -### --help[=class[,...]] --target-help
62 --version -wrapper @file -fplugin=file -fplugin-arg-name=arg
63 -fdump-ada-spec[-slim] -fada-spec-parent=unit -fdump-go-spec=file
64
65 C Language Options
66 -ansi -std=standard -fgnu89-inline -aux-info filename
67 -fallow-parameterless-variadic-functions -fno-asm -fno-builtin
68 -fno-builtin-function -fhosted -ffreestanding -fopenmp
69 -fms-extensions -fplan9-extensions -trigraphs -traditional
70 -traditional-cpp -fallow-single-precision -fcond-mismatch
71 -flax-vector-conversions -fsigned-bitfields -fsigned-char
72 -funsigned-bitfields -funsigned-char
73
74 C++ Language Options
75 -fabi-version=n -fno-access-control -fcheck-new
76 -fconstexpr-depth=n -ffriend-injection -fno-elide-constructors
77 -fno-enforce-eh-specs -ffor-scope -fno-for-scope
78 -fno-gnu-keywords -fno-implicit-templates
79 -fno-implicit-inline-templates -fno-implement-inlines
80 -fms-extensions -fno-nonansi-builtins -fnothrow-opt
81 -fno-operator-names -fno-optional-diags -fpermissive
82 -fno-pretty-templates -frepo -fno-rtti -fstats
83 -ftemplate-backtrace-limit=n -ftemplate-depth=n
84 -fno-threadsafe-statics -fuse-cxa-atexit -fno-weak -nostdinc++
85 -fno-default-inline -fvisibility-inlines-hidden
86 -fvisibility-ms-compat -fext-numeric-literals -Wabi
87 -Wconversion-null -Wctor-dtor-privacy -Wdelete-non-virtual-dtor
88 -Wliteral-suffix -Wnarrowing -Wnoexcept -Wnon-virtual-dtor
89 -Wreorder -Weffc++ -Wstrict-null-sentinel -Wno-non-template-friend
90 -Wold-style-cast -Woverloaded-virtual -Wno-pmf-conversions
91 -Wsign-promo
92
93 Objective-C and Objective-C++ Language Options
94 -fconstant-string-class=class-name -fgnu-runtime -fnext-runtime
95 -fno-nil-receivers -fobjc-abi-version=n -fobjc-call-cxx-cdtors
96 -fobjc-direct-dispatch -fobjc-exceptions -fobjc-gc -fobjc-nilcheck
97 -fobjc-std=objc1 -freplace-objc-classes -fzero-link -gen-decls
98 -Wassign-intercept -Wno-protocol -Wselector
99 -Wstrict-selector-match -Wundeclared-selector
100
101 Language Independent Options
102 -fmessage-length=n -fdiagnostics-show-location=[once|every-line]
103 -fdiagnostics-color=[auto|never|always]
104 -fno-diagnostics-show-option -fno-diagnostics-show-caret
105
106 Warning Options
107 -fsyntax-only -fmax-errors=n -Wpedantic -pedantic-errors -w
108 -Wextra -Wall -Waddress -Waggregate-return
109 -Waggressive-loop-optimizations -Warray-bounds -Wno-attributes
110 -Wno-builtin-macro-redefined -Wc++-compat -Wc++11-compat
111 -Wcast-align -Wcast-qual -Wchar-subscripts -Wclobbered -Wcomment
112 -Wconversion -Wcoverage-mismatch -Wno-cpp -Wno-deprecated
113 -Wno-deprecated-declarations -Wdisabled-optimization
114 -Wno-div-by-zero -Wdouble-promotion -Wempty-body -Wenum-compare
115 -Wno-endif-labels -Werror -Werror=* -Wfatal-errors -Wfloat-equal
116 -Wformat -Wformat=2 -Wno-format-contains-nul
117 -Wno-format-extra-args -Wformat-nonliteral -Wformat-security
118 -Wformat-y2k -Wframe-larger-than=len -Wno-free-nonheap-object
119 -Wjump-misses-init -Wignored-qualifiers -Wimplicit
120 -Wimplicit-function-declaration -Wimplicit-int -Winit-self
121 -Winline -Wmaybe-uninitialized -Wno-int-to-pointer-cast
122 -Wno-invalid-offsetof -Winvalid-pch -Wlarger-than=len
123 -Wunsafe-loop-optimizations -Wlogical-op -Wlong-long -Wmain
124 -Wmaybe-uninitialized -Wmissing-braces
125 -Wmissing-field-initializers -Wmissing-include-dirs -Wno-mudflap
126 -Wno-multichar -Wnonnull -Wno-overflow -Woverlength-strings
127 -Wpacked -Wpacked-bitfield-compat -Wpadded -Wparentheses
128 -Wpedantic-ms-format -Wno-pedantic-ms-format -Wpointer-arith
129 -Wno-pointer-to-int-cast -Wredundant-decls -Wno-return-local-addr
130 -Wreturn-type -Wsequence-point -Wshadow -Wsign-compare
131 -Wsign-conversion -Wsizeof-pointer-memaccess -Wstack-protector
132 -Wstack-usage=len -Wstrict-aliasing -Wstrict-aliasing=n
133 -Wstrict-overflow -Wstrict-overflow=n
134 -Wsuggest-attribute=[pure|const|noreturn|format]
135 -Wmissing-format-attribute -Wswitch -Wswitch-default
136 -Wswitch-enum -Wsync-nand -Wsystem-headers -Wtrampolines
137 -Wtrigraphs -Wtype-limits -Wundef -Wuninitialized
138 -Wunknown-pragmas -Wno-pragmas -Wunsuffixed-float-constants
139 -Wunused -Wunused-function -Wunused-label -Wunused-local-typedefs
140 -Wunused-parameter -Wno-unused-result -Wunused-value
141 -Wunused-variable -Wunused-but-set-parameter
142 -Wunused-but-set-variable -Wuseless-cast -Wvariadic-macros
143 -Wvector-operation-performance -Wvla -Wvolatile-register-var
144 -Wwrite-strings -Wzero-as-null-pointer-constant
145
146 C and Objective-C-only Warning Options
147 -Wbad-function-cast -Wmissing-declarations
148 -Wmissing-parameter-type -Wmissing-prototypes -Wnested-externs
149 -Wold-style-declaration -Wold-style-definition -Wstrict-prototypes
150 -Wtraditional -Wtraditional-conversion
151 -Wdeclaration-after-statement -Wpointer-sign
152
153 Debugging Options
154 -dletters -dumpspecs -dumpmachine -dumpversion -fsanitize=style
155 -fdbg-cnt-list -fdbg-cnt=counter-value-list -fdisable-ipa-pass_name
156 -fdisable-rtl-pass_name -fdisable-rtl-pass-name=range-list
157 -fdisable-tree-pass_name -fdisable-tree-pass-name=range-list
158 -fdump-noaddr -fdump-unnumbered -fdump-unnumbered-links
159 -fdump-translation-unit[-n] -fdump-class-hierarchy[-n]
160 -fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline -fdump-passes
161 -fdump-statistics -fdump-tree-all -fdump-tree-original[-n]
162 -fdump-tree-optimized[-n] -fdump-tree-cfg -fdump-tree-alias
163 -fdump-tree-ch -fdump-tree-ssa[-n] -fdump-tree-pre[-n]
164 -fdump-tree-ccp[-n] -fdump-tree-dce[-n] -fdump-tree-gimple[-raw]
165 -fdump-tree-mudflap[-n] -fdump-tree-dom[-n] -fdump-tree-dse[-n]
166 -fdump-tree-phiprop[-n] -fdump-tree-phiopt[-n]
167 -fdump-tree-forwprop[-n] -fdump-tree-copyrename[-n] -fdump-tree-nrv
168 -fdump-tree-vect -fdump-tree-sink -fdump-tree-sra[-n]
169 -fdump-tree-forwprop[-n] -fdump-tree-fre[-n] -fdump-tree-vrp[-n]
170 -ftree-vectorizer-verbose=n -fdump-tree-storeccp[-n]
171 -fdump-final-insns=file -fcompare-debug[=opts]
172 -fcompare-debug-second -feliminate-dwarf2-dups
173 -fno-eliminate-unused-debug-types -feliminate-unused-debug-symbols
174 -femit-class-debug-always -fenable-kind-pass
175 -fenable-kind-pass=range-list -fdebug-types-section
176 -fmem-report-wpa -fmem-report -fpre-ipa-mem-report
177 -fpost-ipa-mem-report -fprofile-arcs -fopt-info
178 -fopt-info-options[=file] -frandom-seed=string -fsched-verbose=n
179 -fsel-sched-verbose -fsel-sched-dump-cfg
180 -fsel-sched-pipelining-verbose -fstack-usage -ftest-coverage
181 -ftime-report -fvar-tracking -fvar-tracking-assignments
182 -fvar-tracking-assignments-toggle -g -glevel -gtoggle -gcoff
183 -gdwarf-version -ggdb -grecord-gcc-switches
184 -gno-record-gcc-switches -gstabs -gstabs+ -gstrict-dwarf
185 -gno-strict-dwarf -gvms -gxcoff -gxcoff+ -fno-merge-debug-strings
186 -fno-dwarf2-cfi-asm -fdebug-prefix-map=old=new
187 -femit-struct-debug-baseonly -femit-struct-debug-reduced
188 -femit-struct-debug-detailed[=spec-list] -p -pg
189 -print-file-name=library -print-libgcc-file-name
190 -print-multi-directory -print-multi-lib -print-multi-os-directory
191 -print-prog-name=program -print-search-dirs -Q -print-sysroot
192 -print-sysroot-headers-suffix -save-temps -save-temps=cwd
193 -save-temps=obj -time[=file]
194
195 Optimization Options
196 -faggressive-loop-optimizations -falign-functions[=n]
197 -falign-jumps[=n] -falign-labels[=n] -falign-loops[=n]
198 -fassociative-math -fauto-inc-dec -fbranch-probabilities
199 -fbranch-target-load-optimize -fbranch-target-load-optimize2
200 -fbtr-bb-exclusive -fcaller-saves -fcheck-data-deps
201 -fcombine-stack-adjustments -fconserve-stack -fcompare-elim
202 -fcprop-registers -fcrossjumping -fcse-follow-jumps
203 -fcse-skip-blocks -fcx-fortran-rules -fcx-limited-range
204 -fdata-sections -fdce -fdelayed-branch -fdelete-null-pointer-checks
205 -fdevirtualize -fdse -fearly-inlining -fipa-sra
206 -fexpensive-optimizations -ffat-lto-objects -ffast-math
207 -ffinite-math-only -ffloat-store -fexcess-precision=style
208 -fforward-propagate -ffp-contract=style -ffunction-sections -fgcse
209 -fgcse-after-reload -fgcse-las -fgcse-lm -fgraphite-identity
210 -fgcse-sm -fhoist-adjacent-loads -fif-conversion -fif-conversion2
211 -findirect-inlining -finline-functions
212 -finline-functions-called-once -finline-limit=n
213 -finline-small-functions -fipa-cp -fipa-cp-clone -fipa-pta
214 -fipa-profile -fipa-pure-const -fipa-reference
215 -fira-algorithm=algorithm -fira-region=region -fira-hoist-pressure
216 -fira-loop-pressure -fno-ira-share-save-slots
217 -fno-ira-share-spill-slots -fira-verbose=n -fivopts
218 -fkeep-inline-functions -fkeep-static-consts -floop-block
219 -floop-interchange -floop-strip-mine -floop-nest-optimize
220 -floop-parallelize-all -flto -flto-compression-level
221 -flto-partition=alg -flto-report -fmerge-all-constants
222 -fmerge-constants -fmodulo-sched -fmodulo-sched-allow-regmoves
223 -fmove-loop-invariants fmudflap -fmudflapir -fmudflapth
224 -fno-branch-count-reg -fno-default-inline -fno-defer-pop
225 -fno-function-cse -fno-guess-branch-probability -fno-inline
226 -fno-math-errno -fno-peephole -fno-peephole2 -fno-sched-interblock
227 -fno-sched-spec -fno-signed-zeros -fno-toplevel-reorder
228 -fno-trapping-math -fno-zero-initialized-in-bss
229 -fomit-frame-pointer -foptimize-register-move
230 -foptimize-sibling-calls -fpartial-inlining -fpeel-loops
231 -fpredictive-commoning -fprefetch-loop-arrays -fprofile-report
232 -fprofile-correction -fprofile-dir=path -fprofile-generate
233 -fprofile-generate=path -fprofile-use -fprofile-use=path
234 -fprofile-values -freciprocal-math -free -fregmove
235 -frename-registers -freorder-blocks -freorder-blocks-and-partition
236 -freorder-functions -frerun-cse-after-loop
237 -freschedule-modulo-scheduled-loops -frounding-math
238 -fsched2-use-superblocks -fsched-pressure -fsched-spec-load
239 -fsched-spec-load-dangerous -fsched-stalled-insns-dep[=n]
240 -fsched-stalled-insns[=n] -fsched-group-heuristic
241 -fsched-critical-path-heuristic -fsched-spec-insn-heuristic
242 -fsched-rank-heuristic -fsched-last-insn-heuristic
243 -fsched-dep-count-heuristic -fschedule-insns -fschedule-insns2
244 -fsection-anchors -fselective-scheduling -fselective-scheduling2
245 -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops
246 -fshrink-wrap -fsignaling-nans -fsingle-precision-constant
247 -fsplit-ivs-in-unroller -fsplit-wide-types -fstack-protector
248 -fstack-protector-all -fstack-protector-strong -fstrict-aliasing
249 -fstrict-overflow -fthread-jumps -ftracer -ftree-bit-ccp
250 -ftree-builtin-call-dce -ftree-ccp -ftree-ch
251 -ftree-coalesce-inline-vars -ftree-coalesce-vars -ftree-copy-prop
252 -ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse
253 -ftree-forwprop -ftree-fre -ftree-loop-if-convert
254 -ftree-loop-if-convert-stores -ftree-loop-im -ftree-phiprop
255 -ftree-loop-distribution -ftree-loop-distribute-patterns
256 -ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize
257 -ftree-parallelize-loops=n -ftree-pre -ftree-partial-pre -ftree-pta
258 -ftree-reassoc -ftree-sink -ftree-slsr -ftree-sra
259 -ftree-switch-conversion -ftree-tail-merge -ftree-ter
260 -ftree-vect-loop-version -ftree-vectorize -ftree-vrp
261 -funit-at-a-time -funroll-all-loops -funroll-loops
262 -funsafe-loop-optimizations -funsafe-math-optimizations
263 -funswitch-loops -fvariable-expansion-in-unroller -fvect-cost-model
264 -fvpt -fweb -fwhole-program -fwpa -fuse-ld=linker
265 -fuse-linker-plugin --param name=value -O -O0 -O1 -O2 -O3 -Os
266 -Ofast -Og
267
268 Preprocessor Options
269 -Aquestion=answer -A-question[=answer] -C -dD -dI -dM -dN
270 -Dmacro[=defn] -E -H -idirafter dir -include file -imacros file
271 -iprefix file -iwithprefix dir -iwithprefixbefore dir -isystem
272 dir -imultilib dir -isysroot dir -M -MM -MF -MG -MP -MQ -MT
273 -nostdinc -P -fdebug-cpp -ftrack-macro-expansion
274 -fworking-directory -remap -trigraphs -undef -Umacro -Wp,option
275 -Xpreprocessor option -no-integrated-cpp
276
277 Assembler Option
278 -Wa,option -Xassembler option
279
280 Linker Options
281 object-file-name -llibrary -nostartfiles -nodefaultlibs
282 -nostdlib -pie -rdynamic -s -static -static-libgcc
283 -static-libstdc++ -static-libasan -static-libtsan -shared
284 -shared-libgcc -symbolic -T script -Wl,option -Xlinker option -u
285 symbol
286
287 Directory Options
288 -Bprefix -Idir -iplugindir=dir -iquotedir -Ldir -specs=file -I-
289 --sysroot=dir --no-sysroot-suffix
290
291 Machine Dependent Options
292 AArch64 Options -mbig-endian -mlittle-endian -mgeneral-regs-only
293 -mcmodel=tiny -mcmodel=small -mcmodel=large -mstrict-align
294 -momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer
295 -mtls-dialect=desc -mtls-dialect=traditional
296 -mfix-cortex-a53-835769 -mno-fix-cortex-a53-835769 -march=name
297 -mcpu=name -mtune=name
298
299 Adapteva Epiphany Options -mhalf-reg-file -mprefer-short-insn-regs
300 -mbranch-cost=num -mcmove -mnops=num -msoft-cmpsf -msplit-lohi
301 -mpost-inc -mpost-modify -mstack-offset=num -mround-nearest
302 -mlong-calls -mshort-calls -msmall16 -mfp-mode=mode -mvect-double
303 -max-vect-align=num -msplit-vecmove-early -m1reg-reg
304
305 ARM Options -mapcs-frame -mno-apcs-frame -mabi=name
306 -mapcs-stack-check -mno-apcs-stack-check -mapcs-float
307 -mno-apcs-float -mapcs-reentrant -mno-apcs-reentrant
308 -msched-prolog -mno-sched-prolog -mlittle-endian -mbig-endian
309 -mwords-little-endian -mfloat-abi=name -mfp16-format=name
310 -mthumb-interwork -mno-thumb-interwork -mcpu=name -march=name
311 -mfpu=name -mstructure-size-boundary=n -mabort-on-noreturn
312 -mlong-calls -mno-long-calls -msingle-pic-base
313 -mno-single-pic-base -mpic-register=reg -mnop-fun-dllimport
314 -mpoke-function-name -mthumb -marm -mtpcs-frame -mtpcs-leaf-frame
315 -mcaller-super-interworking -mcallee-super-interworking -mtp=name
316 -mtls-dialect=dialect -mword-relocations -mfix-cortex-m3-ldrd
317 -munaligned-access
318
319 AVR Options -mmcu=mcu -maccumulate-args -mbranch-cost=cost
320 -mcall-prologues -mint8 -mno-interrupts -mrelax -mstrict-X
321 -mtiny-stack -Waddr-space-convert
322
323 Blackfin Options -mcpu=cpu[-sirevision] -msim
324 -momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer
325 -mspecld-anomaly -mno-specld-anomaly -mcsync-anomaly
326 -mno-csync-anomaly -mlow-64k -mno-low64k -mstack-check-l1
327 -mid-shared-library -mno-id-shared-library -mshared-library-id=n
328 -mleaf-id-shared-library -mno-leaf-id-shared-library -msep-data
329 -mno-sep-data -mlong-calls -mno-long-calls -mfast-fp -minline-plt
330 -mmulticore -mcorea -mcoreb -msdram -micplb
331
332 C6X Options -mbig-endian -mlittle-endian -march=cpu -msim
333 -msdata=sdata-type
334
335 CRIS Options -mcpu=cpu -march=cpu -mtune=cpu -mmax-stack-frame=n
336 -melinux-stacksize=n -metrax4 -metrax100 -mpdebug -mcc-init
337 -mno-side-effects -mstack-align -mdata-align -mconst-align
338 -m32-bit -m16-bit -m8-bit -mno-prologue-epilogue -mno-gotplt
339 -melf -maout -melinux -mlinux -sim -sim2 -mmul-bug-workaround
340 -mno-mul-bug-workaround
341
342 CR16 Options -mmac -mcr16cplus -mcr16c -msim -mint32 -mbit-ops
343 -mdata-model=model
344
345 Darwin Options -all_load -allowable_client -arch
346 -arch_errors_fatal -arch_only -bind_at_load -bundle
347 -bundle_loader -client_name -compatibility_version
348 -current_version -dead_strip -dependency-file -dylib_file
349 -dylinker_install_name -dynamic -dynamiclib
350 -exported_symbols_list -filelist -flat_namespace
351 -force_cpusubtype_ALL -force_flat_namespace
352 -headerpad_max_install_names -iframework -image_base -init
353 -install_name -keep_private_externs -multi_module
354 -multiply_defined -multiply_defined_unused -noall_load
355 -no_dead_strip_inits_and_terms -nofixprebinding -nomultidefs
356 -noprebind -noseglinkedit -pagezero_size -prebind
357 -prebind_all_twolevel_modules -private_bundle -read_only_relocs
358 -sectalign -sectobjectsymbols -whyload -seg1addr -sectcreate
359 -sectobjectsymbols -sectorder -segaddr -segs_read_only_addr
360 -segs_read_write_addr -seg_addr_table -seg_addr_table_filename
361 -seglinkedit -segprot -segs_read_only_addr -segs_read_write_addr
362 -single_module -static -sub_library -sub_umbrella
363 -twolevel_namespace -umbrella -undefined -unexported_symbols_list
364 -weak_reference_mismatches -whatsloaded -F -gused -gfull
365 -mmacosx-version-min=version -mkernel -mone-byte-bool
366
367 DEC Alpha Options -mno-fp-regs -msoft-float -mieee
368 -mieee-with-inexact -mieee-conformant -mfp-trap-mode=mode
369 -mfp-rounding-mode=mode -mtrap-precision=mode -mbuild-constants
370 -mcpu=cpu-type -mtune=cpu-type -mbwx -mmax -mfix -mcix
371 -mfloat-vax -mfloat-ieee -mexplicit-relocs -msmall-data
372 -mlarge-data -msmall-text -mlarge-text -mmemory-latency=time
373
374 FR30 Options -msmall-model -mno-lsim
375
376 FRV Options -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 -mhard-float
377 -msoft-float -malloc-cc -mfixed-cc -mdword -mno-dword -mdouble
378 -mno-double -mmedia -mno-media -mmuladd -mno-muladd -mfdpic
379 -minline-plt -mgprel-ro -multilib-library-pic -mlinked-fp
380 -mlong-calls -malign-labels -mlibrary-pic -macc-4 -macc-8 -mpack
381 -mno-pack -mno-eflags -mcond-move -mno-cond-move
382 -moptimize-membar -mno-optimize-membar -mscc -mno-scc -mcond-exec
383 -mno-cond-exec -mvliw-branch -mno-vliw-branch -mmulti-cond-exec
384 -mno-multi-cond-exec -mnested-cond-exec -mno-nested-cond-exec
385 -mtomcat-stats -mTLS -mtls -mcpu=cpu
386
387 GNU/Linux Options -mglibc -muclibc -mbionic -mandroid
388 -tno-android-cc -tno-android-ld
389
390 H8/300 Options -mrelax -mh -ms -mn -mexr -mno-exr -mint32
391 -malign-300
392
393 HPPA Options -march=architecture-type -mbig-switch
394 -mdisable-fpregs -mdisable-indexing -mfast-indirect-calls -mgas
395 -mgnu-ld -mhp-ld -mfixed-range=register-range -mjump-in-delay
396 -mlinker-opt -mlong-calls -mlong-load-store -mno-big-switch
397 -mno-disable-fpregs -mno-disable-indexing -mno-fast-indirect-calls
398 -mno-gas -mno-jump-in-delay -mno-long-load-store
399 -mno-portable-runtime -mno-soft-float -mno-space-regs
400 -msoft-float -mpa-risc-1-0 -mpa-risc-1-1 -mpa-risc-2-0
401 -mportable-runtime -mschedule=cpu-type -mspace-regs -msio -mwsio
402 -munix=unix-std -nolibdld -static -threads
403
404 i386 and x86-64 Options -mtune=cpu-type -march=cpu-type
405 -mfpmath=unit -masm=dialect -mno-fancy-math-387 -mno-fp-ret-in-387
406 -msoft-float -mno-wide-multiply -mrtd -malign-double
407 -mpreferred-stack-boundary=num -mincoming-stack-boundary=num -mcld
408 -mcx16 -msahf -mmovbe -mcrc32 -mrecip -mrecip=opt -mvzeroupper
409 -mprefer-avx128 -mmmx -msse -msse2 -msse3 -mssse3 -msse4.1
410 -msse4.2 -msse4 -mavx -mavx2 -maes -mpclmul -mfsgsbase -mrdrnd
411 -mf16c -mfma -msse4a -m3dnow -mpopcnt -mabm -mbmi -mtbm -mfma4
412 -mxop -mlzcnt -mbmi2 -mrtm -mlwp -mpku -mthreads
413 -mno-align-stringops -minline-all-stringops
414 -minline-stringops-dynamically -mstringop-strategy=alg -mpush-args
415 -maccumulate-outgoing-args -m128bit-long-double
416 -m96bit-long-double -mlong-double-64 -mlong-double-80 -mregparm=num
417 -msseregparm -mveclibabi=type -mvect8-ret-in-mem -mpc32 -mpc64
418 -mpc80 -mstackrealign -momit-leaf-frame-pointer -mno-red-zone
419 -mno-tls-direct-seg-refs -mcmodel=code-model -mabi=name
420 -maddress-mode=mode -m32 -m64 -mx32 -mlarge-data-threshold=num
421 -msse2avx -mfentry -m8bit-idiv -mavx256-split-unaligned-load
422 -mavx256-split-unaligned-store -mindirect-branch=choice
423 -mfunction-return==choice -mindirect-branch-register
424
425 i386 and x86-64 Windows Options -mconsole -mcygwin -mno-cygwin
426 -mdll -mnop-fun-dllimport -mthread -municode -mwin32 -mwindows
427 -fno-set-stack-executable
428
429 IA-64 Options -mbig-endian -mlittle-endian -mgnu-as -mgnu-ld
430 -mno-pic -mvolatile-asm-stop -mregister-names -msdata -mno-sdata
431 -mconstant-gp -mauto-pic -mfused-madd
432 -minline-float-divide-min-latency
433 -minline-float-divide-max-throughput -mno-inline-float-divide
434 -minline-int-divide-min-latency -minline-int-divide-max-throughput
435 -mno-inline-int-divide -minline-sqrt-min-latency
436 -minline-sqrt-max-throughput -mno-inline-sqrt -mdwarf2-asm
437 -mearly-stop-bits -mfixed-range=register-range -mtls-size=tls-size
438 -mtune=cpu-type -milp32 -mlp64 -msched-br-data-spec
439 -msched-ar-data-spec -msched-control-spec -msched-br-in-data-spec
440 -msched-ar-in-data-spec -msched-in-control-spec -msched-spec-ldc
441 -msched-spec-control-ldc -msched-prefer-non-data-spec-insns
442 -msched-prefer-non-control-spec-insns
443 -msched-stop-bits-after-every-cycle
444 -msched-count-spec-in-critical-path
445 -msel-sched-dont-check-control-spec -msched-fp-mem-deps-zero-cost
446 -msched-max-memory-insns-hard-limit -msched-max-memory-insns=max-
447 insns
448
449 LM32 Options -mbarrel-shift-enabled -mdivide-enabled
450 -mmultiply-enabled -msign-extend-enabled -muser-enabled
451
452 M32R/D Options -m32r2 -m32rx -m32r -mdebug -malign-loops
453 -mno-align-loops -missue-rate=number -mbranch-cost=number
454 -mmodel=code-size-model-type -msdata=sdata-type -mno-flush-func
455 -mflush-func=name -mno-flush-trap -mflush-trap=number -G num
456
457 M32C Options -mcpu=cpu -msim -memregs=number
458
459 M680x0 Options -march=arch -mcpu=cpu -mtune=tune -m68000 -m68020
460 -m68020-40 -m68020-60 -m68030 -m68040 -m68060 -mcpu32 -m5200
461 -m5206e -m528x -m5307 -m5407 -mcfv4e -mbitfield -mno-bitfield
462 -mc68000 -mc68020 -mnobitfield -mrtd -mno-rtd -mdiv -mno-div
463 -mshort -mno-short -mhard-float -m68881 -msoft-float -mpcrel
464 -malign-int -mstrict-align -msep-data -mno-sep-data
465 -mshared-library-id=n -mid-shared-library -mno-id-shared-library
466 -mxgot -mno-xgot
467
468 MCore Options -mhardlit -mno-hardlit -mdiv -mno-div
469 -mrelax-immediates -mno-relax-immediates -mwide-bitfields
470 -mno-wide-bitfields -m4byte-functions -mno-4byte-functions
471 -mcallgraph-data -mno-callgraph-data -mslow-bytes -mno-slow-bytes
472 -mno-lsim -mlittle-endian -mbig-endian -m210 -m340
473 -mstack-increment
474
475 MeP Options -mabsdiff -mall-opts -maverage -mbased=n -mbitops -mc=n
476 -mclip -mconfig=name -mcop -mcop32 -mcop64 -mivc2 -mdc -mdiv -meb
477 -mel -mio-volatile -ml -mleadz -mm -mminmax -mmult -mno-opts
478 -mrepeat -ms -msatur -msdram -msim -msimnovec -mtf -mtiny=n
479
480 MicroBlaze Options -msoft-float -mhard-float -msmall-divides
481 -mcpu=cpu -mmemcpy -mxl-soft-mul -mxl-soft-div -mxl-barrel-shift
482 -mxl-pattern-compare -mxl-stack-check -mxl-gp-opt -mno-clearbss
483 -mxl-multiply-high -mxl-float-convert -mxl-float-sqrt -mbig-endian
484 -mlittle-endian -mxl-reorder -mxl-mode-app-model
485
486 MIPS Options -EL -EB -march=arch -mtune=arch -mips1 -mips2
487 -mips3 -mips4 -mips32 -mips32r2 -mips64 -mips64r2 -mips16
488 -mno-mips16 -mflip-mips16 -minterlink-mips16
489 -mno-interlink-mips16 -mabi=abi -mabicalls -mno-abicalls -mshared
490 -mno-shared -mplt -mno-plt -mxgot -mno-xgot -mgp32 -mgp64
491 -mfp32 -mfp64 -mhard-float -msoft-float -mno-float
492 -msingle-float -mdouble-float -mdsp -mno-dsp -mdspr2 -mno-dspr2
493 -mmcu -mmno-mcu -mfpu=fpu-type -msmartmips -mno-smartmips
494 -mpaired-single -mno-paired-single -mdmx -mno-mdmx -mips3d
495 -mno-mips3d -mmt -mno-mt -mllsc -mno-llsc -mlong64 -mlong32
496 -msym32 -mno-sym32 -Gnum -mlocal-sdata -mno-local-sdata
497 -mextern-sdata -mno-extern-sdata -mgpopt -mno-gopt
498 -membedded-data -mno-embedded-data -muninit-const-in-rodata
499 -mno-uninit-const-in-rodata -mcode-readable=setting
500 -msplit-addresses -mno-split-addresses -mexplicit-relocs
501 -mno-explicit-relocs -mcheck-zero-division
502 -mno-check-zero-division -mdivide-traps -mdivide-breaks -mmemcpy
503 -mno-memcpy -mlong-calls -mno-long-calls -mmad -mno-mad
504 -mfused-madd -mno-fused-madd -nocpp -mfix-24k -mno-fix-24k
505 -mfix-r4000 -mno-fix-r4000 -mfix-r4400 -mno-fix-r4400
506 -mfix-r10000 -mno-fix-r10000 -mfix-vr4120 -mno-fix-vr4120
507 -mfix-vr4130 -mno-fix-vr4130 -mfix-sb1 -mno-fix-sb1
508 -mflush-func=func -mno-flush-func -mbranch-cost=num
509 -mbranch-likely -mno-branch-likely -mfp-exceptions
510 -mno-fp-exceptions -mvr4130-align -mno-vr4130-align -msynci
511 -mno-synci -mrelax-pic-calls -mno-relax-pic-calls
512 -mmcount-ra-address
513
514 MMIX Options -mlibfuncs -mno-libfuncs -mepsilon -mno-epsilon
515 -mabi=gnu -mabi=mmixware -mzero-extend -mknuthdiv
516 -mtoplevel-symbols -melf -mbranch-predict -mno-branch-predict
517 -mbase-addresses -mno-base-addresses -msingle-exit
518 -mno-single-exit
519
520 MN10300 Options -mmult-bug -mno-mult-bug -mno-am33 -mam33 -mam33-2
521 -mam34 -mtune=cpu-type -mreturn-pointer-on-d0 -mno-crt0 -mrelax
522 -mliw -msetlb
523
524 Moxie Options -meb -mel -mno-crt0
525
526 PDP-11 Options -mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45
527 -m10 -mbcopy -mbcopy-builtin -mint32 -mno-int16 -mint16
528 -mno-int32 -mfloat32 -mno-float64 -mfloat64 -mno-float32
529 -mabshi -mno-abshi -mbranch-expensive -mbranch-cheap -munix-asm
530 -mdec-asm
531
532 picoChip Options -mae=ae_type -mvliw-lookahead=N
533 -msymbol-as-address -mno-inefficient-warnings
534
535 PowerPC Options See RS/6000 and PowerPC Options.
536
537 RL78 Options -msim -mmul=none -mmul=g13 -mmul=rl78
538
539 RS/6000 and PowerPC Options -mcpu=cpu-type -mtune=cpu-type
540 -mcmodel=code-model -mpowerpc64 -maltivec -mno-altivec
541 -mpowerpc-gpopt -mno-powerpc-gpopt -mpowerpc-gfxopt
542 -mno-powerpc-gfxopt -mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb
543 -mpopcntd -mno-popcntd -mfprnd -mno-fprnd -mcmpb -mno-cmpb
544 -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp -mfull-toc
545 -mminimal-toc -mno-fp-in-toc -mno-sum-in-toc -m64 -m32
546 -mxl-compat -mno-xl-compat -mpe -malign-power -malign-natural
547 -msoft-float -mhard-float -mmultiple -mno-multiple
548 -msingle-float -mdouble-float -msimple-fpu -mstring -mno-string
549 -mupdate -mno-update -mavoid-indexed-addresses
550 -mno-avoid-indexed-addresses -mfused-madd -mno-fused-madd
551 -mbit-align -mno-bit-align -mstrict-align -mno-strict-align
552 -mrelocatable -mno-relocatable -mrelocatable-lib
553 -mno-relocatable-lib -mtoc -mno-toc -mlittle -mlittle-endian
554 -mbig -mbig-endian -mdynamic-no-pic -maltivec -mswdiv
555 -msingle-pic-base -mprioritize-restricted-insns=priority
556 -msched-costly-dep=dependence_type -minsert-sched-nops=scheme
557 -mcall-sysv -mcall-netbsd -maix-struct-return
558 -msvr4-struct-return -mabi=abi-type -msecure-plt -mbss-plt
559 -mblock-move-inline-limit=num -misel -mno-isel -misel=yes
560 -misel=no -mspe -mno-spe -mspe=yes -mspe=no -mpaired
561 -mgen-cell-microcode -mwarn-cell-microcode -mvrsave -mno-vrsave
562 -mmulhw -mno-mulhw -mdlmzb -mno-dlmzb -mfloat-gprs=yes
563 -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double -mprototype
564 -mno-prototype -msim -mmvme -mads -myellowknife -memb -msdata
565 -msdata=opt -mvxworks -G num -pthread -mrecip -mrecip=opt
566 -mno-recip -mrecip-precision -mno-recip-precision -mveclibabi=type
567 -mfriz -mno-friz -mpointers-to-nested-functions
568 -mno-pointers-to-nested-functions -msave-toc-indirect
569 -mno-save-toc-indirect -mpower8-fusion -mno-mpower8-fusion
570 -mpower8-vector -mno-power8-vector -mcrypto -mno-crypto
571 -mdirect-move -mno-direct-move -mquad-memory -mno-quad-memory
572 -mquad-memory-atomic -mno-quad-memory-atomic -mcompat-align-parm
573 -mno-compat-align-parm -mstack-protector-guard=guard
574 -mstack-protector-guard-reg=reg
575 -mstack-protector-guard-offset=offset
576
577 RX Options -m64bit-doubles -m32bit-doubles -fpu -nofpu -mcpu=
578 -mbig-endian-data -mlittle-endian-data -msmall-data -msim -mno-sim
579 -mas100-syntax -mno-as100-syntax -mrelax -mmax-constant-size=
580 -mint-register= -mpid -mno-warn-multiple-fast-interrupts
581 -msave-acc-in-interrupts
582
583 S/390 and zSeries Options -mtune=cpu-type -march=cpu-type
584 -mhard-float -msoft-float -mhard-dfp -mno-hard-dfp
585 -mlong-double-64 -mlong-double-128 -mbackchain -mno-backchain
586 -mpacked-stack -mno-packed-stack -msmall-exec -mno-small-exec
587 -mmvcle -mno-mvcle -m64 -m31 -mdebug -mno-debug -mesa -mzarch
588 -mhtm -mvx -mzvector -mtpf-trace -mno-tpf-trace -mfused-madd
589 -mno-fused-madd -mwarn-framesize -mwarn-dynamicstack -mstack-size
590 -mstack-guard -mhotpatch=halfwords,halfwords
591
592 Score Options -meb -mel -mnhwloop -muls -mmac -mscore5 -mscore5u
593 -mscore7 -mscore7d
594
595 SH Options -m1 -m2 -m2e -m2a-nofpu -m2a-single-only -m2a-single
596 -m2a -m3 -m3e -m4-nofpu -m4-single-only -m4-single -m4
597 -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al -m5-64media
598 -m5-64media-nofpu -m5-32media -m5-32media-nofpu -m5-compact
599 -m5-compact-nofpu -mb -ml -mdalign -mrelax -mbigtable -mfmovd
600 -mhitachi -mrenesas -mno-renesas -mnomacsave -mieee -mno-ieee
601 -mbitops -misize -minline-ic_invalidate -mpadstruct -mspace
602 -mprefergot -musermode -multcost=number -mdiv=strategy
603 -mdivsi3_libfunc=name -mfixed-range=register-range
604 -mindexed-addressing -mgettrcost=number -mpt-fixed
605 -maccumulate-outgoing-args -minvalid-symbols -matomic-model=atomic-
606 model -mbranch-cost=num -mzdcbranch -mno-zdcbranch -mcbranchdi
607 -mcmpeqdi -mfused-madd -mno-fused-madd -mfsca -mno-fsca -mfsrra
608 -mno-fsrra -mpretend-cmove -mtas
609
610 Solaris 2 Options -mimpure-text -mno-impure-text -pthreads
611 -pthread
612
613 SPARC Options -mcpu=cpu-type -mtune=cpu-type -mcmodel=code-model
614 -mmemory-model=mem-model -m32 -m64 -mapp-regs -mno-app-regs
615 -mfaster-structs -mno-faster-structs -mflat -mno-flat -mfpu
616 -mno-fpu -mhard-float -msoft-float -mhard-quad-float
617 -msoft-quad-float -mstack-bias -mno-stack-bias -munaligned-doubles
618 -mno-unaligned-doubles -muser-mode -mno-user-mode -mv8plus
619 -mno-v8plus -mvis -mno-vis -mvis2 -mno-vis2 -mvis3 -mno-vis3
620 -mcbcond -mno-cbcond -mfmaf -mno-fmaf -mpopc -mno-popc
621 -mfix-at697f -mfix-ut699
622
623 SPU Options -mwarn-reloc -merror-reloc -msafe-dma -munsafe-dma
624 -mbranch-hints -msmall-mem -mlarge-mem -mstdmain
625 -mfixed-range=register-range -mea32 -mea64
626 -maddress-space-conversion -mno-address-space-conversion
627 -mcache-size=cache-size -matomic-updates -mno-atomic-updates
628
629 System V Options -Qy -Qn -YP,paths -Ym,dir
630
631 TILE-Gx Options -mcpu=cpu -m32 -m64 -mcmodel=code-model
632
633 TILEPro Options -mcpu=cpu -m32
634
635 V850 Options -mlong-calls -mno-long-calls -mep -mno-ep
636 -mprolog-function -mno-prolog-function -mspace -mtda=n -msda=n
637 -mzda=n -mapp-regs -mno-app-regs -mdisable-callt
638 -mno-disable-callt -mv850e2v3 -mv850e2 -mv850e1 -mv850es -mv850e
639 -mv850 -mv850e3v5 -mloop -mrelax -mlong-jumps -msoft-float
640 -mhard-float -mgcc-abi -mrh850-abi -mbig-switch
641
642 VAX Options -mg -mgnu -munix
643
644 VMS Options -mvms-return-codes -mdebug-main=prefix -mmalloc64
645 -mpointer-size=size
646
647 VxWorks Options -mrtp -non-static -Bstatic -Bdynamic -Xbind-lazy
648 -Xbind-now
649
650 x86-64 Options See i386 and x86-64 Options.
651
652 Xstormy16 Options -msim
653
654 Xtensa Options -mconst16 -mno-const16 -mfused-madd -mno-fused-madd
655 -mforce-no-pic -mserialize-volatile -mno-serialize-volatile
656 -mtext-section-literals -mno-text-section-literals -mtarget-align
657 -mno-target-align -mlongcalls -mno-longcalls
658
659 zSeries Options See S/390 and zSeries Options.
660
661 Code Generation Options
662 -fcall-saved-reg -fcall-used-reg -ffixed-reg -fexceptions
663 -fnon-call-exceptions -fdelete-dead-exceptions -funwind-tables
664 -fasynchronous-unwind-tables -fno-gnu-unique
665 -finhibit-size-directive -finstrument-functions
666 -finstrument-functions-exclude-function-list=sym,sym,...
667 -finstrument-functions-exclude-file-list=file,file,... -fno-common
668 -fno-ident -fpcc-struct-return -fpic -fPIC -fpie -fPIE
669 -fno-jump-tables -frecord-gcc-switches -freg-struct-return
670 -fshort-enums -fshort-double -fshort-wchar -fverbose-asm
671 -fpack-struct[=n] -fstack-check -fstack-limit-register=reg
672 -fstack-limit-symbol=sym -fno-stack-limit -fsplit-stack
673 -fleading-underscore -ftls-model=model -fstack-reuse=reuse_level
674 -ftrapv -fwrapv -fbounds-check -fvisibility
675 -fstrict-volatile-bitfields -fsync-libcalls
676
677 Options Controlling the Kind of Output
678 Compilation can involve up to four stages: preprocessing, compilation
679 proper, assembly and linking, always in that order. GCC is capable of
680 preprocessing and compiling several files either into several assembler
681 input files, or into one assembler input file; then each assembler
682 input file produces an object file, and linking combines all the object
683 files (those newly compiled, and those specified as input) into an
684 executable file.
685
686 For any given input file, the file name suffix determines what kind of
687 compilation is done:
688
689 file.c
690 C source code that must be preprocessed.
691
692 file.i
693 C source code that should not be preprocessed.
694
695 file.ii
696 C++ source code that should not be preprocessed.
697
698 file.m
699 Objective-C source code. Note that you must link with the libobjc
700 library to make an Objective-C program work.
701
702 file.mi
703 Objective-C source code that should not be preprocessed.
704
705 file.mm
706 file.M
707 Objective-C++ source code. Note that you must link with the
708 libobjc library to make an Objective-C++ program work. Note that
709 .M refers to a literal capital M.
710
711 file.mii
712 Objective-C++ source code that should not be preprocessed.
713
714 file.h
715 C, C++, Objective-C or Objective-C++ header file to be turned into
716 a precompiled header (default), or C, C++ header file to be turned
717 into an Ada spec (via the -fdump-ada-spec switch).
718
719 file.cc
720 file.cp
721 file.cxx
722 file.cpp
723 file.CPP
724 file.c++
725 file.C
726 C++ source code that must be preprocessed. Note that in .cxx, the
727 last two letters must both be literally x. Likewise, .C refers to
728 a literal capital C.
729
730 file.mm
731 file.M
732 Objective-C++ source code that must be preprocessed.
733
734 file.mii
735 Objective-C++ source code that should not be preprocessed.
736
737 file.hh
738 file.H
739 file.hp
740 file.hxx
741 file.hpp
742 file.HPP
743 file.h++
744 file.tcc
745 C++ header file to be turned into a precompiled header or Ada spec.
746
747 file.f
748 file.for
749 file.ftn
750 Fixed form Fortran source code that should not be preprocessed.
751
752 file.F
753 file.FOR
754 file.fpp
755 file.FPP
756 file.FTN
757 Fixed form Fortran source code that must be preprocessed (with the
758 traditional preprocessor).
759
760 file.f90
761 file.f95
762 file.f03
763 file.f08
764 Free form Fortran source code that should not be preprocessed.
765
766 file.F90
767 file.F95
768 file.F03
769 file.F08
770 Free form Fortran source code that must be preprocessed (with the
771 traditional preprocessor).
772
773 file.go
774 Go source code.
775
776 file.ads
777 Ada source code file that contains a library unit declaration (a
778 declaration of a package, subprogram, or generic, or a generic
779 instantiation), or a library unit renaming declaration (a package,
780 generic, or subprogram renaming declaration). Such files are also
781 called specs.
782
783 file.adb
784 Ada source code file containing a library unit body (a subprogram
785 or package body). Such files are also called bodies.
786
787 file.s
788 Assembler code.
789
790 file.S
791 file.sx
792 Assembler code that must be preprocessed.
793
794 other
795 An object file to be fed straight into linking. Any file name with
796 no recognized suffix is treated this way.
797
798 You can specify the input language explicitly with the -x option:
799
800 -x language
801 Specify explicitly the language for the following input files
802 (rather than letting the compiler choose a default based on the
803 file name suffix). This option applies to all following input
804 files until the next -x option. Possible values for language are:
805
806 c c-header cpp-output
807 c++ c++-header c++-cpp-output
808 objective-c objective-c-header objective-c-cpp-output
809 objective-c++ objective-c++-header objective-c++-cpp-output
810 assembler assembler-with-cpp
811 ada
812 f77 f77-cpp-input f95 f95-cpp-input
813 go
814 java
815
816 -x none
817 Turn off any specification of a language, so that subsequent files
818 are handled according to their file name suffixes (as they are if
819 -x has not been used at all).
820
821 -pass-exit-codes
822 Normally the gcc program exits with the code of 1 if any phase of
823 the compiler returns a non-success return code. If you specify
824 -pass-exit-codes, the gcc program instead returns with the
825 numerically highest error produced by any phase returning an error
826 indication. The C, C++, and Fortran front ends return 4 if an
827 internal compiler error is encountered.
828
829 If you only want some of the stages of compilation, you can use -x (or
830 filename suffixes) to tell gcc where to start, and one of the options
831 -c, -S, or -E to say where gcc is to stop. Note that some combinations
832 (for example, -x cpp-output -E) instruct gcc to do nothing at all.
833
834 -c Compile or assemble the source files, but do not link. The linking
835 stage simply is not done. The ultimate output is in the form of an
836 object file for each source file.
837
838 By default, the object file name for a source file is made by
839 replacing the suffix .c, .i, .s, etc., with .o.
840
841 Unrecognized input files, not requiring compilation or assembly,
842 are ignored.
843
844 -S Stop after the stage of compilation proper; do not assemble. The
845 output is in the form of an assembler code file for each non-
846 assembler input file specified.
847
848 By default, the assembler file name for a source file is made by
849 replacing the suffix .c, .i, etc., with .s.
850
851 Input files that don't require compilation are ignored.
852
853 -E Stop after the preprocessing stage; do not run the compiler proper.
854 The output is in the form of preprocessed source code, which is
855 sent to the standard output.
856
857 Input files that don't require preprocessing are ignored.
858
859 -o file
860 Place output in file file. This applies to whatever sort of output
861 is being produced, whether it be an executable file, an object
862 file, an assembler file or preprocessed C code.
863
864 If -o is not specified, the default is to put an executable file in
865 a.out, the object file for source.suffix in source.o, its assembler
866 file in source.s, a precompiled header file in source.suffix.gch,
867 and all preprocessed C source on standard output.
868
869 -v Print (on standard error output) the commands executed to run the
870 stages of compilation. Also print the version number of the
871 compiler driver program and of the preprocessor and the compiler
872 proper.
873
874 -###
875 Like -v except the commands are not executed and arguments are
876 quoted unless they contain only alphanumeric characters or "./-_".
877 This is useful for shell scripts to capture the driver-generated
878 command lines.
879
880 -pipe
881 Use pipes rather than temporary files for communication between the
882 various stages of compilation. This fails to work on some systems
883 where the assembler is unable to read from a pipe; but the GNU
884 assembler has no trouble.
885
886 --help
887 Print (on the standard output) a description of the command-line
888 options understood by gcc. If the -v option is also specified then
889 --help is also passed on to the various processes invoked by gcc,
890 so that they can display the command-line options they accept. If
891 the -Wextra option has also been specified (prior to the --help
892 option), then command-line options that have no documentation
893 associated with them are also displayed.
894
895 --target-help
896 Print (on the standard output) a description of target-specific
897 command-line options for each tool. For some targets extra target-
898 specific information may also be printed.
899
900 --help={class|[^]qualifier}[,...]
901 Print (on the standard output) a description of the command-line
902 options understood by the compiler that fit into all specified
903 classes and qualifiers. These are the supported classes:
904
905 optimizers
906 Display all of the optimization options supported by the
907 compiler.
908
909 warnings
910 Display all of the options controlling warning messages
911 produced by the compiler.
912
913 target
914 Display target-specific options. Unlike the --target-help
915 option however, target-specific options of the linker and
916 assembler are not displayed. This is because those tools do
917 not currently support the extended --help= syntax.
918
919 params
920 Display the values recognized by the --param option.
921
922 language
923 Display the options supported for language, where language is
924 the name of one of the languages supported in this version of
925 GCC.
926
927 common
928 Display the options that are common to all languages.
929
930 These are the supported qualifiers:
931
932 undocumented
933 Display only those options that are undocumented.
934
935 joined
936 Display options taking an argument that appears after an equal
937 sign in the same continuous piece of text, such as:
938 --help=target.
939
940 separate
941 Display options taking an argument that appears as a separate
942 word following the original option, such as: -o output-file.
943
944 Thus for example to display all the undocumented target-specific
945 switches supported by the compiler, use:
946
947 --help=target,undocumented
948
949 The sense of a qualifier can be inverted by prefixing it with the ^
950 character, so for example to display all binary warning options
951 (i.e., ones that are either on or off and that do not take an
952 argument) that have a description, use:
953
954 --help=warnings,^joined,^undocumented
955
956 The argument to --help= should not consist solely of inverted
957 qualifiers.
958
959 Combining several classes is possible, although this usually
960 restricts the output so much that there is nothing to display. One
961 case where it does work, however, is when one of the classes is
962 target. For example, to display all the target-specific
963 optimization options, use:
964
965 --help=target,optimizers
966
967 The --help= option can be repeated on the command line. Each
968 successive use displays its requested class of options, skipping
969 those that have already been displayed.
970
971 If the -Q option appears on the command line before the --help=
972 option, then the descriptive text displayed by --help= is changed.
973 Instead of describing the displayed options, an indication is given
974 as to whether the option is enabled, disabled or set to a specific
975 value (assuming that the compiler knows this at the point where the
976 --help= option is used).
977
978 Here is a truncated example from the ARM port of gcc:
979
980 % gcc -Q -mabi=2 --help=target -c
981 The following options are target specific:
982 -mabi= 2
983 -mabort-on-noreturn [disabled]
984 -mapcs [disabled]
985
986 The output is sensitive to the effects of previous command-line
987 options, so for example it is possible to find out which
988 optimizations are enabled at -O2 by using:
989
990 -Q -O2 --help=optimizers
991
992 Alternatively you can discover which binary optimizations are
993 enabled by -O3 by using:
994
995 gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
996 gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
997 diff /tmp/O2-opts /tmp/O3-opts | grep enabled
998
999 -no-canonical-prefixes
1000 Do not expand any symbolic links, resolve references to /../ or
1001 /./, or make the path absolute when generating a relative prefix.
1002
1003 --version
1004 Display the version number and copyrights of the invoked GCC.
1005
1006 -wrapper
1007 Invoke all subcommands under a wrapper program. The name of the
1008 wrapper program and its parameters are passed as a comma separated
1009 list.
1010
1011 gcc -c t.c -wrapper gdb,--args
1012
1013 This invokes all subprograms of gcc under gdb --args, thus the
1014 invocation of cc1 is gdb --args cc1 ....
1015
1016 -fplugin=name.so
1017 Load the plugin code in file name.so, assumed to be a shared object
1018 to be dlopen'd by the compiler. The base name of the shared object
1019 file is used to identify the plugin for the purposes of argument
1020 parsing (See -fplugin-arg-name-key=value below). Each plugin
1021 should define the callback functions specified in the Plugins API.
1022
1023 -fplugin-arg-name-key=value
1024 Define an argument called key with a value of value for the plugin
1025 called name.
1026
1027 -fdump-ada-spec[-slim]
1028 For C and C++ source and include files, generate corresponding Ada
1029 specs.
1030
1031 -fada-spec-parent=unit
1032 In conjunction with -fdump-ada-spec[-slim] above, generate Ada
1033 specs as child units of parent unit.
1034
1035 -fdump-go-spec=file
1036 For input files in any language, generate corresponding Go
1037 declarations in file. This generates Go "const", "type", "var",
1038 and "func" declarations which may be a useful way to start writing
1039 a Go interface to code written in some other language.
1040
1041 @file
1042 Read command-line options from file. The options read are inserted
1043 in place of the original @file option. If file does not exist, or
1044 cannot be read, then the option will be treated literally, and not
1045 removed.
1046
1047 Options in file are separated by whitespace. A whitespace
1048 character may be included in an option by surrounding the entire
1049 option in either single or double quotes. Any character (including
1050 a backslash) may be included by prefixing the character to be
1051 included with a backslash. The file may itself contain additional
1052 @file options; any such options will be processed recursively.
1053
1054 Compiling C++ Programs
1055 C++ source files conventionally use one of the suffixes .C, .cc, .cpp,
1056 .CPP, .c++, .cp, or .cxx; C++ header files often use .hh, .hpp, .H, or
1057 (for shared template code) .tcc; and preprocessed C++ files use the
1058 suffix .ii. GCC recognizes files with these names and compiles them as
1059 C++ programs even if you call the compiler the same way as for
1060 compiling C programs (usually with the name gcc).
1061
1062 However, the use of gcc does not add the C++ library. g++ is a program
1063 that calls GCC and automatically specifies linking against the C++
1064 library. It treats .c, .h and .i files as C++ source files instead of
1065 C source files unless -x is used. This program is also useful when
1066 precompiling a C header file with a .h extension for use in C++
1067 compilations. On many systems, g++ is also installed with the name
1068 c++.
1069
1070 When you compile C++ programs, you may specify many of the same
1071 command-line options that you use for compiling programs in any
1072 language; or command-line options meaningful for C and related
1073 languages; or options that are meaningful only for C++ programs.
1074
1075 Options Controlling C Dialect
1076 The following options control the dialect of C (or languages derived
1077 from C, such as C++, Objective-C and Objective-C++) that the compiler
1078 accepts:
1079
1080 -ansi
1081 In C mode, this is equivalent to -std=c90. In C++ mode, it is
1082 equivalent to -std=c++98.
1083
1084 This turns off certain features of GCC that are incompatible with
1085 ISO C90 (when compiling C code), or of standard C++ (when compiling
1086 C++ code), such as the "asm" and "typeof" keywords, and predefined
1087 macros such as "unix" and "vax" that identify the type of system
1088 you are using. It also enables the undesirable and rarely used ISO
1089 trigraph feature. For the C compiler, it disables recognition of
1090 C++ style // comments as well as the "inline" keyword.
1091
1092 The alternate keywords "__asm__", "__extension__", "__inline__" and
1093 "__typeof__" continue to work despite -ansi. You would not want to
1094 use them in an ISO C program, of course, but it is useful to put
1095 them in header files that might be included in compilations done
1096 with -ansi. Alternate predefined macros such as "__unix__" and
1097 "__vax__" are also available, with or without -ansi.
1098
1099 The -ansi option does not cause non-ISO programs to be rejected
1100 gratuitously. For that, -Wpedantic is required in addition to
1101 -ansi.
1102
1103 The macro "__STRICT_ANSI__" is predefined when the -ansi option is
1104 used. Some header files may notice this macro and refrain from
1105 declaring certain functions or defining certain macros that the ISO
1106 standard doesn't call for; this is to avoid interfering with any
1107 programs that might use these names for other things.
1108
1109 Functions that are normally built in but do not have semantics
1110 defined by ISO C (such as "alloca" and "ffs") are not built-in
1111 functions when -ansi is used.
1112
1113 -std=
1114 Determine the language standard. This option is currently only
1115 supported when compiling C or C++.
1116
1117 The compiler can accept several base standards, such as c90 or
1118 c++98, and GNU dialects of those standards, such as gnu90 or
1119 gnu++98. When a base standard is specified, the compiler accepts
1120 all programs following that standard plus those using GNU
1121 extensions that do not contradict it. For example, -std=c90 turns
1122 off certain features of GCC that are incompatible with ISO C90,
1123 such as the "asm" and "typeof" keywords, but not other GNU
1124 extensions that do not have a meaning in ISO C90, such as omitting
1125 the middle term of a "?:" expression. On the other hand, when a GNU
1126 dialect of a standard is specified, all features supported by the
1127 compiler are enabled, even when those features change the meaning
1128 of the base standard. As a result, some strict-conforming programs
1129 may be rejected. The particular standard is used by -Wpedantic to
1130 identify which features are GNU extensions given that version of
1131 the standard. For example -std=gnu90 -Wpedantic warns about C++
1132 style // comments, while -std=gnu99 -Wpedantic does not.
1133
1134 A value for this option must be provided; possible values are
1135
1136 c90
1137 c89
1138 iso9899:1990
1139 Support all ISO C90 programs (certain GNU extensions that
1140 conflict with ISO C90 are disabled). Same as -ansi for C code.
1141
1142 iso9899:199409
1143 ISO C90 as modified in amendment 1.
1144
1145 c99
1146 c9x
1147 iso9899:1999
1148 iso9899:199x
1149 ISO C99. Note that this standard is not yet fully supported;
1150 see <http://gcc.gnu.org/c99status.html> for more information.
1151 The names c9x and iso9899:199x are deprecated.
1152
1153 c11
1154 c1x
1155 iso9899:2011
1156 ISO C11, the 2011 revision of the ISO C standard. Support is
1157 incomplete and experimental. The name c1x is deprecated.
1158
1159 gnu90
1160 gnu89
1161 GNU dialect of ISO C90 (including some C99 features). This is
1162 the default for C code.
1163
1164 gnu99
1165 gnu9x
1166 GNU dialect of ISO C99. When ISO C99 is fully implemented in
1167 GCC, this will become the default. The name gnu9x is
1168 deprecated.
1169
1170 gnu11
1171 gnu1x
1172 GNU dialect of ISO C11. Support is incomplete and
1173 experimental. The name gnu1x is deprecated.
1174
1175 c++98
1176 c++03
1177 The 1998 ISO C++ standard plus the 2003 technical corrigendum
1178 and some additional defect reports. Same as -ansi for C++ code.
1179
1180 gnu++98
1181 gnu++03
1182 GNU dialect of -std=c++98. This is the default for C++ code.
1183
1184 c++11
1185 c++0x
1186 The 2011 ISO C++ standard plus amendments. Support for C++11
1187 is still experimental, and may change in incompatible ways in
1188 future releases. The name c++0x is deprecated.
1189
1190 gnu++11
1191 gnu++0x
1192 GNU dialect of -std=c++11. Support for C++11 is still
1193 experimental, and may change in incompatible ways in future
1194 releases. The name gnu++0x is deprecated.
1195
1196 c++1y
1197 The next revision of the ISO C++ standard, tentatively planned
1198 for 2017. Support is highly experimental, and will almost
1199 certainly change in incompatible ways in future releases.
1200
1201 gnu++1y
1202 GNU dialect of -std=c++1y. Support is highly experimental, and
1203 will almost certainly change in incompatible ways in future
1204 releases.
1205
1206 -fgnu89-inline
1207 The option -fgnu89-inline tells GCC to use the traditional GNU
1208 semantics for "inline" functions when in C99 mode.
1209 This option is accepted and ignored by GCC versions 4.1.3 up to
1210 but not including 4.3. In GCC versions 4.3 and later it changes
1211 the behavior of GCC in C99 mode. Using this option is roughly
1212 equivalent to adding the "gnu_inline" function attribute to all
1213 inline functions.
1214
1215 The option -fno-gnu89-inline explicitly tells GCC to use the C99
1216 semantics for "inline" when in C99 or gnu99 mode (i.e., it
1217 specifies the default behavior). This option was first supported
1218 in GCC 4.3. This option is not supported in -std=c90 or -std=gnu90
1219 mode.
1220
1221 The preprocessor macros "__GNUC_GNU_INLINE__" and
1222 "__GNUC_STDC_INLINE__" may be used to check which semantics are in
1223 effect for "inline" functions.
1224
1225 -aux-info filename
1226 Output to the given filename prototyped declarations for all
1227 functions declared and/or defined in a translation unit, including
1228 those in header files. This option is silently ignored in any
1229 language other than C.
1230
1231 Besides declarations, the file indicates, in comments, the origin
1232 of each declaration (source file and line), whether the declaration
1233 was implicit, prototyped or unprototyped (I, N for new or O for
1234 old, respectively, in the first character after the line number and
1235 the colon), and whether it came from a declaration or a definition
1236 (C or F, respectively, in the following character). In the case of
1237 function definitions, a K&R-style list of arguments followed by
1238 their declarations is also provided, inside comments, after the
1239 declaration.
1240
1241 -fallow-parameterless-variadic-functions
1242 Accept variadic functions without named parameters.
1243
1244 Although it is possible to define such a function, this is not very
1245 useful as it is not possible to read the arguments. This is only
1246 supported for C as this construct is allowed by C++.
1247
1248 -fno-asm
1249 Do not recognize "asm", "inline" or "typeof" as a keyword, so that
1250 code can use these words as identifiers. You can use the keywords
1251 "__asm__", "__inline__" and "__typeof__" instead. -ansi implies
1252 -fno-asm.
1253
1254 In C++, this switch only affects the "typeof" keyword, since "asm"
1255 and "inline" are standard keywords. You may want to use the
1256 -fno-gnu-keywords flag instead, which has the same effect. In C99
1257 mode (-std=c99 or -std=gnu99), this switch only affects the "asm"
1258 and "typeof" keywords, since "inline" is a standard keyword in ISO
1259 C99.
1260
1261 -fno-builtin
1262 -fno-builtin-function
1263 Don't recognize built-in functions that do not begin with
1264 __builtin_ as prefix.
1265
1266 GCC normally generates special code to handle certain built-in
1267 functions more efficiently; for instance, calls to "alloca" may
1268 become single instructions which adjust the stack directly, and
1269 calls to "memcpy" may become inline copy loops. The resulting code
1270 is often both smaller and faster, but since the function calls no
1271 longer appear as such, you cannot set a breakpoint on those calls,
1272 nor can you change the behavior of the functions by linking with a
1273 different library. In addition, when a function is recognized as a
1274 built-in function, GCC may use information about that function to
1275 warn about problems with calls to that function, or to generate
1276 more efficient code, even if the resulting code still contains
1277 calls to that function. For example, warnings are given with
1278 -Wformat for bad calls to "printf" when "printf" is built in and
1279 "strlen" is known not to modify global memory.
1280
1281 With the -fno-builtin-function option only the built-in function
1282 function is disabled. function must not begin with __builtin_. If
1283 a function is named that is not built-in in this version of GCC,
1284 this option is ignored. There is no corresponding
1285 -fbuiltin-function option; if you wish to enable built-in functions
1286 selectively when using -fno-builtin or -ffreestanding, you may
1287 define macros such as:
1288
1289 #define abs(n) __builtin_abs ((n))
1290 #define strcpy(d, s) __builtin_strcpy ((d), (s))
1291
1292 -fhosted
1293 Assert that compilation targets a hosted environment. This implies
1294 -fbuiltin. A hosted environment is one in which the entire
1295 standard library is available, and in which "main" has a return
1296 type of "int". Examples are nearly everything except a kernel.
1297 This is equivalent to -fno-freestanding.
1298
1299 -ffreestanding
1300 Assert that compilation targets a freestanding environment. This
1301 implies -fno-builtin. A freestanding environment is one in which
1302 the standard library may not exist, and program startup may not
1303 necessarily be at "main". The most obvious example is an OS
1304 kernel. This is equivalent to -fno-hosted.
1305
1306 -fopenmp
1307 Enable handling of OpenMP directives "#pragma omp" in C/C++ and
1308 "!$omp" in Fortran. When -fopenmp is specified, the compiler
1309 generates parallel code according to the OpenMP Application Program
1310 Interface v3.0 <http://www.openmp.org/>. This option implies
1311 -pthread, and thus is only supported on targets that have support
1312 for -pthread.
1313
1314 -fgnu-tm
1315 When the option -fgnu-tm is specified, the compiler generates code
1316 for the Linux variant of Intel's current Transactional Memory ABI
1317 specification document (Revision 1.1, May 6 2009). This is an
1318 experimental feature whose interface may change in future versions
1319 of GCC, as the official specification changes. Please note that
1320 not all architectures are supported for this feature.
1321
1322 For more information on GCC's support for transactional memory,
1323
1324 Note that the transactional memory feature is not supported with
1325 non-call exceptions (-fnon-call-exceptions).
1326
1327 -fms-extensions
1328 Accept some non-standard constructs used in Microsoft header files.
1329
1330 In C++ code, this allows member names in structures to be similar
1331 to previous types declarations.
1332
1333 typedef int UOW;
1334 struct ABC {
1335 UOW UOW;
1336 };
1337
1338 Some cases of unnamed fields in structures and unions are only
1339 accepted with this option.
1340
1341 -fplan9-extensions
1342 Accept some non-standard constructs used in Plan 9 code.
1343
1344 This enables -fms-extensions, permits passing pointers to
1345 structures with anonymous fields to functions that expect pointers
1346 to elements of the type of the field, and permits referring to
1347 anonymous fields declared using a typedef. This is only
1348 supported for C, not C++.
1349
1350 -trigraphs
1351 Support ISO C trigraphs. The -ansi option (and -std options for
1352 strict ISO C conformance) implies -trigraphs.
1353
1354 -traditional
1355 -traditional-cpp
1356 Formerly, these options caused GCC to attempt to emulate a pre-
1357 standard C compiler. They are now only supported with the -E
1358 switch. The preprocessor continues to support a pre-standard mode.
1359 See the GNU CPP manual for details.
1360
1361 -fcond-mismatch
1362 Allow conditional expressions with mismatched types in the second
1363 and third arguments. The value of such an expression is void.
1364 This option is not supported for C++.
1365
1366 -flax-vector-conversions
1367 Allow implicit conversions between vectors with differing numbers
1368 of elements and/or incompatible element types. This option should
1369 not be used for new code.
1370
1371 -funsigned-char
1372 Let the type "char" be unsigned, like "unsigned char".
1373
1374 Each kind of machine has a default for what "char" should be. It
1375 is either like "unsigned char" by default or like "signed char" by
1376 default.
1377
1378 Ideally, a portable program should always use "signed char" or
1379 "unsigned char" when it depends on the signedness of an object.
1380 But many programs have been written to use plain "char" and expect
1381 it to be signed, or expect it to be unsigned, depending on the
1382 machines they were written for. This option, and its inverse, let
1383 you make such a program work with the opposite default.
1384
1385 The type "char" is always a distinct type from each of "signed
1386 char" or "unsigned char", even though its behavior is always just
1387 like one of those two.
1388
1389 -fsigned-char
1390 Let the type "char" be signed, like "signed char".
1391
1392 Note that this is equivalent to -fno-unsigned-char, which is the
1393 negative form of -funsigned-char. Likewise, the option
1394 -fno-signed-char is equivalent to -funsigned-char.
1395
1396 -fsigned-bitfields
1397 -funsigned-bitfields
1398 -fno-signed-bitfields
1399 -fno-unsigned-bitfields
1400 These options control whether a bit-field is signed or unsigned,
1401 when the declaration does not use either "signed" or "unsigned".
1402 By default, such a bit-field is signed, because this is consistent:
1403 the basic integer types such as "int" are signed types.
1404
1405 Options Controlling C++ Dialect
1406 This section describes the command-line options that are only
1407 meaningful for C++ programs. You can also use most of the GNU compiler
1408 options regardless of what language your program is in. For example,
1409 you might compile a file "firstClass.C" like this:
1410
1411 g++ -g -frepo -O -c firstClass.C
1412
1413 In this example, only -frepo is an option meant only for C++ programs;
1414 you can use the other options with any language supported by GCC.
1415
1416 Here is a list of options that are only for compiling C++ programs:
1417
1418 -fabi-version=n
1419 Use version n of the C++ ABI. The default is version 2.
1420
1421 Version 0 refers to the version conforming most closely to the C++
1422 ABI specification. Therefore, the ABI obtained using version 0
1423 will change in different versions of G++ as ABI bugs are fixed.
1424
1425 Version 1 is the version of the C++ ABI that first appeared in G++
1426 3.2.
1427
1428 Version 2 is the version of the C++ ABI that first appeared in G++
1429 3.4.
1430
1431 Version 3 corrects an error in mangling a constant address as a
1432 template argument.
1433
1434 Version 4, which first appeared in G++ 4.5, implements a standard
1435 mangling for vector types.
1436
1437 Version 5, which first appeared in G++ 4.6, corrects the mangling
1438 of attribute const/volatile on function pointer types, decltype of
1439 a plain decl, and use of a function parameter in the declaration of
1440 another parameter.
1441
1442 Version 6, which first appeared in G++ 4.7, corrects the promotion
1443 behavior of C++11 scoped enums and the mangling of template
1444 argument packs, const/static_cast, prefix ++ and --, and a class
1445 scope function used as a template argument.
1446
1447 See also -Wabi.
1448
1449 -fno-access-control
1450 Turn off all access checking. This switch is mainly useful for
1451 working around bugs in the access control code.
1452
1453 -fcheck-new
1454 Check that the pointer returned by "operator new" is non-null
1455 before attempting to modify the storage allocated. This check is
1456 normally unnecessary because the C++ standard specifies that
1457 "operator new" only returns 0 if it is declared throw(), in which
1458 case the compiler always checks the return value even without this
1459 option. In all other cases, when "operator new" has a non-empty
1460 exception specification, memory exhaustion is signalled by throwing
1461 "std::bad_alloc". See also new (nothrow).
1462
1463 -fconstexpr-depth=n
1464 Set the maximum nested evaluation depth for C++11 constexpr
1465 functions to n. A limit is needed to detect endless recursion
1466 during constant expression evaluation. The minimum specified by
1467 the standard is 512.
1468
1469 -fdeduce-init-list
1470 Enable deduction of a template type parameter as
1471 "std::initializer_list" from a brace-enclosed initializer list,
1472 i.e.
1473
1474 template <class T> auto forward(T t) -> decltype (realfn (t))
1475 {
1476 return realfn (t);
1477 }
1478
1479 void f()
1480 {
1481 forward({1,2}); // call forward<std::initializer_list<int>>
1482 }
1483
1484 This deduction was implemented as a possible extension to the
1485 originally proposed semantics for the C++11 standard, but was not
1486 part of the final standard, so it is disabled by default. This
1487 option is deprecated, and may be removed in a future version of
1488 G++.
1489
1490 -ffriend-injection
1491 Inject friend functions into the enclosing namespace, so that they
1492 are visible outside the scope of the class in which they are
1493 declared. Friend functions were documented to work this way in the
1494 old Annotated C++ Reference Manual, and versions of G++ before 4.1
1495 always worked that way. However, in ISO C++ a friend function that
1496 is not declared in an enclosing scope can only be found using
1497 argument dependent lookup. This option causes friends to be
1498 injected as they were in earlier releases.
1499
1500 This option is for compatibility, and may be removed in a future
1501 release of G++.
1502
1503 -fno-elide-constructors
1504 The C++ standard allows an implementation to omit creating a
1505 temporary that is only used to initialize another object of the
1506 same type. Specifying this option disables that optimization, and
1507 forces G++ to call the copy constructor in all cases.
1508
1509 -fno-enforce-eh-specs
1510 Don't generate code to check for violation of exception
1511 specifications at run time. This option violates the C++ standard,
1512 but may be useful for reducing code size in production builds, much
1513 like defining NDEBUG. This does not give user code permission to
1514 throw exceptions in violation of the exception specifications; the
1515 compiler still optimizes based on the specifications, so throwing
1516 an unexpected exception results in undefined behavior at run time.
1517
1518 -fextern-tls-init
1519 -fno-extern-tls-init
1520 The C++11 and OpenMP standards allow thread_local and threadprivate
1521 variables to have dynamic (runtime) initialization. To support
1522 this, any use of such a variable goes through a wrapper function
1523 that performs any necessary initialization. When the use and
1524 definition of the variable are in the same translation unit, this
1525 overhead can be optimized away, but when the use is in a different
1526 translation unit there is significant overhead even if the variable
1527 doesn't actually need dynamic initialization. If the programmer
1528 can be sure that no use of the variable in a non-defining TU needs
1529 to trigger dynamic initialization (either because the variable is
1530 statically initialized, or a use of the variable in the defining TU
1531 will be executed before any uses in another TU), they can avoid
1532 this overhead with the -fno-extern-tls-init option.
1533
1534 On targets that support symbol aliases, the default is
1535 -fextern-tls-init. On targets that do not support symbol aliases,
1536 the default is -fno-extern-tls-init.
1537
1538 -ffor-scope
1539 -fno-for-scope
1540 If -ffor-scope is specified, the scope of variables declared in a
1541 for-init-statement is limited to the for loop itself, as specified
1542 by the C++ standard. If -fno-for-scope is specified, the scope of
1543 variables declared in a for-init-statement extends to the end of
1544 the enclosing scope, as was the case in old versions of G++, and
1545 other (traditional) implementations of C++.
1546
1547 If neither flag is given, the default is to follow the standard,
1548 but to allow and give a warning for old-style code that would
1549 otherwise be invalid, or have different behavior.
1550
1551 -fno-gnu-keywords
1552 Do not recognize "typeof" as a keyword, so that code can use this
1553 word as an identifier. You can use the keyword "__typeof__"
1554 instead. -ansi implies -fno-gnu-keywords.
1555
1556 -fno-implicit-templates
1557 Never emit code for non-inline templates that are instantiated
1558 implicitly (i.e. by use); only emit code for explicit
1559 instantiations.
1560
1561 -fno-implicit-inline-templates
1562 Don't emit code for implicit instantiations of inline templates,
1563 either. The default is to handle inlines differently so that
1564 compiles with and without optimization need the same set of
1565 explicit instantiations.
1566
1567 -fno-implement-inlines
1568 To save space, do not emit out-of-line copies of inline functions
1569 controlled by #pragma implementation. This causes linker errors if
1570 these functions are not inlined everywhere they are called.
1571
1572 -fms-extensions
1573 Disable Wpedantic warnings about constructs used in MFC, such as
1574 implicit int and getting a pointer to member function via non-
1575 standard syntax.
1576
1577 -fno-nonansi-builtins
1578 Disable built-in declarations of functions that are not mandated by
1579 ANSI/ISO C. These include "ffs", "alloca", "_exit", "index",
1580 "bzero", "conjf", and other related functions.
1581
1582 -fnothrow-opt
1583 Treat a "throw()" exception specification as if it were a
1584 "noexcept" specification to reduce or eliminate the text size
1585 overhead relative to a function with no exception specification.
1586 If the function has local variables of types with non-trivial
1587 destructors, the exception specification actually makes the
1588 function smaller because the EH cleanups for those variables can be
1589 optimized away. The semantic effect is that an exception thrown
1590 out of a function with such an exception specification results in a
1591 call to "terminate" rather than "unexpected".
1592
1593 -fno-operator-names
1594 Do not treat the operator name keywords "and", "bitand", "bitor",
1595 "compl", "not", "or" and "xor" as synonyms as keywords.
1596
1597 -fno-optional-diags
1598 Disable diagnostics that the standard says a compiler does not need
1599 to issue. Currently, the only such diagnostic issued by G++ is the
1600 one for a name having multiple meanings within a class.
1601
1602 -fpermissive
1603 Downgrade some diagnostics about nonconformant code from errors to
1604 warnings. Thus, using -fpermissive allows some nonconforming code
1605 to compile.
1606
1607 -fno-pretty-templates
1608 When an error message refers to a specialization of a function
1609 template, the compiler normally prints the signature of the
1610 template followed by the template arguments and any typedefs or
1611 typenames in the signature (e.g. "void f(T) [with T = int]" rather
1612 than "void f(int)") so that it's clear which template is involved.
1613 When an error message refers to a specialization of a class
1614 template, the compiler omits any template arguments that match the
1615 default template arguments for that template. If either of these
1616 behaviors make it harder to understand the error message rather
1617 than easier, you can use -fno-pretty-templates to disable them.
1618
1619 -frepo
1620 Enable automatic template instantiation at link time. This option
1621 also implies -fno-implicit-templates.
1622
1623 -fno-rtti
1624 Disable generation of information about every class with virtual
1625 functions for use by the C++ run-time type identification features
1626 (dynamic_cast and typeid). If you don't use those parts of the
1627 language, you can save some space by using this flag. Note that
1628 exception handling uses the same information, but G++ generates it
1629 as needed. The dynamic_cast operator can still be used for casts
1630 that do not require run-time type information, i.e. casts to "void
1631 *" or to unambiguous base classes.
1632
1633 -fstats
1634 Emit statistics about front-end processing at the end of the
1635 compilation. This information is generally only useful to the G++
1636 development team.
1637
1638 -fstrict-enums
1639 Allow the compiler to optimize using the assumption that a value of
1640 enumerated type can only be one of the values of the enumeration
1641 (as defined in the C++ standard; basically, a value that can be
1642 represented in the minimum number of bits needed to represent all
1643 the enumerators). This assumption may not be valid if the program
1644 uses a cast to convert an arbitrary integer value to the enumerated
1645 type.
1646
1647 -ftemplate-backtrace-limit=n
1648 Set the maximum number of template instantiation notes for a single
1649 warning or error to n. The default value is 10.
1650
1651 -ftemplate-depth=n
1652 Set the maximum instantiation depth for template classes to n. A
1653 limit on the template instantiation depth is needed to detect
1654 endless recursions during template class instantiation. ANSI/ISO
1655 C++ conforming programs must not rely on a maximum depth greater
1656 than 17 (changed to 1024 in C++11). The default value is 900, as
1657 the compiler can run out of stack space before hitting 1024 in some
1658 situations.
1659
1660 -fno-threadsafe-statics
1661 Do not emit the extra code to use the routines specified in the C++
1662 ABI for thread-safe initialization of local statics. You can use
1663 this option to reduce code size slightly in code that doesn't need
1664 to be thread-safe.
1665
1666 -fuse-cxa-atexit
1667 Register destructors for objects with static storage duration with
1668 the "__cxa_atexit" function rather than the "atexit" function.
1669 This option is required for fully standards-compliant handling of
1670 static destructors, but only works if your C library supports
1671 "__cxa_atexit".
1672
1673 -fno-use-cxa-get-exception-ptr
1674 Don't use the "__cxa_get_exception_ptr" runtime routine. This
1675 causes "std::uncaught_exception" to be incorrect, but is necessary
1676 if the runtime routine is not available.
1677
1678 -fvisibility-inlines-hidden
1679 This switch declares that the user does not attempt to compare
1680 pointers to inline functions or methods where the addresses of the
1681 two functions are taken in different shared objects.
1682
1683 The effect of this is that GCC may, effectively, mark inline
1684 methods with "__attribute__ ((visibility ("hidden")))" so that they
1685 do not appear in the export table of a DSO and do not require a PLT
1686 indirection when used within the DSO. Enabling this option can
1687 have a dramatic effect on load and link times of a DSO as it
1688 massively reduces the size of the dynamic export table when the
1689 library makes heavy use of templates.
1690
1691 The behavior of this switch is not quite the same as marking the
1692 methods as hidden directly, because it does not affect static
1693 variables local to the function or cause the compiler to deduce
1694 that the function is defined in only one shared object.
1695
1696 You may mark a method as having a visibility explicitly to negate
1697 the effect of the switch for that method. For example, if you do
1698 want to compare pointers to a particular inline method, you might
1699 mark it as having default visibility. Marking the enclosing class
1700 with explicit visibility has no effect.
1701
1702 Explicitly instantiated inline methods are unaffected by this
1703 option as their linkage might otherwise cross a shared library
1704 boundary.
1705
1706 -fvisibility-ms-compat
1707 This flag attempts to use visibility settings to make GCC's C++
1708 linkage model compatible with that of Microsoft Visual Studio.
1709
1710 The flag makes these changes to GCC's linkage model:
1711
1712 1. It sets the default visibility to "hidden", like
1713 -fvisibility=hidden.
1714
1715 2. Types, but not their members, are not hidden by default.
1716
1717 3. The One Definition Rule is relaxed for types without explicit
1718 visibility specifications that are defined in more than one
1719 shared object: those declarations are permitted if they are
1720 permitted when this option is not used.
1721
1722 In new code it is better to use -fvisibility=hidden and export
1723 those classes that are intended to be externally visible.
1724 Unfortunately it is possible for code to rely, perhaps
1725 accidentally, on the Visual Studio behavior.
1726
1727 Among the consequences of these changes are that static data
1728 members of the same type with the same name but defined in
1729 different shared objects are different, so changing one does not
1730 change the other; and that pointers to function members defined in
1731 different shared objects may not compare equal. When this flag is
1732 given, it is a violation of the ODR to define types with the same
1733 name differently.
1734
1735 -fno-weak
1736 Do not use weak symbol support, even if it is provided by the
1737 linker. By default, G++ uses weak symbols if they are available.
1738 This option exists only for testing, and should not be used by end-
1739 users; it results in inferior code and has no benefits. This
1740 option may be removed in a future release of G++.
1741
1742 -nostdinc++
1743 Do not search for header files in the standard directories specific
1744 to C++, but do still search the other standard directories. (This
1745 option is used when building the C++ library.)
1746
1747 In addition, these optimization, warning, and code generation options
1748 have meanings only for C++ programs:
1749
1750 -fno-default-inline
1751 Do not assume inline for functions defined inside a class scope.
1752 Note that these functions have linkage like inline functions;
1753 they just aren't inlined by default.
1754
1755 -Wabi (C, Objective-C, C++ and Objective-C++ only)
1756 Warn when G++ generates code that is probably not compatible with
1757 the vendor-neutral C++ ABI. Although an effort has been made to
1758 warn about all such cases, there are probably some cases that are
1759 not warned about, even though G++ is generating incompatible code.
1760 There may also be cases where warnings are emitted even though the
1761 code that is generated is compatible.
1762
1763 You should rewrite your code to avoid these warnings if you are
1764 concerned about the fact that code generated by G++ may not be
1765 binary compatible with code generated by other compilers.
1766
1767 The known incompatibilities in -fabi-version=2 (the default)
1768 include:
1769
1770 · A template with a non-type template parameter of reference type
1771 is mangled incorrectly:
1772
1773 extern int N;
1774 template <int &> struct S {};
1775 void n (S<N>) {2}
1776
1777 This is fixed in -fabi-version=3.
1778
1779 · SIMD vector types declared using "__attribute ((vector_size))"
1780 are mangled in a non-standard way that does not allow for
1781 overloading of functions taking vectors of different sizes.
1782
1783 The mangling is changed in -fabi-version=4.
1784
1785 The known incompatibilities in -fabi-version=1 include:
1786
1787 · Incorrect handling of tail-padding for bit-fields. G++ may
1788 attempt to pack data into the same byte as a base class. For
1789 example:
1790
1791 struct A { virtual void f(); int f1 : 1; };
1792 struct B : public A { int f2 : 1; };
1793
1794 In this case, G++ places "B::f2" into the same byte as "A::f1";
1795 other compilers do not. You can avoid this problem by
1796 explicitly padding "A" so that its size is a multiple of the
1797 byte size on your platform; that causes G++ and other compilers
1798 to lay out "B" identically.
1799
1800 · Incorrect handling of tail-padding for virtual bases. G++ does
1801 not use tail padding when laying out virtual bases. For
1802 example:
1803
1804 struct A { virtual void f(); char c1; };
1805 struct B { B(); char c2; };
1806 struct C : public A, public virtual B {};
1807
1808 In this case, G++ does not place "B" into the tail-padding for
1809 "A"; other compilers do. You can avoid this problem by
1810 explicitly padding "A" so that its size is a multiple of its
1811 alignment (ignoring virtual base classes); that causes G++ and
1812 other compilers to lay out "C" identically.
1813
1814 · Incorrect handling of bit-fields with declared widths greater
1815 than that of their underlying types, when the bit-fields appear
1816 in a union. For example:
1817
1818 union U { int i : 4096; };
1819
1820 Assuming that an "int" does not have 4096 bits, G++ makes the
1821 union too small by the number of bits in an "int".
1822
1823 · Empty classes can be placed at incorrect offsets. For example:
1824
1825 struct A {};
1826
1827 struct B {
1828 A a;
1829 virtual void f ();
1830 };
1831
1832 struct C : public B, public A {};
1833
1834 G++ places the "A" base class of "C" at a nonzero offset; it
1835 should be placed at offset zero. G++ mistakenly believes that
1836 the "A" data member of "B" is already at offset zero.
1837
1838 · Names of template functions whose types involve "typename" or
1839 template template parameters can be mangled incorrectly.
1840
1841 template <typename Q>
1842 void f(typename Q::X) {}
1843
1844 template <template <typename> class Q>
1845 void f(typename Q<int>::X) {}
1846
1847 Instantiations of these templates may be mangled incorrectly.
1848
1849 It also warns about psABI-related changes. The known psABI changes
1850 at this point include:
1851
1852 · For SysV/x86-64, unions with "long double" members are passed
1853 in memory as specified in psABI. For example:
1854
1855 union U {
1856 long double ld;
1857 int i;
1858 };
1859
1860 "union U" is always passed in memory.
1861
1862 -Wctor-dtor-privacy (C++ and Objective-C++ only)
1863 Warn when a class seems unusable because all the constructors or
1864 destructors in that class are private, and it has neither friends
1865 nor public static member functions. Also warn if there are no non-
1866 private methods, and there's at least one private member function
1867 that isn't a constructor or destructor.
1868
1869 -Wdelete-non-virtual-dtor (C++ and Objective-C++ only)
1870 Warn when delete is used to destroy an instance of a class that has
1871 virtual functions and non-virtual destructor. It is unsafe to
1872 delete an instance of a derived class through a pointer to a base
1873 class if the base class does not have a virtual destructor. This
1874 warning is enabled by -Wall.
1875
1876 -Wliteral-suffix (C++ and Objective-C++ only)
1877 Warn when a string or character literal is followed by a ud-suffix
1878 which does not begin with an underscore. As a conforming
1879 extension, GCC treats such suffixes as separate preprocessing
1880 tokens in order to maintain backwards compatibility with code that
1881 uses formatting macros from "<inttypes.h>". For example:
1882
1883 #define __STDC_FORMAT_MACROS
1884 #include <inttypes.h>
1885 #include <stdio.h>
1886
1887 int main() {
1888 int64_t i64 = 123;
1889 printf("My int64: %"PRId64"\n", i64);
1890 }
1891
1892 In this case, "PRId64" is treated as a separate preprocessing
1893 token.
1894
1895 This warning is enabled by default.
1896
1897 -Wnarrowing (C++ and Objective-C++ only)
1898 Warn when a narrowing conversion prohibited by C++11 occurs within
1899 { }, e.g.
1900
1901 int i = { 2.2 }; // error: narrowing from double to int
1902
1903 This flag is included in -Wall and -Wc++11-compat.
1904
1905 With -std=c++11, -Wno-narrowing suppresses the diagnostic required
1906 by the standard. Note that this does not affect the meaning of
1907 well-formed code; narrowing conversions are still considered ill-
1908 formed in SFINAE context.
1909
1910 -Wnoexcept (C++ and Objective-C++ only)
1911 Warn when a noexcept-expression evaluates to false because of a
1912 call to a function that does not have a non-throwing exception
1913 specification (i.e. throw() or noexcept) but is known by the
1914 compiler to never throw an exception.
1915
1916 -Wnon-virtual-dtor (C++ and Objective-C++ only)
1917 Warn when a class has virtual functions and an accessible non-
1918 virtual destructor, in which case it is possible but unsafe to
1919 delete an instance of a derived class through a pointer to the base
1920 class. This warning is also enabled if -Weffc++ is specified.
1921
1922 -Wreorder (C++ and Objective-C++ only)
1923 Warn when the order of member initializers given in the code does
1924 not match the order in which they must be executed. For instance:
1925
1926 struct A {
1927 int i;
1928 int j;
1929 A(): j (0), i (1) { }
1930 };
1931
1932 The compiler rearranges the member initializers for i and j to
1933 match the declaration order of the members, emitting a warning to
1934 that effect. This warning is enabled by -Wall.
1935
1936 -fext-numeric-literals (C++ and Objective-C++ only)
1937 Accept imaginary, fixed-point, or machine-defined literal number
1938 suffixes as GNU extensions. When this option is turned off these
1939 suffixes are treated as C++11 user-defined literal numeric
1940 suffixes. This is on by default for all pre-C++11 dialects and all
1941 GNU dialects: -std=c++98, -std=gnu++98, -std=gnu++11, -std=gnu++1y.
1942 This option is off by default for ISO C++11 onwards (-std=c++11,
1943 ...).
1944
1945 The following -W... options are not affected by -Wall.
1946
1947 -Weffc++ (C++ and Objective-C++ only)
1948 Warn about violations of the following style guidelines from Scott
1949 Meyers' Effective C++, Second Edition book:
1950
1951 · Item 11: Define a copy constructor and an assignment operator
1952 for classes with dynamically-allocated memory.
1953
1954 · Item 12: Prefer initialization to assignment in constructors.
1955
1956 · Item 14: Make destructors virtual in base classes.
1957
1958 · Item 15: Have "operator=" return a reference to *this.
1959
1960 · Item 23: Don't try to return a reference when you must return
1961 an object.
1962
1963 Also warn about violations of the following style guidelines from
1964 Scott Meyers' More Effective C++ book:
1965
1966 · Item 6: Distinguish between prefix and postfix forms of
1967 increment and decrement operators.
1968
1969 · Item 7: Never overload "&&", "||", or ",".
1970
1971 When selecting this option, be aware that the standard library
1972 headers do not obey all of these guidelines; use grep -v to filter
1973 out those warnings.
1974
1975 -Wstrict-null-sentinel (C++ and Objective-C++ only)
1976 Warn about the use of an uncasted "NULL" as sentinel. When
1977 compiling only with GCC this is a valid sentinel, as "NULL" is
1978 defined to "__null". Although it is a null pointer constant rather
1979 than a null pointer, it is guaranteed to be of the same size as a
1980 pointer. But this use is not portable across different compilers.
1981
1982 -Wno-non-template-friend (C++ and Objective-C++ only)
1983 Disable warnings when non-templatized friend functions are declared
1984 within a template. Since the advent of explicit template
1985 specification support in G++, if the name of the friend is an
1986 unqualified-id (i.e., friend foo(int)), the C++ language
1987 specification demands that the friend declare or define an
1988 ordinary, nontemplate function. (Section 14.5.3). Before G++
1989 implemented explicit specification, unqualified-ids could be
1990 interpreted as a particular specialization of a templatized
1991 function. Because this non-conforming behavior is no longer the
1992 default behavior for G++, -Wnon-template-friend allows the compiler
1993 to check existing code for potential trouble spots and is on by
1994 default. This new compiler behavior can be turned off with
1995 -Wno-non-template-friend, which keeps the conformant compiler code
1996 but disables the helpful warning.
1997
1998 -Wold-style-cast (C++ and Objective-C++ only)
1999 Warn if an old-style (C-style) cast to a non-void type is used
2000 within a C++ program. The new-style casts (dynamic_cast,
2001 static_cast, reinterpret_cast, and const_cast) are less vulnerable
2002 to unintended effects and much easier to search for.
2003
2004 -Woverloaded-virtual (C++ and Objective-C++ only)
2005 Warn when a function declaration hides virtual functions from a
2006 base class. For example, in:
2007
2008 struct A {
2009 virtual void f();
2010 };
2011
2012 struct B: public A {
2013 void f(int);
2014 };
2015
2016 the "A" class version of "f" is hidden in "B", and code like:
2017
2018 B* b;
2019 b->f();
2020
2021 fails to compile.
2022
2023 -Wno-pmf-conversions (C++ and Objective-C++ only)
2024 Disable the diagnostic for converting a bound pointer to member
2025 function to a plain pointer.
2026
2027 -Wsign-promo (C++ and Objective-C++ only)
2028 Warn when overload resolution chooses a promotion from unsigned or
2029 enumerated type to a signed type, over a conversion to an unsigned
2030 type of the same size. Previous versions of G++ tried to preserve
2031 unsignedness, but the standard mandates the current behavior.
2032
2033 Options Controlling Objective-C and Objective-C++ Dialects
2034 (NOTE: This manual does not describe the Objective-C and Objective-C++
2035 languages themselves.
2036
2037 This section describes the command-line options that are only
2038 meaningful for Objective-C and Objective-C++ programs. You can also
2039 use most of the language-independent GNU compiler options. For
2040 example, you might compile a file "some_class.m" like this:
2041
2042 gcc -g -fgnu-runtime -O -c some_class.m
2043
2044 In this example, -fgnu-runtime is an option meant only for Objective-C
2045 and Objective-C++ programs; you can use the other options with any
2046 language supported by GCC.
2047
2048 Note that since Objective-C is an extension of the C language,
2049 Objective-C compilations may also use options specific to the C front-
2050 end (e.g., -Wtraditional). Similarly, Objective-C++ compilations may
2051 use C++-specific options (e.g., -Wabi).
2052
2053 Here is a list of options that are only for compiling Objective-C and
2054 Objective-C++ programs:
2055
2056 -fconstant-string-class=class-name
2057 Use class-name as the name of the class to instantiate for each
2058 literal string specified with the syntax "@"..."". The default
2059 class name is "NXConstantString" if the GNU runtime is being used,
2060 and "NSConstantString" if the NeXT runtime is being used (see
2061 below). The -fconstant-cfstrings option, if also present,
2062 overrides the -fconstant-string-class setting and cause "@"...""
2063 literals to be laid out as constant CoreFoundation strings.
2064
2065 -fgnu-runtime
2066 Generate object code compatible with the standard GNU Objective-C
2067 runtime. This is the default for most types of systems.
2068
2069 -fnext-runtime
2070 Generate output compatible with the NeXT runtime. This is the
2071 default for NeXT-based systems, including Darwin and Mac OS X. The
2072 macro "__NEXT_RUNTIME__" is predefined if (and only if) this option
2073 is used.
2074
2075 -fno-nil-receivers
2076 Assume that all Objective-C message dispatches ("[receiver
2077 message:arg]") in this translation unit ensure that the receiver is
2078 not "nil". This allows for more efficient entry points in the
2079 runtime to be used. This option is only available in conjunction
2080 with the NeXT runtime and ABI version 0 or 1.
2081
2082 -fobjc-abi-version=n
2083 Use version n of the Objective-C ABI for the selected runtime.
2084 This option is currently supported only for the NeXT runtime. In
2085 that case, Version 0 is the traditional (32-bit) ABI without
2086 support for properties and other Objective-C 2.0 additions.
2087 Version 1 is the traditional (32-bit) ABI with support for
2088 properties and other Objective-C 2.0 additions. Version 2 is the
2089 modern (64-bit) ABI. If nothing is specified, the default is
2090 Version 0 on 32-bit target machines, and Version 2 on 64-bit target
2091 machines.
2092
2093 -fobjc-call-cxx-cdtors
2094 For each Objective-C class, check if any of its instance variables
2095 is a C++ object with a non-trivial default constructor. If so,
2096 synthesize a special "- (id) .cxx_construct" instance method which
2097 runs non-trivial default constructors on any such instance
2098 variables, in order, and then return "self". Similarly, check if
2099 any instance variable is a C++ object with a non-trivial
2100 destructor, and if so, synthesize a special "- (void)
2101 .cxx_destruct" method which runs all such default destructors, in
2102 reverse order.
2103
2104 The "- (id) .cxx_construct" and "- (void) .cxx_destruct" methods
2105 thusly generated only operate on instance variables declared in the
2106 current Objective-C class, and not those inherited from
2107 superclasses. It is the responsibility of the Objective-C runtime
2108 to invoke all such methods in an object's inheritance hierarchy.
2109 The "- (id) .cxx_construct" methods are invoked by the runtime
2110 immediately after a new object instance is allocated; the "- (void)
2111 .cxx_destruct" methods are invoked immediately before the runtime
2112 deallocates an object instance.
2113
2114 As of this writing, only the NeXT runtime on Mac OS X 10.4 and
2115 later has support for invoking the "- (id) .cxx_construct" and "-
2116 (void) .cxx_destruct" methods.
2117
2118 -fobjc-direct-dispatch
2119 Allow fast jumps to the message dispatcher. On Darwin this is
2120 accomplished via the comm page.
2121
2122 -fobjc-exceptions
2123 Enable syntactic support for structured exception handling in
2124 Objective-C, similar to what is offered by C++ and Java. This
2125 option is required to use the Objective-C keywords @try, @throw,
2126 @catch, @finally and @synchronized. This option is available with
2127 both the GNU runtime and the NeXT runtime (but not available in
2128 conjunction with the NeXT runtime on Mac OS X 10.2 and earlier).
2129
2130 -fobjc-gc
2131 Enable garbage collection (GC) in Objective-C and Objective-C++
2132 programs. This option is only available with the NeXT runtime; the
2133 GNU runtime has a different garbage collection implementation that
2134 does not require special compiler flags.
2135
2136 -fobjc-nilcheck
2137 For the NeXT runtime with version 2 of the ABI, check for a nil
2138 receiver in method invocations before doing the actual method call.
2139 This is the default and can be disabled using -fno-objc-nilcheck.
2140 Class methods and super calls are never checked for nil in this way
2141 no matter what this flag is set to. Currently this flag does
2142 nothing when the GNU runtime, or an older version of the NeXT
2143 runtime ABI, is used.
2144
2145 -fobjc-std=objc1
2146 Conform to the language syntax of Objective-C 1.0, the language
2147 recognized by GCC 4.0. This only affects the Objective-C additions
2148 to the C/C++ language; it does not affect conformance to C/C++
2149 standards, which is controlled by the separate C/C++ dialect option
2150 flags. When this option is used with the Objective-C or
2151 Objective-C++ compiler, any Objective-C syntax that is not
2152 recognized by GCC 4.0 is rejected. This is useful if you need to
2153 make sure that your Objective-C code can be compiled with older
2154 versions of GCC.
2155
2156 -freplace-objc-classes
2157 Emit a special marker instructing ld(1) not to statically link in
2158 the resulting object file, and allow dyld(1) to load it in at run
2159 time instead. This is used in conjunction with the Fix-and-
2160 Continue debugging mode, where the object file in question may be
2161 recompiled and dynamically reloaded in the course of program
2162 execution, without the need to restart the program itself.
2163 Currently, Fix-and-Continue functionality is only available in
2164 conjunction with the NeXT runtime on Mac OS X 10.3 and later.
2165
2166 -fzero-link
2167 When compiling for the NeXT runtime, the compiler ordinarily
2168 replaces calls to "objc_getClass("...")" (when the name of the
2169 class is known at compile time) with static class references that
2170 get initialized at load time, which improves run-time performance.
2171 Specifying the -fzero-link flag suppresses this behavior and causes
2172 calls to "objc_getClass("...")" to be retained. This is useful in
2173 Zero-Link debugging mode, since it allows for individual class
2174 implementations to be modified during program execution. The GNU
2175 runtime currently always retains calls to "objc_get_class("...")"
2176 regardless of command-line options.
2177
2178 -gen-decls
2179 Dump interface declarations for all classes seen in the source file
2180 to a file named sourcename.decl.
2181
2182 -Wassign-intercept (Objective-C and Objective-C++ only)
2183 Warn whenever an Objective-C assignment is being intercepted by the
2184 garbage collector.
2185
2186 -Wno-protocol (Objective-C and Objective-C++ only)
2187 If a class is declared to implement a protocol, a warning is issued
2188 for every method in the protocol that is not implemented by the
2189 class. The default behavior is to issue a warning for every method
2190 not explicitly implemented in the class, even if a method
2191 implementation is inherited from the superclass. If you use the
2192 -Wno-protocol option, then methods inherited from the superclass
2193 are considered to be implemented, and no warning is issued for
2194 them.
2195
2196 -Wselector (Objective-C and Objective-C++ only)
2197 Warn if multiple methods of different types for the same selector
2198 are found during compilation. The check is performed on the list
2199 of methods in the final stage of compilation. Additionally, a
2200 check is performed for each selector appearing in a
2201 "@selector(...)" expression, and a corresponding method for that
2202 selector has been found during compilation. Because these checks
2203 scan the method table only at the end of compilation, these
2204 warnings are not produced if the final stage of compilation is not
2205 reached, for example because an error is found during compilation,
2206 or because the -fsyntax-only option is being used.
2207
2208 -Wstrict-selector-match (Objective-C and Objective-C++ only)
2209 Warn if multiple methods with differing argument and/or return
2210 types are found for a given selector when attempting to send a
2211 message using this selector to a receiver of type "id" or "Class".
2212 When this flag is off (which is the default behavior), the compiler
2213 omits such warnings if any differences found are confined to types
2214 that share the same size and alignment.
2215
2216 -Wundeclared-selector (Objective-C and Objective-C++ only)
2217 Warn if a "@selector(...)" expression referring to an undeclared
2218 selector is found. A selector is considered undeclared if no
2219 method with that name has been declared before the "@selector(...)"
2220 expression, either explicitly in an @interface or @protocol
2221 declaration, or implicitly in an @implementation section. This
2222 option always performs its checks as soon as a "@selector(...)"
2223 expression is found, while -Wselector only performs its checks in
2224 the final stage of compilation. This also enforces the coding
2225 style convention that methods and selectors must be declared before
2226 being used.
2227
2228 -print-objc-runtime-info
2229 Generate C header describing the largest structure that is passed
2230 by value, if any.
2231
2232 Options to Control Diagnostic Messages Formatting
2233 Traditionally, diagnostic messages have been formatted irrespective of
2234 the output device's aspect (e.g. its width, ...). You can use the
2235 options described below to control the formatting algorithm for
2236 diagnostic messages, e.g. how many characters per line, how often
2237 source location information should be reported. Note that some
2238 language front ends may not honor these options.
2239
2240 -fmessage-length=n
2241 Try to format error messages so that they fit on lines of about n
2242 characters. The default is 72 characters for g++ and 0 for the
2243 rest of the front ends supported by GCC. If n is zero, then no
2244 line-wrapping is done; each error message appears on a single line.
2245
2246 -fdiagnostics-show-location=once
2247 Only meaningful in line-wrapping mode. Instructs the diagnostic
2248 messages reporter to emit source location information once; that
2249 is, in case the message is too long to fit on a single physical
2250 line and has to be wrapped, the source location won't be emitted
2251 (as prefix) again, over and over, in subsequent continuation lines.
2252 This is the default behavior.
2253
2254 -fdiagnostics-show-location=every-line
2255 Only meaningful in line-wrapping mode. Instructs the diagnostic
2256 messages reporter to emit the same source location information (as
2257 prefix) for physical lines that result from the process of breaking
2258 a message which is too long to fit on a single line.
2259
2260 -fdiagnostics-color[=WHEN]
2261 -fno-diagnostics-color
2262 Use color in diagnostics. WHEN is never, always, or auto. The
2263 default is auto. auto means to use color only when the standard
2264 error is a terminal. The forms -fdiagnostics-color and
2265 -fno-diagnostics-color are aliases for -fdiagnostics-color=always
2266 and -fdiagnostics-color=never, respectively.
2267
2268 The colors are defined by the environment variable GCC_COLORS. Its
2269 value is a colon-separated list of capabilities and Select Graphic
2270 Rendition (SGR) substrings. SGR commands are interpreted by the
2271 terminal or terminal emulator. (See the section in the
2272 documentation of your text terminal for permitted values and their
2273 meanings as character attributes.) These substring values are
2274 integers in decimal representation and can be concatenated with
2275 semicolons. Common values to concatenate include 1 for bold, 4 for
2276 underline, 5 for blink, 7 for inverse, 39 for default foreground
2277 color, 30 to 37 for foreground colors, 90 to 97 for 16-color mode
2278 foreground colors, 38;5;0 to 38;5;255 for 88-color and 256-color
2279 modes foreground colors, 49 for default background color, 40 to 47
2280 for background colors, 100 to 107 for 16-color mode background
2281 colors, and 48;5;0 to 48;5;255 for 88-color and 256-color modes
2282 background colors.
2283
2284 The default GCC_COLORS is
2285 error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01
2286 where 01;31 is bold red, 01;35 is bold magenta, 01;36 is bold cyan,
2287 01;32 is bold green and 01 is bold. Setting GCC_COLORS to the empty
2288 string disables colors. Supported capabilities are as follows.
2289
2290 "error="
2291 SGR substring for error: markers.
2292
2293 "warning="
2294 SGR substring for warning: markers.
2295
2296 "note="
2297 SGR substring for note: markers.
2298
2299 "caret="
2300 SGR substring for caret line.
2301
2302 "locus="
2303 SGR substring for location information, file:line or
2304 file:line:column etc.
2305
2306 "quote="
2307 SGR substring for information printed within quotes.
2308
2309 -fno-diagnostics-show-option
2310 By default, each diagnostic emitted includes text indicating the
2311 command-line option that directly controls the diagnostic (if such
2312 an option is known to the diagnostic machinery). Specifying the
2313 -fno-diagnostics-show-option flag suppresses that behavior.
2314
2315 -fno-diagnostics-show-caret
2316 By default, each diagnostic emitted includes the original source
2317 line and a caret '^' indicating the column. This option suppresses
2318 this information.
2319
2320 Options to Request or Suppress Warnings
2321 Warnings are diagnostic messages that report constructions that are not
2322 inherently erroneous but that are risky or suggest there may have been
2323 an error.
2324
2325 The following language-independent options do not enable specific
2326 warnings but control the kinds of diagnostics produced by GCC.
2327
2328 -fsyntax-only
2329 Check the code for syntax errors, but don't do anything beyond
2330 that.
2331
2332 -fmax-errors=n
2333 Limits the maximum number of error messages to n, at which point
2334 GCC bails out rather than attempting to continue processing the
2335 source code. If n is 0 (the default), there is no limit on the
2336 number of error messages produced. If -Wfatal-errors is also
2337 specified, then -Wfatal-errors takes precedence over this option.
2338
2339 -w Inhibit all warning messages.
2340
2341 -Werror
2342 Make all warnings into errors.
2343
2344 -Werror=
2345 Make the specified warning into an error. The specifier for a
2346 warning is appended; for example -Werror=switch turns the warnings
2347 controlled by -Wswitch into errors. This switch takes a negative
2348 form, to be used to negate -Werror for specific warnings; for
2349 example -Wno-error=switch makes -Wswitch warnings not be errors,
2350 even when -Werror is in effect.
2351
2352 The warning message for each controllable warning includes the
2353 option that controls the warning. That option can then be used
2354 with -Werror= and -Wno-error= as described above. (Printing of the
2355 option in the warning message can be disabled using the
2356 -fno-diagnostics-show-option flag.)
2357
2358 Note that specifying -Werror=foo automatically implies -Wfoo.
2359 However, -Wno-error=foo does not imply anything.
2360
2361 -Wfatal-errors
2362 This option causes the compiler to abort compilation on the first
2363 error occurred rather than trying to keep going and printing
2364 further error messages.
2365
2366 You can request many specific warnings with options beginning with -W,
2367 for example -Wimplicit to request warnings on implicit declarations.
2368 Each of these specific warning options also has a negative form
2369 beginning -Wno- to turn off warnings; for example, -Wno-implicit. This
2370 manual lists only one of the two forms, whichever is not the default.
2371 For further language-specific options also refer to C++ Dialect Options
2372 and Objective-C and Objective-C++ Dialect Options.
2373
2374 When an unrecognized warning option is requested (e.g.,
2375 -Wunknown-warning), GCC emits a diagnostic stating that the option is
2376 not recognized. However, if the -Wno- form is used, the behavior is
2377 slightly different: no diagnostic is produced for -Wno-unknown-warning
2378 unless other diagnostics are being produced. This allows the use of
2379 new -Wno- options with old compilers, but if something goes wrong, the
2380 compiler warns that an unrecognized option is present.
2381
2382 -Wpedantic
2383 -pedantic
2384 Issue all the warnings demanded by strict ISO C and ISO C++; reject
2385 all programs that use forbidden extensions, and some other programs
2386 that do not follow ISO C and ISO C++. For ISO C, follows the
2387 version of the ISO C standard specified by any -std option used.
2388
2389 Valid ISO C and ISO C++ programs should compile properly with or
2390 without this option (though a rare few require -ansi or a -std
2391 option specifying the required version of ISO C). However, without
2392 this option, certain GNU extensions and traditional C and C++
2393 features are supported as well. With this option, they are
2394 rejected.
2395
2396 -Wpedantic does not cause warning messages for use of the alternate
2397 keywords whose names begin and end with __. Pedantic warnings are
2398 also disabled in the expression that follows "__extension__".
2399 However, only system header files should use these escape routes;
2400 application programs should avoid them.
2401
2402 Some users try to use -Wpedantic to check programs for strict ISO C
2403 conformance. They soon find that it does not do quite what they
2404 want: it finds some non-ISO practices, but not all---only those for
2405 which ISO C requires a diagnostic, and some others for which
2406 diagnostics have been added.
2407
2408 A feature to report any failure to conform to ISO C might be useful
2409 in some instances, but would require considerable additional work
2410 and would be quite different from -Wpedantic. We don't have plans
2411 to support such a feature in the near future.
2412
2413 Where the standard specified with -std represents a GNU extended
2414 dialect of C, such as gnu90 or gnu99, there is a corresponding base
2415 standard, the version of ISO C on which the GNU extended dialect is
2416 based. Warnings from -Wpedantic are given where they are required
2417 by the base standard. (It does not make sense for such warnings to
2418 be given only for features not in the specified GNU C dialect,
2419 since by definition the GNU dialects of C include all features the
2420 compiler supports with the given option, and there would be nothing
2421 to warn about.)
2422
2423 -pedantic-errors
2424 Like -Wpedantic, except that errors are produced rather than
2425 warnings.
2426
2427 -Wall
2428 This enables all the warnings about constructions that some users
2429 consider questionable, and that are easy to avoid (or modify to
2430 prevent the warning), even in conjunction with macros. This also
2431 enables some language-specific warnings described in C++ Dialect
2432 Options and Objective-C and Objective-C++ Dialect Options.
2433
2434 -Wall turns on the following warning flags:
2435
2436 -Waddress -Warray-bounds (only with -O2) -Wc++11-compat
2437 -Wchar-subscripts -Wenum-compare (in C/ObjC; this is on by default
2438 in C++) -Wimplicit-int (C and Objective-C only)
2439 -Wimplicit-function-declaration (C and Objective-C only) -Wcomment
2440 -Wformat -Wmain (only for C/ObjC and unless -ffreestanding)
2441 -Wmaybe-uninitialized -Wmissing-braces (only for C/ObjC) -Wnonnull
2442 -Wparentheses -Wpointer-sign -Wreorder -Wreturn-type
2443 -Wsequence-point -Wsign-compare (only in C++) -Wstrict-aliasing
2444 -Wstrict-overflow=1 -Wswitch -Wtrigraphs -Wuninitialized
2445 -Wunknown-pragmas -Wunused-function -Wunused-label -Wunused-value
2446 -Wunused-variable -Wvolatile-register-var
2447
2448 Note that some warning flags are not implied by -Wall. Some of
2449 them warn about constructions that users generally do not consider
2450 questionable, but which occasionally you might wish to check for;
2451 others warn about constructions that are necessary or hard to avoid
2452 in some cases, and there is no simple way to modify the code to
2453 suppress the warning. Some of them are enabled by -Wextra but many
2454 of them must be enabled individually.
2455
2456 -Wextra
2457 This enables some extra warning flags that are not enabled by
2458 -Wall. (This option used to be called -W. The older name is still
2459 supported, but the newer name is more descriptive.)
2460
2461 -Wclobbered -Wempty-body -Wignored-qualifiers
2462 -Wmissing-field-initializers -Wmissing-parameter-type (C only)
2463 -Wold-style-declaration (C only) -Woverride-init -Wsign-compare
2464 -Wtype-limits -Wuninitialized -Wunused-parameter (only with
2465 -Wunused or -Wall) -Wunused-but-set-parameter (only with -Wunused
2466 or -Wall)
2467
2468 The option -Wextra also prints warning messages for the following
2469 cases:
2470
2471 · A pointer is compared against integer zero with <, <=, >, or
2472 >=.
2473
2474 · (C++ only) An enumerator and a non-enumerator both appear in a
2475 conditional expression.
2476
2477 · (C++ only) Ambiguous virtual bases.
2478
2479 · (C++ only) Subscripting an array that has been declared
2480 register.
2481
2482 · (C++ only) Taking the address of a variable that has been
2483 declared register.
2484
2485 · (C++ only) A base class is not initialized in a derived class's
2486 copy constructor.
2487
2488 -Wchar-subscripts
2489 Warn if an array subscript has type "char". This is a common cause
2490 of error, as programmers often forget that this type is signed on
2491 some machines. This warning is enabled by -Wall.
2492
2493 -Wcomment
2494 Warn whenever a comment-start sequence /* appears in a /* comment,
2495 or whenever a Backslash-Newline appears in a // comment. This
2496 warning is enabled by -Wall.
2497
2498 -Wno-coverage-mismatch
2499 Warn if feedback profiles do not match when using the -fprofile-use
2500 option. If a source file is changed between compiling with
2501 -fprofile-gen and with -fprofile-use, the files with the profile
2502 feedback can fail to match the source file and GCC cannot use the
2503 profile feedback information. By default, this warning is enabled
2504 and is treated as an error. -Wno-coverage-mismatch can be used to
2505 disable the warning or -Wno-error=coverage-mismatch can be used to
2506 disable the error. Disabling the error for this warning can result
2507 in poorly optimized code and is useful only in the case of very
2508 minor changes such as bug fixes to an existing code-base.
2509 Completely disabling the warning is not recommended.
2510
2511 -Wno-cpp
2512 (C, Objective-C, C++, Objective-C++ and Fortran only)
2513
2514 Suppress warning messages emitted by "#warning" directives.
2515
2516 -Wdouble-promotion (C, C++, Objective-C and Objective-C++ only)
2517 Give a warning when a value of type "float" is implicitly promoted
2518 to "double". CPUs with a 32-bit "single-precision" floating-point
2519 unit implement "float" in hardware, but emulate "double" in
2520 software. On such a machine, doing computations using "double"
2521 values is much more expensive because of the overhead required for
2522 software emulation.
2523
2524 It is easy to accidentally do computations with "double" because
2525 floating-point literals are implicitly of type "double". For
2526 example, in:
2527
2528 float area(float radius)
2529 {
2530 return 3.14159 * radius * radius;
2531 }
2532
2533 the compiler performs the entire computation with "double" because
2534 the floating-point literal is a "double".
2535
2536 -Wformat
2537 -Wformat=n
2538 Check calls to "printf" and "scanf", etc., to make sure that the
2539 arguments supplied have types appropriate to the format string
2540 specified, and that the conversions specified in the format string
2541 make sense. This includes standard functions, and others specified
2542 by format attributes, in the "printf", "scanf", "strftime" and
2543 "strfmon" (an X/Open extension, not in the C standard) families (or
2544 other target-specific families). Which functions are checked
2545 without format attributes having been specified depends on the
2546 standard version selected, and such checks of functions without the
2547 attribute specified are disabled by -ffreestanding or -fno-builtin.
2548
2549 The formats are checked against the format features supported by
2550 GNU libc version 2.2. These include all ISO C90 and C99 features,
2551 as well as features from the Single Unix Specification and some BSD
2552 and GNU extensions. Other library implementations may not support
2553 all these features; GCC does not support warning about features
2554 that go beyond a particular library's limitations. However, if
2555 -Wpedantic is used with -Wformat, warnings are given about format
2556 features not in the selected standard version (but not for
2557 "strfmon" formats, since those are not in any version of the C
2558 standard).
2559
2560 -Wformat=1
2561 -Wformat
2562 Option -Wformat is equivalent to -Wformat=1, and -Wno-format is
2563 equivalent to -Wformat=0. Since -Wformat also checks for null
2564 format arguments for several functions, -Wformat also implies
2565 -Wnonnull. Some aspects of this level of format checking can
2566 be disabled by the options: -Wno-format-contains-nul,
2567 -Wno-format-extra-args, and -Wno-format-zero-length. -Wformat
2568 is enabled by -Wall.
2569
2570 -Wno-format-contains-nul
2571 If -Wformat is specified, do not warn about format strings that
2572 contain NUL bytes.
2573
2574 -Wno-format-extra-args
2575 If -Wformat is specified, do not warn about excess arguments to
2576 a "printf" or "scanf" format function. The C standard
2577 specifies that such arguments are ignored.
2578
2579 Where the unused arguments lie between used arguments that are
2580 specified with $ operand number specifications, normally
2581 warnings are still given, since the implementation could not
2582 know what type to pass to "va_arg" to skip the unused
2583 arguments. However, in the case of "scanf" formats, this
2584 option suppresses the warning if the unused arguments are all
2585 pointers, since the Single Unix Specification says that such
2586 unused arguments are allowed.
2587
2588 -Wno-format-zero-length
2589 If -Wformat is specified, do not warn about zero-length
2590 formats. The C standard specifies that zero-length formats are
2591 allowed.
2592
2593 -Wformat=2
2594 Enable -Wformat plus additional format checks. Currently
2595 equivalent to -Wformat -Wformat-nonliteral -Wformat-security
2596 -Wformat-y2k.
2597
2598 -Wformat-nonliteral
2599 If -Wformat is specified, also warn if the format string is not
2600 a string literal and so cannot be checked, unless the format
2601 function takes its format arguments as a "va_list".
2602
2603 -Wformat-security
2604 If -Wformat is specified, also warn about uses of format
2605 functions that represent possible security problems. At
2606 present, this warns about calls to "printf" and "scanf"
2607 functions where the format string is not a string literal and
2608 there are no format arguments, as in "printf (foo);". This may
2609 be a security hole if the format string came from untrusted
2610 input and contains %n. (This is currently a subset of what
2611 -Wformat-nonliteral warns about, but in future warnings may be
2612 added to -Wformat-security that are not included in
2613 -Wformat-nonliteral.)
2614
2615 -Wformat-y2k
2616 If -Wformat is specified, also warn about "strftime" formats
2617 that may yield only a two-digit year.
2618
2619 -Wnonnull
2620 Warn about passing a null pointer for arguments marked as requiring
2621 a non-null value by the "nonnull" function attribute.
2622
2623 -Wnonnull is included in -Wall and -Wformat. It can be disabled
2624 with the -Wno-nonnull option.
2625
2626 -Winit-self (C, C++, Objective-C and Objective-C++ only)
2627 Warn about uninitialized variables that are initialized with
2628 themselves. Note this option can only be used with the
2629 -Wuninitialized option.
2630
2631 For example, GCC warns about "i" being uninitialized in the
2632 following snippet only when -Winit-self has been specified:
2633
2634 int f()
2635 {
2636 int i = i;
2637 return i;
2638 }
2639
2640 This warning is enabled by -Wall in C++.
2641
2642 -Wimplicit-int (C and Objective-C only)
2643 Warn when a declaration does not specify a type. This warning is
2644 enabled by -Wall.
2645
2646 -Wimplicit-function-declaration (C and Objective-C only)
2647 Give a warning whenever a function is used before being declared.
2648 In C99 mode (-std=c99 or -std=gnu99), this warning is enabled by
2649 default and it is made into an error by -pedantic-errors. This
2650 warning is also enabled by -Wall.
2651
2652 -Wimplicit (C and Objective-C only)
2653 Same as -Wimplicit-int and -Wimplicit-function-declaration. This
2654 warning is enabled by -Wall.
2655
2656 -Wignored-qualifiers (C and C++ only)
2657 Warn if the return type of a function has a type qualifier such as
2658 "const". For ISO C such a type qualifier has no effect, since the
2659 value returned by a function is not an lvalue. For C++, the
2660 warning is only emitted for scalar types or "void". ISO C
2661 prohibits qualified "void" return types on function definitions, so
2662 such return types always receive a warning even without this
2663 option.
2664
2665 This warning is also enabled by -Wextra.
2666
2667 -Wmain
2668 Warn if the type of main is suspicious. main should be a function
2669 with external linkage, returning int, taking either zero arguments,
2670 two, or three arguments of appropriate types. This warning is
2671 enabled by default in C++ and is enabled by either -Wall or
2672 -Wpedantic.
2673
2674 -Wmissing-braces
2675 Warn if an aggregate or union initializer is not fully bracketed.
2676 In the following example, the initializer for a is not fully
2677 bracketed, but that for b is fully bracketed. This warning is
2678 enabled by -Wall in C.
2679
2680 int a[2][2] = { 0, 1, 2, 3 };
2681 int b[2][2] = { { 0, 1 }, { 2, 3 } };
2682
2683 This warning is enabled by -Wall.
2684
2685 -Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)
2686 Warn if a user-supplied include directory does not exist.
2687
2688 -Wparentheses
2689 Warn if parentheses are omitted in certain contexts, such as when
2690 there is an assignment in a context where a truth value is
2691 expected, or when operators are nested whose precedence people
2692 often get confused about.
2693
2694 Also warn if a comparison like x<=y<=z appears; this is equivalent
2695 to (x<=y ? 1 : 0) <= z, which is a different interpretation from
2696 that of ordinary mathematical notation.
2697
2698 Also warn about constructions where there may be confusion to which
2699 "if" statement an "else" branch belongs. Here is an example of
2700 such a case:
2701
2702 {
2703 if (a)
2704 if (b)
2705 foo ();
2706 else
2707 bar ();
2708 }
2709
2710 In C/C++, every "else" branch belongs to the innermost possible
2711 "if" statement, which in this example is "if (b)". This is often
2712 not what the programmer expected, as illustrated in the above
2713 example by indentation the programmer chose. When there is the
2714 potential for this confusion, GCC issues a warning when this flag
2715 is specified. To eliminate the warning, add explicit braces around
2716 the innermost "if" statement so there is no way the "else" can
2717 belong to the enclosing "if". The resulting code looks like this:
2718
2719 {
2720 if (a)
2721 {
2722 if (b)
2723 foo ();
2724 else
2725 bar ();
2726 }
2727 }
2728
2729 Also warn for dangerous uses of the GNU extension to "?:" with
2730 omitted middle operand. When the condition in the "?": operator is
2731 a boolean expression, the omitted value is always 1. Often
2732 programmers expect it to be a value computed inside the conditional
2733 expression instead.
2734
2735 This warning is enabled by -Wall.
2736
2737 -Wsequence-point
2738 Warn about code that may have undefined semantics because of
2739 violations of sequence point rules in the C and C++ standards.
2740
2741 The C and C++ standards define the order in which expressions in a
2742 C/C++ program are evaluated in terms of sequence points, which
2743 represent a partial ordering between the execution of parts of the
2744 program: those executed before the sequence point, and those
2745 executed after it. These occur after the evaluation of a full
2746 expression (one which is not part of a larger expression), after
2747 the evaluation of the first operand of a "&&", "||", "? :" or ","
2748 (comma) operator, before a function is called (but after the
2749 evaluation of its arguments and the expression denoting the called
2750 function), and in certain other places. Other than as expressed by
2751 the sequence point rules, the order of evaluation of subexpressions
2752 of an expression is not specified. All these rules describe only a
2753 partial order rather than a total order, since, for example, if two
2754 functions are called within one expression with no sequence point
2755 between them, the order in which the functions are called is not
2756 specified. However, the standards committee have ruled that
2757 function calls do not overlap.
2758
2759 It is not specified when between sequence points modifications to
2760 the values of objects take effect. Programs whose behavior depends
2761 on this have undefined behavior; the C and C++ standards specify
2762 that "Between the previous and next sequence point an object shall
2763 have its stored value modified at most once by the evaluation of an
2764 expression. Furthermore, the prior value shall be read only to
2765 determine the value to be stored.". If a program breaks these
2766 rules, the results on any particular implementation are entirely
2767 unpredictable.
2768
2769 Examples of code with undefined behavior are "a = a++;", "a[n] =
2770 b[n++]" and "a[i++] = i;". Some more complicated cases are not
2771 diagnosed by this option, and it may give an occasional false
2772 positive result, but in general it has been found fairly effective
2773 at detecting this sort of problem in programs.
2774
2775 The standard is worded confusingly, therefore there is some debate
2776 over the precise meaning of the sequence point rules in subtle
2777 cases. Links to discussions of the problem, including proposed
2778 formal definitions, may be found on the GCC readings page, at
2779 <http://gcc.gnu.org/readings.html>.
2780
2781 This warning is enabled by -Wall for C and C++.
2782
2783 -Wno-return-local-addr
2784 Do not warn about returning a pointer (or in C++, a reference) to a
2785 variable that goes out of scope after the function returns.
2786
2787 -Wreturn-type
2788 Warn whenever a function is defined with a return type that
2789 defaults to "int". Also warn about any "return" statement with no
2790 return value in a function whose return type is not "void" (falling
2791 off the end of the function body is considered returning without a
2792 value), and about a "return" statement with an expression in a
2793 function whose return type is "void".
2794
2795 For C++, a function without return type always produces a
2796 diagnostic message, even when -Wno-return-type is specified. The
2797 only exceptions are main and functions defined in system headers.
2798
2799 This warning is enabled by -Wall.
2800
2801 -Wswitch
2802 Warn whenever a "switch" statement has an index of enumerated type
2803 and lacks a "case" for one or more of the named codes of that
2804 enumeration. (The presence of a "default" label prevents this
2805 warning.) "case" labels outside the enumeration range also provoke
2806 warnings when this option is used (even if there is a "default"
2807 label). This warning is enabled by -Wall.
2808
2809 -Wswitch-default
2810 Warn whenever a "switch" statement does not have a "default" case.
2811
2812 -Wswitch-enum
2813 Warn whenever a "switch" statement has an index of enumerated type
2814 and lacks a "case" for one or more of the named codes of that
2815 enumeration. "case" labels outside the enumeration range also
2816 provoke warnings when this option is used. The only difference
2817 between -Wswitch and this option is that this option gives a
2818 warning about an omitted enumeration code even if there is a
2819 "default" label.
2820
2821 -Wsync-nand (C and C++ only)
2822 Warn when "__sync_fetch_and_nand" and "__sync_nand_and_fetch"
2823 built-in functions are used. These functions changed semantics in
2824 GCC 4.4.
2825
2826 -Wtrigraphs
2827 Warn if any trigraphs are encountered that might change the meaning
2828 of the program (trigraphs within comments are not warned about).
2829 This warning is enabled by -Wall.
2830
2831 -Wunused-but-set-parameter
2832 Warn whenever a function parameter is assigned to, but otherwise
2833 unused (aside from its declaration).
2834
2835 To suppress this warning use the unused attribute.
2836
2837 This warning is also enabled by -Wunused together with -Wextra.
2838
2839 -Wunused-but-set-variable
2840 Warn whenever a local variable is assigned to, but otherwise unused
2841 (aside from its declaration). This warning is enabled by -Wall.
2842
2843 To suppress this warning use the unused attribute.
2844
2845 This warning is also enabled by -Wunused, which is enabled by
2846 -Wall.
2847
2848 -Wunused-function
2849 Warn whenever a static function is declared but not defined or a
2850 non-inline static function is unused. This warning is enabled by
2851 -Wall.
2852
2853 -Wunused-label
2854 Warn whenever a label is declared but not used. This warning is
2855 enabled by -Wall.
2856
2857 To suppress this warning use the unused attribute.
2858
2859 -Wunused-local-typedefs (C, Objective-C, C++ and Objective-C++ only)
2860 Warn when a typedef locally defined in a function is not used.
2861 This warning is enabled by -Wall.
2862
2863 -Wunused-parameter
2864 Warn whenever a function parameter is unused aside from its
2865 declaration.
2866
2867 To suppress this warning use the unused attribute.
2868
2869 -Wno-unused-result
2870 Do not warn if a caller of a function marked with attribute
2871 "warn_unused_result" does not use its return value. The default is
2872 -Wunused-result.
2873
2874 -Wunused-variable
2875 Warn whenever a local variable or non-constant static variable is
2876 unused aside from its declaration. This warning is enabled by
2877 -Wall.
2878
2879 To suppress this warning use the unused attribute.
2880
2881 -Wunused-value
2882 Warn whenever a statement computes a result that is explicitly not
2883 used. To suppress this warning cast the unused expression to void.
2884 This includes an expression-statement or the left-hand side of a
2885 comma expression that contains no side effects. For example, an
2886 expression such as x[i,j] causes a warning, while x[(void)i,j] does
2887 not.
2888
2889 This warning is enabled by -Wall.
2890
2891 -Wunused
2892 All the above -Wunused options combined.
2893
2894 In order to get a warning about an unused function parameter, you
2895 must either specify -Wextra -Wunused (note that -Wall implies
2896 -Wunused), or separately specify -Wunused-parameter.
2897
2898 -Wuninitialized
2899 Warn if an automatic variable is used without first being
2900 initialized or if a variable may be clobbered by a "setjmp" call.
2901 In C++, warn if a non-static reference or non-static const member
2902 appears in a class without constructors.
2903
2904 If you want to warn about code that uses the uninitialized value of
2905 the variable in its own initializer, use the -Winit-self option.
2906
2907 These warnings occur for individual uninitialized or clobbered
2908 elements of structure, union or array variables as well as for
2909 variables that are uninitialized or clobbered as a whole. They do
2910 not occur for variables or elements declared "volatile". Because
2911 these warnings depend on optimization, the exact variables or
2912 elements for which there are warnings depends on the precise
2913 optimization options and version of GCC used.
2914
2915 Note that there may be no warning about a variable that is used
2916 only to compute a value that itself is never used, because such
2917 computations may be deleted by data flow analysis before the
2918 warnings are printed.
2919
2920 -Wmaybe-uninitialized
2921 For an automatic variable, if there exists a path from the function
2922 entry to a use of the variable that is initialized, but there exist
2923 some other paths for which the variable is not initialized, the
2924 compiler emits a warning if it cannot prove the uninitialized paths
2925 are not executed at run time. These warnings are made optional
2926 because GCC is not smart enough to see all the reasons why the code
2927 might be correct in spite of appearing to have an error. Here is
2928 one example of how this can happen:
2929
2930 {
2931 int x;
2932 switch (y)
2933 {
2934 case 1: x = 1;
2935 break;
2936 case 2: x = 4;
2937 break;
2938 case 3: x = 5;
2939 }
2940 foo (x);
2941 }
2942
2943 If the value of "y" is always 1, 2 or 3, then "x" is always
2944 initialized, but GCC doesn't know this. To suppress the warning,
2945 you need to provide a default case with assert(0) or similar code.
2946
2947 This option also warns when a non-volatile automatic variable might
2948 be changed by a call to "longjmp". These warnings as well are
2949 possible only in optimizing compilation.
2950
2951 The compiler sees only the calls to "setjmp". It cannot know where
2952 "longjmp" will be called; in fact, a signal handler could call it
2953 at any point in the code. As a result, you may get a warning even
2954 when there is in fact no problem because "longjmp" cannot in fact
2955 be called at the place that would cause a problem.
2956
2957 Some spurious warnings can be avoided if you declare all the
2958 functions you use that never return as "noreturn".
2959
2960 This warning is enabled by -Wall or -Wextra.
2961
2962 -Wunknown-pragmas
2963 Warn when a "#pragma" directive is encountered that is not
2964 understood by GCC. If this command-line option is used, warnings
2965 are even issued for unknown pragmas in system header files. This
2966 is not the case if the warnings are only enabled by the -Wall
2967 command-line option.
2968
2969 -Wno-pragmas
2970 Do not warn about misuses of pragmas, such as incorrect parameters,
2971 invalid syntax, or conflicts between pragmas. See also
2972 -Wunknown-pragmas.
2973
2974 -Wstrict-aliasing
2975 This option is only active when -fstrict-aliasing is active. It
2976 warns about code that might break the strict aliasing rules that
2977 the compiler is using for optimization. The warning does not catch
2978 all cases, but does attempt to catch the more common pitfalls. It
2979 is included in -Wall. It is equivalent to -Wstrict-aliasing=3
2980
2981 -Wstrict-aliasing=n
2982 This option is only active when -fstrict-aliasing is active. It
2983 warns about code that might break the strict aliasing rules that
2984 the compiler is using for optimization. Higher levels correspond
2985 to higher accuracy (fewer false positives). Higher levels also
2986 correspond to more effort, similar to the way -O works.
2987 -Wstrict-aliasing is equivalent to -Wstrict-aliasing=3.
2988
2989 Level 1: Most aggressive, quick, least accurate. Possibly useful
2990 when higher levels do not warn but -fstrict-aliasing still breaks
2991 the code, as it has very few false negatives. However, it has many
2992 false positives. Warns for all pointer conversions between
2993 possibly incompatible types, even if never dereferenced. Runs in
2994 the front end only.
2995
2996 Level 2: Aggressive, quick, not too precise. May still have many
2997 false positives (not as many as level 1 though), and few false
2998 negatives (but possibly more than level 1). Unlike level 1, it
2999 only warns when an address is taken. Warns about incomplete types.
3000 Runs in the front end only.
3001
3002 Level 3 (default for -Wstrict-aliasing): Should have very few false
3003 positives and few false negatives. Slightly slower than levels 1
3004 or 2 when optimization is enabled. Takes care of the common
3005 pun+dereference pattern in the front end: "*(int*)&some_float". If
3006 optimization is enabled, it also runs in the back end, where it
3007 deals with multiple statement cases using flow-sensitive points-to
3008 information. Only warns when the converted pointer is
3009 dereferenced. Does not warn about incomplete types.
3010
3011 -Wstrict-overflow
3012 -Wstrict-overflow=n
3013 This option is only active when -fstrict-overflow is active. It
3014 warns about cases where the compiler optimizes based on the
3015 assumption that signed overflow does not occur. Note that it does
3016 not warn about all cases where the code might overflow: it only
3017 warns about cases where the compiler implements some optimization.
3018 Thus this warning depends on the optimization level.
3019
3020 An optimization that assumes that signed overflow does not occur is
3021 perfectly safe if the values of the variables involved are such
3022 that overflow never does, in fact, occur. Therefore this warning
3023 can easily give a false positive: a warning about code that is not
3024 actually a problem. To help focus on important issues, several
3025 warning levels are defined. No warnings are issued for the use of
3026 undefined signed overflow when estimating how many iterations a
3027 loop requires, in particular when determining whether a loop will
3028 be executed at all.
3029
3030 -Wstrict-overflow=1
3031 Warn about cases that are both questionable and easy to avoid.
3032 For example, with -fstrict-overflow, the compiler simplifies
3033 "x + 1 > x" to 1. This level of -Wstrict-overflow is enabled
3034 by -Wall; higher levels are not, and must be explicitly
3035 requested.
3036
3037 -Wstrict-overflow=2
3038 Also warn about other cases where a comparison is simplified to
3039 a constant. For example: "abs (x) >= 0". This can only be
3040 simplified when -fstrict-overflow is in effect, because "abs
3041 (INT_MIN)" overflows to "INT_MIN", which is less than zero.
3042 -Wstrict-overflow (with no level) is the same as
3043 -Wstrict-overflow=2.
3044
3045 -Wstrict-overflow=3
3046 Also warn about other cases where a comparison is simplified.
3047 For example: "x + 1 > 1" is simplified to "x > 0".
3048
3049 -Wstrict-overflow=4
3050 Also warn about other simplifications not covered by the above
3051 cases. For example: "(x * 10) / 5" is simplified to "x * 2".
3052
3053 -Wstrict-overflow=5
3054 Also warn about cases where the compiler reduces the magnitude
3055 of a constant involved in a comparison. For example: "x + 2 >
3056 y" is simplified to "x + 1 >= y". This is reported only at the
3057 highest warning level because this simplification applies to
3058 many comparisons, so this warning level gives a very large
3059 number of false positives.
3060
3061 -Wsuggest-attribute=[pure|const|noreturn|format]
3062 Warn for cases where adding an attribute may be beneficial. The
3063 attributes currently supported are listed below.
3064
3065 -Wsuggest-attribute=pure
3066 -Wsuggest-attribute=const
3067 -Wsuggest-attribute=noreturn
3068 Warn about functions that might be candidates for attributes
3069 "pure", "const" or "noreturn". The compiler only warns for
3070 functions visible in other compilation units or (in the case of
3071 "pure" and "const") if it cannot prove that the function
3072 returns normally. A function returns normally if it doesn't
3073 contain an infinite loop or return abnormally by throwing,
3074 calling "abort()" or trapping. This analysis requires option
3075 -fipa-pure-const, which is enabled by default at -O and higher.
3076 Higher optimization levels improve the accuracy of the
3077 analysis.
3078
3079 -Wsuggest-attribute=format
3080 -Wmissing-format-attribute
3081 Warn about function pointers that might be candidates for
3082 "format" attributes. Note these are only possible candidates,
3083 not absolute ones. GCC guesses that function pointers with
3084 "format" attributes that are used in assignment,
3085 initialization, parameter passing or return statements should
3086 have a corresponding "format" attribute in the resulting type.
3087 I.e. the left-hand side of the assignment or initialization,
3088 the type of the parameter variable, or the return type of the
3089 containing function respectively should also have a "format"
3090 attribute to avoid the warning.
3091
3092 GCC also warns about function definitions that might be
3093 candidates for "format" attributes. Again, these are only
3094 possible candidates. GCC guesses that "format" attributes
3095 might be appropriate for any function that calls a function
3096 like "vprintf" or "vscanf", but this might not always be the
3097 case, and some functions for which "format" attributes are
3098 appropriate may not be detected.
3099
3100 -Warray-bounds
3101 This option is only active when -ftree-vrp is active (default for
3102 -O2 and above). It warns about subscripts to arrays that are always
3103 out of bounds. This warning is enabled by -Wall.
3104
3105 -Wno-div-by-zero
3106 Do not warn about compile-time integer division by zero. Floating-
3107 point division by zero is not warned about, as it can be a
3108 legitimate way of obtaining infinities and NaNs.
3109
3110 -Wsystem-headers
3111 Print warning messages for constructs found in system header files.
3112 Warnings from system headers are normally suppressed, on the
3113 assumption that they usually do not indicate real problems and
3114 would only make the compiler output harder to read. Using this
3115 command-line option tells GCC to emit warnings from system headers
3116 as if they occurred in user code. However, note that using -Wall
3117 in conjunction with this option does not warn about unknown pragmas
3118 in system headers---for that, -Wunknown-pragmas must also be used.
3119
3120 -Wtrampolines
3121 Warn about trampolines generated for pointers to nested functions.
3122
3123 A trampoline is a small piece of data or code that is created at run
3124 time on the stack when the address of a nested function is taken, and
3125 is used to call the nested function indirectly. For some targets, it
3126 is made up of data only and thus requires no special treatment. But,
3127 for most targets, it is made up of code and thus requires the stack
3128 to be made executable in order for the program to work properly.
3129
3130 -Wfloat-equal
3131 Warn if floating-point values are used in equality comparisons.
3132
3133 The idea behind this is that sometimes it is convenient (for the
3134 programmer) to consider floating-point values as approximations to
3135 infinitely precise real numbers. If you are doing this, then you
3136 need to compute (by analyzing the code, or in some other way) the
3137 maximum or likely maximum error that the computation introduces,
3138 and allow for it when performing comparisons (and when producing
3139 output, but that's a different problem). In particular, instead of
3140 testing for equality, you should check to see whether the two
3141 values have ranges that overlap; and this is done with the
3142 relational operators, so equality comparisons are probably
3143 mistaken.
3144
3145 -Wtraditional (C and Objective-C only)
3146 Warn about certain constructs that behave differently in
3147 traditional and ISO C. Also warn about ISO C constructs that have
3148 no traditional C equivalent, and/or problematic constructs that
3149 should be avoided.
3150
3151 · Macro parameters that appear within string literals in the
3152 macro body. In traditional C macro replacement takes place
3153 within string literals, but in ISO C it does not.
3154
3155 · In traditional C, some preprocessor directives did not exist.
3156 Traditional preprocessors only considered a line to be a
3157 directive if the # appeared in column 1 on the line. Therefore
3158 -Wtraditional warns about directives that traditional C
3159 understands but ignores because the # does not appear as the
3160 first character on the line. It also suggests you hide
3161 directives like #pragma not understood by traditional C by
3162 indenting them. Some traditional implementations do not
3163 recognize #elif, so this option suggests avoiding it
3164 altogether.
3165
3166 · A function-like macro that appears without arguments.
3167
3168 · The unary plus operator.
3169
3170 · The U integer constant suffix, or the F or L floating-point
3171 constant suffixes. (Traditional C does support the L suffix on
3172 integer constants.) Note, these suffixes appear in macros
3173 defined in the system headers of most modern systems, e.g. the
3174 _MIN/_MAX macros in "<limits.h>". Use of these macros in user
3175 code might normally lead to spurious warnings, however GCC's
3176 integrated preprocessor has enough context to avoid warning in
3177 these cases.
3178
3179 · A function declared external in one block and then used after
3180 the end of the block.
3181
3182 · A "switch" statement has an operand of type "long".
3183
3184 · A non-"static" function declaration follows a "static" one.
3185 This construct is not accepted by some traditional C compilers.
3186
3187 · The ISO type of an integer constant has a different width or
3188 signedness from its traditional type. This warning is only
3189 issued if the base of the constant is ten. I.e. hexadecimal or
3190 octal values, which typically represent bit patterns, are not
3191 warned about.
3192
3193 · Usage of ISO string concatenation is detected.
3194
3195 · Initialization of automatic aggregates.
3196
3197 · Identifier conflicts with labels. Traditional C lacks a
3198 separate namespace for labels.
3199
3200 · Initialization of unions. If the initializer is zero, the
3201 warning is omitted. This is done under the assumption that the
3202 zero initializer in user code appears conditioned on e.g.
3203 "__STDC__" to avoid missing initializer warnings and relies on
3204 default initialization to zero in the traditional C case.
3205
3206 · Conversions by prototypes between fixed/floating-point values
3207 and vice versa. The absence of these prototypes when compiling
3208 with traditional C causes serious problems. This is a subset
3209 of the possible conversion warnings; for the full set use
3210 -Wtraditional-conversion.
3211
3212 · Use of ISO C style function definitions. This warning
3213 intentionally is not issued for prototype declarations or
3214 variadic functions because these ISO C features appear in your
3215 code when using libiberty's traditional C compatibility macros,
3216 "PARAMS" and "VPARAMS". This warning is also bypassed for
3217 nested functions because that feature is already a GCC
3218 extension and thus not relevant to traditional C compatibility.
3219
3220 -Wtraditional-conversion (C and Objective-C only)
3221 Warn if a prototype causes a type conversion that is different from
3222 what would happen to the same argument in the absence of a
3223 prototype. This includes conversions of fixed point to floating
3224 and vice versa, and conversions changing the width or signedness of
3225 a fixed-point argument except when the same as the default
3226 promotion.
3227
3228 -Wdeclaration-after-statement (C and Objective-C only)
3229 Warn when a declaration is found after a statement in a block.
3230 This construct, known from C++, was introduced with ISO C99 and is
3231 by default allowed in GCC. It is not supported by ISO C90 and was
3232 not supported by GCC versions before GCC 3.0.
3233
3234 -Wundef
3235 Warn if an undefined identifier is evaluated in an #if directive.
3236
3237 -Wno-endif-labels
3238 Do not warn whenever an #else or an #endif are followed by text.
3239
3240 -Wshadow
3241 Warn whenever a local variable or type declaration shadows another
3242 variable, parameter, type, or class member (in C++), or whenever a
3243 built-in function is shadowed. Note that in C++, the compiler warns
3244 if a local variable shadows an explicit typedef, but not if it
3245 shadows a struct/class/enum.
3246
3247 -Wlarger-than=len
3248 Warn whenever an object of larger than len bytes is defined.
3249
3250 -Wframe-larger-than=len
3251 Warn if the size of a function frame is larger than len bytes. The
3252 computation done to determine the stack frame size is approximate
3253 and not conservative. The actual requirements may be somewhat
3254 greater than len even if you do not get a warning. In addition,
3255 any space allocated via "alloca", variable-length arrays, or
3256 related constructs is not included by the compiler when determining
3257 whether or not to issue a warning.
3258
3259 -Wno-free-nonheap-object
3260 Do not warn when attempting to free an object that was not
3261 allocated on the heap.
3262
3263 -Wstack-usage=len
3264 Warn if the stack usage of a function might be larger than len
3265 bytes. The computation done to determine the stack usage is
3266 conservative. Any space allocated via "alloca", variable-length
3267 arrays, or related constructs is included by the compiler when
3268 determining whether or not to issue a warning.
3269
3270 The message is in keeping with the output of -fstack-usage.
3271
3272 · If the stack usage is fully static but exceeds the specified
3273 amount, it's:
3274
3275 warning: stack usage is 1120 bytes
3276
3277 · If the stack usage is (partly) dynamic but bounded, it's:
3278
3279 warning: stack usage might be 1648 bytes
3280
3281 · If the stack usage is (partly) dynamic and not bounded, it's:
3282
3283 warning: stack usage might be unbounded
3284
3285 -Wunsafe-loop-optimizations
3286 Warn if the loop cannot be optimized because the compiler cannot
3287 assume anything on the bounds of the loop indices. With
3288 -funsafe-loop-optimizations warn if the compiler makes such
3289 assumptions.
3290
3291 -Wno-pedantic-ms-format (MinGW targets only)
3292 When used in combination with -Wformat and -pedantic without GNU
3293 extensions, this option disables the warnings about non-ISO
3294 "printf" / "scanf" format width specifiers "I32", "I64", and "I"
3295 used on Windows targets, which depend on the MS runtime.
3296
3297 -Wpointer-arith
3298 Warn about anything that depends on the "size of" a function type
3299 or of "void". GNU C assigns these types a size of 1, for
3300 convenience in calculations with "void *" pointers and pointers to
3301 functions. In C++, warn also when an arithmetic operation involves
3302 "NULL". This warning is also enabled by -Wpedantic.
3303
3304 -Wtype-limits
3305 Warn if a comparison is always true or always false due to the
3306 limited range of the data type, but do not warn for constant
3307 expressions. For example, warn if an unsigned variable is compared
3308 against zero with < or >=. This warning is also enabled by
3309 -Wextra.
3310
3311 -Wbad-function-cast (C and Objective-C only)
3312 Warn whenever a function call is cast to a non-matching type. For
3313 example, warn if "int malloc()" is cast to "anything *".
3314
3315 -Wc++-compat (C and Objective-C only)
3316 Warn about ISO C constructs that are outside of the common subset
3317 of ISO C and ISO C++, e.g. request for implicit conversion from
3318 "void *" to a pointer to non-"void" type.
3319
3320 -Wc++11-compat (C++ and Objective-C++ only)
3321 Warn about C++ constructs whose meaning differs between ISO C++
3322 1998 and ISO C++ 2011, e.g., identifiers in ISO C++ 1998 that are
3323 keywords in ISO C++ 2011. This warning turns on -Wnarrowing and is
3324 enabled by -Wall.
3325
3326 -Wcast-qual
3327 Warn whenever a pointer is cast so as to remove a type qualifier
3328 from the target type. For example, warn if a "const char *" is
3329 cast to an ordinary "char *".
3330
3331 Also warn when making a cast that introduces a type qualifier in an
3332 unsafe way. For example, casting "char **" to "const char **" is
3333 unsafe, as in this example:
3334
3335 /* p is char ** value. */
3336 const char **q = (const char **) p;
3337 /* Assignment of readonly string to const char * is OK. */
3338 *q = "string";
3339 /* Now char** pointer points to read-only memory. */
3340 **p = 'b';
3341
3342 -Wcast-align
3343 Warn whenever a pointer is cast such that the required alignment of
3344 the target is increased. For example, warn if a "char *" is cast
3345 to an "int *" on machines where integers can only be accessed at
3346 two- or four-byte boundaries.
3347
3348 -Wwrite-strings
3349 When compiling C, give string constants the type "const
3350 char[length]" so that copying the address of one into a non-"const"
3351 "char *" pointer produces a warning. These warnings help you find
3352 at compile time code that can try to write into a string constant,
3353 but only if you have been very careful about using "const" in
3354 declarations and prototypes. Otherwise, it is just a nuisance.
3355 This is why we did not make -Wall request these warnings.
3356
3357 When compiling C++, warn about the deprecated conversion from
3358 string literals to "char *". This warning is enabled by default
3359 for C++ programs.
3360
3361 -Wclobbered
3362 Warn for variables that might be changed by longjmp or vfork. This
3363 warning is also enabled by -Wextra.
3364
3365 -Wconversion
3366 Warn for implicit conversions that may alter a value. This includes
3367 conversions between real and integer, like "abs (x)" when "x" is
3368 "double"; conversions between signed and unsigned, like "unsigned
3369 ui = -1"; and conversions to smaller types, like "sqrtf (M_PI)". Do
3370 not warn for explicit casts like "abs ((int) x)" and "ui =
3371 (unsigned) -1", or if the value is not changed by the conversion
3372 like in "abs (2.0)". Warnings about conversions between signed and
3373 unsigned integers can be disabled by using -Wno-sign-conversion.
3374
3375 For C++, also warn for confusing overload resolution for user-
3376 defined conversions; and conversions that never use a type
3377 conversion operator: conversions to "void", the same type, a base
3378 class or a reference to them. Warnings about conversions between
3379 signed and unsigned integers are disabled by default in C++ unless
3380 -Wsign-conversion is explicitly enabled.
3381
3382 -Wno-conversion-null (C++ and Objective-C++ only)
3383 Do not warn for conversions between "NULL" and non-pointer types.
3384 -Wconversion-null is enabled by default.
3385
3386 -Wzero-as-null-pointer-constant (C++ and Objective-C++ only)
3387 Warn when a literal '0' is used as null pointer constant. This can
3388 be useful to facilitate the conversion to "nullptr" in C++11.
3389
3390 -Wuseless-cast (C++ and Objective-C++ only)
3391 Warn when an expression is casted to its own type.
3392
3393 -Wempty-body
3394 Warn if an empty body occurs in an if, else or do while statement.
3395 This warning is also enabled by -Wextra.
3396
3397 -Wenum-compare
3398 Warn about a comparison between values of different enumerated
3399 types. In C++ enumeral mismatches in conditional expressions are
3400 also diagnosed and the warning is enabled by default. In C this
3401 warning is enabled by -Wall.
3402
3403 -Wjump-misses-init (C, Objective-C only)
3404 Warn if a "goto" statement or a "switch" statement jumps forward
3405 across the initialization of a variable, or jumps backward to a
3406 label after the variable has been initialized. This only warns
3407 about variables that are initialized when they are declared. This
3408 warning is only supported for C and Objective-C; in C++ this sort
3409 of branch is an error in any case.
3410
3411 -Wjump-misses-init is included in -Wc++-compat. It can be disabled
3412 with the -Wno-jump-misses-init option.
3413
3414 -Wsign-compare
3415 Warn when a comparison between signed and unsigned values could
3416 produce an incorrect result when the signed value is converted to
3417 unsigned. This warning is also enabled by -Wextra; to get the
3418 other warnings of -Wextra without this warning, use -Wextra
3419 -Wno-sign-compare.
3420
3421 -Wsign-conversion
3422 Warn for implicit conversions that may change the sign of an
3423 integer value, like assigning a signed integer expression to an
3424 unsigned integer variable. An explicit cast silences the warning.
3425 In C, this option is enabled also by -Wconversion.
3426
3427 -Wsizeof-pointer-memaccess
3428 Warn for suspicious length parameters to certain string and memory
3429 built-in functions if the argument uses "sizeof". This warning
3430 warns e.g. about "memset (ptr, 0, sizeof (ptr));" if "ptr" is not
3431 an array, but a pointer, and suggests a possible fix, or about
3432 "memcpy (&foo, ptr, sizeof (&foo));". This warning is enabled by
3433 -Wall.
3434
3435 -Waddress
3436 Warn about suspicious uses of memory addresses. These include using
3437 the address of a function in a conditional expression, such as
3438 "void func(void); if (func)", and comparisons against the memory
3439 address of a string literal, such as "if (x == "abc")". Such uses
3440 typically indicate a programmer error: the address of a function
3441 always evaluates to true, so their use in a conditional usually
3442 indicate that the programmer forgot the parentheses in a function
3443 call; and comparisons against string literals result in unspecified
3444 behavior and are not portable in C, so they usually indicate that
3445 the programmer intended to use "strcmp". This warning is enabled
3446 by -Wall.
3447
3448 -Wlogical-op
3449 Warn about suspicious uses of logical operators in expressions.
3450 This includes using logical operators in contexts where a bit-wise
3451 operator is likely to be expected.
3452
3453 -Waggregate-return
3454 Warn if any functions that return structures or unions are defined
3455 or called. (In languages where you can return an array, this also
3456 elicits a warning.)
3457
3458 -Wno-aggressive-loop-optimizations
3459 Warn if in a loop with constant number of iterations the compiler
3460 detects undefined behavior in some statement during one or more of
3461 the iterations.
3462
3463 -Wno-attributes
3464 Do not warn if an unexpected "__attribute__" is used, such as
3465 unrecognized attributes, function attributes applied to variables,
3466 etc. This does not stop errors for incorrect use of supported
3467 attributes.
3468
3469 -Wno-builtin-macro-redefined
3470 Do not warn if certain built-in macros are redefined. This
3471 suppresses warnings for redefinition of "__TIMESTAMP__",
3472 "__TIME__", "__DATE__", "__FILE__", and "__BASE_FILE__".
3473
3474 -Wstrict-prototypes (C and Objective-C only)
3475 Warn if a function is declared or defined without specifying the
3476 argument types. (An old-style function definition is permitted
3477 without a warning if preceded by a declaration that specifies the
3478 argument types.)
3479
3480 -Wold-style-declaration (C and Objective-C only)
3481 Warn for obsolescent usages, according to the C Standard, in a
3482 declaration. For example, warn if storage-class specifiers like
3483 "static" are not the first things in a declaration. This warning
3484 is also enabled by -Wextra.
3485
3486 -Wold-style-definition (C and Objective-C only)
3487 Warn if an old-style function definition is used. A warning is
3488 given even if there is a previous prototype.
3489
3490 -Wmissing-parameter-type (C and Objective-C only)
3491 A function parameter is declared without a type specifier in
3492 K&R-style functions:
3493
3494 void foo(bar) { }
3495
3496 This warning is also enabled by -Wextra.
3497
3498 -Wmissing-prototypes (C and Objective-C only)
3499 Warn if a global function is defined without a previous prototype
3500 declaration. This warning is issued even if the definition itself
3501 provides a prototype. Use this option to detect global functions
3502 that do not have a matching prototype declaration in a header file.
3503 This option is not valid for C++ because all function declarations
3504 provide prototypes and a non-matching declaration will declare an
3505 overload rather than conflict with an earlier declaration. Use
3506 -Wmissing-declarations to detect missing declarations in C++.
3507
3508 -Wmissing-declarations
3509 Warn if a global function is defined without a previous
3510 declaration. Do so even if the definition itself provides a
3511 prototype. Use this option to detect global functions that are not
3512 declared in header files. In C, no warnings are issued for
3513 functions with previous non-prototype declarations; use
3514 -Wmissing-prototype to detect missing prototypes. In C++, no
3515 warnings are issued for function templates, or for inline
3516 functions, or for functions in anonymous namespaces.
3517
3518 -Wmissing-field-initializers
3519 Warn if a structure's initializer has some fields missing. For
3520 example, the following code causes such a warning, because "x.h" is
3521 implicitly zero:
3522
3523 struct s { int f, g, h; };
3524 struct s x = { 3, 4 };
3525
3526 This option does not warn about designated initializers, so the
3527 following modification does not trigger a warning:
3528
3529 struct s { int f, g, h; };
3530 struct s x = { .f = 3, .g = 4 };
3531
3532 This warning is included in -Wextra. To get other -Wextra warnings
3533 without this one, use -Wextra -Wno-missing-field-initializers.
3534
3535 -Wno-multichar
3536 Do not warn if a multicharacter constant ('FOOF') is used. Usually
3537 they indicate a typo in the user's code, as they have
3538 implementation-defined values, and should not be used in portable
3539 code.
3540
3541 -Wnormalized=<none|id|nfc|nfkc>
3542 In ISO C and ISO C++, two identifiers are different if they are
3543 different sequences of characters. However, sometimes when
3544 characters outside the basic ASCII character set are used, you can
3545 have two different character sequences that look the same. To
3546 avoid confusion, the ISO 10646 standard sets out some normalization
3547 rules which when applied ensure that two sequences that look the
3548 same are turned into the same sequence. GCC can warn you if you
3549 are using identifiers that have not been normalized; this option
3550 controls that warning.
3551
3552 There are four levels of warning supported by GCC. The default is
3553 -Wnormalized=nfc, which warns about any identifier that is not in
3554 the ISO 10646 "C" normalized form, NFC. NFC is the recommended
3555 form for most uses.
3556
3557 Unfortunately, there are some characters allowed in identifiers by
3558 ISO C and ISO C++ that, when turned into NFC, are not allowed in
3559 identifiers. That is, there's no way to use these symbols in
3560 portable ISO C or C++ and have all your identifiers in NFC.
3561 -Wnormalized=id suppresses the warning for these characters. It is
3562 hoped that future versions of the standards involved will correct
3563 this, which is why this option is not the default.
3564
3565 You can switch the warning off for all characters by writing
3566 -Wnormalized=none. You should only do this if you are using some
3567 other normalization scheme (like "D"), because otherwise you can
3568 easily create bugs that are literally impossible to see.
3569
3570 Some characters in ISO 10646 have distinct meanings but look
3571 identical in some fonts or display methodologies, especially once
3572 formatting has been applied. For instance "\u207F", "SUPERSCRIPT
3573 LATIN SMALL LETTER N", displays just like a regular "n" that has
3574 been placed in a superscript. ISO 10646 defines the NFKC
3575 normalization scheme to convert all these into a standard form as
3576 well, and GCC warns if your code is not in NFKC if you use
3577 -Wnormalized=nfkc. This warning is comparable to warning about
3578 every identifier that contains the letter O because it might be
3579 confused with the digit 0, and so is not the default, but may be
3580 useful as a local coding convention if the programming environment
3581 cannot be fixed to display these characters distinctly.
3582
3583 -Wno-deprecated
3584 Do not warn about usage of deprecated features.
3585
3586 -Wno-deprecated-declarations
3587 Do not warn about uses of functions, variables, and types marked as
3588 deprecated by using the "deprecated" attribute.
3589
3590 -Wno-overflow
3591 Do not warn about compile-time overflow in constant expressions.
3592
3593 -Woverride-init (C and Objective-C only)
3594 Warn if an initialized field without side effects is overridden
3595 when using designated initializers.
3596
3597 This warning is included in -Wextra. To get other -Wextra warnings
3598 without this one, use -Wextra -Wno-override-init.
3599
3600 -Wpacked
3601 Warn if a structure is given the packed attribute, but the packed
3602 attribute has no effect on the layout or size of the structure.
3603 Such structures may be mis-aligned for little benefit. For
3604 instance, in this code, the variable "f.x" in "struct bar" is
3605 misaligned even though "struct bar" does not itself have the packed
3606 attribute:
3607
3608 struct foo {
3609 int x;
3610 char a, b, c, d;
3611 } __attribute__((packed));
3612 struct bar {
3613 char z;
3614 struct foo f;
3615 };
3616
3617 -Wpacked-bitfield-compat
3618 The 4.1, 4.2 and 4.3 series of GCC ignore the "packed" attribute on
3619 bit-fields of type "char". This has been fixed in GCC 4.4 but the
3620 change can lead to differences in the structure layout. GCC
3621 informs you when the offset of such a field has changed in GCC 4.4.
3622 For example there is no longer a 4-bit padding between field "a"
3623 and "b" in this structure:
3624
3625 struct foo
3626 {
3627 char a:4;
3628 char b:8;
3629 } __attribute__ ((packed));
3630
3631 This warning is enabled by default. Use
3632 -Wno-packed-bitfield-compat to disable this warning.
3633
3634 -Wpadded
3635 Warn if padding is included in a structure, either to align an
3636 element of the structure or to align the whole structure.
3637 Sometimes when this happens it is possible to rearrange the fields
3638 of the structure to reduce the padding and so make the structure
3639 smaller.
3640
3641 -Wredundant-decls
3642 Warn if anything is declared more than once in the same scope, even
3643 in cases where multiple declaration is valid and changes nothing.
3644
3645 -Wnested-externs (C and Objective-C only)
3646 Warn if an "extern" declaration is encountered within a function.
3647
3648 -Wno-inherited-variadic-ctor
3649 Suppress warnings about use of C++11 inheriting constructors when
3650 the base class inherited from has a C variadic constructor; the
3651 warning is on by default because the ellipsis is not inherited.
3652
3653 -Winline
3654 Warn if a function that is declared as inline cannot be inlined.
3655 Even with this option, the compiler does not warn about failures to
3656 inline functions declared in system headers.
3657
3658 The compiler uses a variety of heuristics to determine whether or
3659 not to inline a function. For example, the compiler takes into
3660 account the size of the function being inlined and the amount of
3661 inlining that has already been done in the current function.
3662 Therefore, seemingly insignificant changes in the source program
3663 can cause the warnings produced by -Winline to appear or disappear.
3664
3665 -Wno-invalid-offsetof (C++ and Objective-C++ only)
3666 Suppress warnings from applying the offsetof macro to a non-POD
3667 type. According to the 1998 ISO C++ standard, applying offsetof to
3668 a non-POD type is undefined. In existing C++ implementations,
3669 however, offsetof typically gives meaningful results even when
3670 applied to certain kinds of non-POD types (such as a simple struct
3671 that fails to be a POD type only by virtue of having a
3672 constructor). This flag is for users who are aware that they are
3673 writing nonportable code and who have deliberately chosen to ignore
3674 the warning about it.
3675
3676 The restrictions on offsetof may be relaxed in a future version of
3677 the C++ standard.
3678
3679 -Wno-int-to-pointer-cast
3680 Suppress warnings from casts to pointer type of an integer of a
3681 different size. In C++, casting to a pointer type of smaller size
3682 is an error. Wint-to-pointer-cast is enabled by default.
3683
3684 -Wno-pointer-to-int-cast (C and Objective-C only)
3685 Suppress warnings from casts from a pointer to an integer type of a
3686 different size.
3687
3688 -Winvalid-pch
3689 Warn if a precompiled header is found in the search path but can't
3690 be used.
3691
3692 -Wlong-long
3693 Warn if long long type is used. This is enabled by either
3694 -Wpedantic or -Wtraditional in ISO C90 and C++98 modes. To inhibit
3695 the warning messages, use -Wno-long-long.
3696
3697 -Wvariadic-macros
3698 Warn if variadic macros are used in pedantic ISO C90 mode, or the
3699 GNU alternate syntax when in pedantic ISO C99 mode. This is
3700 default. To inhibit the warning messages, use
3701 -Wno-variadic-macros.
3702
3703 -Wvarargs
3704 Warn upon questionable usage of the macros used to handle variable
3705 arguments like va_start. This is default. To inhibit the warning
3706 messages, use -Wno-varargs.
3707
3708 -Wvector-operation-performance
3709 Warn if vector operation is not implemented via SIMD capabilities
3710 of the architecture. Mainly useful for the performance tuning.
3711 Vector operation can be implemented "piecewise", which means that
3712 the scalar operation is performed on every vector element; "in
3713 parallel", which means that the vector operation is implemented
3714 using scalars of wider type, which normally is more performance
3715 efficient; and "as a single scalar", which means that vector fits
3716 into a scalar type.
3717
3718 -Wno-virtual-move-assign
3719 Suppress warnings about inheriting from a virtual base with a non-
3720 trivial C++11 move assignment operator. This is dangerous because
3721 if the virtual base is reachable along more than one path, it will
3722 be moved multiple times, which can mean both objects end up in the
3723 moved-from state. If the move assignment operator is written to
3724 avoid moving from a moved-from object, this warning can be
3725 disabled.
3726
3727 -Wvla
3728 Warn if variable length array is used in the code. -Wno-vla
3729 prevents the -Wpedantic warning of the variable length array.
3730
3731 -Wvolatile-register-var
3732 Warn if a register variable is declared volatile. The volatile
3733 modifier does not inhibit all optimizations that may eliminate
3734 reads and/or writes to register variables. This warning is enabled
3735 by -Wall.
3736
3737 -Wdisabled-optimization
3738 Warn if a requested optimization pass is disabled. This warning
3739 does not generally indicate that there is anything wrong with your
3740 code; it merely indicates that GCC's optimizers are unable to
3741 handle the code effectively. Often, the problem is that your code
3742 is too big or too complex; GCC refuses to optimize programs when
3743 the optimization itself is likely to take inordinate amounts of
3744 time.
3745
3746 -Wpointer-sign (C and Objective-C only)
3747 Warn for pointer argument passing or assignment with different
3748 signedness. This option is only supported for C and Objective-C.
3749 It is implied by -Wall and by -Wpedantic, which can be disabled
3750 with -Wno-pointer-sign.
3751
3752 -Wstack-protector
3753 This option is only active when -fstack-protector is active. It
3754 warns about functions that are not protected against stack
3755 smashing.
3756
3757 -Wno-mudflap
3758 Suppress warnings about constructs that cannot be instrumented by
3759 -fmudflap.
3760
3761 -Woverlength-strings
3762 Warn about string constants that are longer than the "minimum
3763 maximum" length specified in the C standard. Modern compilers
3764 generally allow string constants that are much longer than the
3765 standard's minimum limit, but very portable programs should avoid
3766 using longer strings.
3767
3768 The limit applies after string constant concatenation, and does not
3769 count the trailing NUL. In C90, the limit was 509 characters; in
3770 C99, it was raised to 4095. C++98 does not specify a normative
3771 minimum maximum, so we do not diagnose overlength strings in C++.
3772
3773 This option is implied by -Wpedantic, and can be disabled with
3774 -Wno-overlength-strings.
3775
3776 -Wunsuffixed-float-constants (C and Objective-C only)
3777 Issue a warning for any floating constant that does not have a
3778 suffix. When used together with -Wsystem-headers it warns about
3779 such constants in system header files. This can be useful when
3780 preparing code to use with the "FLOAT_CONST_DECIMAL64" pragma from
3781 the decimal floating-point extension to C99.
3782
3783 Options for Debugging Your Program or GCC
3784 GCC has various special options that are used for debugging either your
3785 program or GCC:
3786
3787 -g Produce debugging information in the operating system's native
3788 format (stabs, COFF, XCOFF, or DWARF 2). GDB can work with this
3789 debugging information.
3790
3791 On most systems that use stabs format, -g enables use of extra
3792 debugging information that only GDB can use; this extra information
3793 makes debugging work better in GDB but probably makes other
3794 debuggers crash or refuse to read the program. If you want to
3795 control for certain whether to generate the extra information, use
3796 -gstabs+, -gstabs, -gxcoff+, -gxcoff, or -gvms (see below).
3797
3798 GCC allows you to use -g with -O. The shortcuts taken by optimized
3799 code may occasionally produce surprising results: some variables
3800 you declared may not exist at all; flow of control may briefly move
3801 where you did not expect it; some statements may not be executed
3802 because they compute constant results or their values are already
3803 at hand; some statements may execute in different places because
3804 they have been moved out of loops.
3805
3806 Nevertheless it proves possible to debug optimized output. This
3807 makes it reasonable to use the optimizer for programs that might
3808 have bugs.
3809
3810 The following options are useful when GCC is generated with the
3811 capability for more than one debugging format.
3812
3813 -gsplit-dwarf
3814 Separate as much dwarf debugging information as possible into a
3815 separate output file with the extension .dwo. This option allows
3816 the build system to avoid linking files with debug information. To
3817 be useful, this option requires a debugger capable of reading .dwo
3818 files.
3819
3820 -ggdb
3821 Produce debugging information for use by GDB. This means to use
3822 the most expressive format available (DWARF 2, stabs, or the native
3823 format if neither of those are supported), including GDB extensions
3824 if at all possible.
3825
3826 -gpubnames
3827 Generate dwarf .debug_pubnames and .debug_pubtypes sections.
3828
3829 -gstabs
3830 Produce debugging information in stabs format (if that is
3831 supported), without GDB extensions. This is the format used by DBX
3832 on most BSD systems. On MIPS, Alpha and System V Release 4 systems
3833 this option produces stabs debugging output that is not understood
3834 by DBX or SDB. On System V Release 4 systems this option requires
3835 the GNU assembler.
3836
3837 -feliminate-unused-debug-symbols
3838 Produce debugging information in stabs format (if that is
3839 supported), for only symbols that are actually used.
3840
3841 -femit-class-debug-always
3842 Instead of emitting debugging information for a C++ class in only
3843 one object file, emit it in all object files using the class. This
3844 option should be used only with debuggers that are unable to handle
3845 the way GCC normally emits debugging information for classes
3846 because using this option increases the size of debugging
3847 information by as much as a factor of two.
3848
3849 -fdebug-types-section
3850 When using DWARF Version 4 or higher, type DIEs can be put into
3851 their own ".debug_types" section instead of making them part of the
3852 ".debug_info" section. It is more efficient to put them in a
3853 separate comdat sections since the linker can then remove
3854 duplicates. But not all DWARF consumers support ".debug_types"
3855 sections yet and on some objects ".debug_types" produces larger
3856 instead of smaller debugging information.
3857
3858 -gstabs+
3859 Produce debugging information in stabs format (if that is
3860 supported), using GNU extensions understood only by the GNU
3861 debugger (GDB). The use of these extensions is likely to make
3862 other debuggers crash or refuse to read the program.
3863
3864 -gcoff
3865 Produce debugging information in COFF format (if that is
3866 supported). This is the format used by SDB on most System V
3867 systems prior to System V Release 4.
3868
3869 -gxcoff
3870 Produce debugging information in XCOFF format (if that is
3871 supported). This is the format used by the DBX debugger on IBM
3872 RS/6000 systems.
3873
3874 -gxcoff+
3875 Produce debugging information in XCOFF format (if that is
3876 supported), using GNU extensions understood only by the GNU
3877 debugger (GDB). The use of these extensions is likely to make
3878 other debuggers crash or refuse to read the program, and may cause
3879 assemblers other than the GNU assembler (GAS) to fail with an
3880 error.
3881
3882 -gdwarf-version
3883 Produce debugging information in DWARF format (if that is
3884 supported). The value of version may be either 2, 3 or 4; the
3885 default version for most targets is 4.
3886
3887 Note that with DWARF Version 2, some ports require and always use
3888 some non-conflicting DWARF 3 extensions in the unwind tables.
3889
3890 Version 4 may require GDB 7.0 and -fvar-tracking-assignments for
3891 maximum benefit.
3892
3893 -grecord-gcc-switches
3894 This switch causes the command-line options used to invoke the
3895 compiler that may affect code generation to be appended to the
3896 DW_AT_producer attribute in DWARF debugging information. The
3897 options are concatenated with spaces separating them from each
3898 other and from the compiler version. See also
3899 -frecord-gcc-switches for another way of storing compiler options
3900 into the object file. This is the default.
3901
3902 -gno-record-gcc-switches
3903 Disallow appending command-line options to the DW_AT_producer
3904 attribute in DWARF debugging information.
3905
3906 -gstrict-dwarf
3907 Disallow using extensions of later DWARF standard version than
3908 selected with -gdwarf-version. On most targets using non-
3909 conflicting DWARF extensions from later standard versions is
3910 allowed.
3911
3912 -gno-strict-dwarf
3913 Allow using extensions of later DWARF standard version than
3914 selected with -gdwarf-version.
3915
3916 -gvms
3917 Produce debugging information in Alpha/VMS debug format (if that is
3918 supported). This is the format used by DEBUG on Alpha/VMS systems.
3919
3920 -glevel
3921 -ggdblevel
3922 -gstabslevel
3923 -gcofflevel
3924 -gxcofflevel
3925 -gvmslevel
3926 Request debugging information and also use level to specify how
3927 much information. The default level is 2.
3928
3929 Level 0 produces no debug information at all. Thus, -g0 negates
3930 -g.
3931
3932 Level 1 produces minimal information, enough for making backtraces
3933 in parts of the program that you don't plan to debug. This
3934 includes descriptions of functions and external variables, but no
3935 information about local variables and no line numbers.
3936
3937 Level 3 includes extra information, such as all the macro
3938 definitions present in the program. Some debuggers support macro
3939 expansion when you use -g3.
3940
3941 -gdwarf-2 does not accept a concatenated debug level, because GCC
3942 used to support an option -gdwarf that meant to generate debug
3943 information in version 1 of the DWARF format (which is very
3944 different from version 2), and it would have been too confusing.
3945 That debug format is long obsolete, but the option cannot be
3946 changed now. Instead use an additional -glevel option to change
3947 the debug level for DWARF.
3948
3949 -gtoggle
3950 Turn off generation of debug info, if leaving out this option
3951 generates it, or turn it on at level 2 otherwise. The position of
3952 this argument in the command line does not matter; it takes effect
3953 after all other options are processed, and it does so only once, no
3954 matter how many times it is given. This is mainly intended to be
3955 used with -fcompare-debug.
3956
3957 -fsanitize=address
3958 Enable AddressSanitizer, a fast memory error detector. Memory
3959 access instructions will be instrumented to detect out-of-bounds
3960 and use-after-free bugs. See
3961 <http://code.google.com/p/address-sanitizer/> for more details.
3962
3963 -fsanitize=thread
3964 Enable ThreadSanitizer, a fast data race detector. Memory access
3965 instructions will be instrumented to detect data race bugs. See
3966 <http://code.google.com/p/data-race-test/wiki/ThreadSanitizer> for
3967 more details.
3968
3969 -fdump-final-insns[=file]
3970 Dump the final internal representation (RTL) to file. If the
3971 optional argument is omitted (or if file is "."), the name of the
3972 dump file is determined by appending ".gkd" to the compilation
3973 output file name.
3974
3975 -fcompare-debug[=opts]
3976 If no error occurs during compilation, run the compiler a second
3977 time, adding opts and -fcompare-debug-second to the arguments
3978 passed to the second compilation. Dump the final internal
3979 representation in both compilations, and print an error if they
3980 differ.
3981
3982 If the equal sign is omitted, the default -gtoggle is used.
3983
3984 The environment variable GCC_COMPARE_DEBUG, if defined, non-empty
3985 and nonzero, implicitly enables -fcompare-debug. If
3986 GCC_COMPARE_DEBUG is defined to a string starting with a dash, then
3987 it is used for opts, otherwise the default -gtoggle is used.
3988
3989 -fcompare-debug=, with the equal sign but without opts, is
3990 equivalent to -fno-compare-debug, which disables the dumping of the
3991 final representation and the second compilation, preventing even
3992 GCC_COMPARE_DEBUG from taking effect.
3993
3994 To verify full coverage during -fcompare-debug testing, set
3995 GCC_COMPARE_DEBUG to say -fcompare-debug-not-overridden, which GCC
3996 rejects as an invalid option in any actual compilation (rather than
3997 preprocessing, assembly or linking). To get just a warning,
3998 setting GCC_COMPARE_DEBUG to -w%n-fcompare-debug not overridden
3999 will do.
4000
4001 -fcompare-debug-second
4002 This option is implicitly passed to the compiler for the second
4003 compilation requested by -fcompare-debug, along with options to
4004 silence warnings, and omitting other options that would cause side-
4005 effect compiler outputs to files or to the standard output. Dump
4006 files and preserved temporary files are renamed so as to contain
4007 the ".gk" additional extension during the second compilation, to
4008 avoid overwriting those generated by the first.
4009
4010 When this option is passed to the compiler driver, it causes the
4011 first compilation to be skipped, which makes it useful for little
4012 other than debugging the compiler proper.
4013
4014 -feliminate-dwarf2-dups
4015 Compress DWARF 2 debugging information by eliminating duplicated
4016 information about each symbol. This option only makes sense when
4017 generating DWARF 2 debugging information with -gdwarf-2.
4018
4019 -femit-struct-debug-baseonly
4020 Emit debug information for struct-like types only when the base
4021 name of the compilation source file matches the base name of file
4022 in which the struct is defined.
4023
4024 This option substantially reduces the size of debugging
4025 information, but at significant potential loss in type information
4026 to the debugger. See -femit-struct-debug-reduced for a less
4027 aggressive option. See -femit-struct-debug-detailed for more
4028 detailed control.
4029
4030 This option works only with DWARF 2.
4031
4032 -femit-struct-debug-reduced
4033 Emit debug information for struct-like types only when the base
4034 name of the compilation source file matches the base name of file
4035 in which the type is defined, unless the struct is a template or
4036 defined in a system header.
4037
4038 This option significantly reduces the size of debugging
4039 information, with some potential loss in type information to the
4040 debugger. See -femit-struct-debug-baseonly for a more aggressive
4041 option. See -femit-struct-debug-detailed for more detailed
4042 control.
4043
4044 This option works only with DWARF 2.
4045
4046 -femit-struct-debug-detailed[=spec-list]
4047 Specify the struct-like types for which the compiler generates
4048 debug information. The intent is to reduce duplicate struct debug
4049 information between different object files within the same program.
4050
4051 This option is a detailed version of -femit-struct-debug-reduced
4052 and -femit-struct-debug-baseonly, which serves for most needs.
4053
4054 A specification has the
4055 syntax[dir:|ind:][ord:|gen:](any|sys|base|none)
4056
4057 The optional first word limits the specification to structs that
4058 are used directly (dir:) or used indirectly (ind:). A struct type
4059 is used directly when it is the type of a variable, member.
4060 Indirect uses arise through pointers to structs. That is, when use
4061 of an incomplete struct is valid, the use is indirect. An example
4062 is struct one direct; struct two * indirect;.
4063
4064 The optional second word limits the specification to ordinary
4065 structs (ord:) or generic structs (gen:). Generic structs are a
4066 bit complicated to explain. For C++, these are non-explicit
4067 specializations of template classes, or non-template classes within
4068 the above. Other programming languages have generics, but
4069 -femit-struct-debug-detailed does not yet implement them.
4070
4071 The third word specifies the source files for those structs for
4072 which the compiler should emit debug information. The values none
4073 and any have the normal meaning. The value base means that the
4074 base of name of the file in which the type declaration appears must
4075 match the base of the name of the main compilation file. In
4076 practice, this means that when compiling foo.c, debug information
4077 is generated for types declared in that file and foo.h, but not
4078 other header files. The value sys means those types satisfying
4079 base or declared in system or compiler headers.
4080
4081 You may need to experiment to determine the best settings for your
4082 application.
4083
4084 The default is -femit-struct-debug-detailed=all.
4085
4086 This option works only with DWARF 2.
4087
4088 -fno-merge-debug-strings
4089 Direct the linker to not merge together strings in the debugging
4090 information that are identical in different object files. Merging
4091 is not supported by all assemblers or linkers. Merging decreases
4092 the size of the debug information in the output file at the cost of
4093 increasing link processing time. Merging is enabled by default.
4094
4095 -fdebug-prefix-map=old=new
4096 When compiling files in directory old, record debugging information
4097 describing them as in new instead.
4098
4099 -fno-dwarf2-cfi-asm
4100 Emit DWARF 2 unwind info as compiler generated ".eh_frame" section
4101 instead of using GAS ".cfi_*" directives.
4102
4103 -p Generate extra code to write profile information suitable for the
4104 analysis program prof. You must use this option when compiling the
4105 source files you want data about, and you must also use it when
4106 linking.
4107
4108 -pg Generate extra code to write profile information suitable for the
4109 analysis program gprof. You must use this option when compiling
4110 the source files you want data about, and you must also use it when
4111 linking.
4112
4113 -Q Makes the compiler print out each function name as it is compiled,
4114 and print some statistics about each pass when it finishes.
4115
4116 -ftime-report
4117 Makes the compiler print some statistics about the time consumed by
4118 each pass when it finishes.
4119
4120 -fmem-report
4121 Makes the compiler print some statistics about permanent memory
4122 allocation when it finishes.
4123
4124 -fmem-report-wpa
4125 Makes the compiler print some statistics about permanent memory
4126 allocation for the WPA phase only.
4127
4128 -fpre-ipa-mem-report
4129 -fpost-ipa-mem-report
4130 Makes the compiler print some statistics about permanent memory
4131 allocation before or after interprocedural optimization.
4132
4133 -fprofile-report
4134 Makes the compiler print some statistics about consistency of the
4135 (estimated) profile and effect of individual passes.
4136
4137 -fstack-usage
4138 Makes the compiler output stack usage information for the program,
4139 on a per-function basis. The filename for the dump is made by
4140 appending .su to the auxname. auxname is generated from the name
4141 of the output file, if explicitly specified and it is not an
4142 executable, otherwise it is the basename of the source file. An
4143 entry is made up of three fields:
4144
4145 · The name of the function.
4146
4147 · A number of bytes.
4148
4149 · One or more qualifiers: "static", "dynamic", "bounded".
4150
4151 The qualifier "static" means that the function manipulates the
4152 stack statically: a fixed number of bytes are allocated for the
4153 frame on function entry and released on function exit; no stack
4154 adjustments are otherwise made in the function. The second field
4155 is this fixed number of bytes.
4156
4157 The qualifier "dynamic" means that the function manipulates the
4158 stack dynamically: in addition to the static allocation described
4159 above, stack adjustments are made in the body of the function, for
4160 example to push/pop arguments around function calls. If the
4161 qualifier "bounded" is also present, the amount of these
4162 adjustments is bounded at compile time and the second field is an
4163 upper bound of the total amount of stack used by the function. If
4164 it is not present, the amount of these adjustments is not bounded
4165 at compile time and the second field only represents the bounded
4166 part.
4167
4168 -fprofile-arcs
4169 Add code so that program flow arcs are instrumented. During
4170 execution the program records how many times each branch and call
4171 is executed and how many times it is taken or returns. When the
4172 compiled program exits it saves this data to a file called
4173 auxname.gcda for each source file. The data may be used for
4174 profile-directed optimizations (-fbranch-probabilities), or for
4175 test coverage analysis (-ftest-coverage). Each object file's
4176 auxname is generated from the name of the output file, if
4177 explicitly specified and it is not the final executable, otherwise
4178 it is the basename of the source file. In both cases any suffix is
4179 removed (e.g. foo.gcda for input file dir/foo.c, or dir/foo.gcda
4180 for output file specified as -o dir/foo.o).
4181
4182 --coverage
4183 This option is used to compile and link code instrumented for
4184 coverage analysis. The option is a synonym for -fprofile-arcs
4185 -ftest-coverage (when compiling) and -lgcov (when linking). See
4186 the documentation for those options for more details.
4187
4188 · Compile the source files with -fprofile-arcs plus optimization
4189 and code generation options. For test coverage analysis, use
4190 the additional -ftest-coverage option. You do not need to
4191 profile every source file in a program.
4192
4193 · Link your object files with -lgcov or -fprofile-arcs (the
4194 latter implies the former).
4195
4196 · Run the program on a representative workload to generate the
4197 arc profile information. This may be repeated any number of
4198 times. You can run concurrent instances of your program, and
4199 provided that the file system supports locking, the data files
4200 will be correctly updated. Also "fork" calls are detected and
4201 correctly handled (double counting will not happen).
4202
4203 · For profile-directed optimizations, compile the source files
4204 again with the same optimization and code generation options
4205 plus -fbranch-probabilities.
4206
4207 · For test coverage analysis, use gcov to produce human readable
4208 information from the .gcno and .gcda files. Refer to the gcov
4209 documentation for further information.
4210
4211 With -fprofile-arcs, for each function of your program GCC creates
4212 a program flow graph, then finds a spanning tree for the graph.
4213 Only arcs that are not on the spanning tree have to be
4214 instrumented: the compiler adds code to count the number of times
4215 that these arcs are executed. When an arc is the only exit or only
4216 entrance to a block, the instrumentation code can be added to the
4217 block; otherwise, a new basic block must be created to hold the
4218 instrumentation code.
4219
4220 -ftest-coverage
4221 Produce a notes file that the gcov code-coverage utility can use to
4222 show program coverage. Each source file's note file is called
4223 auxname.gcno. Refer to the -fprofile-arcs option above for a
4224 description of auxname and instructions on how to generate test
4225 coverage data. Coverage data matches the source files more closely
4226 if you do not optimize.
4227
4228 -fdbg-cnt-list
4229 Print the name and the counter upper bound for all debug counters.
4230
4231 -fdbg-cnt=counter-value-list
4232 Set the internal debug counter upper bound. counter-value-list is
4233 a comma-separated list of name:value pairs which sets the upper
4234 bound of each debug counter name to value. All debug counters have
4235 the initial upper bound of "UINT_MAX"; thus "dbg_cnt()" returns
4236 true always unless the upper bound is set by this option. For
4237 example, with -fdbg-cnt=dce:10,tail_call:0, "dbg_cnt(dce)" returns
4238 true only for first 10 invocations.
4239
4240 -fenable-kind-pass
4241 -fdisable-kind-pass=range-list
4242 This is a set of options that are used to explicitly disable/enable
4243 optimization passes. These options are intended for use for
4244 debugging GCC. Compiler users should use regular options for
4245 enabling/disabling passes instead.
4246
4247 -fdisable-ipa-pass
4248 Disable IPA pass pass. pass is the pass name. If the same pass
4249 is statically invoked in the compiler multiple times, the pass
4250 name should be appended with a sequential number starting from
4251 1.
4252
4253 -fdisable-rtl-pass
4254 -fdisable-rtl-pass=range-list
4255 Disable RTL pass pass. pass is the pass name. If the same
4256 pass is statically invoked in the compiler multiple times, the
4257 pass name should be appended with a sequential number starting
4258 from 1. range-list is a comma-separated list of function
4259 ranges or assembler names. Each range is a number pair
4260 separated by a colon. The range is inclusive in both ends. If
4261 the range is trivial, the number pair can be simplified as a
4262 single number. If the function's call graph node's uid falls
4263 within one of the specified ranges, the pass is disabled for
4264 that function. The uid is shown in the function header of a
4265 dump file, and the pass names can be dumped by using option
4266 -fdump-passes.
4267
4268 -fdisable-tree-pass
4269 -fdisable-tree-pass=range-list
4270 Disable tree pass pass. See -fdisable-rtl for the description
4271 of option arguments.
4272
4273 -fenable-ipa-pass
4274 Enable IPA pass pass. pass is the pass name. If the same pass
4275 is statically invoked in the compiler multiple times, the pass
4276 name should be appended with a sequential number starting from
4277 1.
4278
4279 -fenable-rtl-pass
4280 -fenable-rtl-pass=range-list
4281 Enable RTL pass pass. See -fdisable-rtl for option argument
4282 description and examples.
4283
4284 -fenable-tree-pass
4285 -fenable-tree-pass=range-list
4286 Enable tree pass pass. See -fdisable-rtl for the description
4287 of option arguments.
4288
4289 Here are some examples showing uses of these options.
4290
4291 # disable ccp1 for all functions
4292 -fdisable-tree-ccp1
4293 # disable complete unroll for function whose cgraph node uid is 1
4294 -fenable-tree-cunroll=1
4295 # disable gcse2 for functions at the following ranges [1,1],
4296 # [300,400], and [400,1000]
4297 # disable gcse2 for functions foo and foo2
4298 -fdisable-rtl-gcse2=foo,foo2
4299 # disable early inlining
4300 -fdisable-tree-einline
4301 # disable ipa inlining
4302 -fdisable-ipa-inline
4303 # enable tree full unroll
4304 -fenable-tree-unroll
4305
4306 -dletters
4307 -fdump-rtl-pass
4308 -fdump-rtl-pass=filename
4309 Says to make debugging dumps during compilation at times specified
4310 by letters. This is used for debugging the RTL-based passes of the
4311 compiler. The file names for most of the dumps are made by
4312 appending a pass number and a word to the dumpname, and the files
4313 are created in the directory of the output file. In case of
4314 =filename option, the dump is output on the given file instead of
4315 the pass numbered dump files. Note that the pass number is computed
4316 statically as passes get registered into the pass manager. Thus
4317 the numbering is not related to the dynamic order of execution of
4318 passes. In particular, a pass installed by a plugin could have a
4319 number over 200 even if it executed quite early. dumpname is
4320 generated from the name of the output file, if explicitly specified
4321 and it is not an executable, otherwise it is the basename of the
4322 source file. These switches may have different effects when -E is
4323 used for preprocessing.
4324
4325 Debug dumps can be enabled with a -fdump-rtl switch or some -d
4326 option letters. Here are the possible letters for use in pass and
4327 letters, and their meanings:
4328
4329 -fdump-rtl-alignments
4330 Dump after branch alignments have been computed.
4331
4332 -fdump-rtl-asmcons
4333 Dump after fixing rtl statements that have unsatisfied in/out
4334 constraints.
4335
4336 -fdump-rtl-auto_inc_dec
4337 Dump after auto-inc-dec discovery. This pass is only run on
4338 architectures that have auto inc or auto dec instructions.
4339
4340 -fdump-rtl-barriers
4341 Dump after cleaning up the barrier instructions.
4342
4343 -fdump-rtl-bbpart
4344 Dump after partitioning hot and cold basic blocks.
4345
4346 -fdump-rtl-bbro
4347 Dump after block reordering.
4348
4349 -fdump-rtl-btl1
4350 -fdump-rtl-btl2
4351 -fdump-rtl-btl1 and -fdump-rtl-btl2 enable dumping after the
4352 two branch target load optimization passes.
4353
4354 -fdump-rtl-bypass
4355 Dump after jump bypassing and control flow optimizations.
4356
4357 -fdump-rtl-combine
4358 Dump after the RTL instruction combination pass.
4359
4360 -fdump-rtl-compgotos
4361 Dump after duplicating the computed gotos.
4362
4363 -fdump-rtl-ce1
4364 -fdump-rtl-ce2
4365 -fdump-rtl-ce3
4366 -fdump-rtl-ce1, -fdump-rtl-ce2, and -fdump-rtl-ce3 enable
4367 dumping after the three if conversion passes.
4368
4369 -fdump-rtl-cprop_hardreg
4370 Dump after hard register copy propagation.
4371
4372 -fdump-rtl-csa
4373 Dump after combining stack adjustments.
4374
4375 -fdump-rtl-cse1
4376 -fdump-rtl-cse2
4377 -fdump-rtl-cse1 and -fdump-rtl-cse2 enable dumping after the
4378 two common subexpression elimination passes.
4379
4380 -fdump-rtl-dce
4381 Dump after the standalone dead code elimination passes.
4382
4383 -fdump-rtl-dbr
4384 Dump after delayed branch scheduling.
4385
4386 -fdump-rtl-dce1
4387 -fdump-rtl-dce2
4388 -fdump-rtl-dce1 and -fdump-rtl-dce2 enable dumping after the
4389 two dead store elimination passes.
4390
4391 -fdump-rtl-eh
4392 Dump after finalization of EH handling code.
4393
4394 -fdump-rtl-eh_ranges
4395 Dump after conversion of EH handling range regions.
4396
4397 -fdump-rtl-expand
4398 Dump after RTL generation.
4399
4400 -fdump-rtl-fwprop1
4401 -fdump-rtl-fwprop2
4402 -fdump-rtl-fwprop1 and -fdump-rtl-fwprop2 enable dumping after
4403 the two forward propagation passes.
4404
4405 -fdump-rtl-gcse1
4406 -fdump-rtl-gcse2
4407 -fdump-rtl-gcse1 and -fdump-rtl-gcse2 enable dumping after
4408 global common subexpression elimination.
4409
4410 -fdump-rtl-init-regs
4411 Dump after the initialization of the registers.
4412
4413 -fdump-rtl-initvals
4414 Dump after the computation of the initial value sets.
4415
4416 -fdump-rtl-into_cfglayout
4417 Dump after converting to cfglayout mode.
4418
4419 -fdump-rtl-ira
4420 Dump after iterated register allocation.
4421
4422 -fdump-rtl-jump
4423 Dump after the second jump optimization.
4424
4425 -fdump-rtl-loop2
4426 -fdump-rtl-loop2 enables dumping after the rtl loop
4427 optimization passes.
4428
4429 -fdump-rtl-mach
4430 Dump after performing the machine dependent reorganization
4431 pass, if that pass exists.
4432
4433 -fdump-rtl-mode_sw
4434 Dump after removing redundant mode switches.
4435
4436 -fdump-rtl-rnreg
4437 Dump after register renumbering.
4438
4439 -fdump-rtl-outof_cfglayout
4440 Dump after converting from cfglayout mode.
4441
4442 -fdump-rtl-peephole2
4443 Dump after the peephole pass.
4444
4445 -fdump-rtl-postreload
4446 Dump after post-reload optimizations.
4447
4448 -fdump-rtl-pro_and_epilogue
4449 Dump after generating the function prologues and epilogues.
4450
4451 -fdump-rtl-regmove
4452 Dump after the register move pass.
4453
4454 -fdump-rtl-sched1
4455 -fdump-rtl-sched2
4456 -fdump-rtl-sched1 and -fdump-rtl-sched2 enable dumping after
4457 the basic block scheduling passes.
4458
4459 -fdump-rtl-see
4460 Dump after sign extension elimination.
4461
4462 -fdump-rtl-seqabstr
4463 Dump after common sequence discovery.
4464
4465 -fdump-rtl-shorten
4466 Dump after shortening branches.
4467
4468 -fdump-rtl-sibling
4469 Dump after sibling call optimizations.
4470
4471 -fdump-rtl-split1
4472 -fdump-rtl-split2
4473 -fdump-rtl-split3
4474 -fdump-rtl-split4
4475 -fdump-rtl-split5
4476 -fdump-rtl-split1, -fdump-rtl-split2, -fdump-rtl-split3,
4477 -fdump-rtl-split4 and -fdump-rtl-split5 enable dumping after
4478 five rounds of instruction splitting.
4479
4480 -fdump-rtl-sms
4481 Dump after modulo scheduling. This pass is only run on some
4482 architectures.
4483
4484 -fdump-rtl-stack
4485 Dump after conversion from GCC's "flat register file" registers
4486 to the x87's stack-like registers. This pass is only run on
4487 x86 variants.
4488
4489 -fdump-rtl-subreg1
4490 -fdump-rtl-subreg2
4491 -fdump-rtl-subreg1 and -fdump-rtl-subreg2 enable dumping after
4492 the two subreg expansion passes.
4493
4494 -fdump-rtl-unshare
4495 Dump after all rtl has been unshared.
4496
4497 -fdump-rtl-vartrack
4498 Dump after variable tracking.
4499
4500 -fdump-rtl-vregs
4501 Dump after converting virtual registers to hard registers.
4502
4503 -fdump-rtl-web
4504 Dump after live range splitting.
4505
4506 -fdump-rtl-regclass
4507 -fdump-rtl-subregs_of_mode_init
4508 -fdump-rtl-subregs_of_mode_finish
4509 -fdump-rtl-dfinit
4510 -fdump-rtl-dfinish
4511 These dumps are defined but always produce empty files.
4512
4513 -da
4514 -fdump-rtl-all
4515 Produce all the dumps listed above.
4516
4517 -dA Annotate the assembler output with miscellaneous debugging
4518 information.
4519
4520 -dD Dump all macro definitions, at the end of preprocessing, in
4521 addition to normal output.
4522
4523 -dH Produce a core dump whenever an error occurs.
4524
4525 -dp Annotate the assembler output with a comment indicating which
4526 pattern and alternative is used. The length of each
4527 instruction is also printed.
4528
4529 -dP Dump the RTL in the assembler output as a comment before each
4530 instruction. Also turns on -dp annotation.
4531
4532 -dx Just generate RTL for a function instead of compiling it.
4533 Usually used with -fdump-rtl-expand.
4534
4535 -fdump-noaddr
4536 When doing debugging dumps, suppress address output. This makes it
4537 more feasible to use diff on debugging dumps for compiler
4538 invocations with different compiler binaries and/or different text
4539 / bss / data / heap / stack / dso start locations.
4540
4541 -fdump-unnumbered
4542 When doing debugging dumps, suppress instruction numbers and
4543 address output. This makes it more feasible to use diff on
4544 debugging dumps for compiler invocations with different options, in
4545 particular with and without -g.
4546
4547 -fdump-unnumbered-links
4548 When doing debugging dumps (see -d option above), suppress
4549 instruction numbers for the links to the previous and next
4550 instructions in a sequence.
4551
4552 -fdump-translation-unit (C++ only)
4553 -fdump-translation-unit-options (C++ only)
4554 Dump a representation of the tree structure for the entire
4555 translation unit to a file. The file name is made by appending .tu
4556 to the source file name, and the file is created in the same
4557 directory as the output file. If the -options form is used,
4558 options controls the details of the dump as described for the
4559 -fdump-tree options.
4560
4561 -fdump-class-hierarchy (C++ only)
4562 -fdump-class-hierarchy-options (C++ only)
4563 Dump a representation of each class's hierarchy and virtual
4564 function table layout to a file. The file name is made by
4565 appending .class to the source file name, and the file is created
4566 in the same directory as the output file. If the -options form is
4567 used, options controls the details of the dump as described for the
4568 -fdump-tree options.
4569
4570 -fdump-ipa-switch
4571 Control the dumping at various stages of inter-procedural analysis
4572 language tree to a file. The file name is generated by appending a
4573 switch specific suffix to the source file name, and the file is
4574 created in the same directory as the output file. The following
4575 dumps are possible:
4576
4577 all Enables all inter-procedural analysis dumps.
4578
4579 cgraph
4580 Dumps information about call-graph optimization, unused
4581 function removal, and inlining decisions.
4582
4583 inline
4584 Dump after function inlining.
4585
4586 -fdump-passes
4587 Dump the list of optimization passes that are turned on and off by
4588 the current command-line options.
4589
4590 -fdump-statistics-option
4591 Enable and control dumping of pass statistics in a separate file.
4592 The file name is generated by appending a suffix ending in
4593 .statistics to the source file name, and the file is created in the
4594 same directory as the output file. If the -option form is used,
4595 -stats causes counters to be summed over the whole compilation unit
4596 while -details dumps every event as the passes generate them. The
4597 default with no option is to sum counters for each function
4598 compiled.
4599
4600 -fdump-tree-switch
4601 -fdump-tree-switch-options
4602 -fdump-tree-switch-options=filename
4603 Control the dumping at various stages of processing the
4604 intermediate language tree to a file. The file name is generated
4605 by appending a switch-specific suffix to the source file name, and
4606 the file is created in the same directory as the output file. In
4607 case of =filename option, the dump is output on the given file
4608 instead of the auto named dump files. If the -options form is
4609 used, options is a list of - separated options which control the
4610 details of the dump. Not all options are applicable to all dumps;
4611 those that are not meaningful are ignored. The following options
4612 are available
4613
4614 address
4615 Print the address of each node. Usually this is not meaningful
4616 as it changes according to the environment and source file.
4617 Its primary use is for tying up a dump file with a debug
4618 environment.
4619
4620 asmname
4621 If "DECL_ASSEMBLER_NAME" has been set for a given decl, use
4622 that in the dump instead of "DECL_NAME". Its primary use is
4623 ease of use working backward from mangled names in the assembly
4624 file.
4625
4626 slim
4627 When dumping front-end intermediate representations, inhibit
4628 dumping of members of a scope or body of a function merely
4629 because that scope has been reached. Only dump such items when
4630 they are directly reachable by some other path.
4631
4632 When dumping pretty-printed trees, this option inhibits dumping
4633 the bodies of control structures.
4634
4635 When dumping RTL, print the RTL in slim (condensed) form
4636 instead of the default LISP-like representation.
4637
4638 raw Print a raw representation of the tree. By default, trees are
4639 pretty-printed into a C-like representation.
4640
4641 details
4642 Enable more detailed dumps (not honored by every dump option).
4643 Also include information from the optimization passes.
4644
4645 stats
4646 Enable dumping various statistics about the pass (not honored
4647 by every dump option).
4648
4649 blocks
4650 Enable showing basic block boundaries (disabled in raw dumps).
4651
4652 graph
4653 For each of the other indicated dump files (-fdump-rtl-pass),
4654 dump a representation of the control flow graph suitable for
4655 viewing with GraphViz to file.passid.pass.dot. Each function
4656 in the file is pretty-printed as a subgraph, so that GraphViz
4657 can render them all in a single plot.
4658
4659 This option currently only works for RTL dumps, and the RTL is
4660 always dumped in slim form.
4661
4662 vops
4663 Enable showing virtual operands for every statement.
4664
4665 lineno
4666 Enable showing line numbers for statements.
4667
4668 uid Enable showing the unique ID ("DECL_UID") for each variable.
4669
4670 verbose
4671 Enable showing the tree dump for each statement.
4672
4673 eh Enable showing the EH region number holding each statement.
4674
4675 scev
4676 Enable showing scalar evolution analysis details.
4677
4678 optimized
4679 Enable showing optimization information (only available in
4680 certain passes).
4681
4682 missed
4683 Enable showing missed optimization information (only available
4684 in certain passes).
4685
4686 notes
4687 Enable other detailed optimization information (only available
4688 in certain passes).
4689
4690 =filename
4691 Instead of an auto named dump file, output into the given file
4692 name. The file names stdout and stderr are treated specially
4693 and are considered already open standard streams. For example,
4694
4695 gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks=foo.dump
4696 -fdump-tree-pre=stderr file.c
4697
4698 outputs vectorizer dump into foo.dump, while the PRE dump is
4699 output on to stderr. If two conflicting dump filenames are
4700 given for the same pass, then the latter option overrides the
4701 earlier one.
4702
4703 all Turn on all options, except raw, slim, verbose and lineno.
4704
4705 optall
4706 Turn on all optimization options, i.e., optimized, missed, and
4707 note.
4708
4709 The following tree dumps are possible:
4710
4711 original
4712 Dump before any tree based optimization, to file.original.
4713
4714 optimized
4715 Dump after all tree based optimization, to file.optimized.
4716
4717 gimple
4718 Dump each function before and after the gimplification pass to
4719 a file. The file name is made by appending .gimple to the
4720 source file name.
4721
4722 cfg Dump the control flow graph of each function to a file. The
4723 file name is made by appending .cfg to the source file name.
4724
4725 ch Dump each function after copying loop headers. The file name
4726 is made by appending .ch to the source file name.
4727
4728 ssa Dump SSA related information to a file. The file name is made
4729 by appending .ssa to the source file name.
4730
4731 alias
4732 Dump aliasing information for each function. The file name is
4733 made by appending .alias to the source file name.
4734
4735 ccp Dump each function after CCP. The file name is made by
4736 appending .ccp to the source file name.
4737
4738 storeccp
4739 Dump each function after STORE-CCP. The file name is made by
4740 appending .storeccp to the source file name.
4741
4742 pre Dump trees after partial redundancy elimination. The file name
4743 is made by appending .pre to the source file name.
4744
4745 fre Dump trees after full redundancy elimination. The file name is
4746 made by appending .fre to the source file name.
4747
4748 copyprop
4749 Dump trees after copy propagation. The file name is made by
4750 appending .copyprop to the source file name.
4751
4752 store_copyprop
4753 Dump trees after store copy-propagation. The file name is made
4754 by appending .store_copyprop to the source file name.
4755
4756 dce Dump each function after dead code elimination. The file name
4757 is made by appending .dce to the source file name.
4758
4759 mudflap
4760 Dump each function after adding mudflap instrumentation. The
4761 file name is made by appending .mudflap to the source file
4762 name.
4763
4764 sra Dump each function after performing scalar replacement of
4765 aggregates. The file name is made by appending .sra to the
4766 source file name.
4767
4768 sink
4769 Dump each function after performing code sinking. The file
4770 name is made by appending .sink to the source file name.
4771
4772 dom Dump each function after applying dominator tree optimizations.
4773 The file name is made by appending .dom to the source file
4774 name.
4775
4776 dse Dump each function after applying dead store elimination. The
4777 file name is made by appending .dse to the source file name.
4778
4779 phiopt
4780 Dump each function after optimizing PHI nodes into straightline
4781 code. The file name is made by appending .phiopt to the source
4782 file name.
4783
4784 forwprop
4785 Dump each function after forward propagating single use
4786 variables. The file name is made by appending .forwprop to the
4787 source file name.
4788
4789 copyrename
4790 Dump each function after applying the copy rename optimization.
4791 The file name is made by appending .copyrename to the source
4792 file name.
4793
4794 nrv Dump each function after applying the named return value
4795 optimization on generic trees. The file name is made by
4796 appending .nrv to the source file name.
4797
4798 vect
4799 Dump each function after applying vectorization of loops. The
4800 file name is made by appending .vect to the source file name.
4801
4802 slp Dump each function after applying vectorization of basic
4803 blocks. The file name is made by appending .slp to the source
4804 file name.
4805
4806 vrp Dump each function after Value Range Propagation (VRP). The
4807 file name is made by appending .vrp to the source file name.
4808
4809 all Enable all the available tree dumps with the flags provided in
4810 this option.
4811
4812 -fopt-info
4813 -fopt-info-options
4814 -fopt-info-options=filename
4815 Controls optimization dumps from various optimization passes. If
4816 the -options form is used, options is a list of - separated options
4817 to select the dump details and optimizations. If options is not
4818 specified, it defaults to all for details and optall for
4819 optimization groups. If the filename is not specified, it defaults
4820 to stderr. Note that the output filename will be overwritten in
4821 case of multiple translation units. If a combined output from
4822 multiple translation units is desired, stderr should be used
4823 instead.
4824
4825 The options can be divided into two groups, 1) options describing
4826 the verbosity of the dump, and 2) options describing which
4827 optimizations should be included. The options from both the groups
4828 can be freely mixed as they are non-overlapping. However, in case
4829 of any conflicts, the latter options override the earlier options
4830 on the command line. Though multiple -fopt-info options are
4831 accepted, only one of them can have =filename. If other filenames
4832 are provided then all but the first one are ignored.
4833
4834 The dump verbosity has the following options
4835
4836 optimized
4837 Print information when an optimization is successfully applied.
4838 It is up to a pass to decide which information is relevant. For
4839 example, the vectorizer passes print the source location of
4840 loops which got successfully vectorized.
4841
4842 missed
4843 Print information about missed optimizations. Individual passes
4844 control which information to include in the output. For
4845 example,
4846
4847 gcc -O2 -ftree-vectorize -fopt-info-vec-missed
4848
4849 will print information about missed optimization opportunities
4850 from vectorization passes on stderr.
4851
4852 note
4853 Print verbose information about optimizations, such as certain
4854 transformations, more detailed messages about decisions etc.
4855
4856 all Print detailed optimization information. This includes
4857 optimized, missed, and note.
4858
4859 The second set of options describes a group of optimizations and
4860 may include one or more of the following.
4861
4862 ipa Enable dumps from all interprocedural optimizations.
4863
4864 loop
4865 Enable dumps from all loop optimizations.
4866
4867 inline
4868 Enable dumps from all inlining optimizations.
4869
4870 vec Enable dumps from all vectorization optimizations.
4871
4872 For example,
4873
4874 gcc -O3 -fopt-info-missed=missed.all
4875
4876 outputs missed optimization report from all the passes into
4877 missed.all.
4878
4879 As another example,
4880
4881 gcc -O3 -fopt-info-inline-optimized-missed=inline.txt
4882
4883 will output information about missed optimizations as well as
4884 optimized locations from all the inlining passes into inline.txt.
4885
4886 If the filename is provided, then the dumps from all the applicable
4887 optimizations are concatenated into the filename. Otherwise the
4888 dump is output onto stderr. If options is omitted, it defaults to
4889 all-optall, which means dump all available optimization info from
4890 all the passes. In the following example, all optimization info is
4891 output on to stderr.
4892
4893 gcc -O3 -fopt-info
4894
4895 Note that -fopt-info-vec-missed behaves the same as
4896 -fopt-info-missed-vec.
4897
4898 As another example, consider
4899
4900 gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt
4901
4902 Here the two output filenames vec.miss and loop.opt are in conflict
4903 since only one output file is allowed. In this case, only the first
4904 option takes effect and the subsequent options are ignored. Thus
4905 only the vec.miss is produced which cotaints dumps from the
4906 vectorizer about missed opportunities.
4907
4908 -ftree-vectorizer-verbose=n
4909 This option is deprecated and is implemented in terms of
4910 -fopt-info. Please use -fopt-info-kind form instead, where kind is
4911 one of the valid opt-info options. It prints additional
4912 optimization information. For n=0 no diagnostic information is
4913 reported. If n=1 the vectorizer reports each loop that got
4914 vectorized, and the total number of loops that got vectorized. If
4915 n=2 the vectorizer reports locations which could not be vectorized
4916 and the reasons for those. For any higher verbosity levels all the
4917 analysis and transformation information from the vectorizer is
4918 reported.
4919
4920 Note that the information output by -ftree-vectorizer-verbose
4921 option is sent to stderr. If the equivalent form
4922 -fopt-info-options=filename is used then the output is sent into
4923 filename instead.
4924
4925 -frandom-seed=string
4926 This option provides a seed that GCC uses in place of random
4927 numbers in generating certain symbol names that have to be
4928 different in every compiled file. It is also used to place unique
4929 stamps in coverage data files and the object files that produce
4930 them. You can use the -frandom-seed option to produce reproducibly
4931 identical object files.
4932
4933 The string should be different for every file you compile.
4934
4935 -fsched-verbose=n
4936 On targets that use instruction scheduling, this option controls
4937 the amount of debugging output the scheduler prints. This
4938 information is written to standard error, unless -fdump-rtl-sched1
4939 or -fdump-rtl-sched2 is specified, in which case it is output to
4940 the usual dump listing file, .sched1 or .sched2 respectively.
4941 However for n greater than nine, the output is always printed to
4942 standard error.
4943
4944 For n greater than zero, -fsched-verbose outputs the same
4945 information as -fdump-rtl-sched1 and -fdump-rtl-sched2. For n
4946 greater than one, it also output basic block probabilities,
4947 detailed ready list information and unit/insn info. For n greater
4948 than two, it includes RTL at abort point, control-flow and regions
4949 info. And for n over four, -fsched-verbose also includes
4950 dependence info.
4951
4952 -save-temps
4953 -save-temps=cwd
4954 Store the usual "temporary" intermediate files permanently; place
4955 them in the current directory and name them based on the source
4956 file. Thus, compiling foo.c with -c -save-temps produces files
4957 foo.i and foo.s, as well as foo.o. This creates a preprocessed
4958 foo.i output file even though the compiler now normally uses an
4959 integrated preprocessor.
4960
4961 When used in combination with the -x command-line option,
4962 -save-temps is sensible enough to avoid over writing an input
4963 source file with the same extension as an intermediate file. The
4964 corresponding intermediate file may be obtained by renaming the
4965 source file before using -save-temps.
4966
4967 If you invoke GCC in parallel, compiling several different source
4968 files that share a common base name in different subdirectories or
4969 the same source file compiled for multiple output destinations, it
4970 is likely that the different parallel compilers will interfere with
4971 each other, and overwrite the temporary files. For instance:
4972
4973 gcc -save-temps -o outdir1/foo.o indir1/foo.c&
4974 gcc -save-temps -o outdir2/foo.o indir2/foo.c&
4975
4976 may result in foo.i and foo.o being written to simultaneously by
4977 both compilers.
4978
4979 -save-temps=obj
4980 Store the usual "temporary" intermediate files permanently. If the
4981 -o option is used, the temporary files are based on the object
4982 file. If the -o option is not used, the -save-temps=obj switch
4983 behaves like -save-temps.
4984
4985 For example:
4986
4987 gcc -save-temps=obj -c foo.c
4988 gcc -save-temps=obj -c bar.c -o dir/xbar.o
4989 gcc -save-temps=obj foobar.c -o dir2/yfoobar
4990
4991 creates foo.i, foo.s, dir/xbar.i, dir/xbar.s, dir2/yfoobar.i,
4992 dir2/yfoobar.s, and dir2/yfoobar.o.
4993
4994 -time[=file]
4995 Report the CPU time taken by each subprocess in the compilation
4996 sequence. For C source files, this is the compiler proper and
4997 assembler (plus the linker if linking is done).
4998
4999 Without the specification of an output file, the output looks like
5000 this:
5001
5002 # cc1 0.12 0.01
5003 # as 0.00 0.01
5004
5005 The first number on each line is the "user time", that is time
5006 spent executing the program itself. The second number is "system
5007 time", time spent executing operating system routines on behalf of
5008 the program. Both numbers are in seconds.
5009
5010 With the specification of an output file, the output is appended to
5011 the named file, and it looks like this:
5012
5013 0.12 0.01 cc1 <options>
5014 0.00 0.01 as <options>
5015
5016 The "user time" and the "system time" are moved before the program
5017 name, and the options passed to the program are displayed, so that
5018 one can later tell what file was being compiled, and with which
5019 options.
5020
5021 -fvar-tracking
5022 Run variable tracking pass. It computes where variables are stored
5023 at each position in code. Better debugging information is then
5024 generated (if the debugging information format supports this
5025 information).
5026
5027 It is enabled by default when compiling with optimization (-Os, -O,
5028 -O2, ...), debugging information (-g) and the debug info format
5029 supports it.
5030
5031 -fvar-tracking-assignments
5032 Annotate assignments to user variables early in the compilation and
5033 attempt to carry the annotations over throughout the compilation
5034 all the way to the end, in an attempt to improve debug information
5035 while optimizing. Use of -gdwarf-4 is recommended along with it.
5036
5037 It can be enabled even if var-tracking is disabled, in which case
5038 annotations are created and maintained, but discarded at the end.
5039
5040 -fvar-tracking-assignments-toggle
5041 Toggle -fvar-tracking-assignments, in the same way that -gtoggle
5042 toggles -g.
5043
5044 -print-file-name=library
5045 Print the full absolute name of the library file library that would
5046 be used when linking---and don't do anything else. With this
5047 option, GCC does not compile or link anything; it just prints the
5048 file name.
5049
5050 -print-multi-directory
5051 Print the directory name corresponding to the multilib selected by
5052 any other switches present in the command line. This directory is
5053 supposed to exist in GCC_EXEC_PREFIX.
5054
5055 -print-multi-lib
5056 Print the mapping from multilib directory names to compiler
5057 switches that enable them. The directory name is separated from
5058 the switches by ;, and each switch starts with an @ instead of the
5059 -, without spaces between multiple switches. This is supposed to
5060 ease shell processing.
5061
5062 -print-multi-os-directory
5063 Print the path to OS libraries for the selected multilib, relative
5064 to some lib subdirectory. If OS libraries are present in the lib
5065 subdirectory and no multilibs are used, this is usually just ., if
5066 OS libraries are present in libsuffix sibling directories this
5067 prints e.g. ../lib64, ../lib or ../lib32, or if OS libraries are
5068 present in lib/subdir subdirectories it prints e.g. amd64, sparcv9
5069 or ev6.
5070
5071 -print-multiarch
5072 Print the path to OS libraries for the selected multiarch, relative
5073 to some lib subdirectory.
5074
5075 -print-prog-name=program
5076 Like -print-file-name, but searches for a program such as cpp.
5077
5078 -print-libgcc-file-name
5079 Same as -print-file-name=libgcc.a.
5080
5081 This is useful when you use -nostdlib or -nodefaultlibs but you do
5082 want to link with libgcc.a. You can do:
5083
5084 gcc -nostdlib <files>... `gcc -print-libgcc-file-name`
5085
5086 -print-search-dirs
5087 Print the name of the configured installation directory and a list
5088 of program and library directories gcc searches---and don't do
5089 anything else.
5090
5091 This is useful when gcc prints the error message installation
5092 problem, cannot exec cpp0: No such file or directory. To resolve
5093 this you either need to put cpp0 and the other compiler components
5094 where gcc expects to find them, or you can set the environment
5095 variable GCC_EXEC_PREFIX to the directory where you installed them.
5096 Don't forget the trailing /.
5097
5098 -print-sysroot
5099 Print the target sysroot directory that is used during compilation.
5100 This is the target sysroot specified either at configure time or
5101 using the --sysroot option, possibly with an extra suffix that
5102 depends on compilation options. If no target sysroot is specified,
5103 the option prints nothing.
5104
5105 -print-sysroot-headers-suffix
5106 Print the suffix added to the target sysroot when searching for
5107 headers, or give an error if the compiler is not configured with
5108 such a suffix---and don't do anything else.
5109
5110 -dumpmachine
5111 Print the compiler's target machine (for example,
5112 i686-pc-linux-gnu)---and don't do anything else.
5113
5114 -dumpversion
5115 Print the compiler version (for example, 3.0)---and don't do
5116 anything else.
5117
5118 -dumpspecs
5119 Print the compiler's built-in specs---and don't do anything else.
5120 (This is used when GCC itself is being built.)
5121
5122 -fno-eliminate-unused-debug-types
5123 Normally, when producing DWARF 2 output, GCC avoids producing debug
5124 symbol output for types that are nowhere used in the source file
5125 being compiled. Sometimes it is useful to have GCC emit debugging
5126 information for all types declared in a compilation unit,
5127 regardless of whether or not they are actually used in that
5128 compilation unit, for example if, in the debugger, you want to cast
5129 a value to a type that is not actually used in your program (but is
5130 declared). More often, however, this results in a significant
5131 amount of wasted space.
5132
5133 Options That Control Optimization
5134 These options control various sorts of optimizations.
5135
5136 Without any optimization option, the compiler's goal is to reduce the
5137 cost of compilation and to make debugging produce the expected results.
5138 Statements are independent: if you stop the program with a breakpoint
5139 between statements, you can then assign a new value to any variable or
5140 change the program counter to any other statement in the function and
5141 get exactly the results you expect from the source code.
5142
5143 Turning on optimization flags makes the compiler attempt to improve the
5144 performance and/or code size at the expense of compilation time and
5145 possibly the ability to debug the program.
5146
5147 The compiler performs optimization based on the knowledge it has of the
5148 program. Compiling multiple files at once to a single output file mode
5149 allows the compiler to use information gained from all of the files
5150 when compiling each of them.
5151
5152 Not all optimizations are controlled directly by a flag. Only
5153 optimizations that have a flag are listed in this section.
5154
5155 Most optimizations are only enabled if an -O level is set on the
5156 command line. Otherwise they are disabled, even if individual
5157 optimization flags are specified.
5158
5159 Depending on the target and how GCC was configured, a slightly
5160 different set of optimizations may be enabled at each -O level than
5161 those listed here. You can invoke GCC with -Q --help=optimizers to
5162 find out the exact set of optimizations that are enabled at each level.
5163
5164 -O
5165 -O1 Optimize. Optimizing compilation takes somewhat more time, and a
5166 lot more memory for a large function.
5167
5168 With -O, the compiler tries to reduce code size and execution time,
5169 without performing any optimizations that take a great deal of
5170 compilation time.
5171
5172 -O turns on the following optimization flags:
5173
5174 -fauto-inc-dec -fcompare-elim -fcprop-registers -fdce -fdefer-pop
5175 -fdelayed-branch -fdse -fguess-branch-probability -fif-conversion2
5176 -fif-conversion -fipa-pure-const -fipa-profile -fipa-reference
5177 -fmerge-constants -fsplit-wide-types -ftree-bit-ccp
5178 -ftree-builtin-call-dce -ftree-ccp -ftree-ch -ftree-copyrename
5179 -ftree-dce -ftree-dominator-opts -ftree-dse -ftree-forwprop
5180 -ftree-fre -ftree-phiprop -ftree-slsr -ftree-sra -ftree-pta
5181 -ftree-ter -funit-at-a-time
5182
5183 -O also turns on -fomit-frame-pointer on machines where doing so
5184 does not interfere with debugging.
5185
5186 -O2 Optimize even more. GCC performs nearly all supported
5187 optimizations that do not involve a space-speed tradeoff. As
5188 compared to -O, this option increases both compilation time and the
5189 performance of the generated code.
5190
5191 -O2 turns on all optimization flags specified by -O. It also turns
5192 on the following optimization flags: -fthread-jumps
5193 -falign-functions -falign-jumps -falign-loops -falign-labels
5194 -fcaller-saves -fcrossjumping -fcse-follow-jumps -fcse-skip-blocks
5195 -fdelete-null-pointer-checks -fdevirtualize
5196 -fexpensive-optimizations -fgcse -fgcse-lm -fhoist-adjacent-loads
5197 -finline-small-functions -findirect-inlining -fipa-sra
5198 -foptimize-sibling-calls -fpartial-inlining -fpeephole2 -fregmove
5199 -freorder-blocks -freorder-functions -frerun-cse-after-loop
5200 -fsched-interblock -fsched-spec -fschedule-insns
5201 -fschedule-insns2 -fstrict-aliasing -fstrict-overflow
5202 -ftree-switch-conversion -ftree-tail-merge -ftree-pre -ftree-vrp
5203
5204 Please note the warning under -fgcse about invoking -O2 on programs
5205 that use computed gotos.
5206
5207 -O3 Optimize yet more. -O3 turns on all optimizations specified by -O2
5208 and also turns on the -finline-functions, -funswitch-loops,
5209 -fpredictive-commoning, -fgcse-after-reload, -ftree-vectorize,
5210 -fvect-cost-model, -ftree-partial-pre and -fipa-cp-clone options.
5211
5212 -O0 Reduce compilation time and make debugging produce the expected
5213 results. This is the default.
5214
5215 -Os Optimize for size. -Os enables all -O2 optimizations that do not
5216 typically increase code size. It also performs further
5217 optimizations designed to reduce code size.
5218
5219 -Os disables the following optimization flags: -falign-functions
5220 -falign-jumps -falign-loops -falign-labels -freorder-blocks
5221 -freorder-blocks-and-partition -fprefetch-loop-arrays
5222 -ftree-vect-loop-version
5223
5224 -Ofast
5225 Disregard strict standards compliance. -Ofast enables all -O3
5226 optimizations. It also enables optimizations that are not valid
5227 for all standard-compliant programs. It turns on -ffast-math and
5228 the Fortran-specific -fno-protect-parens and -fstack-arrays.
5229
5230 -Og Optimize debugging experience. -Og enables optimizations that do
5231 not interfere with debugging. It should be the optimization level
5232 of choice for the standard edit-compile-debug cycle, offering a
5233 reasonable level of optimization while maintaining fast compilation
5234 and a good debugging experience.
5235
5236 If you use multiple -O options, with or without level numbers, the
5237 last such option is the one that is effective.
5238
5239 Options of the form -fflag specify machine-independent flags. Most
5240 flags have both positive and negative forms; the negative form of -ffoo
5241 is -fno-foo. In the table below, only one of the forms is listed---the
5242 one you typically use. You can figure out the other form by either
5243 removing no- or adding it.
5244
5245 The following options control specific optimizations. They are either
5246 activated by -O options or are related to ones that are. You can use
5247 the following flags in the rare cases when "fine-tuning" of
5248 optimizations to be performed is desired.
5249
5250 -fno-default-inline
5251 Do not make member functions inline by default merely because they
5252 are defined inside the class scope (C++ only). Otherwise, when you
5253 specify -O, member functions defined inside class scope are
5254 compiled inline by default; i.e., you don't need to add inline in
5255 front of the member function name.
5256
5257 -fno-defer-pop
5258 Always pop the arguments to each function call as soon as that
5259 function returns. For machines that must pop arguments after a
5260 function call, the compiler normally lets arguments accumulate on
5261 the stack for several function calls and pops them all at once.
5262
5263 Disabled at levels -O, -O2, -O3, -Os.
5264
5265 -fforward-propagate
5266 Perform a forward propagation pass on RTL. The pass tries to
5267 combine two instructions and checks if the result can be
5268 simplified. If loop unrolling is active, two passes are performed
5269 and the second is scheduled after loop unrolling.
5270
5271 This option is enabled by default at optimization levels -O, -O2,
5272 -O3, -Os.
5273
5274 -ffp-contract=style
5275 -ffp-contract=off disables floating-point expression contraction.
5276 -ffp-contract=fast enables floating-point expression contraction
5277 such as forming of fused multiply-add operations if the target has
5278 native support for them. -ffp-contract=on enables floating-point
5279 expression contraction if allowed by the language standard. This
5280 is currently not implemented and treated equal to
5281 -ffp-contract=off.
5282
5283 The default is -ffp-contract=fast.
5284
5285 -fomit-frame-pointer
5286 Don't keep the frame pointer in a register for functions that don't
5287 need one. This avoids the instructions to save, set up and restore
5288 frame pointers; it also makes an extra register available in many
5289 functions. It also makes debugging impossible on some machines.
5290
5291 On some machines, such as the VAX, this flag has no effect, because
5292 the standard calling sequence automatically handles the frame
5293 pointer and nothing is saved by pretending it doesn't exist. The
5294 machine-description macro "FRAME_POINTER_REQUIRED" controls whether
5295 a target machine supports this flag.
5296
5297 Starting with GCC version 4.6, the default setting (when not
5298 optimizing for size) for 32-bit GNU/Linux x86 and 32-bit Darwin x86
5299 targets has been changed to -fomit-frame-pointer. The default can
5300 be reverted to -fno-omit-frame-pointer by configuring GCC with the
5301 --enable-frame-pointer configure option.
5302
5303 Enabled at levels -O, -O2, -O3, -Os.
5304
5305 -foptimize-sibling-calls
5306 Optimize sibling and tail recursive calls.
5307
5308 Enabled at levels -O2, -O3, -Os.
5309
5310 -fno-inline
5311 Do not expand any functions inline apart from those marked with the
5312 "always_inline" attribute. This is the default when not
5313 optimizing.
5314
5315 Single functions can be exempted from inlining by marking them with
5316 the "noinline" attribute.
5317
5318 -finline-small-functions
5319 Integrate functions into their callers when their body is smaller
5320 than expected function call code (so overall size of program gets
5321 smaller). The compiler heuristically decides which functions are
5322 simple enough to be worth integrating in this way. This inlining
5323 applies to all functions, even those not declared inline.
5324
5325 Enabled at level -O2.
5326
5327 -findirect-inlining
5328 Inline also indirect calls that are discovered to be known at
5329 compile time thanks to previous inlining. This option has any
5330 effect only when inlining itself is turned on by the
5331 -finline-functions or -finline-small-functions options.
5332
5333 Enabled at level -O2.
5334
5335 -finline-functions
5336 Consider all functions for inlining, even if they are not declared
5337 inline. The compiler heuristically decides which functions are
5338 worth integrating in this way.
5339
5340 If all calls to a given function are integrated, and the function
5341 is declared "static", then the function is normally not output as
5342 assembler code in its own right.
5343
5344 Enabled at level -O3.
5345
5346 -finline-functions-called-once
5347 Consider all "static" functions called once for inlining into their
5348 caller even if they are not marked "inline". If a call to a given
5349 function is integrated, then the function is not output as
5350 assembler code in its own right.
5351
5352 Enabled at levels -O1, -O2, -O3 and -Os.
5353
5354 -fearly-inlining
5355 Inline functions marked by "always_inline" and functions whose body
5356 seems smaller than the function call overhead early before doing
5357 -fprofile-generate instrumentation and real inlining pass. Doing
5358 so makes profiling significantly cheaper and usually inlining
5359 faster on programs having large chains of nested wrapper functions.
5360
5361 Enabled by default.
5362
5363 -fipa-sra
5364 Perform interprocedural scalar replacement of aggregates, removal
5365 of unused parameters and replacement of parameters passed by
5366 reference by parameters passed by value.
5367
5368 Enabled at levels -O2, -O3 and -Os.
5369
5370 -finline-limit=n
5371 By default, GCC limits the size of functions that can be inlined.
5372 This flag allows coarse control of this limit. n is the size of
5373 functions that can be inlined in number of pseudo instructions.
5374
5375 Inlining is actually controlled by a number of parameters, which
5376 may be specified individually by using --param name=value. The
5377 -finline-limit=n option sets some of these parameters as follows:
5378
5379 max-inline-insns-single
5380 is set to n/2.
5381
5382 max-inline-insns-auto
5383 is set to n/2.
5384
5385 See below for a documentation of the individual parameters
5386 controlling inlining and for the defaults of these parameters.
5387
5388 Note: there may be no value to -finline-limit that results in
5389 default behavior.
5390
5391 Note: pseudo instruction represents, in this particular context, an
5392 abstract measurement of function's size. In no way does it
5393 represent a count of assembly instructions and as such its exact
5394 meaning might change from one release to an another.
5395
5396 -fno-keep-inline-dllexport
5397 This is a more fine-grained version of -fkeep-inline-functions,
5398 which applies only to functions that are declared using the
5399 "dllexport" attribute or declspec
5400
5401 -fkeep-inline-functions
5402 In C, emit "static" functions that are declared "inline" into the
5403 object file, even if the function has been inlined into all of its
5404 callers. This switch does not affect functions using the "extern
5405 inline" extension in GNU C90. In C++, emit any and all inline
5406 functions into the object file.
5407
5408 -fkeep-static-consts
5409 Emit variables declared "static const" when optimization isn't
5410 turned on, even if the variables aren't referenced.
5411
5412 GCC enables this option by default. If you want to force the
5413 compiler to check if a variable is referenced, regardless of
5414 whether or not optimization is turned on, use the
5415 -fno-keep-static-consts option.
5416
5417 -fmerge-constants
5418 Attempt to merge identical constants (string constants and
5419 floating-point constants) across compilation units.
5420
5421 This option is the default for optimized compilation if the
5422 assembler and linker support it. Use -fno-merge-constants to
5423 inhibit this behavior.
5424
5425 Enabled at levels -O, -O2, -O3, -Os.
5426
5427 -fmerge-all-constants
5428 Attempt to merge identical constants and identical variables.
5429
5430 This option implies -fmerge-constants. In addition to
5431 -fmerge-constants this considers e.g. even constant initialized
5432 arrays or initialized constant variables with integral or floating-
5433 point types. Languages like C or C++ require each variable,
5434 including multiple instances of the same variable in recursive
5435 calls, to have distinct locations, so using this option results in
5436 non-conforming behavior.
5437
5438 -fmodulo-sched
5439 Perform swing modulo scheduling immediately before the first
5440 scheduling pass. This pass looks at innermost loops and reorders
5441 their instructions by overlapping different iterations.
5442
5443 -fmodulo-sched-allow-regmoves
5444 Perform more aggressive SMS-based modulo scheduling with register
5445 moves allowed. By setting this flag certain anti-dependences edges
5446 are deleted, which triggers the generation of reg-moves based on
5447 the life-range analysis. This option is effective only with
5448 -fmodulo-sched enabled.
5449
5450 -fno-branch-count-reg
5451 Do not use "decrement and branch" instructions on a count register,
5452 but instead generate a sequence of instructions that decrement a
5453 register, compare it against zero, then branch based upon the
5454 result. This option is only meaningful on architectures that
5455 support such instructions, which include x86, PowerPC, IA-64 and
5456 S/390.
5457
5458 The default is -fbranch-count-reg.
5459
5460 -fno-function-cse
5461 Do not put function addresses in registers; make each instruction
5462 that calls a constant function contain the function's address
5463 explicitly.
5464
5465 This option results in less efficient code, but some strange hacks
5466 that alter the assembler output may be confused by the
5467 optimizations performed when this option is not used.
5468
5469 The default is -ffunction-cse
5470
5471 -fno-zero-initialized-in-bss
5472 If the target supports a BSS section, GCC by default puts variables
5473 that are initialized to zero into BSS. This can save space in the
5474 resulting code.
5475
5476 This option turns off this behavior because some programs
5477 explicitly rely on variables going to the data section---e.g., so
5478 that the resulting executable can find the beginning of that
5479 section and/or make assumptions based on that.
5480
5481 The default is -fzero-initialized-in-bss.
5482
5483 -fmudflap -fmudflapth -fmudflapir
5484 For front-ends that support it (C and C++), instrument all risky
5485 pointer/array dereferencing operations, some standard library
5486 string/heap functions, and some other associated constructs with
5487 range/validity tests. Modules so instrumented should be immune to
5488 buffer overflows, invalid heap use, and some other classes of C/C++
5489 programming errors. The instrumentation relies on a separate
5490 runtime library (libmudflap), which is linked into a program if
5491 -fmudflap is given at link time. Run-time behavior of the
5492 instrumented program is controlled by the MUDFLAP_OPTIONS
5493 environment variable. See "env MUDFLAP_OPTIONS=-help a.out" for
5494 its options.
5495
5496 Use -fmudflapth instead of -fmudflap to compile and to link if your
5497 program is multi-threaded. Use -fmudflapir, in addition to
5498 -fmudflap or -fmudflapth, if instrumentation should ignore pointer
5499 reads. This produces less instrumentation (and therefore faster
5500 execution) and still provides some protection against outright
5501 memory corrupting writes, but allows erroneously read data to
5502 propagate within a program.
5503
5504 -fthread-jumps
5505 Perform optimizations that check to see if a jump branches to a
5506 location where another comparison subsumed by the first is found.
5507 If so, the first branch is redirected to either the destination of
5508 the second branch or a point immediately following it, depending on
5509 whether the condition is known to be true or false.
5510
5511 Enabled at levels -O2, -O3, -Os.
5512
5513 -fsplit-wide-types
5514 When using a type that occupies multiple registers, such as "long
5515 long" on a 32-bit system, split the registers apart and allocate
5516 them independently. This normally generates better code for those
5517 types, but may make debugging more difficult.
5518
5519 Enabled at levels -O, -O2, -O3, -Os.
5520
5521 -fcse-follow-jumps
5522 In common subexpression elimination (CSE), scan through jump
5523 instructions when the target of the jump is not reached by any
5524 other path. For example, when CSE encounters an "if" statement
5525 with an "else" clause, CSE follows the jump when the condition
5526 tested is false.
5527
5528 Enabled at levels -O2, -O3, -Os.
5529
5530 -fcse-skip-blocks
5531 This is similar to -fcse-follow-jumps, but causes CSE to follow
5532 jumps that conditionally skip over blocks. When CSE encounters a
5533 simple "if" statement with no else clause, -fcse-skip-blocks causes
5534 CSE to follow the jump around the body of the "if".
5535
5536 Enabled at levels -O2, -O3, -Os.
5537
5538 -frerun-cse-after-loop
5539 Re-run common subexpression elimination after loop optimizations
5540 are performed.
5541
5542 Enabled at levels -O2, -O3, -Os.
5543
5544 -fgcse
5545 Perform a global common subexpression elimination pass. This pass
5546 also performs global constant and copy propagation.
5547
5548 Note: When compiling a program using computed gotos, a GCC
5549 extension, you may get better run-time performance if you disable
5550 the global common subexpression elimination pass by adding
5551 -fno-gcse to the command line.
5552
5553 Enabled at levels -O2, -O3, -Os.
5554
5555 -fgcse-lm
5556 When -fgcse-lm is enabled, global common subexpression elimination
5557 attempts to move loads that are only killed by stores into
5558 themselves. This allows a loop containing a load/store sequence to
5559 be changed to a load outside the loop, and a copy/store within the
5560 loop.
5561
5562 Enabled by default when -fgcse is enabled.
5563
5564 -fgcse-sm
5565 When -fgcse-sm is enabled, a store motion pass is run after global
5566 common subexpression elimination. This pass attempts to move
5567 stores out of loops. When used in conjunction with -fgcse-lm,
5568 loops containing a load/store sequence can be changed to a load
5569 before the loop and a store after the loop.
5570
5571 Not enabled at any optimization level.
5572
5573 -fgcse-las
5574 When -fgcse-las is enabled, the global common subexpression
5575 elimination pass eliminates redundant loads that come after stores
5576 to the same memory location (both partial and full redundancies).
5577
5578 Not enabled at any optimization level.
5579
5580 -fgcse-after-reload
5581 When -fgcse-after-reload is enabled, a redundant load elimination
5582 pass is performed after reload. The purpose of this pass is to
5583 clean up redundant spilling.
5584
5585 -faggressive-loop-optimizations
5586 This option tells the loop optimizer to use language constraints to
5587 derive bounds for the number of iterations of a loop. This assumes
5588 that loop code does not invoke undefined behavior by for example
5589 causing signed integer overflows or out-of-bound array accesses.
5590 The bounds for the number of iterations of a loop are used to guide
5591 loop unrolling and peeling and loop exit test optimizations. This
5592 option is enabled by default.
5593
5594 -funsafe-loop-optimizations
5595 This option tells the loop optimizer to assume that loop indices do
5596 not overflow, and that loops with nontrivial exit condition are not
5597 infinite. This enables a wider range of loop optimizations even if
5598 the loop optimizer itself cannot prove that these assumptions are
5599 valid. If you use -Wunsafe-loop-optimizations, the compiler warns
5600 you if it finds this kind of loop.
5601
5602 -fcrossjumping
5603 Perform cross-jumping transformation. This transformation unifies
5604 equivalent code and saves code size. The resulting code may or may
5605 not perform better than without cross-jumping.
5606
5607 Enabled at levels -O2, -O3, -Os.
5608
5609 -fauto-inc-dec
5610 Combine increments or decrements of addresses with memory accesses.
5611 This pass is always skipped on architectures that do not have
5612 instructions to support this. Enabled by default at -O and higher
5613 on architectures that support this.
5614
5615 -fdce
5616 Perform dead code elimination (DCE) on RTL. Enabled by default at
5617 -O and higher.
5618
5619 -fdse
5620 Perform dead store elimination (DSE) on RTL. Enabled by default at
5621 -O and higher.
5622
5623 -fif-conversion
5624 Attempt to transform conditional jumps into branch-less
5625 equivalents. This includes use of conditional moves, min, max, set
5626 flags and abs instructions, and some tricks doable by standard
5627 arithmetics. The use of conditional execution on chips where it is
5628 available is controlled by "if-conversion2".
5629
5630 Enabled at levels -O, -O2, -O3, -Os.
5631
5632 -fif-conversion2
5633 Use conditional execution (where available) to transform
5634 conditional jumps into branch-less equivalents.
5635
5636 Enabled at levels -O, -O2, -O3, -Os.
5637
5638 -fdelete-null-pointer-checks
5639 Assume that programs cannot safely dereference null pointers, and
5640 that no code or data element resides there. This enables simple
5641 constant folding optimizations at all optimization levels. In
5642 addition, other optimization passes in GCC use this flag to control
5643 global dataflow analyses that eliminate useless checks for null
5644 pointers; these assume that if a pointer is checked after it has
5645 already been dereferenced, it cannot be null.
5646
5647 Note however that in some environments this assumption is not true.
5648 Use -fno-delete-null-pointer-checks to disable this optimization
5649 for programs that depend on that behavior.
5650
5651 Some targets, especially embedded ones, disable this option at all
5652 levels. Otherwise it is enabled at all levels: -O0, -O1, -O2, -O3,
5653 -Os. Passes that use the information are enabled independently at
5654 different optimization levels.
5655
5656 -fdevirtualize
5657 Attempt to convert calls to virtual functions to direct calls.
5658 This is done both within a procedure and interprocedurally as part
5659 of indirect inlining ("-findirect-inlining") and interprocedural
5660 constant propagation (-fipa-cp). Enabled at levels -O2, -O3, -Os.
5661
5662 -fexpensive-optimizations
5663 Perform a number of minor optimizations that are relatively
5664 expensive.
5665
5666 Enabled at levels -O2, -O3, -Os.
5667
5668 -free
5669 Attempt to remove redundant extension instructions. This is
5670 especially helpful for the x86-64 architecture, which implicitly
5671 zero-extends in 64-bit registers after writing to their lower
5672 32-bit half.
5673
5674 Enabled for x86 at levels -O2, -O3.
5675
5676 -foptimize-register-move
5677 -fregmove
5678 Attempt to reassign register numbers in move instructions and as
5679 operands of other simple instructions in order to maximize the
5680 amount of register tying. This is especially helpful on machines
5681 with two-operand instructions.
5682
5683 Note -fregmove and -foptimize-register-move are the same
5684 optimization.
5685
5686 Enabled at levels -O2, -O3, -Os.
5687
5688 -fira-algorithm=algorithm
5689 Use the specified coloring algorithm for the integrated register
5690 allocator. The algorithm argument can be priority, which specifies
5691 Chow's priority coloring, or CB, which specifies Chaitin-Briggs
5692 coloring. Chaitin-Briggs coloring is not implemented for all
5693 architectures, but for those targets that do support it, it is the
5694 default because it generates better code.
5695
5696 -fira-region=region
5697 Use specified regions for the integrated register allocator. The
5698 region argument should be one of the following:
5699
5700 all Use all loops as register allocation regions. This can give
5701 the best results for machines with a small and/or irregular
5702 register set.
5703
5704 mixed
5705 Use all loops except for loops with small register pressure as
5706 the regions. This value usually gives the best results in most
5707 cases and for most architectures, and is enabled by default
5708 when compiling with optimization for speed (-O, -O2, ...).
5709
5710 one Use all functions as a single region. This typically results
5711 in the smallest code size, and is enabled by default for -Os or
5712 -O0.
5713
5714 -fira-hoist-pressure
5715 Use IRA to evaluate register pressure in the code hoisting pass for
5716 decisions to hoist expressions. This option usually results in
5717 smaller code, but it can slow the compiler down.
5718
5719 This option is enabled at level -Os for all targets.
5720
5721 -fira-loop-pressure
5722 Use IRA to evaluate register pressure in loops for decisions to
5723 move loop invariants. This option usually results in generation of
5724 faster and smaller code on machines with large register files (>=
5725 32 registers), but it can slow the compiler down.
5726
5727 This option is enabled at level -O3 for some targets.
5728
5729 -fno-ira-share-save-slots
5730 Disable sharing of stack slots used for saving call-used hard
5731 registers living through a call. Each hard register gets a
5732 separate stack slot, and as a result function stack frames are
5733 larger.
5734
5735 -fno-ira-share-spill-slots
5736 Disable sharing of stack slots allocated for pseudo-registers.
5737 Each pseudo-register that does not get a hard register gets a
5738 separate stack slot, and as a result function stack frames are
5739 larger.
5740
5741 -fira-verbose=n
5742 Control the verbosity of the dump file for the integrated register
5743 allocator. The default value is 5. If the value n is greater or
5744 equal to 10, the dump output is sent to stderr using the same
5745 format as n minus 10.
5746
5747 -fdelayed-branch
5748 If supported for the target machine, attempt to reorder
5749 instructions to exploit instruction slots available after delayed
5750 branch instructions.
5751
5752 Enabled at levels -O, -O2, -O3, -Os.
5753
5754 -fschedule-insns
5755 If supported for the target machine, attempt to reorder
5756 instructions to eliminate execution stalls due to required data
5757 being unavailable. This helps machines that have slow floating
5758 point or memory load instructions by allowing other instructions to
5759 be issued until the result of the load or floating-point
5760 instruction is required.
5761
5762 Enabled at levels -O2, -O3.
5763
5764 -fschedule-insns2
5765 Similar to -fschedule-insns, but requests an additional pass of
5766 instruction scheduling after register allocation has been done.
5767 This is especially useful on machines with a relatively small
5768 number of registers and where memory load instructions take more
5769 than one cycle.
5770
5771 Enabled at levels -O2, -O3, -Os.
5772
5773 -fno-sched-interblock
5774 Don't schedule instructions across basic blocks. This is normally
5775 enabled by default when scheduling before register allocation, i.e.
5776 with -fschedule-insns or at -O2 or higher.
5777
5778 -fno-sched-spec
5779 Don't allow speculative motion of non-load instructions. This is
5780 normally enabled by default when scheduling before register
5781 allocation, i.e. with -fschedule-insns or at -O2 or higher.
5782
5783 -fsched-pressure
5784 Enable register pressure sensitive insn scheduling before register
5785 allocation. This only makes sense when scheduling before register
5786 allocation is enabled, i.e. with -fschedule-insns or at -O2 or
5787 higher. Usage of this option can improve the generated code and
5788 decrease its size by preventing register pressure increase above
5789 the number of available hard registers and subsequent spills in
5790 register allocation.
5791
5792 -fsched-spec-load
5793 Allow speculative motion of some load instructions. This only
5794 makes sense when scheduling before register allocation, i.e. with
5795 -fschedule-insns or at -O2 or higher.
5796
5797 -fsched-spec-load-dangerous
5798 Allow speculative motion of more load instructions. This only
5799 makes sense when scheduling before register allocation, i.e. with
5800 -fschedule-insns or at -O2 or higher.
5801
5802 -fsched-stalled-insns
5803 -fsched-stalled-insns=n
5804 Define how many insns (if any) can be moved prematurely from the
5805 queue of stalled insns into the ready list during the second
5806 scheduling pass. -fno-sched-stalled-insns means that no insns are
5807 moved prematurely, -fsched-stalled-insns=0 means there is no limit
5808 on how many queued insns can be moved prematurely.
5809 -fsched-stalled-insns without a value is equivalent to
5810 -fsched-stalled-insns=1.
5811
5812 -fsched-stalled-insns-dep
5813 -fsched-stalled-insns-dep=n
5814 Define how many insn groups (cycles) are examined for a dependency
5815 on a stalled insn that is a candidate for premature removal from
5816 the queue of stalled insns. This has an effect only during the
5817 second scheduling pass, and only if -fsched-stalled-insns is used.
5818 -fno-sched-stalled-insns-dep is equivalent to
5819 -fsched-stalled-insns-dep=0. -fsched-stalled-insns-dep without a
5820 value is equivalent to -fsched-stalled-insns-dep=1.
5821
5822 -fsched2-use-superblocks
5823 When scheduling after register allocation, use superblock
5824 scheduling. This allows motion across basic block boundaries,
5825 resulting in faster schedules. This option is experimental, as not
5826 all machine descriptions used by GCC model the CPU closely enough
5827 to avoid unreliable results from the algorithm.
5828
5829 This only makes sense when scheduling after register allocation,
5830 i.e. with -fschedule-insns2 or at -O2 or higher.
5831
5832 -fsched-group-heuristic
5833 Enable the group heuristic in the scheduler. This heuristic favors
5834 the instruction that belongs to a schedule group. This is enabled
5835 by default when scheduling is enabled, i.e. with -fschedule-insns
5836 or -fschedule-insns2 or at -O2 or higher.
5837
5838 -fsched-critical-path-heuristic
5839 Enable the critical-path heuristic in the scheduler. This
5840 heuristic favors instructions on the critical path. This is
5841 enabled by default when scheduling is enabled, i.e. with
5842 -fschedule-insns or -fschedule-insns2 or at -O2 or higher.
5843
5844 -fsched-spec-insn-heuristic
5845 Enable the speculative instruction heuristic in the scheduler.
5846 This heuristic favors speculative instructions with greater
5847 dependency weakness. This is enabled by default when scheduling is
5848 enabled, i.e. with -fschedule-insns or -fschedule-insns2 or at -O2
5849 or higher.
5850
5851 -fsched-rank-heuristic
5852 Enable the rank heuristic in the scheduler. This heuristic favors
5853 the instruction belonging to a basic block with greater size or
5854 frequency. This is enabled by default when scheduling is enabled,
5855 i.e. with -fschedule-insns or -fschedule-insns2 or at -O2 or
5856 higher.
5857
5858 -fsched-last-insn-heuristic
5859 Enable the last-instruction heuristic in the scheduler. This
5860 heuristic favors the instruction that is less dependent on the last
5861 instruction scheduled. This is enabled by default when scheduling
5862 is enabled, i.e. with -fschedule-insns or -fschedule-insns2 or at
5863 -O2 or higher.
5864
5865 -fsched-dep-count-heuristic
5866 Enable the dependent-count heuristic in the scheduler. This
5867 heuristic favors the instruction that has more instructions
5868 depending on it. This is enabled by default when scheduling is
5869 enabled, i.e. with -fschedule-insns or -fschedule-insns2 or at -O2
5870 or higher.
5871
5872 -freschedule-modulo-scheduled-loops
5873 Modulo scheduling is performed before traditional scheduling. If a
5874 loop is modulo scheduled, later scheduling passes may change its
5875 schedule. Use this option to control that behavior.
5876
5877 -fselective-scheduling
5878 Schedule instructions using selective scheduling algorithm.
5879 Selective scheduling runs instead of the first scheduler pass.
5880
5881 -fselective-scheduling2
5882 Schedule instructions using selective scheduling algorithm.
5883 Selective scheduling runs instead of the second scheduler pass.
5884
5885 -fsel-sched-pipelining
5886 Enable software pipelining of innermost loops during selective
5887 scheduling. This option has no effect unless one of
5888 -fselective-scheduling or -fselective-scheduling2 is turned on.
5889
5890 -fsel-sched-pipelining-outer-loops
5891 When pipelining loops during selective scheduling, also pipeline
5892 outer loops. This option has no effect unless
5893 -fsel-sched-pipelining is turned on.
5894
5895 -fshrink-wrap
5896 Emit function prologues only before parts of the function that need
5897 it, rather than at the top of the function. This flag is enabled
5898 by default at -O and higher.
5899
5900 -fcaller-saves
5901 Enable allocation of values to registers that are clobbered by
5902 function calls, by emitting extra instructions to save and restore
5903 the registers around such calls. Such allocation is done only when
5904 it seems to result in better code.
5905
5906 This option is always enabled by default on certain machines,
5907 usually those which have no call-preserved registers to use
5908 instead.
5909
5910 Enabled at levels -O2, -O3, -Os.
5911
5912 -fcombine-stack-adjustments
5913 Tracks stack adjustments (pushes and pops) and stack memory
5914 references and then tries to find ways to combine them.
5915
5916 Enabled by default at -O1 and higher.
5917
5918 -fconserve-stack
5919 Attempt to minimize stack usage. The compiler attempts to use less
5920 stack space, even if that makes the program slower. This option
5921 implies setting the large-stack-frame parameter to 100 and the
5922 large-stack-frame-growth parameter to 400.
5923
5924 -ftree-reassoc
5925 Perform reassociation on trees. This flag is enabled by default at
5926 -O and higher.
5927
5928 -ftree-pre
5929 Perform partial redundancy elimination (PRE) on trees. This flag
5930 is enabled by default at -O2 and -O3.
5931
5932 -ftree-partial-pre
5933 Make partial redundancy elimination (PRE) more aggressive. This
5934 flag is enabled by default at -O3.
5935
5936 -ftree-forwprop
5937 Perform forward propagation on trees. This flag is enabled by
5938 default at -O and higher.
5939
5940 -ftree-fre
5941 Perform full redundancy elimination (FRE) on trees. The difference
5942 between FRE and PRE is that FRE only considers expressions that are
5943 computed on all paths leading to the redundant computation. This
5944 analysis is faster than PRE, though it exposes fewer redundancies.
5945 This flag is enabled by default at -O and higher.
5946
5947 -ftree-phiprop
5948 Perform hoisting of loads from conditional pointers on trees. This
5949 pass is enabled by default at -O and higher.
5950
5951 -fhoist-adjacent-loads
5952 Speculatively hoist loads from both branches of an if-then-else if
5953 the loads are from adjacent locations in the same structure and the
5954 target architecture has a conditional move instruction. This flag
5955 is enabled by default at -O2 and higher.
5956
5957 -ftree-copy-prop
5958 Perform copy propagation on trees. This pass eliminates
5959 unnecessary copy operations. This flag is enabled by default at -O
5960 and higher.
5961
5962 -fipa-pure-const
5963 Discover which functions are pure or constant. Enabled by default
5964 at -O and higher.
5965
5966 -fipa-reference
5967 Discover which static variables do not escape the compilation unit.
5968 Enabled by default at -O and higher.
5969
5970 -fipa-pta
5971 Perform interprocedural pointer analysis and interprocedural
5972 modification and reference analysis. This option can cause
5973 excessive memory and compile-time usage on large compilation units.
5974 It is not enabled by default at any optimization level.
5975
5976 -fipa-profile
5977 Perform interprocedural profile propagation. The functions called
5978 only from cold functions are marked as cold. Also functions
5979 executed once (such as "cold", "noreturn", static constructors or
5980 destructors) are identified. Cold functions and loop less parts of
5981 functions executed once are then optimized for size. Enabled by
5982 default at -O and higher.
5983
5984 -fipa-cp
5985 Perform interprocedural constant propagation. This optimization
5986 analyzes the program to determine when values passed to functions
5987 are constants and then optimizes accordingly. This optimization
5988 can substantially increase performance if the application has
5989 constants passed to functions. This flag is enabled by default at
5990 -O2, -Os and -O3.
5991
5992 -fipa-cp-clone
5993 Perform function cloning to make interprocedural constant
5994 propagation stronger. When enabled, interprocedural constant
5995 propagation performs function cloning when externally visible
5996 function can be called with constant arguments. Because this
5997 optimization can create multiple copies of functions, it may
5998 significantly increase code size (see --param
5999 ipcp-unit-growth=value). This flag is enabled by default at -O3.
6000
6001 -ftree-sink
6002 Perform forward store motion on trees. This flag is enabled by
6003 default at -O and higher.
6004
6005 -ftree-bit-ccp
6006 Perform sparse conditional bit constant propagation on trees and
6007 propagate pointer alignment information. This pass only operates
6008 on local scalar variables and is enabled by default at -O and
6009 higher. It requires that -ftree-ccp is enabled.
6010
6011 -ftree-ccp
6012 Perform sparse conditional constant propagation (CCP) on trees.
6013 This pass only operates on local scalar variables and is enabled by
6014 default at -O and higher.
6015
6016 -ftree-switch-conversion
6017 Perform conversion of simple initializations in a switch to
6018 initializations from a scalar array. This flag is enabled by
6019 default at -O2 and higher.
6020
6021 -ftree-tail-merge
6022 Look for identical code sequences. When found, replace one with a
6023 jump to the other. This optimization is known as tail merging or
6024 cross jumping. This flag is enabled by default at -O2 and higher.
6025 The compilation time in this pass can be limited using max-tail-
6026 merge-comparisons parameter and max-tail-merge-iterations
6027 parameter.
6028
6029 -ftree-dce
6030 Perform dead code elimination (DCE) on trees. This flag is enabled
6031 by default at -O and higher.
6032
6033 -ftree-builtin-call-dce
6034 Perform conditional dead code elimination (DCE) for calls to built-
6035 in functions that may set "errno" but are otherwise side-effect
6036 free. This flag is enabled by default at -O2 and higher if -Os is
6037 not also specified.
6038
6039 -ftree-dominator-opts
6040 Perform a variety of simple scalar cleanups (constant/copy
6041 propagation, redundancy elimination, range propagation and
6042 expression simplification) based on a dominator tree traversal.
6043 This also performs jump threading (to reduce jumps to jumps). This
6044 flag is enabled by default at -O and higher.
6045
6046 -ftree-dse
6047 Perform dead store elimination (DSE) on trees. A dead store is a
6048 store into a memory location that is later overwritten by another
6049 store without any intervening loads. In this case the earlier
6050 store can be deleted. This flag is enabled by default at -O and
6051 higher.
6052
6053 -ftree-ch
6054 Perform loop header copying on trees. This is beneficial since it
6055 increases effectiveness of code motion optimizations. It also
6056 saves one jump. This flag is enabled by default at -O and higher.
6057 It is not enabled for -Os, since it usually increases code size.
6058
6059 -ftree-loop-optimize
6060 Perform loop optimizations on trees. This flag is enabled by
6061 default at -O and higher.
6062
6063 -ftree-loop-linear
6064 Perform loop interchange transformations on tree. Same as
6065 -floop-interchange. To use this code transformation, GCC has to be
6066 configured with --with-ppl and --with-cloog to enable the Graphite
6067 loop transformation infrastructure.
6068
6069 -floop-interchange
6070 Perform loop interchange transformations on loops. Interchanging
6071 two nested loops switches the inner and outer loops. For example,
6072 given a loop like:
6073
6074 DO J = 1, M
6075 DO I = 1, N
6076 A(J, I) = A(J, I) * C
6077 ENDDO
6078 ENDDO
6079
6080 loop interchange transforms the loop as if it were written:
6081
6082 DO I = 1, N
6083 DO J = 1, M
6084 A(J, I) = A(J, I) * C
6085 ENDDO
6086 ENDDO
6087
6088 which can be beneficial when "N" is larger than the caches, because
6089 in Fortran, the elements of an array are stored in memory
6090 contiguously by column, and the original loop iterates over rows,
6091 potentially creating at each access a cache miss. This
6092 optimization applies to all the languages supported by GCC and is
6093 not limited to Fortran. To use this code transformation, GCC has
6094 to be configured with --with-ppl and --with-cloog to enable the
6095 Graphite loop transformation infrastructure.
6096
6097 -floop-strip-mine
6098 Perform loop strip mining transformations on loops. Strip mining
6099 splits a loop into two nested loops. The outer loop has strides
6100 equal to the strip size and the inner loop has strides of the
6101 original loop within a strip. The strip length can be changed
6102 using the loop-block-tile-size parameter. For example, given a
6103 loop like:
6104
6105 DO I = 1, N
6106 A(I) = A(I) + C
6107 ENDDO
6108
6109 loop strip mining transforms the loop as if it were written:
6110
6111 DO II = 1, N, 51
6112 DO I = II, min (II + 50, N)
6113 A(I) = A(I) + C
6114 ENDDO
6115 ENDDO
6116
6117 This optimization applies to all the languages supported by GCC and
6118 is not limited to Fortran. To use this code transformation, GCC
6119 has to be configured with --with-ppl and --with-cloog to enable the
6120 Graphite loop transformation infrastructure.
6121
6122 -floop-block
6123 Perform loop blocking transformations on loops. Blocking strip
6124 mines each loop in the loop nest such that the memory accesses of
6125 the element loops fit inside caches. The strip length can be
6126 changed using the loop-block-tile-size parameter. For example,
6127 given a loop like:
6128
6129 DO I = 1, N
6130 DO J = 1, M
6131 A(J, I) = B(I) + C(J)
6132 ENDDO
6133 ENDDO
6134
6135 loop blocking transforms the loop as if it were written:
6136
6137 DO II = 1, N, 51
6138 DO JJ = 1, M, 51
6139 DO I = II, min (II + 50, N)
6140 DO J = JJ, min (JJ + 50, M)
6141 A(J, I) = B(I) + C(J)
6142 ENDDO
6143 ENDDO
6144 ENDDO
6145 ENDDO
6146
6147 which can be beneficial when "M" is larger than the caches, because
6148 the innermost loop iterates over a smaller amount of data which can
6149 be kept in the caches. This optimization applies to all the
6150 languages supported by GCC and is not limited to Fortran. To use
6151 this code transformation, GCC has to be configured with --with-ppl
6152 and --with-cloog to enable the Graphite loop transformation
6153 infrastructure.
6154
6155 -fgraphite-identity
6156 Enable the identity transformation for graphite. For every SCoP we
6157 generate the polyhedral representation and transform it back to
6158 gimple. Using -fgraphite-identity we can check the costs or
6159 benefits of the GIMPLE -> GRAPHITE -> GIMPLE transformation. Some
6160 minimal optimizations are also performed by the code generator
6161 CLooG, like index splitting and dead code elimination in loops.
6162
6163 -floop-nest-optimize
6164 Enable the ISL based loop nest optimizer. This is a generic loop
6165 nest optimizer based on the Pluto optimization algorithms. It
6166 calculates a loop structure optimized for data-locality and
6167 parallelism. This option is experimental.
6168
6169 -floop-parallelize-all
6170 Use the Graphite data dependence analysis to identify loops that
6171 can be parallelized. Parallelize all the loops that can be
6172 analyzed to not contain loop carried dependences without checking
6173 that it is profitable to parallelize the loops.
6174
6175 -fcheck-data-deps
6176 Compare the results of several data dependence analyzers. This
6177 option is used for debugging the data dependence analyzers.
6178
6179 -ftree-loop-if-convert
6180 Attempt to transform conditional jumps in the innermost loops to
6181 branch-less equivalents. The intent is to remove control-flow from
6182 the innermost loops in order to improve the ability of the
6183 vectorization pass to handle these loops. This is enabled by
6184 default if vectorization is enabled.
6185
6186 -ftree-loop-if-convert-stores
6187 Attempt to also if-convert conditional jumps containing memory
6188 writes. This transformation can be unsafe for multi-threaded
6189 programs as it transforms conditional memory writes into
6190 unconditional memory writes. For example,
6191
6192 for (i = 0; i < N; i++)
6193 if (cond)
6194 A[i] = expr;
6195
6196 is transformed to
6197
6198 for (i = 0; i < N; i++)
6199 A[i] = cond ? expr : A[i];
6200
6201 potentially producing data races.
6202
6203 -ftree-loop-distribution
6204 Perform loop distribution. This flag can improve cache performance
6205 on big loop bodies and allow further loop optimizations, like
6206 parallelization or vectorization, to take place. For example, the
6207 loop
6208
6209 DO I = 1, N
6210 A(I) = B(I) + C
6211 D(I) = E(I) * F
6212 ENDDO
6213
6214 is transformed to
6215
6216 DO I = 1, N
6217 A(I) = B(I) + C
6218 ENDDO
6219 DO I = 1, N
6220 D(I) = E(I) * F
6221 ENDDO
6222
6223 -ftree-loop-distribute-patterns
6224 Perform loop distribution of patterns that can be code generated
6225 with calls to a library. This flag is enabled by default at -O3.
6226
6227 This pass distributes the initialization loops and generates a call
6228 to memset zero. For example, the loop
6229
6230 DO I = 1, N
6231 A(I) = 0
6232 B(I) = A(I) + I
6233 ENDDO
6234
6235 is transformed to
6236
6237 DO I = 1, N
6238 A(I) = 0
6239 ENDDO
6240 DO I = 1, N
6241 B(I) = A(I) + I
6242 ENDDO
6243
6244 and the initialization loop is transformed into a call to memset
6245 zero.
6246
6247 -ftree-loop-im
6248 Perform loop invariant motion on trees. This pass moves only
6249 invariants that are hard to handle at RTL level (function calls,
6250 operations that expand to nontrivial sequences of insns). With
6251 -funswitch-loops it also moves operands of conditions that are
6252 invariant out of the loop, so that we can use just trivial
6253 invariantness analysis in loop unswitching. The pass also includes
6254 store motion.
6255
6256 -ftree-loop-ivcanon
6257 Create a canonical counter for number of iterations in loops for
6258 which determining number of iterations requires complicated
6259 analysis. Later optimizations then may determine the number
6260 easily. Useful especially in connection with unrolling.
6261
6262 -fivopts
6263 Perform induction variable optimizations (strength reduction,
6264 induction variable merging and induction variable elimination) on
6265 trees.
6266
6267 -ftree-parallelize-loops=n
6268 Parallelize loops, i.e., split their iteration space to run in n
6269 threads. This is only possible for loops whose iterations are
6270 independent and can be arbitrarily reordered. The optimization is
6271 only profitable on multiprocessor machines, for loops that are CPU-
6272 intensive, rather than constrained e.g. by memory bandwidth. This
6273 option implies -pthread, and thus is only supported on targets that
6274 have support for -pthread.
6275
6276 -ftree-pta
6277 Perform function-local points-to analysis on trees. This flag is
6278 enabled by default at -O and higher.
6279
6280 -ftree-sra
6281 Perform scalar replacement of aggregates. This pass replaces
6282 structure references with scalars to prevent committing structures
6283 to memory too early. This flag is enabled by default at -O and
6284 higher.
6285
6286 -ftree-copyrename
6287 Perform copy renaming on trees. This pass attempts to rename
6288 compiler temporaries to other variables at copy locations, usually
6289 resulting in variable names which more closely resemble the
6290 original variables. This flag is enabled by default at -O and
6291 higher.
6292
6293 -ftree-coalesce-inlined-vars
6294 Tell the copyrename pass (see -ftree-copyrename) to attempt to
6295 combine small user-defined variables too, but only if they were
6296 inlined from other functions. It is a more limited form of
6297 -ftree-coalesce-vars. This may harm debug information of such
6298 inlined variables, but it will keep variables of the inlined-into
6299 function apart from each other, such that they are more likely to
6300 contain the expected values in a debugging session. This was the
6301 default in GCC versions older than 4.7.
6302
6303 -ftree-coalesce-vars
6304 Tell the copyrename pass (see -ftree-copyrename) to attempt to
6305 combine small user-defined variables too, instead of just compiler
6306 temporaries. This may severely limit the ability to debug an
6307 optimized program compiled with -fno-var-tracking-assignments. In
6308 the negated form, this flag prevents SSA coalescing of user
6309 variables, including inlined ones. This option is enabled by
6310 default.
6311
6312 -ftree-ter
6313 Perform temporary expression replacement during the SSA->normal
6314 phase. Single use/single def temporaries are replaced at their use
6315 location with their defining expression. This results in non-
6316 GIMPLE code, but gives the expanders much more complex trees to
6317 work on resulting in better RTL generation. This is enabled by
6318 default at -O and higher.
6319
6320 -ftree-slsr
6321 Perform straight-line strength reduction on trees. This recognizes
6322 related expressions involving multiplications and replaces them by
6323 less expensive calculations when possible. This is enabled by
6324 default at -O and higher.
6325
6326 -ftree-vectorize
6327 Perform loop vectorization on trees. This flag is enabled by
6328 default at -O3.
6329
6330 -ftree-slp-vectorize
6331 Perform basic block vectorization on trees. This flag is enabled by
6332 default at -O3 and when -ftree-vectorize is enabled.
6333
6334 -ftree-vect-loop-version
6335 Perform loop versioning when doing loop vectorization on trees.
6336 When a loop appears to be vectorizable except that data alignment
6337 or data dependence cannot be determined at compile time, then
6338 vectorized and non-vectorized versions of the loop are generated
6339 along with run-time checks for alignment or dependence to control
6340 which version is executed. This option is enabled by default
6341 except at level -Os where it is disabled.
6342
6343 -fvect-cost-model
6344 Enable cost model for vectorization. This option is enabled by
6345 default at -O3.
6346
6347 -ftree-vrp
6348 Perform Value Range Propagation on trees. This is similar to the
6349 constant propagation pass, but instead of values, ranges of values
6350 are propagated. This allows the optimizers to remove unnecessary
6351 range checks like array bound checks and null pointer checks. This
6352 is enabled by default at -O2 and higher. Null pointer check
6353 elimination is only done if -fdelete-null-pointer-checks is
6354 enabled.
6355
6356 -ftracer
6357 Perform tail duplication to enlarge superblock size. This
6358 transformation simplifies the control flow of the function allowing
6359 other optimizations to do a better job.
6360
6361 -funroll-loops
6362 Unroll loops whose number of iterations can be determined at
6363 compile time or upon entry to the loop. -funroll-loops implies
6364 -frerun-cse-after-loop. This option makes code larger, and may or
6365 may not make it run faster.
6366
6367 -funroll-all-loops
6368 Unroll all loops, even if their number of iterations is uncertain
6369 when the loop is entered. This usually makes programs run more
6370 slowly. -funroll-all-loops implies the same options as
6371 -funroll-loops,
6372
6373 -fsplit-ivs-in-unroller
6374 Enables expression of values of induction variables in later
6375 iterations of the unrolled loop using the value in the first
6376 iteration. This breaks long dependency chains, thus improving
6377 efficiency of the scheduling passes.
6378
6379 A combination of -fweb and CSE is often sufficient to obtain the
6380 same effect. However, that is not reliable in cases where the loop
6381 body is more complicated than a single basic block. It also does
6382 not work at all on some architectures due to restrictions in the
6383 CSE pass.
6384
6385 This optimization is enabled by default.
6386
6387 -fvariable-expansion-in-unroller
6388 With this option, the compiler creates multiple copies of some
6389 local variables when unrolling a loop, which can result in superior
6390 code.
6391
6392 -fpartial-inlining
6393 Inline parts of functions. This option has any effect only when
6394 inlining itself is turned on by the -finline-functions or
6395 -finline-small-functions options.
6396
6397 Enabled at level -O2.
6398
6399 -fpredictive-commoning
6400 Perform predictive commoning optimization, i.e., reusing
6401 computations (especially memory loads and stores) performed in
6402 previous iterations of loops.
6403
6404 This option is enabled at level -O3.
6405
6406 -fprefetch-loop-arrays
6407 If supported by the target machine, generate instructions to
6408 prefetch memory to improve the performance of loops that access
6409 large arrays.
6410
6411 This option may generate better or worse code; results are highly
6412 dependent on the structure of loops within the source code.
6413
6414 Disabled at level -Os.
6415
6416 -fno-peephole
6417 -fno-peephole2
6418 Disable any machine-specific peephole optimizations. The
6419 difference between -fno-peephole and -fno-peephole2 is in how they
6420 are implemented in the compiler; some targets use one, some use the
6421 other, a few use both.
6422
6423 -fpeephole is enabled by default. -fpeephole2 enabled at levels
6424 -O2, -O3, -Os.
6425
6426 -fno-guess-branch-probability
6427 Do not guess branch probabilities using heuristics.
6428
6429 GCC uses heuristics to guess branch probabilities if they are not
6430 provided by profiling feedback (-fprofile-arcs). These heuristics
6431 are based on the control flow graph. If some branch probabilities
6432 are specified by __builtin_expect, then the heuristics are used to
6433 guess branch probabilities for the rest of the control flow graph,
6434 taking the __builtin_expect info into account. The interactions
6435 between the heuristics and __builtin_expect can be complex, and in
6436 some cases, it may be useful to disable the heuristics so that the
6437 effects of __builtin_expect are easier to understand.
6438
6439 The default is -fguess-branch-probability at levels -O, -O2, -O3,
6440 -Os.
6441
6442 -freorder-blocks
6443 Reorder basic blocks in the compiled function in order to reduce
6444 number of taken branches and improve code locality.
6445
6446 Enabled at levels -O2, -O3.
6447
6448 -freorder-blocks-and-partition
6449 In addition to reordering basic blocks in the compiled function, in
6450 order to reduce number of taken branches, partitions hot and cold
6451 basic blocks into separate sections of the assembly and .o files,
6452 to improve paging and cache locality performance.
6453
6454 This optimization is automatically turned off in the presence of
6455 exception handling, for linkonce sections, for functions with a
6456 user-defined section attribute and on any architecture that does
6457 not support named sections.
6458
6459 -freorder-functions
6460 Reorder functions in the object file in order to improve code
6461 locality. This is implemented by using special subsections
6462 ".text.hot" for most frequently executed functions and
6463 ".text.unlikely" for unlikely executed functions. Reordering is
6464 done by the linker so object file format must support named
6465 sections and linker must place them in a reasonable way.
6466
6467 Also profile feedback must be available to make this option
6468 effective. See -fprofile-arcs for details.
6469
6470 Enabled at levels -O2, -O3, -Os.
6471
6472 -fstrict-aliasing
6473 Allow the compiler to assume the strictest aliasing rules
6474 applicable to the language being compiled. For C (and C++), this
6475 activates optimizations based on the type of expressions. In
6476 particular, an object of one type is assumed never to reside at the
6477 same address as an object of a different type, unless the types are
6478 almost the same. For example, an "unsigned int" can alias an
6479 "int", but not a "void*" or a "double". A character type may alias
6480 any other type.
6481
6482 Pay special attention to code like this:
6483
6484 union a_union {
6485 int i;
6486 double d;
6487 };
6488
6489 int f() {
6490 union a_union t;
6491 t.d = 3.0;
6492 return t.i;
6493 }
6494
6495 The practice of reading from a different union member than the one
6496 most recently written to (called "type-punning") is common. Even
6497 with -fstrict-aliasing, type-punning is allowed, provided the
6498 memory is accessed through the union type. So, the code above
6499 works as expected. However, this code might not:
6500
6501 int f() {
6502 union a_union t;
6503 int* ip;
6504 t.d = 3.0;
6505 ip = &t.i;
6506 return *ip;
6507 }
6508
6509 Similarly, access by taking the address, casting the resulting
6510 pointer and dereferencing the result has undefined behavior, even
6511 if the cast uses a union type, e.g.:
6512
6513 int f() {
6514 double d = 3.0;
6515 return ((union a_union *) &d)->i;
6516 }
6517
6518 The -fstrict-aliasing option is enabled at levels -O2, -O3, -Os.
6519
6520 -fstrict-overflow
6521 Allow the compiler to assume strict signed overflow rules,
6522 depending on the language being compiled. For C (and C++) this
6523 means that overflow when doing arithmetic with signed numbers is
6524 undefined, which means that the compiler may assume that it does
6525 not happen. This permits various optimizations. For example, the
6526 compiler assumes that an expression like "i + 10 > i" is always
6527 true for signed "i". This assumption is only valid if signed
6528 overflow is undefined, as the expression is false if "i + 10"
6529 overflows when using twos complement arithmetic. When this option
6530 is in effect any attempt to determine whether an operation on
6531 signed numbers overflows must be written carefully to not actually
6532 involve overflow.
6533
6534 This option also allows the compiler to assume strict pointer
6535 semantics: given a pointer to an object, if adding an offset to
6536 that pointer does not produce a pointer to the same object, the
6537 addition is undefined. This permits the compiler to conclude that
6538 "p + u > p" is always true for a pointer "p" and unsigned integer
6539 "u". This assumption is only valid because pointer wraparound is
6540 undefined, as the expression is false if "p + u" overflows using
6541 twos complement arithmetic.
6542
6543 See also the -fwrapv option. Using -fwrapv means that integer
6544 signed overflow is fully defined: it wraps. When -fwrapv is used,
6545 there is no difference between -fstrict-overflow and
6546 -fno-strict-overflow for integers. With -fwrapv certain types of
6547 overflow are permitted. For example, if the compiler gets an
6548 overflow when doing arithmetic on constants, the overflowed value
6549 can still be used with -fwrapv, but not otherwise.
6550
6551 The -fstrict-overflow option is enabled at levels -O2, -O3, -Os.
6552
6553 -falign-functions
6554 -falign-functions=n
6555 Align the start of functions to the next power-of-two greater than
6556 n, skipping up to n bytes. For instance, -falign-functions=32
6557 aligns functions to the next 32-byte boundary, but
6558 -falign-functions=24 aligns to the next 32-byte boundary only if
6559 this can be done by skipping 23 bytes or less.
6560
6561 -fno-align-functions and -falign-functions=1 are equivalent and
6562 mean that functions are not aligned.
6563
6564 Some assemblers only support this flag when n is a power of two; in
6565 that case, it is rounded up.
6566
6567 If n is not specified or is zero, use a machine-dependent default.
6568
6569 Enabled at levels -O2, -O3.
6570
6571 -falign-labels
6572 -falign-labels=n
6573 Align all branch targets to a power-of-two boundary, skipping up to
6574 n bytes like -falign-functions. This option can easily make code
6575 slower, because it must insert dummy operations for when the branch
6576 target is reached in the usual flow of the code.
6577
6578 -fno-align-labels and -falign-labels=1 are equivalent and mean that
6579 labels are not aligned.
6580
6581 If -falign-loops or -falign-jumps are applicable and are greater
6582 than this value, then their values are used instead.
6583
6584 If n is not specified or is zero, use a machine-dependent default
6585 which is very likely to be 1, meaning no alignment.
6586
6587 Enabled at levels -O2, -O3.
6588
6589 -falign-loops
6590 -falign-loops=n
6591 Align loops to a power-of-two boundary, skipping up to n bytes like
6592 -falign-functions. If the loops are executed many times, this
6593 makes up for any execution of the dummy operations.
6594
6595 -fno-align-loops and -falign-loops=1 are equivalent and mean that
6596 loops are not aligned.
6597
6598 If n is not specified or is zero, use a machine-dependent default.
6599
6600 Enabled at levels -O2, -O3.
6601
6602 -falign-jumps
6603 -falign-jumps=n
6604 Align branch targets to a power-of-two boundary, for branch targets
6605 where the targets can only be reached by jumping, skipping up to n
6606 bytes like -falign-functions. In this case, no dummy operations
6607 need be executed.
6608
6609 -fno-align-jumps and -falign-jumps=1 are equivalent and mean that
6610 loops are not aligned.
6611
6612 If n is not specified or is zero, use a machine-dependent default.
6613
6614 Enabled at levels -O2, -O3.
6615
6616 -funit-at-a-time
6617 This option is left for compatibility reasons. -funit-at-a-time has
6618 no effect, while -fno-unit-at-a-time implies -fno-toplevel-reorder
6619 and -fno-section-anchors.
6620
6621 Enabled by default.
6622
6623 -fno-toplevel-reorder
6624 Do not reorder top-level functions, variables, and "asm"
6625 statements. Output them in the same order that they appear in the
6626 input file. When this option is used, unreferenced static
6627 variables are not removed. This option is intended to support
6628 existing code that relies on a particular ordering. For new code,
6629 it is better to use attributes.
6630
6631 Enabled at level -O0. When disabled explicitly, it also implies
6632 -fno-section-anchors, which is otherwise enabled at -O0 on some
6633 targets.
6634
6635 -fweb
6636 Constructs webs as commonly used for register allocation purposes
6637 and assign each web individual pseudo register. This allows the
6638 register allocation pass to operate on pseudos directly, but also
6639 strengthens several other optimization passes, such as CSE, loop
6640 optimizer and trivial dead code remover. It can, however, make
6641 debugging impossible, since variables no longer stay in a "home
6642 register".
6643
6644 Enabled by default with -funroll-loops.
6645
6646 -fwhole-program
6647 Assume that the current compilation unit represents the whole
6648 program being compiled. All public functions and variables with
6649 the exception of "main" and those merged by attribute
6650 "externally_visible" become static functions and in effect are
6651 optimized more aggressively by interprocedural optimizers.
6652
6653 This option should not be used in combination with "-flto".
6654 Instead relying on a linker plugin should provide safer and more
6655 precise information.
6656
6657 -flto[=n]
6658 This option runs the standard link-time optimizer. When invoked
6659 with source code, it generates GIMPLE (one of GCC's internal
6660 representations) and writes it to special ELF sections in the
6661 object file. When the object files are linked together, all the
6662 function bodies are read from these ELF sections and instantiated
6663 as if they had been part of the same translation unit.
6664
6665 To use the link-time optimizer, -flto needs to be specified at
6666 compile time and during the final link. For example:
6667
6668 gcc -c -O2 -flto foo.c
6669 gcc -c -O2 -flto bar.c
6670 gcc -o myprog -flto -O2 foo.o bar.o
6671
6672 The first two invocations to GCC save a bytecode representation of
6673 GIMPLE into special ELF sections inside foo.o and bar.o. The final
6674 invocation reads the GIMPLE bytecode from foo.o and bar.o, merges
6675 the two files into a single internal image, and compiles the result
6676 as usual. Since both foo.o and bar.o are merged into a single
6677 image, this causes all the interprocedural analyses and
6678 optimizations in GCC to work across the two files as if they were a
6679 single one. This means, for example, that the inliner is able to
6680 inline functions in bar.o into functions in foo.o and vice-versa.
6681
6682 Another (simpler) way to enable link-time optimization is:
6683
6684 gcc -o myprog -flto -O2 foo.c bar.c
6685
6686 The above generates bytecode for foo.c and bar.c, merges them
6687 together into a single GIMPLE representation and optimizes them as
6688 usual to produce myprog.
6689
6690 The only important thing to keep in mind is that to enable link-
6691 time optimizations the -flto flag needs to be passed to both the
6692 compile and the link commands.
6693
6694 To make whole program optimization effective, it is necessary to
6695 make certain whole program assumptions. The compiler needs to know
6696 what functions and variables can be accessed by libraries and
6697 runtime outside of the link-time optimized unit. When supported by
6698 the linker, the linker plugin (see -fuse-linker-plugin) passes
6699 information to the compiler about used and externally visible
6700 symbols. When the linker plugin is not available, -fwhole-program
6701 should be used to allow the compiler to make these assumptions,
6702 which leads to more aggressive optimization decisions.
6703
6704 Note that when a file is compiled with -flto, the generated object
6705 file is larger than a regular object file because it contains
6706 GIMPLE bytecodes and the usual final code. This means that object
6707 files with LTO information can be linked as normal object files; if
6708 -flto is not passed to the linker, no interprocedural optimizations
6709 are applied.
6710
6711 Additionally, the optimization flags used to compile individual
6712 files are not necessarily related to those used at link time. For
6713 instance,
6714
6715 gcc -c -O0 -flto foo.c
6716 gcc -c -O0 -flto bar.c
6717 gcc -o myprog -flto -O3 foo.o bar.o
6718
6719 This produces individual object files with unoptimized assembler
6720 code, but the resulting binary myprog is optimized at -O3. If,
6721 instead, the final binary is generated without -flto, then myprog
6722 is not optimized.
6723
6724 When producing the final binary with -flto, GCC only applies link-
6725 time optimizations to those files that contain bytecode.
6726 Therefore, you can mix and match object files and libraries with
6727 GIMPLE bytecodes and final object code. GCC automatically selects
6728 which files to optimize in LTO mode and which files to link without
6729 further processing.
6730
6731 There are some code generation flags preserved by GCC when
6732 generating bytecodes, as they need to be used during the final link
6733 stage. Currently, the following options are saved into the GIMPLE
6734 bytecode files: -fPIC, -fcommon and all the -m target flags.
6735
6736 At link time, these options are read in and reapplied. Note that
6737 the current implementation makes no attempt to recognize
6738 conflicting values for these options. If different files have
6739 conflicting option values (e.g., one file is compiled with -fPIC
6740 and another isn't), the compiler simply uses the last value read
6741 from the bytecode files. It is recommended, then, that you compile
6742 all the files participating in the same link with the same options.
6743
6744 If LTO encounters objects with C linkage declared with incompatible
6745 types in separate translation units to be linked together
6746 (undefined behavior according to ISO C99 6.2.7), a non-fatal
6747 diagnostic may be issued. The behavior is still undefined at run
6748 time.
6749
6750 Another feature of LTO is that it is possible to apply
6751 interprocedural optimizations on files written in different
6752 languages. This requires support in the language front end.
6753 Currently, the C, C++ and Fortran front ends are capable of
6754 emitting GIMPLE bytecodes, so something like this should work:
6755
6756 gcc -c -flto foo.c
6757 g++ -c -flto bar.cc
6758 gfortran -c -flto baz.f90
6759 g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran
6760
6761 Notice that the final link is done with g++ to get the C++ runtime
6762 libraries and -lgfortran is added to get the Fortran runtime
6763 libraries. In general, when mixing languages in LTO mode, you
6764 should use the same link command options as when mixing languages
6765 in a regular (non-LTO) compilation; all you need to add is -flto to
6766 all the compile and link commands.
6767
6768 If object files containing GIMPLE bytecode are stored in a library
6769 archive, say libfoo.a, it is possible to extract and use them in an
6770 LTO link if you are using a linker with plugin support. To enable
6771 this feature, use the flag -fuse-linker-plugin at link time:
6772
6773 gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo
6774
6775 With the linker plugin enabled, the linker extracts the needed
6776 GIMPLE files from libfoo.a and passes them on to the running GCC to
6777 make them part of the aggregated GIMPLE image to be optimized.
6778
6779 If you are not using a linker with plugin support and/or do not
6780 enable the linker plugin, then the objects inside libfoo.a are
6781 extracted and linked as usual, but they do not participate in the
6782 LTO optimization process.
6783
6784 Link-time optimizations do not require the presence of the whole
6785 program to operate. If the program does not require any symbols to
6786 be exported, it is possible to combine -flto and -fwhole-program to
6787 allow the interprocedural optimizers to use more aggressive
6788 assumptions which may lead to improved optimization opportunities.
6789 Use of -fwhole-program is not needed when linker plugin is active
6790 (see -fuse-linker-plugin).
6791
6792 The current implementation of LTO makes no attempt to generate
6793 bytecode that is portable between different types of hosts. The
6794 bytecode files are versioned and there is a strict version check,
6795 so bytecode files generated in one version of GCC will not work
6796 with an older/newer version of GCC.
6797
6798 Link-time optimization does not work well with generation of
6799 debugging information. Combining -flto with -g is currently
6800 experimental and expected to produce wrong results.
6801
6802 If you specify the optional n, the optimization and code generation
6803 done at link time is executed in parallel using n parallel jobs by
6804 utilizing an installed make program. The environment variable MAKE
6805 may be used to override the program used. The default value for n
6806 is 1.
6807
6808 You can also specify -flto=jobserver to use GNU make's job server
6809 mode to determine the number of parallel jobs. This is useful when
6810 the Makefile calling GCC is already executing in parallel. You
6811 must prepend a + to the command recipe in the parent Makefile for
6812 this to work. This option likely only works if MAKE is GNU make.
6813
6814 This option is disabled by default.
6815
6816 -flto-partition=alg
6817 Specify the partitioning algorithm used by the link-time optimizer.
6818 The value is either "1to1" to specify a partitioning mirroring the
6819 original source files or "balanced" to specify partitioning into
6820 equally sized chunks (whenever possible) or "max" to create new
6821 partition for every symbol where possible. Specifying "none" as an
6822 algorithm disables partitioning and streaming completely. The
6823 default value is "balanced". While "1to1" can be used as an
6824 workaround for various code ordering issues, the "max" partitioning
6825 is intended for internal testing only.
6826
6827 -flto-compression-level=n
6828 This option specifies the level of compression used for
6829 intermediate language written to LTO object files, and is only
6830 meaningful in conjunction with LTO mode (-flto). Valid values are
6831 0 (no compression) to 9 (maximum compression). Values outside this
6832 range are clamped to either 0 or 9. If the option is not given, a
6833 default balanced compression setting is used.
6834
6835 -flto-report
6836 Prints a report with internal details on the workings of the link-
6837 time optimizer. The contents of this report vary from version to
6838 version. It is meant to be useful to GCC developers when
6839 processing object files in LTO mode (via -flto).
6840
6841 Disabled by default.
6842
6843 -fuse-linker-plugin
6844 Enables the use of a linker plugin during link-time optimization.
6845 This option relies on plugin support in the linker, which is
6846 available in gold or in GNU ld 2.21 or newer.
6847
6848 This option enables the extraction of object files with GIMPLE
6849 bytecode out of library archives. This improves the quality of
6850 optimization by exposing more code to the link-time optimizer.
6851 This information specifies what symbols can be accessed externally
6852 (by non-LTO object or during dynamic linking). Resulting code
6853 quality improvements on binaries (and shared libraries that use
6854 hidden visibility) are similar to "-fwhole-program". See -flto for
6855 a description of the effect of this flag and how to use it.
6856
6857 This option is enabled by default when LTO support in GCC is
6858 enabled and GCC was configured for use with a linker supporting
6859 plugins (GNU ld 2.21 or newer or gold).
6860
6861 -ffat-lto-objects
6862 Fat LTO objects are object files that contain both the intermediate
6863 language and the object code. This makes them usable for both LTO
6864 linking and normal linking. This option is effective only when
6865 compiling with -flto and is ignored at link time.
6866
6867 -fno-fat-lto-objects improves compilation time over plain LTO, but
6868 requires the complete toolchain to be aware of LTO. It requires a
6869 linker with linker plugin support for basic functionality.
6870 Additionally, nm, ar and ranlib need to support linker plugins to
6871 allow a full-featured build environment (capable of building static
6872 libraries etc). GCC provides the gcc-ar, gcc-nm, gcc-ranlib
6873 wrappers to pass the right options to these tools. With non fat LTO
6874 makefiles need to be modified to use them.
6875
6876 The default is -ffat-lto-objects but this default is intended to
6877 change in future releases when linker plugin enabled environments
6878 become more common.
6879
6880 -fcompare-elim
6881 After register allocation and post-register allocation instruction
6882 splitting, identify arithmetic instructions that compute processor
6883 flags similar to a comparison operation based on that arithmetic.
6884 If possible, eliminate the explicit comparison operation.
6885
6886 This pass only applies to certain targets that cannot explicitly
6887 represent the comparison operation before register allocation is
6888 complete.
6889
6890 Enabled at levels -O, -O2, -O3, -Os.
6891
6892 -fuse-ld=bfd
6893 Use the bfd linker instead of the default linker.
6894
6895 -fuse-ld=gold
6896 Use the gold linker instead of the default linker.
6897
6898 -fcprop-registers
6899 After register allocation and post-register allocation instruction
6900 splitting, perform a copy-propagation pass to try to reduce
6901 scheduling dependencies and occasionally eliminate the copy.
6902
6903 Enabled at levels -O, -O2, -O3, -Os.
6904
6905 -fprofile-correction
6906 Profiles collected using an instrumented binary for multi-threaded
6907 programs may be inconsistent due to missed counter updates. When
6908 this option is specified, GCC uses heuristics to correct or smooth
6909 out such inconsistencies. By default, GCC emits an error message
6910 when an inconsistent profile is detected.
6911
6912 -fprofile-dir=path
6913 Set the directory to search for the profile data files in to path.
6914 This option affects only the profile data generated by
6915 -fprofile-generate, -ftest-coverage, -fprofile-arcs and used by
6916 -fprofile-use and -fbranch-probabilities and its related options.
6917 Both absolute and relative paths can be used. By default, GCC uses
6918 the current directory as path, thus the profile data file appears
6919 in the same directory as the object file.
6920
6921 -fprofile-generate
6922 -fprofile-generate=path
6923 Enable options usually used for instrumenting application to
6924 produce profile useful for later recompilation with profile
6925 feedback based optimization. You must use -fprofile-generate both
6926 when compiling and when linking your program.
6927
6928 The following options are enabled: "-fprofile-arcs",
6929 "-fprofile-values", "-fvpt".
6930
6931 If path is specified, GCC looks at the path to find the profile
6932 feedback data files. See -fprofile-dir.
6933
6934 -fprofile-use
6935 -fprofile-use=path
6936 Enable profile feedback directed optimizations, and optimizations
6937 generally profitable only with profile feedback available.
6938
6939 The following options are enabled: "-fbranch-probabilities",
6940 "-fvpt", "-funroll-loops", "-fpeel-loops", "-ftracer",
6941 "-ftree-vectorize", "ftree-loop-distribute-patterns"
6942
6943 By default, GCC emits an error message if the feedback profiles do
6944 not match the source code. This error can be turned into a warning
6945 by using -Wcoverage-mismatch. Note this may result in poorly
6946 optimized code.
6947
6948 If path is specified, GCC looks at the path to find the profile
6949 feedback data files. See -fprofile-dir.
6950
6951 The following options control compiler behavior regarding floating-
6952 point arithmetic. These options trade off between speed and
6953 correctness. All must be specifically enabled.
6954
6955 -ffloat-store
6956 Do not store floating-point variables in registers, and inhibit
6957 other options that might change whether a floating-point value is
6958 taken from a register or memory.
6959
6960 This option prevents undesirable excess precision on machines such
6961 as the 68000 where the floating registers (of the 68881) keep more
6962 precision than a "double" is supposed to have. Similarly for the
6963 x86 architecture. For most programs, the excess precision does
6964 only good, but a few programs rely on the precise definition of
6965 IEEE floating point. Use -ffloat-store for such programs, after
6966 modifying them to store all pertinent intermediate computations
6967 into variables.
6968
6969 -fexcess-precision=style
6970 This option allows further control over excess precision on
6971 machines where floating-point registers have more precision than
6972 the IEEE "float" and "double" types and the processor does not
6973 support operations rounding to those types. By default,
6974 -fexcess-precision=fast is in effect; this means that operations
6975 are carried out in the precision of the registers and that it is
6976 unpredictable when rounding to the types specified in the source
6977 code takes place. When compiling C, if -fexcess-precision=standard
6978 is specified then excess precision follows the rules specified in
6979 ISO C99; in particular, both casts and assignments cause values to
6980 be rounded to their semantic types (whereas -ffloat-store only
6981 affects assignments). This option is enabled by default for C if a
6982 strict conformance option such as -std=c99 is used.
6983
6984 -fexcess-precision=standard is not implemented for languages other
6985 than C, and has no effect if -funsafe-math-optimizations or
6986 -ffast-math is specified. On the x86, it also has no effect if
6987 -mfpmath=sse or -mfpmath=sse+387 is specified; in the former case,
6988 IEEE semantics apply without excess precision, and in the latter,
6989 rounding is unpredictable.
6990
6991 -ffast-math
6992 Sets -fno-math-errno, -funsafe-math-optimizations,
6993 -ffinite-math-only, -fno-rounding-math, -fno-signaling-nans and
6994 -fcx-limited-range.
6995
6996 This option causes the preprocessor macro "__FAST_MATH__" to be
6997 defined.
6998
6999 This option is not turned on by any -O option besides -Ofast since
7000 it can result in incorrect output for programs that depend on an
7001 exact implementation of IEEE or ISO rules/specifications for math
7002 functions. It may, however, yield faster code for programs that do
7003 not require the guarantees of these specifications.
7004
7005 -fno-math-errno
7006 Do not set "errno" after calling math functions that are executed
7007 with a single instruction, e.g., "sqrt". A program that relies on
7008 IEEE exceptions for math error handling may want to use this flag
7009 for speed while maintaining IEEE arithmetic compatibility.
7010
7011 This option is not turned on by any -O option since it can result
7012 in incorrect output for programs that depend on an exact
7013 implementation of IEEE or ISO rules/specifications for math
7014 functions. It may, however, yield faster code for programs that do
7015 not require the guarantees of these specifications.
7016
7017 The default is -fmath-errno.
7018
7019 On Darwin systems, the math library never sets "errno". There is
7020 therefore no reason for the compiler to consider the possibility
7021 that it might, and -fno-math-errno is the default.
7022
7023 -funsafe-math-optimizations
7024 Allow optimizations for floating-point arithmetic that (a) assume
7025 that arguments and results are valid and (b) may violate IEEE or
7026 ANSI standards. When used at link-time, it may include libraries
7027 or startup files that change the default FPU control word or other
7028 similar optimizations.
7029
7030 This option is not turned on by any -O option since it can result
7031 in incorrect output for programs that depend on an exact
7032 implementation of IEEE or ISO rules/specifications for math
7033 functions. It may, however, yield faster code for programs that do
7034 not require the guarantees of these specifications. Enables
7035 -fno-signed-zeros, -fno-trapping-math, -fassociative-math and
7036 -freciprocal-math.
7037
7038 The default is -fno-unsafe-math-optimizations.
7039
7040 -fassociative-math
7041 Allow re-association of operands in series of floating-point
7042 operations. This violates the ISO C and C++ language standard by
7043 possibly changing computation result. NOTE: re-ordering may change
7044 the sign of zero as well as ignore NaNs and inhibit or create
7045 underflow or overflow (and thus cannot be used on code that relies
7046 on rounding behavior like "(x + 2**52) - 2**52". May also reorder
7047 floating-point comparisons and thus may not be used when ordered
7048 comparisons are required. This option requires that both
7049 -fno-signed-zeros and -fno-trapping-math be in effect. Moreover,
7050 it doesn't make much sense with -frounding-math. For Fortran the
7051 option is automatically enabled when both -fno-signed-zeros and
7052 -fno-trapping-math are in effect.
7053
7054 The default is -fno-associative-math.
7055
7056 -freciprocal-math
7057 Allow the reciprocal of a value to be used instead of dividing by
7058 the value if this enables optimizations. For example "x / y" can
7059 be replaced with "x * (1/y)", which is useful if "(1/y)" is subject
7060 to common subexpression elimination. Note that this loses
7061 precision and increases the number of flops operating on the value.
7062
7063 The default is -fno-reciprocal-math.
7064
7065 -ffinite-math-only
7066 Allow optimizations for floating-point arithmetic that assume that
7067 arguments and results are not NaNs or +-Infs.
7068
7069 This option is not turned on by any -O option since it can result
7070 in incorrect output for programs that depend on an exact
7071 implementation of IEEE or ISO rules/specifications for math
7072 functions. It may, however, yield faster code for programs that do
7073 not require the guarantees of these specifications.
7074
7075 The default is -fno-finite-math-only.
7076
7077 -fno-signed-zeros
7078 Allow optimizations for floating-point arithmetic that ignore the
7079 signedness of zero. IEEE arithmetic specifies the behavior of
7080 distinct +0.0 and -0.0 values, which then prohibits simplification
7081 of expressions such as x+0.0 or 0.0*x (even with
7082 -ffinite-math-only). This option implies that the sign of a zero
7083 result isn't significant.
7084
7085 The default is -fsigned-zeros.
7086
7087 -fno-trapping-math
7088 Compile code assuming that floating-point operations cannot
7089 generate user-visible traps. These traps include division by zero,
7090 overflow, underflow, inexact result and invalid operation. This
7091 option requires that -fno-signaling-nans be in effect. Setting
7092 this option may allow faster code if one relies on "non-stop" IEEE
7093 arithmetic, for example.
7094
7095 This option should never be turned on by any -O option since it can
7096 result in incorrect output for programs that depend on an exact
7097 implementation of IEEE or ISO rules/specifications for math
7098 functions.
7099
7100 The default is -ftrapping-math.
7101
7102 -frounding-math
7103 Disable transformations and optimizations that assume default
7104 floating-point rounding behavior. This is round-to-zero for all
7105 floating point to integer conversions, and round-to-nearest for all
7106 other arithmetic truncations. This option should be specified for
7107 programs that change the FP rounding mode dynamically, or that may
7108 be executed with a non-default rounding mode. This option disables
7109 constant folding of floating-point expressions at compile time
7110 (which may be affected by rounding mode) and arithmetic
7111 transformations that are unsafe in the presence of sign-dependent
7112 rounding modes.
7113
7114 The default is -fno-rounding-math.
7115
7116 This option is experimental and does not currently guarantee to
7117 disable all GCC optimizations that are affected by rounding mode.
7118 Future versions of GCC may provide finer control of this setting
7119 using C99's "FENV_ACCESS" pragma. This command-line option will be
7120 used to specify the default state for "FENV_ACCESS".
7121
7122 -fsignaling-nans
7123 Compile code assuming that IEEE signaling NaNs may generate user-
7124 visible traps during floating-point operations. Setting this
7125 option disables optimizations that may change the number of
7126 exceptions visible with signaling NaNs. This option implies
7127 -ftrapping-math.
7128
7129 This option causes the preprocessor macro "__SUPPORT_SNAN__" to be
7130 defined.
7131
7132 The default is -fno-signaling-nans.
7133
7134 This option is experimental and does not currently guarantee to
7135 disable all GCC optimizations that affect signaling NaN behavior.
7136
7137 -fsingle-precision-constant
7138 Treat floating-point constants as single precision instead of
7139 implicitly converting them to double-precision constants.
7140
7141 -fcx-limited-range
7142 When enabled, this option states that a range reduction step is not
7143 needed when performing complex division. Also, there is no
7144 checking whether the result of a complex multiplication or division
7145 is "NaN + I*NaN", with an attempt to rescue the situation in that
7146 case. The default is -fno-cx-limited-range, but is enabled by
7147 -ffast-math.
7148
7149 This option controls the default setting of the ISO C99
7150 "CX_LIMITED_RANGE" pragma. Nevertheless, the option applies to all
7151 languages.
7152
7153 -fcx-fortran-rules
7154 Complex multiplication and division follow Fortran rules. Range
7155 reduction is done as part of complex division, but there is no
7156 checking whether the result of a complex multiplication or division
7157 is "NaN + I*NaN", with an attempt to rescue the situation in that
7158 case.
7159
7160 The default is -fno-cx-fortran-rules.
7161
7162 The following options control optimizations that may improve
7163 performance, but are not enabled by any -O options. This section
7164 includes experimental options that may produce broken code.
7165
7166 -fbranch-probabilities
7167 After running a program compiled with -fprofile-arcs, you can
7168 compile it a second time using -fbranch-probabilities, to improve
7169 optimizations based on the number of times each branch was taken.
7170 When a program compiled with -fprofile-arcs exits, it saves arc
7171 execution counts to a file called sourcename.gcda for each source
7172 file. The information in this data file is very dependent on the
7173 structure of the generated code, so you must use the same source
7174 code and the same optimization options for both compilations.
7175
7176 With -fbranch-probabilities, GCC puts a REG_BR_PROB note on each
7177 JUMP_INSN and CALL_INSN. These can be used to improve
7178 optimization. Currently, they are only used in one place: in
7179 reorg.c, instead of guessing which path a branch is most likely to
7180 take, the REG_BR_PROB values are used to exactly determine which
7181 path is taken more often.
7182
7183 -fprofile-values
7184 If combined with -fprofile-arcs, it adds code so that some data
7185 about values of expressions in the program is gathered.
7186
7187 With -fbranch-probabilities, it reads back the data gathered from
7188 profiling values of expressions for usage in optimizations.
7189
7190 Enabled with -fprofile-generate and -fprofile-use.
7191
7192 -fvpt
7193 If combined with -fprofile-arcs, this option instructs the compiler
7194 to add code to gather information about values of expressions.
7195
7196 With -fbranch-probabilities, it reads back the data gathered and
7197 actually performs the optimizations based on them. Currently the
7198 optimizations include specialization of division operations using
7199 the knowledge about the value of the denominator.
7200
7201 -frename-registers
7202 Attempt to avoid false dependencies in scheduled code by making use
7203 of registers left over after register allocation. This
7204 optimization most benefits processors with lots of registers.
7205 Depending on the debug information format adopted by the target,
7206 however, it can make debugging impossible, since variables no
7207 longer stay in a "home register".
7208
7209 Enabled by default with -funroll-loops and -fpeel-loops.
7210
7211 -ftracer
7212 Perform tail duplication to enlarge superblock size. This
7213 transformation simplifies the control flow of the function allowing
7214 other optimizations to do a better job.
7215
7216 Enabled with -fprofile-use.
7217
7218 -funroll-loops
7219 Unroll loops whose number of iterations can be determined at
7220 compile time or upon entry to the loop. -funroll-loops implies
7221 -frerun-cse-after-loop, -fweb and -frename-registers. It also
7222 turns on complete loop peeling (i.e. complete removal of loops with
7223 a small constant number of iterations). This option makes code
7224 larger, and may or may not make it run faster.
7225
7226 Enabled with -fprofile-use.
7227
7228 -funroll-all-loops
7229 Unroll all loops, even if their number of iterations is uncertain
7230 when the loop is entered. This usually makes programs run more
7231 slowly. -funroll-all-loops implies the same options as
7232 -funroll-loops.
7233
7234 -fpeel-loops
7235 Peels loops for which there is enough information that they do not
7236 roll much (from profile feedback). It also turns on complete loop
7237 peeling (i.e. complete removal of loops with small constant number
7238 of iterations).
7239
7240 Enabled with -fprofile-use.
7241
7242 -fmove-loop-invariants
7243 Enables the loop invariant motion pass in the RTL loop optimizer.
7244 Enabled at level -O1
7245
7246 -funswitch-loops
7247 Move branches with loop invariant conditions out of the loop, with
7248 duplicates of the loop on both branches (modified according to
7249 result of the condition).
7250
7251 -ffunction-sections
7252 -fdata-sections
7253 Place each function or data item into its own section in the output
7254 file if the target supports arbitrary sections. The name of the
7255 function or the name of the data item determines the section's name
7256 in the output file.
7257
7258 Use these options on systems where the linker can perform
7259 optimizations to improve locality of reference in the instruction
7260 space. Most systems using the ELF object format and SPARC
7261 processors running Solaris 2 have linkers with such optimizations.
7262 AIX may have these optimizations in the future.
7263
7264 Only use these options when there are significant benefits from
7265 doing so. When you specify these options, the assembler and linker
7266 create larger object and executable files and are also slower. You
7267 cannot use "gprof" on all systems if you specify this option, and
7268 you may have problems with debugging if you specify both this
7269 option and -g.
7270
7271 -fbranch-target-load-optimize
7272 Perform branch target register load optimization before prologue /
7273 epilogue threading. The use of target registers can typically be
7274 exposed only during reload, thus hoisting loads out of loops and
7275 doing inter-block scheduling needs a separate optimization pass.
7276
7277 -fbranch-target-load-optimize2
7278 Perform branch target register load optimization after prologue /
7279 epilogue threading.
7280
7281 -fbtr-bb-exclusive
7282 When performing branch target register load optimization, don't
7283 reuse branch target registers within any basic block.
7284
7285 -fstack-protector
7286 Emit extra code to check for buffer overflows, such as stack
7287 smashing attacks. This is done by adding a guard variable to
7288 functions with vulnerable objects. This includes functions that
7289 call "alloca", and functions with buffers larger than 8 bytes. The
7290 guards are initialized when a function is entered and then checked
7291 when the function exits. If a guard check fails, an error message
7292 is printed and the program exits.
7293
7294 -fstack-protector-all
7295 Like -fstack-protector except that all functions are protected.
7296
7297 -fstack-protector-strong
7298 Like -fstack-protector but includes additional functions to be
7299 protected --- those that have local array definitions, or have
7300 references to local frame addresses.
7301
7302 -fsection-anchors
7303 Try to reduce the number of symbolic address calculations by using
7304 shared "anchor" symbols to address nearby objects. This
7305 transformation can help to reduce the number of GOT entries and GOT
7306 accesses on some targets.
7307
7308 For example, the implementation of the following function "foo":
7309
7310 static int a, b, c;
7311 int foo (void) { return a + b + c; }
7312
7313 usually calculates the addresses of all three variables, but if you
7314 compile it with -fsection-anchors, it accesses the variables from a
7315 common anchor point instead. The effect is similar to the
7316 following pseudocode (which isn't valid C):
7317
7318 int foo (void)
7319 {
7320 register int *xr = &x;
7321 return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
7322 }
7323
7324 Not all targets support this option.
7325
7326 --param name=value
7327 In some places, GCC uses various constants to control the amount of
7328 optimization that is done. For example, GCC does not inline
7329 functions that contain more than a certain number of instructions.
7330 You can control some of these constants on the command line using
7331 the --param option.
7332
7333 The names of specific parameters, and the meaning of the values,
7334 are tied to the internals of the compiler, and are subject to
7335 change without notice in future releases.
7336
7337 In each case, the value is an integer. The allowable choices for
7338 name are:
7339
7340 predictable-branch-outcome
7341 When branch is predicted to be taken with probability lower
7342 than this threshold (in percent), then it is considered well
7343 predictable. The default is 10.
7344
7345 max-crossjump-edges
7346 The maximum number of incoming edges to consider for cross-
7347 jumping. The algorithm used by -fcrossjumping is O(N^2) in the
7348 number of edges incoming to each block. Increasing values mean
7349 more aggressive optimization, making the compilation time
7350 increase with probably small improvement in executable size.
7351
7352 min-crossjump-insns
7353 The minimum number of instructions that must be matched at the
7354 end of two blocks before cross-jumping is performed on them.
7355 This value is ignored in the case where all instructions in the
7356 block being cross-jumped from are matched. The default value
7357 is 5.
7358
7359 max-grow-copy-bb-insns
7360 The maximum code size expansion factor when copying basic
7361 blocks instead of jumping. The expansion is relative to a jump
7362 instruction. The default value is 8.
7363
7364 max-goto-duplication-insns
7365 The maximum number of instructions to duplicate to a block that
7366 jumps to a computed goto. To avoid O(N^2) behavior in a number
7367 of passes, GCC factors computed gotos early in the compilation
7368 process, and unfactors them as late as possible. Only computed
7369 jumps at the end of a basic blocks with no more than max-goto-
7370 duplication-insns are unfactored. The default value is 8.
7371
7372 max-delay-slot-insn-search
7373 The maximum number of instructions to consider when looking for
7374 an instruction to fill a delay slot. If more than this
7375 arbitrary number of instructions are searched, the time savings
7376 from filling the delay slot are minimal, so stop searching.
7377 Increasing values mean more aggressive optimization, making the
7378 compilation time increase with probably small improvement in
7379 execution time.
7380
7381 max-delay-slot-live-search
7382 When trying to fill delay slots, the maximum number of
7383 instructions to consider when searching for a block with valid
7384 live register information. Increasing this arbitrarily chosen
7385 value means more aggressive optimization, increasing the
7386 compilation time. This parameter should be removed when the
7387 delay slot code is rewritten to maintain the control-flow
7388 graph.
7389
7390 max-gcse-memory
7391 The approximate maximum amount of memory that can be allocated
7392 in order to perform the global common subexpression elimination
7393 optimization. If more memory than specified is required, the
7394 optimization is not done.
7395
7396 max-gcse-insertion-ratio
7397 If the ratio of expression insertions to deletions is larger
7398 than this value for any expression, then RTL PRE inserts or
7399 removes the expression and thus leaves partially redundant
7400 computations in the instruction stream. The default value is
7401 20.
7402
7403 max-pending-list-length
7404 The maximum number of pending dependencies scheduling allows
7405 before flushing the current state and starting over. Large
7406 functions with few branches or calls can create excessively
7407 large lists which needlessly consume memory and resources.
7408
7409 max-modulo-backtrack-attempts
7410 The maximum number of backtrack attempts the scheduler should
7411 make when modulo scheduling a loop. Larger values can
7412 exponentially increase compilation time.
7413
7414 max-inline-insns-single
7415 Several parameters control the tree inliner used in GCC. This
7416 number sets the maximum number of instructions (counted in
7417 GCC's internal representation) in a single function that the
7418 tree inliner considers for inlining. This only affects
7419 functions declared inline and methods implemented in a class
7420 declaration (C++). The default value is 400.
7421
7422 max-inline-insns-auto
7423 When you use -finline-functions (included in -O3), a lot of
7424 functions that would otherwise not be considered for inlining
7425 by the compiler are investigated. To those functions, a
7426 different (more restrictive) limit compared to functions
7427 declared inline can be applied. The default value is 40.
7428
7429 inline-min-speedup
7430 When estimated performance improvement of caller + callee
7431 runtime exceeds this threshold (in precent), the function can
7432 be inlined regardless the limit on --param max-inline-insns-
7433 single and --param max-inline-insns-auto.
7434
7435 large-function-insns
7436 The limit specifying really large functions. For functions
7437 larger than this limit after inlining, inlining is constrained
7438 by --param large-function-growth. This parameter is useful
7439 primarily to avoid extreme compilation time caused by non-
7440 linear algorithms used by the back end. The default value is
7441 2700.
7442
7443 large-function-growth
7444 Specifies maximal growth of large function caused by inlining
7445 in percents. The default value is 100 which limits large
7446 function growth to 2.0 times the original size.
7447
7448 large-unit-insns
7449 The limit specifying large translation unit. Growth caused by
7450 inlining of units larger than this limit is limited by --param
7451 inline-unit-growth. For small units this might be too tight.
7452 For example, consider a unit consisting of function A that is
7453 inline and B that just calls A three times. If B is small
7454 relative to A, the growth of unit is 300\% and yet such
7455 inlining is very sane. For very large units consisting of
7456 small inlineable functions, however, the overall unit growth
7457 limit is needed to avoid exponential explosion of code size.
7458 Thus for smaller units, the size is increased to --param large-
7459 unit-insns before applying --param inline-unit-growth. The
7460 default is 10000.
7461
7462 inline-unit-growth
7463 Specifies maximal overall growth of the compilation unit caused
7464 by inlining. The default value is 30 which limits unit growth
7465 to 1.3 times the original size.
7466
7467 ipcp-unit-growth
7468 Specifies maximal overall growth of the compilation unit caused
7469 by interprocedural constant propagation. The default value is
7470 10 which limits unit growth to 1.1 times the original size.
7471
7472 large-stack-frame
7473 The limit specifying large stack frames. While inlining the
7474 algorithm is trying to not grow past this limit too much. The
7475 default value is 256 bytes.
7476
7477 large-stack-frame-growth
7478 Specifies maximal growth of large stack frames caused by
7479 inlining in percents. The default value is 1000 which limits
7480 large stack frame growth to 11 times the original size.
7481
7482 max-inline-insns-recursive
7483 max-inline-insns-recursive-auto
7484 Specifies the maximum number of instructions an out-of-line
7485 copy of a self-recursive inline function can grow into by
7486 performing recursive inlining.
7487
7488 For functions declared inline, --param max-inline-insns-
7489 recursive is taken into account. For functions not declared
7490 inline, recursive inlining happens only when -finline-functions
7491 (included in -O3) is enabled and --param max-inline-insns-
7492 recursive-auto is used. The default value is 450.
7493
7494 max-inline-recursive-depth
7495 max-inline-recursive-depth-auto
7496 Specifies the maximum recursion depth used for recursive
7497 inlining.
7498
7499 For functions declared inline, --param max-inline-recursive-
7500 depth is taken into account. For functions not declared
7501 inline, recursive inlining happens only when -finline-functions
7502 (included in -O3) is enabled and --param max-inline-recursive-
7503 depth-auto is used. The default value is 8.
7504
7505 min-inline-recursive-probability
7506 Recursive inlining is profitable only for function having deep
7507 recursion in average and can hurt for function having little
7508 recursion depth by increasing the prologue size or complexity
7509 of function body to other optimizers.
7510
7511 When profile feedback is available (see -fprofile-generate) the
7512 actual recursion depth can be guessed from probability that
7513 function recurses via a given call expression. This parameter
7514 limits inlining only to call expressions whose probability
7515 exceeds the given threshold (in percents). The default value
7516 is 10.
7517
7518 early-inlining-insns
7519 Specify growth that the early inliner can make. In effect it
7520 increases the amount of inlining for code having a large
7521 abstraction penalty. The default value is 10.
7522
7523 max-early-inliner-iterations
7524 max-early-inliner-iterations
7525 Limit of iterations of the early inliner. This basically
7526 bounds the number of nested indirect calls the early inliner
7527 can resolve. Deeper chains are still handled by late inlining.
7528
7529 comdat-sharing-probability
7530 comdat-sharing-probability
7531 Probability (in percent) that C++ inline function with comdat
7532 visibility are shared across multiple compilation units. The
7533 default value is 20.
7534
7535 min-vect-loop-bound
7536 The minimum number of iterations under which loops are not
7537 vectorized when -ftree-vectorize is used. The number of
7538 iterations after vectorization needs to be greater than the
7539 value specified by this option to allow vectorization. The
7540 default value is 0.
7541
7542 gcse-cost-distance-ratio
7543 Scaling factor in calculation of maximum distance an expression
7544 can be moved by GCSE optimizations. This is currently
7545 supported only in the code hoisting pass. The bigger the
7546 ratio, the more aggressive code hoisting is with simple
7547 expressions, i.e., the expressions that have cost less than
7548 gcse-unrestricted-cost. Specifying 0 disables hoisting of
7549 simple expressions. The default value is 10.
7550
7551 gcse-unrestricted-cost
7552 Cost, roughly measured as the cost of a single typical machine
7553 instruction, at which GCSE optimizations do not constrain the
7554 distance an expression can travel. This is currently supported
7555 only in the code hoisting pass. The lesser the cost, the more
7556 aggressive code hoisting is. Specifying 0 allows all
7557 expressions to travel unrestricted distances. The default
7558 value is 3.
7559
7560 max-hoist-depth
7561 The depth of search in the dominator tree for expressions to
7562 hoist. This is used to avoid quadratic behavior in hoisting
7563 algorithm. The value of 0 does not limit on the search, but
7564 may slow down compilation of huge functions. The default value
7565 is 30.
7566
7567 max-tail-merge-comparisons
7568 The maximum amount of similar bbs to compare a bb with. This
7569 is used to avoid quadratic behavior in tree tail merging. The
7570 default value is 10.
7571
7572 max-tail-merge-iterations
7573 The maximum amount of iterations of the pass over the function.
7574 This is used to limit compilation time in tree tail merging.
7575 The default value is 2.
7576
7577 max-unrolled-insns
7578 The maximum number of instructions that a loop may have to be
7579 unrolled. If a loop is unrolled, this parameter also
7580 determines how many times the loop code is unrolled.
7581
7582 max-average-unrolled-insns
7583 The maximum number of instructions biased by probabilities of
7584 their execution that a loop may have to be unrolled. If a loop
7585 is unrolled, this parameter also determines how many times the
7586 loop code is unrolled.
7587
7588 max-unroll-times
7589 The maximum number of unrollings of a single loop.
7590
7591 max-peeled-insns
7592 The maximum number of instructions that a loop may have to be
7593 peeled. If a loop is peeled, this parameter also determines
7594 how many times the loop code is peeled.
7595
7596 max-peel-times
7597 The maximum number of peelings of a single loop.
7598
7599 max-peel-branches
7600 The maximum number of branches on the hot path through the
7601 peeled sequence.
7602
7603 max-completely-peeled-insns
7604 The maximum number of insns of a completely peeled loop.
7605
7606 max-completely-peel-times
7607 The maximum number of iterations of a loop to be suitable for
7608 complete peeling.
7609
7610 max-completely-peel-loop-nest-depth
7611 The maximum depth of a loop nest suitable for complete peeling.
7612
7613 max-unswitch-insns
7614 The maximum number of insns of an unswitched loop.
7615
7616 max-unswitch-level
7617 The maximum number of branches unswitched in a single loop.
7618
7619 lim-expensive
7620 The minimum cost of an expensive expression in the loop
7621 invariant motion.
7622
7623 iv-consider-all-candidates-bound
7624 Bound on number of candidates for induction variables, below
7625 which all candidates are considered for each use in induction
7626 variable optimizations. If there are more candidates than
7627 this, only the most relevant ones are considered to avoid
7628 quadratic time complexity.
7629
7630 iv-max-considered-uses
7631 The induction variable optimizations give up on loops that
7632 contain more induction variable uses.
7633
7634 iv-always-prune-cand-set-bound
7635 If the number of candidates in the set is smaller than this
7636 value, always try to remove unnecessary ivs from the set when
7637 adding a new one.
7638
7639 scev-max-expr-size
7640 Bound on size of expressions used in the scalar evolutions
7641 analyzer. Large expressions slow the analyzer.
7642
7643 scev-max-expr-complexity
7644 Bound on the complexity of the expressions in the scalar
7645 evolutions analyzer. Complex expressions slow the analyzer.
7646
7647 omega-max-vars
7648 The maximum number of variables in an Omega constraint system.
7649 The default value is 128.
7650
7651 omega-max-geqs
7652 The maximum number of inequalities in an Omega constraint
7653 system. The default value is 256.
7654
7655 omega-max-eqs
7656 The maximum number of equalities in an Omega constraint system.
7657 The default value is 128.
7658
7659 omega-max-wild-cards
7660 The maximum number of wildcard variables that the Omega solver
7661 is able to insert. The default value is 18.
7662
7663 omega-hash-table-size
7664 The size of the hash table in the Omega solver. The default
7665 value is 550.
7666
7667 omega-max-keys
7668 The maximal number of keys used by the Omega solver. The
7669 default value is 500.
7670
7671 omega-eliminate-redundant-constraints
7672 When set to 1, use expensive methods to eliminate all redundant
7673 constraints. The default value is 0.
7674
7675 vect-max-version-for-alignment-checks
7676 The maximum number of run-time checks that can be performed
7677 when doing loop versioning for alignment in the vectorizer.
7678 See option -ftree-vect-loop-version for more information.
7679
7680 vect-max-version-for-alias-checks
7681 The maximum number of run-time checks that can be performed
7682 when doing loop versioning for alias in the vectorizer. See
7683 option -ftree-vect-loop-version for more information.
7684
7685 max-iterations-to-track
7686 The maximum number of iterations of a loop the brute-force
7687 algorithm for analysis of the number of iterations of the loop
7688 tries to evaluate.
7689
7690 hot-bb-count-ws-permille
7691 A basic block profile count is considered hot if it contributes
7692 to the given permillage (i.e. 0...1000) of the entire profiled
7693 execution.
7694
7695 hot-bb-frequency-fraction
7696 Select fraction of the entry block frequency of executions of
7697 basic block in function given basic block needs to have to be
7698 considered hot.
7699
7700 max-predicted-iterations
7701 The maximum number of loop iterations we predict statically.
7702 This is useful in cases where a function contains a single loop
7703 with known bound and another loop with unknown bound. The
7704 known number of iterations is predicted correctly, while the
7705 unknown number of iterations average to roughly 10. This means
7706 that the loop without bounds appears artificially cold relative
7707 to the other one.
7708
7709 align-threshold
7710 Select fraction of the maximal frequency of executions of a
7711 basic block in a function to align the basic block.
7712
7713 align-loop-iterations
7714 A loop expected to iterate at least the selected number of
7715 iterations is aligned.
7716
7717 tracer-dynamic-coverage
7718 tracer-dynamic-coverage-feedback
7719 This value is used to limit superblock formation once the given
7720 percentage of executed instructions is covered. This limits
7721 unnecessary code size expansion.
7722
7723 The tracer-dynamic-coverage-feedback is used only when profile
7724 feedback is available. The real profiles (as opposed to
7725 statically estimated ones) are much less balanced allowing the
7726 threshold to be larger value.
7727
7728 tracer-max-code-growth
7729 Stop tail duplication once code growth has reached given
7730 percentage. This is a rather artificial limit, as most of the
7731 duplicates are eliminated later in cross jumping, so it may be
7732 set to much higher values than is the desired code growth.
7733
7734 tracer-min-branch-ratio
7735 Stop reverse growth when the reverse probability of best edge
7736 is less than this threshold (in percent).
7737
7738 tracer-min-branch-ratio
7739 tracer-min-branch-ratio-feedback
7740 Stop forward growth if the best edge has probability lower than
7741 this threshold.
7742
7743 Similarly to tracer-dynamic-coverage two values are present,
7744 one for compilation for profile feedback and one for
7745 compilation without. The value for compilation with profile
7746 feedback needs to be more conservative (higher) in order to
7747 make tracer effective.
7748
7749 stack-clash-protection-guard-size
7750 Specify the size of the operating system provided stack guard
7751 as 2 raised to num bytes. The default value is 12 (4096
7752 bytes). Acceptable values are between 12 and 30. Higher
7753 values may reduce the number of explicit probes, but a value
7754 larger than the operating system provided guard will leave code
7755 vulnerable to stack clash style attacks.
7756
7757 stack-clash-protection-probe-interval
7758 Stack clash protection involves probing stack space as it is
7759 allocated. This param controls the maximum distance between
7760 probes into the stack as 2 raised to num bytes. Acceptable
7761 values are between 10 and 16 and defaults to 12. Higher values
7762 may reduce the number of explicit probes, but a value larger
7763 than the operating system provided guard will leave code
7764 vulnerable to stack clash style attacks.
7765
7766 max-cse-path-length
7767 The maximum number of basic blocks on path that CSE considers.
7768 The default is 10.
7769
7770 max-cse-insns
7771 The maximum number of instructions CSE processes before
7772 flushing. The default is 1000.
7773
7774 ggc-min-expand
7775 GCC uses a garbage collector to manage its own memory
7776 allocation. This parameter specifies the minimum percentage by
7777 which the garbage collector's heap should be allowed to expand
7778 between collections. Tuning this may improve compilation
7779 speed; it has no effect on code generation.
7780
7781 The default is 30% + 70% * (RAM/1GB) with an upper bound of
7782 100% when RAM >= 1GB. If "getrlimit" is available, the notion
7783 of "RAM" is the smallest of actual RAM and "RLIMIT_DATA" or
7784 "RLIMIT_AS". If GCC is not able to calculate RAM on a
7785 particular platform, the lower bound of 30% is used. Setting
7786 this parameter and ggc-min-heapsize to zero causes a full
7787 collection to occur at every opportunity. This is extremely
7788 slow, but can be useful for debugging.
7789
7790 ggc-min-heapsize
7791 Minimum size of the garbage collector's heap before it begins
7792 bothering to collect garbage. The first collection occurs
7793 after the heap expands by ggc-min-expand% beyond ggc-min-
7794 heapsize. Again, tuning this may improve compilation speed,
7795 and has no effect on code generation.
7796
7797 The default is the smaller of RAM/8, RLIMIT_RSS, or a limit
7798 that tries to ensure that RLIMIT_DATA or RLIMIT_AS are not
7799 exceeded, but with a lower bound of 4096 (four megabytes) and
7800 an upper bound of 131072 (128 megabytes). If GCC is not able
7801 to calculate RAM on a particular platform, the lower bound is
7802 used. Setting this parameter very large effectively disables
7803 garbage collection. Setting this parameter and ggc-min-expand
7804 to zero causes a full collection to occur at every opportunity.
7805
7806 max-reload-search-insns
7807 The maximum number of instruction reload should look backward
7808 for equivalent register. Increasing values mean more
7809 aggressive optimization, making the compilation time increase
7810 with probably slightly better performance. The default value
7811 is 100.
7812
7813 max-cselib-memory-locations
7814 The maximum number of memory locations cselib should take into
7815 account. Increasing values mean more aggressive optimization,
7816 making the compilation time increase with probably slightly
7817 better performance. The default value is 500.
7818
7819 reorder-blocks-duplicate
7820 reorder-blocks-duplicate-feedback
7821 Used by the basic block reordering pass to decide whether to
7822 use unconditional branch or duplicate the code on its
7823 destination. Code is duplicated when its estimated size is
7824 smaller than this value multiplied by the estimated size of
7825 unconditional jump in the hot spots of the program.
7826
7827 The reorder-block-duplicate-feedback is used only when profile
7828 feedback is available. It may be set to higher values than
7829 reorder-block-duplicate since information about the hot spots
7830 is more accurate.
7831
7832 max-sched-ready-insns
7833 The maximum number of instructions ready to be issued the
7834 scheduler should consider at any given time during the first
7835 scheduling pass. Increasing values mean more thorough
7836 searches, making the compilation time increase with probably
7837 little benefit. The default value is 100.
7838
7839 max-sched-region-blocks
7840 The maximum number of blocks in a region to be considered for
7841 interblock scheduling. The default value is 10.
7842
7843 max-pipeline-region-blocks
7844 The maximum number of blocks in a region to be considered for
7845 pipelining in the selective scheduler. The default value is
7846 15.
7847
7848 max-sched-region-insns
7849 The maximum number of insns in a region to be considered for
7850 interblock scheduling. The default value is 100.
7851
7852 max-pipeline-region-insns
7853 The maximum number of insns in a region to be considered for
7854 pipelining in the selective scheduler. The default value is
7855 200.
7856
7857 min-spec-prob
7858 The minimum probability (in percents) of reaching a source
7859 block for interblock speculative scheduling. The default value
7860 is 40.
7861
7862 max-sched-extend-regions-iters
7863 The maximum number of iterations through CFG to extend regions.
7864 A value of 0 (the default) disables region extensions.
7865
7866 max-sched-insn-conflict-delay
7867 The maximum conflict delay for an insn to be considered for
7868 speculative motion. The default value is 3.
7869
7870 sched-spec-prob-cutoff
7871 The minimal probability of speculation success (in percents),
7872 so that speculative insns are scheduled. The default value is
7873 40.
7874
7875 sched-spec-state-edge-prob-cutoff
7876 The minimum probability an edge must have for the scheduler to
7877 save its state across it. The default value is 10.
7878
7879 sched-mem-true-dep-cost
7880 Minimal distance (in CPU cycles) between store and load
7881 targeting same memory locations. The default value is 1.
7882
7883 selsched-max-lookahead
7884 The maximum size of the lookahead window of selective
7885 scheduling. It is a depth of search for available
7886 instructions. The default value is 50.
7887
7888 selsched-max-sched-times
7889 The maximum number of times that an instruction is scheduled
7890 during selective scheduling. This is the limit on the number
7891 of iterations through which the instruction may be pipelined.
7892 The default value is 2.
7893
7894 selsched-max-insns-to-rename
7895 The maximum number of best instructions in the ready list that
7896 are considered for renaming in the selective scheduler. The
7897 default value is 2.
7898
7899 sms-min-sc
7900 The minimum value of stage count that swing modulo scheduler
7901 generates. The default value is 2.
7902
7903 max-last-value-rtl
7904 The maximum size measured as number of RTLs that can be
7905 recorded in an expression in combiner for a pseudo register as
7906 last known value of that register. The default is 10000.
7907
7908 integer-share-limit
7909 Small integer constants can use a shared data structure,
7910 reducing the compiler's memory usage and increasing its speed.
7911 This sets the maximum value of a shared integer constant. The
7912 default value is 256.
7913
7914 ssp-buffer-size
7915 The minimum size of buffers (i.e. arrays) that receive stack
7916 smashing protection when -fstack-protection is used.
7917
7918 max-jump-thread-duplication-stmts
7919 Maximum number of statements allowed in a block that needs to
7920 be duplicated when threading jumps.
7921
7922 max-fields-for-field-sensitive
7923 Maximum number of fields in a structure treated in a field
7924 sensitive manner during pointer analysis. The default is zero
7925 for -O0 and -O1, and 100 for -Os, -O2, and -O3.
7926
7927 prefetch-latency
7928 Estimate on average number of instructions that are executed
7929 before prefetch finishes. The distance prefetched ahead is
7930 proportional to this constant. Increasing this number may also
7931 lead to less streams being prefetched (see simultaneous-
7932 prefetches).
7933
7934 simultaneous-prefetches
7935 Maximum number of prefetches that can run at the same time.
7936
7937 l1-cache-line-size
7938 The size of cache line in L1 cache, in bytes.
7939
7940 l1-cache-size
7941 The size of L1 cache, in kilobytes.
7942
7943 l2-cache-size
7944 The size of L2 cache, in kilobytes.
7945
7946 min-insn-to-prefetch-ratio
7947 The minimum ratio between the number of instructions and the
7948 number of prefetches to enable prefetching in a loop.
7949
7950 prefetch-min-insn-to-mem-ratio
7951 The minimum ratio between the number of instructions and the
7952 number of memory references to enable prefetching in a loop.
7953
7954 use-canonical-types
7955 Whether the compiler should use the "canonical" type system.
7956 By default, this should always be 1, which uses a more
7957 efficient internal mechanism for comparing types in C++ and
7958 Objective-C++. However, if bugs in the canonical type system
7959 are causing compilation failures, set this value to 0 to
7960 disable canonical types.
7961
7962 switch-conversion-max-branch-ratio
7963 Switch initialization conversion refuses to create arrays that
7964 are bigger than switch-conversion-max-branch-ratio times the
7965 number of branches in the switch.
7966
7967 max-partial-antic-length
7968 Maximum length of the partial antic set computed during the
7969 tree partial redundancy elimination optimization (-ftree-pre)
7970 when optimizing at -O3 and above. For some sorts of source
7971 code the enhanced partial redundancy elimination optimization
7972 can run away, consuming all of the memory available on the host
7973 machine. This parameter sets a limit on the length of the sets
7974 that are computed, which prevents the runaway behavior.
7975 Setting a value of 0 for this parameter allows an unlimited set
7976 length.
7977
7978 sccvn-max-scc-size
7979 Maximum size of a strongly connected component (SCC) during
7980 SCCVN processing. If this limit is hit, SCCVN processing for
7981 the whole function is not done and optimizations depending on
7982 it are disabled. The default maximum SCC size is 10000.
7983
7984 sccvn-max-alias-queries-per-access
7985 Maximum number of alias-oracle queries we perform when looking
7986 for redundancies for loads and stores. If this limit is hit
7987 the search is aborted and the load or store is not considered
7988 redundant. The number of queries is algorithmically limited to
7989 the number of stores on all paths from the load to the function
7990 entry. The default maxmimum number of queries is 1000.
7991
7992 ira-max-loops-num
7993 IRA uses regional register allocation by default. If a
7994 function contains more loops than the number given by this
7995 parameter, only at most the given number of the most
7996 frequently-executed loops form regions for regional register
7997 allocation. The default value of the parameter is 100.
7998
7999 ira-max-conflict-table-size
8000 Although IRA uses a sophisticated algorithm to compress the
8001 conflict table, the table can still require excessive amounts
8002 of memory for huge functions. If the conflict table for a
8003 function could be more than the size in MB given by this
8004 parameter, the register allocator instead uses a faster,
8005 simpler, and lower-quality algorithm that does not require
8006 building a pseudo-register conflict table. The default value
8007 of the parameter is 2000.
8008
8009 ira-loop-reserved-regs
8010 IRA can be used to evaluate more accurate register pressure in
8011 loops for decisions to move loop invariants (see -O3). The
8012 number of available registers reserved for some other purposes
8013 is given by this parameter. The default value of the parameter
8014 is 2, which is the minimal number of registers needed by
8015 typical instructions. This value is the best found from
8016 numerous experiments.
8017
8018 loop-invariant-max-bbs-in-loop
8019 Loop invariant motion can be very expensive, both in
8020 compilation time and in amount of needed compile-time memory,
8021 with very large loops. Loops with more basic blocks than this
8022 parameter won't have loop invariant motion optimization
8023 performed on them. The default value of the parameter is 1000
8024 for -O1 and 10000 for -O2 and above.
8025
8026 loop-max-datarefs-for-datadeps
8027 Building data dapendencies is expensive for very large loops.
8028 This parameter limits the number of data references in loops
8029 that are considered for data dependence analysis. These large
8030 loops are no handled by the optimizations using loop data
8031 dependencies. The default value is 1000.
8032
8033 max-vartrack-size
8034 Sets a maximum number of hash table slots to use during
8035 variable tracking dataflow analysis of any function. If this
8036 limit is exceeded with variable tracking at assignments
8037 enabled, analysis for that function is retried without it,
8038 after removing all debug insns from the function. If the limit
8039 is exceeded even without debug insns, var tracking analysis is
8040 completely disabled for the function. Setting the parameter to
8041 zero makes it unlimited.
8042
8043 max-vartrack-expr-depth
8044 Sets a maximum number of recursion levels when attempting to
8045 map variable names or debug temporaries to value expressions.
8046 This trades compilation time for more complete debug
8047 information. If this is set too low, value expressions that
8048 are available and could be represented in debug information may
8049 end up not being used; setting this higher may enable the
8050 compiler to find more complex debug expressions, but compile
8051 time and memory use may grow. The default is 12.
8052
8053 min-nondebug-insn-uid
8054 Use uids starting at this parameter for nondebug insns. The
8055 range below the parameter is reserved exclusively for debug
8056 insns created by -fvar-tracking-assignments, but debug insns
8057 may get (non-overlapping) uids above it if the reserved range
8058 is exhausted.
8059
8060 ipa-sra-ptr-growth-factor
8061 IPA-SRA replaces a pointer to an aggregate with one or more new
8062 parameters only when their cumulative size is less or equal to
8063 ipa-sra-ptr-growth-factor times the size of the original
8064 pointer parameter.
8065
8066 tm-max-aggregate-size
8067 When making copies of thread-local variables in a transaction,
8068 this parameter specifies the size in bytes after which
8069 variables are saved with the logging functions as opposed to
8070 save/restore code sequence pairs. This option only applies
8071 when using -fgnu-tm.
8072
8073 graphite-max-nb-scop-params
8074 To avoid exponential effects in the Graphite loop transforms,
8075 the number of parameters in a Static Control Part (SCoP) is
8076 bounded. The default value is 10 parameters. A variable whose
8077 value is unknown at compilation time and defined outside a SCoP
8078 is a parameter of the SCoP.
8079
8080 graphite-max-bbs-per-function
8081 To avoid exponential effects in the detection of SCoPs, the
8082 size of the functions analyzed by Graphite is bounded. The
8083 default value is 100 basic blocks.
8084
8085 loop-block-tile-size
8086 Loop blocking or strip mining transforms, enabled with
8087 -floop-block or -floop-strip-mine, strip mine each loop in the
8088 loop nest by a given number of iterations. The strip length
8089 can be changed using the loop-block-tile-size parameter. The
8090 default value is 51 iterations.
8091
8092 ipa-cp-value-list-size
8093 IPA-CP attempts to track all possible values and types passed
8094 to a function's parameter in order to propagate them and
8095 perform devirtualization. ipa-cp-value-list-size is the
8096 maximum number of values and types it stores per one formal
8097 parameter of a function.
8098
8099 lto-partitions
8100 Specify desired number of partitions produced during WHOPR
8101 compilation. The number of partitions should exceed the number
8102 of CPUs used for compilation. The default value is 32.
8103
8104 lto-minpartition
8105 Size of minimal partition for WHOPR (in estimated
8106 instructions). This prevents expenses of splitting very small
8107 programs into too many partitions.
8108
8109 cxx-max-namespaces-for-diagnostic-help
8110 The maximum number of namespaces to consult for suggestions
8111 when C++ name lookup fails for an identifier. The default is
8112 1000.
8113
8114 sink-frequency-threshold
8115 The maximum relative execution frequency (in percents) of the
8116 target block relative to a statement's original block to allow
8117 statement sinking of a statement. Larger numbers result in
8118 more aggressive statement sinking. The default value is 75. A
8119 small positive adjustment is applied for statements with memory
8120 operands as those are even more profitable so sink.
8121
8122 max-stores-to-sink
8123 The maximum number of conditional stores paires that can be
8124 sunk. Set to 0 if either vectorization (-ftree-vectorize) or
8125 if-conversion (-ftree-loop-if-convert) is disabled. The
8126 default is 2.
8127
8128 allow-load-data-races
8129 Allow optimizers to introduce new data races on loads. Set to
8130 1 to allow, otherwise to 0. This option is enabled by default
8131 unless implicitly set by the -fmemory-model= option.
8132
8133 allow-store-data-races
8134 Allow optimizers to introduce new data races on stores. Set to
8135 1 to allow, otherwise to 0. This option is enabled by default
8136 unless implicitly set by the -fmemory-model= option.
8137
8138 allow-packed-load-data-races
8139 Allow optimizers to introduce new data races on packed data
8140 loads. Set to 1 to allow, otherwise to 0. This option is
8141 enabled by default unless implicitly set by the -fmemory-model=
8142 option.
8143
8144 allow-packed-store-data-races
8145 Allow optimizers to introduce new data races on packed data
8146 stores. Set to 1 to allow, otherwise to 0. This option is
8147 enabled by default unless implicitly set by the -fmemory-model=
8148 option.
8149
8150 case-values-threshold
8151 The smallest number of different values for which it is best to
8152 use a jump-table instead of a tree of conditional branches. If
8153 the value is 0, use the default for the machine. The default
8154 is 0.
8155
8156 tree-reassoc-width
8157 Set the maximum number of instructions executed in parallel in
8158 reassociated tree. This parameter overrides target dependent
8159 heuristics used by default if has non zero value.
8160
8161 sched-pressure-algorithm
8162 Choose between the two available implementations of
8163 -fsched-pressure. Algorithm 1 is the original implementation
8164 and is the more likely to prevent instructions from being
8165 reordered. Algorithm 2 was designed to be a compromise between
8166 the relatively conservative approach taken by algorithm 1 and
8167 the rather aggressive approach taken by the default scheduler.
8168 It relies more heavily on having a regular register file and
8169 accurate register pressure classes. See haifa-sched.c in the
8170 GCC sources for more details.
8171
8172 The default choice depends on the target.
8173
8174 max-slsr-cand-scan
8175 Set the maximum number of existing candidates that will be
8176 considered when seeking a basis for a new straight-line
8177 strength reduction candidate.
8178
8179 Options Controlling the Preprocessor
8180 These options control the C preprocessor, which is run on each C source
8181 file before actual compilation.
8182
8183 If you use the -E option, nothing is done except preprocessing. Some
8184 of these options make sense only together with -E because they cause
8185 the preprocessor output to be unsuitable for actual compilation.
8186
8187 -Wp,option
8188 You can use -Wp,option to bypass the compiler driver and pass
8189 option directly through to the preprocessor. If option contains
8190 commas, it is split into multiple options at the commas. However,
8191 many options are modified, translated or interpreted by the
8192 compiler driver before being passed to the preprocessor, and -Wp
8193 forcibly bypasses this phase. The preprocessor's direct interface
8194 is undocumented and subject to change, so whenever possible you
8195 should avoid using -Wp and let the driver handle the options
8196 instead.
8197
8198 -Xpreprocessor option
8199 Pass option as an option to the preprocessor. You can use this to
8200 supply system-specific preprocessor options that GCC does not
8201 recognize.
8202
8203 If you want to pass an option that takes an argument, you must use
8204 -Xpreprocessor twice, once for the option and once for the
8205 argument.
8206
8207 -no-integrated-cpp
8208 Perform preprocessing as a separate pass before compilation. By
8209 default, GCC performs preprocessing as an integrated part of input
8210 tokenization and parsing. If this option is provided, the
8211 appropriate language front end (cc1, cc1plus, or cc1obj for C, C++,
8212 and Objective-C, respectively) is instead invoked twice, once for
8213 preprocessing only and once for actual compilation of the
8214 preprocessed input. This option may be useful in conjunction with
8215 the -B or -wrapper options to specify an alternate preprocessor or
8216 perform additional processing of the program source between normal
8217 preprocessing and compilation.
8218
8219 -D name
8220 Predefine name as a macro, with definition 1.
8221
8222 -D name=definition
8223 The contents of definition are tokenized and processed as if they
8224 appeared during translation phase three in a #define directive. In
8225 particular, the definition will be truncated by embedded newline
8226 characters.
8227
8228 If you are invoking the preprocessor from a shell or shell-like
8229 program you may need to use the shell's quoting syntax to protect
8230 characters such as spaces that have a meaning in the shell syntax.
8231
8232 If you wish to define a function-like macro on the command line,
8233 write its argument list with surrounding parentheses before the
8234 equals sign (if any). Parentheses are meaningful to most shells,
8235 so you will need to quote the option. With sh and csh,
8236 -D'name(args...)=definition' works.
8237
8238 -D and -U options are processed in the order they are given on the
8239 command line. All -imacros file and -include file options are
8240 processed after all -D and -U options.
8241
8242 -U name
8243 Cancel any previous definition of name, either built in or provided
8244 with a -D option.
8245
8246 -undef
8247 Do not predefine any system-specific or GCC-specific macros. The
8248 standard predefined macros remain defined.
8249
8250 -I dir
8251 Add the directory dir to the list of directories to be searched for
8252 header files. Directories named by -I are searched before the
8253 standard system include directories. If the directory dir is a
8254 standard system include directory, the option is ignored to ensure
8255 that the default search order for system directories and the
8256 special treatment of system headers are not defeated . If dir
8257 begins with "=", then the "=" will be replaced by the sysroot
8258 prefix; see --sysroot and -isysroot.
8259
8260 -o file
8261 Write output to file. This is the same as specifying file as the
8262 second non-option argument to cpp. gcc has a different
8263 interpretation of a second non-option argument, so you must use -o
8264 to specify the output file.
8265
8266 -Wall
8267 Turns on all optional warnings which are desirable for normal code.
8268 At present this is -Wcomment, -Wtrigraphs, -Wmultichar and a
8269 warning about integer promotion causing a change of sign in "#if"
8270 expressions. Note that many of the preprocessor's warnings are on
8271 by default and have no options to control them.
8272
8273 -Wcomment
8274 -Wcomments
8275 Warn whenever a comment-start sequence /* appears in a /* comment,
8276 or whenever a backslash-newline appears in a // comment. (Both
8277 forms have the same effect.)
8278
8279 -Wtrigraphs
8280 Most trigraphs in comments cannot affect the meaning of the
8281 program. However, a trigraph that would form an escaped newline
8282 (??/ at the end of a line) can, by changing where the comment
8283 begins or ends. Therefore, only trigraphs that would form escaped
8284 newlines produce warnings inside a comment.
8285
8286 This option is implied by -Wall. If -Wall is not given, this
8287 option is still enabled unless trigraphs are enabled. To get
8288 trigraph conversion without warnings, but get the other -Wall
8289 warnings, use -trigraphs -Wall -Wno-trigraphs.
8290
8291 -Wtraditional
8292 Warn about certain constructs that behave differently in
8293 traditional and ISO C. Also warn about ISO C constructs that have
8294 no traditional C equivalent, and problematic constructs which
8295 should be avoided.
8296
8297 -Wundef
8298 Warn whenever an identifier which is not a macro is encountered in
8299 an #if directive, outside of defined. Such identifiers are
8300 replaced with zero.
8301
8302 -Wunused-macros
8303 Warn about macros defined in the main file that are unused. A
8304 macro is used if it is expanded or tested for existence at least
8305 once. The preprocessor will also warn if the macro has not been
8306 used at the time it is redefined or undefined.
8307
8308 Built-in macros, macros defined on the command line, and macros
8309 defined in include files are not warned about.
8310
8311 Note: If a macro is actually used, but only used in skipped
8312 conditional blocks, then CPP will report it as unused. To avoid
8313 the warning in such a case, you might improve the scope of the
8314 macro's definition by, for example, moving it into the first
8315 skipped block. Alternatively, you could provide a dummy use with
8316 something like:
8317
8318 #if defined the_macro_causing_the_warning
8319 #endif
8320
8321 -Wendif-labels
8322 Warn whenever an #else or an #endif are followed by text. This
8323 usually happens in code of the form
8324
8325 #if FOO
8326 ...
8327 #else FOO
8328 ...
8329 #endif FOO
8330
8331 The second and third "FOO" should be in comments, but often are not
8332 in older programs. This warning is on by default.
8333
8334 -Werror
8335 Make all warnings into hard errors. Source code which triggers
8336 warnings will be rejected.
8337
8338 -Wsystem-headers
8339 Issue warnings for code in system headers. These are normally
8340 unhelpful in finding bugs in your own code, therefore suppressed.
8341 If you are responsible for the system library, you may want to see
8342 them.
8343
8344 -w Suppress all warnings, including those which GNU CPP issues by
8345 default.
8346
8347 -pedantic
8348 Issue all the mandatory diagnostics listed in the C standard. Some
8349 of them are left out by default, since they trigger frequently on
8350 harmless code.
8351
8352 -pedantic-errors
8353 Issue all the mandatory diagnostics, and make all mandatory
8354 diagnostics into errors. This includes mandatory diagnostics that
8355 GCC issues without -pedantic but treats as warnings.
8356
8357 -M Instead of outputting the result of preprocessing, output a rule
8358 suitable for make describing the dependencies of the main source
8359 file. The preprocessor outputs one make rule containing the object
8360 file name for that source file, a colon, and the names of all the
8361 included files, including those coming from -include or -imacros
8362 command line options.
8363
8364 Unless specified explicitly (with -MT or -MQ), the object file name
8365 consists of the name of the source file with any suffix replaced
8366 with object file suffix and with any leading directory parts
8367 removed. If there are many included files then the rule is split
8368 into several lines using \-newline. The rule has no commands.
8369
8370 This option does not suppress the preprocessor's debug output, such
8371 as -dM. To avoid mixing such debug output with the dependency
8372 rules you should explicitly specify the dependency output file with
8373 -MF, or use an environment variable like DEPENDENCIES_OUTPUT.
8374 Debug output will still be sent to the regular output stream as
8375 normal.
8376
8377 Passing -M to the driver implies -E, and suppresses warnings with
8378 an implicit -w.
8379
8380 -MM Like -M but do not mention header files that are found in system
8381 header directories, nor header files that are included, directly or
8382 indirectly, from such a header.
8383
8384 This implies that the choice of angle brackets or double quotes in
8385 an #include directive does not in itself determine whether that
8386 header will appear in -MM dependency output. This is a slight
8387 change in semantics from GCC versions 3.0 and earlier.
8388
8389 -MF file
8390 When used with -M or -MM, specifies a file to write the
8391 dependencies to. If no -MF switch is given the preprocessor sends
8392 the rules to the same place it would have sent preprocessed output.
8393
8394 When used with the driver options -MD or -MMD, -MF overrides the
8395 default dependency output file.
8396
8397 -MG In conjunction with an option such as -M requesting dependency
8398 generation, -MG assumes missing header files are generated files
8399 and adds them to the dependency list without raising an error. The
8400 dependency filename is taken directly from the "#include" directive
8401 without prepending any path. -MG also suppresses preprocessed
8402 output, as a missing header file renders this useless.
8403
8404 This feature is used in automatic updating of makefiles.
8405
8406 -MP This option instructs CPP to add a phony target for each dependency
8407 other than the main file, causing each to depend on nothing. These
8408 dummy rules work around errors make gives if you remove header
8409 files without updating the Makefile to match.
8410
8411 This is typical output:
8412
8413 test.o: test.c test.h
8414
8415 test.h:
8416
8417 -MT target
8418 Change the target of the rule emitted by dependency generation. By
8419 default CPP takes the name of the main input file, deletes any
8420 directory components and any file suffix such as .c, and appends
8421 the platform's usual object suffix. The result is the target.
8422
8423 An -MT option will set the target to be exactly the string you
8424 specify. If you want multiple targets, you can specify them as a
8425 single argument to -MT, or use multiple -MT options.
8426
8427 For example, -MT '$(objpfx)foo.o' might give
8428
8429 $(objpfx)foo.o: foo.c
8430
8431 -MQ target
8432 Same as -MT, but it quotes any characters which are special to
8433 Make. -MQ '$(objpfx)foo.o' gives
8434
8435 $$(objpfx)foo.o: foo.c
8436
8437 The default target is automatically quoted, as if it were given
8438 with -MQ.
8439
8440 -MD -MD is equivalent to -M -MF file, except that -E is not implied.
8441 The driver determines file based on whether an -o option is given.
8442 If it is, the driver uses its argument but with a suffix of .d,
8443 otherwise it takes the name of the input file, removes any
8444 directory components and suffix, and applies a .d suffix.
8445
8446 If -MD is used in conjunction with -E, any -o switch is understood
8447 to specify the dependency output file, but if used without -E, each
8448 -o is understood to specify a target object file.
8449
8450 Since -E is not implied, -MD can be used to generate a dependency
8451 output file as a side-effect of the compilation process.
8452
8453 -MMD
8454 Like -MD except mention only user header files, not system header
8455 files.
8456
8457 -fpch-deps
8458 When using precompiled headers, this flag will cause the
8459 dependency-output flags to also list the files from the precompiled
8460 header's dependencies. If not specified only the precompiled
8461 header would be listed and not the files that were used to create
8462 it because those files are not consulted when a precompiled header
8463 is used.
8464
8465 -fpch-preprocess
8466 This option allows use of a precompiled header together with -E.
8467 It inserts a special "#pragma", "#pragma GCC pch_preprocess
8468 "filename"" in the output to mark the place where the precompiled
8469 header was found, and its filename. When -fpreprocessed is in use,
8470 GCC recognizes this "#pragma" and loads the PCH.
8471
8472 This option is off by default, because the resulting preprocessed
8473 output is only really suitable as input to GCC. It is switched on
8474 by -save-temps.
8475
8476 You should not write this "#pragma" in your own code, but it is
8477 safe to edit the filename if the PCH file is available in a
8478 different location. The filename may be absolute or it may be
8479 relative to GCC's current directory.
8480
8481 -x c
8482 -x c++
8483 -x objective-c
8484 -x assembler-with-cpp
8485 Specify the source language: C, C++, Objective-C, or assembly.
8486 This has nothing to do with standards conformance or extensions; it
8487 merely selects which base syntax to expect. If you give none of
8488 these options, cpp will deduce the language from the extension of
8489 the source file: .c, .cc, .m, or .S. Some other common extensions
8490 for C++ and assembly are also recognized. If cpp does not
8491 recognize the extension, it will treat the file as C; this is the
8492 most generic mode.
8493
8494 Note: Previous versions of cpp accepted a -lang option which
8495 selected both the language and the standards conformance level.
8496 This option has been removed, because it conflicts with the -l
8497 option.
8498
8499 -std=standard
8500 -ansi
8501 Specify the standard to which the code should conform. Currently
8502 CPP knows about C and C++ standards; others may be added in the
8503 future.
8504
8505 standard may be one of:
8506
8507 "c90"
8508 "c89"
8509 "iso9899:1990"
8510 The ISO C standard from 1990. c90 is the customary shorthand
8511 for this version of the standard.
8512
8513 The -ansi option is equivalent to -std=c90.
8514
8515 "iso9899:199409"
8516 The 1990 C standard, as amended in 1994.
8517
8518 "iso9899:1999"
8519 "c99"
8520 "iso9899:199x"
8521 "c9x"
8522 The revised ISO C standard, published in December 1999. Before
8523 publication, this was known as C9X.
8524
8525 "iso9899:2011"
8526 "c11"
8527 "c1x"
8528 The revised ISO C standard, published in December 2011. Before
8529 publication, this was known as C1X.
8530
8531 "gnu90"
8532 "gnu89"
8533 The 1990 C standard plus GNU extensions. This is the default.
8534
8535 "gnu99"
8536 "gnu9x"
8537 The 1999 C standard plus GNU extensions.
8538
8539 "gnu11"
8540 "gnu1x"
8541 The 2011 C standard plus GNU extensions.
8542
8543 "c++98"
8544 The 1998 ISO C++ standard plus amendments.
8545
8546 "gnu++98"
8547 The same as -std=c++98 plus GNU extensions. This is the
8548 default for C++ code.
8549
8550 -I- Split the include path. Any directories specified with -I options
8551 before -I- are searched only for headers requested with
8552 "#include "file""; they are not searched for "#include <file>". If
8553 additional directories are specified with -I options after the -I-,
8554 those directories are searched for all #include directives.
8555
8556 In addition, -I- inhibits the use of the directory of the current
8557 file directory as the first search directory for "#include "file"".
8558 This option has been deprecated.
8559
8560 -nostdinc
8561 Do not search the standard system directories for header files.
8562 Only the directories you have specified with -I options (and the
8563 directory of the current file, if appropriate) are searched.
8564
8565 -nostdinc++
8566 Do not search for header files in the C++-specific standard
8567 directories, but do still search the other standard directories.
8568 (This option is used when building the C++ library.)
8569
8570 -include file
8571 Process file as if "#include "file"" appeared as the first line of
8572 the primary source file. However, the first directory searched for
8573 file is the preprocessor's working directory instead of the
8574 directory containing the main source file. If not found there, it
8575 is searched for in the remainder of the "#include "..."" search
8576 chain as normal.
8577
8578 If multiple -include options are given, the files are included in
8579 the order they appear on the command line.
8580
8581 -imacros file
8582 Exactly like -include, except that any output produced by scanning
8583 file is thrown away. Macros it defines remain defined. This
8584 allows you to acquire all the macros from a header without also
8585 processing its declarations.
8586
8587 All files specified by -imacros are processed before all files
8588 specified by -include.
8589
8590 -idirafter dir
8591 Search dir for header files, but do it after all directories
8592 specified with -I and the standard system directories have been
8593 exhausted. dir is treated as a system include directory. If dir
8594 begins with "=", then the "=" will be replaced by the sysroot
8595 prefix; see --sysroot and -isysroot.
8596
8597 -iprefix prefix
8598 Specify prefix as the prefix for subsequent -iwithprefix options.
8599 If the prefix represents a directory, you should include the final
8600 /.
8601
8602 -iwithprefix dir
8603 -iwithprefixbefore dir
8604 Append dir to the prefix specified previously with -iprefix, and
8605 add the resulting directory to the include search path.
8606 -iwithprefixbefore puts it in the same place -I would; -iwithprefix
8607 puts it where -idirafter would.
8608
8609 -isysroot dir
8610 This option is like the --sysroot option, but applies only to
8611 header files (except for Darwin targets, where it applies to both
8612 header files and libraries). See the --sysroot option for more
8613 information.
8614
8615 -imultilib dir
8616 Use dir as a subdirectory of the directory containing target-
8617 specific C++ headers.
8618
8619 -isystem dir
8620 Search dir for header files, after all directories specified by -I
8621 but before the standard system directories. Mark it as a system
8622 directory, so that it gets the same special treatment as is applied
8623 to the standard system directories. If dir begins with "=", then
8624 the "=" will be replaced by the sysroot prefix; see --sysroot and
8625 -isysroot.
8626
8627 -iquote dir
8628 Search dir only for header files requested with "#include "file"";
8629 they are not searched for "#include <file>", before all directories
8630 specified by -I and before the standard system directories. If dir
8631 begins with "=", then the "=" will be replaced by the sysroot
8632 prefix; see --sysroot and -isysroot.
8633
8634 -fdirectives-only
8635 When preprocessing, handle directives, but do not expand macros.
8636
8637 The option's behavior depends on the -E and -fpreprocessed options.
8638
8639 With -E, preprocessing is limited to the handling of directives
8640 such as "#define", "#ifdef", and "#error". Other preprocessor
8641 operations, such as macro expansion and trigraph conversion are not
8642 performed. In addition, the -dD option is implicitly enabled.
8643
8644 With -fpreprocessed, predefinition of command line and most builtin
8645 macros is disabled. Macros such as "__LINE__", which are
8646 contextually dependent, are handled normally. This enables
8647 compilation of files previously preprocessed with "-E
8648 -fdirectives-only".
8649
8650 With both -E and -fpreprocessed, the rules for -fpreprocessed take
8651 precedence. This enables full preprocessing of files previously
8652 preprocessed with "-E -fdirectives-only".
8653
8654 -fdollars-in-identifiers
8655 Accept $ in identifiers.
8656
8657 -fextended-identifiers
8658 Accept universal character names in identifiers. This option is
8659 experimental; in a future version of GCC, it will be enabled by
8660 default for C99 and C++.
8661
8662 -fno-canonical-system-headers
8663 When preprocessing, do not shorten system header paths with
8664 canonicalization.
8665
8666 -fpreprocessed
8667 Indicate to the preprocessor that the input file has already been
8668 preprocessed. This suppresses things like macro expansion,
8669 trigraph conversion, escaped newline splicing, and processing of
8670 most directives. The preprocessor still recognizes and removes
8671 comments, so that you can pass a file preprocessed with -C to the
8672 compiler without problems. In this mode the integrated
8673 preprocessor is little more than a tokenizer for the front ends.
8674
8675 -fpreprocessed is implicit if the input file has one of the
8676 extensions .i, .ii or .mi. These are the extensions that GCC uses
8677 for preprocessed files created by -save-temps.
8678
8679 -ftabstop=width
8680 Set the distance between tab stops. This helps the preprocessor
8681 report correct column numbers in warnings or errors, even if tabs
8682 appear on the line. If the value is less than 1 or greater than
8683 100, the option is ignored. The default is 8.
8684
8685 -fdebug-cpp
8686 This option is only useful for debugging GCC. When used with -E,
8687 dumps debugging information about location maps. Every token in
8688 the output is preceded by the dump of the map its location belongs
8689 to. The dump of the map holding the location of a token would be:
8690
8691 {"P":F</file/path>;"F":F</includer/path>;"L":<line_num>;"C":<col_num>;"S":<system_header_p>;"M":<map_address>;"E":<macro_expansion_p>,"loc":<location>}
8692
8693 When used without -E, this option has no effect.
8694
8695 -ftrack-macro-expansion[=level]
8696 Track locations of tokens across macro expansions. This allows the
8697 compiler to emit diagnostic about the current macro expansion stack
8698 when a compilation error occurs in a macro expansion. Using this
8699 option makes the preprocessor and the compiler consume more memory.
8700 The level parameter can be used to choose the level of precision of
8701 token location tracking thus decreasing the memory consumption if
8702 necessary. Value 0 of level de-activates this option just as if no
8703 -ftrack-macro-expansion was present on the command line. Value 1
8704 tracks tokens locations in a degraded mode for the sake of minimal
8705 memory overhead. In this mode all tokens resulting from the
8706 expansion of an argument of a function-like macro have the same
8707 location. Value 2 tracks tokens locations completely. This value is
8708 the most memory hungry. When this option is given no argument, the
8709 default parameter value is 2.
8710
8711 Note that -ftrack-macro-expansion=2 is activated by default.
8712
8713 -fexec-charset=charset
8714 Set the execution character set, used for string and character
8715 constants. The default is UTF-8. charset can be any encoding
8716 supported by the system's "iconv" library routine.
8717
8718 -fwide-exec-charset=charset
8719 Set the wide execution character set, used for wide string and
8720 character constants. The default is UTF-32 or UTF-16, whichever
8721 corresponds to the width of "wchar_t". As with -fexec-charset,
8722 charset can be any encoding supported by the system's "iconv"
8723 library routine; however, you will have problems with encodings
8724 that do not fit exactly in "wchar_t".
8725
8726 -finput-charset=charset
8727 Set the input character set, used for translation from the
8728 character set of the input file to the source character set used by
8729 GCC. If the locale does not specify, or GCC cannot get this
8730 information from the locale, the default is UTF-8. This can be
8731 overridden by either the locale or this command line option.
8732 Currently the command line option takes precedence if there's a
8733 conflict. charset can be any encoding supported by the system's
8734 "iconv" library routine.
8735
8736 -fworking-directory
8737 Enable generation of linemarkers in the preprocessor output that
8738 will let the compiler know the current working directory at the
8739 time of preprocessing. When this option is enabled, the
8740 preprocessor will emit, after the initial linemarker, a second
8741 linemarker with the current working directory followed by two
8742 slashes. GCC will use this directory, when it's present in the
8743 preprocessed input, as the directory emitted as the current working
8744 directory in some debugging information formats. This option is
8745 implicitly enabled if debugging information is enabled, but this
8746 can be inhibited with the negated form -fno-working-directory. If
8747 the -P flag is present in the command line, this option has no
8748 effect, since no "#line" directives are emitted whatsoever.
8749
8750 -fno-show-column
8751 Do not print column numbers in diagnostics. This may be necessary
8752 if diagnostics are being scanned by a program that does not
8753 understand the column numbers, such as dejagnu.
8754
8755 -A predicate=answer
8756 Make an assertion with the predicate predicate and answer answer.
8757 This form is preferred to the older form -A predicate(answer),
8758 which is still supported, because it does not use shell special
8759 characters.
8760
8761 -A -predicate=answer
8762 Cancel an assertion with the predicate predicate and answer answer.
8763
8764 -dCHARS
8765 CHARS is a sequence of one or more of the following characters, and
8766 must not be preceded by a space. Other characters are interpreted
8767 by the compiler proper, or reserved for future versions of GCC, and
8768 so are silently ignored. If you specify characters whose behavior
8769 conflicts, the result is undefined.
8770
8771 M Instead of the normal output, generate a list of #define
8772 directives for all the macros defined during the execution of
8773 the preprocessor, including predefined macros. This gives you
8774 a way of finding out what is predefined in your version of the
8775 preprocessor. Assuming you have no file foo.h, the command
8776
8777 touch foo.h; cpp -dM foo.h
8778
8779 will show all the predefined macros.
8780
8781 If you use -dM without the -E option, -dM is interpreted as a
8782 synonym for -fdump-rtl-mach.
8783
8784 D Like M except in two respects: it does not include the
8785 predefined macros, and it outputs both the #define directives
8786 and the result of preprocessing. Both kinds of output go to
8787 the standard output file.
8788
8789 N Like D, but emit only the macro names, not their expansions.
8790
8791 I Output #include directives in addition to the result of
8792 preprocessing.
8793
8794 U Like D except that only macros that are expanded, or whose
8795 definedness is tested in preprocessor directives, are output;
8796 the output is delayed until the use or test of the macro; and
8797 #undef directives are also output for macros tested but
8798 undefined at the time.
8799
8800 -P Inhibit generation of linemarkers in the output from the
8801 preprocessor. This might be useful when running the preprocessor
8802 on something that is not C code, and will be sent to a program
8803 which might be confused by the linemarkers.
8804
8805 -C Do not discard comments. All comments are passed through to the
8806 output file, except for comments in processed directives, which are
8807 deleted along with the directive.
8808
8809 You should be prepared for side effects when using -C; it causes
8810 the preprocessor to treat comments as tokens in their own right.
8811 For example, comments appearing at the start of what would be a
8812 directive line have the effect of turning that line into an
8813 ordinary source line, since the first token on the line is no
8814 longer a #.
8815
8816 -CC Do not discard comments, including during macro expansion. This is
8817 like -C, except that comments contained within macros are also
8818 passed through to the output file where the macro is expanded.
8819
8820 In addition to the side-effects of the -C option, the -CC option
8821 causes all C++-style comments inside a macro to be converted to
8822 C-style comments. This is to prevent later use of that macro from
8823 inadvertently commenting out the remainder of the source line.
8824
8825 The -CC option is generally used to support lint comments.
8826
8827 -traditional-cpp
8828 Try to imitate the behavior of old-fashioned C preprocessors, as
8829 opposed to ISO C preprocessors.
8830
8831 -trigraphs
8832 Process trigraph sequences. These are three-character sequences,
8833 all starting with ??, that are defined by ISO C to stand for single
8834 characters. For example, ??/ stands for \, so '??/n' is a
8835 character constant for a newline. By default, GCC ignores
8836 trigraphs, but in standard-conforming modes it converts them. See
8837 the -std and -ansi options.
8838
8839 The nine trigraphs and their replacements are
8840
8841 Trigraph: ??( ??) ??< ??> ??= ??/ ??' ??! ??-
8842 Replacement: [ ] { } # \ ^ | ~
8843
8844 -remap
8845 Enable special code to work around file systems which only permit
8846 very short file names, such as MS-DOS.
8847
8848 --help
8849 --target-help
8850 Print text describing all the command line options instead of
8851 preprocessing anything.
8852
8853 -v Verbose mode. Print out GNU CPP's version number at the beginning
8854 of execution, and report the final form of the include path.
8855
8856 -H Print the name of each header file used, in addition to other
8857 normal activities. Each name is indented to show how deep in the
8858 #include stack it is. Precompiled header files are also printed,
8859 even if they are found to be invalid; an invalid precompiled header
8860 file is printed with ...x and a valid one with ...! .
8861
8862 -version
8863 --version
8864 Print out GNU CPP's version number. With one dash, proceed to
8865 preprocess as normal. With two dashes, exit immediately.
8866
8867 Passing Options to the Assembler
8868 You can pass options to the assembler.
8869
8870 -Wa,option
8871 Pass option as an option to the assembler. If option contains
8872 commas, it is split into multiple options at the commas.
8873
8874 -Xassembler option
8875 Pass option as an option to the assembler. You can use this to
8876 supply system-specific assembler options that GCC does not
8877 recognize.
8878
8879 If you want to pass an option that takes an argument, you must use
8880 -Xassembler twice, once for the option and once for the argument.
8881
8882 Options for Linking
8883 These options come into play when the compiler links object files into
8884 an executable output file. They are meaningless if the compiler is not
8885 doing a link step.
8886
8887 object-file-name
8888 A file name that does not end in a special recognized suffix is
8889 considered to name an object file or library. (Object files are
8890 distinguished from libraries by the linker according to the file
8891 contents.) If linking is done, these object files are used as
8892 input to the linker.
8893
8894 -c
8895 -S
8896 -E If any of these options is used, then the linker is not run, and
8897 object file names should not be used as arguments.
8898
8899 -llibrary
8900 -l library
8901 Search the library named library when linking. (The second
8902 alternative with the library as a separate argument is only for
8903 POSIX compliance and is not recommended.)
8904
8905 It makes a difference where in the command you write this option;
8906 the linker searches and processes libraries and object files in the
8907 order they are specified. Thus, foo.o -lz bar.o searches library z
8908 after file foo.o but before bar.o. If bar.o refers to functions in
8909 z, those functions may not be loaded.
8910
8911 The linker searches a standard list of directories for the library,
8912 which is actually a file named liblibrary.a. The linker then uses
8913 this file as if it had been specified precisely by name.
8914
8915 The directories searched include several standard system
8916 directories plus any that you specify with -L.
8917
8918 Normally the files found this way are library files---archive files
8919 whose members are object files. The linker handles an archive file
8920 by scanning through it for members which define symbols that have
8921 so far been referenced but not defined. But if the file that is
8922 found is an ordinary object file, it is linked in the usual
8923 fashion. The only difference between using an -l option and
8924 specifying a file name is that -l surrounds library with lib and .a
8925 and searches several directories.
8926
8927 -lobjc
8928 You need this special case of the -l option in order to link an
8929 Objective-C or Objective-C++ program.
8930
8931 -nostartfiles
8932 Do not use the standard system startup files when linking. The
8933 standard system libraries are used normally, unless -nostdlib or
8934 -nodefaultlibs is used.
8935
8936 -nodefaultlibs
8937 Do not use the standard system libraries when linking. Only the
8938 libraries you specify are passed to the linker, and options
8939 specifying linkage of the system libraries, such as
8940 "-static-libgcc" or "-shared-libgcc", are ignored. The standard
8941 startup files are used normally, unless -nostartfiles is used.
8942
8943 The compiler may generate calls to "memcmp", "memset", "memcpy" and
8944 "memmove". These entries are usually resolved by entries in libc.
8945 These entry points should be supplied through some other mechanism
8946 when this option is specified.
8947
8948 -nostdlib
8949 Do not use the standard system startup files or libraries when
8950 linking. No startup files and only the libraries you specify are
8951 passed to the linker, and options specifying linkage of the system
8952 libraries, such as "-static-libgcc" or "-shared-libgcc", are
8953 ignored.
8954
8955 The compiler may generate calls to "memcmp", "memset", "memcpy" and
8956 "memmove". These entries are usually resolved by entries in libc.
8957 These entry points should be supplied through some other mechanism
8958 when this option is specified.
8959
8960 One of the standard libraries bypassed by -nostdlib and
8961 -nodefaultlibs is libgcc.a, a library of internal subroutines which
8962 GCC uses to overcome shortcomings of particular machines, or
8963 special needs for some languages.
8964
8965 In most cases, you need libgcc.a even when you want to avoid other
8966 standard libraries. In other words, when you specify -nostdlib or
8967 -nodefaultlibs you should usually specify -lgcc as well. This
8968 ensures that you have no unresolved references to internal GCC
8969 library subroutines. (An example of such an internal subroutine is
8970 __main, used to ensure C++ constructors are called.)
8971
8972 -pie
8973 Produce a position independent executable on targets that support
8974 it. For predictable results, you must also specify the same set of
8975 options used for compilation (-fpie, -fPIE, or model suboptions)
8976 when you specify this linker option.
8977
8978 -rdynamic
8979 Pass the flag -export-dynamic to the ELF linker, on targets that
8980 support it. This instructs the linker to add all symbols, not only
8981 used ones, to the dynamic symbol table. This option is needed for
8982 some uses of "dlopen" or to allow obtaining backtraces from within
8983 a program.
8984
8985 -s Remove all symbol table and relocation information from the
8986 executable.
8987
8988 -static
8989 On systems that support dynamic linking, this prevents linking with
8990 the shared libraries. On other systems, this option has no effect.
8991
8992 -shared
8993 Produce a shared object which can then be linked with other objects
8994 to form an executable. Not all systems support this option. For
8995 predictable results, you must also specify the same set of options
8996 used for compilation (-fpic, -fPIC, or model suboptions) when you
8997 specify this linker option.[1]
8998
8999 -shared-libgcc
9000 -static-libgcc
9001 On systems that provide libgcc as a shared library, these options
9002 force the use of either the shared or static version, respectively.
9003 If no shared version of libgcc was built when the compiler was
9004 configured, these options have no effect.
9005
9006 There are several situations in which an application should use the
9007 shared libgcc instead of the static version. The most common of
9008 these is when the application wishes to throw and catch exceptions
9009 across different shared libraries. In that case, each of the
9010 libraries as well as the application itself should use the shared
9011 libgcc.
9012
9013 Therefore, the G++ and GCJ drivers automatically add -shared-libgcc
9014 whenever you build a shared library or a main executable, because
9015 C++ and Java programs typically use exceptions, so this is the
9016 right thing to do.
9017
9018 If, instead, you use the GCC driver to create shared libraries, you
9019 may find that they are not always linked with the shared libgcc.
9020 If GCC finds, at its configuration time, that you have a non-GNU
9021 linker or a GNU linker that does not support option --eh-frame-hdr,
9022 it links the shared version of libgcc into shared libraries by
9023 default. Otherwise, it takes advantage of the linker and optimizes
9024 away the linking with the shared version of libgcc, linking with
9025 the static version of libgcc by default. This allows exceptions to
9026 propagate through such shared libraries, without incurring
9027 relocation costs at library load time.
9028
9029 However, if a library or main executable is supposed to throw or
9030 catch exceptions, you must link it using the G++ or GCJ driver, as
9031 appropriate for the languages used in the program, or using the
9032 option -shared-libgcc, such that it is linked with the shared
9033 libgcc.
9034
9035 -static-libasan
9036 When the -fsanitize=address option is used to link a program, the
9037 GCC driver automatically links against libasan. If libasan is
9038 available as a shared library, and the -static option is not used,
9039 then this links against the shared version of libasan. The
9040 -static-libasan option directs the GCC driver to link libasan
9041 statically, without necessarily linking other libraries statically.
9042
9043 -static-libtsan
9044 When the -fsanitize=thread option is used to link a program, the
9045 GCC driver automatically links against libtsan. If libtsan is
9046 available as a shared library, and the -static option is not used,
9047 then this links against the shared version of libtsan. The
9048 -static-libtsan option directs the GCC driver to link libtsan
9049 statically, without necessarily linking other libraries statically.
9050
9051 -static-libstdc++
9052 When the g++ program is used to link a C++ program, it normally
9053 automatically links against libstdc++. If libstdc++ is available
9054 as a shared library, and the -static option is not used, then this
9055 links against the shared version of libstdc++. That is normally
9056 fine. However, it is sometimes useful to freeze the version of
9057 libstdc++ used by the program without going all the way to a fully
9058 static link. The -static-libstdc++ option directs the g++ driver
9059 to link libstdc++ statically, without necessarily linking other
9060 libraries statically.
9061
9062 -symbolic
9063 Bind references to global symbols when building a shared object.
9064 Warn about any unresolved references (unless overridden by the link
9065 editor option -Xlinker -z -Xlinker defs). Only a few systems
9066 support this option.
9067
9068 -T script
9069 Use script as the linker script. This option is supported by most
9070 systems using the GNU linker. On some targets, such as bare-board
9071 targets without an operating system, the -T option may be required
9072 when linking to avoid references to undefined symbols.
9073
9074 -Xlinker option
9075 Pass option as an option to the linker. You can use this to supply
9076 system-specific linker options that GCC does not recognize.
9077
9078 If you want to pass an option that takes a separate argument, you
9079 must use -Xlinker twice, once for the option and once for the
9080 argument. For example, to pass -assert definitions, you must write
9081 -Xlinker -assert -Xlinker definitions. It does not work to write
9082 -Xlinker "-assert definitions", because this passes the entire
9083 string as a single argument, which is not what the linker expects.
9084
9085 When using the GNU linker, it is usually more convenient to pass
9086 arguments to linker options using the option=value syntax than as
9087 separate arguments. For example, you can specify -Xlinker
9088 -Map=output.map rather than -Xlinker -Map -Xlinker output.map.
9089 Other linkers may not support this syntax for command-line options.
9090
9091 -Wl,option
9092 Pass option as an option to the linker. If option contains commas,
9093 it is split into multiple options at the commas. You can use this
9094 syntax to pass an argument to the option. For example,
9095 -Wl,-Map,output.map passes -Map output.map to the linker. When
9096 using the GNU linker, you can also get the same effect with
9097 -Wl,-Map=output.map.
9098
9099 -u symbol
9100 Pretend the symbol symbol is undefined, to force linking of library
9101 modules to define it. You can use -u multiple times with different
9102 symbols to force loading of additional library modules.
9103
9104 Options for Directory Search
9105 These options specify directories to search for header files, for
9106 libraries and for parts of the compiler:
9107
9108 -Idir
9109 Add the directory dir to the head of the list of directories to be
9110 searched for header files. This can be used to override a system
9111 header file, substituting your own version, since these directories
9112 are searched before the system header file directories. However,
9113 you should not use this option to add directories that contain
9114 vendor-supplied system header files (use -isystem for that). If
9115 you use more than one -I option, the directories are scanned in
9116 left-to-right order; the standard system directories come after.
9117
9118 If a standard system include directory, or a directory specified
9119 with -isystem, is also specified with -I, the -I option is ignored.
9120 The directory is still searched but as a system directory at its
9121 normal position in the system include chain. This is to ensure
9122 that GCC's procedure to fix buggy system headers and the ordering
9123 for the "include_next" directive are not inadvertently changed. If
9124 you really need to change the search order for system directories,
9125 use the -nostdinc and/or -isystem options.
9126
9127 -iplugindir=dir
9128 Set the directory to search for plugins that are passed by
9129 -fplugin=name instead of -fplugin=path/name.so. This option is not
9130 meant to be used by the user, but only passed by the driver.
9131
9132 -iquotedir
9133 Add the directory dir to the head of the list of directories to be
9134 searched for header files only for the case of #include "file";
9135 they are not searched for #include <file>, otherwise just like -I.
9136
9137 -Ldir
9138 Add directory dir to the list of directories to be searched for -l.
9139
9140 -Bprefix
9141 This option specifies where to find the executables, libraries,
9142 include files, and data files of the compiler itself.
9143
9144 The compiler driver program runs one or more of the subprograms
9145 cpp, cc1, as and ld. It tries prefix as a prefix for each program
9146 it tries to run, both with and without machine/version/.
9147
9148 For each subprogram to be run, the compiler driver first tries the
9149 -B prefix, if any. If that name is not found, or if -B is not
9150 specified, the driver tries two standard prefixes, /usr/lib/gcc/
9151 and /usr/local/lib/gcc/. If neither of those results in a file
9152 name that is found, the unmodified program name is searched for
9153 using the directories specified in your PATH environment variable.
9154
9155 The compiler checks to see if the path provided by the -B refers to
9156 a directory, and if necessary it adds a directory separator
9157 character at the end of the path.
9158
9159 -B prefixes that effectively specify directory names also apply to
9160 libraries in the linker, because the compiler translates these
9161 options into -L options for the linker. They also apply to
9162 includes files in the preprocessor, because the compiler translates
9163 these options into -isystem options for the preprocessor. In this
9164 case, the compiler appends include to the prefix.
9165
9166 The runtime support file libgcc.a can also be searched for using
9167 the -B prefix, if needed. If it is not found there, the two
9168 standard prefixes above are tried, and that is all. The file is
9169 left out of the link if it is not found by those means.
9170
9171 Another way to specify a prefix much like the -B prefix is to use
9172 the environment variable GCC_EXEC_PREFIX.
9173
9174 As a special kludge, if the path provided by -B is [dir/]stageN/,
9175 where N is a number in the range 0 to 9, then it is replaced by
9176 [dir/]include. This is to help with boot-strapping the compiler.
9177
9178 -specs=file
9179 Process file after the compiler reads in the standard specs file,
9180 in order to override the defaults which the gcc driver program uses
9181 when determining what switches to pass to cc1, cc1plus, as, ld,
9182 etc. More than one -specs=file can be specified on the command
9183 line, and they are processed in order, from left to right.
9184
9185 --sysroot=dir
9186 Use dir as the logical root directory for headers and libraries.
9187 For example, if the compiler normally searches for headers in
9188 /usr/include and libraries in /usr/lib, it instead searches
9189 dir/usr/include and dir/usr/lib.
9190
9191 If you use both this option and the -isysroot option, then the
9192 --sysroot option applies to libraries, but the -isysroot option
9193 applies to header files.
9194
9195 The GNU linker (beginning with version 2.16) has the necessary
9196 support for this option. If your linker does not support this
9197 option, the header file aspect of --sysroot still works, but the
9198 library aspect does not.
9199
9200 --no-sysroot-suffix
9201 For some targets, a suffix is added to the root directory specified
9202 with --sysroot, depending on the other options used, so that
9203 headers may for example be found in dir/suffix/usr/include instead
9204 of dir/usr/include. This option disables the addition of such a
9205 suffix.
9206
9207 -I- This option has been deprecated. Please use -iquote instead for -I
9208 directories before the -I- and remove the -I-. Any directories you
9209 specify with -I options before the -I- option are searched only for
9210 the case of #include "file"; they are not searched for #include
9211 <file>.
9212
9213 If additional directories are specified with -I options after the
9214 -I-, these directories are searched for all #include directives.
9215 (Ordinarily all -I directories are used this way.)
9216
9217 In addition, the -I- option inhibits the use of the current
9218 directory (where the current input file came from) as the first
9219 search directory for #include "file". There is no way to override
9220 this effect of -I-. With -I. you can specify searching the
9221 directory that is current when the compiler is invoked. That is
9222 not exactly the same as what the preprocessor does by default, but
9223 it is often satisfactory.
9224
9225 -I- does not inhibit the use of the standard system directories for
9226 header files. Thus, -I- and -nostdinc are independent.
9227
9228 Specifying Target Machine and Compiler Version
9229 The usual way to run GCC is to run the executable called gcc, or
9230 machine-gcc when cross-compiling, or machine-gcc-version to run a
9231 version other than the one that was installed last.
9232
9233 Hardware Models and Configurations
9234 Each target machine types can have its own special options, starting
9235 with -m, to choose among various hardware models or
9236 configurations---for example, 68010 vs 68020, floating coprocessor or
9237 none. A single installed version of the compiler can compile for any
9238 model or configuration, according to the options specified.
9239
9240 Some configurations of the compiler also support additional special
9241 options, usually for compatibility with other compilers on the same
9242 platform.
9243
9244 AArch64 Options
9245 These options are defined for AArch64 implementations:
9246
9247 -mbig-endian
9248 Generate big-endian code. This is the default when GCC is
9249 configured for an aarch64_be-*-* target.
9250
9251 -mgeneral-regs-only
9252 Generate code which uses only the general registers.
9253
9254 -mlittle-endian
9255 Generate little-endian code. This is the default when GCC is
9256 configured for an aarch64-*-* but not an aarch64_be-*-* target.
9257
9258 -mcmodel=tiny
9259 Generate code for the tiny code model. The program and its
9260 statically defined symbols must be within 1GB of each other.
9261 Pointers are 64 bits. Programs can be statically or dynamically
9262 linked. This model is not fully implemented and mostly treated as
9263 small.
9264
9265 -mcmodel=small
9266 Generate code for the small code model. The program and its
9267 statically defined symbols must be within 4GB of each other.
9268 Pointers are 64 bits. Programs can be statically or dynamically
9269 linked. This is the default code model.
9270
9271 -mcmodel=large
9272 Generate code for the large code model. This makes no assumptions
9273 about addresses and sizes of sections. Pointers are 64 bits.
9274 Programs can be statically linked only.
9275
9276 -mstrict-align
9277 Do not assume that unaligned memory references will be handled by
9278 the system.
9279
9280 -momit-leaf-frame-pointer
9281 -mno-omit-leaf-frame-pointer
9282 Omit or keep the frame pointer in leaf functions. The former
9283 behaviour is the default.
9284
9285 -mtls-dialect=desc
9286 Use TLS descriptors as the thread-local storage mechanism for
9287 dynamic accesses of TLS variables. This is the default.
9288
9289 -mtls-dialect=traditional
9290 Use traditional TLS as the thread-local storage mechanism for
9291 dynamic accesses of TLS variables.
9292
9293 -mfix-cortex-a53-835769
9294 -mno-fix-cortex-a53-835769
9295 Enable or disable the workaround for the ARM Cortex-A53 erratum
9296 number 835769. This will involve inserting a NOP instruction
9297 between memory instructions and 64-bit integer multiply-accumulate
9298 instructions.
9299
9300 -march=name
9301 Specify the name of the target architecture, optionally suffixed by
9302 one or more feature modifiers. This option has the form
9303 -march=arch{+[no]feature}*, where the only value for arch is
9304 armv8-a. The possible values for feature are documented in the
9305 sub-section below.
9306
9307 Where conflicting feature modifiers are specified, the right-most
9308 feature is used.
9309
9310 GCC uses this name to determine what kind of instructions it can
9311 emit when generating assembly code. This option can be used in
9312 conjunction with or instead of the -mcpu= option.
9313
9314 -mcpu=name
9315 Specify the name of the target processor, optionally suffixed by
9316 one or more feature modifiers. This option has the form
9317 -mcpu=cpu{+[no]feature}*, where the possible values for cpu are
9318 generic, large. The possible values for feature are documented in
9319 the sub-section below.
9320
9321 Where conflicting feature modifiers are specified, the right-most
9322 feature is used.
9323
9324 GCC uses this name to determine what kind of instructions it can
9325 emit when generating assembly code.
9326
9327 -mtune=name
9328 Specify the name of the processor to tune the performance for. The
9329 code will be tuned as if the target processor were of the type
9330 specified in this option, but still using instructions compatible
9331 with the target processor specified by a -mcpu= option. This
9332 option cannot be suffixed by feature modifiers.
9333
9334 -march and -mcpu feature modifiers
9335
9336 Feature modifiers used with -march and -mcpu can be one the following:
9337
9338 crc Enable CRC extension.
9339
9340 crypto
9341 Enable Crypto extension. This implies Advanced SIMD is enabled.
9342
9343 fp Enable floating-point instructions.
9344
9345 simd
9346 Enable Advanced SIMD instructions. This implies floating-point
9347 instructions are enabled. This is the default for all current
9348 possible values for options -march and -mcpu=.
9349
9350 Adapteva Epiphany Options
9351 These -m options are defined for Adapteva Epiphany:
9352
9353 -mhalf-reg-file
9354 Don't allocate any register in the range "r32"..."r63". That
9355 allows code to run on hardware variants that lack these registers.
9356
9357 -mprefer-short-insn-regs
9358 Preferrentially allocate registers that allow short instruction
9359 generation. This can result in increased instruction count, so
9360 this may either reduce or increase overall code size.
9361
9362 -mbranch-cost=num
9363 Set the cost of branches to roughly num "simple" instructions.
9364 This cost is only a heuristic and is not guaranteed to produce
9365 consistent results across releases.
9366
9367 -mcmove
9368 Enable the generation of conditional moves.
9369
9370 -mnops=num
9371 Emit num NOPs before every other generated instruction.
9372
9373 -mno-soft-cmpsf
9374 For single-precision floating-point comparisons, emit an "fsub"
9375 instruction and test the flags. This is faster than a software
9376 comparison, but can get incorrect results in the presence of NaNs,
9377 or when two different small numbers are compared such that their
9378 difference is calculated as zero. The default is -msoft-cmpsf,
9379 which uses slower, but IEEE-compliant, software comparisons.
9380
9381 -mstack-offset=num
9382 Set the offset between the top of the stack and the stack pointer.
9383 E.g., a value of 8 means that the eight bytes in the range
9384 "sp+0...sp+7" can be used by leaf functions without stack
9385 allocation. Values other than 8 or 16 are untested and unlikely to
9386 work. Note also that this option changes the ABI; compiling a
9387 program with a different stack offset than the libraries have been
9388 compiled with generally does not work. This option can be useful
9389 if you want to evaluate if a different stack offset would give you
9390 better code, but to actually use a different stack offset to build
9391 working programs, it is recommended to configure the toolchain with
9392 the appropriate --with-stack-offset=num option.
9393
9394 -mno-round-nearest
9395 Make the scheduler assume that the rounding mode has been set to
9396 truncating. The default is -mround-nearest.
9397
9398 -mlong-calls
9399 If not otherwise specified by an attribute, assume all calls might
9400 be beyond the offset range of the "b" / "bl" instructions, and
9401 therefore load the function address into a register before
9402 performing a (otherwise direct) call. This is the default.
9403
9404 -mshort-calls
9405 If not otherwise specified by an attribute, assume all direct calls
9406 are in the range of the "b" / "bl" instructions, so use these
9407 instructions for direct calls. The default is -mlong-calls.
9408
9409 -msmall16
9410 Assume addresses can be loaded as 16-bit unsigned values. This
9411 does not apply to function addresses for which -mlong-calls
9412 semantics are in effect.
9413
9414 -mfp-mode=mode
9415 Set the prevailing mode of the floating-point unit. This
9416 determines the floating-point mode that is provided and expected at
9417 function call and return time. Making this mode match the mode you
9418 predominantly need at function start can make your programs smaller
9419 and faster by avoiding unnecessary mode switches.
9420
9421 mode can be set to one the following values:
9422
9423 caller
9424 Any mode at function entry is valid, and retained or restored
9425 when the function returns, and when it calls other functions.
9426 This mode is useful for compiling libraries or other
9427 compilation units you might want to incorporate into different
9428 programs with different prevailing FPU modes, and the
9429 convenience of being able to use a single object file outweighs
9430 the size and speed overhead for any extra mode switching that
9431 might be needed, compared with what would be needed with a more
9432 specific choice of prevailing FPU mode.
9433
9434 truncate
9435 This is the mode used for floating-point calculations with
9436 truncating (i.e. round towards zero) rounding mode. That
9437 includes conversion from floating point to integer.
9438
9439 round-nearest
9440 This is the mode used for floating-point calculations with
9441 round-to-nearest-or-even rounding mode.
9442
9443 int This is the mode used to perform integer calculations in the
9444 FPU, e.g. integer multiply, or integer multiply-and-
9445 accumulate.
9446
9447 The default is -mfp-mode=caller
9448
9449 -mnosplit-lohi
9450 -mno-postinc
9451 -mno-postmodify
9452 Code generation tweaks that disable, respectively, splitting of
9453 32-bit loads, generation of post-increment addresses, and
9454 generation of post-modify addresses. The defaults are msplit-lohi,
9455 -mpost-inc, and -mpost-modify.
9456
9457 -mnovect-double
9458 Change the preferred SIMD mode to SImode. The default is
9459 -mvect-double, which uses DImode as preferred SIMD mode.
9460
9461 -max-vect-align=num
9462 The maximum alignment for SIMD vector mode types. num may be 4 or
9463 8. The default is 8. Note that this is an ABI change, even though
9464 many library function interfaces are unaffected if they don't use
9465 SIMD vector modes in places that affect size and/or alignment of
9466 relevant types.
9467
9468 -msplit-vecmove-early
9469 Split vector moves into single word moves before reload. In theory
9470 this can give better register allocation, but so far the reverse
9471 seems to be generally the case.
9472
9473 -m1reg-reg
9474 Specify a register to hold the constant -1, which makes loading
9475 small negative constants and certain bitmasks faster. Allowable
9476 values for reg are r43 and r63, which specify use of that register
9477 as a fixed register, and none, which means that no register is used
9478 for this purpose. The default is -m1reg-none.
9479
9480 ARM Options
9481 These -m options are defined for Advanced RISC Machines (ARM)
9482 architectures:
9483
9484 -mabi=name
9485 Generate code for the specified ABI. Permissible values are: apcs-
9486 gnu, atpcs, aapcs, aapcs-linux and iwmmxt.
9487
9488 -mapcs-frame
9489 Generate a stack frame that is compliant with the ARM Procedure
9490 Call Standard for all functions, even if this is not strictly
9491 necessary for correct execution of the code. Specifying
9492 -fomit-frame-pointer with this option causes the stack frames not
9493 to be generated for leaf functions. The default is
9494 -mno-apcs-frame.
9495
9496 -mapcs
9497 This is a synonym for -mapcs-frame.
9498
9499 -mthumb-interwork
9500 Generate code that supports calling between the ARM and Thumb
9501 instruction sets. Without this option, on pre-v5 architectures,
9502 the two instruction sets cannot be reliably used inside one
9503 program. The default is -mno-thumb-interwork, since slightly
9504 larger code is generated when -mthumb-interwork is specified. In
9505 AAPCS configurations this option is meaningless.
9506
9507 -mno-sched-prolog
9508 Prevent the reordering of instructions in the function prologue, or
9509 the merging of those instruction with the instructions in the
9510 function's body. This means that all functions start with a
9511 recognizable set of instructions (or in fact one of a choice from a
9512 small set of different function prologues), and this information
9513 can be used to locate the start of functions inside an executable
9514 piece of code. The default is -msched-prolog.
9515
9516 -mfloat-abi=name
9517 Specifies which floating-point ABI to use. Permissible values are:
9518 soft, softfp and hard.
9519
9520 Specifying soft causes GCC to generate output containing library
9521 calls for floating-point operations. softfp allows the generation
9522 of code using hardware floating-point instructions, but still uses
9523 the soft-float calling conventions. hard allows generation of
9524 floating-point instructions and uses FPU-specific calling
9525 conventions.
9526
9527 The default depends on the specific target configuration. Note
9528 that the hard-float and soft-float ABIs are not link-compatible;
9529 you must compile your entire program with the same ABI, and link
9530 with a compatible set of libraries.
9531
9532 -mlittle-endian
9533 Generate code for a processor running in little-endian mode. This
9534 is the default for all standard configurations.
9535
9536 -mbig-endian
9537 Generate code for a processor running in big-endian mode; the
9538 default is to compile code for a little-endian processor.
9539
9540 -mwords-little-endian
9541 This option only applies when generating code for big-endian
9542 processors. Generate code for a little-endian word order but a
9543 big-endian byte order. That is, a byte order of the form 32107654.
9544 Note: this option should only be used if you require compatibility
9545 with code for big-endian ARM processors generated by versions of
9546 the compiler prior to 2.8. This option is now deprecated.
9547
9548 -march=name
9549 This specifies the name of the target ARM architecture. GCC uses
9550 this name to determine what kind of instructions it can emit when
9551 generating assembly code. This option can be used in conjunction
9552 with or instead of the -mcpu= option. Permissible names are:
9553 armv2, armv2a, armv3, armv3m, armv4, armv4t, armv5, armv5t, armv5e,
9554 armv5te, armv6, armv6j, armv6t2, armv6z, armv6zk, armv6-m, armv7,
9555 armv7-a, armv7-r, armv7-m, armv7e-m armv8-a, iwmmxt, iwmmxt2,
9556 ep9312.
9557
9558 -march=native causes the compiler to auto-detect the architecture
9559 of the build computer. At present, this feature is only supported
9560 on GNU/Linux, and not all architectures are recognized. If the
9561 auto-detect is unsuccessful the option has no effect.
9562
9563 -mtune=name
9564 This option specifies the name of the target ARM processor for
9565 which GCC should tune the performance of the code. For some ARM
9566 implementations better performance can be obtained by using this
9567 option. Permissible names are: arm2, arm250, arm3, arm6, arm60,
9568 arm600, arm610, arm620, arm7, arm7m, arm7d, arm7dm, arm7di,
9569 arm7dmi, arm70, arm700, arm700i, arm710, arm710c, arm7100, arm720,
9570 arm7500, arm7500fe, arm7tdmi, arm7tdmi-s, arm710t, arm720t,
9571 arm740t, strongarm, strongarm110, strongarm1100, strongarm1110,
9572 arm8, arm810, arm9, arm9e, arm920, arm920t, arm922t, arm946e-s,
9573 arm966e-s, arm968e-s, arm926ej-s, arm940t, arm9tdmi, arm10tdmi,
9574 arm1020t, arm1026ej-s, arm10e, arm1020e, arm1022e, arm1136j-s,
9575 arm1136jf-s, mpcore, mpcorenovfp, arm1156t2-s, arm1156t2f-s,
9576 arm1176jz-s, arm1176jzf-s, cortex-a5, cortex-a7, cortex-a8,
9577 cortex-a9, cortex-a15, cortex-r4, cortex-r4f, cortex-r5, cortex-m4,
9578 cortex-m3, cortex-m1, cortex-m0, cortex-m0plus, marvell-pj4,
9579 xscale, iwmmxt, iwmmxt2, ep9312, fa526, fa626, fa606te, fa626te,
9580 fmp626, fa726te.
9581
9582 -mtune=generic-arch specifies that GCC should tune the performance
9583 for a blend of processors within architecture arch. The aim is to
9584 generate code that run well on the current most popular processors,
9585 balancing between optimizations that benefit some CPUs in the
9586 range, and avoiding performance pitfalls of other CPUs. The
9587 effects of this option may change in future GCC versions as CPU
9588 models come and go.
9589
9590 -mtune=native causes the compiler to auto-detect the CPU of the
9591 build computer. At present, this feature is only supported on
9592 GNU/Linux, and not all architectures are recognized. If the auto-
9593 detect is unsuccessful the option has no effect.
9594
9595 -mcpu=name
9596 This specifies the name of the target ARM processor. GCC uses this
9597 name to derive the name of the target ARM architecture (as if
9598 specified by -march) and the ARM processor type for which to tune
9599 for performance (as if specified by -mtune). Where this option is
9600 used in conjunction with -march or -mtune, those options take
9601 precedence over the appropriate part of this option.
9602
9603 Permissible names for this option are the same as those for -mtune.
9604
9605 -mcpu=generic-arch is also permissible, and is equivalent to
9606 -march=arch -mtune=generic-arch. See -mtune for more information.
9607
9608 -mcpu=native causes the compiler to auto-detect the CPU of the
9609 build computer. At present, this feature is only supported on
9610 GNU/Linux, and not all architectures are recognized. If the auto-
9611 detect is unsuccessful the option has no effect.
9612
9613 -mfpu=name
9614 This specifies what floating-point hardware (or hardware emulation)
9615 is available on the target. Permissible names are: vfp, vfpv3,
9616 vfpv3-fp16, vfpv3-d16, vfpv3-d16-fp16, vfpv3xd, vfpv3xd-fp16, neon,
9617 neon-fp16, vfpv4, vfpv4-d16, fpv4-sp-d16, neon-vfpv4, fp-armv8,
9618 neon-fp-armv8, and crypto-neon-fp-armv8.
9619
9620 If -msoft-float is specified this specifies the format of floating-
9621 point values.
9622
9623 If the selected floating-point hardware includes the NEON extension
9624 (e.g. -mfpu=neon), note that floating-point operations are not
9625 generated by GCC's auto-vectorization pass unless
9626 -funsafe-math-optimizations is also specified. This is because
9627 NEON hardware does not fully implement the IEEE 754 standard for
9628 floating-point arithmetic (in particular denormal values are
9629 treated as zero), so the use of NEON instructions may lead to a
9630 loss of precision.
9631
9632 -mfp16-format=name
9633 Specify the format of the "__fp16" half-precision floating-point
9634 type. Permissible names are none, ieee, and alternative; the
9635 default is none, in which case the "__fp16" type is not defined.
9636
9637 -mstructure-size-boundary=n
9638 The sizes of all structures and unions are rounded up to a multiple
9639 of the number of bits set by this option. Permissible values are
9640 8, 32 and 64. The default value varies for different toolchains.
9641 For the COFF targeted toolchain the default value is 8. A value of
9642 64 is only allowed if the underlying ABI supports it.
9643
9644 Specifying a larger number can produce faster, more efficient code,
9645 but can also increase the size of the program. Different values
9646 are potentially incompatible. Code compiled with one value cannot
9647 necessarily expect to work with code or libraries compiled with
9648 another value, if they exchange information using structures or
9649 unions.
9650
9651 -mabort-on-noreturn
9652 Generate a call to the function "abort" at the end of a "noreturn"
9653 function. It is executed if the function tries to return.
9654
9655 -mlong-calls
9656 -mno-long-calls
9657 Tells the compiler to perform function calls by first loading the
9658 address of the function into a register and then performing a
9659 subroutine call on this register. This switch is needed if the
9660 target function lies outside of the 64-megabyte addressing range of
9661 the offset-based version of subroutine call instruction.
9662
9663 Even if this switch is enabled, not all function calls are turned
9664 into long calls. The heuristic is that static functions, functions
9665 that have the short-call attribute, functions that are inside the
9666 scope of a #pragma no_long_calls directive, and functions whose
9667 definitions have already been compiled within the current
9668 compilation unit are not turned into long calls. The exceptions to
9669 this rule are that weak function definitions, functions with the
9670 long-call attribute or the section attribute, and functions that
9671 are within the scope of a #pragma long_calls directive are always
9672 turned into long calls.
9673
9674 This feature is not enabled by default. Specifying -mno-long-calls
9675 restores the default behavior, as does placing the function calls
9676 within the scope of a #pragma long_calls_off directive. Note these
9677 switches have no effect on how the compiler generates code to
9678 handle function calls via function pointers.
9679
9680 -msingle-pic-base
9681 Treat the register used for PIC addressing as read-only, rather
9682 than loading it in the prologue for each function. The runtime
9683 system is responsible for initializing this register with an
9684 appropriate value before execution begins.
9685
9686 -mpic-register=reg
9687 Specify the register to be used for PIC addressing. For standard
9688 PIC base case, the default will be any suitable register determined
9689 by compiler. For single PIC base case, the default is R9 if target
9690 is EABI based or stack-checking is enabled, otherwise the default
9691 is R10.
9692
9693 -mpoke-function-name
9694 Write the name of each function into the text section, directly
9695 preceding the function prologue. The generated code is similar to
9696 this:
9697
9698 t0
9699 .ascii "arm_poke_function_name", 0
9700 .align
9701 t1
9702 .word 0xff000000 + (t1 - t0)
9703 arm_poke_function_name
9704 mov ip, sp
9705 stmfd sp!, {fp, ip, lr, pc}
9706 sub fp, ip, #4
9707
9708 When performing a stack backtrace, code can inspect the value of
9709 "pc" stored at "fp + 0". If the trace function then looks at
9710 location "pc - 12" and the top 8 bits are set, then we know that
9711 there is a function name embedded immediately preceding this
9712 location and has length "((pc[-3]) & 0xff000000)".
9713
9714 -mthumb
9715 -marm
9716 Select between generating code that executes in ARM and Thumb
9717 states. The default for most configurations is to generate code
9718 that executes in ARM state, but the default can be changed by
9719 configuring GCC with the --with-mode=state configure option.
9720
9721 -mtpcs-frame
9722 Generate a stack frame that is compliant with the Thumb Procedure
9723 Call Standard for all non-leaf functions. (A leaf function is one
9724 that does not call any other functions.) The default is
9725 -mno-tpcs-frame.
9726
9727 -mtpcs-leaf-frame
9728 Generate a stack frame that is compliant with the Thumb Procedure
9729 Call Standard for all leaf functions. (A leaf function is one that
9730 does not call any other functions.) The default is
9731 -mno-apcs-leaf-frame.
9732
9733 -mcallee-super-interworking
9734 Gives all externally visible functions in the file being compiled
9735 an ARM instruction set header which switches to Thumb mode before
9736 executing the rest of the function. This allows these functions to
9737 be called from non-interworking code. This option is not valid in
9738 AAPCS configurations because interworking is enabled by default.
9739
9740 -mcaller-super-interworking
9741 Allows calls via function pointers (including virtual functions) to
9742 execute correctly regardless of whether the target code has been
9743 compiled for interworking or not. There is a small overhead in the
9744 cost of executing a function pointer if this option is enabled.
9745 This option is not valid in AAPCS configurations because
9746 interworking is enabled by default.
9747
9748 -mtp=name
9749 Specify the access model for the thread local storage pointer. The
9750 valid models are soft, which generates calls to "__aeabi_read_tp",
9751 cp15, which fetches the thread pointer from "cp15" directly
9752 (supported in the arm6k architecture), and auto, which uses the
9753 best available method for the selected processor. The default
9754 setting is auto.
9755
9756 -mtls-dialect=dialect
9757 Specify the dialect to use for accessing thread local storage. Two
9758 dialects are supported---gnu and gnu2. The gnu dialect selects the
9759 original GNU scheme for supporting local and global dynamic TLS
9760 models. The gnu2 dialect selects the GNU descriptor scheme, which
9761 provides better performance for shared libraries. The GNU
9762 descriptor scheme is compatible with the original scheme, but does
9763 require new assembler, linker and library support. Initial and
9764 local exec TLS models are unaffected by this option and always use
9765 the original scheme.
9766
9767 -mword-relocations
9768 Only generate absolute relocations on word-sized values (i.e.
9769 R_ARM_ABS32). This is enabled by default on targets (uClinux,
9770 SymbianOS) where the runtime loader imposes this restriction, and
9771 when -fpic or -fPIC is specified.
9772
9773 -mfix-cortex-m3-ldrd
9774 Some Cortex-M3 cores can cause data corruption when "ldrd"
9775 instructions with overlapping destination and base registers are
9776 used. This option avoids generating these instructions. This
9777 option is enabled by default when -mcpu=cortex-m3 is specified.
9778
9779 -munaligned-access
9780 -mno-unaligned-access
9781 Enables (or disables) reading and writing of 16- and 32- bit values
9782 from addresses that are not 16- or 32- bit aligned. By default
9783 unaligned access is disabled for all pre-ARMv6 and all ARMv6-M
9784 architectures, and enabled for all other architectures. If
9785 unaligned access is not enabled then words in packed data
9786 structures will be accessed a byte at a time.
9787
9788 The ARM attribute "Tag_CPU_unaligned_access" will be set in the
9789 generated object file to either true or false, depending upon the
9790 setting of this option. If unaligned access is enabled then the
9791 preprocessor symbol "__ARM_FEATURE_UNALIGNED" will also be defined.
9792
9793 AVR Options
9794 These options are defined for AVR implementations:
9795
9796 -mmcu=mcu
9797 Specify Atmel AVR instruction set architectures (ISA) or MCU type.
9798
9799 The default for this option is@tie{}"avr2".
9800
9801 GCC supports the following AVR devices and ISAs:
9802
9803 "avr2"
9804 "Classic" devices with up to 8@tie{}KiB of program memory.
9805 mcu@tie{}= "attiny22", "attiny26", "at90c8534", "at90s2313",
9806 "at90s2323", "at90s2333", "at90s2343", "at90s4414",
9807 "at90s4433", "at90s4434", "at90s8515", "at90s8535".
9808
9809 "avr25"
9810 "Classic" devices with up to 8@tie{}KiB of program memory and
9811 with the "MOVW" instruction. mcu@tie{}= "ata5272", "ata6289",
9812 "attiny13", "attiny13a", "attiny2313", "attiny2313a",
9813 "attiny24", "attiny24a", "attiny25", "attiny261", "attiny261a",
9814 "attiny43u", "attiny4313", "attiny44", "attiny44a", "attiny45",
9815 "attiny461", "attiny461a", "attiny48", "attiny84", "attiny84a",
9816 "attiny85", "attiny861", "attiny861a", "attiny87", "attiny88",
9817 "at86rf401".
9818
9819 "avr3"
9820 "Classic" devices with 16@tie{}KiB up to 64@tie{}KiB of
9821 program memory. mcu@tie{}= "at43usb355", "at76c711".
9822
9823 "avr31"
9824 "Classic" devices with 128@tie{}KiB of program memory.
9825 mcu@tie{}= "atmega103", "at43usb320".
9826
9827 "avr35"
9828 "Classic" devices with 16@tie{}KiB up to 64@tie{}KiB of program
9829 memory and with the "MOVW" instruction. mcu@tie{}= "ata5505",
9830 "atmega16u2", "atmega32u2", "atmega8u2", "attiny1634",
9831 "attiny167", "at90usb162", "at90usb82".
9832
9833 "avr4"
9834 "Enhanced" devices with up to 8@tie{}KiB of program memory.
9835 mcu@tie{}= "ata6285", "ata6286", "atmega48", "atmega48a",
9836 "atmega48p", "atmega48pa", "atmega8", "atmega8a", "atmega8hva",
9837 "atmega8515", "atmega8535", "atmega88", "atmega88a",
9838 "atmega88p", "atmega88pa", "at90pwm1", "at90pwm2", "at90pwm2b",
9839 "at90pwm3", "at90pwm3b", "at90pwm81".
9840
9841 "avr5"
9842 "Enhanced" devices with 16@tie{}KiB up to 64@tie{}KiB of
9843 program memory. mcu@tie{}= "ata5790", "ata5790n", "ata5795",
9844 "atmega16", "atmega16a", "atmega16hva", "atmega16hva2",
9845 "atmega16hvb", "atmega16hvbrevb", "atmega16m1", "atmega16u4",
9846 "atmega161", "atmega162", "atmega163", "atmega164a",
9847 "atmega164p", "atmega164pa", "atmega165", "atmega165a",
9848 "atmega165p", "atmega165pa", "atmega168", "atmega168a",
9849 "atmega168p", "atmega168pa", "atmega169", "atmega169a",
9850 "atmega169p", "atmega169pa", "atmega26hvg", "atmega32",
9851 "atmega32a", "atmega32c1", "atmega32hvb", "atmega32hvbrevb",
9852 "atmega32m1", "atmega32u4", "atmega32u6", "atmega323",
9853 "atmega324a", "atmega324p", "atmega324pa", "atmega325",
9854 "atmega325a", "atmega325p", "atmega3250", "atmega3250a",
9855 "atmega3250p", "atmega3250pa", "atmega328", "atmega328p",
9856 "atmega329", "atmega329a", "atmega329p", "atmega329pa",
9857 "atmega3290", "atmega3290a", "atmega3290p", "atmega3290pa",
9858 "atmega406", "atmega48hvf", "atmega64", "atmega64a",
9859 "atmega64c1", "atmega64hve", "atmega64m1", "atmega64rfa2",
9860 "atmega64rfr2", "atmega640", "atmega644", "atmega644a",
9861 "atmega644p", "atmega644pa", "atmega645", "atmega645a",
9862 "atmega645p", "atmega6450", "atmega6450a", "atmega6450p",
9863 "atmega649", "atmega649a", "atmega649p", "atmega6490",
9864 "atmega6490a", "atmega6490p", "at90can32", "at90can64",
9865 "at90pwm161", "at90pwm216", "at90pwm316", "at90scr100",
9866 "at90usb646", "at90usb647", "at94k", "m3000".
9867
9868 "avr51"
9869 "Enhanced" devices with 128@tie{}KiB of program memory.
9870 mcu@tie{}= "atmega128", "atmega128a", "atmega128rfa1",
9871 "atmega1280", "atmega1281", "atmega1284", "atmega1284p",
9872 "at90can128", "at90usb1286", "at90usb1287".
9873
9874 "avr6"
9875 "Enhanced" devices with 3-byte PC, i.e. with more than
9876 128@tie{}KiB of program memory. mcu@tie{}= "atmega2560",
9877 "atmega2561".
9878
9879 "avrxmega2"
9880 "XMEGA" devices with more than 8@tie{}KiB and up to 64@tie{}KiB
9881 of program memory. mcu@tie{}= "atmxt112sl", "atmxt224",
9882 "atmxt224e", "atmxt336s", "atxmega16a4", "atxmega16a4u",
9883 "atxmega16c4", "atxmega16d4", "atxmega16x1", "atxmega32a4",
9884 "atxmega32a4u", "atxmega32c4", "atxmega32d4", "atxmega32e5",
9885 "atxmega32x1".
9886
9887 "avrxmega4"
9888 "XMEGA" devices with more than 64@tie{}KiB and up to
9889 128@tie{}KiB of program memory. mcu@tie{}= "atxmega64a3",
9890 "atxmega64a3u", "atxmega64a4u", "atxmega64b1", "atxmega64b3",
9891 "atxmega64c3", "atxmega64d3", "atxmega64d4".
9892
9893 "avrxmega5"
9894 "XMEGA" devices with more than 64@tie{}KiB and up to
9895 128@tie{}KiB of program memory and more than 64@tie{}KiB of
9896 RAM. mcu@tie{}= "atxmega64a1", "atxmega64a1u".
9897
9898 "avrxmega6"
9899 "XMEGA" devices with more than 128@tie{}KiB of program memory.
9900 mcu@tie{}= "atmxt540s", "atmxt540sreva", "atxmega128a3",
9901 "atxmega128a3u", "atxmega128b1", "atxmega128b3",
9902 "atxmega128c3", "atxmega128d3", "atxmega128d4", "atxmega192a3",
9903 "atxmega192a3u", "atxmega192c3", "atxmega192d3",
9904 "atxmega256a3", "atxmega256a3b", "atxmega256a3bu",
9905 "atxmega256a3u", "atxmega256c3", "atxmega256d3",
9906 "atxmega384c3", "atxmega384d3".
9907
9908 "avrxmega7"
9909 "XMEGA" devices with more than 128@tie{}KiB of program memory
9910 and more than 64@tie{}KiB of RAM. mcu@tie{}= "atxmega128a1",
9911 "atxmega128a1u", "atxmega128a4u".
9912
9913 "avr1"
9914 This ISA is implemented by the minimal AVR core and supported
9915 for assembler only. mcu@tie{}= "attiny11", "attiny12",
9916 "attiny15", "attiny28", "at90s1200".
9917
9918 -maccumulate-args
9919 Accumulate outgoing function arguments and acquire/release the
9920 needed stack space for outgoing function arguments once in function
9921 prologue/epilogue. Without this option, outgoing arguments are
9922 pushed before calling a function and popped afterwards.
9923
9924 Popping the arguments after the function call can be expensive on
9925 AVR so that accumulating the stack space might lead to smaller
9926 executables because arguments need not to be removed from the stack
9927 after such a function call.
9928
9929 This option can lead to reduced code size for functions that
9930 perform several calls to functions that get their arguments on the
9931 stack like calls to printf-like functions.
9932
9933 -mbranch-cost=cost
9934 Set the branch costs for conditional branch instructions to cost.
9935 Reasonable values for cost are small, non-negative integers. The
9936 default branch cost is 0.
9937
9938 -mcall-prologues
9939 Functions prologues/epilogues are expanded as calls to appropriate
9940 subroutines. Code size is smaller.
9941
9942 -mint8
9943 Assume "int" to be 8-bit integer. This affects the sizes of all
9944 types: a "char" is 1 byte, an "int" is 1 byte, a "long" is 2 bytes,
9945 and "long long" is 4 bytes. Please note that this option does not
9946 conform to the C standards, but it results in smaller code size.
9947
9948 -mno-interrupts
9949 Generated code is not compatible with hardware interrupts. Code
9950 size is smaller.
9951
9952 -mrelax
9953 Try to replace "CALL" resp. "JMP" instruction by the shorter
9954 "RCALL" resp. "RJMP" instruction if applicable. Setting "-mrelax"
9955 just adds the "--relax" option to the linker command line when the
9956 linker is called.
9957
9958 Jump relaxing is performed by the linker because jump offsets are
9959 not known before code is located. Therefore, the assembler code
9960 generated by the compiler is the same, but the instructions in the
9961 executable may differ from instructions in the assembler code.
9962
9963 Relaxing must be turned on if linker stubs are needed, see the
9964 section on "EIND" and linker stubs below.
9965
9966 -msp8
9967 Treat the stack pointer register as an 8-bit register, i.e. assume
9968 the high byte of the stack pointer is zero. In general, you don't
9969 need to set this option by hand.
9970
9971 This option is used internally by the compiler to select and build
9972 multilibs for architectures "avr2" and "avr25". These
9973 architectures mix devices with and without "SPH". For any setting
9974 other than "-mmcu=avr2" or "-mmcu=avr25" the compiler driver will
9975 add or remove this option from the compiler proper's command line,
9976 because the compiler then knows if the device or architecture has
9977 an 8-bit stack pointer and thus no "SPH" register or not.
9978
9979 -mstrict-X
9980 Use address register "X" in a way proposed by the hardware. This
9981 means that "X" is only used in indirect, post-increment or pre-
9982 decrement addressing.
9983
9984 Without this option, the "X" register may be used in the same way
9985 as "Y" or "Z" which then is emulated by additional instructions.
9986 For example, loading a value with "X+const" addressing with a small
9987 non-negative "const < 64" to a register Rn is performed as
9988
9989 adiw r26, const ; X += const
9990 ld <Rn>, X ; <Rn> = *X
9991 sbiw r26, const ; X -= const
9992
9993 -mtiny-stack
9994 Only change the lower 8@tie{}bits of the stack pointer.
9995
9996 -Waddr-space-convert
9997 Warn about conversions between address spaces in the case where the
9998 resulting address space is not contained in the incoming address
9999 space.
10000
10001 "EIND" and Devices with more than 128 Ki Bytes of Flash
10002
10003 Pointers in the implementation are 16@tie{}bits wide. The address of a
10004 function or label is represented as word address so that indirect jumps
10005 and calls can target any code address in the range of 64@tie{}Ki words.
10006
10007 In order to facilitate indirect jump on devices with more than
10008 128@tie{}Ki bytes of program memory space, there is a special function
10009 register called "EIND" that serves as most significant part of the
10010 target address when "EICALL" or "EIJMP" instructions are used.
10011
10012 Indirect jumps and calls on these devices are handled as follows by the
10013 compiler and are subject to some limitations:
10014
10015 · The compiler never sets "EIND".
10016
10017 · The compiler uses "EIND" implicitely in "EICALL"/"EIJMP"
10018 instructions or might read "EIND" directly in order to emulate an
10019 indirect call/jump by means of a "RET" instruction.
10020
10021 · The compiler assumes that "EIND" never changes during the startup
10022 code or during the application. In particular, "EIND" is not
10023 saved/restored in function or interrupt service routine
10024 prologue/epilogue.
10025
10026 · For indirect calls to functions and computed goto, the linker
10027 generates stubs. Stubs are jump pads sometimes also called
10028 trampolines. Thus, the indirect call/jump jumps to such a stub.
10029 The stub contains a direct jump to the desired address.
10030
10031 · Linker relaxation must be turned on so that the linker will
10032 generate the stubs correctly an all situaltion. See the compiler
10033 option "-mrelax" and the linler option "--relax". There are corner
10034 cases where the linker is supposed to generate stubs but aborts
10035 without relaxation and without a helpful error message.
10036
10037 · The default linker script is arranged for code with "EIND = 0". If
10038 code is supposed to work for a setup with "EIND != 0", a custom
10039 linker script has to be used in order to place the sections whose
10040 name start with ".trampolines" into the segment where "EIND" points
10041 to.
10042
10043 · The startup code from libgcc never sets "EIND". Notice that
10044 startup code is a blend of code from libgcc and AVR-LibC. For the
10045 impact of AVR-LibC on "EIND", see the AVR-LibC user manual
10046 ("http://nongnu.org/avr-libc/user-manual/").
10047
10048 · It is legitimate for user-specific startup code to set up "EIND"
10049 early, for example by means of initialization code located in
10050 section ".init3". Such code runs prior to general startup code that
10051 initializes RAM and calls constructors, but after the bit of
10052 startup code from AVR-LibC that sets "EIND" to the segment where
10053 the vector table is located.
10054
10055 #include <avr/io.h>
10056
10057 static void
10058 __attribute__((section(".init3"),naked,used,no_instrument_function))
10059 init3_set_eind (void)
10060 {
10061 __asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t"
10062 "out %i0,r24" :: "n" (&EIND) : "r24","memory");
10063 }
10064
10065 The "__trampolines_start" symbol is defined in the linker script.
10066
10067 · Stubs are generated automatically by the linker if the following
10068 two conditions are met:
10069
10070 -<The address of a label is taken by means of the "gs" modifier>
10071 (short for generate stubs) like so:
10072
10073 LDI r24, lo8(gs(<func>))
10074 LDI r25, hi8(gs(<func>))
10075
10076 -<The final location of that label is in a code segment>
10077 outside the segment where the stubs are located.
10078
10079 · The compiler emits such "gs" modifiers for code labels in the
10080 following situations:
10081
10082 -<Taking address of a function or code label.>
10083 -<Computed goto.>
10084 -<If prologue-save function is used, see -mcall-prologues>
10085 command-line option.
10086
10087 -<Switch/case dispatch tables. If you do not want such dispatch>
10088 tables you can specify the -fno-jump-tables command-line
10089 option.
10090
10091 -<C and C++ constructors/destructors called during
10092 startup/shutdown.>
10093 -<If the tools hit a "gs()" modifier explained above.>
10094 · Jumping to non-symbolic addresses like so is not supported:
10095
10096 int main (void)
10097 {
10098 /* Call function at word address 0x2 */
10099 return ((int(*)(void)) 0x2)();
10100 }
10101
10102 Instead, a stub has to be set up, i.e. the function has to be
10103 called through a symbol ("func_4" in the example):
10104
10105 int main (void)
10106 {
10107 extern int func_4 (void);
10108
10109 /* Call function at byte address 0x4 */
10110 return func_4();
10111 }
10112
10113 and the application be linked with "-Wl,--defsym,func_4=0x4".
10114 Alternatively, "func_4" can be defined in the linker script.
10115
10116 Handling of the "RAMPD", "RAMPX", "RAMPY" and "RAMPZ" Special Function
10117 Registers
10118
10119 Some AVR devices support memories larger than the 64@tie{}KiB range
10120 that can be accessed with 16-bit pointers. To access memory locations
10121 outside this 64@tie{}KiB range, the contentent of a "RAMP" register is
10122 used as high part of the address: The "X", "Y", "Z" address register is
10123 concatenated with the "RAMPX", "RAMPY", "RAMPZ" special function
10124 register, respectively, to get a wide address. Similarly, "RAMPD" is
10125 used together with direct addressing.
10126
10127 · The startup code initializes the "RAMP" special function registers
10128 with zero.
10129
10130 · If a AVR Named Address Spaces,named address space other than
10131 generic or "__flash" is used, then "RAMPZ" is set as needed before
10132 the operation.
10133
10134 · If the device supports RAM larger than 64@tie{KiB} and the compiler
10135 needs to change "RAMPZ" to accomplish an operation, "RAMPZ" is
10136 reset to zero after the operation.
10137
10138 · If the device comes with a specific "RAMP" register, the ISR
10139 prologue/epilogue saves/restores that SFR and initializes it with
10140 zero in case the ISR code might (implicitly) use it.
10141
10142 · RAM larger than 64@tie{KiB} is not supported by GCC for AVR
10143 targets. If you use inline assembler to read from locations
10144 outside the 16-bit address range and change one of the "RAMP"
10145 registers, you must reset it to zero after the access.
10146
10147 AVR Built-in Macros
10148
10149 GCC defines several built-in macros so that the user code can test for
10150 the presence or absence of features. Almost any of the following
10151 built-in macros are deduced from device capabilities and thus triggered
10152 by the "-mmcu=" command-line option.
10153
10154 For even more AVR-specific built-in macros see AVR Named Address Spaces
10155 and AVR Built-in Functions.
10156
10157 "__AVR_ARCH__"
10158 Build-in macro that resolves to a decimal number that identifies
10159 the architecture and depends on the "-mmcu=mcu" option. Possible
10160 values are:
10161
10162 2, 25, 3, 31, 35, 4, 5, 51, 6, 102, 104, 105, 106, 107
10163
10164 for mcu="avr2", "avr25", "avr3", "avr31", "avr35", "avr4", "avr5",
10165 "avr51", "avr6", "avrxmega2", "avrxmega4", "avrxmega5",
10166 "avrxmega6", "avrxmega7", respectively. If mcu specifies a device,
10167 this built-in macro is set accordingly. For example, with
10168 "-mmcu=atmega8" the macro will be defined to 4.
10169
10170 "__AVR_Device__"
10171 Setting "-mmcu=device" defines this built-in macro which reflects
10172 the device's name. For example, "-mmcu=atmega8" defines the built-
10173 in macro "__AVR_ATmega8__", "-mmcu=attiny261a" defines
10174 "__AVR_ATtiny261A__", etc.
10175
10176 The built-in macros' names follow the scheme "__AVR_Device__" where
10177 Device is the device name as from the AVR user manual. The
10178 difference between Device in the built-in macro and device in
10179 "-mmcu=device" is that the latter is always lowercase.
10180
10181 If device is not a device but only a core architecture like
10182 "avr51", this macro will not be defined.
10183
10184 "__AVR_XMEGA__"
10185 The device / architecture belongs to the XMEGA family of devices.
10186
10187 "__AVR_HAVE_ELPM__"
10188 The device has the the "ELPM" instruction.
10189
10190 "__AVR_HAVE_ELPMX__"
10191 The device has the "ELPM Rn,Z" and "ELPM Rn,Z+" instructions.
10192
10193 "__AVR_HAVE_MOVW__"
10194 The device has the "MOVW" instruction to perform 16-bit register-
10195 register moves.
10196
10197 "__AVR_HAVE_LPMX__"
10198 The device has the "LPM Rn,Z" and "LPM Rn,Z+" instructions.
10199
10200 "__AVR_HAVE_MUL__"
10201 The device has a hardware multiplier.
10202
10203 "__AVR_HAVE_JMP_CALL__"
10204 The device has the "JMP" and "CALL" instructions. This is the case
10205 for devices with at least 16@tie{}KiB of program memory.
10206
10207 "__AVR_HAVE_EIJMP_EICALL__"
10208 "__AVR_3_BYTE_PC__"
10209 The device has the "EIJMP" and "EICALL" instructions. This is the
10210 case for devices with more than 128@tie{}KiB of program memory.
10211 This also means that the program counter (PC) is 3@tie{}bytes wide.
10212
10213 "__AVR_2_BYTE_PC__"
10214 The program counter (PC) is 2@tie{}bytes wide. This is the case for
10215 devices with up to 128@tie{}KiB of program memory.
10216
10217 "__AVR_HAVE_8BIT_SP__"
10218 "__AVR_HAVE_16BIT_SP__"
10219 The stack pointer (SP) register is treated as 8-bit respectively
10220 16-bit register by the compiler. The definition of these macros is
10221 affected by "-mtiny-stack".
10222
10223 "__AVR_HAVE_SPH__"
10224 "__AVR_SP8__"
10225 The device has the SPH (high part of stack pointer) special
10226 function register or has an 8-bit stack pointer, respectively. The
10227 definition of these macros is affected by "-mmcu=" and in the cases
10228 of "-mmcu=avr2" and "-mmcu=avr25" also by "-msp8".
10229
10230 "__AVR_HAVE_RAMPD__"
10231 "__AVR_HAVE_RAMPX__"
10232 "__AVR_HAVE_RAMPY__"
10233 "__AVR_HAVE_RAMPZ__"
10234 The device has the "RAMPD", "RAMPX", "RAMPY", "RAMPZ" special
10235 function register, respectively.
10236
10237 "__NO_INTERRUPTS__"
10238 This macro reflects the "-mno-interrupts" command line option.
10239
10240 "__AVR_ERRATA_SKIP__"
10241 "__AVR_ERRATA_SKIP_JMP_CALL__"
10242 Some AVR devices (AT90S8515, ATmega103) must not skip 32-bit
10243 instructions because of a hardware erratum. Skip instructions are
10244 "SBRS", "SBRC", "SBIS", "SBIC" and "CPSE". The second macro is
10245 only defined if "__AVR_HAVE_JMP_CALL__" is also set.
10246
10247 "__AVR_SFR_OFFSET__=offset"
10248 Instructions that can address I/O special function registers
10249 directly like "IN", "OUT", "SBI", etc. may use a different address
10250 as if addressed by an instruction to access RAM like "LD" or "STS".
10251 This offset depends on the device architecture and has to be
10252 subtracted from the RAM address in order to get the respective
10253 I/O@tie{}address.
10254
10255 "__WITH_AVRLIBC__"
10256 The compiler is configured to be used together with AVR-Libc. See
10257 the "--with-avrlibc" configure option.
10258
10259 Blackfin Options
10260 -mcpu=cpu[-sirevision]
10261 Specifies the name of the target Blackfin processor. Currently,
10262 cpu can be one of bf512, bf514, bf516, bf518, bf522, bf523, bf524,
10263 bf525, bf526, bf527, bf531, bf532, bf533, bf534, bf536, bf537,
10264 bf538, bf539, bf542, bf544, bf547, bf548, bf549, bf542m, bf544m,
10265 bf547m, bf548m, bf549m, bf561, bf592.
10266
10267 The optional sirevision specifies the silicon revision of the
10268 target Blackfin processor. Any workarounds available for the
10269 targeted silicon revision are enabled. If sirevision is none, no
10270 workarounds are enabled. If sirevision is any, all workarounds for
10271 the targeted processor are enabled. The "__SILICON_REVISION__"
10272 macro is defined to two hexadecimal digits representing the major
10273 and minor numbers in the silicon revision. If sirevision is none,
10274 the "__SILICON_REVISION__" is not defined. If sirevision is any,
10275 the "__SILICON_REVISION__" is defined to be 0xffff. If this
10276 optional sirevision is not used, GCC assumes the latest known
10277 silicon revision of the targeted Blackfin processor.
10278
10279 GCC defines a preprocessor macro for the specified cpu. For the
10280 bfin-elf toolchain, this option causes the hardware BSP provided by
10281 libgloss to be linked in if -msim is not given.
10282
10283 Without this option, bf532 is used as the processor by default.
10284
10285 Note that support for bf561 is incomplete. For bf561, only the
10286 preprocessor macro is defined.
10287
10288 -msim
10289 Specifies that the program will be run on the simulator. This
10290 causes the simulator BSP provided by libgloss to be linked in.
10291 This option has effect only for bfin-elf toolchain. Certain other
10292 options, such as -mid-shared-library and -mfdpic, imply -msim.
10293
10294 -momit-leaf-frame-pointer
10295 Don't keep the frame pointer in a register for leaf functions.
10296 This avoids the instructions to save, set up and restore frame
10297 pointers and makes an extra register available in leaf functions.
10298 The option -fomit-frame-pointer removes the frame pointer for all
10299 functions, which might make debugging harder.
10300
10301 -mspecld-anomaly
10302 When enabled, the compiler ensures that the generated code does not
10303 contain speculative loads after jump instructions. If this option
10304 is used, "__WORKAROUND_SPECULATIVE_LOADS" is defined.
10305
10306 -mno-specld-anomaly
10307 Don't generate extra code to prevent speculative loads from
10308 occurring.
10309
10310 -mcsync-anomaly
10311 When enabled, the compiler ensures that the generated code does not
10312 contain CSYNC or SSYNC instructions too soon after conditional
10313 branches. If this option is used, "__WORKAROUND_SPECULATIVE_SYNCS"
10314 is defined.
10315
10316 -mno-csync-anomaly
10317 Don't generate extra code to prevent CSYNC or SSYNC instructions
10318 from occurring too soon after a conditional branch.
10319
10320 -mlow-64k
10321 When enabled, the compiler is free to take advantage of the
10322 knowledge that the entire program fits into the low 64k of memory.
10323
10324 -mno-low-64k
10325 Assume that the program is arbitrarily large. This is the default.
10326
10327 -mstack-check-l1
10328 Do stack checking using information placed into L1 scratchpad
10329 memory by the uClinux kernel.
10330
10331 -mid-shared-library
10332 Generate code that supports shared libraries via the library ID
10333 method. This allows for execute in place and shared libraries in
10334 an environment without virtual memory management. This option
10335 implies -fPIC. With a bfin-elf target, this option implies -msim.
10336
10337 -mno-id-shared-library
10338 Generate code that doesn't assume ID-based shared libraries are
10339 being used. This is the default.
10340
10341 -mleaf-id-shared-library
10342 Generate code that supports shared libraries via the library ID
10343 method, but assumes that this library or executable won't link
10344 against any other ID shared libraries. That allows the compiler to
10345 use faster code for jumps and calls.
10346
10347 -mno-leaf-id-shared-library
10348 Do not assume that the code being compiled won't link against any
10349 ID shared libraries. Slower code is generated for jump and call
10350 insns.
10351
10352 -mshared-library-id=n
10353 Specifies the identification number of the ID-based shared library
10354 being compiled. Specifying a value of 0 generates more compact
10355 code; specifying other values forces the allocation of that number
10356 to the current library but is no more space- or time-efficient than
10357 omitting this option.
10358
10359 -msep-data
10360 Generate code that allows the data segment to be located in a
10361 different area of memory from the text segment. This allows for
10362 execute in place in an environment without virtual memory
10363 management by eliminating relocations against the text section.
10364
10365 -mno-sep-data
10366 Generate code that assumes that the data segment follows the text
10367 segment. This is the default.
10368
10369 -mlong-calls
10370 -mno-long-calls
10371 Tells the compiler to perform function calls by first loading the
10372 address of the function into a register and then performing a
10373 subroutine call on this register. This switch is needed if the
10374 target function lies outside of the 24-bit addressing range of the
10375 offset-based version of subroutine call instruction.
10376
10377 This feature is not enabled by default. Specifying -mno-long-calls
10378 restores the default behavior. Note these switches have no effect
10379 on how the compiler generates code to handle function calls via
10380 function pointers.
10381
10382 -mfast-fp
10383 Link with the fast floating-point library. This library relaxes
10384 some of the IEEE floating-point standard's rules for checking
10385 inputs against Not-a-Number (NAN), in the interest of performance.
10386
10387 -minline-plt
10388 Enable inlining of PLT entries in function calls to functions that
10389 are not known to bind locally. It has no effect without -mfdpic.
10390
10391 -mmulticore
10392 Build a standalone application for multicore Blackfin processors.
10393 This option causes proper start files and link scripts supporting
10394 multicore to be used, and defines the macro "__BFIN_MULTICORE". It
10395 can only be used with -mcpu=bf561[-sirevision].
10396
10397 This option can be used with -mcorea or -mcoreb, which selects the
10398 one-application-per-core programming model. Without -mcorea or
10399 -mcoreb, the single-application/dual-core programming model is
10400 used. In this model, the main function of Core B should be named as
10401 "coreb_main".
10402
10403 If this option is not used, the single-core application programming
10404 model is used.
10405
10406 -mcorea
10407 Build a standalone application for Core A of BF561 when using the
10408 one-application-per-core programming model. Proper start files and
10409 link scripts are used to support Core A, and the macro
10410 "__BFIN_COREA" is defined. This option can only be used in
10411 conjunction with -mmulticore.
10412
10413 -mcoreb
10414 Build a standalone application for Core B of BF561 when using the
10415 one-application-per-core programming model. Proper start files and
10416 link scripts are used to support Core B, and the macro
10417 "__BFIN_COREB" is defined. When this option is used, "coreb_main"
10418 should be used instead of "main". This option can only be used in
10419 conjunction with -mmulticore.
10420
10421 -msdram
10422 Build a standalone application for SDRAM. Proper start files and
10423 link scripts are used to put the application into SDRAM, and the
10424 macro "__BFIN_SDRAM" is defined. The loader should initialize
10425 SDRAM before loading the application.
10426
10427 -micplb
10428 Assume that ICPLBs are enabled at run time. This has an effect on
10429 certain anomaly workarounds. For Linux targets, the default is to
10430 assume ICPLBs are enabled; for standalone applications the default
10431 is off.
10432
10433 C6X Options
10434 -march=name
10435 This specifies the name of the target architecture. GCC uses this
10436 name to determine what kind of instructions it can emit when
10437 generating assembly code. Permissible names are: c62x, c64x,
10438 c64x+, c67x, c67x+, c674x.
10439
10440 -mbig-endian
10441 Generate code for a big-endian target.
10442
10443 -mlittle-endian
10444 Generate code for a little-endian target. This is the default.
10445
10446 -msim
10447 Choose startup files and linker script suitable for the simulator.
10448
10449 -msdata=default
10450 Put small global and static data in the .neardata section, which is
10451 pointed to by register "B14". Put small uninitialized global and
10452 static data in the .bss section, which is adjacent to the .neardata
10453 section. Put small read-only data into the .rodata section. The
10454 corresponding sections used for large pieces of data are .fardata,
10455 .far and .const.
10456
10457 -msdata=all
10458 Put all data, not just small objects, into the sections reserved
10459 for small data, and use addressing relative to the "B14" register
10460 to access them.
10461
10462 -msdata=none
10463 Make no use of the sections reserved for small data, and use
10464 absolute addresses to access all data. Put all initialized global
10465 and static data in the .fardata section, and all uninitialized data
10466 in the .far section. Put all constant data into the .const
10467 section.
10468
10469 CRIS Options
10470 These options are defined specifically for the CRIS ports.
10471
10472 -march=architecture-type
10473 -mcpu=architecture-type
10474 Generate code for the specified architecture. The choices for
10475 architecture-type are v3, v8 and v10 for respectively ETRAX 4,
10476 ETRAX 100, and ETRAX 100 LX. Default is v0 except for cris-axis-
10477 linux-gnu, where the default is v10.
10478
10479 -mtune=architecture-type
10480 Tune to architecture-type everything applicable about the generated
10481 code, except for the ABI and the set of available instructions.
10482 The choices for architecture-type are the same as for
10483 -march=architecture-type.
10484
10485 -mmax-stack-frame=n
10486 Warn when the stack frame of a function exceeds n bytes.
10487
10488 -metrax4
10489 -metrax100
10490 The options -metrax4 and -metrax100 are synonyms for -march=v3 and
10491 -march=v8 respectively.
10492
10493 -mmul-bug-workaround
10494 -mno-mul-bug-workaround
10495 Work around a bug in the "muls" and "mulu" instructions for CPU
10496 models where it applies. This option is active by default.
10497
10498 -mpdebug
10499 Enable CRIS-specific verbose debug-related information in the
10500 assembly code. This option also has the effect of turning off the
10501 #NO_APP formatted-code indicator to the assembler at the beginning
10502 of the assembly file.
10503
10504 -mcc-init
10505 Do not use condition-code results from previous instruction; always
10506 emit compare and test instructions before use of condition codes.
10507
10508 -mno-side-effects
10509 Do not emit instructions with side effects in addressing modes
10510 other than post-increment.
10511
10512 -mstack-align
10513 -mno-stack-align
10514 -mdata-align
10515 -mno-data-align
10516 -mconst-align
10517 -mno-const-align
10518 These options (no- options) arrange (eliminate arrangements) for
10519 the stack frame, individual data and constants to be aligned for
10520 the maximum single data access size for the chosen CPU model. The
10521 default is to arrange for 32-bit alignment. ABI details such as
10522 structure layout are not affected by these options.
10523
10524 -m32-bit
10525 -m16-bit
10526 -m8-bit
10527 Similar to the stack- data- and const-align options above, these
10528 options arrange for stack frame, writable data and constants to all
10529 be 32-bit, 16-bit or 8-bit aligned. The default is 32-bit
10530 alignment.
10531
10532 -mno-prologue-epilogue
10533 -mprologue-epilogue
10534 With -mno-prologue-epilogue, the normal function prologue and
10535 epilogue which set up the stack frame are omitted and no return
10536 instructions or return sequences are generated in the code. Use
10537 this option only together with visual inspection of the compiled
10538 code: no warnings or errors are generated when call-saved registers
10539 must be saved, or storage for local variables needs to be
10540 allocated.
10541
10542 -mno-gotplt
10543 -mgotplt
10544 With -fpic and -fPIC, don't generate (do generate) instruction
10545 sequences that load addresses for functions from the PLT part of
10546 the GOT rather than (traditional on other architectures) calls to
10547 the PLT. The default is -mgotplt.
10548
10549 -melf
10550 Legacy no-op option only recognized with the cris-axis-elf and
10551 cris-axis-linux-gnu targets.
10552
10553 -mlinux
10554 Legacy no-op option only recognized with the cris-axis-linux-gnu
10555 target.
10556
10557 -sim
10558 This option, recognized for the cris-axis-elf, arranges to link
10559 with input-output functions from a simulator library. Code,
10560 initialized data and zero-initialized data are allocated
10561 consecutively.
10562
10563 -sim2
10564 Like -sim, but pass linker options to locate initialized data at
10565 0x40000000 and zero-initialized data at 0x80000000.
10566
10567 CR16 Options
10568 These options are defined specifically for the CR16 ports.
10569
10570 -mmac
10571 Enable the use of multiply-accumulate instructions. Disabled by
10572 default.
10573
10574 -mcr16cplus
10575 -mcr16c
10576 Generate code for CR16C or CR16C+ architecture. CR16C+ architecture
10577 is default.
10578
10579 -msim
10580 Links the library libsim.a which is in compatible with simulator.
10581 Applicable to ELF compiler only.
10582
10583 -mint32
10584 Choose integer type as 32-bit wide.
10585
10586 -mbit-ops
10587 Generates "sbit"/"cbit" instructions for bit manipulations.
10588
10589 -mdata-model=model
10590 Choose a data model. The choices for model are near, far or medium.
10591 medium is default. However, far is not valid with -mcr16c, as the
10592 CR16C architecture does not support the far data model.
10593
10594 Darwin Options
10595 These options are defined for all architectures running the Darwin
10596 operating system.
10597
10598 FSF GCC on Darwin does not create "fat" object files; it creates an
10599 object file for the single architecture that GCC was built to target.
10600 Apple's GCC on Darwin does create "fat" files if multiple -arch options
10601 are used; it does so by running the compiler or linker multiple times
10602 and joining the results together with lipo.
10603
10604 The subtype of the file created (like ppc7400 or ppc970 or i686) is
10605 determined by the flags that specify the ISA that GCC is targeting,
10606 like -mcpu or -march. The -force_cpusubtype_ALL option can be used to
10607 override this.
10608
10609 The Darwin tools vary in their behavior when presented with an ISA
10610 mismatch. The assembler, as, only permits instructions to be used that
10611 are valid for the subtype of the file it is generating, so you cannot
10612 put 64-bit instructions in a ppc750 object file. The linker for shared
10613 libraries, /usr/bin/libtool, fails and prints an error if asked to
10614 create a shared library with a less restrictive subtype than its input
10615 files (for instance, trying to put a ppc970 object file in a ppc7400
10616 library). The linker for executables, ld, quietly gives the executable
10617 the most restrictive subtype of any of its input files.
10618
10619 -Fdir
10620 Add the framework directory dir to the head of the list of
10621 directories to be searched for header files. These directories are
10622 interleaved with those specified by -I options and are scanned in a
10623 left-to-right order.
10624
10625 A framework directory is a directory with frameworks in it. A
10626 framework is a directory with a Headers and/or PrivateHeaders
10627 directory contained directly in it that ends in .framework. The
10628 name of a framework is the name of this directory excluding the
10629 .framework. Headers associated with the framework are found in one
10630 of those two directories, with Headers being searched first. A
10631 subframework is a framework directory that is in a framework's
10632 Frameworks directory. Includes of subframework headers can only
10633 appear in a header of a framework that contains the subframework,
10634 or in a sibling subframework header. Two subframeworks are
10635 siblings if they occur in the same framework. A subframework
10636 should not have the same name as a framework; a warning is issued
10637 if this is violated. Currently a subframework cannot have
10638 subframeworks; in the future, the mechanism may be extended to
10639 support this. The standard frameworks can be found in
10640 /System/Library/Frameworks and /Library/Frameworks. An example
10641 include looks like "#include <Framework/header.h>", where Framework
10642 denotes the name of the framework and header.h is found in the
10643 PrivateHeaders or Headers directory.
10644
10645 -iframeworkdir
10646 Like -F except the directory is a treated as a system directory.
10647 The main difference between this -iframework and -F is that with
10648 -iframework the compiler does not warn about constructs contained
10649 within header files found via dir. This option is valid only for
10650 the C family of languages.
10651
10652 -gused
10653 Emit debugging information for symbols that are used. For stabs
10654 debugging format, this enables -feliminate-unused-debug-symbols.
10655 This is by default ON.
10656
10657 -gfull
10658 Emit debugging information for all symbols and types.
10659
10660 -mmacosx-version-min=version
10661 The earliest version of MacOS X that this executable will run on is
10662 version. Typical values of version include 10.1, 10.2, and 10.3.9.
10663
10664 If the compiler was built to use the system's headers by default,
10665 then the default for this option is the system version on which the
10666 compiler is running, otherwise the default is to make choices that
10667 are compatible with as many systems and code bases as possible.
10668
10669 -mkernel
10670 Enable kernel development mode. The -mkernel option sets -static,
10671 -fno-common, -fno-use-cxa-atexit, -fno-exceptions,
10672 -fno-non-call-exceptions, -fapple-kext, -fno-weak and -fno-rtti
10673 where applicable. This mode also sets -mno-altivec, -msoft-float,
10674 -fno-builtin and -mlong-branch for PowerPC targets.
10675
10676 -mone-byte-bool
10677 Override the defaults for bool so that sizeof(bool)==1. By default
10678 sizeof(bool) is 4 when compiling for Darwin/PowerPC and 1 when
10679 compiling for Darwin/x86, so this option has no effect on x86.
10680
10681 Warning: The -mone-byte-bool switch causes GCC to generate code
10682 that is not binary compatible with code generated without that
10683 switch. Using this switch may require recompiling all other
10684 modules in a program, including system libraries. Use this switch
10685 to conform to a non-default data model.
10686
10687 -mfix-and-continue
10688 -ffix-and-continue
10689 -findirect-data
10690 Generate code suitable for fast turnaround development, such as to
10691 allow GDB to dynamically load ".o" files into already-running
10692 programs. -findirect-data and -ffix-and-continue are provided for
10693 backwards compatibility.
10694
10695 -all_load
10696 Loads all members of static archive libraries. See man ld(1) for
10697 more information.
10698
10699 -arch_errors_fatal
10700 Cause the errors having to do with files that have the wrong
10701 architecture to be fatal.
10702
10703 -bind_at_load
10704 Causes the output file to be marked such that the dynamic linker
10705 will bind all undefined references when the file is loaded or
10706 launched.
10707
10708 -bundle
10709 Produce a Mach-o bundle format file. See man ld(1) for more
10710 information.
10711
10712 -bundle_loader executable
10713 This option specifies the executable that will load the build
10714 output file being linked. See man ld(1) for more information.
10715
10716 -dynamiclib
10717 When passed this option, GCC produces a dynamic library instead of
10718 an executable when linking, using the Darwin libtool command.
10719
10720 -force_cpusubtype_ALL
10721 This causes GCC's output file to have the ALL subtype, instead of
10722 one controlled by the -mcpu or -march option.
10723
10724 -allowable_client client_name
10725 -client_name
10726 -compatibility_version
10727 -current_version
10728 -dead_strip
10729 -dependency-file
10730 -dylib_file
10731 -dylinker_install_name
10732 -dynamic
10733 -exported_symbols_list
10734 -filelist
10735 -flat_namespace
10736 -force_flat_namespace
10737 -headerpad_max_install_names
10738 -image_base
10739 -init
10740 -install_name
10741 -keep_private_externs
10742 -multi_module
10743 -multiply_defined
10744 -multiply_defined_unused
10745 -noall_load
10746 -no_dead_strip_inits_and_terms
10747 -nofixprebinding
10748 -nomultidefs
10749 -noprebind
10750 -noseglinkedit
10751 -pagezero_size
10752 -prebind
10753 -prebind_all_twolevel_modules
10754 -private_bundle
10755 -read_only_relocs
10756 -sectalign
10757 -sectobjectsymbols
10758 -whyload
10759 -seg1addr
10760 -sectcreate
10761 -sectobjectsymbols
10762 -sectorder
10763 -segaddr
10764 -segs_read_only_addr
10765 -segs_read_write_addr
10766 -seg_addr_table
10767 -seg_addr_table_filename
10768 -seglinkedit
10769 -segprot
10770 -segs_read_only_addr
10771 -segs_read_write_addr
10772 -single_module
10773 -static
10774 -sub_library
10775 -sub_umbrella
10776 -twolevel_namespace
10777 -umbrella
10778 -undefined
10779 -unexported_symbols_list
10780 -weak_reference_mismatches
10781 -whatsloaded
10782 These options are passed to the Darwin linker. The Darwin linker
10783 man page describes them in detail.
10784
10785 DEC Alpha Options
10786 These -m options are defined for the DEC Alpha implementations:
10787
10788 -mno-soft-float
10789 -msoft-float
10790 Use (do not use) the hardware floating-point instructions for
10791 floating-point operations. When -msoft-float is specified,
10792 functions in libgcc.a are used to perform floating-point
10793 operations. Unless they are replaced by routines that emulate the
10794 floating-point operations, or compiled in such a way as to call
10795 such emulations routines, these routines issue floating-point
10796 operations. If you are compiling for an Alpha without floating-
10797 point operations, you must ensure that the library is built so as
10798 not to call them.
10799
10800 Note that Alpha implementations without floating-point operations
10801 are required to have floating-point registers.
10802
10803 -mfp-reg
10804 -mno-fp-regs
10805 Generate code that uses (does not use) the floating-point register
10806 set. -mno-fp-regs implies -msoft-float. If the floating-point
10807 register set is not used, floating-point operands are passed in
10808 integer registers as if they were integers and floating-point
10809 results are passed in $0 instead of $f0. This is a non-standard
10810 calling sequence, so any function with a floating-point argument or
10811 return value called by code compiled with -mno-fp-regs must also be
10812 compiled with that option.
10813
10814 A typical use of this option is building a kernel that does not
10815 use, and hence need not save and restore, any floating-point
10816 registers.
10817
10818 -mieee
10819 The Alpha architecture implements floating-point hardware optimized
10820 for maximum performance. It is mostly compliant with the IEEE
10821 floating-point standard. However, for full compliance, software
10822 assistance is required. This option generates code fully IEEE-
10823 compliant code except that the inexact-flag is not maintained (see
10824 below). If this option is turned on, the preprocessor macro
10825 "_IEEE_FP" is defined during compilation. The resulting code is
10826 less efficient but is able to correctly support denormalized
10827 numbers and exceptional IEEE values such as not-a-number and
10828 plus/minus infinity. Other Alpha compilers call this option
10829 -ieee_with_no_inexact.
10830
10831 -mieee-with-inexact
10832 This is like -mieee except the generated code also maintains the
10833 IEEE inexact-flag. Turning on this option causes the generated
10834 code to implement fully-compliant IEEE math. In addition to
10835 "_IEEE_FP", "_IEEE_FP_EXACT" is defined as a preprocessor macro.
10836 On some Alpha implementations the resulting code may execute
10837 significantly slower than the code generated by default. Since
10838 there is very little code that depends on the inexact-flag, you
10839 should normally not specify this option. Other Alpha compilers
10840 call this option -ieee_with_inexact.
10841
10842 -mfp-trap-mode=trap-mode
10843 This option controls what floating-point related traps are enabled.
10844 Other Alpha compilers call this option -fptm trap-mode. The trap
10845 mode can be set to one of four values:
10846
10847 n This is the default (normal) setting. The only traps that are
10848 enabled are the ones that cannot be disabled in software (e.g.,
10849 division by zero trap).
10850
10851 u In addition to the traps enabled by n, underflow traps are
10852 enabled as well.
10853
10854 su Like u, but the instructions are marked to be safe for software
10855 completion (see Alpha architecture manual for details).
10856
10857 sui Like su, but inexact traps are enabled as well.
10858
10859 -mfp-rounding-mode=rounding-mode
10860 Selects the IEEE rounding mode. Other Alpha compilers call this
10861 option -fprm rounding-mode. The rounding-mode can be one of:
10862
10863 n Normal IEEE rounding mode. Floating-point numbers are rounded
10864 towards the nearest machine number or towards the even machine
10865 number in case of a tie.
10866
10867 m Round towards minus infinity.
10868
10869 c Chopped rounding mode. Floating-point numbers are rounded
10870 towards zero.
10871
10872 d Dynamic rounding mode. A field in the floating-point control
10873 register (fpcr, see Alpha architecture reference manual)
10874 controls the rounding mode in effect. The C library
10875 initializes this register for rounding towards plus infinity.
10876 Thus, unless your program modifies the fpcr, d corresponds to
10877 round towards plus infinity.
10878
10879 -mtrap-precision=trap-precision
10880 In the Alpha architecture, floating-point traps are imprecise.
10881 This means without software assistance it is impossible to recover
10882 from a floating trap and program execution normally needs to be
10883 terminated. GCC can generate code that can assist operating system
10884 trap handlers in determining the exact location that caused a
10885 floating-point trap. Depending on the requirements of an
10886 application, different levels of precisions can be selected:
10887
10888 p Program precision. This option is the default and means a trap
10889 handler can only identify which program caused a floating-point
10890 exception.
10891
10892 f Function precision. The trap handler can determine the
10893 function that caused a floating-point exception.
10894
10895 i Instruction precision. The trap handler can determine the
10896 exact instruction that caused a floating-point exception.
10897
10898 Other Alpha compilers provide the equivalent options called
10899 -scope_safe and -resumption_safe.
10900
10901 -mieee-conformant
10902 This option marks the generated code as IEEE conformant. You must
10903 not use this option unless you also specify -mtrap-precision=i and
10904 either -mfp-trap-mode=su or -mfp-trap-mode=sui. Its only effect is
10905 to emit the line .eflag 48 in the function prologue of the
10906 generated assembly file.
10907
10908 -mbuild-constants
10909 Normally GCC examines a 32- or 64-bit integer constant to see if it
10910 can construct it from smaller constants in two or three
10911 instructions. If it cannot, it outputs the constant as a literal
10912 and generates code to load it from the data segment at run time.
10913
10914 Use this option to require GCC to construct all integer constants
10915 using code, even if it takes more instructions (the maximum is
10916 six).
10917
10918 You typically use this option to build a shared library dynamic
10919 loader. Itself a shared library, it must relocate itself in memory
10920 before it can find the variables and constants in its own data
10921 segment.
10922
10923 -mbwx
10924 -mno-bwx
10925 -mcix
10926 -mno-cix
10927 -mfix
10928 -mno-fix
10929 -mmax
10930 -mno-max
10931 Indicate whether GCC should generate code to use the optional BWX,
10932 CIX, FIX and MAX instruction sets. The default is to use the
10933 instruction sets supported by the CPU type specified via -mcpu=
10934 option or that of the CPU on which GCC was built if none is
10935 specified.
10936
10937 -mfloat-vax
10938 -mfloat-ieee
10939 Generate code that uses (does not use) VAX F and G floating-point
10940 arithmetic instead of IEEE single and double precision.
10941
10942 -mexplicit-relocs
10943 -mno-explicit-relocs
10944 Older Alpha assemblers provided no way to generate symbol
10945 relocations except via assembler macros. Use of these macros does
10946 not allow optimal instruction scheduling. GNU binutils as of
10947 version 2.12 supports a new syntax that allows the compiler to
10948 explicitly mark which relocations should apply to which
10949 instructions. This option is mostly useful for debugging, as GCC
10950 detects the capabilities of the assembler when it is built and sets
10951 the default accordingly.
10952
10953 -msmall-data
10954 -mlarge-data
10955 When -mexplicit-relocs is in effect, static data is accessed via
10956 gp-relative relocations. When -msmall-data is used, objects 8
10957 bytes long or smaller are placed in a small data area (the ".sdata"
10958 and ".sbss" sections) and are accessed via 16-bit relocations off
10959 of the $gp register. This limits the size of the small data area
10960 to 64KB, but allows the variables to be directly accessed via a
10961 single instruction.
10962
10963 The default is -mlarge-data. With this option the data area is
10964 limited to just below 2GB. Programs that require more than 2GB of
10965 data must use "malloc" or "mmap" to allocate the data in the heap
10966 instead of in the program's data segment.
10967
10968 When generating code for shared libraries, -fpic implies
10969 -msmall-data and -fPIC implies -mlarge-data.
10970
10971 -msmall-text
10972 -mlarge-text
10973 When -msmall-text is used, the compiler assumes that the code of
10974 the entire program (or shared library) fits in 4MB, and is thus
10975 reachable with a branch instruction. When -msmall-data is used,
10976 the compiler can assume that all local symbols share the same $gp
10977 value, and thus reduce the number of instructions required for a
10978 function call from 4 to 1.
10979
10980 The default is -mlarge-text.
10981
10982 -mcpu=cpu_type
10983 Set the instruction set and instruction scheduling parameters for
10984 machine type cpu_type. You can specify either the EV style name or
10985 the corresponding chip number. GCC supports scheduling parameters
10986 for the EV4, EV5 and EV6 family of processors and chooses the
10987 default values for the instruction set from the processor you
10988 specify. If you do not specify a processor type, GCC defaults to
10989 the processor on which the compiler was built.
10990
10991 Supported values for cpu_type are
10992
10993 ev4
10994 ev45
10995 21064
10996 Schedules as an EV4 and has no instruction set extensions.
10997
10998 ev5
10999 21164
11000 Schedules as an EV5 and has no instruction set extensions.
11001
11002 ev56
11003 21164a
11004 Schedules as an EV5 and supports the BWX extension.
11005
11006 pca56
11007 21164pc
11008 21164PC
11009 Schedules as an EV5 and supports the BWX and MAX extensions.
11010
11011 ev6
11012 21264
11013 Schedules as an EV6 and supports the BWX, FIX, and MAX
11014 extensions.
11015
11016 ev67
11017 21264a
11018 Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX
11019 extensions.
11020
11021 Native toolchains also support the value native, which selects the
11022 best architecture option for the host processor. -mcpu=native has
11023 no effect if GCC does not recognize the processor.
11024
11025 -mtune=cpu_type
11026 Set only the instruction scheduling parameters for machine type
11027 cpu_type. The instruction set is not changed.
11028
11029 Native toolchains also support the value native, which selects the
11030 best architecture option for the host processor. -mtune=native has
11031 no effect if GCC does not recognize the processor.
11032
11033 -mmemory-latency=time
11034 Sets the latency the scheduler should assume for typical memory
11035 references as seen by the application. This number is highly
11036 dependent on the memory access patterns used by the application and
11037 the size of the external cache on the machine.
11038
11039 Valid options for time are
11040
11041 number
11042 A decimal number representing clock cycles.
11043
11044 L1
11045 L2
11046 L3
11047 main
11048 The compiler contains estimates of the number of clock cycles
11049 for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches
11050 (also called Dcache, Scache, and Bcache), as well as to main
11051 memory. Note that L3 is only valid for EV5.
11052
11053 FR30 Options
11054 These options are defined specifically for the FR30 port.
11055
11056 -msmall-model
11057 Use the small address space model. This can produce smaller code,
11058 but it does assume that all symbolic values and addresses fit into
11059 a 20-bit range.
11060
11061 -mno-lsim
11062 Assume that runtime support has been provided and so there is no
11063 need to include the simulator library (libsim.a) on the linker
11064 command line.
11065
11066 FRV Options
11067 -mgpr-32
11068 Only use the first 32 general-purpose registers.
11069
11070 -mgpr-64
11071 Use all 64 general-purpose registers.
11072
11073 -mfpr-32
11074 Use only the first 32 floating-point registers.
11075
11076 -mfpr-64
11077 Use all 64 floating-point registers.
11078
11079 -mhard-float
11080 Use hardware instructions for floating-point operations.
11081
11082 -msoft-float
11083 Use library routines for floating-point operations.
11084
11085 -malloc-cc
11086 Dynamically allocate condition code registers.
11087
11088 -mfixed-cc
11089 Do not try to dynamically allocate condition code registers, only
11090 use "icc0" and "fcc0".
11091
11092 -mdword
11093 Change ABI to use double word insns.
11094
11095 -mno-dword
11096 Do not use double word instructions.
11097
11098 -mdouble
11099 Use floating-point double instructions.
11100
11101 -mno-double
11102 Do not use floating-point double instructions.
11103
11104 -mmedia
11105 Use media instructions.
11106
11107 -mno-media
11108 Do not use media instructions.
11109
11110 -mmuladd
11111 Use multiply and add/subtract instructions.
11112
11113 -mno-muladd
11114 Do not use multiply and add/subtract instructions.
11115
11116 -mfdpic
11117 Select the FDPIC ABI, which uses function descriptors to represent
11118 pointers to functions. Without any PIC/PIE-related options, it
11119 implies -fPIE. With -fpic or -fpie, it assumes GOT entries and
11120 small data are within a 12-bit range from the GOT base address;
11121 with -fPIC or -fPIE, GOT offsets are computed with 32 bits. With a
11122 bfin-elf target, this option implies -msim.
11123
11124 -minline-plt
11125 Enable inlining of PLT entries in function calls to functions that
11126 are not known to bind locally. It has no effect without -mfdpic.
11127 It's enabled by default if optimizing for speed and compiling for
11128 shared libraries (i.e., -fPIC or -fpic), or when an optimization
11129 option such as -O3 or above is present in the command line.
11130
11131 -mTLS
11132 Assume a large TLS segment when generating thread-local code.
11133
11134 -mtls
11135 Do not assume a large TLS segment when generating thread-local
11136 code.
11137
11138 -mgprel-ro
11139 Enable the use of "GPREL" relocations in the FDPIC ABI for data
11140 that is known to be in read-only sections. It's enabled by
11141 default, except for -fpic or -fpie: even though it may help make
11142 the global offset table smaller, it trades 1 instruction for 4.
11143 With -fPIC or -fPIE, it trades 3 instructions for 4, one of which
11144 may be shared by multiple symbols, and it avoids the need for a GOT
11145 entry for the referenced symbol, so it's more likely to be a win.
11146 If it is not, -mno-gprel-ro can be used to disable it.
11147
11148 -multilib-library-pic
11149 Link with the (library, not FD) pic libraries. It's implied by
11150 -mlibrary-pic, as well as by -fPIC and -fpic without -mfdpic. You
11151 should never have to use it explicitly.
11152
11153 -mlinked-fp
11154 Follow the EABI requirement of always creating a frame pointer
11155 whenever a stack frame is allocated. This option is enabled by
11156 default and can be disabled with -mno-linked-fp.
11157
11158 -mlong-calls
11159 Use indirect addressing to call functions outside the current
11160 compilation unit. This allows the functions to be placed anywhere
11161 within the 32-bit address space.
11162
11163 -malign-labels
11164 Try to align labels to an 8-byte boundary by inserting NOPs into
11165 the previous packet. This option only has an effect when VLIW
11166 packing is enabled. It doesn't create new packets; it merely adds
11167 NOPs to existing ones.
11168
11169 -mlibrary-pic
11170 Generate position-independent EABI code.
11171
11172 -macc-4
11173 Use only the first four media accumulator registers.
11174
11175 -macc-8
11176 Use all eight media accumulator registers.
11177
11178 -mpack
11179 Pack VLIW instructions.
11180
11181 -mno-pack
11182 Do not pack VLIW instructions.
11183
11184 -mno-eflags
11185 Do not mark ABI switches in e_flags.
11186
11187 -mcond-move
11188 Enable the use of conditional-move instructions (default).
11189
11190 This switch is mainly for debugging the compiler and will likely be
11191 removed in a future version.
11192
11193 -mno-cond-move
11194 Disable the use of conditional-move instructions.
11195
11196 This switch is mainly for debugging the compiler and will likely be
11197 removed in a future version.
11198
11199 -mscc
11200 Enable the use of conditional set instructions (default).
11201
11202 This switch is mainly for debugging the compiler and will likely be
11203 removed in a future version.
11204
11205 -mno-scc
11206 Disable the use of conditional set instructions.
11207
11208 This switch is mainly for debugging the compiler and will likely be
11209 removed in a future version.
11210
11211 -mcond-exec
11212 Enable the use of conditional execution (default).
11213
11214 This switch is mainly for debugging the compiler and will likely be
11215 removed in a future version.
11216
11217 -mno-cond-exec
11218 Disable the use of conditional execution.
11219
11220 This switch is mainly for debugging the compiler and will likely be
11221 removed in a future version.
11222
11223 -mvliw-branch
11224 Run a pass to pack branches into VLIW instructions (default).
11225
11226 This switch is mainly for debugging the compiler and will likely be
11227 removed in a future version.
11228
11229 -mno-vliw-branch
11230 Do not run a pass to pack branches into VLIW instructions.
11231
11232 This switch is mainly for debugging the compiler and will likely be
11233 removed in a future version.
11234
11235 -mmulti-cond-exec
11236 Enable optimization of "&&" and "||" in conditional execution
11237 (default).
11238
11239 This switch is mainly for debugging the compiler and will likely be
11240 removed in a future version.
11241
11242 -mno-multi-cond-exec
11243 Disable optimization of "&&" and "||" in conditional execution.
11244
11245 This switch is mainly for debugging the compiler and will likely be
11246 removed in a future version.
11247
11248 -mnested-cond-exec
11249 Enable nested conditional execution optimizations (default).
11250
11251 This switch is mainly for debugging the compiler and will likely be
11252 removed in a future version.
11253
11254 -mno-nested-cond-exec
11255 Disable nested conditional execution optimizations.
11256
11257 This switch is mainly for debugging the compiler and will likely be
11258 removed in a future version.
11259
11260 -moptimize-membar
11261 This switch removes redundant "membar" instructions from the
11262 compiler-generated code. It is enabled by default.
11263
11264 -mno-optimize-membar
11265 This switch disables the automatic removal of redundant "membar"
11266 instructions from the generated code.
11267
11268 -mtomcat-stats
11269 Cause gas to print out tomcat statistics.
11270
11271 -mcpu=cpu
11272 Select the processor type for which to generate code. Possible
11273 values are frv, fr550, tomcat, fr500, fr450, fr405, fr400, fr300
11274 and simple.
11275
11276 GNU/Linux Options
11277 These -m options are defined for GNU/Linux targets:
11278
11279 -mglibc
11280 Use the GNU C library. This is the default except on
11281 *-*-linux-*uclibc* and *-*-linux-*android* targets.
11282
11283 -muclibc
11284 Use uClibc C library. This is the default on *-*-linux-*uclibc*
11285 targets.
11286
11287 -mbionic
11288 Use Bionic C library. This is the default on *-*-linux-*android*
11289 targets.
11290
11291 -mandroid
11292 Compile code compatible with Android platform. This is the default
11293 on *-*-linux-*android* targets.
11294
11295 When compiling, this option enables -mbionic, -fPIC,
11296 -fno-exceptions and -fno-rtti by default. When linking, this
11297 option makes the GCC driver pass Android-specific options to the
11298 linker. Finally, this option causes the preprocessor macro
11299 "__ANDROID__" to be defined.
11300
11301 -tno-android-cc
11302 Disable compilation effects of -mandroid, i.e., do not enable
11303 -mbionic, -fPIC, -fno-exceptions and -fno-rtti by default.
11304
11305 -tno-android-ld
11306 Disable linking effects of -mandroid, i.e., pass standard Linux
11307 linking options to the linker.
11308
11309 H8/300 Options
11310 These -m options are defined for the H8/300 implementations:
11311
11312 -mrelax
11313 Shorten some address references at link time, when possible; uses
11314 the linker option -relax.
11315
11316 -mh Generate code for the H8/300H.
11317
11318 -ms Generate code for the H8S.
11319
11320 -mn Generate code for the H8S and H8/300H in the normal mode. This
11321 switch must be used either with -mh or -ms.
11322
11323 -ms2600
11324 Generate code for the H8S/2600. This switch must be used with -ms.
11325
11326 -mexr
11327 Extended registers are stored on stack before execution of function
11328 with monitor attribute. Default option is -mexr. This option is
11329 valid only for H8S targets.
11330
11331 -mno-exr
11332 Extended registers are not stored on stack before execution of
11333 function with monitor attribute. Default option is -mno-exr. This
11334 option is valid only for H8S targets.
11335
11336 -mint32
11337 Make "int" data 32 bits by default.
11338
11339 -malign-300
11340 On the H8/300H and H8S, use the same alignment rules as for the
11341 H8/300. The default for the H8/300H and H8S is to align longs and
11342 floats on 4-byte boundaries. -malign-300 causes them to be aligned
11343 on 2-byte boundaries. This option has no effect on the H8/300.
11344
11345 HPPA Options
11346 These -m options are defined for the HPPA family of computers:
11347
11348 -march=architecture-type
11349 Generate code for the specified architecture. The choices for
11350 architecture-type are 1.0 for PA 1.0, 1.1 for PA 1.1, and 2.0 for
11351 PA 2.0 processors. Refer to /usr/lib/sched.models on an HP-UX
11352 system to determine the proper architecture option for your
11353 machine. Code compiled for lower numbered architectures runs on
11354 higher numbered architectures, but not the other way around.
11355
11356 -mpa-risc-1-0
11357 -mpa-risc-1-1
11358 -mpa-risc-2-0
11359 Synonyms for -march=1.0, -march=1.1, and -march=2.0 respectively.
11360
11361 -mbig-switch
11362 Generate code suitable for big switch tables. Use this option only
11363 if the assembler/linker complain about out-of-range branches within
11364 a switch table.
11365
11366 -mjump-in-delay
11367 Fill delay slots of function calls with unconditional jump
11368 instructions by modifying the return pointer for the function call
11369 to be the target of the conditional jump.
11370
11371 -mdisable-fpregs
11372 Prevent floating-point registers from being used in any manner.
11373 This is necessary for compiling kernels that perform lazy context
11374 switching of floating-point registers. If you use this option and
11375 attempt to perform floating-point operations, the compiler aborts.
11376
11377 -mdisable-indexing
11378 Prevent the compiler from using indexing address modes. This
11379 avoids some rather obscure problems when compiling MIG generated
11380 code under MACH.
11381
11382 -mno-space-regs
11383 Generate code that assumes the target has no space registers. This
11384 allows GCC to generate faster indirect calls and use unscaled index
11385 address modes.
11386
11387 Such code is suitable for level 0 PA systems and kernels.
11388
11389 -mfast-indirect-calls
11390 Generate code that assumes calls never cross space boundaries.
11391 This allows GCC to emit code that performs faster indirect calls.
11392
11393 This option does not work in the presence of shared libraries or
11394 nested functions.
11395
11396 -mfixed-range=register-range
11397 Generate code treating the given register range as fixed registers.
11398 A fixed register is one that the register allocator cannot use.
11399 This is useful when compiling kernel code. A register range is
11400 specified as two registers separated by a dash. Multiple register
11401 ranges can be specified separated by a comma.
11402
11403 -mlong-load-store
11404 Generate 3-instruction load and store sequences as sometimes
11405 required by the HP-UX 10 linker. This is equivalent to the +k
11406 option to the HP compilers.
11407
11408 -mportable-runtime
11409 Use the portable calling conventions proposed by HP for ELF
11410 systems.
11411
11412 -mgas
11413 Enable the use of assembler directives only GAS understands.
11414
11415 -mschedule=cpu-type
11416 Schedule code according to the constraints for the machine type
11417 cpu-type. The choices for cpu-type are 700 7100, 7100LC, 7200,
11418 7300 and 8000. Refer to /usr/lib/sched.models on an HP-UX system
11419 to determine the proper scheduling option for your machine. The
11420 default scheduling is 8000.
11421
11422 -mlinker-opt
11423 Enable the optimization pass in the HP-UX linker. Note this makes
11424 symbolic debugging impossible. It also triggers a bug in the HP-UX
11425 8 and HP-UX 9 linkers in which they give bogus error messages when
11426 linking some programs.
11427
11428 -msoft-float
11429 Generate output containing library calls for floating point.
11430 Warning: the requisite libraries are not available for all HPPA
11431 targets. Normally the facilities of the machine's usual C compiler
11432 are used, but this cannot be done directly in cross-compilation.
11433 You must make your own arrangements to provide suitable library
11434 functions for cross-compilation.
11435
11436 -msoft-float changes the calling convention in the output file;
11437 therefore, it is only useful if you compile all of a program with
11438 this option. In particular, you need to compile libgcc.a, the
11439 library that comes with GCC, with -msoft-float in order for this to
11440 work.
11441
11442 -msio
11443 Generate the predefine, "_SIO", for server IO. The default is
11444 -mwsio. This generates the predefines, "__hp9000s700",
11445 "__hp9000s700__" and "_WSIO", for workstation IO. These options
11446 are available under HP-UX and HI-UX.
11447
11448 -mgnu-ld
11449 Use options specific to GNU ld. This passes -shared to ld when
11450 building a shared library. It is the default when GCC is
11451 configured, explicitly or implicitly, with the GNU linker. This
11452 option does not affect which ld is called; it only changes what
11453 parameters are passed to that ld. The ld that is called is
11454 determined by the --with-ld configure option, GCC's program search
11455 path, and finally by the user's PATH. The linker used by GCC can
11456 be printed using which `gcc -print-prog-name=ld`. This option is
11457 only available on the 64-bit HP-UX GCC, i.e. configured with
11458 hppa*64*-*-hpux*.
11459
11460 -mhp-ld
11461 Use options specific to HP ld. This passes -b to ld when building
11462 a shared library and passes +Accept TypeMismatch to ld on all
11463 links. It is the default when GCC is configured, explicitly or
11464 implicitly, with the HP linker. This option does not affect which
11465 ld is called; it only changes what parameters are passed to that
11466 ld. The ld that is called is determined by the --with-ld configure
11467 option, GCC's program search path, and finally by the user's PATH.
11468 The linker used by GCC can be printed using which `gcc
11469 -print-prog-name=ld`. This option is only available on the 64-bit
11470 HP-UX GCC, i.e. configured with hppa*64*-*-hpux*.
11471
11472 -mlong-calls
11473 Generate code that uses long call sequences. This ensures that a
11474 call is always able to reach linker generated stubs. The default
11475 is to generate long calls only when the distance from the call site
11476 to the beginning of the function or translation unit, as the case
11477 may be, exceeds a predefined limit set by the branch type being
11478 used. The limits for normal calls are 7,600,000 and 240,000 bytes,
11479 respectively for the PA 2.0 and PA 1.X architectures. Sibcalls are
11480 always limited at 240,000 bytes.
11481
11482 Distances are measured from the beginning of functions when using
11483 the -ffunction-sections option, or when using the -mgas and
11484 -mno-portable-runtime options together under HP-UX with the SOM
11485 linker.
11486
11487 It is normally not desirable to use this option as it degrades
11488 performance. However, it may be useful in large applications,
11489 particularly when partial linking is used to build the application.
11490
11491 The types of long calls used depends on the capabilities of the
11492 assembler and linker, and the type of code being generated. The
11493 impact on systems that support long absolute calls, and long pic
11494 symbol-difference or pc-relative calls should be relatively small.
11495 However, an indirect call is used on 32-bit ELF systems in pic code
11496 and it is quite long.
11497
11498 -munix=unix-std
11499 Generate compiler predefines and select a startfile for the
11500 specified UNIX standard. The choices for unix-std are 93, 95 and
11501 98. 93 is supported on all HP-UX versions. 95 is available on HP-
11502 UX 10.10 and later. 98 is available on HP-UX 11.11 and later. The
11503 default values are 93 for HP-UX 10.00, 95 for HP-UX 10.10 though to
11504 11.00, and 98 for HP-UX 11.11 and later.
11505
11506 -munix=93 provides the same predefines as GCC 3.3 and 3.4.
11507 -munix=95 provides additional predefines for "XOPEN_UNIX" and
11508 "_XOPEN_SOURCE_EXTENDED", and the startfile unix95.o. -munix=98
11509 provides additional predefines for "_XOPEN_UNIX",
11510 "_XOPEN_SOURCE_EXTENDED", "_INCLUDE__STDC_A1_SOURCE" and
11511 "_INCLUDE_XOPEN_SOURCE_500", and the startfile unix98.o.
11512
11513 It is important to note that this option changes the interfaces for
11514 various library routines. It also affects the operational behavior
11515 of the C library. Thus, extreme care is needed in using this
11516 option.
11517
11518 Library code that is intended to operate with more than one UNIX
11519 standard must test, set and restore the variable
11520 __xpg4_extended_mask as appropriate. Most GNU software doesn't
11521 provide this capability.
11522
11523 -nolibdld
11524 Suppress the generation of link options to search libdld.sl when
11525 the -static option is specified on HP-UX 10 and later.
11526
11527 -static
11528 The HP-UX implementation of setlocale in libc has a dependency on
11529 libdld.sl. There isn't an archive version of libdld.sl. Thus,
11530 when the -static option is specified, special link options are
11531 needed to resolve this dependency.
11532
11533 On HP-UX 10 and later, the GCC driver adds the necessary options to
11534 link with libdld.sl when the -static option is specified. This
11535 causes the resulting binary to be dynamic. On the 64-bit port, the
11536 linkers generate dynamic binaries by default in any case. The
11537 -nolibdld option can be used to prevent the GCC driver from adding
11538 these link options.
11539
11540 -threads
11541 Add support for multithreading with the dce thread library under
11542 HP-UX. This option sets flags for both the preprocessor and
11543 linker.
11544
11545 Intel 386 and AMD x86-64 Options
11546 These -m options are defined for the i386 and x86-64 family of
11547 computers:
11548
11549 -march=cpu-type
11550 Generate instructions for the machine type cpu-type. In contrast
11551 to -mtune=cpu-type, which merely tunes the generated code for the
11552 specified cpu-type, -march=cpu-type allows GCC to generate code
11553 that may not run at all on processors other than the one indicated.
11554 Specifying -march=cpu-type implies -mtune=cpu-type.
11555
11556 The choices for cpu-type are:
11557
11558 native
11559 This selects the CPU to generate code for at compilation time
11560 by determining the processor type of the compiling machine.
11561 Using -march=native enables all instruction subsets supported
11562 by the local machine (hence the result might not run on
11563 different machines). Using -mtune=native produces code
11564 optimized for the local machine under the constraints of the
11565 selected instruction set.
11566
11567 i386
11568 Original Intel i386 CPU.
11569
11570 i486
11571 Intel i486 CPU. (No scheduling is implemented for this chip.)
11572
11573 i586
11574 pentium
11575 Intel Pentium CPU with no MMX support.
11576
11577 pentium-mmx
11578 Intel Pentium MMX CPU, based on Pentium core with MMX
11579 instruction set support.
11580
11581 pentiumpro
11582 Intel Pentium Pro CPU.
11583
11584 i686
11585 When used with -march, the Pentium Pro instruction set is used,
11586 so the code runs on all i686 family chips. When used with
11587 -mtune, it has the same meaning as generic.
11588
11589 pentium2
11590 Intel Pentium II CPU, based on Pentium Pro core with MMX
11591 instruction set support.
11592
11593 pentium3
11594 pentium3m
11595 Intel Pentium III CPU, based on Pentium Pro core with MMX and
11596 SSE instruction set support.
11597
11598 pentium-m
11599 Intel Pentium M; low-power version of Intel Pentium III CPU
11600 with MMX, SSE and SSE2 instruction set support. Used by
11601 Centrino notebooks.
11602
11603 pentium4
11604 pentium4m
11605 Intel Pentium 4 CPU with MMX, SSE and SSE2 instruction set
11606 support.
11607
11608 prescott
11609 Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2 and
11610 SSE3 instruction set support.
11611
11612 nocona
11613 Improved version of Intel Pentium 4 CPU with 64-bit extensions,
11614 MMX, SSE, SSE2 and SSE3 instruction set support.
11615
11616 core2
11617 Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3
11618 and SSSE3 instruction set support.
11619
11620 corei7
11621 Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3,
11622 SSSE3, SSE4.1 and SSE4.2 instruction set support.
11623
11624 corei7-avx
11625 Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3,
11626 SSSE3, SSE4.1, SSE4.2, AVX, AES and PCLMUL instruction set
11627 support.
11628
11629 core-avx-i
11630 Intel Core CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3,
11631 SSSE3, SSE4.1, SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND and
11632 F16C instruction set support.
11633
11634 core-avx2
11635 Intel Core CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2,
11636 SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, AES, PCLMUL, FSGSBASE,
11637 RDRND, FMA, BMI, BMI2 and F16C instruction set support.
11638
11639 atom
11640 Intel Atom CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2,
11641 SSE3 and SSSE3 instruction set support.
11642
11643 k6 AMD K6 CPU with MMX instruction set support.
11644
11645 k6-2
11646 k6-3
11647 Improved versions of AMD K6 CPU with MMX and 3DNow! instruction
11648 set support.
11649
11650 athlon
11651 athlon-tbird
11652 AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow! and SSE
11653 prefetch instructions support.
11654
11655 athlon-4
11656 athlon-xp
11657 athlon-mp
11658 Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow! and
11659 full SSE instruction set support.
11660
11661 k8
11662 opteron
11663 athlon64
11664 athlon-fx
11665 Processors based on the AMD K8 core with x86-64 instruction set
11666 support, including the AMD Opteron, Athlon 64, and Athlon 64 FX
11667 processors. (This supersets MMX, SSE, SSE2, 3DNow!, enhanced
11668 3DNow! and 64-bit instruction set extensions.)
11669
11670 k8-sse3
11671 opteron-sse3
11672 athlon64-sse3
11673 Improved versions of AMD K8 cores with SSE3 instruction set
11674 support.
11675
11676 amdfam10
11677 barcelona
11678 CPUs based on AMD Family 10h cores with x86-64 instruction set
11679 support. (This supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!,
11680 enhanced 3DNow!, ABM and 64-bit instruction set extensions.)
11681
11682 bdver1
11683 CPUs based on AMD Family 15h cores with x86-64 instruction set
11684 support. (This supersets FMA4, AVX, XOP, LWP, AES, PCL_MUL,
11685 CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM
11686 and 64-bit instruction set extensions.)
11687
11688 bdver2
11689 AMD Family 15h core based CPUs with x86-64 instruction set
11690 support. (This supersets BMI, TBM, F16C, FMA, AVX, XOP, LWP,
11691 AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1,
11692 SSE4.2, ABM and 64-bit instruction set extensions.)
11693
11694 bdver3
11695 AMD Family 15h core based CPUs with x86-64 instruction set
11696 support. (This supersets BMI, TBM, F16C, FMA, AVX, XOP, LWP,
11697 AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1,
11698 SSE4.2, ABM and 64-bit instruction set extensions.
11699
11700 btver1
11701 CPUs based on AMD Family 14h cores with x86-64 instruction set
11702 support. (This supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A,
11703 CX16, ABM and 64-bit instruction set extensions.)
11704
11705 btver2
11706 CPUs based on AMD Family 16h cores with x86-64 instruction set
11707 support. This includes MOVBE, F16C, BMI, AVX, PCL_MUL, AES,
11708 SSE4.2, SSE4.1, CX16, ABM, SSE4A, SSSE3, SSE3, SSE2, SSE, MMX
11709 and 64-bit instruction set extensions.
11710
11711 winchip-c6
11712 IDT WinChip C6 CPU, dealt in same way as i486 with additional
11713 MMX instruction set support.
11714
11715 winchip2
11716 IDT WinChip 2 CPU, dealt in same way as i486 with additional
11717 MMX and 3DNow! instruction set support.
11718
11719 c3 VIA C3 CPU with MMX and 3DNow! instruction set support. (No
11720 scheduling is implemented for this chip.)
11721
11722 c3-2
11723 VIA C3-2 (Nehemiah/C5XL) CPU with MMX and SSE instruction set
11724 support. (No scheduling is implemented for this chip.)
11725
11726 geode
11727 AMD Geode embedded processor with MMX and 3DNow! instruction
11728 set support.
11729
11730 -mtune=cpu-type
11731 Tune to cpu-type everything applicable about the generated code,
11732 except for the ABI and the set of available instructions. While
11733 picking a specific cpu-type schedules things appropriately for that
11734 particular chip, the compiler does not generate any code that
11735 cannot run on the default machine type unless you use a -march=cpu-
11736 type option. For example, if GCC is configured for
11737 i686-pc-linux-gnu then -mtune=pentium4 generates code that is tuned
11738 for Pentium 4 but still runs on i686 machines.
11739
11740 The choices for cpu-type are the same as for -march. In addition,
11741 -mtune supports an extra choice for cpu-type:
11742
11743 generic
11744 Produce code optimized for the most common IA32/AMD64/EM64T
11745 processors. If you know the CPU on which your code will run,
11746 then you should use the corresponding -mtune or -march option
11747 instead of -mtune=generic. But, if you do not know exactly
11748 what CPU users of your application will have, then you should
11749 use this option.
11750
11751 As new processors are deployed in the marketplace, the behavior
11752 of this option will change. Therefore, if you upgrade to a
11753 newer version of GCC, code generation controlled by this option
11754 will change to reflect the processors that are most common at
11755 the time that version of GCC is released.
11756
11757 There is no -march=generic option because -march indicates the
11758 instruction set the compiler can use, and there is no generic
11759 instruction set applicable to all processors. In contrast,
11760 -mtune indicates the processor (or, in this case, collection of
11761 processors) for which the code is optimized.
11762
11763 -mcpu=cpu-type
11764 A deprecated synonym for -mtune.
11765
11766 -mfpmath=unit
11767 Generate floating-point arithmetic for selected unit unit. The
11768 choices for unit are:
11769
11770 387 Use the standard 387 floating-point coprocessor present on the
11771 majority of chips and emulated otherwise. Code compiled with
11772 this option runs almost everywhere. The temporary results are
11773 computed in 80-bit precision instead of the precision specified
11774 by the type, resulting in slightly different results compared
11775 to most of other chips. See -ffloat-store for more detailed
11776 description.
11777
11778 This is the default choice for i386 compiler.
11779
11780 sse Use scalar floating-point instructions present in the SSE
11781 instruction set. This instruction set is supported by Pentium
11782 III and newer chips, and in the AMD line by Athlon-4, Athlon XP
11783 and Athlon MP chips. The earlier version of the SSE
11784 instruction set supports only single-precision arithmetic, thus
11785 the double and extended-precision arithmetic are still done
11786 using 387. A later version, present only in Pentium 4 and AMD
11787 x86-64 chips, supports double-precision arithmetic too.
11788
11789 For the i386 compiler, you must use -march=cpu-type, -msse or
11790 -msse2 switches to enable SSE extensions and make this option
11791 effective. For the x86-64 compiler, these extensions are
11792 enabled by default.
11793
11794 The resulting code should be considerably faster in the
11795 majority of cases and avoid the numerical instability problems
11796 of 387 code, but may break some existing code that expects
11797 temporaries to be 80 bits.
11798
11799 This is the default choice for the x86-64 compiler.
11800
11801 sse,387
11802 sse+387
11803 both
11804 Attempt to utilize both instruction sets at once. This
11805 effectively doubles the amount of available registers, and on
11806 chips with separate execution units for 387 and SSE the
11807 execution resources too. Use this option with care, as it is
11808 still experimental, because the GCC register allocator does not
11809 model separate functional units well, resulting in unstable
11810 performance.
11811
11812 -masm=dialect
11813 Output assembly instructions using selected dialect. Supported
11814 choices are intel or att (the default). Darwin does not support
11815 intel.
11816
11817 -mieee-fp
11818 -mno-ieee-fp
11819 Control whether or not the compiler uses IEEE floating-point
11820 comparisons. These correctly handle the case where the result of a
11821 comparison is unordered.
11822
11823 -msoft-float
11824 Generate output containing library calls for floating point.
11825
11826 Warning: the requisite libraries are not part of GCC. Normally the
11827 facilities of the machine's usual C compiler are used, but this
11828 can't be done directly in cross-compilation. You must make your
11829 own arrangements to provide suitable library functions for cross-
11830 compilation.
11831
11832 On machines where a function returns floating-point results in the
11833 80387 register stack, some floating-point opcodes may be emitted
11834 even if -msoft-float is used.
11835
11836 -mno-fp-ret-in-387
11837 Do not use the FPU registers for return values of functions.
11838
11839 The usual calling convention has functions return values of types
11840 "float" and "double" in an FPU register, even if there is no FPU.
11841 The idea is that the operating system should emulate an FPU.
11842
11843 The option -mno-fp-ret-in-387 causes such values to be returned in
11844 ordinary CPU registers instead.
11845
11846 -mno-fancy-math-387
11847 Some 387 emulators do not support the "sin", "cos" and "sqrt"
11848 instructions for the 387. Specify this option to avoid generating
11849 those instructions. This option is the default on FreeBSD, OpenBSD
11850 and NetBSD. This option is overridden when -march indicates that
11851 the target CPU always has an FPU and so the instruction does not
11852 need emulation. These instructions are not generated unless you
11853 also use the -funsafe-math-optimizations switch.
11854
11855 -malign-double
11856 -mno-align-double
11857 Control whether GCC aligns "double", "long double", and "long long"
11858 variables on a two-word boundary or a one-word boundary. Aligning
11859 "double" variables on a two-word boundary produces code that runs
11860 somewhat faster on a Pentium at the expense of more memory.
11861
11862 On x86-64, -malign-double is enabled by default.
11863
11864 Warning: if you use the -malign-double switch, structures
11865 containing the above types are aligned differently than the
11866 published application binary interface specifications for the 386
11867 and are not binary compatible with structures in code compiled
11868 without that switch.
11869
11870 -m96bit-long-double
11871 -m128bit-long-double
11872 These switches control the size of "long double" type. The i386
11873 application binary interface specifies the size to be 96 bits, so
11874 -m96bit-long-double is the default in 32-bit mode.
11875
11876 Modern architectures (Pentium and newer) prefer "long double" to be
11877 aligned to an 8- or 16-byte boundary. In arrays or structures
11878 conforming to the ABI, this is not possible. So specifying
11879 -m128bit-long-double aligns "long double" to a 16-byte boundary by
11880 padding the "long double" with an additional 32-bit zero.
11881
11882 In the x86-64 compiler, -m128bit-long-double is the default choice
11883 as its ABI specifies that "long double" is aligned on 16-byte
11884 boundary.
11885
11886 Notice that neither of these options enable any extra precision
11887 over the x87 standard of 80 bits for a "long double".
11888
11889 Warning: if you override the default value for your target ABI,
11890 this changes the size of structures and arrays containing "long
11891 double" variables, as well as modifying the function calling
11892 convention for functions taking "long double". Hence they are not
11893 binary-compatible with code compiled without that switch.
11894
11895 -mlong-double-64
11896 -mlong-double-80
11897 These switches control the size of "long double" type. A size of 64
11898 bits makes the "long double" type equivalent to the "double" type.
11899 This is the default for Bionic C library.
11900
11901 Warning: if you override the default value for your target ABI,
11902 this changes the size of structures and arrays containing "long
11903 double" variables, as well as modifying the function calling
11904 convention for functions taking "long double". Hence they are not
11905 binary-compatible with code compiled without that switch.
11906
11907 -mlarge-data-threshold=threshold
11908 When -mcmodel=medium is specified, data objects larger than
11909 threshold are placed in the large data section. This value must be
11910 the same across all objects linked into the binary, and defaults to
11911 65535.
11912
11913 -mrtd
11914 Use a different function-calling convention, in which functions
11915 that take a fixed number of arguments return with the "ret num"
11916 instruction, which pops their arguments while returning. This
11917 saves one instruction in the caller since there is no need to pop
11918 the arguments there.
11919
11920 You can specify that an individual function is called with this
11921 calling sequence with the function attribute stdcall. You can also
11922 override the -mrtd option by using the function attribute cdecl.
11923
11924 Warning: this calling convention is incompatible with the one
11925 normally used on Unix, so you cannot use it if you need to call
11926 libraries compiled with the Unix compiler.
11927
11928 Also, you must provide function prototypes for all functions that
11929 take variable numbers of arguments (including "printf"); otherwise
11930 incorrect code is generated for calls to those functions.
11931
11932 In addition, seriously incorrect code results if you call a
11933 function with too many arguments. (Normally, extra arguments are
11934 harmlessly ignored.)
11935
11936 -mregparm=num
11937 Control how many registers are used to pass integer arguments. By
11938 default, no registers are used to pass arguments, and at most 3
11939 registers can be used. You can control this behavior for a
11940 specific function by using the function attribute regparm.
11941
11942 Warning: if you use this switch, and num is nonzero, then you must
11943 build all modules with the same value, including any libraries.
11944 This includes the system libraries and startup modules.
11945
11946 -msseregparm
11947 Use SSE register passing conventions for float and double arguments
11948 and return values. You can control this behavior for a specific
11949 function by using the function attribute sseregparm.
11950
11951 Warning: if you use this switch then you must build all modules
11952 with the same value, including any libraries. This includes the
11953 system libraries and startup modules.
11954
11955 -mvect8-ret-in-mem
11956 Return 8-byte vectors in memory instead of MMX registers. This is
11957 the default on Solaris@tie{}8 and 9 and VxWorks to match the ABI of
11958 the Sun Studio compilers until version 12. Later compiler versions
11959 (starting with Studio 12 Update@tie{}1) follow the ABI used by
11960 other x86 targets, which is the default on Solaris@tie{}10 and
11961 later. Only use this option if you need to remain compatible with
11962 existing code produced by those previous compiler versions or older
11963 versions of GCC.
11964
11965 -mpc32
11966 -mpc64
11967 -mpc80
11968 Set 80387 floating-point precision to 32, 64 or 80 bits. When
11969 -mpc32 is specified, the significands of results of floating-point
11970 operations are rounded to 24 bits (single precision); -mpc64 rounds
11971 the significands of results of floating-point operations to 53 bits
11972 (double precision) and -mpc80 rounds the significands of results of
11973 floating-point operations to 64 bits (extended double precision),
11974 which is the default. When this option is used, floating-point
11975 operations in higher precisions are not available to the programmer
11976 without setting the FPU control word explicitly.
11977
11978 Setting the rounding of floating-point operations to less than the
11979 default 80 bits can speed some programs by 2% or more. Note that
11980 some mathematical libraries assume that extended-precision (80-bit)
11981 floating-point operations are enabled by default; routines in such
11982 libraries could suffer significant loss of accuracy, typically
11983 through so-called "catastrophic cancellation", when this option is
11984 used to set the precision to less than extended precision.
11985
11986 -mstackrealign
11987 Realign the stack at entry. On the Intel x86, the -mstackrealign
11988 option generates an alternate prologue and epilogue that realigns
11989 the run-time stack if necessary. This supports mixing legacy codes
11990 that keep 4-byte stack alignment with modern codes that keep
11991 16-byte stack alignment for SSE compatibility. See also the
11992 attribute "force_align_arg_pointer", applicable to individual
11993 functions.
11994
11995 -mpreferred-stack-boundary=num
11996 Attempt to keep the stack boundary aligned to a 2 raised to num
11997 byte boundary. If -mpreferred-stack-boundary is not specified, the
11998 default is 4 (16 bytes or 128 bits).
11999
12000 Warning: When generating code for the x86-64 architecture with SSE
12001 extensions disabled, -mpreferred-stack-boundary=3 can be used to
12002 keep the stack boundary aligned to 8 byte boundary. Since x86-64
12003 ABI require 16 byte stack alignment, this is ABI incompatible and
12004 intended to be used in controlled environment where stack space is
12005 important limitation. This option will lead to wrong code when
12006 functions compiled with 16 byte stack alignment (such as functions
12007 from a standard library) are called with misaligned stack. In this
12008 case, SSE instructions may lead to misaligned memory access traps.
12009 In addition, variable arguments will be handled incorrectly for 16
12010 byte aligned objects (including x87 long double and __int128),
12011 leading to wrong results. You must build all modules with
12012 -mpreferred-stack-boundary=3, including any libraries. This
12013 includes the system libraries and startup modules.
12014
12015 -mincoming-stack-boundary=num
12016 Assume the incoming stack is aligned to a 2 raised to num byte
12017 boundary. If -mincoming-stack-boundary is not specified, the one
12018 specified by -mpreferred-stack-boundary is used.
12019
12020 On Pentium and Pentium Pro, "double" and "long double" values
12021 should be aligned to an 8-byte boundary (see -malign-double) or
12022 suffer significant run time performance penalties. On Pentium III,
12023 the Streaming SIMD Extension (SSE) data type "__m128" may not work
12024 properly if it is not 16-byte aligned.
12025
12026 To ensure proper alignment of this values on the stack, the stack
12027 boundary must be as aligned as that required by any value stored on
12028 the stack. Further, every function must be generated such that it
12029 keeps the stack aligned. Thus calling a function compiled with a
12030 higher preferred stack boundary from a function compiled with a
12031 lower preferred stack boundary most likely misaligns the stack. It
12032 is recommended that libraries that use callbacks always use the
12033 default setting.
12034
12035 This extra alignment does consume extra stack space, and generally
12036 increases code size. Code that is sensitive to stack space usage,
12037 such as embedded systems and operating system kernels, may want to
12038 reduce the preferred alignment to -mpreferred-stack-boundary=2.
12039
12040 -mmmx
12041 -mno-mmx
12042 -msse
12043 -mno-sse
12044 -msse2
12045 -mno-sse2
12046 -msse3
12047 -mno-sse3
12048 -mssse3
12049 -mno-ssse3
12050 -msse4.1
12051 -mno-sse4.1
12052 -msse4.2
12053 -mno-sse4.2
12054 -msse4
12055 -mno-sse4
12056 -mavx
12057 -mno-avx
12058 -mavx2
12059 -mno-avx2
12060 -maes
12061 -mno-aes
12062 -mpclmul
12063 -mno-pclmul
12064 -mfsgsbase
12065 -mno-fsgsbase
12066 -mrdrnd
12067 -mno-rdrnd
12068 -mf16c
12069 -mno-f16c
12070 -mfma
12071 -mno-fma
12072 -msse4a
12073 -mno-sse4a
12074 -mfma4
12075 -mno-fma4
12076 -mxop
12077 -mno-xop
12078 -mlwp
12079 -mno-lwp
12080 -m3dnow
12081 -mno-3dnow
12082 -mpopcnt
12083 -mno-popcnt
12084 -mabm
12085 -mno-abm
12086 -mbmi
12087 -mbmi2
12088 -mno-bmi
12089 -mno-bmi2
12090 -mlzcnt
12091 -mno-lzcnt
12092 -mrtm
12093 -mpku
12094 -mno-pku
12095 -mtbm
12096 -mno-tbm
12097 These switches enable or disable the use of instructions in the
12098 MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, AVX, AVX2, AES, PCLMUL,
12099 FSGSBASE, RDRND, F16C, FMA, SSE4A, FMA4, XOP, LWP, ABM, BMI, BMI2,
12100 LZCNT, RTM, PKU or 3DNow! extended instruction sets. These
12101 extensions are also available as built-in functions: see X86 Built-
12102 in Functions, for details of the functions enabled and disabled by
12103 these switches.
12104
12105 To generate SSE/SSE2 instructions automatically from floating-point
12106 code (as opposed to 387 instructions), see -mfpmath=sse.
12107
12108 GCC depresses SSEx instructions when -mavx is used. Instead, it
12109 generates new AVX instructions or AVX equivalence for all SSEx
12110 instructions when needed.
12111
12112 These options enable GCC to use these extended instructions in
12113 generated code, even without -mfpmath=sse. Applications that
12114 perform run-time CPU detection must compile separate files for each
12115 supported architecture, using the appropriate flags. In
12116 particular, the file containing the CPU detection code should be
12117 compiled without these options.
12118
12119 -mcld
12120 This option instructs GCC to emit a "cld" instruction in the
12121 prologue of functions that use string instructions. String
12122 instructions depend on the DF flag to select between autoincrement
12123 or autodecrement mode. While the ABI specifies the DF flag to be
12124 cleared on function entry, some operating systems violate this
12125 specification by not clearing the DF flag in their exception
12126 dispatchers. The exception handler can be invoked with the DF flag
12127 set, which leads to wrong direction mode when string instructions
12128 are used. This option can be enabled by default on 32-bit x86
12129 targets by configuring GCC with the --enable-cld configure option.
12130 Generation of "cld" instructions can be suppressed with the
12131 -mno-cld compiler option in this case.
12132
12133 -mvzeroupper
12134 This option instructs GCC to emit a "vzeroupper" instruction before
12135 a transfer of control flow out of the function to minimize the AVX
12136 to SSE transition penalty as well as remove unnecessary "zeroupper"
12137 intrinsics.
12138
12139 -mprefer-avx128
12140 This option instructs GCC to use 128-bit AVX instructions instead
12141 of 256-bit AVX instructions in the auto-vectorizer.
12142
12143 -mcx16
12144 This option enables GCC to generate "CMPXCHG16B" instructions.
12145 "CMPXCHG16B" allows for atomic operations on 128-bit double
12146 quadword (or oword) data types. This is useful for high-resolution
12147 counters that can be updated by multiple processors (or cores).
12148 This instruction is generated as part of atomic built-in functions:
12149 see __sync Builtins or __atomic Builtins for details.
12150
12151 -msahf
12152 This option enables generation of "SAHF" instructions in 64-bit
12153 code. Early Intel Pentium 4 CPUs with Intel 64 support, prior to
12154 the introduction of Pentium 4 G1 step in December 2005, lacked the
12155 "LAHF" and "SAHF" instructions which were supported by AMD64.
12156 These are load and store instructions, respectively, for certain
12157 status flags. In 64-bit mode, the "SAHF" instruction is used to
12158 optimize "fmod", "drem", and "remainder" built-in functions; see
12159 Other Builtins for details.
12160
12161 -mmovbe
12162 This option enables use of the "movbe" instruction to implement
12163 "__builtin_bswap32" and "__builtin_bswap64".
12164
12165 -mcrc32
12166 This option enables built-in functions "__builtin_ia32_crc32qi",
12167 "__builtin_ia32_crc32hi", "__builtin_ia32_crc32si" and
12168 "__builtin_ia32_crc32di" to generate the "crc32" machine
12169 instruction.
12170
12171 -mrecip
12172 This option enables use of "RCPSS" and "RSQRTSS" instructions (and
12173 their vectorized variants "RCPPS" and "RSQRTPS") with an additional
12174 Newton-Raphson step to increase precision instead of "DIVSS" and
12175 "SQRTSS" (and their vectorized variants) for single-precision
12176 floating-point arguments. These instructions are generated only
12177 when -funsafe-math-optimizations is enabled together with
12178 -finite-math-only and -fno-trapping-math. Note that while the
12179 throughput of the sequence is higher than the throughput of the
12180 non-reciprocal instruction, the precision of the sequence can be
12181 decreased by up to 2 ulp (i.e. the inverse of 1.0 equals
12182 0.99999994).
12183
12184 Note that GCC implements "1.0f/sqrtf(x)" in terms of "RSQRTSS" (or
12185 "RSQRTPS") already with -ffast-math (or the above option
12186 combination), and doesn't need -mrecip.
12187
12188 Also note that GCC emits the above sequence with additional Newton-
12189 Raphson step for vectorized single-float division and vectorized
12190 "sqrtf(x)" already with -ffast-math (or the above option
12191 combination), and doesn't need -mrecip.
12192
12193 -mrecip=opt
12194 This option controls which reciprocal estimate instructions may be
12195 used. opt is a comma-separated list of options, which may be
12196 preceded by a ! to invert the option:
12197
12198 all Enable all estimate instructions.
12199
12200 default
12201 Enable the default instructions, equivalent to -mrecip.
12202
12203 none
12204 Disable all estimate instructions, equivalent to -mno-recip.
12205
12206 div Enable the approximation for scalar division.
12207
12208 vec-div
12209 Enable the approximation for vectorized division.
12210
12211 sqrt
12212 Enable the approximation for scalar square root.
12213
12214 vec-sqrt
12215 Enable the approximation for vectorized square root.
12216
12217 So, for example, -mrecip=all,!sqrt enables all of the reciprocal
12218 approximations, except for square root.
12219
12220 -mveclibabi=type
12221 Specifies the ABI type to use for vectorizing intrinsics using an
12222 external library. Supported values for type are svml for the Intel
12223 short vector math library and acml for the AMD math core library.
12224 To use this option, both -ftree-vectorize and
12225 -funsafe-math-optimizations have to be enabled, and an SVML or ACML
12226 ABI-compatible library must be specified at link time.
12227
12228 GCC currently emits calls to "vmldExp2", "vmldLn2", "vmldLog102",
12229 "vmldLog102", "vmldPow2", "vmldTanh2", "vmldTan2", "vmldAtan2",
12230 "vmldAtanh2", "vmldCbrt2", "vmldSinh2", "vmldSin2", "vmldAsinh2",
12231 "vmldAsin2", "vmldCosh2", "vmldCos2", "vmldAcosh2", "vmldAcos2",
12232 "vmlsExp4", "vmlsLn4", "vmlsLog104", "vmlsLog104", "vmlsPow4",
12233 "vmlsTanh4", "vmlsTan4", "vmlsAtan4", "vmlsAtanh4", "vmlsCbrt4",
12234 "vmlsSinh4", "vmlsSin4", "vmlsAsinh4", "vmlsAsin4", "vmlsCosh4",
12235 "vmlsCos4", "vmlsAcosh4" and "vmlsAcos4" for corresponding function
12236 type when -mveclibabi=svml is used, and "__vrd2_sin", "__vrd2_cos",
12237 "__vrd2_exp", "__vrd2_log", "__vrd2_log2", "__vrd2_log10",
12238 "__vrs4_sinf", "__vrs4_cosf", "__vrs4_expf", "__vrs4_logf",
12239 "__vrs4_log2f", "__vrs4_log10f" and "__vrs4_powf" for the
12240 corresponding function type when -mveclibabi=acml is used.
12241
12242 -mabi=name
12243 Generate code for the specified calling convention. Permissible
12244 values are sysv for the ABI used on GNU/Linux and other systems,
12245 and ms for the Microsoft ABI. The default is to use the Microsoft
12246 ABI when targeting Microsoft Windows and the SysV ABI on all other
12247 systems. You can control this behavior for a specific function by
12248 using the function attribute ms_abi/sysv_abi.
12249
12250 -mtls-dialect=type
12251 Generate code to access thread-local storage using the gnu or gnu2
12252 conventions. gnu is the conservative default; gnu2 is more
12253 efficient, but it may add compile- and run-time requirements that
12254 cannot be satisfied on all systems.
12255
12256 -mpush-args
12257 -mno-push-args
12258 Use PUSH operations to store outgoing parameters. This method is
12259 shorter and usually equally fast as method using SUB/MOV operations
12260 and is enabled by default. In some cases disabling it may improve
12261 performance because of improved scheduling and reduced
12262 dependencies.
12263
12264 -maccumulate-outgoing-args
12265 If enabled, the maximum amount of space required for outgoing
12266 arguments is computed in the function prologue. This is faster on
12267 most modern CPUs because of reduced dependencies, improved
12268 scheduling and reduced stack usage when the preferred stack
12269 boundary is not equal to 2. The drawback is a notable increase in
12270 code size. This switch implies -mno-push-args.
12271
12272 -mthreads
12273 Support thread-safe exception handling on MinGW. Programs that
12274 rely on thread-safe exception handling must compile and link all
12275 code with the -mthreads option. When compiling, -mthreads defines
12276 "-D_MT"; when linking, it links in a special thread helper library
12277 -lmingwthrd which cleans up per-thread exception-handling data.
12278
12279 -mno-align-stringops
12280 Do not align the destination of inlined string operations. This
12281 switch reduces code size and improves performance in case the
12282 destination is already aligned, but GCC doesn't know about it.
12283
12284 -minline-all-stringops
12285 By default GCC inlines string operations only when the destination
12286 is known to be aligned to least a 4-byte boundary. This enables
12287 more inlining and increases code size, but may improve performance
12288 of code that depends on fast "memcpy", "strlen", and "memset" for
12289 short lengths.
12290
12291 -minline-stringops-dynamically
12292 For string operations of unknown size, use run-time checks with
12293 inline code for small blocks and a library call for large blocks.
12294
12295 -mstringop-strategy=alg
12296 Override the internal decision heuristic for the particular
12297 algorithm to use for inlining string operations. The allowed
12298 values for alg are:
12299
12300 rep_byte
12301 rep_4byte
12302 rep_8byte
12303 Expand using i386 "rep" prefix of the specified size.
12304
12305 byte_loop
12306 loop
12307 unrolled_loop
12308 Expand into an inline loop.
12309
12310 libcall
12311 Always use a library call.
12312
12313 -momit-leaf-frame-pointer
12314 Don't keep the frame pointer in a register for leaf functions.
12315 This avoids the instructions to save, set up, and restore frame
12316 pointers and makes an extra register available in leaf functions.
12317 The option -fomit-leaf-frame-pointer removes the frame pointer for
12318 leaf functions, which might make debugging harder.
12319
12320 -mtls-direct-seg-refs
12321 -mno-tls-direct-seg-refs
12322 Controls whether TLS variables may be accessed with offsets from
12323 the TLS segment register (%gs for 32-bit, %fs for 64-bit), or
12324 whether the thread base pointer must be added. Whether or not this
12325 is valid depends on the operating system, and whether it maps the
12326 segment to cover the entire TLS area.
12327
12328 For systems that use the GNU C Library, the default is on.
12329
12330 -msse2avx
12331 -mno-sse2avx
12332 Specify that the assembler should encode SSE instructions with VEX
12333 prefix. The option -mavx turns this on by default.
12334
12335 -mfentry
12336 -mno-fentry
12337 If profiling is active (-pg), put the profiling counter call before
12338 the prologue. Note: On x86 architectures the attribute
12339 "ms_hook_prologue" isn't possible at the moment for -mfentry and
12340 -pg.
12341
12342 -m8bit-idiv
12343 -mno-8bit-idiv
12344 On some processors, like Intel Atom, 8-bit unsigned integer divide
12345 is much faster than 32-bit/64-bit integer divide. This option
12346 generates a run-time check. If both dividend and divisor are
12347 within range of 0 to 255, 8-bit unsigned integer divide is used
12348 instead of 32-bit/64-bit integer divide.
12349
12350 -mavx256-split-unaligned-load
12351 -mavx256-split-unaligned-store
12352 Split 32-byte AVX unaligned load and store.
12353
12354 -mindirect-branch=choice
12355 Convert indirect call and jump with choice. The default is keep,
12356 which keeps indirect call and jump unmodified. thunk converts
12357 indirect call and jump to call and return thunk. thunk-inline
12358 converts indirect call and jump to inlined call and return thunk.
12359 thunk-extern converts indirect call and jump to external call and
12360 return thunk provided in a separate object file. You can control
12361 this behavior for a specific function by using the function
12362 attribute "indirect_branch".
12363
12364 Note that -mcmodel=large is incompatible with
12365 -mindirect-branch=thunk nor -mindirect-branch=thunk-extern since
12366 the thunk function may not be reachable in large code model.
12367
12368 -mfunction-return=choice
12369 Convert function return with choice. The default is keep, which
12370 keeps function return unmodified. thunk converts function return
12371 to call and return thunk. thunk-inline converts function return to
12372 inlined call and return thunk. thunk-extern converts function
12373 return to external call and return thunk provided in a separate
12374 object file. You can control this behavior for a specific function
12375 by using the function attribute "function_return".
12376
12377 Note that -mcmodel=large is incompatible with
12378 -mfunction-return=thunk nor -mfunction-return=thunk-extern since
12379 the thunk function may not be reachable in large code model.
12380
12381 -mindirect-branch-register
12382 Force indirect call and jump via register.
12383
12384 These -m switches are supported in addition to the above on x86-64
12385 processors in 64-bit environments.
12386
12387 -m32
12388 -m64
12389 -mx32
12390 Generate code for a 32-bit or 64-bit environment. The -m32 option
12391 sets "int", "long", and pointer types to 32 bits, and generates
12392 code that runs on any i386 system.
12393
12394 The -m64 option sets "int" to 32 bits and "long" and pointer types
12395 to 64 bits, and generates code for the x86-64 architecture. For
12396 Darwin only the -m64 option also turns off the -fno-pic and
12397 -mdynamic-no-pic options.
12398
12399 The -mx32 option sets "int", "long", and pointer types to 32 bits,
12400 and generates code for the x86-64 architecture.
12401
12402 -mno-red-zone
12403 Do not use a so-called "red zone" for x86-64 code. The red zone is
12404 mandated by the x86-64 ABI; it is a 128-byte area beyond the
12405 location of the stack pointer that is not modified by signal or
12406 interrupt handlers and therefore can be used for temporary data
12407 without adjusting the stack pointer. The flag -mno-red-zone
12408 disables this red zone.
12409
12410 -mcmodel=small
12411 Generate code for the small code model: the program and its symbols
12412 must be linked in the lower 2 GB of the address space. Pointers
12413 are 64 bits. Programs can be statically or dynamically linked.
12414 This is the default code model.
12415
12416 -mcmodel=kernel
12417 Generate code for the kernel code model. The kernel runs in the
12418 negative 2 GB of the address space. This model has to be used for
12419 Linux kernel code.
12420
12421 -mcmodel=medium
12422 Generate code for the medium model: the program is linked in the
12423 lower 2 GB of the address space. Small symbols are also placed
12424 there. Symbols with sizes larger than -mlarge-data-threshold are
12425 put into large data or BSS sections and can be located above 2GB.
12426 Programs can be statically or dynamically linked.
12427
12428 -mcmodel=large
12429 Generate code for the large model. This model makes no assumptions
12430 about addresses and sizes of sections.
12431
12432 -maddress-mode=long
12433 Generate code for long address mode. This is only supported for
12434 64-bit and x32 environments. It is the default address mode for
12435 64-bit environments.
12436
12437 -maddress-mode=short
12438 Generate code for short address mode. This is only supported for
12439 32-bit and x32 environments. It is the default address mode for
12440 32-bit and x32 environments.
12441
12442 i386 and x86-64 Windows Options
12443 These additional options are available for Microsoft Windows targets:
12444
12445 -mconsole
12446 This option specifies that a console application is to be
12447 generated, by instructing the linker to set the PE header subsystem
12448 type required for console applications. This option is available
12449 for Cygwin and MinGW targets and is enabled by default on those
12450 targets.
12451
12452 -mdll
12453 This option is available for Cygwin and MinGW targets. It
12454 specifies that a DLL---a dynamic link library---is to be generated,
12455 enabling the selection of the required runtime startup object and
12456 entry point.
12457
12458 -mnop-fun-dllimport
12459 This option is available for Cygwin and MinGW targets. It
12460 specifies that the "dllimport" attribute should be ignored.
12461
12462 -mthread
12463 This option is available for MinGW targets. It specifies that
12464 MinGW-specific thread support is to be used.
12465
12466 -municode
12467 This option is available for MinGW-w64 targets. It causes the
12468 "UNICODE" preprocessor macro to be predefined, and chooses Unicode-
12469 capable runtime startup code.
12470
12471 -mwin32
12472 This option is available for Cygwin and MinGW targets. It
12473 specifies that the typical Microsoft Windows predefined macros are
12474 to be set in the pre-processor, but does not influence the choice
12475 of runtime library/startup code.
12476
12477 -mwindows
12478 This option is available for Cygwin and MinGW targets. It
12479 specifies that a GUI application is to be generated by instructing
12480 the linker to set the PE header subsystem type appropriately.
12481
12482 -fno-set-stack-executable
12483 This option is available for MinGW targets. It specifies that the
12484 executable flag for the stack used by nested functions isn't set.
12485 This is necessary for binaries running in kernel mode of Microsoft
12486 Windows, as there the User32 API, which is used to set executable
12487 privileges, isn't available.
12488
12489 -fwritable-relocated-rdata
12490 This option is available for MinGW and Cygwin targets. It
12491 specifies that relocated-data in read-only section is put into
12492 .data section. This is a necessary for older runtimes not
12493 supporting modification of .rdata sections for pseudo-relocation.
12494
12495 -mpe-aligned-commons
12496 This option is available for Cygwin and MinGW targets. It
12497 specifies that the GNU extension to the PE file format that permits
12498 the correct alignment of COMMON variables should be used when
12499 generating code. It is enabled by default if GCC detects that the
12500 target assembler found during configuration supports the feature.
12501
12502 See also under i386 and x86-64 Options for standard options.
12503
12504 IA-64 Options
12505 These are the -m options defined for the Intel IA-64 architecture.
12506
12507 -mbig-endian
12508 Generate code for a big-endian target. This is the default for HP-
12509 UX.
12510
12511 -mlittle-endian
12512 Generate code for a little-endian target. This is the default for
12513 AIX5 and GNU/Linux.
12514
12515 -mgnu-as
12516 -mno-gnu-as
12517 Generate (or don't) code for the GNU assembler. This is the
12518 default.
12519
12520 -mgnu-ld
12521 -mno-gnu-ld
12522 Generate (or don't) code for the GNU linker. This is the default.
12523
12524 -mno-pic
12525 Generate code that does not use a global pointer register. The
12526 result is not position independent code, and violates the IA-64
12527 ABI.
12528
12529 -mvolatile-asm-stop
12530 -mno-volatile-asm-stop
12531 Generate (or don't) a stop bit immediately before and after
12532 volatile asm statements.
12533
12534 -mregister-names
12535 -mno-register-names
12536 Generate (or don't) in, loc, and out register names for the stacked
12537 registers. This may make assembler output more readable.
12538
12539 -mno-sdata
12540 -msdata
12541 Disable (or enable) optimizations that use the small data section.
12542 This may be useful for working around optimizer bugs.
12543
12544 -mconstant-gp
12545 Generate code that uses a single constant global pointer value.
12546 This is useful when compiling kernel code.
12547
12548 -mauto-pic
12549 Generate code that is self-relocatable. This implies
12550 -mconstant-gp. This is useful when compiling firmware code.
12551
12552 -minline-float-divide-min-latency
12553 Generate code for inline divides of floating-point values using the
12554 minimum latency algorithm.
12555
12556 -minline-float-divide-max-throughput
12557 Generate code for inline divides of floating-point values using the
12558 maximum throughput algorithm.
12559
12560 -mno-inline-float-divide
12561 Do not generate inline code for divides of floating-point values.
12562
12563 -minline-int-divide-min-latency
12564 Generate code for inline divides of integer values using the
12565 minimum latency algorithm.
12566
12567 -minline-int-divide-max-throughput
12568 Generate code for inline divides of integer values using the
12569 maximum throughput algorithm.
12570
12571 -mno-inline-int-divide
12572 Do not generate inline code for divides of integer values.
12573
12574 -minline-sqrt-min-latency
12575 Generate code for inline square roots using the minimum latency
12576 algorithm.
12577
12578 -minline-sqrt-max-throughput
12579 Generate code for inline square roots using the maximum throughput
12580 algorithm.
12581
12582 -mno-inline-sqrt
12583 Do not generate inline code for "sqrt".
12584
12585 -mfused-madd
12586 -mno-fused-madd
12587 Do (don't) generate code that uses the fused multiply/add or
12588 multiply/subtract instructions. The default is to use these
12589 instructions.
12590
12591 -mno-dwarf2-asm
12592 -mdwarf2-asm
12593 Don't (or do) generate assembler code for the DWARF 2 line number
12594 debugging info. This may be useful when not using the GNU
12595 assembler.
12596
12597 -mearly-stop-bits
12598 -mno-early-stop-bits
12599 Allow stop bits to be placed earlier than immediately preceding the
12600 instruction that triggered the stop bit. This can improve
12601 instruction scheduling, but does not always do so.
12602
12603 -mfixed-range=register-range
12604 Generate code treating the given register range as fixed registers.
12605 A fixed register is one that the register allocator cannot use.
12606 This is useful when compiling kernel code. A register range is
12607 specified as two registers separated by a dash. Multiple register
12608 ranges can be specified separated by a comma.
12609
12610 -mtls-size=tls-size
12611 Specify bit size of immediate TLS offsets. Valid values are 14,
12612 22, and 64.
12613
12614 -mtune=cpu-type
12615 Tune the instruction scheduling for a particular CPU, Valid values
12616 are itanium, itanium1, merced, itanium2, and mckinley.
12617
12618 -milp32
12619 -mlp64
12620 Generate code for a 32-bit or 64-bit environment. The 32-bit
12621 environment sets int, long and pointer to 32 bits. The 64-bit
12622 environment sets int to 32 bits and long and pointer to 64 bits.
12623 These are HP-UX specific flags.
12624
12625 -mno-sched-br-data-spec
12626 -msched-br-data-spec
12627 (Dis/En)able data speculative scheduling before reload. This
12628 results in generation of "ld.a" instructions and the corresponding
12629 check instructions ("ld.c" / "chk.a"). The default is 'disable'.
12630
12631 -msched-ar-data-spec
12632 -mno-sched-ar-data-spec
12633 (En/Dis)able data speculative scheduling after reload. This
12634 results in generation of "ld.a" instructions and the corresponding
12635 check instructions ("ld.c" / "chk.a"). The default is 'enable'.
12636
12637 -mno-sched-control-spec
12638 -msched-control-spec
12639 (Dis/En)able control speculative scheduling. This feature is
12640 available only during region scheduling (i.e. before reload). This
12641 results in generation of the "ld.s" instructions and the
12642 corresponding check instructions "chk.s". The default is
12643 'disable'.
12644
12645 -msched-br-in-data-spec
12646 -mno-sched-br-in-data-spec
12647 (En/Dis)able speculative scheduling of the instructions that are
12648 dependent on the data speculative loads before reload. This is
12649 effective only with -msched-br-data-spec enabled. The default is
12650 'enable'.
12651
12652 -msched-ar-in-data-spec
12653 -mno-sched-ar-in-data-spec
12654 (En/Dis)able speculative scheduling of the instructions that are
12655 dependent on the data speculative loads after reload. This is
12656 effective only with -msched-ar-data-spec enabled. The default is
12657 'enable'.
12658
12659 -msched-in-control-spec
12660 -mno-sched-in-control-spec
12661 (En/Dis)able speculative scheduling of the instructions that are
12662 dependent on the control speculative loads. This is effective only
12663 with -msched-control-spec enabled. The default is 'enable'.
12664
12665 -mno-sched-prefer-non-data-spec-insns
12666 -msched-prefer-non-data-spec-insns
12667 If enabled, data-speculative instructions are chosen for schedule
12668 only if there are no other choices at the moment. This makes the
12669 use of the data speculation much more conservative. The default is
12670 'disable'.
12671
12672 -mno-sched-prefer-non-control-spec-insns
12673 -msched-prefer-non-control-spec-insns
12674 If enabled, control-speculative instructions are chosen for
12675 schedule only if there are no other choices at the moment. This
12676 makes the use of the control speculation much more conservative.
12677 The default is 'disable'.
12678
12679 -mno-sched-count-spec-in-critical-path
12680 -msched-count-spec-in-critical-path
12681 If enabled, speculative dependencies are considered during
12682 computation of the instructions priorities. This makes the use of
12683 the speculation a bit more conservative. The default is 'disable'.
12684
12685 -msched-spec-ldc
12686 Use a simple data speculation check. This option is on by default.
12687
12688 -msched-control-spec-ldc
12689 Use a simple check for control speculation. This option is on by
12690 default.
12691
12692 -msched-stop-bits-after-every-cycle
12693 Place a stop bit after every cycle when scheduling. This option is
12694 on by default.
12695
12696 -msched-fp-mem-deps-zero-cost
12697 Assume that floating-point stores and loads are not likely to cause
12698 a conflict when placed into the same instruction group. This
12699 option is disabled by default.
12700
12701 -msel-sched-dont-check-control-spec
12702 Generate checks for control speculation in selective scheduling.
12703 This flag is disabled by default.
12704
12705 -msched-max-memory-insns=max-insns
12706 Limit on the number of memory insns per instruction group, giving
12707 lower priority to subsequent memory insns attempting to schedule in
12708 the same instruction group. Frequently useful to prevent cache bank
12709 conflicts. The default value is 1.
12710
12711 -msched-max-memory-insns-hard-limit
12712 Makes the limit specified by msched-max-memory-insns a hard limit,
12713 disallowing more than that number in an instruction group.
12714 Otherwise, the limit is "soft", meaning that non-memory operations
12715 are preferred when the limit is reached, but memory operations may
12716 still be scheduled.
12717
12718 LM32 Options
12719 These -m options are defined for the LatticeMico32 architecture:
12720
12721 -mbarrel-shift-enabled
12722 Enable barrel-shift instructions.
12723
12724 -mdivide-enabled
12725 Enable divide and modulus instructions.
12726
12727 -mmultiply-enabled
12728 Enable multiply instructions.
12729
12730 -msign-extend-enabled
12731 Enable sign extend instructions.
12732
12733 -muser-enabled
12734 Enable user-defined instructions.
12735
12736 M32C Options
12737 -mcpu=name
12738 Select the CPU for which code is generated. name may be one of r8c
12739 for the R8C/Tiny series, m16c for the M16C (up to /60) series,
12740 m32cm for the M16C/80 series, or m32c for the M32C/80 series.
12741
12742 -msim
12743 Specifies that the program will be run on the simulator. This
12744 causes an alternate runtime library to be linked in which supports,
12745 for example, file I/O. You must not use this option when
12746 generating programs that will run on real hardware; you must
12747 provide your own runtime library for whatever I/O functions are
12748 needed.
12749
12750 -memregs=number
12751 Specifies the number of memory-based pseudo-registers GCC uses
12752 during code generation. These pseudo-registers are used like real
12753 registers, so there is a tradeoff between GCC's ability to fit the
12754 code into available registers, and the performance penalty of using
12755 memory instead of registers. Note that all modules in a program
12756 must be compiled with the same value for this option. Because of
12757 that, you must not use this option with GCC's default runtime
12758 libraries.
12759
12760 M32R/D Options
12761 These -m options are defined for Renesas M32R/D architectures:
12762
12763 -m32r2
12764 Generate code for the M32R/2.
12765
12766 -m32rx
12767 Generate code for the M32R/X.
12768
12769 -m32r
12770 Generate code for the M32R. This is the default.
12771
12772 -mmodel=small
12773 Assume all objects live in the lower 16MB of memory (so that their
12774 addresses can be loaded with the "ld24" instruction), and assume
12775 all subroutines are reachable with the "bl" instruction. This is
12776 the default.
12777
12778 The addressability of a particular object can be set with the
12779 "model" attribute.
12780
12781 -mmodel=medium
12782 Assume objects may be anywhere in the 32-bit address space (the
12783 compiler generates "seth/add3" instructions to load their
12784 addresses), and assume all subroutines are reachable with the "bl"
12785 instruction.
12786
12787 -mmodel=large
12788 Assume objects may be anywhere in the 32-bit address space (the
12789 compiler generates "seth/add3" instructions to load their
12790 addresses), and assume subroutines may not be reachable with the
12791 "bl" instruction (the compiler generates the much slower
12792 "seth/add3/jl" instruction sequence).
12793
12794 -msdata=none
12795 Disable use of the small data area. Variables are put into one of
12796 .data, .bss, or .rodata (unless the "section" attribute has been
12797 specified). This is the default.
12798
12799 The small data area consists of sections .sdata and .sbss. Objects
12800 may be explicitly put in the small data area with the "section"
12801 attribute using one of these sections.
12802
12803 -msdata=sdata
12804 Put small global and static data in the small data area, but do not
12805 generate special code to reference them.
12806
12807 -msdata=use
12808 Put small global and static data in the small data area, and
12809 generate special instructions to reference them.
12810
12811 -G num
12812 Put global and static objects less than or equal to num bytes into
12813 the small data or BSS sections instead of the normal data or BSS
12814 sections. The default value of num is 8. The -msdata option must
12815 be set to one of sdata or use for this option to have any effect.
12816
12817 All modules should be compiled with the same -G num value.
12818 Compiling with different values of num may or may not work; if it
12819 doesn't the linker gives an error message---incorrect code is not
12820 generated.
12821
12822 -mdebug
12823 Makes the M32R-specific code in the compiler display some
12824 statistics that might help in debugging programs.
12825
12826 -malign-loops
12827 Align all loops to a 32-byte boundary.
12828
12829 -mno-align-loops
12830 Do not enforce a 32-byte alignment for loops. This is the default.
12831
12832 -missue-rate=number
12833 Issue number instructions per cycle. number can only be 1 or 2.
12834
12835 -mbranch-cost=number
12836 number can only be 1 or 2. If it is 1 then branches are preferred
12837 over conditional code, if it is 2, then the opposite applies.
12838
12839 -mflush-trap=number
12840 Specifies the trap number to use to flush the cache. The default
12841 is 12. Valid numbers are between 0 and 15 inclusive.
12842
12843 -mno-flush-trap
12844 Specifies that the cache cannot be flushed by using a trap.
12845
12846 -mflush-func=name
12847 Specifies the name of the operating system function to call to
12848 flush the cache. The default is _flush_cache, but a function call
12849 is only used if a trap is not available.
12850
12851 -mno-flush-func
12852 Indicates that there is no OS function for flushing the cache.
12853
12854 M680x0 Options
12855 These are the -m options defined for M680x0 and ColdFire processors.
12856 The default settings depend on which architecture was selected when the
12857 compiler was configured; the defaults for the most common choices are
12858 given below.
12859
12860 -march=arch
12861 Generate code for a specific M680x0 or ColdFire instruction set
12862 architecture. Permissible values of arch for M680x0 architectures
12863 are: 68000, 68010, 68020, 68030, 68040, 68060 and cpu32. ColdFire
12864 architectures are selected according to Freescale's ISA
12865 classification and the permissible values are: isaa, isaaplus, isab
12866 and isac.
12867
12868 GCC defines a macro __mcfarch__ whenever it is generating code for
12869 a ColdFire target. The arch in this macro is one of the -march
12870 arguments given above.
12871
12872 When used together, -march and -mtune select code that runs on a
12873 family of similar processors but that is optimized for a particular
12874 microarchitecture.
12875
12876 -mcpu=cpu
12877 Generate code for a specific M680x0 or ColdFire processor. The
12878 M680x0 cpus are: 68000, 68010, 68020, 68030, 68040, 68060, 68302,
12879 68332 and cpu32. The ColdFire cpus are given by the table below,
12880 which also classifies the CPUs into families:
12881
12882 Family : -mcpu arguments
12883 51 : 51 51ac 51ag 51cn 51em 51je 51jf 51jg 51jm 51mm 51qe 51qm
12884 5206 : 5202 5204 5206
12885 5206e : 5206e
12886 5208 : 5207 5208
12887 5211a : 5210a 5211a
12888 5213 : 5211 5212 5213
12889 5216 : 5214 5216
12890 52235 : 52230 52231 52232 52233 52234 52235
12891 5225 : 5224 5225
12892 52259 : 52252 52254 52255 52256 52258 52259
12893 5235 : 5232 5233 5234 5235 523x
12894 5249 : 5249
12895 5250 : 5250
12896 5271 : 5270 5271
12897 5272 : 5272
12898 5275 : 5274 5275
12899 5282 : 5280 5281 5282 528x
12900 53017 : 53011 53012 53013 53014 53015 53016 53017
12901 5307 : 5307
12902 5329 : 5327 5328 5329 532x
12903 5373 : 5372 5373 537x
12904 5407 : 5407
12905 5475 : 5470 5471 5472 5473 5474 5475 547x 5480 5481 5482 5483 5484
12906 5485
12907
12908 -mcpu=cpu overrides -march=arch if arch is compatible with cpu.
12909 Other combinations of -mcpu and -march are rejected.
12910
12911 GCC defines the macro __mcf_cpu_cpu when ColdFire target cpu is
12912 selected. It also defines __mcf_family_family, where the value of
12913 family is given by the table above.
12914
12915 -mtune=tune
12916 Tune the code for a particular microarchitecture within the
12917 constraints set by -march and -mcpu. The M680x0 microarchitectures
12918 are: 68000, 68010, 68020, 68030, 68040, 68060 and cpu32. The
12919 ColdFire microarchitectures are: cfv1, cfv2, cfv3, cfv4 and cfv4e.
12920
12921 You can also use -mtune=68020-40 for code that needs to run
12922 relatively well on 68020, 68030 and 68040 targets. -mtune=68020-60
12923 is similar but includes 68060 targets as well. These two options
12924 select the same tuning decisions as -m68020-40 and -m68020-60
12925 respectively.
12926
12927 GCC defines the macros __mcarch and __mcarch__ when tuning for
12928 680x0 architecture arch. It also defines mcarch unless either
12929 -ansi or a non-GNU -std option is used. If GCC is tuning for a
12930 range of architectures, as selected by -mtune=68020-40 or
12931 -mtune=68020-60, it defines the macros for every architecture in
12932 the range.
12933
12934 GCC also defines the macro __muarch__ when tuning for ColdFire
12935 microarchitecture uarch, where uarch is one of the arguments given
12936 above.
12937
12938 -m68000
12939 -mc68000
12940 Generate output for a 68000. This is the default when the compiler
12941 is configured for 68000-based systems. It is equivalent to
12942 -march=68000.
12943
12944 Use this option for microcontrollers with a 68000 or EC000 core,
12945 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
12946
12947 -m68010
12948 Generate output for a 68010. This is the default when the compiler
12949 is configured for 68010-based systems. It is equivalent to
12950 -march=68010.
12951
12952 -m68020
12953 -mc68020
12954 Generate output for a 68020. This is the default when the compiler
12955 is configured for 68020-based systems. It is equivalent to
12956 -march=68020.
12957
12958 -m68030
12959 Generate output for a 68030. This is the default when the compiler
12960 is configured for 68030-based systems. It is equivalent to
12961 -march=68030.
12962
12963 -m68040
12964 Generate output for a 68040. This is the default when the compiler
12965 is configured for 68040-based systems. It is equivalent to
12966 -march=68040.
12967
12968 This option inhibits the use of 68881/68882 instructions that have
12969 to be emulated by software on the 68040. Use this option if your
12970 68040 does not have code to emulate those instructions.
12971
12972 -m68060
12973 Generate output for a 68060. This is the default when the compiler
12974 is configured for 68060-based systems. It is equivalent to
12975 -march=68060.
12976
12977 This option inhibits the use of 68020 and 68881/68882 instructions
12978 that have to be emulated by software on the 68060. Use this option
12979 if your 68060 does not have code to emulate those instructions.
12980
12981 -mcpu32
12982 Generate output for a CPU32. This is the default when the compiler
12983 is configured for CPU32-based systems. It is equivalent to
12984 -march=cpu32.
12985
12986 Use this option for microcontrollers with a CPU32 or CPU32+ core,
12987 including the 68330, 68331, 68332, 68333, 68334, 68336, 68340,
12988 68341, 68349 and 68360.
12989
12990 -m5200
12991 Generate output for a 520X ColdFire CPU. This is the default when
12992 the compiler is configured for 520X-based systems. It is
12993 equivalent to -mcpu=5206, and is now deprecated in favor of that
12994 option.
12995
12996 Use this option for microcontroller with a 5200 core, including the
12997 MCF5202, MCF5203, MCF5204 and MCF5206.
12998
12999 -m5206e
13000 Generate output for a 5206e ColdFire CPU. The option is now
13001 deprecated in favor of the equivalent -mcpu=5206e.
13002
13003 -m528x
13004 Generate output for a member of the ColdFire 528X family. The
13005 option is now deprecated in favor of the equivalent -mcpu=528x.
13006
13007 -m5307
13008 Generate output for a ColdFire 5307 CPU. The option is now
13009 deprecated in favor of the equivalent -mcpu=5307.
13010
13011 -m5407
13012 Generate output for a ColdFire 5407 CPU. The option is now
13013 deprecated in favor of the equivalent -mcpu=5407.
13014
13015 -mcfv4e
13016 Generate output for a ColdFire V4e family CPU (e.g. 547x/548x).
13017 This includes use of hardware floating-point instructions. The
13018 option is equivalent to -mcpu=547x, and is now deprecated in favor
13019 of that option.
13020
13021 -m68020-40
13022 Generate output for a 68040, without using any of the new
13023 instructions. This results in code that can run relatively
13024 efficiently on either a 68020/68881 or a 68030 or a 68040. The
13025 generated code does use the 68881 instructions that are emulated on
13026 the 68040.
13027
13028 The option is equivalent to -march=68020 -mtune=68020-40.
13029
13030 -m68020-60
13031 Generate output for a 68060, without using any of the new
13032 instructions. This results in code that can run relatively
13033 efficiently on either a 68020/68881 or a 68030 or a 68040. The
13034 generated code does use the 68881 instructions that are emulated on
13035 the 68060.
13036
13037 The option is equivalent to -march=68020 -mtune=68020-60.
13038
13039 -mhard-float
13040 -m68881
13041 Generate floating-point instructions. This is the default for
13042 68020 and above, and for ColdFire devices that have an FPU. It
13043 defines the macro __HAVE_68881__ on M680x0 targets and __mcffpu__
13044 on ColdFire targets.
13045
13046 -msoft-float
13047 Do not generate floating-point instructions; use library calls
13048 instead. This is the default for 68000, 68010, and 68832 targets.
13049 It is also the default for ColdFire devices that have no FPU.
13050
13051 -mdiv
13052 -mno-div
13053 Generate (do not generate) ColdFire hardware divide and remainder
13054 instructions. If -march is used without -mcpu, the default is "on"
13055 for ColdFire architectures and "off" for M680x0 architectures.
13056 Otherwise, the default is taken from the target CPU (either the
13057 default CPU, or the one specified by -mcpu). For example, the
13058 default is "off" for -mcpu=5206 and "on" for -mcpu=5206e.
13059
13060 GCC defines the macro __mcfhwdiv__ when this option is enabled.
13061
13062 -mshort
13063 Consider type "int" to be 16 bits wide, like "short int".
13064 Additionally, parameters passed on the stack are also aligned to a
13065 16-bit boundary even on targets whose API mandates promotion to
13066 32-bit.
13067
13068 -mno-short
13069 Do not consider type "int" to be 16 bits wide. This is the
13070 default.
13071
13072 -mnobitfield
13073 -mno-bitfield
13074 Do not use the bit-field instructions. The -m68000, -mcpu32 and
13075 -m5200 options imply -mnobitfield.
13076
13077 -mbitfield
13078 Do use the bit-field instructions. The -m68020 option implies
13079 -mbitfield. This is the default if you use a configuration
13080 designed for a 68020.
13081
13082 -mrtd
13083 Use a different function-calling convention, in which functions
13084 that take a fixed number of arguments return with the "rtd"
13085 instruction, which pops their arguments while returning. This
13086 saves one instruction in the caller since there is no need to pop
13087 the arguments there.
13088
13089 This calling convention is incompatible with the one normally used
13090 on Unix, so you cannot use it if you need to call libraries
13091 compiled with the Unix compiler.
13092
13093 Also, you must provide function prototypes for all functions that
13094 take variable numbers of arguments (including "printf"); otherwise
13095 incorrect code is generated for calls to those functions.
13096
13097 In addition, seriously incorrect code results if you call a
13098 function with too many arguments. (Normally, extra arguments are
13099 harmlessly ignored.)
13100
13101 The "rtd" instruction is supported by the 68010, 68020, 68030,
13102 68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
13103
13104 -mno-rtd
13105 Do not use the calling conventions selected by -mrtd. This is the
13106 default.
13107
13108 -malign-int
13109 -mno-align-int
13110 Control whether GCC aligns "int", "long", "long long", "float",
13111 "double", and "long double" variables on a 32-bit boundary
13112 (-malign-int) or a 16-bit boundary (-mno-align-int). Aligning
13113 variables on 32-bit boundaries produces code that runs somewhat
13114 faster on processors with 32-bit busses at the expense of more
13115 memory.
13116
13117 Warning: if you use the -malign-int switch, GCC aligns structures
13118 containing the above types differently than most published
13119 application binary interface specifications for the m68k.
13120
13121 -mpcrel
13122 Use the pc-relative addressing mode of the 68000 directly, instead
13123 of using a global offset table. At present, this option implies
13124 -fpic, allowing at most a 16-bit offset for pc-relative addressing.
13125 -fPIC is not presently supported with -mpcrel, though this could be
13126 supported for 68020 and higher processors.
13127
13128 -mno-strict-align
13129 -mstrict-align
13130 Do not (do) assume that unaligned memory references are handled by
13131 the system.
13132
13133 -msep-data
13134 Generate code that allows the data segment to be located in a
13135 different area of memory from the text segment. This allows for
13136 execute-in-place in an environment without virtual memory
13137 management. This option implies -fPIC.
13138
13139 -mno-sep-data
13140 Generate code that assumes that the data segment follows the text
13141 segment. This is the default.
13142
13143 -mid-shared-library
13144 Generate code that supports shared libraries via the library ID
13145 method. This allows for execute-in-place and shared libraries in
13146 an environment without virtual memory management. This option
13147 implies -fPIC.
13148
13149 -mno-id-shared-library
13150 Generate code that doesn't assume ID-based shared libraries are
13151 being used. This is the default.
13152
13153 -mshared-library-id=n
13154 Specifies the identification number of the ID-based shared library
13155 being compiled. Specifying a value of 0 generates more compact
13156 code; specifying other values forces the allocation of that number
13157 to the current library, but is no more space- or time-efficient
13158 than omitting this option.
13159
13160 -mxgot
13161 -mno-xgot
13162 When generating position-independent code for ColdFire, generate
13163 code that works if the GOT has more than 8192 entries. This code
13164 is larger and slower than code generated without this option. On
13165 M680x0 processors, this option is not needed; -fPIC suffices.
13166
13167 GCC normally uses a single instruction to load values from the GOT.
13168 While this is relatively efficient, it only works if the GOT is
13169 smaller than about 64k. Anything larger causes the linker to
13170 report an error such as:
13171
13172 relocation truncated to fit: R_68K_GOT16O foobar
13173
13174 If this happens, you should recompile your code with -mxgot. It
13175 should then work with very large GOTs. However, code generated
13176 with -mxgot is less efficient, since it takes 4 instructions to
13177 fetch the value of a global symbol.
13178
13179 Note that some linkers, including newer versions of the GNU linker,
13180 can create multiple GOTs and sort GOT entries. If you have such a
13181 linker, you should only need to use -mxgot when compiling a single
13182 object file that accesses more than 8192 GOT entries. Very few do.
13183
13184 These options have no effect unless GCC is generating position-
13185 independent code.
13186
13187 MCore Options
13188 These are the -m options defined for the Motorola M*Core processors.
13189
13190 -mhardlit
13191 -mno-hardlit
13192 Inline constants into the code stream if it can be done in two
13193 instructions or less.
13194
13195 -mdiv
13196 -mno-div
13197 Use the divide instruction. (Enabled by default).
13198
13199 -mrelax-immediate
13200 -mno-relax-immediate
13201 Allow arbitrary-sized immediates in bit operations.
13202
13203 -mwide-bitfields
13204 -mno-wide-bitfields
13205 Always treat bit-fields as "int"-sized.
13206
13207 -m4byte-functions
13208 -mno-4byte-functions
13209 Force all functions to be aligned to a 4-byte boundary.
13210
13211 -mcallgraph-data
13212 -mno-callgraph-data
13213 Emit callgraph information.
13214
13215 -mslow-bytes
13216 -mno-slow-bytes
13217 Prefer word access when reading byte quantities.
13218
13219 -mlittle-endian
13220 -mbig-endian
13221 Generate code for a little-endian target.
13222
13223 -m210
13224 -m340
13225 Generate code for the 210 processor.
13226
13227 -mno-lsim
13228 Assume that runtime support has been provided and so omit the
13229 simulator library (libsim.a) from the linker command line.
13230
13231 -mstack-increment=size
13232 Set the maximum amount for a single stack increment operation.
13233 Large values can increase the speed of programs that contain
13234 functions that need a large amount of stack space, but they can
13235 also trigger a segmentation fault if the stack is extended too
13236 much. The default value is 0x1000.
13237
13238 MeP Options
13239 -mabsdiff
13240 Enables the "abs" instruction, which is the absolute difference
13241 between two registers.
13242
13243 -mall-opts
13244 Enables all the optional instructions---average, multiply, divide,
13245 bit operations, leading zero, absolute difference, min/max, clip,
13246 and saturation.
13247
13248 -maverage
13249 Enables the "ave" instruction, which computes the average of two
13250 registers.
13251
13252 -mbased=n
13253 Variables of size n bytes or smaller are placed in the ".based"
13254 section by default. Based variables use the $tp register as a base
13255 register, and there is a 128-byte limit to the ".based" section.
13256
13257 -mbitops
13258 Enables the bit operation instructions---bit test ("btstm"), set
13259 ("bsetm"), clear ("bclrm"), invert ("bnotm"), and test-and-set
13260 ("tas").
13261
13262 -mc=name
13263 Selects which section constant data is placed in. name may be
13264 "tiny", "near", or "far".
13265
13266 -mclip
13267 Enables the "clip" instruction. Note that "-mclip" is not useful
13268 unless you also provide "-mminmax".
13269
13270 -mconfig=name
13271 Selects one of the built-in core configurations. Each MeP chip has
13272 one or more modules in it; each module has a core CPU and a variety
13273 of coprocessors, optional instructions, and peripherals. The
13274 "MeP-Integrator" tool, not part of GCC, provides these
13275 configurations through this option; using this option is the same
13276 as using all the corresponding command-line options. The default
13277 configuration is "default".
13278
13279 -mcop
13280 Enables the coprocessor instructions. By default, this is a 32-bit
13281 coprocessor. Note that the coprocessor is normally enabled via the
13282 "-mconfig=" option.
13283
13284 -mcop32
13285 Enables the 32-bit coprocessor's instructions.
13286
13287 -mcop64
13288 Enables the 64-bit coprocessor's instructions.
13289
13290 -mivc2
13291 Enables IVC2 scheduling. IVC2 is a 64-bit VLIW coprocessor.
13292
13293 -mdc
13294 Causes constant variables to be placed in the ".near" section.
13295
13296 -mdiv
13297 Enables the "div" and "divu" instructions.
13298
13299 -meb
13300 Generate big-endian code.
13301
13302 -mel
13303 Generate little-endian code.
13304
13305 -mio-volatile
13306 Tells the compiler that any variable marked with the "io" attribute
13307 is to be considered volatile.
13308
13309 -ml Causes variables to be assigned to the ".far" section by default.
13310
13311 -mleadz
13312 Enables the "leadz" (leading zero) instruction.
13313
13314 -mm Causes variables to be assigned to the ".near" section by default.
13315
13316 -mminmax
13317 Enables the "min" and "max" instructions.
13318
13319 -mmult
13320 Enables the multiplication and multiply-accumulate instructions.
13321
13322 -mno-opts
13323 Disables all the optional instructions enabled by "-mall-opts".
13324
13325 -mrepeat
13326 Enables the "repeat" and "erepeat" instructions, used for low-
13327 overhead looping.
13328
13329 -ms Causes all variables to default to the ".tiny" section. Note that
13330 there is a 65536-byte limit to this section. Accesses to these
13331 variables use the %gp base register.
13332
13333 -msatur
13334 Enables the saturation instructions. Note that the compiler does
13335 not currently generate these itself, but this option is included
13336 for compatibility with other tools, like "as".
13337
13338 -msdram
13339 Link the SDRAM-based runtime instead of the default ROM-based
13340 runtime.
13341
13342 -msim
13343 Link the simulator runtime libraries.
13344
13345 -msimnovec
13346 Link the simulator runtime libraries, excluding built-in support
13347 for reset and exception vectors and tables.
13348
13349 -mtf
13350 Causes all functions to default to the ".far" section. Without
13351 this option, functions default to the ".near" section.
13352
13353 -mtiny=n
13354 Variables that are n bytes or smaller are allocated to the ".tiny"
13355 section. These variables use the $gp base register. The default
13356 for this option is 4, but note that there's a 65536-byte limit to
13357 the ".tiny" section.
13358
13359 MicroBlaze Options
13360 -msoft-float
13361 Use software emulation for floating point (default).
13362
13363 -mhard-float
13364 Use hardware floating-point instructions.
13365
13366 -mmemcpy
13367 Do not optimize block moves, use "memcpy".
13368
13369 -mno-clearbss
13370 This option is deprecated. Use -fno-zero-initialized-in-bss
13371 instead.
13372
13373 -mcpu=cpu-type
13374 Use features of, and schedule code for, the given CPU. Supported
13375 values are in the format vX.YY.Z, where X is a major version, YY is
13376 the minor version, and Z is compatibility code. Example values are
13377 v3.00.a, v4.00.b, v5.00.a, v5.00.b, v5.00.b, v6.00.a.
13378
13379 -mxl-soft-mul
13380 Use software multiply emulation (default).
13381
13382 -mxl-soft-div
13383 Use software emulation for divides (default).
13384
13385 -mxl-barrel-shift
13386 Use the hardware barrel shifter.
13387
13388 -mxl-pattern-compare
13389 Use pattern compare instructions.
13390
13391 -msmall-divides
13392 Use table lookup optimization for small signed integer divisions.
13393
13394 -mxl-stack-check
13395 This option is deprecated. Use -fstack-check instead.
13396
13397 -mxl-gp-opt
13398 Use GP-relative ".sdata"/".sbss" sections.
13399
13400 -mxl-multiply-high
13401 Use multiply high instructions for high part of 32x32 multiply.
13402
13403 -mxl-float-convert
13404 Use hardware floating-point conversion instructions.
13405
13406 -mxl-float-sqrt
13407 Use hardware floating-point square root instruction.
13408
13409 -mbig-endian
13410 Generate code for a big-endian target.
13411
13412 -mlittle-endian
13413 Generate code for a little-endian target.
13414
13415 -mxl-reorder
13416 Use reorder instructions (swap and byte reversed load/store).
13417
13418 -mxl-mode-app-model
13419 Select application model app-model. Valid models are
13420
13421 executable
13422 normal executable (default), uses startup code crt0.o.
13423
13424 xmdstub
13425 for use with Xilinx Microprocessor Debugger (XMD) based
13426 software intrusive debug agent called xmdstub. This uses
13427 startup file crt1.o and sets the start address of the program
13428 to 0x800.
13429
13430 bootstrap
13431 for applications that are loaded using a bootloader. This
13432 model uses startup file crt2.o which does not contain a
13433 processor reset vector handler. This is suitable for
13434 transferring control on a processor reset to the bootloader
13435 rather than the application.
13436
13437 novectors
13438 for applications that do not require any of the MicroBlaze
13439 vectors. This option may be useful for applications running
13440 within a monitoring application. This model uses crt3.o as a
13441 startup file.
13442
13443 Option -xl-mode-app-model is a deprecated alias for -mxl-mode-app-
13444 model.
13445
13446 MIPS Options
13447 -EB Generate big-endian code.
13448
13449 -EL Generate little-endian code. This is the default for mips*el-*-*
13450 configurations.
13451
13452 -march=arch
13453 Generate code that runs on arch, which can be the name of a generic
13454 MIPS ISA, or the name of a particular processor. The ISA names
13455 are: mips1, mips2, mips3, mips4, mips32, mips32r2, mips64 and
13456 mips64r2. The processor names are: 4kc, 4km, 4kp, 4ksc, 4kec,
13457 4kem, 4kep, 4ksd, 5kc, 5kf, 20kc, 24kc, 24kf2_1, 24kf1_1, 24kec,
13458 24kef2_1, 24kef1_1, 34kc, 34kf2_1, 34kf1_1, 34kn, 74kc, 74kf2_1,
13459 74kf1_1, 74kf3_2, 1004kc, 1004kf2_1, 1004kf1_1, loongson2e,
13460 loongson2f, loongson3a, m4k, octeon, octeon+, octeon2, orion,
13461 r2000, r3000, r3900, r4000, r4400, r4600, r4650, r4700, r6000,
13462 r8000, rm7000, rm9000, r10000, r12000, r14000, r16000, sb1,
13463 sr71000, vr4100, vr4111, vr4120, vr4130, vr4300, vr5000, vr5400,
13464 vr5500, xlr and xlp. The special value from-abi selects the most
13465 compatible architecture for the selected ABI (that is, mips1 for
13466 32-bit ABIs and mips3 for 64-bit ABIs).
13467
13468 The native Linux/GNU toolchain also supports the value native,
13469 which selects the best architecture option for the host processor.
13470 -march=native has no effect if GCC does not recognize the
13471 processor.
13472
13473 In processor names, a final 000 can be abbreviated as k (for
13474 example, -march=r2k). Prefixes are optional, and vr may be written
13475 r.
13476
13477 Names of the form nf2_1 refer to processors with FPUs clocked at
13478 half the rate of the core, names of the form nf1_1 refer to
13479 processors with FPUs clocked at the same rate as the core, and
13480 names of the form nf3_2 refer to processors with FPUs clocked a
13481 ratio of 3:2 with respect to the core. For compatibility reasons,
13482 nf is accepted as a synonym for nf2_1 while nx and bfx are accepted
13483 as synonyms for nf1_1.
13484
13485 GCC defines two macros based on the value of this option. The
13486 first is _MIPS_ARCH, which gives the name of target architecture,
13487 as a string. The second has the form _MIPS_ARCH_foo, where foo is
13488 the capitalized value of _MIPS_ARCH. For example, -march=r2000
13489 sets _MIPS_ARCH to "r2000" and defines the macro _MIPS_ARCH_R2000.
13490
13491 Note that the _MIPS_ARCH macro uses the processor names given
13492 above. In other words, it has the full prefix and does not
13493 abbreviate 000 as k. In the case of from-abi, the macro names the
13494 resolved architecture (either "mips1" or "mips3"). It names the
13495 default architecture when no -march option is given.
13496
13497 -mtune=arch
13498 Optimize for arch. Among other things, this option controls the
13499 way instructions are scheduled, and the perceived cost of
13500 arithmetic operations. The list of arch values is the same as for
13501 -march.
13502
13503 When this option is not used, GCC optimizes for the processor
13504 specified by -march. By using -march and -mtune together, it is
13505 possible to generate code that runs on a family of processors, but
13506 optimize the code for one particular member of that family.
13507
13508 -mtune defines the macros _MIPS_TUNE and _MIPS_TUNE_foo, which work
13509 in the same way as the -march ones described above.
13510
13511 -mips1
13512 Equivalent to -march=mips1.
13513
13514 -mips2
13515 Equivalent to -march=mips2.
13516
13517 -mips3
13518 Equivalent to -march=mips3.
13519
13520 -mips4
13521 Equivalent to -march=mips4.
13522
13523 -mips32
13524 Equivalent to -march=mips32.
13525
13526 -mips32r2
13527 Equivalent to -march=mips32r2.
13528
13529 -mips64
13530 Equivalent to -march=mips64.
13531
13532 -mips64r2
13533 Equivalent to -march=mips64r2.
13534
13535 -mips16
13536 -mno-mips16
13537 Generate (do not generate) MIPS16 code. If GCC is targeting a
13538 MIPS32 or MIPS64 architecture, it makes use of the MIPS16e ASE.
13539
13540 MIPS16 code generation can also be controlled on a per-function
13541 basis by means of "mips16" and "nomips16" attributes.
13542
13543 -mflip-mips16
13544 Generate MIPS16 code on alternating functions. This option is
13545 provided for regression testing of mixed MIPS16/non-MIPS16 code
13546 generation, and is not intended for ordinary use in compiling user
13547 code.
13548
13549 -minterlink-mips16
13550 -mno-interlink-mips16
13551 Require (do not require) that non-MIPS16 code be link-compatible
13552 with MIPS16 code.
13553
13554 For example, non-MIPS16 code cannot jump directly to MIPS16 code;
13555 it must either use a call or an indirect jump. -minterlink-mips16
13556 therefore disables direct jumps unless GCC knows that the target of
13557 the jump is not MIPS16.
13558
13559 -mabi=32
13560 -mabi=o64
13561 -mabi=n32
13562 -mabi=64
13563 -mabi=eabi
13564 Generate code for the given ABI.
13565
13566 Note that the EABI has a 32-bit and a 64-bit variant. GCC normally
13567 generates 64-bit code when you select a 64-bit architecture, but
13568 you can use -mgp32 to get 32-bit code instead.
13569
13570 For information about the O64 ABI, see
13571 <http://gcc.gnu.org/projects/mipso64-abi.html>.
13572
13573 GCC supports a variant of the o32 ABI in which floating-point
13574 registers are 64 rather than 32 bits wide. You can select this
13575 combination with -mabi=32 -mfp64. This ABI relies on the "mthc1"
13576 and "mfhc1" instructions and is therefore only supported for
13577 MIPS32R2 processors.
13578
13579 The register assignments for arguments and return values remain the
13580 same, but each scalar value is passed in a single 64-bit register
13581 rather than a pair of 32-bit registers. For example, scalar
13582 floating-point values are returned in $f0 only, not a $f0/$f1 pair.
13583 The set of call-saved registers also remains the same, but all 64
13584 bits are saved.
13585
13586 -mabicalls
13587 -mno-abicalls
13588 Generate (do not generate) code that is suitable for SVR4-style
13589 dynamic objects. -mabicalls is the default for SVR4-based systems.
13590
13591 -mshared
13592 -mno-shared
13593 Generate (do not generate) code that is fully position-independent,
13594 and that can therefore be linked into shared libraries. This
13595 option only affects -mabicalls.
13596
13597 All -mabicalls code has traditionally been position-independent,
13598 regardless of options like -fPIC and -fpic. However, as an
13599 extension, the GNU toolchain allows executables to use absolute
13600 accesses for locally-binding symbols. It can also use shorter GP
13601 initialization sequences and generate direct calls to locally-
13602 defined functions. This mode is selected by -mno-shared.
13603
13604 -mno-shared depends on binutils 2.16 or higher and generates
13605 objects that can only be linked by the GNU linker. However, the
13606 option does not affect the ABI of the final executable; it only
13607 affects the ABI of relocatable objects. Using -mno-shared
13608 generally makes executables both smaller and quicker.
13609
13610 -mshared is the default.
13611
13612 -mplt
13613 -mno-plt
13614 Assume (do not assume) that the static and dynamic linkers support
13615 PLTs and copy relocations. This option only affects -mno-shared
13616 -mabicalls. For the n64 ABI, this option has no effect without
13617 -msym32.
13618
13619 You can make -mplt the default by configuring GCC with
13620 --with-mips-plt. The default is -mno-plt otherwise.
13621
13622 -mxgot
13623 -mno-xgot
13624 Lift (do not lift) the usual restrictions on the size of the global
13625 offset table.
13626
13627 GCC normally uses a single instruction to load values from the GOT.
13628 While this is relatively efficient, it only works if the GOT is
13629 smaller than about 64k. Anything larger causes the linker to
13630 report an error such as:
13631
13632 relocation truncated to fit: R_MIPS_GOT16 foobar
13633
13634 If this happens, you should recompile your code with -mxgot. This
13635 works with very large GOTs, although the code is also less
13636 efficient, since it takes three instructions to fetch the value of
13637 a global symbol.
13638
13639 Note that some linkers can create multiple GOTs. If you have such
13640 a linker, you should only need to use -mxgot when a single object
13641 file accesses more than 64k's worth of GOT entries. Very few do.
13642
13643 These options have no effect unless GCC is generating position
13644 independent code.
13645
13646 -mgp32
13647 Assume that general-purpose registers are 32 bits wide.
13648
13649 -mgp64
13650 Assume that general-purpose registers are 64 bits wide.
13651
13652 -mfp32
13653 Assume that floating-point registers are 32 bits wide.
13654
13655 -mfp64
13656 Assume that floating-point registers are 64 bits wide.
13657
13658 -mhard-float
13659 Use floating-point coprocessor instructions.
13660
13661 -msoft-float
13662 Do not use floating-point coprocessor instructions. Implement
13663 floating-point calculations using library calls instead.
13664
13665 -mno-float
13666 Equivalent to -msoft-float, but additionally asserts that the
13667 program being compiled does not perform any floating-point
13668 operations. This option is presently supported only by some bare-
13669 metal MIPS configurations, where it may select a special set of
13670 libraries that lack all floating-point support (including, for
13671 example, the floating-point "printf" formats). If code compiled
13672 with "-mno-float" accidentally contains floating-point operations,
13673 it is likely to suffer a link-time or run-time failure.
13674
13675 -msingle-float
13676 Assume that the floating-point coprocessor only supports single-
13677 precision operations.
13678
13679 -mdouble-float
13680 Assume that the floating-point coprocessor supports double-
13681 precision operations. This is the default.
13682
13683 -mllsc
13684 -mno-llsc
13685 Use (do not use) ll, sc, and sync instructions to implement atomic
13686 memory built-in functions. When neither option is specified, GCC
13687 uses the instructions if the target architecture supports them.
13688
13689 -mllsc is useful if the runtime environment can emulate the
13690 instructions and -mno-llsc can be useful when compiling for
13691 nonstandard ISAs. You can make either option the default by
13692 configuring GCC with --with-llsc and --without-llsc respectively.
13693 --with-llsc is the default for some configurations; see the
13694 installation documentation for details.
13695
13696 -mdsp
13697 -mno-dsp
13698 Use (do not use) revision 1 of the MIPS DSP ASE.
13699 This option defines the preprocessor macro __mips_dsp. It also
13700 defines __mips_dsp_rev to 1.
13701
13702 -mdspr2
13703 -mno-dspr2
13704 Use (do not use) revision 2 of the MIPS DSP ASE.
13705 This option defines the preprocessor macros __mips_dsp and
13706 __mips_dspr2. It also defines __mips_dsp_rev to 2.
13707
13708 -msmartmips
13709 -mno-smartmips
13710 Use (do not use) the MIPS SmartMIPS ASE.
13711
13712 -mpaired-single
13713 -mno-paired-single
13714 Use (do not use) paired-single floating-point instructions.
13715 This option requires hardware floating-point support to be
13716 enabled.
13717
13718 -mdmx
13719 -mno-mdmx
13720 Use (do not use) MIPS Digital Media Extension instructions. This
13721 option can only be used when generating 64-bit code and requires
13722 hardware floating-point support to be enabled.
13723
13724 -mips3d
13725 -mno-mips3d
13726 Use (do not use) the MIPS-3D ASE. The option -mips3d implies
13727 -mpaired-single.
13728
13729 -mmt
13730 -mno-mt
13731 Use (do not use) MT Multithreading instructions.
13732
13733 -mmcu
13734 -mno-mcu
13735 Use (do not use) the MIPS MCU ASE instructions.
13736
13737 -mlong64
13738 Force "long" types to be 64 bits wide. See -mlong32 for an
13739 explanation of the default and the way that the pointer size is
13740 determined.
13741
13742 -mlong32
13743 Force "long", "int", and pointer types to be 32 bits wide.
13744
13745 The default size of "int"s, "long"s and pointers depends on the
13746 ABI. All the supported ABIs use 32-bit "int"s. The n64 ABI uses
13747 64-bit "long"s, as does the 64-bit EABI; the others use 32-bit
13748 "long"s. Pointers are the same size as "long"s, or the same size
13749 as integer registers, whichever is smaller.
13750
13751 -msym32
13752 -mno-sym32
13753 Assume (do not assume) that all symbols have 32-bit values,
13754 regardless of the selected ABI. This option is useful in
13755 combination with -mabi=64 and -mno-abicalls because it allows GCC
13756 to generate shorter and faster references to symbolic addresses.
13757
13758 -G num
13759 Put definitions of externally-visible data in a small data section
13760 if that data is no bigger than num bytes. GCC can then generate
13761 more efficient accesses to the data; see -mgpopt for details.
13762
13763 The default -G option depends on the configuration.
13764
13765 -mlocal-sdata
13766 -mno-local-sdata
13767 Extend (do not extend) the -G behavior to local data too, such as
13768 to static variables in C. -mlocal-sdata is the default for all
13769 configurations.
13770
13771 If the linker complains that an application is using too much small
13772 data, you might want to try rebuilding the less performance-
13773 critical parts with -mno-local-sdata. You might also want to build
13774 large libraries with -mno-local-sdata, so that the libraries leave
13775 more room for the main program.
13776
13777 -mextern-sdata
13778 -mno-extern-sdata
13779 Assume (do not assume) that externally-defined data is in a small
13780 data section if the size of that data is within the -G limit.
13781 -mextern-sdata is the default for all configurations.
13782
13783 If you compile a module Mod with -mextern-sdata -G num -mgpopt, and
13784 Mod references a variable Var that is no bigger than num bytes, you
13785 must make sure that Var is placed in a small data section. If Var
13786 is defined by another module, you must either compile that module
13787 with a high-enough -G setting or attach a "section" attribute to
13788 Var's definition. If Var is common, you must link the application
13789 with a high-enough -G setting.
13790
13791 The easiest way of satisfying these restrictions is to compile and
13792 link every module with the same -G option. However, you may wish
13793 to build a library that supports several different small data
13794 limits. You can do this by compiling the library with the highest
13795 supported -G setting and additionally using -mno-extern-sdata to
13796 stop the library from making assumptions about externally-defined
13797 data.
13798
13799 -mgpopt
13800 -mno-gpopt
13801 Use (do not use) GP-relative accesses for symbols that are known to
13802 be in a small data section; see -G, -mlocal-sdata and
13803 -mextern-sdata. -mgpopt is the default for all configurations.
13804
13805 -mno-gpopt is useful for cases where the $gp register might not
13806 hold the value of "_gp". For example, if the code is part of a
13807 library that might be used in a boot monitor, programs that call
13808 boot monitor routines pass an unknown value in $gp. (In such
13809 situations, the boot monitor itself is usually compiled with -G0.)
13810
13811 -mno-gpopt implies -mno-local-sdata and -mno-extern-sdata.
13812
13813 -membedded-data
13814 -mno-embedded-data
13815 Allocate variables to the read-only data section first if possible,
13816 then next in the small data section if possible, otherwise in data.
13817 This gives slightly slower code than the default, but reduces the
13818 amount of RAM required when executing, and thus may be preferred
13819 for some embedded systems.
13820
13821 -muninit-const-in-rodata
13822 -mno-uninit-const-in-rodata
13823 Put uninitialized "const" variables in the read-only data section.
13824 This option is only meaningful in conjunction with -membedded-data.
13825
13826 -mcode-readable=setting
13827 Specify whether GCC may generate code that reads from executable
13828 sections. There are three possible settings:
13829
13830 -mcode-readable=yes
13831 Instructions may freely access executable sections. This is
13832 the default setting.
13833
13834 -mcode-readable=pcrel
13835 MIPS16 PC-relative load instructions can access executable
13836 sections, but other instructions must not do so. This option
13837 is useful on 4KSc and 4KSd processors when the code TLBs have
13838 the Read Inhibit bit set. It is also useful on processors that
13839 can be configured to have a dual instruction/data SRAM
13840 interface and that, like the M4K, automatically redirect PC-
13841 relative loads to the instruction RAM.
13842
13843 -mcode-readable=no
13844 Instructions must not access executable sections. This option
13845 can be useful on targets that are configured to have a dual
13846 instruction/data SRAM interface but that (unlike the M4K) do
13847 not automatically redirect PC-relative loads to the instruction
13848 RAM.
13849
13850 -msplit-addresses
13851 -mno-split-addresses
13852 Enable (disable) use of the "%hi()" and "%lo()" assembler
13853 relocation operators. This option has been superseded by
13854 -mexplicit-relocs but is retained for backwards compatibility.
13855
13856 -mexplicit-relocs
13857 -mno-explicit-relocs
13858 Use (do not use) assembler relocation operators when dealing with
13859 symbolic addresses. The alternative, selected by
13860 -mno-explicit-relocs, is to use assembler macros instead.
13861
13862 -mexplicit-relocs is the default if GCC was configured to use an
13863 assembler that supports relocation operators.
13864
13865 -mcheck-zero-division
13866 -mno-check-zero-division
13867 Trap (do not trap) on integer division by zero.
13868
13869 The default is -mcheck-zero-division.
13870
13871 -mdivide-traps
13872 -mdivide-breaks
13873 MIPS systems check for division by zero by generating either a
13874 conditional trap or a break instruction. Using traps results in
13875 smaller code, but is only supported on MIPS II and later. Also,
13876 some versions of the Linux kernel have a bug that prevents trap
13877 from generating the proper signal ("SIGFPE"). Use -mdivide-traps
13878 to allow conditional traps on architectures that support them and
13879 -mdivide-breaks to force the use of breaks.
13880
13881 The default is usually -mdivide-traps, but this can be overridden
13882 at configure time using --with-divide=breaks. Divide-by-zero
13883 checks can be completely disabled using -mno-check-zero-division.
13884
13885 -mmemcpy
13886 -mno-memcpy
13887 Force (do not force) the use of "memcpy()" for non-trivial block
13888 moves. The default is -mno-memcpy, which allows GCC to inline most
13889 constant-sized copies.
13890
13891 -mlong-calls
13892 -mno-long-calls
13893 Disable (do not disable) use of the "jal" instruction. Calling
13894 functions using "jal" is more efficient but requires the caller and
13895 callee to be in the same 256 megabyte segment.
13896
13897 This option has no effect on abicalls code. The default is
13898 -mno-long-calls.
13899
13900 -mmad
13901 -mno-mad
13902 Enable (disable) use of the "mad", "madu" and "mul" instructions,
13903 as provided by the R4650 ISA.
13904
13905 -mfused-madd
13906 -mno-fused-madd
13907 Enable (disable) use of the floating-point multiply-accumulate
13908 instructions, when they are available. The default is
13909 -mfused-madd.
13910
13911 On the R8000 CPU when multiply-accumulate instructions are used,
13912 the intermediate product is calculated to infinite precision and is
13913 not subject to the FCSR Flush to Zero bit. This may be undesirable
13914 in some circumstances. On other processors the result is
13915 numerically identical to the equivalent computation using separate
13916 multiply, add, subtract and negate instructions.
13917
13918 -nocpp
13919 Tell the MIPS assembler to not run its preprocessor over user
13920 assembler files (with a .s suffix) when assembling them.
13921
13922 -mfix-24k
13923 -mno-fix-24k
13924 Work around the 24K E48 (lost data on stores during refill) errata.
13925 The workarounds are implemented by the assembler rather than by
13926 GCC.
13927
13928 -mfix-r4000
13929 -mno-fix-r4000
13930 Work around certain R4000 CPU errata:
13931
13932 - A double-word or a variable shift may give an incorrect result
13933 if executed immediately after starting an integer division.
13934
13935 - A double-word or a variable shift may give an incorrect result
13936 if executed while an integer multiplication is in progress.
13937
13938 - An integer division may give an incorrect result if started in
13939 a delay slot of a taken branch or a jump.
13940
13941 -mfix-r4400
13942 -mno-fix-r4400
13943 Work around certain R4400 CPU errata:
13944
13945 - A double-word or a variable shift may give an incorrect result
13946 if executed immediately after starting an integer division.
13947
13948 -mfix-r10000
13949 -mno-fix-r10000
13950 Work around certain R10000 errata:
13951
13952 - "ll"/"sc" sequences may not behave atomically on revisions
13953 prior to 3.0. They may deadlock on revisions 2.6 and earlier.
13954
13955 This option can only be used if the target architecture supports
13956 branch-likely instructions. -mfix-r10000 is the default when
13957 -march=r10000 is used; -mno-fix-r10000 is the default otherwise.
13958
13959 -mfix-vr4120
13960 -mno-fix-vr4120
13961 Work around certain VR4120 errata:
13962
13963 - "dmultu" does not always produce the correct result.
13964
13965 - "div" and "ddiv" do not always produce the correct result if
13966 one of the operands is negative.
13967
13968 The workarounds for the division errata rely on special functions
13969 in libgcc.a. At present, these functions are only provided by the
13970 "mips64vr*-elf" configurations.
13971
13972 Other VR4120 errata require a NOP to be inserted between certain
13973 pairs of instructions. These errata are handled by the assembler,
13974 not by GCC itself.
13975
13976 -mfix-vr4130
13977 Work around the VR4130 "mflo"/"mfhi" errata. The workarounds are
13978 implemented by the assembler rather than by GCC, although GCC
13979 avoids using "mflo" and "mfhi" if the VR4130 "macc", "macchi",
13980 "dmacc" and "dmacchi" instructions are available instead.
13981
13982 -mfix-sb1
13983 -mno-fix-sb1
13984 Work around certain SB-1 CPU core errata. (This flag currently
13985 works around the SB-1 revision 2 "F1" and "F2" floating-point
13986 errata.)
13987
13988 -mr10k-cache-barrier=setting
13989 Specify whether GCC should insert cache barriers to avoid the side-
13990 effects of speculation on R10K processors.
13991
13992 In common with many processors, the R10K tries to predict the
13993 outcome of a conditional branch and speculatively executes
13994 instructions from the "taken" branch. It later aborts these
13995 instructions if the predicted outcome is wrong. However, on the
13996 R10K, even aborted instructions can have side effects.
13997
13998 This problem only affects kernel stores and, depending on the
13999 system, kernel loads. As an example, a speculatively-executed
14000 store may load the target memory into cache and mark the cache line
14001 as dirty, even if the store itself is later aborted. If a DMA
14002 operation writes to the same area of memory before the "dirty" line
14003 is flushed, the cached data overwrites the DMA-ed data. See the
14004 R10K processor manual for a full description, including other
14005 potential problems.
14006
14007 One workaround is to insert cache barrier instructions before every
14008 memory access that might be speculatively executed and that might
14009 have side effects even if aborted. -mr10k-cache-barrier=setting
14010 controls GCC's implementation of this workaround. It assumes that
14011 aborted accesses to any byte in the following regions does not have
14012 side effects:
14013
14014 1. the memory occupied by the current function's stack frame;
14015
14016 2. the memory occupied by an incoming stack argument;
14017
14018 3. the memory occupied by an object with a link-time-constant
14019 address.
14020
14021 It is the kernel's responsibility to ensure that speculative
14022 accesses to these regions are indeed safe.
14023
14024 If the input program contains a function declaration such as:
14025
14026 void foo (void);
14027
14028 then the implementation of "foo" must allow "j foo" and "jal foo"
14029 to be executed speculatively. GCC honors this restriction for
14030 functions it compiles itself. It expects non-GCC functions (such
14031 as hand-written assembly code) to do the same.
14032
14033 The option has three forms:
14034
14035 -mr10k-cache-barrier=load-store
14036 Insert a cache barrier before a load or store that might be
14037 speculatively executed and that might have side effects even if
14038 aborted.
14039
14040 -mr10k-cache-barrier=store
14041 Insert a cache barrier before a store that might be
14042 speculatively executed and that might have side effects even if
14043 aborted.
14044
14045 -mr10k-cache-barrier=none
14046 Disable the insertion of cache barriers. This is the default
14047 setting.
14048
14049 -mflush-func=func
14050 -mno-flush-func
14051 Specifies the function to call to flush the I and D caches, or to
14052 not call any such function. If called, the function must take the
14053 same arguments as the common "_flush_func()", that is, the address
14054 of the memory range for which the cache is being flushed, the size
14055 of the memory range, and the number 3 (to flush both caches). The
14056 default depends on the target GCC was configured for, but commonly
14057 is either _flush_func or __cpu_flush.
14058
14059 mbranch-cost=num
14060 Set the cost of branches to roughly num "simple" instructions.
14061 This cost is only a heuristic and is not guaranteed to produce
14062 consistent results across releases. A zero cost redundantly
14063 selects the default, which is based on the -mtune setting.
14064
14065 -mbranch-likely
14066 -mno-branch-likely
14067 Enable or disable use of Branch Likely instructions, regardless of
14068 the default for the selected architecture. By default, Branch
14069 Likely instructions may be generated if they are supported by the
14070 selected architecture. An exception is for the MIPS32 and MIPS64
14071 architectures and processors that implement those architectures;
14072 for those, Branch Likely instructions are not be generated by
14073 default because the MIPS32 and MIPS64 architectures specifically
14074 deprecate their use.
14075
14076 -mfp-exceptions
14077 -mno-fp-exceptions
14078 Specifies whether FP exceptions are enabled. This affects how FP
14079 instructions are scheduled for some processors. The default is
14080 that FP exceptions are enabled.
14081
14082 For instance, on the SB-1, if FP exceptions are disabled, and we
14083 are emitting 64-bit code, then we can use both FP pipes.
14084 Otherwise, we can only use one FP pipe.
14085
14086 -mvr4130-align
14087 -mno-vr4130-align
14088 The VR4130 pipeline is two-way superscalar, but can only issue two
14089 instructions together if the first one is 8-byte aligned. When
14090 this option is enabled, GCC aligns pairs of instructions that it
14091 thinks should execute in parallel.
14092
14093 This option only has an effect when optimizing for the VR4130. It
14094 normally makes code faster, but at the expense of making it bigger.
14095 It is enabled by default at optimization level -O3.
14096
14097 -msynci
14098 -mno-synci
14099 Enable (disable) generation of "synci" instructions on
14100 architectures that support it. The "synci" instructions (if
14101 enabled) are generated when "__builtin___clear_cache()" is
14102 compiled.
14103
14104 This option defaults to "-mno-synci", but the default can be
14105 overridden by configuring with "--with-synci".
14106
14107 When compiling code for single processor systems, it is generally
14108 safe to use "synci". However, on many multi-core (SMP) systems, it
14109 does not invalidate the instruction caches on all cores and may
14110 lead to undefined behavior.
14111
14112 -mrelax-pic-calls
14113 -mno-relax-pic-calls
14114 Try to turn PIC calls that are normally dispatched via register $25
14115 into direct calls. This is only possible if the linker can resolve
14116 the destination at link-time and if the destination is within range
14117 for a direct call.
14118
14119 -mrelax-pic-calls is the default if GCC was configured to use an
14120 assembler and a linker that support the ".reloc" assembly directive
14121 and "-mexplicit-relocs" is in effect. With "-mno-explicit-relocs",
14122 this optimization can be performed by the assembler and the linker
14123 alone without help from the compiler.
14124
14125 -mmcount-ra-address
14126 -mno-mcount-ra-address
14127 Emit (do not emit) code that allows "_mcount" to modify the calling
14128 function's return address. When enabled, this option extends the
14129 usual "_mcount" interface with a new ra-address parameter, which
14130 has type "intptr_t *" and is passed in register $12. "_mcount" can
14131 then modify the return address by doing both of the following:
14132
14133 · Returning the new address in register $31.
14134
14135 · Storing the new address in "*ra-address", if ra-address is
14136 nonnull.
14137
14138 The default is -mno-mcount-ra-address.
14139
14140 MMIX Options
14141 These options are defined for the MMIX:
14142
14143 -mlibfuncs
14144 -mno-libfuncs
14145 Specify that intrinsic library functions are being compiled,
14146 passing all values in registers, no matter the size.
14147
14148 -mepsilon
14149 -mno-epsilon
14150 Generate floating-point comparison instructions that compare with
14151 respect to the "rE" epsilon register.
14152
14153 -mabi=mmixware
14154 -mabi=gnu
14155 Generate code that passes function parameters and return values
14156 that (in the called function) are seen as registers $0 and up, as
14157 opposed to the GNU ABI which uses global registers $231 and up.
14158
14159 -mzero-extend
14160 -mno-zero-extend
14161 When reading data from memory in sizes shorter than 64 bits, use
14162 (do not use) zero-extending load instructions by default, rather
14163 than sign-extending ones.
14164
14165 -mknuthdiv
14166 -mno-knuthdiv
14167 Make the result of a division yielding a remainder have the same
14168 sign as the divisor. With the default, -mno-knuthdiv, the sign of
14169 the remainder follows the sign of the dividend. Both methods are
14170 arithmetically valid, the latter being almost exclusively used.
14171
14172 -mtoplevel-symbols
14173 -mno-toplevel-symbols
14174 Prepend (do not prepend) a : to all global symbols, so the assembly
14175 code can be used with the "PREFIX" assembly directive.
14176
14177 -melf
14178 Generate an executable in the ELF format, rather than the default
14179 mmo format used by the mmix simulator.
14180
14181 -mbranch-predict
14182 -mno-branch-predict
14183 Use (do not use) the probable-branch instructions, when static
14184 branch prediction indicates a probable branch.
14185
14186 -mbase-addresses
14187 -mno-base-addresses
14188 Generate (do not generate) code that uses base addresses. Using a
14189 base address automatically generates a request (handled by the
14190 assembler and the linker) for a constant to be set up in a global
14191 register. The register is used for one or more base address
14192 requests within the range 0 to 255 from the value held in the
14193 register. The generally leads to short and fast code, but the
14194 number of different data items that can be addressed is limited.
14195 This means that a program that uses lots of static data may require
14196 -mno-base-addresses.
14197
14198 -msingle-exit
14199 -mno-single-exit
14200 Force (do not force) generated code to have a single exit point in
14201 each function.
14202
14203 MN10300 Options
14204 These -m options are defined for Matsushita MN10300 architectures:
14205
14206 -mmult-bug
14207 Generate code to avoid bugs in the multiply instructions for the
14208 MN10300 processors. This is the default.
14209
14210 -mno-mult-bug
14211 Do not generate code to avoid bugs in the multiply instructions for
14212 the MN10300 processors.
14213
14214 -mam33
14215 Generate code using features specific to the AM33 processor.
14216
14217 -mno-am33
14218 Do not generate code using features specific to the AM33 processor.
14219 This is the default.
14220
14221 -mam33-2
14222 Generate code using features specific to the AM33/2.0 processor.
14223
14224 -mam34
14225 Generate code using features specific to the AM34 processor.
14226
14227 -mtune=cpu-type
14228 Use the timing characteristics of the indicated CPU type when
14229 scheduling instructions. This does not change the targeted
14230 processor type. The CPU type must be one of mn10300, am33, am33-2
14231 or am34.
14232
14233 -mreturn-pointer-on-d0
14234 When generating a function that returns a pointer, return the
14235 pointer in both "a0" and "d0". Otherwise, the pointer is returned
14236 only in "a0", and attempts to call such functions without a
14237 prototype result in errors. Note that this option is on by
14238 default; use -mno-return-pointer-on-d0 to disable it.
14239
14240 -mno-crt0
14241 Do not link in the C run-time initialization object file.
14242
14243 -mrelax
14244 Indicate to the linker that it should perform a relaxation
14245 optimization pass to shorten branches, calls and absolute memory
14246 addresses. This option only has an effect when used on the command
14247 line for the final link step.
14248
14249 This option makes symbolic debugging impossible.
14250
14251 -mliw
14252 Allow the compiler to generate Long Instruction Word instructions
14253 if the target is the AM33 or later. This is the default. This
14254 option defines the preprocessor macro __LIW__.
14255
14256 -mnoliw
14257 Do not allow the compiler to generate Long Instruction Word
14258 instructions. This option defines the preprocessor macro
14259 __NO_LIW__.
14260
14261 -msetlb
14262 Allow the compiler to generate the SETLB and Lcc instructions if
14263 the target is the AM33 or later. This is the default. This option
14264 defines the preprocessor macro __SETLB__.
14265
14266 -mnosetlb
14267 Do not allow the compiler to generate SETLB or Lcc instructions.
14268 This option defines the preprocessor macro __NO_SETLB__.
14269
14270 Moxie Options
14271 -meb
14272 Generate big-endian code. This is the default for moxie-*-*
14273 configurations.
14274
14275 -mel
14276 Generate little-endian code.
14277
14278 -mno-crt0
14279 Do not link in the C run-time initialization object file.
14280
14281 PDP-11 Options
14282 These options are defined for the PDP-11:
14283
14284 -mfpu
14285 Use hardware FPP floating point. This is the default. (FIS
14286 floating point on the PDP-11/40 is not supported.)
14287
14288 -msoft-float
14289 Do not use hardware floating point.
14290
14291 -mac0
14292 Return floating-point results in ac0 (fr0 in Unix assembler
14293 syntax).
14294
14295 -mno-ac0
14296 Return floating-point results in memory. This is the default.
14297
14298 -m40
14299 Generate code for a PDP-11/40.
14300
14301 -m45
14302 Generate code for a PDP-11/45. This is the default.
14303
14304 -m10
14305 Generate code for a PDP-11/10.
14306
14307 -mbcopy-builtin
14308 Use inline "movmemhi" patterns for copying memory. This is the
14309 default.
14310
14311 -mbcopy
14312 Do not use inline "movmemhi" patterns for copying memory.
14313
14314 -mint16
14315 -mno-int32
14316 Use 16-bit "int". This is the default.
14317
14318 -mint32
14319 -mno-int16
14320 Use 32-bit "int".
14321
14322 -mfloat64
14323 -mno-float32
14324 Use 64-bit "float". This is the default.
14325
14326 -mfloat32
14327 -mno-float64
14328 Use 32-bit "float".
14329
14330 -mabshi
14331 Use "abshi2" pattern. This is the default.
14332
14333 -mno-abshi
14334 Do not use "abshi2" pattern.
14335
14336 -mbranch-expensive
14337 Pretend that branches are expensive. This is for experimenting
14338 with code generation only.
14339
14340 -mbranch-cheap
14341 Do not pretend that branches are expensive. This is the default.
14342
14343 -munix-asm
14344 Use Unix assembler syntax. This is the default when configured for
14345 pdp11-*-bsd.
14346
14347 -mdec-asm
14348 Use DEC assembler syntax. This is the default when configured for
14349 any PDP-11 target other than pdp11-*-bsd.
14350
14351 picoChip Options
14352 These -m options are defined for picoChip implementations:
14353
14354 -mae=ae_type
14355 Set the instruction set, register set, and instruction scheduling
14356 parameters for array element type ae_type. Supported values for
14357 ae_type are ANY, MUL, and MAC.
14358
14359 -mae=ANY selects a completely generic AE type. Code generated with
14360 this option runs on any of the other AE types. The code is not as
14361 efficient as it would be if compiled for a specific AE type, and
14362 some types of operation (e.g., multiplication) do not work properly
14363 on all types of AE.
14364
14365 -mae=MUL selects a MUL AE type. This is the most useful AE type
14366 for compiled code, and is the default.
14367
14368 -mae=MAC selects a DSP-style MAC AE. Code compiled with this
14369 option may suffer from poor performance of byte (char)
14370 manipulation, since the DSP AE does not provide hardware support
14371 for byte load/stores.
14372
14373 -msymbol-as-address
14374 Enable the compiler to directly use a symbol name as an address in
14375 a load/store instruction, without first loading it into a register.
14376 Typically, the use of this option generates larger programs, which
14377 run faster than when the option isn't used. However, the results
14378 vary from program to program, so it is left as a user option,
14379 rather than being permanently enabled.
14380
14381 -mno-inefficient-warnings
14382 Disables warnings about the generation of inefficient code. These
14383 warnings can be generated, for example, when compiling code that
14384 performs byte-level memory operations on the MAC AE type. The MAC
14385 AE has no hardware support for byte-level memory operations, so all
14386 byte load/stores must be synthesized from word load/store
14387 operations. This is inefficient and a warning is generated to
14388 indicate that you should rewrite the code to avoid byte operations,
14389 or to target an AE type that has the necessary hardware support.
14390 This option disables these warnings.
14391
14392 PowerPC Options
14393 These are listed under
14394
14395 RL78 Options
14396 -msim
14397 Links in additional target libraries to support operation within a
14398 simulator.
14399
14400 -mmul=none
14401 -mmul=g13
14402 -mmul=rl78
14403 Specifies the type of hardware multiplication support to be used.
14404 The default is "none", which uses software multiplication
14405 functions. The "g13" option is for the hardware multiply/divide
14406 peripheral only on the RL78/G13 targets. The "rl78" option is for
14407 the standard hardware multiplication defined in the RL78 software
14408 manual.
14409
14410 IBM RS/6000 and PowerPC Options
14411 These -m options are defined for the IBM RS/6000 and PowerPC:
14412
14413 -mpowerpc-gpopt
14414 -mno-powerpc-gpopt
14415 -mpowerpc-gfxopt
14416 -mno-powerpc-gfxopt
14417 -mpowerpc64
14418 -mno-powerpc64
14419 -mmfcrf
14420 -mno-mfcrf
14421 -mpopcntb
14422 -mno-popcntb
14423 -mpopcntd
14424 -mno-popcntd
14425 -mfprnd
14426 -mno-fprnd
14427 -mcmpb
14428 -mno-cmpb
14429 -mmfpgpr
14430 -mno-mfpgpr
14431 -mhard-dfp
14432 -mno-hard-dfp
14433 You use these options to specify which instructions are available
14434 on the processor you are using. The default value of these options
14435 is determined when configuring GCC. Specifying the -mcpu=cpu_type
14436 overrides the specification of these options. We recommend you use
14437 the -mcpu=cpu_type option rather than the options listed above.
14438
14439 Specifying -mpowerpc-gpopt allows GCC to use the optional PowerPC
14440 architecture instructions in the General Purpose group, including
14441 floating-point square root. Specifying -mpowerpc-gfxopt allows GCC
14442 to use the optional PowerPC architecture instructions in the
14443 Graphics group, including floating-point select.
14444
14445 The -mmfcrf option allows GCC to generate the move from condition
14446 register field instruction implemented on the POWER4 processor and
14447 other processors that support the PowerPC V2.01 architecture. The
14448 -mpopcntb option allows GCC to generate the popcount and double-
14449 precision FP reciprocal estimate instruction implemented on the
14450 POWER5 processor and other processors that support the PowerPC
14451 V2.02 architecture. The -mpopcntd option allows GCC to generate
14452 the popcount instruction implemented on the POWER7 processor and
14453 other processors that support the PowerPC V2.06 architecture. The
14454 -mfprnd option allows GCC to generate the FP round to integer
14455 instructions implemented on the POWER5+ processor and other
14456 processors that support the PowerPC V2.03 architecture. The -mcmpb
14457 option allows GCC to generate the compare bytes instruction
14458 implemented on the POWER6 processor and other processors that
14459 support the PowerPC V2.05 architecture. The -mmfpgpr option allows
14460 GCC to generate the FP move to/from general-purpose register
14461 instructions implemented on the POWER6X processor and other
14462 processors that support the extended PowerPC V2.05 architecture.
14463 The -mhard-dfp option allows GCC to generate the decimal floating-
14464 point instructions implemented on some POWER processors.
14465
14466 The -mpowerpc64 option allows GCC to generate the additional 64-bit
14467 instructions that are found in the full PowerPC64 architecture and
14468 to treat GPRs as 64-bit, doubleword quantities. GCC defaults to
14469 -mno-powerpc64.
14470
14471 -mcpu=cpu_type
14472 Set architecture type, register usage, and instruction scheduling
14473 parameters for machine type cpu_type. Supported values for
14474 cpu_type are 401, 403, 405, 405fp, 440, 440fp, 464, 464fp, 476,
14475 476fp, 505, 601, 602, 603, 603e, 604, 604e, 620, 630, 740, 7400,
14476 7450, 750, 801, 821, 823, 860, 970, 8540, a2, e300c2, e300c3,
14477 e500mc, e500mc64, e5500, e6500, ec603e, G3, G4, G5, titan, power3,
14478 power4, power5, power5+, power6, power6x, power7, power8, powerpc,
14479 powerpc64, powerpc64le, and rs64.
14480
14481 -mcpu=powerpc, -mcpu=powerpc64, and -mcpu=powerpc64le specify pure
14482 32-bit PowerPC (either endian), 64-bit big endian PowerPC and
14483 64-bit little endian PowerPC architecture machine types, with an
14484 appropriate, generic processor model assumed for scheduling
14485 purposes.
14486
14487 The other options specify a specific processor. Code generated
14488 under those options runs best on that processor, and may not run at
14489 all on others.
14490
14491 The -mcpu options automatically enable or disable the following
14492 options:
14493
14494 -maltivec -mfprnd -mhard-float -mmfcrf -mmultiple -mpopcntb
14495 -mpopcntd -mpowerpc64 -mpowerpc-gpopt -mpowerpc-gfxopt
14496 -msingle-float -mdouble-float -msimple-fpu -mstring -mmulhw
14497 -mdlmzb -mmfpgpr -mvsx -mcrypto -mdirect-move -mpower8-fusion
14498 -mpower8-vector -mquad-memory -mquad-memory-atomic
14499
14500 The particular options set for any particular CPU varies between
14501 compiler versions, depending on what setting seems to produce
14502 optimal code for that CPU; it doesn't necessarily reflect the
14503 actual hardware's capabilities. If you wish to set an individual
14504 option to a particular value, you may specify it after the -mcpu
14505 option, like -mcpu=970 -mno-altivec.
14506
14507 On AIX, the -maltivec and -mpowerpc64 options are not enabled or
14508 disabled by the -mcpu option at present because AIX does not have
14509 full support for these options. You may still enable or disable
14510 them individually if you're sure it'll work in your environment.
14511
14512 -mtune=cpu_type
14513 Set the instruction scheduling parameters for machine type
14514 cpu_type, but do not set the architecture type or register usage,
14515 as -mcpu=cpu_type does. The same values for cpu_type are used for
14516 -mtune as for -mcpu. If both are specified, the code generated
14517 uses the architecture and registers set by -mcpu, but the
14518 scheduling parameters set by -mtune.
14519
14520 -mcmodel=small
14521 Generate PowerPC64 code for the small model: The TOC is limited to
14522 64k.
14523
14524 -mcmodel=medium
14525 Generate PowerPC64 code for the medium model: The TOC and other
14526 static data may be up to a total of 4G in size.
14527
14528 -mcmodel=large
14529 Generate PowerPC64 code for the large model: The TOC may be up to
14530 4G in size. Other data and code is only limited by the 64-bit
14531 address space.
14532
14533 -maltivec
14534 -mno-altivec
14535 Generate code that uses (does not use) AltiVec instructions, and
14536 also enable the use of built-in functions that allow more direct
14537 access to the AltiVec instruction set. You may also need to set
14538 -mabi=altivec to adjust the current ABI with AltiVec ABI
14539 enhancements.
14540
14541 When -maltivec is used, rather than -maltivec=le or -maltivec=be,
14542 the element order for Altivec intrinsics such as "vec_splat",
14543 "vec_extract", and "vec_insert" will match array element order
14544 corresponding to the endianness of the target. That is, element
14545 zero identifies the leftmost element in a vector register when
14546 targeting a big-endian platform, and identifies the rightmost
14547 element in a vector register when targeting a little-endian
14548 platform.
14549
14550 -maltivec=be
14551 Generate Altivec instructions using big-endian element order,
14552 regardless of whether the target is big- or little-endian. This is
14553 the default when targeting a big-endian platform.
14554
14555 The element order is used to interpret element numbers in Altivec
14556 intrinsics such as "vec_splat", "vec_extract", and "vec_insert".
14557 By default, these will match array element order corresponding to
14558 the endianness for the target.
14559
14560 -maltivec=le
14561 Generate Altivec instructions using little-endian element order,
14562 regardless of whether the target is big- or little-endian. This is
14563 the default when targeting a little-endian platform. This option
14564 is currently ignored when targeting a big-endian platform.
14565
14566 The element order is used to interpret element numbers in Altivec
14567 intrinsics such as "vec_splat", "vec_extract", and "vec_insert".
14568 By default, these will match array element order corresponding to
14569 the endianness for the target.
14570
14571 -mvrsave
14572 -mno-vrsave
14573 Generate VRSAVE instructions when generating AltiVec code.
14574
14575 -mgen-cell-microcode
14576 Generate Cell microcode instructions.
14577
14578 -mwarn-cell-microcode
14579 Warn when a Cell microcode instruction is emitted. An example of a
14580 Cell microcode instruction is a variable shift.
14581
14582 -msecure-plt
14583 Generate code that allows ld and ld.so to build executables and
14584 shared libraries with non-executable ".plt" and ".got" sections.
14585 This is a PowerPC 32-bit SYSV ABI option.
14586
14587 -mbss-plt
14588 Generate code that uses a BSS ".plt" section that ld.so fills in,
14589 and requires ".plt" and ".got" sections that are both writable and
14590 executable. This is a PowerPC 32-bit SYSV ABI option.
14591
14592 -misel
14593 -mno-isel
14594 This switch enables or disables the generation of ISEL
14595 instructions.
14596
14597 -misel=yes/no
14598 This switch has been deprecated. Use -misel and -mno-isel instead.
14599
14600 -mspe
14601 -mno-spe
14602 This switch enables or disables the generation of SPE simd
14603 instructions.
14604
14605 -mpaired
14606 -mno-paired
14607 This switch enables or disables the generation of PAIRED simd
14608 instructions.
14609
14610 -mspe=yes/no
14611 This option has been deprecated. Use -mspe and -mno-spe instead.
14612
14613 -mvsx
14614 -mno-vsx
14615 Generate code that uses (does not use) vector/scalar (VSX)
14616 instructions, and also enable the use of built-in functions that
14617 allow more direct access to the VSX instruction set.
14618
14619 -mcrypto
14620 -mno-crypto
14621 Enable the use (disable) of the built-in functions that allow
14622 direct access to the cryptographic instructions that were added in
14623 version 2.07 of the PowerPC ISA.
14624
14625 -mdirect-move
14626 -mno-direct-move
14627 Generate code that uses (does not use) the instructions to move
14628 data between the general purpose registers and the vector/scalar
14629 (VSX) registers that were added in version 2.07 of the PowerPC ISA.
14630
14631 -mpower8-fusion
14632 -mno-power8-fusion
14633 Generate code that keeps (does not keeps) some integer operations
14634 adjacent so that the instructions can be fused together on power8
14635 and later processors.
14636
14637 -mpower8-vector
14638 -mno-power8-vector
14639 Generate code that uses (does not use) the vector and scalar
14640 instructions that were added in version 2.07 of the PowerPC ISA.
14641 Also enable the use of built-in functions that allow more direct
14642 access to the vector instructions.
14643
14644 -mquad-memory
14645 -mno-quad-memory
14646 Generate code that uses (does not use) the non-atomic quad word
14647 memory instructions. The -mquad-memory option requires use of
14648 64-bit mode.
14649
14650 -mquad-memory-atomic
14651 -mno-quad-memory-atomic
14652 Generate code that uses (does not use) the atomic quad word memory
14653 instructions. The -mquad-memory-atomic option requires use of
14654 64-bit mode.
14655
14656 -mfloat-gprs=yes/single/double/no
14657 -mfloat-gprs
14658 This switch enables or disables the generation of floating-point
14659 operations on the general-purpose registers for architectures that
14660 support it.
14661
14662 The argument yes or single enables the use of single-precision
14663 floating-point operations.
14664
14665 The argument double enables the use of single and double-precision
14666 floating-point operations.
14667
14668 The argument no disables floating-point operations on the general-
14669 purpose registers.
14670
14671 This option is currently only available on the MPC854x.
14672
14673 -m32
14674 -m64
14675 Generate code for 32-bit or 64-bit environments of Darwin and SVR4
14676 targets (including GNU/Linux). The 32-bit environment sets int,
14677 long and pointer to 32 bits and generates code that runs on any
14678 PowerPC variant. The 64-bit environment sets int to 32 bits and
14679 long and pointer to 64 bits, and generates code for PowerPC64, as
14680 for -mpowerpc64.
14681
14682 -mfull-toc
14683 -mno-fp-in-toc
14684 -mno-sum-in-toc
14685 -mminimal-toc
14686 Modify generation of the TOC (Table Of Contents), which is created
14687 for every executable file. The -mfull-toc option is selected by
14688 default. In that case, GCC allocates at least one TOC entry for
14689 each unique non-automatic variable reference in your program. GCC
14690 also places floating-point constants in the TOC. However, only
14691 16,384 entries are available in the TOC.
14692
14693 If you receive a linker error message that saying you have
14694 overflowed the available TOC space, you can reduce the amount of
14695 TOC space used with the -mno-fp-in-toc and -mno-sum-in-toc options.
14696 -mno-fp-in-toc prevents GCC from putting floating-point constants
14697 in the TOC and -mno-sum-in-toc forces GCC to generate code to
14698 calculate the sum of an address and a constant at run time instead
14699 of putting that sum into the TOC. You may specify one or both of
14700 these options. Each causes GCC to produce very slightly slower and
14701 larger code at the expense of conserving TOC space.
14702
14703 If you still run out of space in the TOC even when you specify both
14704 of these options, specify -mminimal-toc instead. This option
14705 causes GCC to make only one TOC entry for every file. When you
14706 specify this option, GCC produces code that is slower and larger
14707 but which uses extremely little TOC space. You may wish to use
14708 this option only on files that contain less frequently-executed
14709 code.
14710
14711 -maix64
14712 -maix32
14713 Enable 64-bit AIX ABI and calling convention: 64-bit pointers,
14714 64-bit "long" type, and the infrastructure needed to support them.
14715 Specifying -maix64 implies -mpowerpc64, while -maix32 disables the
14716 64-bit ABI and implies -mno-powerpc64. GCC defaults to -maix32.
14717
14718 -mxl-compat
14719 -mno-xl-compat
14720 Produce code that conforms more closely to IBM XL compiler
14721 semantics when using AIX-compatible ABI. Pass floating-point
14722 arguments to prototyped functions beyond the register save area
14723 (RSA) on the stack in addition to argument FPRs. Do not assume
14724 that most significant double in 128-bit long double value is
14725 properly rounded when comparing values and converting to double.
14726 Use XL symbol names for long double support routines.
14727
14728 The AIX calling convention was extended but not initially
14729 documented to handle an obscure K&R C case of calling a function
14730 that takes the address of its arguments with fewer arguments than
14731 declared. IBM XL compilers access floating-point arguments that do
14732 not fit in the RSA from the stack when a subroutine is compiled
14733 without optimization. Because always storing floating-point
14734 arguments on the stack is inefficient and rarely needed, this
14735 option is not enabled by default and only is necessary when calling
14736 subroutines compiled by IBM XL compilers without optimization.
14737
14738 -mpe
14739 Support IBM RS/6000 SP Parallel Environment (PE). Link an
14740 application written to use message passing with special startup
14741 code to enable the application to run. The system must have PE
14742 installed in the standard location (/usr/lpp/ppe.poe/), or the
14743 specs file must be overridden with the -specs= option to specify
14744 the appropriate directory location. The Parallel Environment does
14745 not support threads, so the -mpe option and the -pthread option are
14746 incompatible.
14747
14748 -malign-natural
14749 -malign-power
14750 On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
14751 -malign-natural overrides the ABI-defined alignment of larger
14752 types, such as floating-point doubles, on their natural size-based
14753 boundary. The option -malign-power instructs GCC to follow the
14754 ABI-specified alignment rules. GCC defaults to the standard
14755 alignment defined in the ABI.
14756
14757 On 64-bit Darwin, natural alignment is the default, and
14758 -malign-power is not supported.
14759
14760 -msoft-float
14761 -mhard-float
14762 Generate code that does not use (uses) the floating-point register
14763 set. Software floating-point emulation is provided if you use the
14764 -msoft-float option, and pass the option to GCC when linking.
14765
14766 -msingle-float
14767 -mdouble-float
14768 Generate code for single- or double-precision floating-point
14769 operations. -mdouble-float implies -msingle-float.
14770
14771 -msimple-fpu
14772 Do not generate "sqrt" and "div" instructions for hardware
14773 floating-point unit.
14774
14775 -mfpu=name
14776 Specify type of floating-point unit. Valid values for name are
14777 sp_lite (equivalent to -msingle-float -msimple-fpu), dp_lite
14778 (equivalent to -mdouble-float -msimple-fpu), sp_full (equivalent to
14779 -msingle-float), and dp_full (equivalent to -mdouble-float).
14780
14781 -mxilinx-fpu
14782 Perform optimizations for the floating-point unit on Xilinx PPC
14783 405/440.
14784
14785 -mmultiple
14786 -mno-multiple
14787 Generate code that uses (does not use) the load multiple word
14788 instructions and the store multiple word instructions. These
14789 instructions are generated by default on POWER systems, and not
14790 generated on PowerPC systems. Do not use -mmultiple on little-
14791 endian PowerPC systems, since those instructions do not work when
14792 the processor is in little-endian mode. The exceptions are PPC740
14793 and PPC750 which permit these instructions in little-endian mode.
14794
14795 -mstring
14796 -mno-string
14797 Generate code that uses (does not use) the load string instructions
14798 and the store string word instructions to save multiple registers
14799 and do small block moves. These instructions are generated by
14800 default on POWER systems, and not generated on PowerPC systems. Do
14801 not use -mstring on little-endian PowerPC systems, since those
14802 instructions do not work when the processor is in little-endian
14803 mode. The exceptions are PPC740 and PPC750 which permit these
14804 instructions in little-endian mode.
14805
14806 -mupdate
14807 -mno-update
14808 Generate code that uses (does not use) the load or store
14809 instructions that update the base register to the address of the
14810 calculated memory location. These instructions are generated by
14811 default. If you use -mno-update, there is a small window between
14812 the time that the stack pointer is updated and the address of the
14813 previous frame is stored, which means code that walks the stack
14814 frame across interrupts or signals may get corrupted data.
14815
14816 -mavoid-indexed-addresses
14817 -mno-avoid-indexed-addresses
14818 Generate code that tries to avoid (not avoid) the use of indexed
14819 load or store instructions. These instructions can incur a
14820 performance penalty on Power6 processors in certain situations,
14821 such as when stepping through large arrays that cross a 16M
14822 boundary. This option is enabled by default when targeting Power6
14823 and disabled otherwise.
14824
14825 -mfused-madd
14826 -mno-fused-madd
14827 Generate code that uses (does not use) the floating-point multiply
14828 and accumulate instructions. These instructions are generated by
14829 default if hardware floating point is used. The machine-dependent
14830 -mfused-madd option is now mapped to the machine-independent
14831 -ffp-contract=fast option, and -mno-fused-madd is mapped to
14832 -ffp-contract=off.
14833
14834 -mmulhw
14835 -mno-mulhw
14836 Generate code that uses (does not use) the half-word multiply and
14837 multiply-accumulate instructions on the IBM 405, 440, 464 and 476
14838 processors. These instructions are generated by default when
14839 targeting those processors.
14840
14841 -mdlmzb
14842 -mno-dlmzb
14843 Generate code that uses (does not use) the string-search dlmzb
14844 instruction on the IBM 405, 440, 464 and 476 processors. This
14845 instruction is generated by default when targeting those
14846 processors.
14847
14848 -mno-bit-align
14849 -mbit-align
14850 On System V.4 and embedded PowerPC systems do not (do) force
14851 structures and unions that contain bit-fields to be aligned to the
14852 base type of the bit-field.
14853
14854 For example, by default a structure containing nothing but 8
14855 "unsigned" bit-fields of length 1 is aligned to a 4-byte boundary
14856 and has a size of 4 bytes. By using -mno-bit-align, the structure
14857 is aligned to a 1-byte boundary and is 1 byte in size.
14858
14859 -mno-strict-align
14860 -mstrict-align
14861 On System V.4 and embedded PowerPC systems do not (do) assume that
14862 unaligned memory references are handled by the system.
14863
14864 -mrelocatable
14865 -mno-relocatable
14866 Generate code that allows (does not allow) a static executable to
14867 be relocated to a different address at run time. A simple embedded
14868 PowerPC system loader should relocate the entire contents of
14869 ".got2" and 4-byte locations listed in the ".fixup" section, a
14870 table of 32-bit addresses generated by this option. For this to
14871 work, all objects linked together must be compiled with
14872 -mrelocatable or -mrelocatable-lib. -mrelocatable code aligns the
14873 stack to an 8-byte boundary.
14874
14875 -mrelocatable-lib
14876 -mno-relocatable-lib
14877 Like -mrelocatable, -mrelocatable-lib generates a ".fixup" section
14878 to allow static executables to be relocated at run time, but
14879 -mrelocatable-lib does not use the smaller stack alignment of
14880 -mrelocatable. Objects compiled with -mrelocatable-lib may be
14881 linked with objects compiled with any combination of the
14882 -mrelocatable options.
14883
14884 -mno-toc
14885 -mtoc
14886 On System V.4 and embedded PowerPC systems do not (do) assume that
14887 register 2 contains a pointer to a global area pointing to the
14888 addresses used in the program.
14889
14890 -mlittle
14891 -mlittle-endian
14892 On System V.4 and embedded PowerPC systems compile code for the
14893 processor in little-endian mode. The -mlittle-endian option is the
14894 same as -mlittle.
14895
14896 -mbig
14897 -mbig-endian
14898 On System V.4 and embedded PowerPC systems compile code for the
14899 processor in big-endian mode. The -mbig-endian option is the same
14900 as -mbig.
14901
14902 -mdynamic-no-pic
14903 On Darwin and Mac OS X systems, compile code so that it is not
14904 relocatable, but that its external references are relocatable. The
14905 resulting code is suitable for applications, but not shared
14906 libraries.
14907
14908 -msingle-pic-base
14909 Treat the register used for PIC addressing as read-only, rather
14910 than loading it in the prologue for each function. The runtime
14911 system is responsible for initializing this register with an
14912 appropriate value before execution begins.
14913
14914 -mprioritize-restricted-insns=priority
14915 This option controls the priority that is assigned to dispatch-slot
14916 restricted instructions during the second scheduling pass. The
14917 argument priority takes the value 0, 1, or 2 to assign no, highest,
14918 or second-highest (respectively) priority to dispatch-slot
14919 restricted instructions.
14920
14921 -msched-costly-dep=dependence_type
14922 This option controls which dependences are considered costly by the
14923 target during instruction scheduling. The argument dependence_type
14924 takes one of the following values:
14925
14926 no No dependence is costly.
14927
14928 all All dependences are costly.
14929
14930 true_store_to_load
14931 A true dependence from store to load is costly.
14932
14933 store_to_load
14934 Any dependence from store to load is costly.
14935
14936 number
14937 Any dependence for which the latency is greater than or equal
14938 to number is costly.
14939
14940 -minsert-sched-nops=scheme
14941 This option controls which NOP insertion scheme is used during the
14942 second scheduling pass. The argument scheme takes one of the
14943 following values:
14944
14945 no Don't insert NOPs.
14946
14947 pad Pad with NOPs any dispatch group that has vacant issue slots,
14948 according to the scheduler's grouping.
14949
14950 regroup_exact
14951 Insert NOPs to force costly dependent insns into separate
14952 groups. Insert exactly as many NOPs as needed to force an insn
14953 to a new group, according to the estimated processor grouping.
14954
14955 number
14956 Insert NOPs to force costly dependent insns into separate
14957 groups. Insert number NOPs to force an insn to a new group.
14958
14959 -mcall-sysv
14960 On System V.4 and embedded PowerPC systems compile code using
14961 calling conventions that adhere to the March 1995 draft of the
14962 System V Application Binary Interface, PowerPC processor
14963 supplement. This is the default unless you configured GCC using
14964 powerpc-*-eabiaix.
14965
14966 -mcall-sysv-eabi
14967 -mcall-eabi
14968 Specify both -mcall-sysv and -meabi options.
14969
14970 -mcall-sysv-noeabi
14971 Specify both -mcall-sysv and -mno-eabi options.
14972
14973 -mcall-aixdesc
14974 On System V.4 and embedded PowerPC systems compile code for the AIX
14975 operating system.
14976
14977 -mcall-linux
14978 On System V.4 and embedded PowerPC systems compile code for the
14979 Linux-based GNU system.
14980
14981 -mcall-freebsd
14982 On System V.4 and embedded PowerPC systems compile code for the
14983 FreeBSD operating system.
14984
14985 -mcall-netbsd
14986 On System V.4 and embedded PowerPC systems compile code for the
14987 NetBSD operating system.
14988
14989 -mcall-openbsd
14990 On System V.4 and embedded PowerPC systems compile code for the
14991 OpenBSD operating system.
14992
14993 -maix-struct-return
14994 Return all structures in memory (as specified by the AIX ABI).
14995
14996 -msvr4-struct-return
14997 Return structures smaller than 8 bytes in registers (as specified
14998 by the SVR4 ABI).
14999
15000 -mabi=abi-type
15001 Extend the current ABI with a particular extension, or remove such
15002 extension. Valid values are altivec, no-altivec, spe, no-spe,
15003 ibmlongdouble, ieeelongdouble, elfv1, elfv2.
15004
15005 -mabi=spe
15006 Extend the current ABI with SPE ABI extensions. This does not
15007 change the default ABI, instead it adds the SPE ABI extensions to
15008 the current ABI.
15009
15010 -mabi=no-spe
15011 Disable Book-E SPE ABI extensions for the current ABI.
15012
15013 -mabi=ibmlongdouble
15014 Change the current ABI to use IBM extended-precision long double.
15015 This is a PowerPC 32-bit SYSV ABI option.
15016
15017 -mabi=ieeelongdouble
15018 Change the current ABI to use IEEE extended-precision long double.
15019 This is a PowerPC 32-bit Linux ABI option.
15020
15021 -mabi=elfv1
15022 Change the current ABI to use the ELFv1 ABI. This is the default
15023 ABI for big-endian PowerPC 64-bit Linux. Overriding the default
15024 ABI requires special system support and is likely to fail in
15025 spectacular ways.
15026
15027 -mabi=elfv2
15028 Change the current ABI to use the ELFv2 ABI. This is the default
15029 ABI for little-endian PowerPC 64-bit Linux. Overriding the default
15030 ABI requires special system support and is likely to fail in
15031 spectacular ways.
15032
15033 -mprototype
15034 -mno-prototype
15035 On System V.4 and embedded PowerPC systems assume that all calls to
15036 variable argument functions are properly prototyped. Otherwise,
15037 the compiler must insert an instruction before every non-prototyped
15038 call to set or clear bit 6 of the condition code register (CR) to
15039 indicate whether floating-point values are passed in the floating-
15040 point registers in case the function takes variable arguments.
15041 With -mprototype, only calls to prototyped variable argument
15042 functions set or clear the bit.
15043
15044 -msim
15045 On embedded PowerPC systems, assume that the startup module is
15046 called sim-crt0.o and that the standard C libraries are libsim.a
15047 and libc.a. This is the default for powerpc-*-eabisim
15048 configurations.
15049
15050 -mmvme
15051 On embedded PowerPC systems, assume that the startup module is
15052 called crt0.o and the standard C libraries are libmvme.a and
15053 libc.a.
15054
15055 -mads
15056 On embedded PowerPC systems, assume that the startup module is
15057 called crt0.o and the standard C libraries are libads.a and libc.a.
15058
15059 -myellowknife
15060 On embedded PowerPC systems, assume that the startup module is
15061 called crt0.o and the standard C libraries are libyk.a and libc.a.
15062
15063 -mvxworks
15064 On System V.4 and embedded PowerPC systems, specify that you are
15065 compiling for a VxWorks system.
15066
15067 -memb
15068 On embedded PowerPC systems, set the PPC_EMB bit in the ELF flags
15069 header to indicate that eabi extended relocations are used.
15070
15071 -meabi
15072 -mno-eabi
15073 On System V.4 and embedded PowerPC systems do (do not) adhere to
15074 the Embedded Applications Binary Interface (EABI), which is a set
15075 of modifications to the System V.4 specifications. Selecting
15076 -meabi means that the stack is aligned to an 8-byte boundary, a
15077 function "__eabi" is called from "main" to set up the EABI
15078 environment, and the -msdata option can use both "r2" and "r13" to
15079 point to two separate small data areas. Selecting -mno-eabi means
15080 that the stack is aligned to a 16-byte boundary, no EABI
15081 initialization function is called from "main", and the -msdata
15082 option only uses "r13" to point to a single small data area. The
15083 -meabi option is on by default if you configured GCC using one of
15084 the powerpc*-*-eabi* options.
15085
15086 -msdata=eabi
15087 On System V.4 and embedded PowerPC systems, put small initialized
15088 "const" global and static data in the .sdata2 section, which is
15089 pointed to by register "r2". Put small initialized non-"const"
15090 global and static data in the .sdata section, which is pointed to
15091 by register "r13". Put small uninitialized global and static data
15092 in the .sbss section, which is adjacent to the .sdata section. The
15093 -msdata=eabi option is incompatible with the -mrelocatable option.
15094 The -msdata=eabi option also sets the -memb option.
15095
15096 -msdata=sysv
15097 On System V.4 and embedded PowerPC systems, put small global and
15098 static data in the .sdata section, which is pointed to by register
15099 "r13". Put small uninitialized global and static data in the .sbss
15100 section, which is adjacent to the .sdata section. The -msdata=sysv
15101 option is incompatible with the -mrelocatable option.
15102
15103 -msdata=default
15104 -msdata
15105 On System V.4 and embedded PowerPC systems, if -meabi is used,
15106 compile code the same as -msdata=eabi, otherwise compile code the
15107 same as -msdata=sysv.
15108
15109 -msdata=data
15110 On System V.4 and embedded PowerPC systems, put small global data
15111 in the .sdata section. Put small uninitialized global data in the
15112 .sbss section. Do not use register "r13" to address small data
15113 however. This is the default behavior unless other -msdata options
15114 are used.
15115
15116 -msdata=none
15117 -mno-sdata
15118 On embedded PowerPC systems, put all initialized global and static
15119 data in the .data section, and all uninitialized data in the .bss
15120 section.
15121
15122 -mblock-move-inline-limit=num
15123 Inline all block moves (such as calls to "memcpy" or structure
15124 copies) less than or equal to num bytes. The minimum value for num
15125 is 32 bytes on 32-bit targets and 64 bytes on 64-bit targets. The
15126 default value is target-specific.
15127
15128 -G num
15129 On embedded PowerPC systems, put global and static items less than
15130 or equal to num bytes into the small data or BSS sections instead
15131 of the normal data or BSS section. By default, num is 8. The -G
15132 num switch is also passed to the linker. All modules should be
15133 compiled with the same -G num value.
15134
15135 -mregnames
15136 -mno-regnames
15137 On System V.4 and embedded PowerPC systems do (do not) emit
15138 register names in the assembly language output using symbolic
15139 forms.
15140
15141 -mlongcall
15142 -mno-longcall
15143 By default assume that all calls are far away so that a longer and
15144 more expensive calling sequence is required. This is required for
15145 calls farther than 32 megabytes (33,554,432 bytes) from the current
15146 location. A short call is generated if the compiler knows the call
15147 cannot be that far away. This setting can be overridden by the
15148 "shortcall" function attribute, or by "#pragma longcall(0)".
15149
15150 Some linkers are capable of detecting out-of-range calls and
15151 generating glue code on the fly. On these systems, long calls are
15152 unnecessary and generate slower code. As of this writing, the AIX
15153 linker can do this, as can the GNU linker for PowerPC/64. It is
15154 planned to add this feature to the GNU linker for 32-bit PowerPC
15155 systems as well.
15156
15157 On Darwin/PPC systems, "#pragma longcall" generates "jbsr callee,
15158 L42", plus a branch island (glue code). The two target addresses
15159 represent the callee and the branch island. The Darwin/PPC linker
15160 prefers the first address and generates a "bl callee" if the PPC
15161 "bl" instruction reaches the callee directly; otherwise, the linker
15162 generates "bl L42" to call the branch island. The branch island is
15163 appended to the body of the calling function; it computes the full
15164 32-bit address of the callee and jumps to it.
15165
15166 On Mach-O (Darwin) systems, this option directs the compiler emit
15167 to the glue for every direct call, and the Darwin linker decides
15168 whether to use or discard it.
15169
15170 In the future, GCC may ignore all longcall specifications when the
15171 linker is known to generate glue.
15172
15173 -mtls-markers
15174 -mno-tls-markers
15175 Mark (do not mark) calls to "__tls_get_addr" with a relocation
15176 specifying the function argument. The relocation allows the linker
15177 to reliably associate function call with argument setup
15178 instructions for TLS optimization, which in turn allows GCC to
15179 better schedule the sequence.
15180
15181 -pthread
15182 Adds support for multithreading with the pthreads library. This
15183 option sets flags for both the preprocessor and linker.
15184
15185 -mrecip
15186 -mno-recip
15187 This option enables use of the reciprocal estimate and reciprocal
15188 square root estimate instructions with additional Newton-Raphson
15189 steps to increase precision instead of doing a divide or square
15190 root and divide for floating-point arguments. You should use the
15191 -ffast-math option when using -mrecip (or at least
15192 -funsafe-math-optimizations, -finite-math-only, -freciprocal-math
15193 and -fno-trapping-math). Note that while the throughput of the
15194 sequence is generally higher than the throughput of the non-
15195 reciprocal instruction, the precision of the sequence can be
15196 decreased by up to 2 ulp (i.e. the inverse of 1.0 equals
15197 0.99999994) for reciprocal square roots.
15198
15199 -mrecip=opt
15200 This option controls which reciprocal estimate instructions may be
15201 used. opt is a comma-separated list of options, which may be
15202 preceded by a "!" to invert the option: "all": enable all estimate
15203 instructions, "default": enable the default instructions,
15204 equivalent to -mrecip, "none": disable all estimate instructions,
15205 equivalent to -mno-recip; "div": enable the reciprocal
15206 approximation instructions for both single and double precision;
15207 "divf": enable the single-precision reciprocal approximation
15208 instructions; "divd": enable the double-precision reciprocal
15209 approximation instructions; "rsqrt": enable the reciprocal square
15210 root approximation instructions for both single and double
15211 precision; "rsqrtf": enable the single-precision reciprocal square
15212 root approximation instructions; "rsqrtd": enable the double-
15213 precision reciprocal square root approximation instructions;
15214
15215 So, for example, -mrecip=all,!rsqrtd enables all of the reciprocal
15216 estimate instructions, except for the "FRSQRTE", "XSRSQRTEDP", and
15217 "XVRSQRTEDP" instructions which handle the double-precision
15218 reciprocal square root calculations.
15219
15220 -mrecip-precision
15221 -mno-recip-precision
15222 Assume (do not assume) that the reciprocal estimate instructions
15223 provide higher-precision estimates than is mandated by the PowerPC
15224 ABI. Selecting -mcpu=power6, -mcpu=power7 or -mcpu=power8
15225 automatically selects -mrecip-precision. The double-precision
15226 square root estimate instructions are not generated by default on
15227 low-precision machines, since they do not provide an estimate that
15228 converges after three steps.
15229
15230 -mveclibabi=type
15231 Specifies the ABI type to use for vectorizing intrinsics using an
15232 external library. The only type supported at present is "mass",
15233 which specifies to use IBM's Mathematical Acceleration Subsystem
15234 (MASS) libraries for vectorizing intrinsics using external
15235 libraries. GCC currently emits calls to "acosd2", "acosf4",
15236 "acoshd2", "acoshf4", "asind2", "asinf4", "asinhd2", "asinhf4",
15237 "atan2d2", "atan2f4", "atand2", "atanf4", "atanhd2", "atanhf4",
15238 "cbrtd2", "cbrtf4", "cosd2", "cosf4", "coshd2", "coshf4", "erfcd2",
15239 "erfcf4", "erfd2", "erff4", "exp2d2", "exp2f4", "expd2", "expf4",
15240 "expm1d2", "expm1f4", "hypotd2", "hypotf4", "lgammad2", "lgammaf4",
15241 "log10d2", "log10f4", "log1pd2", "log1pf4", "log2d2", "log2f4",
15242 "logd2", "logf4", "powd2", "powf4", "sind2", "sinf4", "sinhd2",
15243 "sinhf4", "sqrtd2", "sqrtf4", "tand2", "tanf4", "tanhd2", and
15244 "tanhf4" when generating code for power7. Both -ftree-vectorize
15245 and -funsafe-math-optimizations must also be enabled. The MASS
15246 libraries must be specified at link time.
15247
15248 -mfriz
15249 -mno-friz
15250 Generate (do not generate) the "friz" instruction when the
15251 -funsafe-math-optimizations option is used to optimize rounding of
15252 floating-point values to 64-bit integer and back to floating point.
15253 The "friz" instruction does not return the same value if the
15254 floating-point number is too large to fit in an integer.
15255
15256 -mpointers-to-nested-functions
15257 -mno-pointers-to-nested-functions
15258 Generate (do not generate) code to load up the static chain
15259 register (r11) when calling through a pointer on AIX and 64-bit
15260 Linux systems where a function pointer points to a 3-word
15261 descriptor giving the function address, TOC value to be loaded in
15262 register r2, and static chain value to be loaded in register r11.
15263 The -mpointers-to-nested-functions is on by default. You cannot
15264 call through pointers to nested functions or pointers to functions
15265 compiled in other languages that use the static chain if you use
15266 the -mno-pointers-to-nested-functions.
15267
15268 -msave-toc-indirect
15269 -mno-save-toc-indirect
15270 Generate (do not generate) code to save the TOC value in the
15271 reserved stack location in the function prologue if the function
15272 calls through a pointer on AIX and 64-bit Linux systems. If the
15273 TOC value is not saved in the prologue, it is saved just before the
15274 call through the pointer. The -mno-save-toc-indirect option is the
15275 default.
15276
15277 -mcompat-align-parm
15278 -mno-compat-align-parm
15279 Generate (do not generate) code to pass structure parameters with a
15280 maximum alignment of 64 bits, for compatibility with older versions
15281 of GCC.
15282
15283 Older versions of GCC (prior to 4.9.0) incorrectly did not align a
15284 structure parameter on a 128-bit boundary when that structure
15285 contained a member requiring 128-bit alignment. This is corrected
15286 in more recent versions of GCC. This option may be used to
15287 generate code that is compatible with functions compiled with older
15288 versions of GCC.
15289
15290 In this version of the compiler, the -mcompat-align-parm is the
15291 default, except when using the Linux ELFv2 ABI.
15292
15293 -mstack-protector-guard=guard
15294 -mstack-protector-guard-reg=reg
15295 -mstack-protector-guard-offset=offset
15296 Generate stack protection code using canary at guard. Supported
15297 locations are global for global canary or tls for per-thread canary
15298 in the TLS block (the default with GNU libc version 2.4 or later).
15299
15300 With the latter choice the options -mstack-protector-guard-reg=reg
15301 and -mstack-protector-guard-offset=offset furthermore specify which
15302 register to use as base register for reading the canary, and from
15303 what offset from that base register. The default for those is as
15304 specified in the relevant ABI.
15305
15306 RX Options
15307 These command-line options are defined for RX targets:
15308
15309 -m64bit-doubles
15310 -m32bit-doubles
15311 Make the "double" data type be 64 bits (-m64bit-doubles) or 32 bits
15312 (-m32bit-doubles) in size. The default is -m32bit-doubles. Note
15313 RX floating-point hardware only works on 32-bit values, which is
15314 why the default is -m32bit-doubles.
15315
15316 -fpu
15317 -nofpu
15318 Enables (-fpu) or disables (-nofpu) the use of RX floating-point
15319 hardware. The default is enabled for the RX600 series and disabled
15320 for the RX200 series.
15321
15322 Floating-point instructions are only generated for 32-bit floating-
15323 point values, however, so the FPU hardware is not used for doubles
15324 if the -m64bit-doubles option is used.
15325
15326 Note If the -fpu option is enabled then -funsafe-math-optimizations
15327 is also enabled automatically. This is because the RX FPU
15328 instructions are themselves unsafe.
15329
15330 -mcpu=name
15331 Selects the type of RX CPU to be targeted. Currently three types
15332 are supported, the generic RX600 and RX200 series hardware and the
15333 specific RX610 CPU. The default is RX600.
15334
15335 The only difference between RX600 and RX610 is that the RX610 does
15336 not support the "MVTIPL" instruction.
15337
15338 The RX200 series does not have a hardware floating-point unit and
15339 so -nofpu is enabled by default when this type is selected.
15340
15341 -mbig-endian-data
15342 -mlittle-endian-data
15343 Store data (but not code) in the big-endian format. The default is
15344 -mlittle-endian-data, i.e. to store data in the little-endian
15345 format.
15346
15347 -msmall-data-limit=N
15348 Specifies the maximum size in bytes of global and static variables
15349 which can be placed into the small data area. Using the small data
15350 area can lead to smaller and faster code, but the size of area is
15351 limited and it is up to the programmer to ensure that the area does
15352 not overflow. Also when the small data area is used one of the
15353 RX's registers (usually "r13") is reserved for use pointing to this
15354 area, so it is no longer available for use by the compiler. This
15355 could result in slower and/or larger code if variables are pushed
15356 onto the stack instead of being held in this register.
15357
15358 Note, common variables (variables that have not been initialized)
15359 and constants are not placed into the small data area as they are
15360 assigned to other sections in the output executable.
15361
15362 The default value is zero, which disables this feature. Note, this
15363 feature is not enabled by default with higher optimization levels
15364 (-O2 etc) because of the potentially detrimental effects of
15365 reserving a register. It is up to the programmer to experiment and
15366 discover whether this feature is of benefit to their program. See
15367 the description of the -mpid option for a description of how the
15368 actual register to hold the small data area pointer is chosen.
15369
15370 -msim
15371 -mno-sim
15372 Use the simulator runtime. The default is to use the libgloss
15373 board-specific runtime.
15374
15375 -mas100-syntax
15376 -mno-as100-syntax
15377 When generating assembler output use a syntax that is compatible
15378 with Renesas's AS100 assembler. This syntax can also be handled by
15379 the GAS assembler, but it has some restrictions so it is not
15380 generated by default.
15381
15382 -mmax-constant-size=N
15383 Specifies the maximum size, in bytes, of a constant that can be
15384 used as an operand in a RX instruction. Although the RX
15385 instruction set does allow constants of up to 4 bytes in length to
15386 be used in instructions, a longer value equates to a longer
15387 instruction. Thus in some circumstances it can be beneficial to
15388 restrict the size of constants that are used in instructions.
15389 Constants that are too big are instead placed into a constant pool
15390 and referenced via register indirection.
15391
15392 The value N can be between 0 and 4. A value of 0 (the default) or
15393 4 means that constants of any size are allowed.
15394
15395 -mrelax
15396 Enable linker relaxation. Linker relaxation is a process whereby
15397 the linker attempts to reduce the size of a program by finding
15398 shorter versions of various instructions. Disabled by default.
15399
15400 -mint-register=N
15401 Specify the number of registers to reserve for fast interrupt
15402 handler functions. The value N can be between 0 and 4. A value of
15403 1 means that register "r13" is reserved for the exclusive use of
15404 fast interrupt handlers. A value of 2 reserves "r13" and "r12". A
15405 value of 3 reserves "r13", "r12" and "r11", and a value of 4
15406 reserves "r13" through "r10". A value of 0, the default, does not
15407 reserve any registers.
15408
15409 -msave-acc-in-interrupts
15410 Specifies that interrupt handler functions should preserve the
15411 accumulator register. This is only necessary if normal code might
15412 use the accumulator register, for example because it performs
15413 64-bit multiplications. The default is to ignore the accumulator
15414 as this makes the interrupt handlers faster.
15415
15416 -mpid
15417 -mno-pid
15418 Enables the generation of position independent data. When enabled
15419 any access to constant data is done via an offset from a base
15420 address held in a register. This allows the location of constant
15421 data to be determined at run time without requiring the executable
15422 to be relocated, which is a benefit to embedded applications with
15423 tight memory constraints. Data that can be modified is not
15424 affected by this option.
15425
15426 Note, using this feature reserves a register, usually "r13", for
15427 the constant data base address. This can result in slower and/or
15428 larger code, especially in complicated functions.
15429
15430 The actual register chosen to hold the constant data base address
15431 depends upon whether the -msmall-data-limit and/or the
15432 -mint-register command-line options are enabled. Starting with
15433 register "r13" and proceeding downwards, registers are allocated
15434 first to satisfy the requirements of -mint-register, then -mpid and
15435 finally -msmall-data-limit. Thus it is possible for the small data
15436 area register to be "r8" if both -mint-register=4 and -mpid are
15437 specified on the command line.
15438
15439 By default this feature is not enabled. The default can be
15440 restored via the -mno-pid command-line option.
15441
15442 -mno-warn-multiple-fast-interrupts
15443 -mwarn-multiple-fast-interrupts
15444 Prevents GCC from issuing a warning message if it finds more than
15445 one fast interrupt handler when it is compiling a file. The
15446 default is to issue a warning for each extra fast interrupt handler
15447 found, as the RX only supports one such interrupt.
15448
15449 Note: The generic GCC command-line option -ffixed-reg has special
15450 significance to the RX port when used with the "interrupt" function
15451 attribute. This attribute indicates a function intended to process
15452 fast interrupts. GCC ensures that it only uses the registers "r10",
15453 "r11", "r12" and/or "r13" and only provided that the normal use of the
15454 corresponding registers have been restricted via the -ffixed-reg or
15455 -mint-register command-line options.
15456
15457 S/390 and zSeries Options
15458 These are the -m options defined for the S/390 and zSeries
15459 architecture.
15460
15461 -mhard-float
15462 -msoft-float
15463 Use (do not use) the hardware floating-point instructions and
15464 registers for floating-point operations. When -msoft-float is
15465 specified, functions in libgcc.a are used to perform floating-point
15466 operations. When -mhard-float is specified, the compiler generates
15467 IEEE floating-point instructions. This is the default.
15468
15469 -mhard-dfp
15470 -mno-hard-dfp
15471 Use (do not use) the hardware decimal-floating-point instructions
15472 for decimal-floating-point operations. When -mno-hard-dfp is
15473 specified, functions in libgcc.a are used to perform decimal-
15474 floating-point operations. When -mhard-dfp is specified, the
15475 compiler generates decimal-floating-point hardware instructions.
15476 This is the default for -march=z9-ec or higher.
15477
15478 -mlong-double-64
15479 -mlong-double-128
15480 These switches control the size of "long double" type. A size of 64
15481 bits makes the "long double" type equivalent to the "double" type.
15482 This is the default.
15483
15484 -mbackchain
15485 -mno-backchain
15486 Store (do not store) the address of the caller's frame as backchain
15487 pointer into the callee's stack frame. A backchain may be needed
15488 to allow debugging using tools that do not understand DWARF 2 call
15489 frame information. When -mno-packed-stack is in effect, the
15490 backchain pointer is stored at the bottom of the stack frame; when
15491 -mpacked-stack is in effect, the backchain is placed into the
15492 topmost word of the 96/160 byte register save area.
15493
15494 In general, code compiled with -mbackchain is call-compatible with
15495 code compiled with -mmo-backchain; however, use of the backchain
15496 for debugging purposes usually requires that the whole binary is
15497 built with -mbackchain. Note that the combination of -mbackchain,
15498 -mpacked-stack and -mhard-float is not supported. In order to
15499 build a linux kernel use -msoft-float.
15500
15501 The default is to not maintain the backchain.
15502
15503 -mpacked-stack
15504 -mno-packed-stack
15505 Use (do not use) the packed stack layout. When -mno-packed-stack
15506 is specified, the compiler uses the all fields of the 96/160 byte
15507 register save area only for their default purpose; unused fields
15508 still take up stack space. When -mpacked-stack is specified,
15509 register save slots are densely packed at the top of the register
15510 save area; unused space is reused for other purposes, allowing for
15511 more efficient use of the available stack space. However, when
15512 -mbackchain is also in effect, the topmost word of the save area is
15513 always used to store the backchain, and the return address register
15514 is always saved two words below the backchain.
15515
15516 As long as the stack frame backchain is not used, code generated
15517 with -mpacked-stack is call-compatible with code generated with
15518 -mno-packed-stack. Note that some non-FSF releases of GCC 2.95 for
15519 S/390 or zSeries generated code that uses the stack frame backchain
15520 at run time, not just for debugging purposes. Such code is not
15521 call-compatible with code compiled with -mpacked-stack. Also, note
15522 that the combination of -mbackchain, -mpacked-stack and
15523 -mhard-float is not supported. In order to build a linux kernel
15524 use -msoft-float.
15525
15526 The default is to not use the packed stack layout.
15527
15528 -msmall-exec
15529 -mno-small-exec
15530 Generate (or do not generate) code using the "bras" instruction to
15531 do subroutine calls. This only works reliably if the total
15532 executable size does not exceed 64k. The default is to use the
15533 "basr" instruction instead, which does not have this limitation.
15534
15535 -m64
15536 -m31
15537 When -m31 is specified, generate code compliant to the GNU/Linux
15538 for S/390 ABI. When -m64 is specified, generate code compliant to
15539 the GNU/Linux for zSeries ABI. This allows GCC in particular to
15540 generate 64-bit instructions. For the s390 targets, the default is
15541 -m31, while the s390x targets default to -m64.
15542
15543 -mzarch
15544 -mesa
15545 When -mzarch is specified, generate code using the instructions
15546 available on z/Architecture. When -mesa is specified, generate
15547 code using the instructions available on ESA/390. Note that -mesa
15548 is not possible with -m64. When generating code compliant to the
15549 GNU/Linux for S/390 ABI, the default is -mesa. When generating
15550 code compliant to the GNU/Linux for zSeries ABI, the default is
15551 -mzarch.
15552
15553 -mhtm
15554 -mno-htm
15555 The -mhtm option enables a set of builtins making use of
15556 instructions available with the transactional execution facility
15557 introduced with the IBM zEnterprise EC12 machine generation S/390
15558 System z Built-in Functions. -mhtm is enabled by default when
15559 using -march=zEC12.
15560
15561 -mvx
15562 -mno-vx
15563 When -mvx is specified, generate code using the instructions
15564 available with the vector extension facility introduced with the
15565 IBM z13 machine generation. This option changes the ABI for some
15566 vector type values with regard to alignment and calling
15567 conventions. In case vector type values are being used in an ABI-
15568 relevant context a GAS .gnu_attribute command will be added to mark
15569 the resulting binary with the ABI used. -mvx is enabled by default
15570 when using -march=z13.
15571
15572 -mzvector
15573 -mno-zvector
15574 The -mzvector option enables vector language extensions and
15575 builtins using instructions available with the vector extension
15576 facility introduced with the IBM z13 machine generation. This
15577 option adds support for vector to be used as a keyword to define
15578 vector type variables and arguments. vector is only available when
15579 GNU extensions are enabled. It will not be expanded when
15580 requesting strict standard compliance e.g. with -std=c99. In
15581 addition to the GCC low-level builtins -mzvector enables a set of
15582 builtins added for compatibility with Altivec-style implementations
15583 like Power and Cell. In order to make use of these builtins the
15584 header file vecintrin.h needs to be included. -mzvector is
15585 disabled by default.
15586
15587 -mmvcle
15588 -mno-mvcle
15589 Generate (or do not generate) code using the "mvcle" instruction to
15590 perform block moves. When -mno-mvcle is specified, use a "mvc"
15591 loop instead. This is the default unless optimizing for size.
15592
15593 -mdebug
15594 -mno-debug
15595 Print (or do not print) additional debug information when
15596 compiling. The default is to not print debug information.
15597
15598 -march=cpu-type
15599 Generate code that runs on cpu-type, which is the name of a system
15600 representing a certain processor type. Possible values for cpu-
15601 type are g5, g6, z900, z990, z9-109, z9-ec, z10, z196, zEC12, and
15602 z13. When generating code using the instructions available on
15603 z/Architecture, the default is -march=z900. Otherwise, the default
15604 is -march=g5.
15605
15606 -mtune=cpu-type
15607 Tune to cpu-type everything applicable about the generated code,
15608 except for the ABI and the set of available instructions. The list
15609 of cpu-type values is the same as for -march. The default is the
15610 value used for -march.
15611
15612 -mtpf-trace
15613 -mno-tpf-trace
15614 Generate code that adds (does not add) in TPF OS specific branches
15615 to trace routines in the operating system. This option is off by
15616 default, even when compiling for the TPF OS.
15617
15618 -mfused-madd
15619 -mno-fused-madd
15620 Generate code that uses (does not use) the floating-point multiply
15621 and accumulate instructions. These instructions are generated by
15622 default if hardware floating point is used.
15623
15624 -mwarn-framesize=framesize
15625 Emit a warning if the current function exceeds the given frame
15626 size. Because this is a compile-time check it doesn't need to be a
15627 real problem when the program runs. It is intended to identify
15628 functions that most probably cause a stack overflow. It is useful
15629 to be used in an environment with limited stack size e.g. the linux
15630 kernel.
15631
15632 -mwarn-dynamicstack
15633 Emit a warning if the function calls "alloca" or uses dynamically-
15634 sized arrays. This is generally a bad idea with a limited stack
15635 size.
15636
15637 -mstack-guard=stack-guard
15638 -mstack-size=stack-size
15639 If these options are provided the S/390 back end emits additional
15640 instructions in the function prologue that trigger a trap if the
15641 stack size is stack-guard bytes above the stack-size (remember that
15642 the stack on S/390 grows downward). If the stack-guard option is
15643 omitted the smallest power of 2 larger than the frame size of the
15644 compiled function is chosen. These options are intended to be used
15645 to help debugging stack overflow problems. The additionally
15646 emitted code causes only little overhead and hence can also be used
15647 in production-like systems without greater performance degradation.
15648 The given values have to be exact powers of 2 and stack-size has to
15649 be greater than stack-guard without exceeding 64k. In order to be
15650 efficient the extra code makes the assumption that the stack starts
15651 at an address aligned to the value given by stack-size. The stack-
15652 guard option can only be used in conjunction with stack-size.
15653
15654 -mhotpatch=pre-halfwords,post-halfwords
15655 If the hotpatch option is enabled, a "hot-patching" function
15656 prologue is generated for all functions in the compilation unit.
15657 The funtion label is prepended with the given number of two-byte
15658 NOP instructions (pre-halfwords, maximum 1000000). After the
15659 label, 2 * post-halfwords bytes are appended, using the largest NOP
15660 like instructions the architecture allows (maximum 1000000).
15661
15662 If both arguments are zero, hotpatching is disabled.
15663
15664 This option can be overridden for individual functions with the
15665 "hotpatch" attribute.
15666
15667 Score Options
15668 These options are defined for Score implementations:
15669
15670 -meb
15671 Compile code for big-endian mode. This is the default.
15672
15673 -mel
15674 Compile code for little-endian mode.
15675
15676 -mnhwloop
15677 Disable generation of "bcnz" instructions.
15678
15679 -muls
15680 Enable generation of unaligned load and store instructions.
15681
15682 -mmac
15683 Enable the use of multiply-accumulate instructions. Disabled by
15684 default.
15685
15686 -mscore5
15687 Specify the SCORE5 as the target architecture.
15688
15689 -mscore5u
15690 Specify the SCORE5U of the target architecture.
15691
15692 -mscore7
15693 Specify the SCORE7 as the target architecture. This is the default.
15694
15695 -mscore7d
15696 Specify the SCORE7D as the target architecture.
15697
15698 SH Options
15699 These -m options are defined for the SH implementations:
15700
15701 -m1 Generate code for the SH1.
15702
15703 -m2 Generate code for the SH2.
15704
15705 -m2e
15706 Generate code for the SH2e.
15707
15708 -m2a-nofpu
15709 Generate code for the SH2a without FPU, or for a SH2a-FPU in such a
15710 way that the floating-point unit is not used.
15711
15712 -m2a-single-only
15713 Generate code for the SH2a-FPU, in such a way that no double-
15714 precision floating-point operations are used.
15715
15716 -m2a-single
15717 Generate code for the SH2a-FPU assuming the floating-point unit is
15718 in single-precision mode by default.
15719
15720 -m2a
15721 Generate code for the SH2a-FPU assuming the floating-point unit is
15722 in double-precision mode by default.
15723
15724 -m3 Generate code for the SH3.
15725
15726 -m3e
15727 Generate code for the SH3e.
15728
15729 -m4-nofpu
15730 Generate code for the SH4 without a floating-point unit.
15731
15732 -m4-single-only
15733 Generate code for the SH4 with a floating-point unit that only
15734 supports single-precision arithmetic.
15735
15736 -m4-single
15737 Generate code for the SH4 assuming the floating-point unit is in
15738 single-precision mode by default.
15739
15740 -m4 Generate code for the SH4.
15741
15742 -m4-100
15743 Generate code for SH4-100.
15744
15745 -m4-100-nofpu
15746 Generate code for SH4-100 in such a way that the floating-point
15747 unit is not used.
15748
15749 -m4-100-single
15750 Generate code for SH4-100 assuming the floating-point unit is in
15751 single-precision mode by default.
15752
15753 -m4-100-single-only
15754 Generate code for SH4-100 in such a way that no double-precision
15755 floating-point operations are used.
15756
15757 -m4-200
15758 Generate code for SH4-200.
15759
15760 -m4-200-nofpu
15761 Generate code for SH4-200 without in such a way that the floating-
15762 point unit is not used.
15763
15764 -m4-200-single
15765 Generate code for SH4-200 assuming the floating-point unit is in
15766 single-precision mode by default.
15767
15768 -m4-200-single-only
15769 Generate code for SH4-200 in such a way that no double-precision
15770 floating-point operations are used.
15771
15772 -m4-300
15773 Generate code for SH4-300.
15774
15775 -m4-300-nofpu
15776 Generate code for SH4-300 without in such a way that the floating-
15777 point unit is not used.
15778
15779 -m4-300-single
15780 Generate code for SH4-300 in such a way that no double-precision
15781 floating-point operations are used.
15782
15783 -m4-300-single-only
15784 Generate code for SH4-300 in such a way that no double-precision
15785 floating-point operations are used.
15786
15787 -m4-340
15788 Generate code for SH4-340 (no MMU, no FPU).
15789
15790 -m4-500
15791 Generate code for SH4-500 (no FPU). Passes -isa=sh4-nofpu to the
15792 assembler.
15793
15794 -m4a-nofpu
15795 Generate code for the SH4al-dsp, or for a SH4a in such a way that
15796 the floating-point unit is not used.
15797
15798 -m4a-single-only
15799 Generate code for the SH4a, in such a way that no double-precision
15800 floating-point operations are used.
15801
15802 -m4a-single
15803 Generate code for the SH4a assuming the floating-point unit is in
15804 single-precision mode by default.
15805
15806 -m4a
15807 Generate code for the SH4a.
15808
15809 -m4al
15810 Same as -m4a-nofpu, except that it implicitly passes -dsp to the
15811 assembler. GCC doesn't generate any DSP instructions at the
15812 moment.
15813
15814 -m5-32media
15815 Generate 32-bit code for SHmedia.
15816
15817 -m5-32media-nofpu
15818 Generate 32-bit code for SHmedia in such a way that the floating-
15819 point unit is not used.
15820
15821 -m5-64media
15822 Generate 64-bit code for SHmedia.
15823
15824 -m5-64media-nofpu
15825 Generate 64-bit code for SHmedia in such a way that the floating-
15826 point unit is not used.
15827
15828 -m5-compact
15829 Generate code for SHcompact.
15830
15831 -m5-compact-nofpu
15832 Generate code for SHcompact in such a way that the floating-point
15833 unit is not used.
15834
15835 -mb Compile code for the processor in big-endian mode.
15836
15837 -ml Compile code for the processor in little-endian mode.
15838
15839 -mdalign
15840 Align doubles at 64-bit boundaries. Note that this changes the
15841 calling conventions, and thus some functions from the standard C
15842 library do not work unless you recompile it first with -mdalign.
15843
15844 -mrelax
15845 Shorten some address references at link time, when possible; uses
15846 the linker option -relax.
15847
15848 -mbigtable
15849 Use 32-bit offsets in "switch" tables. The default is to use
15850 16-bit offsets.
15851
15852 -mbitops
15853 Enable the use of bit manipulation instructions on SH2A.
15854
15855 -mfmovd
15856 Enable the use of the instruction "fmovd". Check -mdalign for
15857 alignment constraints.
15858
15859 -mrenesas
15860 Comply with the calling conventions defined by Renesas.
15861
15862 -mno-renesas
15863 Comply with the calling conventions defined for GCC before the
15864 Renesas conventions were available. This option is the default for
15865 all targets of the SH toolchain.
15866
15867 -mnomacsave
15868 Mark the "MAC" register as call-clobbered, even if -mrenesas is
15869 given.
15870
15871 -mieee
15872 -mno-ieee
15873 Control the IEEE compliance of floating-point comparisons, which
15874 affects the handling of cases where the result of a comparison is
15875 unordered. By default -mieee is implicitly enabled. If
15876 -ffinite-math-only is enabled -mno-ieee is implicitly set, which
15877 results in faster floating-point greater-equal and less-equal
15878 comparisons. The implcit settings can be overridden by specifying
15879 either -mieee or -mno-ieee.
15880
15881 -minline-ic_invalidate
15882 Inline code to invalidate instruction cache entries after setting
15883 up nested function trampolines. This option has no effect if
15884 -musermode is in effect and the selected code generation option
15885 (e.g. -m4) does not allow the use of the "icbi" instruction. If
15886 the selected code generation option does not allow the use of the
15887 "icbi" instruction, and -musermode is not in effect, the inlined
15888 code manipulates the instruction cache address array directly with
15889 an associative write. This not only requires privileged mode at
15890 run time, but it also fails if the cache line had been mapped via
15891 the TLB and has become unmapped.
15892
15893 -misize
15894 Dump instruction size and location in the assembly code.
15895
15896 -mpadstruct
15897 This option is deprecated. It pads structures to multiple of 4
15898 bytes, which is incompatible with the SH ABI.
15899
15900 -matomic-model=model
15901 Sets the model of atomic operations and additional parameters as a
15902 comma separated list. For details on the atomic built-in functions
15903 see __atomic Builtins. The following models and parameters are
15904 supported:
15905
15906 none
15907 Disable compiler generated atomic sequences and emit library
15908 calls for atomic operations. This is the default if the target
15909 is not "sh*-*-linux*".
15910
15911 soft-gusa
15912 Generate GNU/Linux compatible gUSA software atomic sequences
15913 for the atomic built-in functions. The generated atomic
15914 sequences require additional support from the
15915 interrupt/exception handling code of the system and are only
15916 suitable for SH3* and SH4* single-core systems. This option is
15917 enabled by default when the target is "sh*-*-linux*" and SH3*
15918 or SH4*. When the target is SH4A, this option will also
15919 partially utilize the hardware atomic instructions "movli.l"
15920 and "movco.l" to create more efficient code, unless strict is
15921 specified.
15922
15923 soft-tcb
15924 Generate software atomic sequences that use a variable in the
15925 thread control block. This is a variation of the gUSA
15926 sequences which can also be used on SH1* and SH2* targets. The
15927 generated atomic sequences require additional support from the
15928 interrupt/exception handling code of the system and are only
15929 suitable for single-core systems. When using this model, the
15930 gbr-offset= parameter has to be specified as well.
15931
15932 soft-imask
15933 Generate software atomic sequences that temporarily disable
15934 interrupts by setting "SR.IMASK = 1111". This model works only
15935 when the program runs in privileged mode and is only suitable
15936 for single-core systems. Additional support from the
15937 interrupt/exception handling code of the system is not
15938 required. This model is enabled by default when the target is
15939 "sh*-*-linux*" and SH1* or SH2*.
15940
15941 hard-llcs
15942 Generate hardware atomic sequences using the "movli.l" and
15943 "movco.l" instructions only. This is only available on SH4A
15944 and is suitable for multi-core systems. Since the hardware
15945 instructions support only 32 bit atomic variables access to 8
15946 or 16 bit variables is emulated with 32 bit accesses. Code
15947 compiled with this option will also be compatible with other
15948 software atomic model interrupt/exception handling systems if
15949 executed on an SH4A system. Additional support from the
15950 interrupt/exception handling code of the system is not required
15951 for this model.
15952
15953 gbr-offset=
15954 This parameter specifies the offset in bytes of the variable in
15955 the thread control block structure that should be used by the
15956 generated atomic sequences when the soft-tcb model has been
15957 selected. For other models this parameter is ignored. The
15958 specified value must be an integer multiple of four and in the
15959 range 0-1020.
15960
15961 strict
15962 This parameter prevents mixed usage of multiple atomic models,
15963 even though they would be compatible, and will make the
15964 compiler generate atomic sequences of the specified model only.
15965
15966 -mtas
15967 Generate the "tas.b" opcode for "__atomic_test_and_set". Notice
15968 that depending on the particular hardware and software
15969 configuration this can degrade overall performance due to the
15970 operand cache line flushes that are implied by the "tas.b"
15971 instruction. On multi-core SH4A processors the "tas.b" instruction
15972 must be used with caution since it can result in data corruption
15973 for certain cache configurations.
15974
15975 -mprefergot
15976 When generating position-independent code, emit function calls
15977 using the Global Offset Table instead of the Procedure Linkage
15978 Table.
15979
15980 -musermode
15981 -mno-usermode
15982 Don't allow (allow) the compiler generating privileged mode code.
15983 Specifying -musermode also implies -mno-inline-ic_invalidate if the
15984 inlined code would not work in user mode. -musermode is the
15985 default when the target is "sh*-*-linux*". If the target is SH1*
15986 or SH2* -musermode has no effect, since there is no user mode.
15987
15988 -multcost=number
15989 Set the cost to assume for a multiply insn.
15990
15991 -mdiv=strategy
15992 Set the division strategy to be used for integer division
15993 operations. For SHmedia strategy can be one of:
15994
15995 fp Performs the operation in floating point. This has a very high
15996 latency, but needs only a few instructions, so it might be a
15997 good choice if your code has enough easily-exploitable ILP to
15998 allow the compiler to schedule the floating-point instructions
15999 together with other instructions. Division by zero causes a
16000 floating-point exception.
16001
16002 inv Uses integer operations to calculate the inverse of the
16003 divisor, and then multiplies the dividend with the inverse.
16004 This strategy allows CSE and hoisting of the inverse
16005 calculation. Division by zero calculates an unspecified
16006 result, but does not trap.
16007
16008 inv:minlat
16009 A variant of inv where, if no CSE or hoisting opportunities
16010 have been found, or if the entire operation has been hoisted to
16011 the same place, the last stages of the inverse calculation are
16012 intertwined with the final multiply to reduce the overall
16013 latency, at the expense of using a few more instructions, and
16014 thus offering fewer scheduling opportunities with other code.
16015
16016 call
16017 Calls a library function that usually implements the inv:minlat
16018 strategy. This gives high code density for "m5-*media-nofpu"
16019 compilations.
16020
16021 call2
16022 Uses a different entry point of the same library function,
16023 where it assumes that a pointer to a lookup table has already
16024 been set up, which exposes the pointer load to CSE and code
16025 hoisting optimizations.
16026
16027 inv:call
16028 inv:call2
16029 inv:fp
16030 Use the inv algorithm for initial code generation, but if the
16031 code stays unoptimized, revert to the call, call2, or fp
16032 strategies, respectively. Note that the potentially-trapping
16033 side effect of division by zero is carried by a separate
16034 instruction, so it is possible that all the integer
16035 instructions are hoisted out, but the marker for the side
16036 effect stays where it is. A recombination to floating-point
16037 operations or a call is not possible in that case.
16038
16039 inv20u
16040 inv20l
16041 Variants of the inv:minlat strategy. In the case that the
16042 inverse calculation is not separated from the multiply, they
16043 speed up division where the dividend fits into 20 bits (plus
16044 sign where applicable) by inserting a test to skip a number of
16045 operations in this case; this test slows down the case of
16046 larger dividends. inv20u assumes the case of a such a small
16047 dividend to be unlikely, and inv20l assumes it to be likely.
16048
16049 For targets other than SHmedia strategy can be one of:
16050
16051 call-div1
16052 Calls a library function that uses the single-step division
16053 instruction "div1" to perform the operation. Division by zero
16054 calculates an unspecified result and does not trap. This is
16055 the default except for SH4, SH2A and SHcompact.
16056
16057 call-fp
16058 Calls a library function that performs the operation in double
16059 precision floating point. Division by zero causes a floating-
16060 point exception. This is the default for SHcompact with FPU.
16061 Specifying this for targets that do not have a double precision
16062 FPU will default to "call-div1".
16063
16064 call-table
16065 Calls a library function that uses a lookup table for small
16066 divisors and the "div1" instruction with case distinction for
16067 larger divisors. Division by zero calculates an unspecified
16068 result and does not trap. This is the default for SH4.
16069 Specifying this for targets that do not have dynamic shift
16070 instructions will default to "call-div1".
16071
16072 When a division strategy has not been specified the default
16073 strategy will be selected based on the current target. For SH2A
16074 the default strategy is to use the "divs" and "divu" instructions
16075 instead of library function calls.
16076
16077 -maccumulate-outgoing-args
16078 Reserve space once for outgoing arguments in the function prologue
16079 rather than around each call. Generally beneficial for performance
16080 and size. Also needed for unwinding to avoid changing the stack
16081 frame around conditional code.
16082
16083 -mdivsi3_libfunc=name
16084 Set the name of the library function used for 32-bit signed
16085 division to name. This only affects the name used in the call and
16086 inv:call division strategies, and the compiler still expects the
16087 same sets of input/output/clobbered registers as if this option
16088 were not present.
16089
16090 -mfixed-range=register-range
16091 Generate code treating the given register range as fixed registers.
16092 A fixed register is one that the register allocator can not use.
16093 This is useful when compiling kernel code. A register range is
16094 specified as two registers separated by a dash. Multiple register
16095 ranges can be specified separated by a comma.
16096
16097 -mindexed-addressing
16098 Enable the use of the indexed addressing mode for
16099 SHmedia32/SHcompact. This is only safe if the hardware and/or OS
16100 implement 32-bit wrap-around semantics for the indexed addressing
16101 mode. The architecture allows the implementation of processors
16102 with 64-bit MMU, which the OS could use to get 32-bit addressing,
16103 but since no current hardware implementation supports this or any
16104 other way to make the indexed addressing mode safe to use in the
16105 32-bit ABI, the default is -mno-indexed-addressing.
16106
16107 -mgettrcost=number
16108 Set the cost assumed for the "gettr" instruction to number. The
16109 default is 2 if -mpt-fixed is in effect, 100 otherwise.
16110
16111 -mpt-fixed
16112 Assume "pt*" instructions won't trap. This generally generates
16113 better-scheduled code, but is unsafe on current hardware. The
16114 current architecture definition says that "ptabs" and "ptrel" trap
16115 when the target anded with 3 is 3. This has the unintentional
16116 effect of making it unsafe to schedule these instructions before a
16117 branch, or hoist them out of a loop. For example,
16118 "__do_global_ctors", a part of libgcc that runs constructors at
16119 program startup, calls functions in a list which is delimited by
16120 -1. With the -mpt-fixed option, the "ptabs" is done before testing
16121 against -1. That means that all the constructors run a bit more
16122 quickly, but when the loop comes to the end of the list, the
16123 program crashes because "ptabs" loads -1 into a target register.
16124
16125 Since this option is unsafe for any hardware implementing the
16126 current architecture specification, the default is -mno-pt-fixed.
16127 Unless specified explicitly with -mgettrcost, -mno-pt-fixed also
16128 implies -mgettrcost=100; this deters register allocation from using
16129 target registers for storing ordinary integers.
16130
16131 -minvalid-symbols
16132 Assume symbols might be invalid. Ordinary function symbols
16133 generated by the compiler are always valid to load with
16134 "movi"/"shori"/"ptabs" or "movi"/"shori"/"ptrel", but with
16135 assembler and/or linker tricks it is possible to generate symbols
16136 that cause "ptabs" or "ptrel" to trap. This option is only
16137 meaningful when -mno-pt-fixed is in effect. It prevents cross-
16138 basic-block CSE, hoisting and most scheduling of symbol loads. The
16139 default is -mno-invalid-symbols.
16140
16141 -mbranch-cost=num
16142 Assume num to be the cost for a branch instruction. Higher numbers
16143 make the compiler try to generate more branch-free code if
16144 possible. If not specified the value is selected depending on the
16145 processor type that is being compiled for.
16146
16147 -mzdcbranch
16148 -mno-zdcbranch
16149 Assume (do not assume) that zero displacement conditional branch
16150 instructions "bt" and "bf" are fast. If -mzdcbranch is specified,
16151 the compiler will try to prefer zero displacement branch code
16152 sequences. This is enabled by default when generating code for SH4
16153 and SH4A. It can be explicitly disabled by specifying
16154 -mno-zdcbranch.
16155
16156 -mcbranchdi
16157 Enable the "cbranchdi4" instruction pattern.
16158
16159 -mcmpeqdi
16160 Emit the "cmpeqdi_t" instruction pattern even when -mcbranchdi is
16161 in effect.
16162
16163 -mfused-madd
16164 -mno-fused-madd
16165 Generate code that uses (does not use) the floating-point multiply
16166 and accumulate instructions. These instructions are generated by
16167 default if hardware floating point is used. The machine-dependent
16168 -mfused-madd option is now mapped to the machine-independent
16169 -ffp-contract=fast option, and -mno-fused-madd is mapped to
16170 -ffp-contract=off.
16171
16172 -mfsca
16173 -mno-fsca
16174 Allow or disallow the compiler to emit the "fsca" instruction for
16175 sine and cosine approximations. The option "-mfsca" must be used
16176 in combination with "-funsafe-math-optimizations". It is enabled
16177 by default when generating code for SH4A. Using "-mno-fsca"
16178 disables sine and cosine approximations even if
16179 "-funsafe-math-optimizations" is in effect.
16180
16181 -mfsrra
16182 -mno-fsrra
16183 Allow or disallow the compiler to emit the "fsrra" instruction for
16184 reciprocal square root approximations. The option "-mfsrra" must
16185 be used in combination with "-funsafe-math-optimizations" and
16186 "-ffinite-math-only". It is enabled by default when generating
16187 code for SH4A. Using "-mno-fsrra" disables reciprocal square root
16188 approximations even if "-funsafe-math-optimizations" and
16189 "-ffinite-math-only" are in effect.
16190
16191 -mpretend-cmove
16192 Prefer zero-displacement conditional branches for conditional move
16193 instruction patterns. This can result in faster code on the SH4
16194 processor.
16195
16196 Solaris 2 Options
16197 These -m options are supported on Solaris 2:
16198
16199 -mimpure-text
16200 -mimpure-text, used in addition to -shared, tells the compiler to
16201 not pass -z text to the linker when linking a shared object. Using
16202 this option, you can link position-dependent code into a shared
16203 object.
16204
16205 -mimpure-text suppresses the "relocations remain against
16206 allocatable but non-writable sections" linker error message.
16207 However, the necessary relocations trigger copy-on-write, and the
16208 shared object is not actually shared across processes. Instead of
16209 using -mimpure-text, you should compile all source code with -fpic
16210 or -fPIC.
16211
16212 These switches are supported in addition to the above on Solaris 2:
16213
16214 -pthreads
16215 Add support for multithreading using the POSIX threads library.
16216 This option sets flags for both the preprocessor and linker. This
16217 option does not affect the thread safety of object code produced
16218 by the compiler or that of libraries supplied with it.
16219
16220 -pthread
16221 This is a synonym for -pthreads.
16222
16223 SPARC Options
16224 These -m options are supported on the SPARC:
16225
16226 -mno-app-regs
16227 -mapp-regs
16228 Specify -mapp-regs to generate output using the global registers 2
16229 through 4, which the SPARC SVR4 ABI reserves for applications.
16230 Like the global register 1, each global register 2 through 4 is
16231 then treated as an allocable register that is clobbered by function
16232 calls. This is the default.
16233
16234 To be fully SVR4 ABI-compliant at the cost of some performance
16235 loss, specify -mno-app-regs. You should compile libraries and
16236 system software with this option.
16237
16238 -mflat
16239 -mno-flat
16240 With -mflat, the compiler does not generate save/restore
16241 instructions and uses a "flat" or single register window model.
16242 This model is compatible with the regular register window model.
16243 The local registers and the input registers (0--5) are still
16244 treated as "call-saved" registers and are saved on the stack as
16245 needed.
16246
16247 With -mno-flat (the default), the compiler generates save/restore
16248 instructions (except for leaf functions). This is the normal
16249 operating mode.
16250
16251 -mfpu
16252 -mhard-float
16253 Generate output containing floating-point instructions. This is
16254 the default.
16255
16256 -mno-fpu
16257 -msoft-float
16258 Generate output containing library calls for floating point.
16259 Warning: the requisite libraries are not available for all SPARC
16260 targets. Normally the facilities of the machine's usual C compiler
16261 are used, but this cannot be done directly in cross-compilation.
16262 You must make your own arrangements to provide suitable library
16263 functions for cross-compilation. The embedded targets sparc-*-aout
16264 and sparclite-*-* do provide software floating-point support.
16265
16266 -msoft-float changes the calling convention in the output file;
16267 therefore, it is only useful if you compile all of a program with
16268 this option. In particular, you need to compile libgcc.a, the
16269 library that comes with GCC, with -msoft-float in order for this to
16270 work.
16271
16272 -mhard-quad-float
16273 Generate output containing quad-word (long double) floating-point
16274 instructions.
16275
16276 -msoft-quad-float
16277 Generate output containing library calls for quad-word (long
16278 double) floating-point instructions. The functions called are
16279 those specified in the SPARC ABI. This is the default.
16280
16281 As of this writing, there are no SPARC implementations that have
16282 hardware support for the quad-word floating-point instructions.
16283 They all invoke a trap handler for one of these instructions, and
16284 then the trap handler emulates the effect of the instruction.
16285 Because of the trap handler overhead, this is much slower than
16286 calling the ABI library routines. Thus the -msoft-quad-float
16287 option is the default.
16288
16289 -mno-unaligned-doubles
16290 -munaligned-doubles
16291 Assume that doubles have 8-byte alignment. This is the default.
16292
16293 With -munaligned-doubles, GCC assumes that doubles have 8-byte
16294 alignment only if they are contained in another type, or if they
16295 have an absolute address. Otherwise, it assumes they have 4-byte
16296 alignment. Specifying this option avoids some rare compatibility
16297 problems with code generated by other compilers. It is not the
16298 default because it results in a performance loss, especially for
16299 floating-point code.
16300
16301 -muser-mode
16302 -mno-user-mode
16303 Do not generate code that can only run in supervisor mode. This is
16304 relevant only for the "casa" instruction emitted for the LEON3
16305 processor. The default is -mno-user-mode.
16306
16307 -mno-faster-structs
16308 -mfaster-structs
16309 With -mfaster-structs, the compiler assumes that structures should
16310 have 8-byte alignment. This enables the use of pairs of "ldd" and
16311 "std" instructions for copies in structure assignment, in place of
16312 twice as many "ld" and "st" pairs. However, the use of this
16313 changed alignment directly violates the SPARC ABI. Thus, it's
16314 intended only for use on targets where the developer acknowledges
16315 that their resulting code is not directly in line with the rules of
16316 the ABI.
16317
16318 -mcpu=cpu_type
16319 Set the instruction set, register set, and instruction scheduling
16320 parameters for machine type cpu_type. Supported values for
16321 cpu_type are v7, cypress, v8, supersparc, hypersparc, leon, leon3,
16322 leon3v7, sparclite, f930, f934, sparclite86x, sparclet, tsc701, v9,
16323 ultrasparc, ultrasparc3, niagara, niagara2, niagara3 and niagara4.
16324
16325 Native Solaris and GNU/Linux toolchains also support the value
16326 native, which selects the best architecture option for the host
16327 processor. -mcpu=native has no effect if GCC does not recognize
16328 the processor.
16329
16330 Default instruction scheduling parameters are used for values that
16331 select an architecture and not an implementation. These are v7,
16332 v8, sparclite, sparclet, v9.
16333
16334 Here is a list of each supported architecture and their supported
16335 implementations.
16336
16337 v7 cypress, leon3v7
16338
16339 v8 supersparc, hypersparc, leon, leon3
16340
16341 sparclite
16342 f930, f934, sparclite86x
16343
16344 sparclet
16345 tsc701
16346
16347 v9 ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4
16348
16349 By default (unless configured otherwise), GCC generates code for
16350 the V7 variant of the SPARC architecture. With -mcpu=cypress, the
16351 compiler additionally optimizes it for the Cypress CY7C602 chip, as
16352 used in the SPARCStation/SPARCServer 3xx series. This is also
16353 appropriate for the older SPARCStation 1, 2, IPX etc.
16354
16355 With -mcpu=v8, GCC generates code for the V8 variant of the SPARC
16356 architecture. The only difference from V7 code is that the
16357 compiler emits the integer multiply and integer divide instructions
16358 which exist in SPARC-V8 but not in SPARC-V7. With
16359 -mcpu=supersparc, the compiler additionally optimizes it for the
16360 SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000
16361 series.
16362
16363 With -mcpu=sparclite, GCC generates code for the SPARClite variant
16364 of the SPARC architecture. This adds the integer multiply, integer
16365 divide step and scan ("ffs") instructions which exist in SPARClite
16366 but not in SPARC-V7. With -mcpu=f930, the compiler additionally
16367 optimizes it for the Fujitsu MB86930 chip, which is the original
16368 SPARClite, with no FPU. With -mcpu=f934, the compiler additionally
16369 optimizes it for the Fujitsu MB86934 chip, which is the more recent
16370 SPARClite with FPU.
16371
16372 With -mcpu=sparclet, GCC generates code for the SPARClet variant of
16373 the SPARC architecture. This adds the integer multiply,
16374 multiply/accumulate, integer divide step and scan ("ffs")
16375 instructions which exist in SPARClet but not in SPARC-V7. With
16376 -mcpu=tsc701, the compiler additionally optimizes it for the TEMIC
16377 SPARClet chip.
16378
16379 With -mcpu=v9, GCC generates code for the V9 variant of the SPARC
16380 architecture. This adds 64-bit integer and floating-point move
16381 instructions, 3 additional floating-point condition code registers
16382 and conditional move instructions. With -mcpu=ultrasparc, the
16383 compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi
16384 chips. With -mcpu=ultrasparc3, the compiler additionally optimizes
16385 it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ chips. With
16386 -mcpu=niagara, the compiler additionally optimizes it for Sun
16387 UltraSPARC T1 chips. With -mcpu=niagara2, the compiler
16388 additionally optimizes it for Sun UltraSPARC T2 chips. With
16389 -mcpu=niagara3, the compiler additionally optimizes it for Sun
16390 UltraSPARC T3 chips. With -mcpu=niagara4, the compiler
16391 additionally optimizes it for Sun UltraSPARC T4 chips.
16392
16393 -mtune=cpu_type
16394 Set the instruction scheduling parameters for machine type
16395 cpu_type, but do not set the instruction set or register set that
16396 the option -mcpu=cpu_type does.
16397
16398 The same values for -mcpu=cpu_type can be used for -mtune=cpu_type,
16399 but the only useful values are those that select a particular CPU
16400 implementation. Those are cypress, supersparc, hypersparc, leon,
16401 leon3, leon3v7, f930, f934, sparclite86x, tsc701, ultrasparc,
16402 ultrasparc3, niagara, niagara2, niagara3 and niagara4. With native
16403 Solaris and GNU/Linux toolchains, native can also be used.
16404
16405 -mv8plus
16406 -mno-v8plus
16407 With -mv8plus, GCC generates code for the SPARC-V8+ ABI. The
16408 difference from the V8 ABI is that the global and out registers are
16409 considered 64 bits wide. This is enabled by default on Solaris in
16410 32-bit mode for all SPARC-V9 processors.
16411
16412 -mvis
16413 -mno-vis
16414 With -mvis, GCC generates code that takes advantage of the
16415 UltraSPARC Visual Instruction Set extensions. The default is
16416 -mno-vis.
16417
16418 -mvis2
16419 -mno-vis2
16420 With -mvis2, GCC generates code that takes advantage of version 2.0
16421 of the UltraSPARC Visual Instruction Set extensions. The default
16422 is -mvis2 when targeting a cpu that supports such instructions,
16423 such as UltraSPARC-III and later. Setting -mvis2 also sets -mvis.
16424
16425 -mvis3
16426 -mno-vis3
16427 With -mvis3, GCC generates code that takes advantage of version 3.0
16428 of the UltraSPARC Visual Instruction Set extensions. The default
16429 is -mvis3 when targeting a cpu that supports such instructions,
16430 such as niagara-3 and later. Setting -mvis3 also sets -mvis2 and
16431 -mvis.
16432
16433 -mcbcond
16434 -mno-cbcond
16435 With -mcbcond, GCC generates code that takes advantage of compare-
16436 and-branch instructions, as defined in the Sparc Architecture 2011.
16437 The default is -mcbcond when targeting a cpu that supports such
16438 instructions, such as niagara-4 and later.
16439
16440 -mpopc
16441 -mno-popc
16442 With -mpopc, GCC generates code that takes advantage of the
16443 UltraSPARC population count instruction. The default is -mpopc
16444 when targeting a cpu that supports such instructions, such as
16445 Niagara-2 and later.
16446
16447 -mfmaf
16448 -mno-fmaf
16449 With -mfmaf, GCC generates code that takes advantage of the
16450 UltraSPARC Fused Multiply-Add Floating-point extensions. The
16451 default is -mfmaf when targeting a cpu that supports such
16452 instructions, such as Niagara-3 and later.
16453
16454 -mfix-at697f
16455 Enable the documented workaround for the single erratum of the
16456 Atmel AT697F processor (which corresponds to erratum #13 of the
16457 AT697E processor).
16458
16459 -mfix-ut699
16460 Enable the documented workarounds for the floating-point errata and
16461 the data cache nullify errata of the UT699 processor.
16462
16463 These -m options are supported in addition to the above on SPARC-V9
16464 processors in 64-bit environments:
16465
16466 -m32
16467 -m64
16468 Generate code for a 32-bit or 64-bit environment. The 32-bit
16469 environment sets int, long and pointer to 32 bits. The 64-bit
16470 environment sets int to 32 bits and long and pointer to 64 bits.
16471
16472 -mcmodel=which
16473 Set the code model to one of
16474
16475 medlow
16476 The Medium/Low code model: 64-bit addresses, programs must be
16477 linked in the low 32 bits of memory. Programs can be
16478 statically or dynamically linked.
16479
16480 medmid
16481 The Medium/Middle code model: 64-bit addresses, programs must
16482 be linked in the low 44 bits of memory, the text and data
16483 segments must be less than 2GB in size and the data segment
16484 must be located within 2GB of the text segment.
16485
16486 medany
16487 The Medium/Anywhere code model: 64-bit addresses, programs may
16488 be linked anywhere in memory, the text and data segments must
16489 be less than 2GB in size and the data segment must be located
16490 within 2GB of the text segment.
16491
16492 embmedany
16493 The Medium/Anywhere code model for embedded systems: 64-bit
16494 addresses, the text and data segments must be less than 2GB in
16495 size, both starting anywhere in memory (determined at link
16496 time). The global register %g4 points to the base of the data
16497 segment. Programs are statically linked and PIC is not
16498 supported.
16499
16500 -mmemory-model=mem-model
16501 Set the memory model in force on the processor to one of
16502
16503 default
16504 The default memory model for the processor and operating
16505 system.
16506
16507 rmo Relaxed Memory Order
16508
16509 pso Partial Store Order
16510
16511 tso Total Store Order
16512
16513 sc Sequential Consistency
16514
16515 These memory models are formally defined in Appendix D of the Sparc
16516 V9 architecture manual, as set in the processor's "PSTATE.MM"
16517 field.
16518
16519 -mstack-bias
16520 -mno-stack-bias
16521 With -mstack-bias, GCC assumes that the stack pointer, and frame
16522 pointer if present, are offset by -2047 which must be added back
16523 when making stack frame references. This is the default in 64-bit
16524 mode. Otherwise, assume no such offset is present.
16525
16526 SPU Options
16527 These -m options are supported on the SPU:
16528
16529 -mwarn-reloc
16530 -merror-reloc
16531 The loader for SPU does not handle dynamic relocations. By
16532 default, GCC gives an error when it generates code that requires a
16533 dynamic relocation. -mno-error-reloc disables the error,
16534 -mwarn-reloc generates a warning instead.
16535
16536 -msafe-dma
16537 -munsafe-dma
16538 Instructions that initiate or test completion of DMA must not be
16539 reordered with respect to loads and stores of the memory that is
16540 being accessed. With -munsafe-dma you must use the "volatile"
16541 keyword to protect memory accesses, but that can lead to
16542 inefficient code in places where the memory is known to not change.
16543 Rather than mark the memory as volatile, you can use -msafe-dma to
16544 tell the compiler to treat the DMA instructions as potentially
16545 affecting all memory.
16546
16547 -mbranch-hints
16548 By default, GCC generates a branch hint instruction to avoid
16549 pipeline stalls for always-taken or probably-taken branches. A
16550 hint is not generated closer than 8 instructions away from its
16551 branch. There is little reason to disable them, except for
16552 debugging purposes, or to make an object a little bit smaller.
16553
16554 -msmall-mem
16555 -mlarge-mem
16556 By default, GCC generates code assuming that addresses are never
16557 larger than 18 bits. With -mlarge-mem code is generated that
16558 assumes a full 32-bit address.
16559
16560 -mstdmain
16561 By default, GCC links against startup code that assumes the SPU-
16562 style main function interface (which has an unconventional
16563 parameter list). With -mstdmain, GCC links your program against
16564 startup code that assumes a C99-style interface to "main",
16565 including a local copy of "argv" strings.
16566
16567 -mfixed-range=register-range
16568 Generate code treating the given register range as fixed registers.
16569 A fixed register is one that the register allocator cannot use.
16570 This is useful when compiling kernel code. A register range is
16571 specified as two registers separated by a dash. Multiple register
16572 ranges can be specified separated by a comma.
16573
16574 -mea32
16575 -mea64
16576 Compile code assuming that pointers to the PPU address space
16577 accessed via the "__ea" named address space qualifier are either 32
16578 or 64 bits wide. The default is 32 bits. As this is an ABI-
16579 changing option, all object code in an executable must be compiled
16580 with the same setting.
16581
16582 -maddress-space-conversion
16583 -mno-address-space-conversion
16584 Allow/disallow treating the "__ea" address space as superset of the
16585 generic address space. This enables explicit type casts between
16586 "__ea" and generic pointer as well as implicit conversions of
16587 generic pointers to "__ea" pointers. The default is to allow
16588 address space pointer conversions.
16589
16590 -mcache-size=cache-size
16591 This option controls the version of libgcc that the compiler links
16592 to an executable and selects a software-managed cache for accessing
16593 variables in the "__ea" address space with a particular cache size.
16594 Possible options for cache-size are 8, 16, 32, 64 and 128. The
16595 default cache size is 64KB.
16596
16597 -matomic-updates
16598 -mno-atomic-updates
16599 This option controls the version of libgcc that the compiler links
16600 to an executable and selects whether atomic updates to the
16601 software-managed cache of PPU-side variables are used. If you use
16602 atomic updates, changes to a PPU variable from SPU code using the
16603 "__ea" named address space qualifier do not interfere with changes
16604 to other PPU variables residing in the same cache line from PPU
16605 code. If you do not use atomic updates, such interference may
16606 occur; however, writing back cache lines is more efficient. The
16607 default behavior is to use atomic updates.
16608
16609 -mdual-nops
16610 -mdual-nops=n
16611 By default, GCC inserts nops to increase dual issue when it expects
16612 it to increase performance. n can be a value from 0 to 10. A
16613 smaller n inserts fewer nops. 10 is the default, 0 is the same as
16614 -mno-dual-nops. Disabled with -Os.
16615
16616 -mhint-max-nops=n
16617 Maximum number of nops to insert for a branch hint. A branch hint
16618 must be at least 8 instructions away from the branch it is
16619 affecting. GCC inserts up to n nops to enforce this, otherwise it
16620 does not generate the branch hint.
16621
16622 -mhint-max-distance=n
16623 The encoding of the branch hint instruction limits the hint to be
16624 within 256 instructions of the branch it is affecting. By default,
16625 GCC makes sure it is within 125.
16626
16627 -msafe-hints
16628 Work around a hardware bug that causes the SPU to stall
16629 indefinitely. By default, GCC inserts the "hbrp" instruction to
16630 make sure this stall won't happen.
16631
16632 Options for System V
16633 These additional options are available on System V Release 4 for
16634 compatibility with other compilers on those systems:
16635
16636 -G Create a shared object. It is recommended that -symbolic or
16637 -shared be used instead.
16638
16639 -Qy Identify the versions of each tool used by the compiler, in a
16640 ".ident" assembler directive in the output.
16641
16642 -Qn Refrain from adding ".ident" directives to the output file (this is
16643 the default).
16644
16645 -YP,dirs
16646 Search the directories dirs, and no others, for libraries specified
16647 with -l.
16648
16649 -Ym,dir
16650 Look in the directory dir to find the M4 preprocessor. The
16651 assembler uses this option.
16652
16653 TILE-Gx Options
16654 These -m options are supported on the TILE-Gx:
16655
16656 -mcmodel=small
16657 Generate code for the small model. The distance for direct calls
16658 is limited to 500M in either direction. PC-relative addresses are
16659 32 bits. Absolute addresses support the full address range.
16660
16661 -mcmodel=large
16662 Generate code for the large model. There is no limitation on call
16663 distance, pc-relative addresses, or absolute addresses.
16664
16665 -mcpu=name
16666 Selects the type of CPU to be targeted. Currently the only
16667 supported type is tilegx.
16668
16669 -m32
16670 -m64
16671 Generate code for a 32-bit or 64-bit environment. The 32-bit
16672 environment sets int, long, and pointer to 32 bits. The 64-bit
16673 environment sets int to 32 bits and long and pointer to 64 bits.
16674
16675 TILEPro Options
16676 These -m options are supported on the TILEPro:
16677
16678 -mcpu=name
16679 Selects the type of CPU to be targeted. Currently the only
16680 supported type is tilepro.
16681
16682 -m32
16683 Generate code for a 32-bit environment, which sets int, long, and
16684 pointer to 32 bits. This is the only supported behavior so the
16685 flag is essentially ignored.
16686
16687 V850 Options
16688 These -m options are defined for V850 implementations:
16689
16690 -mlong-calls
16691 -mno-long-calls
16692 Treat all calls as being far away (near). If calls are assumed to
16693 be far away, the compiler always loads the function's address into
16694 a register, and calls indirect through the pointer.
16695
16696 -mno-ep
16697 -mep
16698 Do not optimize (do optimize) basic blocks that use the same index
16699 pointer 4 or more times to copy pointer into the "ep" register, and
16700 use the shorter "sld" and "sst" instructions. The -mep option is
16701 on by default if you optimize.
16702
16703 -mno-prolog-function
16704 -mprolog-function
16705 Do not use (do use) external functions to save and restore
16706 registers at the prologue and epilogue of a function. The external
16707 functions are slower, but use less code space if more than one
16708 function saves the same number of registers. The -mprolog-function
16709 option is on by default if you optimize.
16710
16711 -mspace
16712 Try to make the code as small as possible. At present, this just
16713 turns on the -mep and -mprolog-function options.
16714
16715 -mtda=n
16716 Put static or global variables whose size is n bytes or less into
16717 the tiny data area that register "ep" points to. The tiny data
16718 area can hold up to 256 bytes in total (128 bytes for byte
16719 references).
16720
16721 -msda=n
16722 Put static or global variables whose size is n bytes or less into
16723 the small data area that register "gp" points to. The small data
16724 area can hold up to 64 kilobytes.
16725
16726 -mzda=n
16727 Put static or global variables whose size is n bytes or less into
16728 the first 32 kilobytes of memory.
16729
16730 -mv850
16731 Specify that the target processor is the V850.
16732
16733 -mv850e3v5
16734 Specify that the target processor is the V850E3V5. The
16735 preprocessor constant __v850e3v5__ is defined if this option is
16736 used.
16737
16738 -mv850e2v4
16739 Specify that the target processor is the V850E3V5. This is an
16740 alias for the -mv850e3v5 option.
16741
16742 -mv850e2v3
16743 Specify that the target processor is the V850E2V3. The
16744 preprocessor constant __v850e2v3__ is defined if this option is
16745 used.
16746
16747 -mv850e2
16748 Specify that the target processor is the V850E2. The preprocessor
16749 constant __v850e2__ is defined if this option is used.
16750
16751 -mv850e1
16752 Specify that the target processor is the V850E1. The preprocessor
16753 constants __v850e1__ and __v850e__ are defined if this option is
16754 used.
16755
16756 -mv850es
16757 Specify that the target processor is the V850ES. This is an alias
16758 for the -mv850e1 option.
16759
16760 -mv850e
16761 Specify that the target processor is the V850E. The preprocessor
16762 constant __v850e__ is defined if this option is used.
16763
16764 If neither -mv850 nor -mv850e nor -mv850e1 nor -mv850e2 nor
16765 -mv850e2v3 nor -mv850e3v5 are defined then a default target
16766 processor is chosen and the relevant __v850*__ preprocessor
16767 constant is defined.
16768
16769 The preprocessor constants __v850 and __v851__ are always defined,
16770 regardless of which processor variant is the target.
16771
16772 -mdisable-callt
16773 -mno-disable-callt
16774 This option suppresses generation of the "CALLT" instruction for
16775 the v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the
16776 v850 architecture.
16777
16778 This option is enabled by default when the RH850 ABI is in use (see
16779 -mrh850-abi), and disabled by default when the GCC ABI is in use.
16780 If "CALLT" instructions are being generated then the C preprocessor
16781 symbol "__V850_CALLT__" will be defined.
16782
16783 -mrelax
16784 -mno-relax
16785 Pass on (or do not pass on) the -mrelax command line option to the
16786 assembler.
16787
16788 -mlong-jumps
16789 -mno-long-jumps
16790 Disable (or re-enable) the generation of PC-relative jump
16791 instructions.
16792
16793 -msoft-float
16794 -mhard-float
16795 Disable (or re-enable) the generation of hardware floating point
16796 instructions. This option is only significant when the target
16797 architecture is V850E2V3 or higher. If hardware floating point
16798 instructions are being generated then the C preprocessor symbol
16799 "__FPU_OK__" will be defined, otherwise the symbol "__NO_FPU__"
16800 will be defined.
16801
16802 -mloop
16803 Enables the use of the e3v5 LOOP instruction. The use of this
16804 instruction is not enabled by default when the e3v5 architecture is
16805 selected because its use is still experimental.
16806
16807 -mrh850-abi
16808 -mghs
16809 Enables support for the RH850 version of the V850 ABI. This is the
16810 default. With this version of the ABI the following rules apply:
16811
16812 · Integer sized structures and unions are returned via a memory
16813 pointer rather than a register.
16814
16815 · Large structures and unions (more than 8 bytes in size) are
16816 passed by value.
16817
16818 · Functions are aligned to 16-bit boundaries.
16819
16820 · The -m8byte-align command line option is supported.
16821
16822 · The -mdisable-callt command line option is enabled by default.
16823 The -mno-disable-callt command line option is not supported.
16824
16825 When this version of the ABI is enabled the C preprocessor symbol
16826 "__V850_RH850_ABI__" is defined.
16827
16828 -mgcc-abi
16829 Enables support for the old GCC version of the V850 ABI. With this
16830 version of the ABI the following rules apply:
16831
16832 · Integer sized structures and unions are returned in register
16833 "r10".
16834
16835 · Large structures and unions (more than 8 bytes in size) are
16836 passed by reference.
16837
16838 · Functions are aligned to 32-bit boundaries, unless optimizing
16839 for size.
16840
16841 · The -m8byte-align command line option is not supported.
16842
16843 · The -mdisable-callt command line option is supported but not
16844 enabled by default.
16845
16846 When this version of the ABI is enabled the C preprocessor symbol
16847 "__V850_GCC_ABI__" is defined.
16848
16849 -m8byte-align
16850 -mno-8byte-align
16851 Enables support for "doubles" and "long long" types to be aligned
16852 on 8-byte boundaries. The default is to restrict the alignment of
16853 all objects to at most 4-bytes. When -m8byte-align is in effect
16854 the C preprocessor symbol "__V850_8BYTE_ALIGN__" will be defined.
16855
16856 -mbig-switch
16857 Generate code suitable for big switch tables. Use this option only
16858 if the assembler/linker complain about out of range branches within
16859 a switch table.
16860
16861 -mapp-regs
16862 This option causes r2 and r5 to be used in the code generated by
16863 the compiler. This setting is the default.
16864
16865 -mno-app-regs
16866 This option causes r2 and r5 to be treated as fixed registers.
16867
16868 VAX Options
16869 These -m options are defined for the VAX:
16870
16871 -munix
16872 Do not output certain jump instructions ("aobleq" and so on) that
16873 the Unix assembler for the VAX cannot handle across long ranges.
16874
16875 -mgnu
16876 Do output those jump instructions, on the assumption that the GNU
16877 assembler is being used.
16878
16879 -mg Output code for G-format floating-point numbers instead of
16880 D-format.
16881
16882 VMS Options
16883 These -m options are defined for the VMS implementations:
16884
16885 -mvms-return-codes
16886 Return VMS condition codes from "main". The default is to return
16887 POSIX-style condition (e.g. error) codes.
16888
16889 -mdebug-main=prefix
16890 Flag the first routine whose name starts with prefix as the main
16891 routine for the debugger.
16892
16893 -mmalloc64
16894 Default to 64-bit memory allocation routines.
16895
16896 -mpointer-size=size
16897 Set the default size of pointers. Possible options for size are 32
16898 or short for 32 bit pointers, 64 or long for 64 bit pointers, and
16899 no for supporting only 32 bit pointers. The later option disables
16900 "pragma pointer_size".
16901
16902 VxWorks Options
16903 The options in this section are defined for all VxWorks targets.
16904 Options specific to the target hardware are listed with the other
16905 options for that target.
16906
16907 -mrtp
16908 GCC can generate code for both VxWorks kernels and real time
16909 processes (RTPs). This option switches from the former to the
16910 latter. It also defines the preprocessor macro "__RTP__".
16911
16912 -non-static
16913 Link an RTP executable against shared libraries rather than static
16914 libraries. The options -static and -shared can also be used for
16915 RTPs; -static is the default.
16916
16917 -Bstatic
16918 -Bdynamic
16919 These options are passed down to the linker. They are defined for
16920 compatibility with Diab.
16921
16922 -Xbind-lazy
16923 Enable lazy binding of function calls. This option is equivalent
16924 to -Wl,-z,now and is defined for compatibility with Diab.
16925
16926 -Xbind-now
16927 Disable lazy binding of function calls. This option is the default
16928 and is defined for compatibility with Diab.
16929
16930 x86-64 Options
16931 These are listed under
16932
16933 Xstormy16 Options
16934 These options are defined for Xstormy16:
16935
16936 -msim
16937 Choose startup files and linker script suitable for the simulator.
16938
16939 Xtensa Options
16940 These options are supported for Xtensa targets:
16941
16942 -mconst16
16943 -mno-const16
16944 Enable or disable use of "CONST16" instructions for loading
16945 constant values. The "CONST16" instruction is currently not a
16946 standard option from Tensilica. When enabled, "CONST16"
16947 instructions are always used in place of the standard "L32R"
16948 instructions. The use of "CONST16" is enabled by default only if
16949 the "L32R" instruction is not available.
16950
16951 -mfused-madd
16952 -mno-fused-madd
16953 Enable or disable use of fused multiply/add and multiply/subtract
16954 instructions in the floating-point option. This has no effect if
16955 the floating-point option is not also enabled. Disabling fused
16956 multiply/add and multiply/subtract instructions forces the compiler
16957 to use separate instructions for the multiply and add/subtract
16958 operations. This may be desirable in some cases where strict IEEE
16959 754-compliant results are required: the fused multiply add/subtract
16960 instructions do not round the intermediate result, thereby
16961 producing results with more bits of precision than specified by the
16962 IEEE standard. Disabling fused multiply add/subtract instructions
16963 also ensures that the program output is not sensitive to the
16964 compiler's ability to combine multiply and add/subtract operations.
16965
16966 -mserialize-volatile
16967 -mno-serialize-volatile
16968 When this option is enabled, GCC inserts "MEMW" instructions before
16969 "volatile" memory references to guarantee sequential consistency.
16970 The default is -mserialize-volatile. Use -mno-serialize-volatile
16971 to omit the "MEMW" instructions.
16972
16973 -mforce-no-pic
16974 For targets, like GNU/Linux, where all user-mode Xtensa code must
16975 be position-independent code (PIC), this option disables PIC for
16976 compiling kernel code.
16977
16978 -mtext-section-literals
16979 -mno-text-section-literals
16980 Control the treatment of literal pools. The default is
16981 -mno-text-section-literals, which places literals in a separate
16982 section in the output file. This allows the literal pool to be
16983 placed in a data RAM/ROM, and it also allows the linker to combine
16984 literal pools from separate object files to remove redundant
16985 literals and improve code size. With -mtext-section-literals, the
16986 literals are interspersed in the text section in order to keep them
16987 as close as possible to their references. This may be necessary
16988 for large assembly files.
16989
16990 -mtarget-align
16991 -mno-target-align
16992 When this option is enabled, GCC instructs the assembler to
16993 automatically align instructions to reduce branch penalties at the
16994 expense of some code density. The assembler attempts to widen
16995 density instructions to align branch targets and the instructions
16996 following call instructions. If there are not enough preceding
16997 safe density instructions to align a target, no widening is
16998 performed. The default is -mtarget-align. These options do not
16999 affect the treatment of auto-aligned instructions like "LOOP",
17000 which the assembler always aligns, either by widening density
17001 instructions or by inserting NOP instructions.
17002
17003 -mlongcalls
17004 -mno-longcalls
17005 When this option is enabled, GCC instructs the assembler to
17006 translate direct calls to indirect calls unless it can determine
17007 that the target of a direct call is in the range allowed by the
17008 call instruction. This translation typically occurs for calls to
17009 functions in other source files. Specifically, the assembler
17010 translates a direct "CALL" instruction into an "L32R" followed by a
17011 "CALLX" instruction. The default is -mno-longcalls. This option
17012 should be used in programs where the call target can potentially be
17013 out of range. This option is implemented in the assembler, not the
17014 compiler, so the assembly code generated by GCC still shows direct
17015 call instructions---look at the disassembled object code to see the
17016 actual instructions. Note that the assembler uses an indirect call
17017 for every cross-file call, not just those that really are out of
17018 range.
17019
17020 zSeries Options
17021 These are listed under
17022
17023 Options for Code Generation Conventions
17024 These machine-independent options control the interface conventions
17025 used in code generation.
17026
17027 Most of them have both positive and negative forms; the negative form
17028 of -ffoo is -fno-foo. In the table below, only one of the forms is
17029 listed---the one that is not the default. You can figure out the other
17030 form by either removing no- or adding it.
17031
17032 -fbounds-check
17033 For front ends that support it, generate additional code to check
17034 that indices used to access arrays are within the declared range.
17035 This is currently only supported by the Java and Fortran front
17036 ends, where this option defaults to true and false respectively.
17037
17038 -fstack-reuse=reuse-level
17039 This option controls stack space reuse for user declared local/auto
17040 variables and compiler generated temporaries. reuse_level can be
17041 all, named_vars, or none. all enables stack reuse for all local
17042 variables and temporaries, named_vars enables the reuse only for
17043 user defined local variables with names, and none disables stack
17044 reuse completely. The default value is all. The option is needed
17045 when the program extends the lifetime of a scoped local variable or
17046 a compiler generated temporary beyond the end point defined by the
17047 language. When a lifetime of a variable ends, and if the variable
17048 lives in memory, the optimizing compiler has the freedom to reuse
17049 its stack space with other temporaries or scoped local variables
17050 whose live range does not overlap with it. Legacy code extending
17051 local lifetime will likely to break with the stack reuse
17052 optimization.
17053
17054 For example,
17055
17056 int *p;
17057 {
17058 int local1;
17059
17060 p = &local1;
17061 local1 = 10;
17062 ....
17063 }
17064 {
17065 int local2;
17066 local2 = 20;
17067 ...
17068 }
17069
17070 if (*p == 10) // out of scope use of local1
17071 {
17072
17073 }
17074
17075 Another example:
17076
17077 struct A
17078 {
17079 A(int k) : i(k), j(k) { }
17080 int i;
17081 int j;
17082 };
17083
17084 A *ap;
17085
17086 void foo(const A& ar)
17087 {
17088 ap = &ar;
17089 }
17090
17091 void bar()
17092 {
17093 foo(A(10)); // temp object's lifetime ends when foo returns
17094
17095 {
17096 A a(20);
17097 ....
17098 }
17099 ap->i+= 10; // ap references out of scope temp whose space
17100 // is reused with a. What is the value of ap->i?
17101 }
17102
17103 The lifetime of a compiler generated temporary is well defined by
17104 the C++ standard. When a lifetime of a temporary ends, and if the
17105 temporary lives in memory, the optimizing compiler has the freedom
17106 to reuse its stack space with other temporaries or scoped local
17107 variables whose live range does not overlap with it. However some
17108 of the legacy code relies on the behavior of older compilers in
17109 which temporaries' stack space is not reused, the aggressive stack
17110 reuse can lead to runtime errors. This option is used to control
17111 the temporary stack reuse optimization.
17112
17113 -ftrapv
17114 This option generates traps for signed overflow on addition,
17115 subtraction, multiplication operations.
17116
17117 -fwrapv
17118 This option instructs the compiler to assume that signed arithmetic
17119 overflow of addition, subtraction and multiplication wraps around
17120 using twos-complement representation. This flag enables some
17121 optimizations and disables others. This option is enabled by
17122 default for the Java front end, as required by the Java language
17123 specification.
17124
17125 -fexceptions
17126 Enable exception handling. Generates extra code needed to
17127 propagate exceptions. For some targets, this implies GCC generates
17128 frame unwind information for all functions, which can produce
17129 significant data size overhead, although it does not affect
17130 execution. If you do not specify this option, GCC enables it by
17131 default for languages like C++ that normally require exception
17132 handling, and disables it for languages like C that do not normally
17133 require it. However, you may need to enable this option when
17134 compiling C code that needs to interoperate properly with exception
17135 handlers written in C++. You may also wish to disable this option
17136 if you are compiling older C++ programs that don't use exception
17137 handling.
17138
17139 -fnon-call-exceptions
17140 Generate code that allows trapping instructions to throw
17141 exceptions. Note that this requires platform-specific runtime
17142 support that does not exist everywhere. Moreover, it only allows
17143 trapping instructions to throw exceptions, i.e. memory references
17144 or floating-point instructions. It does not allow exceptions to be
17145 thrown from arbitrary signal handlers such as "SIGALRM".
17146
17147 -fdelete-dead-exceptions
17148 Consider that instructions that may throw exceptions but don't
17149 otherwise contribute to the execution of the program can be
17150 optimized away. This option is enabled by default for the Ada
17151 front end, as permitted by the Ada language specification.
17152 Optimization passes that cause dead exceptions to be removed are
17153 enabled independently at different optimization levels.
17154
17155 -funwind-tables
17156 Similar to -fexceptions, except that it just generates any needed
17157 static data, but does not affect the generated code in any other
17158 way. You normally do not need to enable this option; instead, a
17159 language processor that needs this handling enables it on your
17160 behalf.
17161
17162 -fasynchronous-unwind-tables
17163 Generate unwind table in DWARF 2 format, if supported by target
17164 machine. The table is exact at each instruction boundary, so it
17165 can be used for stack unwinding from asynchronous events (such as
17166 debugger or garbage collector).
17167
17168 -fno-gnu-unique
17169 On systems with recent GNU assembler and C library, the C++
17170 compiler uses the "STB_GNU_UNIQUE" binding to make sure that
17171 definitions of template static data members and static local
17172 variables in inline functions are unique even in the presence of
17173 "RTLD_LOCAL"; this is necessary to avoid problems with a library
17174 used by two different "RTLD_LOCAL" plugins depending on a
17175 definition in one of them and therefore disagreeing with the other
17176 one about the binding of the symbol. But this causes "dlclose" to
17177 be ignored for affected DSOs; if your program relies on
17178 reinitialization of a DSO via "dlclose" and "dlopen", you can use
17179 -fno-gnu-unique.
17180
17181 -fpcc-struct-return
17182 Return "short" "struct" and "union" values in memory like longer
17183 ones, rather than in registers. This convention is less efficient,
17184 but it has the advantage of allowing intercallability between GCC-
17185 compiled files and files compiled with other compilers,
17186 particularly the Portable C Compiler (pcc).
17187
17188 The precise convention for returning structures in memory depends
17189 on the target configuration macros.
17190
17191 Short structures and unions are those whose size and alignment
17192 match that of some integer type.
17193
17194 Warning: code compiled with the -fpcc-struct-return switch is not
17195 binary compatible with code compiled with the -freg-struct-return
17196 switch. Use it to conform to a non-default application binary
17197 interface.
17198
17199 -freg-struct-return
17200 Return "struct" and "union" values in registers when possible.
17201 This is more efficient for small structures than
17202 -fpcc-struct-return.
17203
17204 If you specify neither -fpcc-struct-return nor -freg-struct-return,
17205 GCC defaults to whichever convention is standard for the target.
17206 If there is no standard convention, GCC defaults to
17207 -fpcc-struct-return, except on targets where GCC is the principal
17208 compiler. In those cases, we can choose the standard, and we chose
17209 the more efficient register return alternative.
17210
17211 Warning: code compiled with the -freg-struct-return switch is not
17212 binary compatible with code compiled with the -fpcc-struct-return
17213 switch. Use it to conform to a non-default application binary
17214 interface.
17215
17216 -fshort-enums
17217 Allocate to an "enum" type only as many bytes as it needs for the
17218 declared range of possible values. Specifically, the "enum" type
17219 is equivalent to the smallest integer type that has enough room.
17220
17221 Warning: the -fshort-enums switch causes GCC to generate code that
17222 is not binary compatible with code generated without that switch.
17223 Use it to conform to a non-default application binary interface.
17224
17225 -fshort-double
17226 Use the same size for "double" as for "float".
17227
17228 Warning: the -fshort-double switch causes GCC to generate code that
17229 is not binary compatible with code generated without that switch.
17230 Use it to conform to a non-default application binary interface.
17231
17232 -fshort-wchar
17233 Override the underlying type for wchar_t to be short unsigned int
17234 instead of the default for the target. This option is useful for
17235 building programs to run under WINE.
17236
17237 Warning: the -fshort-wchar switch causes GCC to generate code that
17238 is not binary compatible with code generated without that switch.
17239 Use it to conform to a non-default application binary interface.
17240
17241 -fno-common
17242 In C code, controls the placement of uninitialized global
17243 variables. Unix C compilers have traditionally permitted multiple
17244 definitions of such variables in different compilation units by
17245 placing the variables in a common block. This is the behavior
17246 specified by -fcommon, and is the default for GCC on most targets.
17247 On the other hand, this behavior is not required by ISO C, and on
17248 some targets may carry a speed or code size penalty on variable
17249 references. The -fno-common option specifies that the compiler
17250 should place uninitialized global variables in the data section of
17251 the object file, rather than generating them as common blocks.
17252 This has the effect that if the same variable is declared (without
17253 "extern") in two different compilations, you get a multiple-
17254 definition error when you link them. In this case, you must
17255 compile with -fcommon instead. Compiling with -fno-common is
17256 useful on targets for which it provides better performance, or if
17257 you wish to verify that the program will work on other systems that
17258 always treat uninitialized variable declarations this way.
17259
17260 -fno-ident
17261 Ignore the #ident directive.
17262
17263 -finhibit-size-directive
17264 Don't output a ".size" assembler directive, or anything else that
17265 would cause trouble if the function is split in the middle, and the
17266 two halves are placed at locations far apart in memory. This
17267 option is used when compiling crtstuff.c; you should not need to
17268 use it for anything else.
17269
17270 -fverbose-asm
17271 Put extra commentary information in the generated assembly code to
17272 make it more readable. This option is generally only of use to
17273 those who actually need to read the generated assembly code
17274 (perhaps while debugging the compiler itself).
17275
17276 -fno-verbose-asm, the default, causes the extra information to be
17277 omitted and is useful when comparing two assembler files.
17278
17279 -frecord-gcc-switches
17280 This switch causes the command line used to invoke the compiler to
17281 be recorded into the object file that is being created. This
17282 switch is only implemented on some targets and the exact format of
17283 the recording is target and binary file format dependent, but it
17284 usually takes the form of a section containing ASCII text. This
17285 switch is related to the -fverbose-asm switch, but that switch only
17286 records information in the assembler output file as comments, so it
17287 never reaches the object file. See also -grecord-gcc-switches for
17288 another way of storing compiler options into the object file.
17289
17290 -fpic
17291 Generate position-independent code (PIC) suitable for use in a
17292 shared library, if supported for the target machine. Such code
17293 accesses all constant addresses through a global offset table
17294 (GOT). The dynamic loader resolves the GOT entries when the
17295 program starts (the dynamic loader is not part of GCC; it is part
17296 of the operating system). If the GOT size for the linked
17297 executable exceeds a machine-specific maximum size, you get an
17298 error message from the linker indicating that -fpic does not work;
17299 in that case, recompile with -fPIC instead. (These maximums are 8k
17300 on the SPARC and 32k on the m68k and RS/6000. The 386 has no such
17301 limit.)
17302
17303 Position-independent code requires special support, and therefore
17304 works only on certain machines. For the 386, GCC supports PIC for
17305 System V but not for the Sun 386i. Code generated for the IBM
17306 RS/6000 is always position-independent.
17307
17308 When this flag is set, the macros "__pic__" and "__PIC__" are
17309 defined to 1.
17310
17311 -fPIC
17312 If supported for the target machine, emit position-independent
17313 code, suitable for dynamic linking and avoiding any limit on the
17314 size of the global offset table. This option makes a difference on
17315 the m68k, PowerPC and SPARC.
17316
17317 Position-independent code requires special support, and therefore
17318 works only on certain machines.
17319
17320 When this flag is set, the macros "__pic__" and "__PIC__" are
17321 defined to 2.
17322
17323 -fpie
17324 -fPIE
17325 These options are similar to -fpic and -fPIC, but generated
17326 position independent code can be only linked into executables.
17327 Usually these options are used when -pie GCC option is used during
17328 linking.
17329
17330 -fpie and -fPIE both define the macros "__pie__" and "__PIE__".
17331 The macros have the value 1 for -fpie and 2 for -fPIE.
17332
17333 -fno-jump-tables
17334 Do not use jump tables for switch statements even where it would be
17335 more efficient than other code generation strategies. This option
17336 is of use in conjunction with -fpic or -fPIC for building code that
17337 forms part of a dynamic linker and cannot reference the address of
17338 a jump table. On some targets, jump tables do not require a GOT
17339 and this option is not needed.
17340
17341 -ffixed-reg
17342 Treat the register named reg as a fixed register; generated code
17343 should never refer to it (except perhaps as a stack pointer, frame
17344 pointer or in some other fixed role).
17345
17346 reg must be the name of a register. The register names accepted
17347 are machine-specific and are defined in the "REGISTER_NAMES" macro
17348 in the machine description macro file.
17349
17350 This flag does not have a negative form, because it specifies a
17351 three-way choice.
17352
17353 -fcall-used-reg
17354 Treat the register named reg as an allocable register that is
17355 clobbered by function calls. It may be allocated for temporaries
17356 or variables that do not live across a call. Functions compiled
17357 this way do not save and restore the register reg.
17358
17359 It is an error to use this flag with the frame pointer or stack
17360 pointer. Use of this flag for other registers that have fixed
17361 pervasive roles in the machine's execution model produces
17362 disastrous results.
17363
17364 This flag does not have a negative form, because it specifies a
17365 three-way choice.
17366
17367 -fcall-saved-reg
17368 Treat the register named reg as an allocable register saved by
17369 functions. It may be allocated even for temporaries or variables
17370 that live across a call. Functions compiled this way save and
17371 restore the register reg if they use it.
17372
17373 It is an error to use this flag with the frame pointer or stack
17374 pointer. Use of this flag for other registers that have fixed
17375 pervasive roles in the machine's execution model produces
17376 disastrous results.
17377
17378 A different sort of disaster results from the use of this flag for
17379 a register in which function values may be returned.
17380
17381 This flag does not have a negative form, because it specifies a
17382 three-way choice.
17383
17384 -fpack-struct[=n]
17385 Without a value specified, pack all structure members together
17386 without holes. When a value is specified (which must be a small
17387 power of two), pack structure members according to this value,
17388 representing the maximum alignment (that is, objects with default
17389 alignment requirements larger than this are output potentially
17390 unaligned at the next fitting location.
17391
17392 Warning: the -fpack-struct switch causes GCC to generate code that
17393 is not binary compatible with code generated without that switch.
17394 Additionally, it makes the code suboptimal. Use it to conform to a
17395 non-default application binary interface.
17396
17397 -finstrument-functions
17398 Generate instrumentation calls for entry and exit to functions.
17399 Just after function entry and just before function exit, the
17400 following profiling functions are called with the address of the
17401 current function and its call site. (On some platforms,
17402 "__builtin_return_address" does not work beyond the current
17403 function, so the call site information may not be available to the
17404 profiling functions otherwise.)
17405
17406 void __cyg_profile_func_enter (void *this_fn,
17407 void *call_site);
17408 void __cyg_profile_func_exit (void *this_fn,
17409 void *call_site);
17410
17411 The first argument is the address of the start of the current
17412 function, which may be looked up exactly in the symbol table.
17413
17414 This instrumentation is also done for functions expanded inline in
17415 other functions. The profiling calls indicate where, conceptually,
17416 the inline function is entered and exited. This means that
17417 addressable versions of such functions must be available. If all
17418 your uses of a function are expanded inline, this may mean an
17419 additional expansion of code size. If you use extern inline in
17420 your C code, an addressable version of such functions must be
17421 provided. (This is normally the case anyway, but if you get lucky
17422 and the optimizer always expands the functions inline, you might
17423 have gotten away without providing static copies.)
17424
17425 A function may be given the attribute "no_instrument_function", in
17426 which case this instrumentation is not done. This can be used, for
17427 example, for the profiling functions listed above, high-priority
17428 interrupt routines, and any functions from which the profiling
17429 functions cannot safely be called (perhaps signal handlers, if the
17430 profiling routines generate output or allocate memory).
17431
17432 -finstrument-functions-exclude-file-list=file,file,...
17433 Set the list of functions that are excluded from instrumentation
17434 (see the description of "-finstrument-functions"). If the file
17435 that contains a function definition matches with one of file, then
17436 that function is not instrumented. The match is done on
17437 substrings: if the file parameter is a substring of the file name,
17438 it is considered to be a match.
17439
17440 For example:
17441
17442 -finstrument-functions-exclude-file-list=/bits/stl,include/sys
17443
17444 excludes any inline function defined in files whose pathnames
17445 contain "/bits/stl" or "include/sys".
17446
17447 If, for some reason, you want to include letter ',' in one of sym,
17448 write ','. For example,
17449 "-finstrument-functions-exclude-file-list=',,tmp'" (note the single
17450 quote surrounding the option).
17451
17452 -finstrument-functions-exclude-function-list=sym,sym,...
17453 This is similar to "-finstrument-functions-exclude-file-list", but
17454 this option sets the list of function names to be excluded from
17455 instrumentation. The function name to be matched is its user-
17456 visible name, such as "vector<int> blah(const vector<int> &)", not
17457 the internal mangled name (e.g., "_Z4blahRSt6vectorIiSaIiEE"). The
17458 match is done on substrings: if the sym parameter is a substring of
17459 the function name, it is considered to be a match. For C99 and C++
17460 extended identifiers, the function name must be given in UTF-8, not
17461 using universal character names.
17462
17463 -fstack-check
17464 Generate code to verify that you do not go beyond the boundary of
17465 the stack. You should specify this flag if you are running in an
17466 environment with multiple threads, but you only rarely need to
17467 specify it in a single-threaded environment since stack overflow is
17468 automatically detected on nearly all systems if there is only one
17469 stack.
17470
17471 Note that this switch does not actually cause checking to be done;
17472 the operating system or the language runtime must do that. The
17473 switch causes generation of code to ensure that they see the stack
17474 being extended.
17475
17476 You can additionally specify a string parameter: "no" means no
17477 checking, "generic" means force the use of old-style checking,
17478 "specific" means use the best checking method and is equivalent to
17479 bare -fstack-check.
17480
17481 Old-style checking is a generic mechanism that requires no specific
17482 target support in the compiler but comes with the following
17483 drawbacks:
17484
17485 1. Modified allocation strategy for large objects: they are always
17486 allocated dynamically if their size exceeds a fixed threshold.
17487 Note this may change the semantics of some code.
17488
17489 2. Fixed limit on the size of the static frame of functions: when
17490 it is topped by a particular function, stack checking is not
17491 reliable and a warning is issued by the compiler.
17492
17493 3. Inefficiency: because of both the modified allocation strategy
17494 and the generic implementation, code performance is hampered.
17495
17496 Note that old-style stack checking is also the fallback method for
17497 "specific" if no target support has been added in the compiler.
17498
17499 -fstack-check= is designed for Ada's needs to detect infinite
17500 recursion and stack overflows. specific is an excellent choice
17501 when compiling Ada code. It is not generally sufficient to protect
17502 against stack-clash attacks. To protect against those you want
17503 -fstack-clash-protection.
17504
17505 -fstack-clash-protection
17506 Generate code to prevent stack clash style attacks. When this
17507 option is enabled, the compiler will only allocate one page of
17508 stack space at a time and each page is accessed immediately after
17509 allocation. Thus, it prevents allocations from jumping over any
17510 stack guard page provided by the operating system.
17511
17512 Most targets do not fully support stack clash protection. However,
17513 on those targets -fstack-clash-protection will protect dynamic
17514 stack allocations. -fstack-clash-protection may also provide
17515 limited protection for static stack allocations if the target
17516 supports -fstack-check=specific.
17517
17518 -fstack-limit-register=reg
17519 -fstack-limit-symbol=sym
17520 -fno-stack-limit
17521 Generate code to ensure that the stack does not grow beyond a
17522 certain value, either the value of a register or the address of a
17523 symbol. If a larger stack is required, a signal is raised at run
17524 time. For most targets, the signal is raised before the stack
17525 overruns the boundary, so it is possible to catch the signal
17526 without taking special precautions.
17527
17528 For instance, if the stack starts at absolute address 0x80000000
17529 and grows downwards, you can use the flags
17530 -fstack-limit-symbol=__stack_limit and
17531 -Wl,--defsym,__stack_limit=0x7ffe0000 to enforce a stack limit of
17532 128KB. Note that this may only work with the GNU linker.
17533
17534 -fsplit-stack
17535 Generate code to automatically split the stack before it overflows.
17536 The resulting program has a discontiguous stack which can only
17537 overflow if the program is unable to allocate any more memory.
17538 This is most useful when running threaded programs, as it is no
17539 longer necessary to calculate a good stack size to use for each
17540 thread. This is currently only implemented for the i386 and x86_64
17541 back ends running GNU/Linux.
17542
17543 When code compiled with -fsplit-stack calls code compiled without
17544 -fsplit-stack, there may not be much stack space available for the
17545 latter code to run. If compiling all code, including library code,
17546 with -fsplit-stack is not an option, then the linker can fix up
17547 these calls so that the code compiled without -fsplit-stack always
17548 has a large stack. Support for this is implemented in the gold
17549 linker in GNU binutils release 2.21 and later.
17550
17551 -fleading-underscore
17552 This option and its counterpart, -fno-leading-underscore, forcibly
17553 change the way C symbols are represented in the object file. One
17554 use is to help link with legacy assembly code.
17555
17556 Warning: the -fleading-underscore switch causes GCC to generate
17557 code that is not binary compatible with code generated without that
17558 switch. Use it to conform to a non-default application binary
17559 interface. Not all targets provide complete support for this
17560 switch.
17561
17562 -ftls-model=model
17563 Alter the thread-local storage model to be used. The model
17564 argument should be one of "global-dynamic", "local-dynamic",
17565 "initial-exec" or "local-exec".
17566
17567 The default without -fpic is "initial-exec"; with -fpic the default
17568 is "global-dynamic".
17569
17570 -fvisibility=default|internal|hidden|protected
17571 Set the default ELF image symbol visibility to the specified
17572 option---all symbols are marked with this unless overridden within
17573 the code. Using this feature can very substantially improve
17574 linking and load times of shared object libraries, produce more
17575 optimized code, provide near-perfect API export and prevent symbol
17576 clashes. It is strongly recommended that you use this in any
17577 shared objects you distribute.
17578
17579 Despite the nomenclature, "default" always means public; i.e.,
17580 available to be linked against from outside the shared object.
17581 "protected" and "internal" are pretty useless in real-world usage
17582 so the only other commonly used option is "hidden". The default if
17583 -fvisibility isn't specified is "default", i.e., make every symbol
17584 public---this causes the same behavior as previous versions of GCC.
17585
17586 A good explanation of the benefits offered by ensuring ELF symbols
17587 have the correct visibility is given by "How To Write Shared
17588 Libraries" by Ulrich Drepper (which can be found at
17589 <http://people.redhat.com/~drepper/>)---however a superior solution
17590 made possible by this option to marking things hidden when the
17591 default is public is to make the default hidden and mark things
17592 public. This is the norm with DLLs on Windows and with
17593 -fvisibility=hidden and "__attribute__ ((visibility("default")))"
17594 instead of "__declspec(dllexport)" you get almost identical
17595 semantics with identical syntax. This is a great boon to those
17596 working with cross-platform projects.
17597
17598 For those adding visibility support to existing code, you may find
17599 #pragma GCC visibility of use. This works by you enclosing the
17600 declarations you wish to set visibility for with (for example)
17601 #pragma GCC visibility push(hidden) and #pragma GCC visibility pop.
17602 Bear in mind that symbol visibility should be viewed as part of the
17603 API interface contract and thus all new code should always specify
17604 visibility when it is not the default; i.e., declarations only for
17605 use within the local DSO should always be marked explicitly as
17606 hidden as so to avoid PLT indirection overheads---making this
17607 abundantly clear also aids readability and self-documentation of
17608 the code. Note that due to ISO C++ specification requirements,
17609 "operator new" and "operator delete" must always be of default
17610 visibility.
17611
17612 Be aware that headers from outside your project, in particular
17613 system headers and headers from any other library you use, may not
17614 be expecting to be compiled with visibility other than the default.
17615 You may need to explicitly say #pragma GCC visibility push(default)
17616 before including any such headers.
17617
17618 extern declarations are not affected by -fvisibility, so a lot of
17619 code can be recompiled with -fvisibility=hidden with no
17620 modifications. However, this means that calls to "extern"
17621 functions with no explicit visibility use the PLT, so it is more
17622 effective to use "__attribute ((visibility))" and/or "#pragma GCC
17623 visibility" to tell the compiler which "extern" declarations should
17624 be treated as hidden.
17625
17626 Note that -fvisibility does affect C++ vague linkage entities. This
17627 means that, for instance, an exception class that is be thrown
17628 between DSOs must be explicitly marked with default visibility so
17629 that the type_info nodes are unified between the DSOs.
17630
17631 An overview of these techniques, their benefits and how to use them
17632 is at <http://gcc.gnu.org/wiki/Visibility>.
17633
17634 -fstrict-volatile-bitfields
17635 This option should be used if accesses to volatile bit-fields (or
17636 other structure fields, although the compiler usually honors those
17637 types anyway) should use a single access of the width of the
17638 field's type, aligned to a natural alignment if possible. For
17639 example, targets with memory-mapped peripheral registers might
17640 require all such accesses to be 16 bits wide; with this flag you
17641 can declare all peripheral bit-fields as "unsigned short" (assuming
17642 short is 16 bits on these targets) to force GCC to use 16-bit
17643 accesses instead of, perhaps, a more efficient 32-bit access.
17644
17645 If this option is disabled, the compiler uses the most efficient
17646 instruction. In the previous example, that might be a 32-bit load
17647 instruction, even though that accesses bytes that do not contain
17648 any portion of the bit-field, or memory-mapped registers unrelated
17649 to the one being updated.
17650
17651 If the target requires strict alignment, and honoring the field
17652 type would require violating this alignment, a warning is issued.
17653 If the field has "packed" attribute, the access is done without
17654 honoring the field type. If the field doesn't have "packed"
17655 attribute, the access is done honoring the field type. In both
17656 cases, GCC assumes that the user knows something about the target
17657 hardware that it is unaware of.
17658
17659 The default value of this option is determined by the application
17660 binary interface for the target processor.
17661
17662 -fsync-libcalls
17663 This option controls whether any out-of-line instance of the
17664 "__sync" family of functions may be used to implement the C++11
17665 "__atomic" family of functions.
17666
17667 The default value of this option is enabled, thus the only useful
17668 form of the option is -fno-sync-libcalls. This option is used in
17669 the implementation of the libatomic runtime library.
17670
17672 This section describes several environment variables that affect how
17673 GCC operates. Some of them work by specifying directories or prefixes
17674 to use when searching for various kinds of files. Some are used to
17675 specify other aspects of the compilation environment.
17676
17677 Note that you can also specify places to search using options such as
17678 -B, -I and -L. These take precedence over places specified using
17679 environment variables, which in turn take precedence over those
17680 specified by the configuration of GCC.
17681
17682 LANG
17683 LC_CTYPE
17684 LC_MESSAGES
17685 LC_ALL
17686 These environment variables control the way that GCC uses
17687 localization information which allows GCC to work with different
17688 national conventions. GCC inspects the locale categories LC_CTYPE
17689 and LC_MESSAGES if it has been configured to do so. These locale
17690 categories can be set to any value supported by your installation.
17691 A typical value is en_GB.UTF-8 for English in the United Kingdom
17692 encoded in UTF-8.
17693
17694 The LC_CTYPE environment variable specifies character
17695 classification. GCC uses it to determine the character boundaries
17696 in a string; this is needed for some multibyte encodings that
17697 contain quote and escape characters that are otherwise interpreted
17698 as a string end or escape.
17699
17700 The LC_MESSAGES environment variable specifies the language to use
17701 in diagnostic messages.
17702
17703 If the LC_ALL environment variable is set, it overrides the value
17704 of LC_CTYPE and LC_MESSAGES; otherwise, LC_CTYPE and LC_MESSAGES
17705 default to the value of the LANG environment variable. If none of
17706 these variables are set, GCC defaults to traditional C English
17707 behavior.
17708
17709 TMPDIR
17710 If TMPDIR is set, it specifies the directory to use for temporary
17711 files. GCC uses temporary files to hold the output of one stage of
17712 compilation which is to be used as input to the next stage: for
17713 example, the output of the preprocessor, which is the input to the
17714 compiler proper.
17715
17716 GCC_COMPARE_DEBUG
17717 Setting GCC_COMPARE_DEBUG is nearly equivalent to passing
17718 -fcompare-debug to the compiler driver. See the documentation of
17719 this option for more details.
17720
17721 GCC_EXEC_PREFIX
17722 If GCC_EXEC_PREFIX is set, it specifies a prefix to use in the
17723 names of the subprograms executed by the compiler. No slash is
17724 added when this prefix is combined with the name of a subprogram,
17725 but you can specify a prefix that ends with a slash if you wish.
17726
17727 If GCC_EXEC_PREFIX is not set, GCC attempts to figure out an
17728 appropriate prefix to use based on the pathname it is invoked with.
17729
17730 If GCC cannot find the subprogram using the specified prefix, it
17731 tries looking in the usual places for the subprogram.
17732
17733 The default value of GCC_EXEC_PREFIX is prefix/lib/gcc/ where
17734 prefix is the prefix to the installed compiler. In many cases
17735 prefix is the value of "prefix" when you ran the configure script.
17736
17737 Other prefixes specified with -B take precedence over this prefix.
17738
17739 This prefix is also used for finding files such as crt0.o that are
17740 used for linking.
17741
17742 In addition, the prefix is used in an unusual way in finding the
17743 directories to search for header files. For each of the standard
17744 directories whose name normally begins with /usr/local/lib/gcc
17745 (more precisely, with the value of GCC_INCLUDE_DIR), GCC tries
17746 replacing that beginning with the specified prefix to produce an
17747 alternate directory name. Thus, with -Bfoo/, GCC searches foo/bar
17748 just before it searches the standard directory /usr/local/lib/bar.
17749 If a standard directory begins with the configured prefix then the
17750 value of prefix is replaced by GCC_EXEC_PREFIX when looking for
17751 header files.
17752
17753 COMPILER_PATH
17754 The value of COMPILER_PATH is a colon-separated list of
17755 directories, much like PATH. GCC tries the directories thus
17756 specified when searching for subprograms, if it can't find the
17757 subprograms using GCC_EXEC_PREFIX.
17758
17759 LIBRARY_PATH
17760 The value of LIBRARY_PATH is a colon-separated list of directories,
17761 much like PATH. When configured as a native compiler, GCC tries
17762 the directories thus specified when searching for special linker
17763 files, if it can't find them using GCC_EXEC_PREFIX. Linking using
17764 GCC also uses these directories when searching for ordinary
17765 libraries for the -l option (but directories specified with -L come
17766 first).
17767
17768 LANG
17769 This variable is used to pass locale information to the compiler.
17770 One way in which this information is used is to determine the
17771 character set to be used when character literals, string literals
17772 and comments are parsed in C and C++. When the compiler is
17773 configured to allow multibyte characters, the following values for
17774 LANG are recognized:
17775
17776 C-JIS
17777 Recognize JIS characters.
17778
17779 C-SJIS
17780 Recognize SJIS characters.
17781
17782 C-EUCJP
17783 Recognize EUCJP characters.
17784
17785 If LANG is not defined, or if it has some other value, then the
17786 compiler uses "mblen" and "mbtowc" as defined by the default locale
17787 to recognize and translate multibyte characters.
17788
17789 Some additional environment variables affect the behavior of the
17790 preprocessor.
17791
17792 CPATH
17793 C_INCLUDE_PATH
17794 CPLUS_INCLUDE_PATH
17795 OBJC_INCLUDE_PATH
17796 Each variable's value is a list of directories separated by a
17797 special character, much like PATH, in which to look for header
17798 files. The special character, "PATH_SEPARATOR", is target-
17799 dependent and determined at GCC build time. For Microsoft Windows-
17800 based targets it is a semicolon, and for almost all other targets
17801 it is a colon.
17802
17803 CPATH specifies a list of directories to be searched as if
17804 specified with -I, but after any paths given with -I options on the
17805 command line. This environment variable is used regardless of
17806 which language is being preprocessed.
17807
17808 The remaining environment variables apply only when preprocessing
17809 the particular language indicated. Each specifies a list of
17810 directories to be searched as if specified with -isystem, but after
17811 any paths given with -isystem options on the command line.
17812
17813 In all these variables, an empty element instructs the compiler to
17814 search its current working directory. Empty elements can appear at
17815 the beginning or end of a path. For instance, if the value of
17816 CPATH is ":/special/include", that has the same effect as
17817 -I. -I/special/include.
17818
17819 DEPENDENCIES_OUTPUT
17820 If this variable is set, its value specifies how to output
17821 dependencies for Make based on the non-system header files
17822 processed by the compiler. System header files are ignored in the
17823 dependency output.
17824
17825 The value of DEPENDENCIES_OUTPUT can be just a file name, in which
17826 case the Make rules are written to that file, guessing the target
17827 name from the source file name. Or the value can have the form
17828 file target, in which case the rules are written to file file using
17829 target as the target name.
17830
17831 In other words, this environment variable is equivalent to
17832 combining the options -MM and -MF, with an optional -MT switch too.
17833
17834 SUNPRO_DEPENDENCIES
17835 This variable is the same as DEPENDENCIES_OUTPUT (see above),
17836 except that system header files are not ignored, so it implies -M
17837 rather than -MM. However, the dependence on the main input file is
17838 omitted.
17839
17841 For instructions on reporting bugs, see
17842 <http://bugzilla.redhat.com/bugzilla>.
17843
17845 1. On some systems, gcc -shared needs to build supplementary stub code
17846 for constructors to work. On multi-libbed systems, gcc -shared
17847 must select the correct support libraries to link against. Failing
17848 to supply the correct flags may lead to subtle defects. Supplying
17849 them in cases where they are not necessary is innocuous.
17850
17852 gpl(7), gfdl(7), fsf-funding(7), cpp(1), gcov(1), as(1), ld(1), gdb(1),
17853 adb(1), dbx(1), sdb(1) and the Info entries for gcc, cpp, as, ld,
17854 binutils and gdb.
17855
17857 See the Info entry for gcc, or
17858 <http://gcc.gnu.org/onlinedocs/gcc/Contributors.html>, for contributors
17859 to GCC.
17860
17862 Copyright (c) 1988-2015 Free Software Foundation, Inc.
17863
17864 Permission is granted to copy, distribute and/or modify this document
17865 under the terms of the GNU Free Documentation License, Version 1.3 or
17866 any later version published by the Free Software Foundation; with the
17867 Invariant Sections being "GNU General Public License" and "Funding Free
17868 Software", the Front-Cover texts being (a) (see below), and with the
17869 Back-Cover Texts being (b) (see below). A copy of the license is
17870 included in the gfdl(7) man page.
17871
17872 (a) The FSF's Front-Cover Text is:
17873
17874 A GNU Manual
17875
17876 (b) The FSF's Back-Cover Text is:
17877
17878 You have freedom to copy and modify this GNU Manual, like GNU
17879 software. Copies published by the Free Software Foundation raise
17880 funds for GNU development.
17881
17882
17883
17884gcc-4.8.5 2015-06-23 GCC(1)