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 or more stages of processing. Some
28 options control the preprocessor and others the compiler itself. Yet
29 other 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 usual way to run GCC is to run the executable called gcc, or
39 machine-gcc when cross-compiling, or machine-gcc-version to run a
40 specific version of GCC. When you compile C++ programs, you should
41 invoke GCC as g++ instead.
42
43 The gcc program accepts options and file names as operands. Many
44 options have multi-letter names; therefore multiple single-letter
45 options may not be grouped: -dv is very different from -d -v.
46
47 You can mix options and other arguments. For the most part, the order
48 you use doesn't matter. Order does matter when you use several options
49 of the same kind; for example, if you specify -L more than once, the
50 directories are searched in the order specified. Also, the placement
51 of the -l option is significant.
52
53 Many options have long names starting with -f or with -W---for example,
54 -fmove-loop-invariants, -Wformat and so on. Most of these have both
55 positive and negative forms; the negative form of -ffoo is -fno-foo.
56 This manual documents only one of these two forms, whichever one is not
57 the default.
58
60 Option Summary
61 Here is a summary of all the options, grouped by type. Explanations
62 are in the following sections.
63
64 Overall Options
65 -c -S -E -o file -x language -v -### --help[=class[,...]]
66 --target-help --version -pass-exit-codes -pipe -specs=file
67 -wrapper @file -ffile-prefix-map=old=new -fplugin=file
68 -fplugin-arg-name=arg -fdump-ada-spec[-slim]
69 -fada-spec-parent=unit -fdump-go-spec=file
70
71 C Language Options
72 -ansi -std=standard -fgnu89-inline
73 -fpermitted-flt-eval-methods=standard -aux-info filename
74 -fallow-parameterless-variadic-functions -fno-asm -fno-builtin
75 -fno-builtin-function -fgimple -fhosted -ffreestanding -fopenacc
76 -fopenmp -fopenmp-simd -fms-extensions -fplan9-extensions
77 -fsso-struct=endianness -fallow-single-precision -fcond-mismatch
78 -flax-vector-conversions -fsigned-bitfields -fsigned-char
79 -funsigned-bitfields -funsigned-char
80
81 C++ Language Options
82 -fabi-version=n -fno-access-control -faligned-new=n
83 -fargs-in-order=n -fcheck-new -fconstexpr-depth=n
84 -fconstexpr-loop-limit=n -ffriend-injection -fno-elide-constructors
85 -fno-enforce-eh-specs -ffor-scope -fno-for-scope
86 -fno-gnu-keywords -fno-implicit-templates
87 -fno-implicit-inline-templates -fno-implement-inlines
88 -fms-extensions -fnew-inheriting-ctors -fnew-ttp-matching
89 -fno-nonansi-builtins -fnothrow-opt -fno-operator-names
90 -fno-optional-diags -fpermissive -fno-pretty-templates -frepo
91 -fno-rtti -fsized-deallocation -ftemplate-backtrace-limit=n
92 -ftemplate-depth=n -fno-threadsafe-statics -fuse-cxa-atexit
93 -fno-weak -nostdinc++ -fvisibility-inlines-hidden
94 -fvisibility-ms-compat -fext-numeric-literals -Wabi=n -Wabi-tag
95 -Wconversion-null -Wctor-dtor-privacy -Wdelete-non-virtual-dtor
96 -Wliteral-suffix -Wmultiple-inheritance -Wnamespaces -Wnarrowing
97 -Wnoexcept -Wnoexcept-type -Wclass-memaccess -Wnon-virtual-dtor
98 -Wreorder -Wregister -Weffc++ -Wstrict-null-sentinel -Wtemplates
99 -Wno-non-template-friend -Wold-style-cast -Woverloaded-virtual
100 -Wno-pmf-conversions -Wsign-promo -Wvirtual-inheritance
101
102 Objective-C and Objective-C++ Language Options
103 -fconstant-string-class=class-name -fgnu-runtime -fnext-runtime
104 -fno-nil-receivers -fobjc-abi-version=n -fobjc-call-cxx-cdtors
105 -fobjc-direct-dispatch -fobjc-exceptions -fobjc-gc -fobjc-nilcheck
106 -fobjc-std=objc1 -fno-local-ivars
107 -fivar-visibility=[public|protected|private|package]
108 -freplace-objc-classes -fzero-link -gen-decls -Wassign-intercept
109 -Wno-protocol -Wselector -Wstrict-selector-match
110 -Wundeclared-selector
111
112 Diagnostic Message Formatting Options
113 -fmessage-length=n -fdiagnostics-show-location=[once|every-line]
114 -fdiagnostics-color=[auto|never|always]
115 -fno-diagnostics-show-option -fno-diagnostics-show-caret
116 -fdiagnostics-parseable-fixits -fdiagnostics-generate-patch
117 -fdiagnostics-show-template-tree -fno-elide-type -fno-show-column
118
119 Warning Options
120 -fsyntax-only -fmax-errors=n -Wpedantic -pedantic-errors -w
121 -Wextra -Wall -Waddress -Waggregate-return -Waligned-new
122 -Walloc-zero -Walloc-size-larger-than=n -Walloca
123 -Walloca-larger-than=n -Wno-aggressive-loop-optimizations
124 -Warray-bounds -Warray-bounds=n -Wno-attributes -Wbool-compare
125 -Wbool-operation -Wno-builtin-declaration-mismatch
126 -Wno-builtin-macro-redefined -Wc90-c99-compat -Wc99-c11-compat
127 -Wc++-compat -Wc++11-compat -Wc++14-compat -Wcast-align
128 -Wcast-align=strict -Wcast-function-type -Wcast-qual
129 -Wchar-subscripts -Wchkp -Wcatch-value -Wcatch-value=n
130 -Wclobbered -Wcomment -Wconditionally-supported -Wconversion
131 -Wcoverage-mismatch -Wno-cpp -Wdangling-else -Wdate-time
132 -Wdelete-incomplete -Wno-deprecated -Wno-deprecated-declarations
133 -Wno-designated-init -Wdisabled-optimization
134 -Wno-discarded-qualifiers -Wno-discarded-array-qualifiers
135 -Wno-div-by-zero -Wdouble-promotion -Wduplicated-branches
136 -Wduplicated-cond -Wempty-body -Wenum-compare -Wno-endif-labels
137 -Wexpansion-to-defined -Werror -Werror=* -Wextra-semi
138 -Wfatal-errors -Wfloat-equal -Wformat -Wformat=2
139 -Wno-format-contains-nul -Wno-format-extra-args
140 -Wformat-nonliteral -Wformat-overflow=n -Wformat-security
141 -Wformat-signedness -Wformat-truncation=n -Wformat-y2k
142 -Wframe-address -Wframe-larger-than=len -Wno-free-nonheap-object
143 -Wjump-misses-init -Wif-not-aligned -Wignored-qualifiers
144 -Wignored-attributes -Wincompatible-pointer-types -Wimplicit
145 -Wimplicit-fallthrough -Wimplicit-fallthrough=n
146 -Wimplicit-function-declaration -Wimplicit-int -Winit-self
147 -Winline -Wno-int-conversion -Wint-in-bool-context
148 -Wno-int-to-pointer-cast -Winvalid-memory-model
149 -Wno-invalid-offsetof -Winvalid-pch -Wlarger-than=len -Wlogical-op
150 -Wlogical-not-parentheses -Wlong-long -Wmain
151 -Wmaybe-uninitialized -Wmemset-elt-size -Wmemset-transposed-args
152 -Wmisleading-indentation -Wmissing-attributes -Wmissing-braces
153 -Wmissing-field-initializers -Wmissing-include-dirs -Wno-multichar
154 -Wmultistatement-macros -Wnonnull -Wnonnull-compare
155 -Wnormalized=[none|id|nfc|nfkc] -Wnull-dereference -Wodr
156 -Wno-overflow -Wopenmp-simd -Woverride-init-side-effects
157 -Woverlength-strings -Wpacked -Wpacked-bitfield-compat
158 -Wpacked-not-aligned -Wpadded -Wparentheses
159 -Wno-pedantic-ms-format -Wplacement-new -Wplacement-new=n
160 -Wpointer-arith -Wpointer-compare -Wno-pointer-to-int-cast
161 -Wno-pragmas -Wredundant-decls -Wrestrict -Wno-return-local-addr
162 -Wreturn-type -Wsequence-point -Wshadow -Wno-shadow-ivar
163 -Wshadow=global, -Wshadow=local, -Wshadow=compatible-local
164 -Wshift-overflow -Wshift-overflow=n -Wshift-count-negative
165 -Wshift-count-overflow -Wshift-negative-value -Wsign-compare
166 -Wsign-conversion -Wfloat-conversion -Wno-scalar-storage-order
167 -Wsizeof-pointer-div -Wsizeof-pointer-memaccess
168 -Wsizeof-array-argument -Wstack-protector -Wstack-usage=len
169 -Wstrict-aliasing -Wstrict-aliasing=n -Wstrict-overflow
170 -Wstrict-overflow=n -Wstringop-overflow=n -Wstringop-truncation
171 -Wsuggest-attribute=[pure|const|noreturn|format|malloc]
172 -Wsuggest-final-types -Wsuggest-final-methods -Wsuggest-override
173 -Wmissing-format-attribute -Wsubobject-linkage -Wswitch
174 -Wswitch-bool -Wswitch-default -Wswitch-enum -Wswitch-unreachable
175 -Wsync-nand -Wsystem-headers -Wtautological-compare -Wtrampolines
176 -Wtrigraphs -Wtype-limits -Wundef -Wuninitialized
177 -Wunknown-pragmas -Wunsuffixed-float-constants -Wunused
178 -Wunused-function -Wunused-label -Wunused-local-typedefs
179 -Wunused-macros -Wunused-parameter -Wno-unused-result
180 -Wunused-value -Wunused-variable -Wunused-const-variable
181 -Wunused-const-variable=n -Wunused-but-set-parameter
182 -Wunused-but-set-variable -Wuseless-cast -Wvariadic-macros
183 -Wvector-operation-performance -Wvla -Wvla-larger-than=n
184 -Wvolatile-register-var -Wwrite-strings
185 -Wzero-as-null-pointer-constant -Whsa
186
187 C and Objective-C-only Warning Options
188 -Wbad-function-cast -Wmissing-declarations
189 -Wmissing-parameter-type -Wmissing-prototypes -Wnested-externs
190 -Wold-style-declaration -Wold-style-definition -Wstrict-prototypes
191 -Wtraditional -Wtraditional-conversion
192 -Wdeclaration-after-statement -Wpointer-sign
193
194 Debugging Options
195 -g -glevel -gdwarf -gdwarf-version -ggdb -grecord-gcc-switches
196 -gno-record-gcc-switches -gstabs -gstabs+ -gstrict-dwarf
197 -gno-strict-dwarf -gas-loc-support -gno-as-loc-support
198 -gas-locview-support -gno-as-locview-support -gcolumn-info
199 -gno-column-info -gstatement-frontiers -gno-statement-frontiers
200 -gvariable-location-views -gno-variable-location-views
201 -ginternal-reset-location-views -gno-internal-reset-location-views
202 -ginline-points -gno-inline-points -gvms -gxcoff -gxcoff+
203 -gz[=type] -fdebug-prefix-map=old=new -fdebug-types-section
204 -fno-eliminate-unused-debug-types -femit-struct-debug-baseonly
205 -femit-struct-debug-reduced -femit-struct-debug-detailed[=spec-
206 list] -feliminate-unused-debug-symbols -femit-class-debug-always
207 -fno-merge-debug-strings -fno-dwarf2-cfi-asm -fvar-tracking
208 -fvar-tracking-assignments
209
210 Optimization Options
211 -faggressive-loop-optimizations -falign-functions[=n]
212 -falign-jumps[=n] -falign-labels[=n] -falign-loops[=n]
213 -fassociative-math -fauto-profile -fauto-profile[=path]
214 -fauto-inc-dec -fbranch-probabilities
215 -fbranch-target-load-optimize -fbranch-target-load-optimize2
216 -fbtr-bb-exclusive -fcaller-saves -fcombine-stack-adjustments
217 -fconserve-stack -fcompare-elim -fcprop-registers -fcrossjumping
218 -fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules
219 -fcx-limited-range -fdata-sections -fdce -fdelayed-branch
220 -fdelete-null-pointer-checks -fdevirtualize
221 -fdevirtualize-speculatively -fdevirtualize-at-ltrans -fdse
222 -fearly-inlining -fipa-sra -fexpensive-optimizations
223 -ffat-lto-objects -ffast-math -ffinite-math-only -ffloat-store
224 -fexcess-precision=style -fforward-propagate -ffp-contract=style
225 -ffunction-sections -fgcse -fgcse-after-reload -fgcse-las
226 -fgcse-lm -fgraphite-identity -fgcse-sm -fhoist-adjacent-loads
227 -fif-conversion -fif-conversion2 -findirect-inlining
228 -finline-functions -finline-functions-called-once
229 -finline-limit=n -finline-small-functions -fipa-cp -fipa-cp-clone
230 -fipa-bit-cp -fipa-vrp -fipa-pta -fipa-profile -fipa-pure-const
231 -fipa-reference -fipa-icf -fira-algorithm=algorithm
232 -fira-region=region -fira-hoist-pressure -fira-loop-pressure
233 -fno-ira-share-save-slots -fno-ira-share-spill-slots
234 -fisolate-erroneous-paths-dereference
235 -fisolate-erroneous-paths-attribute -fivopts
236 -fkeep-inline-functions -fkeep-static-functions
237 -fkeep-static-consts -flimit-function-alignment
238 -flive-range-shrinkage -floop-block -floop-interchange
239 -floop-strip-mine -floop-unroll-and-jam -floop-nest-optimize
240 -floop-parallelize-all -flra-remat -flto -flto-compression-level
241 -flto-partition=alg -fmerge-all-constants -fmerge-constants
242 -fmodulo-sched -fmodulo-sched-allow-regmoves
243 -fmove-loop-invariants -fno-branch-count-reg -fno-defer-pop
244 -fno-fp-int-builtin-inexact -fno-function-cse
245 -fno-guess-branch-probability -fno-inline -fno-math-errno
246 -fno-peephole -fno-peephole2 -fno-printf-return-value
247 -fno-sched-interblock -fno-sched-spec -fno-signed-zeros
248 -fno-toplevel-reorder -fno-trapping-math
249 -fno-zero-initialized-in-bss -fomit-frame-pointer
250 -foptimize-sibling-calls -fpartial-inlining -fpeel-loops
251 -fpredictive-commoning -fprefetch-loop-arrays -fprofile-correction
252 -fprofile-use -fprofile-use=path -fprofile-values
253 -fprofile-reorder-functions -freciprocal-math -free
254 -frename-registers -freorder-blocks
255 -freorder-blocks-algorithm=algorithm -freorder-blocks-and-partition
256 -freorder-functions -frerun-cse-after-loop
257 -freschedule-modulo-scheduled-loops -frounding-math
258 -fsched2-use-superblocks -fsched-pressure -fsched-spec-load
259 -fsched-spec-load-dangerous -fsched-stalled-insns-dep[=n]
260 -fsched-stalled-insns[=n] -fsched-group-heuristic
261 -fsched-critical-path-heuristic -fsched-spec-insn-heuristic
262 -fsched-rank-heuristic -fsched-last-insn-heuristic
263 -fsched-dep-count-heuristic -fschedule-fusion -fschedule-insns
264 -fschedule-insns2 -fsection-anchors -fselective-scheduling
265 -fselective-scheduling2 -fsel-sched-pipelining
266 -fsel-sched-pipelining-outer-loops -fsemantic-interposition
267 -fshrink-wrap -fshrink-wrap-separate -fsignaling-nans
268 -fsingle-precision-constant -fsplit-ivs-in-unroller -fsplit-loops
269 -fsplit-paths -fsplit-wide-types -fssa-backprop -fssa-phiopt
270 -fstdarg-opt -fstore-merging -fstrict-aliasing -fthread-jumps
271 -ftracer -ftree-bit-ccp -ftree-builtin-call-dce -ftree-ccp
272 -ftree-ch -ftree-coalesce-vars -ftree-copy-prop -ftree-dce
273 -ftree-dominator-opts -ftree-dse -ftree-forwprop -ftree-fre
274 -fcode-hoisting -ftree-loop-if-convert -ftree-loop-im
275 -ftree-phiprop -ftree-loop-distribution
276 -ftree-loop-distribute-patterns -ftree-loop-ivcanon
277 -ftree-loop-linear -ftree-loop-optimize -ftree-loop-vectorize
278 -ftree-parallelize-loops=n -ftree-pre -ftree-partial-pre
279 -ftree-pta -ftree-reassoc -ftree-sink -ftree-slsr -ftree-sra
280 -ftree-switch-conversion -ftree-tail-merge -ftree-ter
281 -ftree-vectorize -ftree-vrp -funconstrained-commons
282 -funit-at-a-time -funroll-all-loops -funroll-loops
283 -funsafe-math-optimizations -funswitch-loops -fipa-ra
284 -fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb
285 -fwhole-program -fwpa -fuse-linker-plugin --param name=value -O
286 -O0 -O1 -O2 -O3 -Os -Ofast -Og
287
288 Program Instrumentation Options
289 -p -pg -fprofile-arcs --coverage -ftest-coverage
290 -fprofile-abs-path -fprofile-dir=path -fprofile-generate
291 -fprofile-generate=path -fsanitize=style -fsanitize-recover
292 -fsanitize-recover=style -fasan-shadow-offset=number
293 -fsanitize-sections=s1,s2,... -fsanitize-undefined-trap-on-error
294 -fbounds-check -fcheck-pointer-bounds -fchkp-check-incomplete-type
295 -fchkp-first-field-has-own-bounds -fchkp-narrow-bounds
296 -fchkp-narrow-to-innermost-array -fchkp-optimize
297 -fchkp-use-fast-string-functions -fchkp-use-nochk-string-functions
298 -fchkp-use-static-bounds -fchkp-use-static-const-bounds
299 -fchkp-treat-zero-dynamic-size-as-infinite -fchkp-check-read
300 -fchkp-check-read -fchkp-check-write -fchkp-store-bounds
301 -fchkp-instrument-calls -fchkp-instrument-marked-only
302 -fchkp-use-wrappers -fchkp-flexible-struct-trailing-arrays
303 -fcf-protection=[full|branch|return|none] -fstack-protector
304 -fstack-protector-all -fstack-protector-strong
305 -fstack-protector-explicit -fstack-check
306 -fstack-limit-register=reg -fstack-limit-symbol=sym
307 -fno-stack-limit -fsplit-stack -fvtable-verify=[std|preinit|none]
308 -fvtv-counts -fvtv-debug -finstrument-functions
309 -finstrument-functions-exclude-function-list=sym,sym,...
310 -finstrument-functions-exclude-file-list=file,file,...
311
312 Preprocessor Options
313 -Aquestion=answer -A-question[=answer] -C -CC -Dmacro[=defn] -dD
314 -dI -dM -dN -dU -fdebug-cpp -fdirectives-only
315 -fdollars-in-identifiers -fexec-charset=charset
316 -fextended-identifiers -finput-charset=charset
317 -fmacro-prefix-map=old=new -fno-canonical-system-headers
318 -fpch-deps -fpch-preprocess -fpreprocessed -ftabstop=width
319 -ftrack-macro-expansion -fwide-exec-charset=charset
320 -fworking-directory -H -imacros file -include file -M -MD -MF
321 -MG -MM -MMD -MP -MQ -MT -no-integrated-cpp -P -pthread
322 -remap -traditional -traditional-cpp -trigraphs -Umacro -undef
323 -Wp,option -Xpreprocessor option
324
325 Assembler Options
326 -Wa,option -Xassembler option
327
328 Linker Options
329 object-file-name -fuse-ld=linker -llibrary -nostartfiles
330 -nodefaultlibs -nostdlib -pie -pthread -rdynamic -s -static
331 -static-pie -static-libgcc -static-libstdc++ -static-libasan
332 -static-libtsan -static-liblsan -static-libubsan -static-libmpx
333 -static-libmpxwrappers -shared -shared-libgcc -symbolic -T script
334 -Wl,option -Xlinker option -u symbol -z keyword
335
336 Directory Options
337 -Bprefix -Idir -I- -idirafter dir -imacros file -imultilib dir
338 -iplugindir=dir -iprefix file -iquote dir -isysroot dir -isystem
339 dir -iwithprefix dir -iwithprefixbefore dir -Ldir
340 -no-canonical-prefixes --no-sysroot-suffix -nostdinc -nostdinc++
341 --sysroot=dir
342
343 Code Generation Options
344 -fcall-saved-reg -fcall-used-reg -ffixed-reg -fexceptions
345 -fnon-call-exceptions -fdelete-dead-exceptions -funwind-tables
346 -fasynchronous-unwind-tables -fno-gnu-unique
347 -finhibit-size-directive -fno-common -fno-ident
348 -fpcc-struct-return -fpic -fPIC -fpie -fPIE -fno-plt
349 -fno-jump-tables -frecord-gcc-switches -freg-struct-return
350 -fshort-enums -fshort-wchar -fverbose-asm -fpack-struct[=n]
351 -fleading-underscore -ftls-model=model -fstack-reuse=reuse_level
352 -ftrampolines -ftrapv -fwrapv
353 -fvisibility=[default|internal|hidden|protected]
354 -fstrict-volatile-bitfields -fsync-libcalls
355
356 Developer Options
357 -dletters -dumpspecs -dumpmachine -dumpversion -dumpfullversion
358 -fchecking -fchecking=n -fdbg-cnt-list -fdbg-cnt=counter-value-
359 list -fdisable-ipa-pass_name -fdisable-rtl-pass_name
360 -fdisable-rtl-pass-name=range-list -fdisable-tree-pass_name
361 -fdisable-tree-pass-name=range-list -fdump-noaddr
362 -fdump-unnumbered -fdump-unnumbered-links
363 -fdump-class-hierarchy[-n] -fdump-final-insns[=file] -fdump-ipa-all
364 -fdump-ipa-cgraph -fdump-ipa-inline -fdump-lang-all
365 -fdump-lang-switch -fdump-lang-switch-options
366 -fdump-lang-switch-options=filename -fdump-passes -fdump-rtl-pass
367 -fdump-rtl-pass=filename -fdump-statistics -fdump-tree-all
368 -fdump-tree-switch -fdump-tree-switch-options
369 -fdump-tree-switch-options=filename -fcompare-debug[=opts]
370 -fcompare-debug-second -fenable-kind-pass -fenable-kind-pass=range-
371 list -fira-verbose=n -flto-report -flto-report-wpa
372 -fmem-report-wpa -fmem-report -fpre-ipa-mem-report
373 -fpost-ipa-mem-report -fopt-info -fopt-info-options[=file]
374 -fprofile-report -frandom-seed=string -fsched-verbose=n
375 -fsel-sched-verbose -fsel-sched-dump-cfg
376 -fsel-sched-pipelining-verbose -fstats -fstack-usage
377 -ftime-report -ftime-report-details
378 -fvar-tracking-assignments-toggle -gtoggle
379 -print-file-name=library -print-libgcc-file-name
380 -print-multi-directory -print-multi-lib -print-multi-os-directory
381 -print-prog-name=program -print-search-dirs -Q -print-sysroot
382 -print-sysroot-headers-suffix -save-temps -save-temps=cwd
383 -save-temps=obj -time[=file]
384
385 Machine-Dependent Options
386 AArch64 Options -mabi=name -mbig-endian -mlittle-endian
387 -mgeneral-regs-only -mcmodel=tiny -mcmodel=small -mcmodel=large
388 -mstrict-align -momit-leaf-frame-pointer -mtls-dialect=desc
389 -mtls-dialect=traditional -mtls-size=size -mfix-cortex-a53-835769
390 -mfix-cortex-a53-843419 -mlow-precision-recip-sqrt
391 -mlow-precision-sqrt -mlow-precision-div
392 -mpc-relative-literal-loads -msign-return-address=scope -march=name
393 -mcpu=name -mtune=name -moverride=string -mverbose-cost-dump
394
395 Adapteva Epiphany Options -mhalf-reg-file -mprefer-short-insn-regs
396 -mbranch-cost=num -mcmove -mnops=num -msoft-cmpsf -msplit-lohi
397 -mpost-inc -mpost-modify -mstack-offset=num -mround-nearest
398 -mlong-calls -mshort-calls -msmall16 -mfp-mode=mode
399 -mvect-double -max-vect-align=num -msplit-vecmove-early
400 -m1reg-reg
401
402 ARC Options -mbarrel-shifter -mjli-always -mcpu=cpu -mA6 -mARC600
403 -mA7 -mARC700 -mdpfp -mdpfp-compact -mdpfp-fast -mno-dpfp-lrsr
404 -mea -mno-mpy -mmul32x16 -mmul64 -matomic -mnorm -mspfp
405 -mspfp-compact -mspfp-fast -msimd -msoft-float -mswap -mcrc
406 -mdsp-packa -mdvbf -mlock -mmac-d16 -mmac-24 -mrtsc -mswape
407 -mtelephony -mxy -misize -mannotate-align -marclinux
408 -marclinux_prof -mlong-calls -mmedium-calls -msdata
409 -mirq-ctrl-saved -mrgf-banked-regs -mlpc-width=width -G num
410 -mvolatile-cache -mtp-regno=regno -malign-call -mauto-modify-reg
411 -mbbit-peephole -mno-brcc -mcase-vector-pcrel -mcompact-casesi
412 -mno-cond-exec -mearly-cbranchsi -mexpand-adddi -mindexed-loads
413 -mlra -mlra-priority-none -mlra-priority-compact mlra-priority-
414 noncompact -mno-millicode -mmixed-code -mq-class -mRcq -mRcw
415 -msize-level=level -mtune=cpu -mmultcost=num
416 -munalign-prob-threshold=probability -mmpy-option=multo -mdiv-rem
417 -mcode-density -mll64 -mfpu=fpu -mrf16
418
419 ARM Options -mapcs-frame -mno-apcs-frame -mabi=name
420 -mapcs-stack-check -mno-apcs-stack-check -mapcs-reentrant
421 -mno-apcs-reentrant -msched-prolog -mno-sched-prolog
422 -mlittle-endian -mbig-endian -mbe8 -mbe32 -mfloat-abi=name
423 -mfp16-format=name -mthumb-interwork -mno-thumb-interwork
424 -mcpu=name -march=name -mfpu=name -mtune=name -mprint-tune-info
425 -mstructure-size-boundary=n -mabort-on-noreturn -mlong-calls
426 -mno-long-calls -msingle-pic-base -mno-single-pic-base
427 -mpic-register=reg -mnop-fun-dllimport -mpoke-function-name -mthumb
428 -marm -mflip-thumb -mtpcs-frame -mtpcs-leaf-frame
429 -mcaller-super-interworking -mcallee-super-interworking -mtp=name
430 -mtls-dialect=dialect -mword-relocations -mfix-cortex-m3-ldrd
431 -munaligned-access -mneon-for-64bits -mslow-flash-data
432 -masm-syntax-unified -mrestrict-it -mverbose-cost-dump -mpure-code
433 -mcmse
434
435 AVR Options -mmcu=mcu -mabsdata -maccumulate-args
436 -mbranch-cost=cost -mcall-prologues -mgas-isr-prologues -mint8
437 -mn_flash=size -mno-interrupts -mmain-is-OS_task -mrelax -mrmw
438 -mstrict-X -mtiny-stack -mfract-convert-truncate -mshort-calls
439 -nodevicelib -Waddr-space-convert -Wmisspelled-isr
440
441 Blackfin Options -mcpu=cpu[-sirevision] -msim
442 -momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer
443 -mspecld-anomaly -mno-specld-anomaly -mcsync-anomaly
444 -mno-csync-anomaly -mlow-64k -mno-low64k -mstack-check-l1
445 -mid-shared-library -mno-id-shared-library -mshared-library-id=n
446 -mleaf-id-shared-library -mno-leaf-id-shared-library -msep-data
447 -mno-sep-data -mlong-calls -mno-long-calls -mfast-fp
448 -minline-plt -mmulticore -mcorea -mcoreb -msdram -micplb
449
450 C6X Options -mbig-endian -mlittle-endian -march=cpu -msim
451 -msdata=sdata-type
452
453 CRIS Options -mcpu=cpu -march=cpu -mtune=cpu -mmax-stack-frame=n
454 -melinux-stacksize=n -metrax4 -metrax100 -mpdebug -mcc-init
455 -mno-side-effects -mstack-align -mdata-align -mconst-align
456 -m32-bit -m16-bit -m8-bit -mno-prologue-epilogue -mno-gotplt
457 -melf -maout -melinux -mlinux -sim -sim2 -mmul-bug-workaround
458 -mno-mul-bug-workaround
459
460 CR16 Options -mmac -mcr16cplus -mcr16c -msim -mint32 -mbit-ops
461 -mdata-model=model
462
463 Darwin Options -all_load -allowable_client -arch
464 -arch_errors_fatal -arch_only -bind_at_load -bundle
465 -bundle_loader -client_name -compatibility_version
466 -current_version -dead_strip -dependency-file -dylib_file
467 -dylinker_install_name -dynamic -dynamiclib
468 -exported_symbols_list -filelist -flat_namespace
469 -force_cpusubtype_ALL -force_flat_namespace
470 -headerpad_max_install_names -iframework -image_base -init
471 -install_name -keep_private_externs -multi_module
472 -multiply_defined -multiply_defined_unused -noall_load
473 -no_dead_strip_inits_and_terms -nofixprebinding -nomultidefs
474 -noprebind -noseglinkedit -pagezero_size -prebind
475 -prebind_all_twolevel_modules -private_bundle -read_only_relocs
476 -sectalign -sectobjectsymbols -whyload -seg1addr -sectcreate
477 -sectobjectsymbols -sectorder -segaddr -segs_read_only_addr
478 -segs_read_write_addr -seg_addr_table -seg_addr_table_filename
479 -seglinkedit -segprot -segs_read_only_addr -segs_read_write_addr
480 -single_module -static -sub_library -sub_umbrella
481 -twolevel_namespace -umbrella -undefined -unexported_symbols_list
482 -weak_reference_mismatches -whatsloaded -F -gused -gfull
483 -mmacosx-version-min=version -mkernel -mone-byte-bool
484
485 DEC Alpha Options -mno-fp-regs -msoft-float -mieee
486 -mieee-with-inexact -mieee-conformant -mfp-trap-mode=mode
487 -mfp-rounding-mode=mode -mtrap-precision=mode -mbuild-constants
488 -mcpu=cpu-type -mtune=cpu-type -mbwx -mmax -mfix -mcix
489 -mfloat-vax -mfloat-ieee -mexplicit-relocs -msmall-data
490 -mlarge-data -msmall-text -mlarge-text -mmemory-latency=time
491
492 FR30 Options -msmall-model -mno-lsim
493
494 FT32 Options -msim -mlra -mnodiv -mft32b -mcompress -mnopm
495
496 FRV Options -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 -mhard-float
497 -msoft-float -malloc-cc -mfixed-cc -mdword -mno-dword -mdouble
498 -mno-double -mmedia -mno-media -mmuladd -mno-muladd -mfdpic
499 -minline-plt -mgprel-ro -multilib-library-pic -mlinked-fp
500 -mlong-calls -malign-labels -mlibrary-pic -macc-4 -macc-8 -mpack
501 -mno-pack -mno-eflags -mcond-move -mno-cond-move
502 -moptimize-membar -mno-optimize-membar -mscc -mno-scc
503 -mcond-exec -mno-cond-exec -mvliw-branch -mno-vliw-branch
504 -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec
505 -mno-nested-cond-exec -mtomcat-stats -mTLS -mtls -mcpu=cpu
506
507 GNU/Linux Options -mglibc -muclibc -mmusl -mbionic -mandroid
508 -tno-android-cc -tno-android-ld
509
510 H8/300 Options -mrelax -mh -ms -mn -mexr -mno-exr -mint32
511 -malign-300
512
513 HPPA Options -march=architecture-type -mcaller-copies
514 -mdisable-fpregs -mdisable-indexing -mfast-indirect-calls -mgas
515 -mgnu-ld -mhp-ld -mfixed-range=register-range -mjump-in-delay
516 -mlinker-opt -mlong-calls -mlong-load-store -mno-disable-fpregs
517 -mno-disable-indexing -mno-fast-indirect-calls -mno-gas
518 -mno-jump-in-delay -mno-long-load-store -mno-portable-runtime
519 -mno-soft-float -mno-space-regs -msoft-float -mpa-risc-1-0
520 -mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime -mschedule=cpu-
521 type -mspace-regs -msio -mwsio -munix=unix-std -nolibdld
522 -static -threads
523
524 IA-64 Options -mbig-endian -mlittle-endian -mgnu-as -mgnu-ld
525 -mno-pic -mvolatile-asm-stop -mregister-names -msdata -mno-sdata
526 -mconstant-gp -mauto-pic -mfused-madd
527 -minline-float-divide-min-latency
528 -minline-float-divide-max-throughput -mno-inline-float-divide
529 -minline-int-divide-min-latency -minline-int-divide-max-throughput
530 -mno-inline-int-divide -minline-sqrt-min-latency
531 -minline-sqrt-max-throughput -mno-inline-sqrt -mdwarf2-asm
532 -mearly-stop-bits -mfixed-range=register-range -mtls-size=tls-size
533 -mtune=cpu-type -milp32 -mlp64 -msched-br-data-spec
534 -msched-ar-data-spec -msched-control-spec -msched-br-in-data-spec
535 -msched-ar-in-data-spec -msched-in-control-spec -msched-spec-ldc
536 -msched-spec-control-ldc -msched-prefer-non-data-spec-insns
537 -msched-prefer-non-control-spec-insns
538 -msched-stop-bits-after-every-cycle
539 -msched-count-spec-in-critical-path
540 -msel-sched-dont-check-control-spec -msched-fp-mem-deps-zero-cost
541 -msched-max-memory-insns-hard-limit -msched-max-memory-insns=max-
542 insns
543
544 LM32 Options -mbarrel-shift-enabled -mdivide-enabled
545 -mmultiply-enabled -msign-extend-enabled -muser-enabled
546
547 M32R/D Options -m32r2 -m32rx -m32r -mdebug -malign-loops
548 -mno-align-loops -missue-rate=number -mbranch-cost=number
549 -mmodel=code-size-model-type -msdata=sdata-type -mno-flush-func
550 -mflush-func=name -mno-flush-trap -mflush-trap=number -G num
551
552 M32C Options -mcpu=cpu -msim -memregs=number
553
554 M680x0 Options -march=arch -mcpu=cpu -mtune=tune -m68000 -m68020
555 -m68020-40 -m68020-60 -m68030 -m68040 -m68060 -mcpu32 -m5200
556 -m5206e -m528x -m5307 -m5407 -mcfv4e -mbitfield -mno-bitfield
557 -mc68000 -mc68020 -mnobitfield -mrtd -mno-rtd -mdiv -mno-div
558 -mshort -mno-short -mhard-float -m68881 -msoft-float -mpcrel
559 -malign-int -mstrict-align -msep-data -mno-sep-data
560 -mshared-library-id=n -mid-shared-library -mno-id-shared-library
561 -mxgot -mno-xgot -mlong-jump-table-offsets
562
563 MCore Options -mhardlit -mno-hardlit -mdiv -mno-div
564 -mrelax-immediates -mno-relax-immediates -mwide-bitfields
565 -mno-wide-bitfields -m4byte-functions -mno-4byte-functions
566 -mcallgraph-data -mno-callgraph-data -mslow-bytes -mno-slow-bytes
567 -mno-lsim -mlittle-endian -mbig-endian -m210 -m340
568 -mstack-increment
569
570 MeP Options -mabsdiff -mall-opts -maverage -mbased=n -mbitops
571 -mc=n -mclip -mconfig=name -mcop -mcop32 -mcop64 -mivc2 -mdc
572 -mdiv -meb -mel -mio-volatile -ml -mleadz -mm -mminmax
573 -mmult -mno-opts -mrepeat -ms -msatur -msdram -msim
574 -msimnovec -mtf -mtiny=n
575
576 MicroBlaze Options -msoft-float -mhard-float -msmall-divides
577 -mcpu=cpu -mmemcpy -mxl-soft-mul -mxl-soft-div -mxl-barrel-shift
578 -mxl-pattern-compare -mxl-stack-check -mxl-gp-opt -mno-clearbss
579 -mxl-multiply-high -mxl-float-convert -mxl-float-sqrt
580 -mbig-endian -mlittle-endian -mxl-reorder -mxl-mode-app-model
581
582 MIPS Options -EL -EB -march=arch -mtune=arch -mips1 -mips2
583 -mips3 -mips4 -mips32 -mips32r2 -mips32r3 -mips32r5 -mips32r6
584 -mips64 -mips64r2 -mips64r3 -mips64r5 -mips64r6 -mips16
585 -mno-mips16 -mflip-mips16 -minterlink-compressed
586 -mno-interlink-compressed -minterlink-mips16 -mno-interlink-mips16
587 -mabi=abi -mabicalls -mno-abicalls -mshared -mno-shared -mplt
588 -mno-plt -mxgot -mno-xgot -mgp32 -mgp64 -mfp32 -mfpxx -mfp64
589 -mhard-float -msoft-float -mno-float -msingle-float
590 -mdouble-float -modd-spreg -mno-odd-spreg -mabs=mode
591 -mnan=encoding -mdsp -mno-dsp -mdspr2 -mno-dspr2 -mmcu
592 -mmno-mcu -meva -mno-eva -mvirt -mno-virt -mxpa -mno-xpa
593 -mmicromips -mno-micromips -mmsa -mno-msa -mfpu=fpu-type
594 -msmartmips -mno-smartmips -mpaired-single -mno-paired-single
595 -mdmx -mno-mdmx -mips3d -mno-mips3d -mmt -mno-mt -mllsc
596 -mno-llsc -mlong64 -mlong32 -msym32 -mno-sym32 -Gnum
597 -mlocal-sdata -mno-local-sdata -mextern-sdata -mno-extern-sdata
598 -mgpopt -mno-gopt -membedded-data -mno-embedded-data
599 -muninit-const-in-rodata -mno-uninit-const-in-rodata
600 -mcode-readable=setting -msplit-addresses -mno-split-addresses
601 -mexplicit-relocs -mno-explicit-relocs -mcheck-zero-division
602 -mno-check-zero-division -mdivide-traps -mdivide-breaks
603 -mload-store-pairs -mno-load-store-pairs -mmemcpy -mno-memcpy
604 -mlong-calls -mno-long-calls -mmad -mno-mad -mimadd -mno-imadd
605 -mfused-madd -mno-fused-madd -nocpp -mfix-24k -mno-fix-24k
606 -mfix-r4000 -mno-fix-r4000 -mfix-r4400 -mno-fix-r4400
607 -mfix-r10000 -mno-fix-r10000 -mfix-rm7000 -mno-fix-rm7000
608 -mfix-vr4120 -mno-fix-vr4120 -mfix-vr4130 -mno-fix-vr4130
609 -mfix-sb1 -mno-fix-sb1 -mflush-func=func -mno-flush-func
610 -mbranch-cost=num -mbranch-likely -mno-branch-likely
611 -mcompact-branches=policy -mfp-exceptions -mno-fp-exceptions
612 -mvr4130-align -mno-vr4130-align -msynci -mno-synci -mlxc1-sxc1
613 -mno-lxc1-sxc1 -mmadd4 -mno-madd4 -mrelax-pic-calls
614 -mno-relax-pic-calls -mmcount-ra-address -mframe-header-opt
615 -mno-frame-header-opt
616
617 MMIX Options -mlibfuncs -mno-libfuncs -mepsilon -mno-epsilon
618 -mabi=gnu -mabi=mmixware -mzero-extend -mknuthdiv
619 -mtoplevel-symbols -melf -mbranch-predict -mno-branch-predict
620 -mbase-addresses -mno-base-addresses -msingle-exit
621 -mno-single-exit
622
623 MN10300 Options -mmult-bug -mno-mult-bug -mno-am33 -mam33
624 -mam33-2 -mam34 -mtune=cpu-type -mreturn-pointer-on-d0 -mno-crt0
625 -mrelax -mliw -msetlb
626
627 Moxie Options -meb -mel -mmul.x -mno-crt0
628
629 MSP430 Options -msim -masm-hex -mmcu= -mcpu= -mlarge -msmall
630 -mrelax -mwarn-mcu -mcode-region= -mdata-region= -msilicon-errata=
631 -msilicon-errata-warn= -mhwmult= -minrt
632
633 NDS32 Options -mbig-endian -mlittle-endian -mreduced-regs
634 -mfull-regs -mcmov -mno-cmov -mext-perf -mno-ext-perf -mext-perf2
635 -mno-ext-perf2 -mext-string -mno-ext-string -mv3push -mno-v3push
636 -m16bit -mno-16bit -misr-vector-size=num -mcache-block-size=num
637 -march=arch -mcmodel=code-model -mctor-dtor -mrelax
638
639 Nios II Options -G num -mgpopt=option -mgpopt -mno-gpopt
640 -mgprel-sec=regexp -mr0rel-sec=regexp -mel -meb -mno-bypass-cache
641 -mbypass-cache -mno-cache-volatile -mcache-volatile
642 -mno-fast-sw-div -mfast-sw-div -mhw-mul -mno-hw-mul -mhw-mulx
643 -mno-hw-mulx -mno-hw-div -mhw-div -mcustom-insn=N
644 -mno-custom-insn -mcustom-fpu-cfg=name -mhal -msmallc
645 -msys-crt0=name -msys-lib=name -march=arch -mbmx -mno-bmx -mcdx
646 -mno-cdx
647
648 Nvidia PTX Options -m32 -m64 -mmainkernel -moptimize
649
650 PDP-11 Options -mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45
651 -m10 -mbcopy -mbcopy-builtin -mint32 -mno-int16 -mint16
652 -mno-int32 -mfloat32 -mno-float64 -mfloat64 -mno-float32
653 -mabshi -mno-abshi -mbranch-expensive -mbranch-cheap -munix-asm
654 -mdec-asm
655
656 picoChip Options -mae=ae_type -mvliw-lookahead=N
657 -msymbol-as-address -mno-inefficient-warnings
658
659 PowerPC Options See RS/6000 and PowerPC Options.
660
661 PowerPC SPE Options -mcpu=cpu-type -mtune=cpu-type -mmfcrf
662 -mno-mfcrf -mpopcntb -mno-popcntb -mfull-toc -mminimal-toc
663 -mno-fp-in-toc -mno-sum-in-toc -m32 -mxl-compat -mno-xl-compat
664 -malign-power -malign-natural -msoft-float -mhard-float
665 -mmultiple -mno-multiple -msingle-float -mdouble-float -mupdate
666 -mno-update -mavoid-indexed-addresses -mno-avoid-indexed-addresses
667 -mstrict-align -mno-strict-align -mrelocatable -mno-relocatable
668 -mrelocatable-lib -mno-relocatable-lib -mtoc -mno-toc -mlittle
669 -mlittle-endian -mbig -mbig-endian -msingle-pic-base
670 -mprioritize-restricted-insns=priority
671 -msched-costly-dep=dependence_type -minsert-sched-nops=scheme
672 -mcall-sysv -mcall-netbsd -maix-struct-return
673 -msvr4-struct-return -mabi=abi-type -msecure-plt -mbss-plt
674 -mblock-move-inline-limit=num -misel -mno-isel -misel=yes
675 -misel=no -mspe -mno-spe -mspe=yes -mspe=no -mfloat-gprs=yes
676 -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double
677 -mprototype -mno-prototype -msim -mmvme -mads -myellowknife
678 -memb -msdata -msdata=opt -mvxworks -G num -mrecip -mrecip=opt
679 -mno-recip -mrecip-precision -mno-recip-precision
680 -mpointers-to-nested-functions -mno-pointers-to-nested-functions
681 -msave-toc-indirect -mno-save-toc-indirect -mcompat-align-parm
682 -mno-compat-align-parm -mfloat128 -mno-float128 -mgnu-attribute
683 -mno-gnu-attribute -mstack-protector-guard=guard
684 -mstack-protector-guard-reg=reg
685 -mstack-protector-guard-offset=offset
686
687 RISC-V Options -mbranch-cost=N-instruction -mplt -mno-plt
688 -mabi=ABI-string -mfdiv -mno-fdiv -mdiv -mno-div -march=ISA-
689 string -mtune=processor-string -mpreferred-stack-boundary=num
690 -msmall-data-limit=N-bytes -msave-restore -mno-save-restore
691 -mstrict-align -mno-strict-align -mcmodel=medlow -mcmodel=medany
692 -mexplicit-relocs -mno-explicit-relocs -mrelax -mno-relax
693
694 RL78 Options -msim -mmul=none -mmul=g13 -mmul=g14 -mallregs
695 -mcpu=g10 -mcpu=g13 -mcpu=g14 -mg10 -mg13 -mg14
696 -m64bit-doubles -m32bit-doubles -msave-mduc-in-interrupts
697
698 RS/6000 and PowerPC Options -mcpu=cpu-type -mtune=cpu-type
699 -mcmodel=code-model -mpowerpc64 -maltivec -mno-altivec
700 -mpowerpc-gpopt -mno-powerpc-gpopt -mpowerpc-gfxopt
701 -mno-powerpc-gfxopt -mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb
702 -mpopcntd -mno-popcntd -mfprnd -mno-fprnd -mcmpb -mno-cmpb
703 -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp -mfull-toc
704 -mminimal-toc -mno-fp-in-toc -mno-sum-in-toc -m64 -m32
705 -mxl-compat -mno-xl-compat -mpe -malign-power -malign-natural
706 -msoft-float -mhard-float -mmultiple -mno-multiple
707 -msingle-float -mdouble-float -msimple-fpu -mupdate -mno-update
708 -mavoid-indexed-addresses -mno-avoid-indexed-addresses
709 -mfused-madd -mno-fused-madd -mbit-align -mno-bit-align
710 -mstrict-align -mno-strict-align -mrelocatable -mno-relocatable
711 -mrelocatable-lib -mno-relocatable-lib -mtoc -mno-toc -mlittle
712 -mlittle-endian -mbig -mbig-endian -mdynamic-no-pic -maltivec
713 -mswdiv -msingle-pic-base -mprioritize-restricted-insns=priority
714 -msched-costly-dep=dependence_type -minsert-sched-nops=scheme
715 -mcall-aixdesc -mcall-eabi -mcall-freebsd -mcall-linux
716 -mcall-netbsd -mcall-openbsd -mcall-sysv -mcall-sysv-eabi
717 -mcall-sysv-noeabi -mtraceback=traceback_type -maix-struct-return
718 -msvr4-struct-return -mabi=abi-type -msecure-plt -mbss-plt
719 -mblock-move-inline-limit=num -mblock-compare-inline-limit=num
720 -mblock-compare-inline-loop-limit=num
721 -mstring-compare-inline-limit=num -misel -mno-isel -misel=yes
722 -misel=no -mpaired -mvrsave -mno-vrsave -mmulhw -mno-mulhw
723 -mdlmzb -mno-dlmzb -mprototype -mno-prototype -msim -mmvme
724 -mads -myellowknife -memb -msdata -msdata=opt
725 -mreadonly-in-sdata -mvxworks -G num -mrecip -mrecip=opt
726 -mno-recip -mrecip-precision -mno-recip-precision -mveclibabi=type
727 -mfriz -mno-friz -mpointers-to-nested-functions
728 -mno-pointers-to-nested-functions -msave-toc-indirect
729 -mno-save-toc-indirect -mpower8-fusion -mno-mpower8-fusion
730 -mpower8-vector -mno-power8-vector -mcrypto -mno-crypto -mhtm
731 -mno-htm -mquad-memory -mno-quad-memory -mquad-memory-atomic
732 -mno-quad-memory-atomic -mcompat-align-parm -mno-compat-align-parm
733 -mfloat128 -mno-float128 -mfloat128-hardware
734 -mno-float128-hardware -mgnu-attribute -mno-gnu-attribute
735 -mstack-protector-guard=guard -mstack-protector-guard-reg=reg
736 -mstack-protector-guard-offset=offset
737
738 RX Options -m64bit-doubles -m32bit-doubles -fpu -nofpu -mcpu=
739 -mbig-endian-data -mlittle-endian-data -msmall-data -msim
740 -mno-sim -mas100-syntax -mno-as100-syntax -mrelax
741 -mmax-constant-size= -mint-register= -mpid -mallow-string-insns
742 -mno-allow-string-insns -mjsr -mno-warn-multiple-fast-interrupts
743 -msave-acc-in-interrupts
744
745 S/390 and zSeries Options -mtune=cpu-type -march=cpu-type
746 -mhard-float -msoft-float -mhard-dfp -mno-hard-dfp
747 -mlong-double-64 -mlong-double-128 -mbackchain -mno-backchain
748 -mpacked-stack -mno-packed-stack -msmall-exec -mno-small-exec
749 -mmvcle -mno-mvcle -m64 -m31 -mdebug -mno-debug -mesa -mzarch
750 -mhtm -mvx -mzvector -mtpf-trace -mno-tpf-trace -mfused-madd
751 -mno-fused-madd -mwarn-framesize -mwarn-dynamicstack -mstack-size
752 -mstack-guard -mhotpatch=halfwords,halfwords
753
754 Score Options -meb -mel -mnhwloop -muls -mmac -mscore5 -mscore5u
755 -mscore7 -mscore7d
756
757 SH Options -m1 -m2 -m2e -m2a-nofpu -m2a-single-only -m2a-single
758 -m2a -m3 -m3e -m4-nofpu -m4-single-only -m4-single -m4
759 -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al -mb -ml
760 -mdalign -mrelax -mbigtable -mfmovd -mrenesas -mno-renesas
761 -mnomacsave -mieee -mno-ieee -mbitops -misize
762 -minline-ic_invalidate -mpadstruct -mprefergot -musermode
763 -multcost=number -mdiv=strategy -mdivsi3_libfunc=name
764 -mfixed-range=register-range -maccumulate-outgoing-args
765 -matomic-model=atomic-model -mbranch-cost=num -mzdcbranch
766 -mno-zdcbranch -mcbranch-force-delay-slot -mfused-madd
767 -mno-fused-madd -mfsca -mno-fsca -mfsrra -mno-fsrra
768 -mpretend-cmove -mtas
769
770 Solaris 2 Options -mclear-hwcap -mno-clear-hwcap -mimpure-text
771 -mno-impure-text -pthreads
772
773 SPARC Options -mcpu=cpu-type -mtune=cpu-type -mcmodel=code-model
774 -mmemory-model=mem-model -m32 -m64 -mapp-regs -mno-app-regs
775 -mfaster-structs -mno-faster-structs -mflat -mno-flat -mfpu
776 -mno-fpu -mhard-float -msoft-float -mhard-quad-float
777 -msoft-quad-float -mstack-bias -mno-stack-bias -mstd-struct-return
778 -mno-std-struct-return -munaligned-doubles -mno-unaligned-doubles
779 -muser-mode -mno-user-mode -mv8plus -mno-v8plus -mvis -mno-vis
780 -mvis2 -mno-vis2 -mvis3 -mno-vis3 -mvis4 -mno-vis4 -mvis4b
781 -mno-vis4b -mcbcond -mno-cbcond -mfmaf -mno-fmaf -mfsmuld
782 -mno-fsmuld -mpopc -mno-popc -msubxc -mno-subxc -mfix-at697f
783 -mfix-ut699 -mfix-ut700 -mfix-gr712rc -mlra -mno-lra
784
785 SPU Options -mwarn-reloc -merror-reloc -msafe-dma -munsafe-dma
786 -mbranch-hints -msmall-mem -mlarge-mem -mstdmain
787 -mfixed-range=register-range -mea32 -mea64
788 -maddress-space-conversion -mno-address-space-conversion
789 -mcache-size=cache-size -matomic-updates -mno-atomic-updates
790
791 System V Options -Qy -Qn -YP,paths -Ym,dir
792
793 TILE-Gx Options -mcpu=CPU -m32 -m64 -mbig-endian
794 -mlittle-endian -mcmodel=code-model
795
796 TILEPro Options -mcpu=cpu -m32
797
798 V850 Options -mlong-calls -mno-long-calls -mep -mno-ep
799 -mprolog-function -mno-prolog-function -mspace -mtda=n -msda=n
800 -mzda=n -mapp-regs -mno-app-regs -mdisable-callt
801 -mno-disable-callt -mv850e2v3 -mv850e2 -mv850e1 -mv850es -mv850e
802 -mv850 -mv850e3v5 -mloop -mrelax -mlong-jumps -msoft-float
803 -mhard-float -mgcc-abi -mrh850-abi -mbig-switch
804
805 VAX Options -mg -mgnu -munix
806
807 Visium Options -mdebug -msim -mfpu -mno-fpu -mhard-float
808 -msoft-float -mcpu=cpu-type -mtune=cpu-type -msv-mode
809 -muser-mode
810
811 VMS Options -mvms-return-codes -mdebug-main=prefix -mmalloc64
812 -mpointer-size=size
813
814 VxWorks Options -mrtp -non-static -Bstatic -Bdynamic -Xbind-lazy
815 -Xbind-now
816
817 x86 Options -mtune=cpu-type -march=cpu-type -mtune-ctrl=feature-
818 list -mdump-tune-features -mno-default -mfpmath=unit
819 -masm=dialect -mno-fancy-math-387 -mno-fp-ret-in-387 -m80387
820 -mhard-float -msoft-float -mno-wide-multiply -mrtd
821 -malign-double -mpreferred-stack-boundary=num
822 -mincoming-stack-boundary=num -mcld -mcx16 -msahf -mmovbe
823 -mcrc32 -mrecip -mrecip=opt -mvzeroupper -mprefer-avx128
824 -mprefer-vector-width=opt -mmmx -msse -msse2 -msse3 -mssse3
825 -msse4.1 -msse4.2 -msse4 -mavx -mavx2 -mavx512f -mavx512pf
826 -mavx512er -mavx512cd -mavx512vl -mavx512bw -mavx512dq
827 -mavx512ifma -mavx512vbmi -msha -maes -mpclmul -mfsgsbase
828 -mrdrnd -mf16c -mfma -mpconfig -mwbnoinvd -mprefetchwt1
829 -mclflushopt -mclwb -mxsavec -mxsaves -msse4a -m3dnow -m3dnowa
830 -mpopcnt -mabm -mbmi -mtbm -mfma4 -mxop -madx -mlzcnt -mbmi2
831 -mfxsr -mxsave -mxsaveopt -mrtm -mlwp -mmpx -mmwaitx -mclzero
832 -mpku -mthreads -mgfni -mvaes -mshstk -mforce-indirect-call
833 -mavx512vbmi2 -mvpclmulqdq -mavx512bitalg -mmovdiri -mmovdir64b
834 -mavx512vpopcntdq -mavx5124fmaps -mavx512vnni -mavx5124vnniw
835 -mprfchw -mrdpid -mrdseed -msgx -mms-bitfields
836 -mno-align-stringops -minline-all-stringops
837 -minline-stringops-dynamically -mstringop-strategy=alg
838 -mmemcpy-strategy=strategy -mmemset-strategy=strategy -mpush-args
839 -maccumulate-outgoing-args -m128bit-long-double
840 -m96bit-long-double -mlong-double-64 -mlong-double-80
841 -mlong-double-128 -mregparm=num -msseregparm -mveclibabi=type
842 -mvect8-ret-in-mem -mpc32 -mpc64 -mpc80 -mstackrealign
843 -momit-leaf-frame-pointer -mno-red-zone -mno-tls-direct-seg-refs
844 -mcmodel=code-model -mabi=name -maddress-mode=mode -m32 -m64
845 -mx32 -m16 -miamcu -mlarge-data-threshold=num -msse2avx
846 -mfentry -mrecord-mcount -mnop-mcount -m8bit-idiv
847 -mavx256-split-unaligned-load -mavx256-split-unaligned-store
848 -malign-data=type -mstack-protector-guard=guard
849 -mstack-protector-guard-reg=reg
850 -mstack-protector-guard-offset=offset
851 -mstack-protector-guard-symbol=symbol -mmitigate-rop
852 -mgeneral-regs-only -mcall-ms2sysv-xlogues -mindirect-branch=choice
853 -mfunction-return=choice -mindirect-branch-register
854
855 x86 Windows Options -mconsole -mcygwin -mno-cygwin -mdll
856 -mnop-fun-dllimport -mthread -municode -mwin32 -mwindows
857 -fno-set-stack-executable
858
859 Xstormy16 Options -msim
860
861 Xtensa Options -mconst16 -mno-const16 -mfused-madd
862 -mno-fused-madd -mforce-no-pic -mserialize-volatile
863 -mno-serialize-volatile -mtext-section-literals
864 -mno-text-section-literals -mauto-litpools -mno-auto-litpools
865 -mtarget-align -mno-target-align -mlongcalls -mno-longcalls
866
867 zSeries Options See S/390 and zSeries Options.
868
869 Options Controlling the Kind of Output
870 Compilation can involve up to four stages: preprocessing, compilation
871 proper, assembly and linking, always in that order. GCC is capable of
872 preprocessing and compiling several files either into several assembler
873 input files, or into one assembler input file; then each assembler
874 input file produces an object file, and linking combines all the object
875 files (those newly compiled, and those specified as input) into an
876 executable file.
877
878 For any given input file, the file name suffix determines what kind of
879 compilation is done:
880
881 file.c
882 C source code that must be preprocessed.
883
884 file.i
885 C source code that should not be preprocessed.
886
887 file.ii
888 C++ source code that should not be preprocessed.
889
890 file.m
891 Objective-C source code. Note that you must link with the libobjc
892 library to make an Objective-C program work.
893
894 file.mi
895 Objective-C source code that should not be preprocessed.
896
897 file.mm
898 file.M
899 Objective-C++ source code. Note that you must link with the
900 libobjc library to make an Objective-C++ program work. Note that
901 .M refers to a literal capital M.
902
903 file.mii
904 Objective-C++ source code that should not be preprocessed.
905
906 file.h
907 C, C++, Objective-C or Objective-C++ header file to be turned into
908 a precompiled header (default), or C, C++ header file to be turned
909 into an Ada spec (via the -fdump-ada-spec switch).
910
911 file.cc
912 file.cp
913 file.cxx
914 file.cpp
915 file.CPP
916 file.c++
917 file.C
918 C++ source code that must be preprocessed. Note that in .cxx, the
919 last two letters must both be literally x. Likewise, .C refers to
920 a literal capital C.
921
922 file.mm
923 file.M
924 Objective-C++ source code that must be preprocessed.
925
926 file.mii
927 Objective-C++ source code that should not be preprocessed.
928
929 file.hh
930 file.H
931 file.hp
932 file.hxx
933 file.hpp
934 file.HPP
935 file.h++
936 file.tcc
937 C++ header file to be turned into a precompiled header or Ada spec.
938
939 file.f
940 file.for
941 file.ftn
942 Fixed form Fortran source code that should not be preprocessed.
943
944 file.F
945 file.FOR
946 file.fpp
947 file.FPP
948 file.FTN
949 Fixed form Fortran source code that must be preprocessed (with the
950 traditional preprocessor).
951
952 file.f90
953 file.f95
954 file.f03
955 file.f08
956 Free form Fortran source code that should not be preprocessed.
957
958 file.F90
959 file.F95
960 file.F03
961 file.F08
962 Free form Fortran source code that must be preprocessed (with the
963 traditional preprocessor).
964
965 file.go
966 Go source code.
967
968 file.brig
969 BRIG files (binary representation of HSAIL).
970
971 file.ads
972 Ada source code file that contains a library unit declaration (a
973 declaration of a package, subprogram, or generic, or a generic
974 instantiation), or a library unit renaming declaration (a package,
975 generic, or subprogram renaming declaration). Such files are also
976 called specs.
977
978 file.adb
979 Ada source code file containing a library unit body (a subprogram
980 or package body). Such files are also called bodies.
981
982 file.s
983 Assembler code.
984
985 file.S
986 file.sx
987 Assembler code that must be preprocessed.
988
989 other
990 An object file to be fed straight into linking. Any file name with
991 no recognized suffix is treated this way.
992
993 You can specify the input language explicitly with the -x option:
994
995 -x language
996 Specify explicitly the language for the following input files
997 (rather than letting the compiler choose a default based on the
998 file name suffix). This option applies to all following input
999 files until the next -x option. Possible values for language are:
1000
1001 c c-header cpp-output
1002 c++ c++-header c++-cpp-output
1003 objective-c objective-c-header objective-c-cpp-output
1004 objective-c++ objective-c++-header objective-c++-cpp-output
1005 assembler assembler-with-cpp
1006 ada
1007 f77 f77-cpp-input f95 f95-cpp-input
1008 go
1009 brig
1010
1011 -x none
1012 Turn off any specification of a language, so that subsequent files
1013 are handled according to their file name suffixes (as they are if
1014 -x has not been used at all).
1015
1016 If you only want some of the stages of compilation, you can use -x (or
1017 filename suffixes) to tell gcc where to start, and one of the options
1018 -c, -S, or -E to say where gcc is to stop. Note that some combinations
1019 (for example, -x cpp-output -E) instruct gcc to do nothing at all.
1020
1021 -c Compile or assemble the source files, but do not link. The linking
1022 stage simply is not done. The ultimate output is in the form of an
1023 object file for each source file.
1024
1025 By default, the object file name for a source file is made by
1026 replacing the suffix .c, .i, .s, etc., with .o.
1027
1028 Unrecognized input files, not requiring compilation or assembly,
1029 are ignored.
1030
1031 -S Stop after the stage of compilation proper; do not assemble. The
1032 output is in the form of an assembler code file for each non-
1033 assembler input file specified.
1034
1035 By default, the assembler file name for a source file is made by
1036 replacing the suffix .c, .i, etc., with .s.
1037
1038 Input files that don't require compilation are ignored.
1039
1040 -E Stop after the preprocessing stage; do not run the compiler proper.
1041 The output is in the form of preprocessed source code, which is
1042 sent to the standard output.
1043
1044 Input files that don't require preprocessing are ignored.
1045
1046 -o file
1047 Place output in file file. This applies to whatever sort of output
1048 is being produced, whether it be an executable file, an object
1049 file, an assembler file or preprocessed C code.
1050
1051 If -o is not specified, the default is to put an executable file in
1052 a.out, the object file for source.suffix in source.o, its assembler
1053 file in source.s, a precompiled header file in source.suffix.gch,
1054 and all preprocessed C source on standard output.
1055
1056 -v Print (on standard error output) the commands executed to run the
1057 stages of compilation. Also print the version number of the
1058 compiler driver program and of the preprocessor and the compiler
1059 proper.
1060
1061 -###
1062 Like -v except the commands are not executed and arguments are
1063 quoted unless they contain only alphanumeric characters or "./-_".
1064 This is useful for shell scripts to capture the driver-generated
1065 command lines.
1066
1067 --help
1068 Print (on the standard output) a description of the command-line
1069 options understood by gcc. If the -v option is also specified then
1070 --help is also passed on to the various processes invoked by gcc,
1071 so that they can display the command-line options they accept. If
1072 the -Wextra option has also been specified (prior to the --help
1073 option), then command-line options that have no documentation
1074 associated with them are also displayed.
1075
1076 --target-help
1077 Print (on the standard output) a description of target-specific
1078 command-line options for each tool. For some targets extra target-
1079 specific information may also be printed.
1080
1081 --help={class|[^]qualifier}[,...]
1082 Print (on the standard output) a description of the command-line
1083 options understood by the compiler that fit into all specified
1084 classes and qualifiers. These are the supported classes:
1085
1086 optimizers
1087 Display all of the optimization options supported by the
1088 compiler.
1089
1090 warnings
1091 Display all of the options controlling warning messages
1092 produced by the compiler.
1093
1094 target
1095 Display target-specific options. Unlike the --target-help
1096 option however, target-specific options of the linker and
1097 assembler are not displayed. This is because those tools do
1098 not currently support the extended --help= syntax.
1099
1100 params
1101 Display the values recognized by the --param option.
1102
1103 language
1104 Display the options supported for language, where language is
1105 the name of one of the languages supported in this version of
1106 GCC.
1107
1108 common
1109 Display the options that are common to all languages.
1110
1111 These are the supported qualifiers:
1112
1113 undocumented
1114 Display only those options that are undocumented.
1115
1116 joined
1117 Display options taking an argument that appears after an equal
1118 sign in the same continuous piece of text, such as:
1119 --help=target.
1120
1121 separate
1122 Display options taking an argument that appears as a separate
1123 word following the original option, such as: -o output-file.
1124
1125 Thus for example to display all the undocumented target-specific
1126 switches supported by the compiler, use:
1127
1128 --help=target,undocumented
1129
1130 The sense of a qualifier can be inverted by prefixing it with the ^
1131 character, so for example to display all binary warning options
1132 (i.e., ones that are either on or off and that do not take an
1133 argument) that have a description, use:
1134
1135 --help=warnings,^joined,^undocumented
1136
1137 The argument to --help= should not consist solely of inverted
1138 qualifiers.
1139
1140 Combining several classes is possible, although this usually
1141 restricts the output so much that there is nothing to display. One
1142 case where it does work, however, is when one of the classes is
1143 target. For example, to display all the target-specific
1144 optimization options, use:
1145
1146 --help=target,optimizers
1147
1148 The --help= option can be repeated on the command line. Each
1149 successive use displays its requested class of options, skipping
1150 those that have already been displayed.
1151
1152 If the -Q option appears on the command line before the --help=
1153 option, then the descriptive text displayed by --help= is changed.
1154 Instead of describing the displayed options, an indication is given
1155 as to whether the option is enabled, disabled or set to a specific
1156 value (assuming that the compiler knows this at the point where the
1157 --help= option is used).
1158
1159 Here is a truncated example from the ARM port of gcc:
1160
1161 % gcc -Q -mabi=2 --help=target -c
1162 The following options are target specific:
1163 -mabi= 2
1164 -mabort-on-noreturn [disabled]
1165 -mapcs [disabled]
1166
1167 The output is sensitive to the effects of previous command-line
1168 options, so for example it is possible to find out which
1169 optimizations are enabled at -O2 by using:
1170
1171 -Q -O2 --help=optimizers
1172
1173 Alternatively you can discover which binary optimizations are
1174 enabled by -O3 by using:
1175
1176 gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
1177 gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
1178 diff /tmp/O2-opts /tmp/O3-opts | grep enabled
1179
1180 --version
1181 Display the version number and copyrights of the invoked GCC.
1182
1183 -pass-exit-codes
1184 Normally the gcc program exits with the code of 1 if any phase of
1185 the compiler returns a non-success return code. If you specify
1186 -pass-exit-codes, the gcc program instead returns with the
1187 numerically highest error produced by any phase returning an error
1188 indication. The C, C++, and Fortran front ends return 4 if an
1189 internal compiler error is encountered.
1190
1191 -pipe
1192 Use pipes rather than temporary files for communication between the
1193 various stages of compilation. This fails to work on some systems
1194 where the assembler is unable to read from a pipe; but the GNU
1195 assembler has no trouble.
1196
1197 -specs=file
1198 Process file after the compiler reads in the standard specs file,
1199 in order to override the defaults which the gcc driver program uses
1200 when determining what switches to pass to cc1, cc1plus, as, ld,
1201 etc. More than one -specs=file can be specified on the command
1202 line, and they are processed in order, from left to right.
1203
1204 -wrapper
1205 Invoke all subcommands under a wrapper program. The name of the
1206 wrapper program and its parameters are passed as a comma separated
1207 list.
1208
1209 gcc -c t.c -wrapper gdb,--args
1210
1211 This invokes all subprograms of gcc under gdb --args, thus the
1212 invocation of cc1 is gdb --args cc1 ....
1213
1214 -ffile-prefix-map=old=new
1215 When compiling files residing in directory old, record any
1216 references to them in the result of the compilation as if the files
1217 resided in directory new instead. Specifying this option is
1218 equivalent to specifying all the individual -f*-prefix-map options.
1219 This can be used to make reproducible builds that are location
1220 independent. See also -fmacro-prefix-map and -fdebug-prefix-map.
1221
1222 -fplugin=name.so
1223 Load the plugin code in file name.so, assumed to be a shared object
1224 to be dlopen'd by the compiler. The base name of the shared object
1225 file is used to identify the plugin for the purposes of argument
1226 parsing (See -fplugin-arg-name-key=value below). Each plugin
1227 should define the callback functions specified in the Plugins API.
1228
1229 -fplugin-arg-name-key=value
1230 Define an argument called key with a value of value for the plugin
1231 called name.
1232
1233 -fdump-ada-spec[-slim]
1234 For C and C++ source and include files, generate corresponding Ada
1235 specs.
1236
1237 -fada-spec-parent=unit
1238 In conjunction with -fdump-ada-spec[-slim] above, generate Ada
1239 specs as child units of parent unit.
1240
1241 -fdump-go-spec=file
1242 For input files in any language, generate corresponding Go
1243 declarations in file. This generates Go "const", "type", "var",
1244 and "func" declarations which may be a useful way to start writing
1245 a Go interface to code written in some other language.
1246
1247 @file
1248 Read command-line options from file. The options read are inserted
1249 in place of the original @file option. If file does not exist, or
1250 cannot be read, then the option will be treated literally, and not
1251 removed.
1252
1253 Options in file are separated by whitespace. A whitespace
1254 character may be included in an option by surrounding the entire
1255 option in either single or double quotes. Any character (including
1256 a backslash) may be included by prefixing the character to be
1257 included with a backslash. The file may itself contain additional
1258 @file options; any such options will be processed recursively.
1259
1260 Compiling C++ Programs
1261 C++ source files conventionally use one of the suffixes .C, .cc, .cpp,
1262 .CPP, .c++, .cp, or .cxx; C++ header files often use .hh, .hpp, .H, or
1263 (for shared template code) .tcc; and preprocessed C++ files use the
1264 suffix .ii. GCC recognizes files with these names and compiles them as
1265 C++ programs even if you call the compiler the same way as for
1266 compiling C programs (usually with the name gcc).
1267
1268 However, the use of gcc does not add the C++ library. g++ is a program
1269 that calls GCC and automatically specifies linking against the C++
1270 library. It treats .c, .h and .i files as C++ source files instead of
1271 C source files unless -x is used. This program is also useful when
1272 precompiling a C header file with a .h extension for use in C++
1273 compilations. On many systems, g++ is also installed with the name
1274 c++.
1275
1276 When you compile C++ programs, you may specify many of the same
1277 command-line options that you use for compiling programs in any
1278 language; or command-line options meaningful for C and related
1279 languages; or options that are meaningful only for C++ programs.
1280
1281 Options Controlling C Dialect
1282 The following options control the dialect of C (or languages derived
1283 from C, such as C++, Objective-C and Objective-C++) that the compiler
1284 accepts:
1285
1286 -ansi
1287 In C mode, this is equivalent to -std=c90. In C++ mode, it is
1288 equivalent to -std=c++98.
1289
1290 This turns off certain features of GCC that are incompatible with
1291 ISO C90 (when compiling C code), or of standard C++ (when compiling
1292 C++ code), such as the "asm" and "typeof" keywords, and predefined
1293 macros such as "unix" and "vax" that identify the type of system
1294 you are using. It also enables the undesirable and rarely used ISO
1295 trigraph feature. For the C compiler, it disables recognition of
1296 C++ style // comments as well as the "inline" keyword.
1297
1298 The alternate keywords "__asm__", "__extension__", "__inline__" and
1299 "__typeof__" continue to work despite -ansi. You would not want to
1300 use them in an ISO C program, of course, but it is useful to put
1301 them in header files that might be included in compilations done
1302 with -ansi. Alternate predefined macros such as "__unix__" and
1303 "__vax__" are also available, with or without -ansi.
1304
1305 The -ansi option does not cause non-ISO programs to be rejected
1306 gratuitously. For that, -Wpedantic is required in addition to
1307 -ansi.
1308
1309 The macro "__STRICT_ANSI__" is predefined when the -ansi option is
1310 used. Some header files may notice this macro and refrain from
1311 declaring certain functions or defining certain macros that the ISO
1312 standard doesn't call for; this is to avoid interfering with any
1313 programs that might use these names for other things.
1314
1315 Functions that are normally built in but do not have semantics
1316 defined by ISO C (such as "alloca" and "ffs") are not built-in
1317 functions when -ansi is used.
1318
1319 -std=
1320 Determine the language standard. This option is currently only
1321 supported when compiling C or C++.
1322
1323 The compiler can accept several base standards, such as c90 or
1324 c++98, and GNU dialects of those standards, such as gnu90 or
1325 gnu++98. When a base standard is specified, the compiler accepts
1326 all programs following that standard plus those using GNU
1327 extensions that do not contradict it. For example, -std=c90 turns
1328 off certain features of GCC that are incompatible with ISO C90,
1329 such as the "asm" and "typeof" keywords, but not other GNU
1330 extensions that do not have a meaning in ISO C90, such as omitting
1331 the middle term of a "?:" expression. On the other hand, when a GNU
1332 dialect of a standard is specified, all features supported by the
1333 compiler are enabled, even when those features change the meaning
1334 of the base standard. As a result, some strict-conforming programs
1335 may be rejected. The particular standard is used by -Wpedantic to
1336 identify which features are GNU extensions given that version of
1337 the standard. For example -std=gnu90 -Wpedantic warns about C++
1338 style // comments, while -std=gnu99 -Wpedantic does not.
1339
1340 A value for this option must be provided; possible values are
1341
1342 c90
1343 c89
1344 iso9899:1990
1345 Support all ISO C90 programs (certain GNU extensions that
1346 conflict with ISO C90 are disabled). Same as -ansi for C code.
1347
1348 iso9899:199409
1349 ISO C90 as modified in amendment 1.
1350
1351 c99
1352 c9x
1353 iso9899:1999
1354 iso9899:199x
1355 ISO C99. This standard is substantially completely supported,
1356 modulo bugs and floating-point issues (mainly but not entirely
1357 relating to optional C99 features from Annexes F and G). See
1358 <http://gcc.gnu.org/c99status.html> for more information. The
1359 names c9x and iso9899:199x are deprecated.
1360
1361 c11
1362 c1x
1363 iso9899:2011
1364 ISO C11, the 2011 revision of the ISO C standard. This
1365 standard is substantially completely supported, modulo bugs,
1366 floating-point issues (mainly but not entirely relating to
1367 optional C11 features from Annexes F and G) and the optional
1368 Annexes K (Bounds-checking interfaces) and L (Analyzability).
1369 The name c1x is deprecated.
1370
1371 c17
1372 c18
1373 iso9899:2017
1374 iso9899:2018
1375 ISO C17, the 2017 revision of the ISO C standard (expected to
1376 be published in 2018). This standard is same as C11 except for
1377 corrections of defects (all of which are also applied with
1378 -std=c11) and a new value of "__STDC_VERSION__", and so is
1379 supported to the same extent as C11.
1380
1381 gnu90
1382 gnu89
1383 GNU dialect of ISO C90 (including some C99 features).
1384
1385 gnu99
1386 gnu9x
1387 GNU dialect of ISO C99. The name gnu9x is deprecated.
1388
1389 gnu11
1390 gnu1x
1391 GNU dialect of ISO C11. The name gnu1x is deprecated.
1392
1393 gnu17
1394 gnu18
1395 GNU dialect of ISO C17. This is the default for C code.
1396
1397 c++98
1398 c++03
1399 The 1998 ISO C++ standard plus the 2003 technical corrigendum
1400 and some additional defect reports. Same as -ansi for C++ code.
1401
1402 gnu++98
1403 gnu++03
1404 GNU dialect of -std=c++98.
1405
1406 c++11
1407 c++0x
1408 The 2011 ISO C++ standard plus amendments. The name c++0x is
1409 deprecated.
1410
1411 gnu++11
1412 gnu++0x
1413 GNU dialect of -std=c++11. The name gnu++0x is deprecated.
1414
1415 c++14
1416 c++1y
1417 The 2014 ISO C++ standard plus amendments. The name c++1y is
1418 deprecated.
1419
1420 gnu++14
1421 gnu++1y
1422 GNU dialect of -std=c++14. This is the default for C++ code.
1423 The name gnu++1y is deprecated.
1424
1425 c++17
1426 c++1z
1427 The 2017 ISO C++ standard plus amendments. The name c++1z is
1428 deprecated.
1429
1430 gnu++17
1431 gnu++1z
1432 GNU dialect of -std=c++17. The name gnu++1z is deprecated.
1433
1434 c++2a
1435 The next revision of the ISO C++ standard, tentatively planned
1436 for 2020. Support is highly experimental, and will almost
1437 certainly change in incompatible ways in future releases.
1438
1439 gnu++2a
1440 GNU dialect of -std=c++2a. Support is highly experimental, and
1441 will almost certainly change in incompatible ways in future
1442 releases.
1443
1444 -fgnu89-inline
1445 The option -fgnu89-inline tells GCC to use the traditional GNU
1446 semantics for "inline" functions when in C99 mode.
1447
1448 Using this option is roughly equivalent to adding the "gnu_inline"
1449 function attribute to all inline functions.
1450
1451 The option -fno-gnu89-inline explicitly tells GCC to use the C99
1452 semantics for "inline" when in C99 or gnu99 mode (i.e., it
1453 specifies the default behavior). This option is not supported in
1454 -std=c90 or -std=gnu90 mode.
1455
1456 The preprocessor macros "__GNUC_GNU_INLINE__" and
1457 "__GNUC_STDC_INLINE__" may be used to check which semantics are in
1458 effect for "inline" functions.
1459
1460 -fpermitted-flt-eval-methods=style
1461 ISO/IEC TS 18661-3 defines new permissible values for
1462 "FLT_EVAL_METHOD" that indicate that operations and constants with
1463 a semantic type that is an interchange or extended format should be
1464 evaluated to the precision and range of that type. These new
1465 values are a superset of those permitted under C99/C11, which does
1466 not specify the meaning of other positive values of
1467 "FLT_EVAL_METHOD". As such, code conforming to C11 may not have
1468 been written expecting the possibility of the new values.
1469
1470 -fpermitted-flt-eval-methods specifies whether the compiler should
1471 allow only the values of "FLT_EVAL_METHOD" specified in C99/C11, or
1472 the extended set of values specified in ISO/IEC TS 18661-3.
1473
1474 style is either "c11" or "ts-18661-3" as appropriate.
1475
1476 The default when in a standards compliant mode (-std=c11 or
1477 similar) is -fpermitted-flt-eval-methods=c11. The default when in
1478 a GNU dialect (-std=gnu11 or similar) is
1479 -fpermitted-flt-eval-methods=ts-18661-3.
1480
1481 -aux-info filename
1482 Output to the given filename prototyped declarations for all
1483 functions declared and/or defined in a translation unit, including
1484 those in header files. This option is silently ignored in any
1485 language other than C.
1486
1487 Besides declarations, the file indicates, in comments, the origin
1488 of each declaration (source file and line), whether the declaration
1489 was implicit, prototyped or unprototyped (I, N for new or O for
1490 old, respectively, in the first character after the line number and
1491 the colon), and whether it came from a declaration or a definition
1492 (C or F, respectively, in the following character). In the case of
1493 function definitions, a K&R-style list of arguments followed by
1494 their declarations is also provided, inside comments, after the
1495 declaration.
1496
1497 -fallow-parameterless-variadic-functions
1498 Accept variadic functions without named parameters.
1499
1500 Although it is possible to define such a function, this is not very
1501 useful as it is not possible to read the arguments. This is only
1502 supported for C as this construct is allowed by C++.
1503
1504 -fno-asm
1505 Do not recognize "asm", "inline" or "typeof" as a keyword, so that
1506 code can use these words as identifiers. You can use the keywords
1507 "__asm__", "__inline__" and "__typeof__" instead. -ansi implies
1508 -fno-asm.
1509
1510 In C++, this switch only affects the "typeof" keyword, since "asm"
1511 and "inline" are standard keywords. You may want to use the
1512 -fno-gnu-keywords flag instead, which has the same effect. In C99
1513 mode (-std=c99 or -std=gnu99), this switch only affects the "asm"
1514 and "typeof" keywords, since "inline" is a standard keyword in ISO
1515 C99.
1516
1517 -fno-builtin
1518 -fno-builtin-function
1519 Don't recognize built-in functions that do not begin with
1520 __builtin_ as prefix.
1521
1522 GCC normally generates special code to handle certain built-in
1523 functions more efficiently; for instance, calls to "alloca" may
1524 become single instructions which adjust the stack directly, and
1525 calls to "memcpy" may become inline copy loops. The resulting code
1526 is often both smaller and faster, but since the function calls no
1527 longer appear as such, you cannot set a breakpoint on those calls,
1528 nor can you change the behavior of the functions by linking with a
1529 different library. In addition, when a function is recognized as a
1530 built-in function, GCC may use information about that function to
1531 warn about problems with calls to that function, or to generate
1532 more efficient code, even if the resulting code still contains
1533 calls to that function. For example, warnings are given with
1534 -Wformat for bad calls to "printf" when "printf" is built in and
1535 "strlen" is known not to modify global memory.
1536
1537 With the -fno-builtin-function option only the built-in function
1538 function is disabled. function must not begin with __builtin_. If
1539 a function is named that is not built-in in this version of GCC,
1540 this option is ignored. There is no corresponding
1541 -fbuiltin-function option; if you wish to enable built-in functions
1542 selectively when using -fno-builtin or -ffreestanding, you may
1543 define macros such as:
1544
1545 #define abs(n) __builtin_abs ((n))
1546 #define strcpy(d, s) __builtin_strcpy ((d), (s))
1547
1548 -fgimple
1549 Enable parsing of function definitions marked with "__GIMPLE".
1550 This is an experimental feature that allows unit testing of GIMPLE
1551 passes.
1552
1553 -fhosted
1554 Assert that compilation targets a hosted environment. This implies
1555 -fbuiltin. A hosted environment is one in which the entire
1556 standard library is available, and in which "main" has a return
1557 type of "int". Examples are nearly everything except a kernel.
1558 This is equivalent to -fno-freestanding.
1559
1560 -ffreestanding
1561 Assert that compilation targets a freestanding environment. This
1562 implies -fno-builtin. A freestanding environment is one in which
1563 the standard library may not exist, and program startup may not
1564 necessarily be at "main". The most obvious example is an OS
1565 kernel. This is equivalent to -fno-hosted.
1566
1567 -fopenacc
1568 Enable handling of OpenACC directives "#pragma acc" in C/C++ and
1569 "!$acc" in Fortran. When -fopenacc is specified, the compiler
1570 generates accelerated code according to the OpenACC Application
1571 Programming Interface v2.0 <https://www.openacc.org>. This option
1572 implies -pthread, and thus is only supported on targets that have
1573 support for -pthread.
1574
1575 -fopenacc-dim=geom
1576 Specify default compute dimensions for parallel offload regions
1577 that do not explicitly specify. The geom value is a triple of
1578 ':'-separated sizes, in order 'gang', 'worker' and, 'vector'. A
1579 size can be omitted, to use a target-specific default value.
1580
1581 -fopenmp
1582 Enable handling of OpenMP directives "#pragma omp" in C/C++ and
1583 "!$omp" in Fortran. When -fopenmp is specified, the compiler
1584 generates parallel code according to the OpenMP Application Program
1585 Interface v4.5 <http://www.openmp.org/>. This option implies
1586 -pthread, and thus is only supported on targets that have support
1587 for -pthread. -fopenmp implies -fopenmp-simd.
1588
1589 -fopenmp-simd
1590 Enable handling of OpenMP's SIMD directives with "#pragma omp" in
1591 C/C++ and "!$omp" in Fortran. Other OpenMP directives are ignored.
1592
1593 -fgnu-tm
1594 When the option -fgnu-tm is specified, the compiler generates code
1595 for the Linux variant of Intel's current Transactional Memory ABI
1596 specification document (Revision 1.1, May 6 2009). This is an
1597 experimental feature whose interface may change in future versions
1598 of GCC, as the official specification changes. Please note that
1599 not all architectures are supported for this feature.
1600
1601 For more information on GCC's support for transactional memory,
1602
1603 Note that the transactional memory feature is not supported with
1604 non-call exceptions (-fnon-call-exceptions).
1605
1606 -fms-extensions
1607 Accept some non-standard constructs used in Microsoft header files.
1608
1609 In C++ code, this allows member names in structures to be similar
1610 to previous types declarations.
1611
1612 typedef int UOW;
1613 struct ABC {
1614 UOW UOW;
1615 };
1616
1617 Some cases of unnamed fields in structures and unions are only
1618 accepted with this option.
1619
1620 Note that this option is off for all targets but x86 targets using
1621 ms-abi.
1622
1623 -fplan9-extensions
1624 Accept some non-standard constructs used in Plan 9 code.
1625
1626 This enables -fms-extensions, permits passing pointers to
1627 structures with anonymous fields to functions that expect pointers
1628 to elements of the type of the field, and permits referring to
1629 anonymous fields declared using a typedef. This is only
1630 supported for C, not C++.
1631
1632 -fcond-mismatch
1633 Allow conditional expressions with mismatched types in the second
1634 and third arguments. The value of such an expression is void.
1635 This option is not supported for C++.
1636
1637 -flax-vector-conversions
1638 Allow implicit conversions between vectors with differing numbers
1639 of elements and/or incompatible element types. This option should
1640 not be used for new code.
1641
1642 -funsigned-char
1643 Let the type "char" be unsigned, like "unsigned char".
1644
1645 Each kind of machine has a default for what "char" should be. It
1646 is either like "unsigned char" by default or like "signed char" by
1647 default.
1648
1649 Ideally, a portable program should always use "signed char" or
1650 "unsigned char" when it depends on the signedness of an object.
1651 But many programs have been written to use plain "char" and expect
1652 it to be signed, or expect it to be unsigned, depending on the
1653 machines they were written for. This option, and its inverse, let
1654 you make such a program work with the opposite default.
1655
1656 The type "char" is always a distinct type from each of "signed
1657 char" or "unsigned char", even though its behavior is always just
1658 like one of those two.
1659
1660 -fsigned-char
1661 Let the type "char" be signed, like "signed char".
1662
1663 Note that this is equivalent to -fno-unsigned-char, which is the
1664 negative form of -funsigned-char. Likewise, the option
1665 -fno-signed-char is equivalent to -funsigned-char.
1666
1667 -fsigned-bitfields
1668 -funsigned-bitfields
1669 -fno-signed-bitfields
1670 -fno-unsigned-bitfields
1671 These options control whether a bit-field is signed or unsigned,
1672 when the declaration does not use either "signed" or "unsigned".
1673 By default, such a bit-field is signed, because this is consistent:
1674 the basic integer types such as "int" are signed types.
1675
1676 -fsso-struct=endianness
1677 Set the default scalar storage order of structures and unions to
1678 the specified endianness. The accepted values are big-endian,
1679 little-endian and native for the native endianness of the target
1680 (the default). This option is not supported for C++.
1681
1682 Warning: the -fsso-struct switch causes GCC to generate code that
1683 is not binary compatible with code generated without it if the
1684 specified endianness is not the native endianness of the target.
1685
1686 Options Controlling C++ Dialect
1687 This section describes the command-line options that are only
1688 meaningful for C++ programs. You can also use most of the GNU compiler
1689 options regardless of what language your program is in. For example,
1690 you might compile a file firstClass.C like this:
1691
1692 g++ -g -fstrict-enums -O -c firstClass.C
1693
1694 In this example, only -fstrict-enums is an option meant only for C++
1695 programs; you can use the other options with any language supported by
1696 GCC.
1697
1698 Some options for compiling C programs, such as -std, are also relevant
1699 for C++ programs.
1700
1701 Here is a list of options that are only for compiling C++ programs:
1702
1703 -fabi-version=n
1704 Use version n of the C++ ABI. The default is version 0.
1705
1706 Version 0 refers to the version conforming most closely to the C++
1707 ABI specification. Therefore, the ABI obtained using version 0
1708 will change in different versions of G++ as ABI bugs are fixed.
1709
1710 Version 1 is the version of the C++ ABI that first appeared in G++
1711 3.2.
1712
1713 Version 2 is the version of the C++ ABI that first appeared in G++
1714 3.4, and was the default through G++ 4.9.
1715
1716 Version 3 corrects an error in mangling a constant address as a
1717 template argument.
1718
1719 Version 4, which first appeared in G++ 4.5, implements a standard
1720 mangling for vector types.
1721
1722 Version 5, which first appeared in G++ 4.6, corrects the mangling
1723 of attribute const/volatile on function pointer types, decltype of
1724 a plain decl, and use of a function parameter in the declaration of
1725 another parameter.
1726
1727 Version 6, which first appeared in G++ 4.7, corrects the promotion
1728 behavior of C++11 scoped enums and the mangling of template
1729 argument packs, const/static_cast, prefix ++ and --, and a class
1730 scope function used as a template argument.
1731
1732 Version 7, which first appeared in G++ 4.8, that treats nullptr_t
1733 as a builtin type and corrects the mangling of lambdas in default
1734 argument scope.
1735
1736 Version 8, which first appeared in G++ 4.9, corrects the
1737 substitution behavior of function types with function-cv-
1738 qualifiers.
1739
1740 Version 9, which first appeared in G++ 5.2, corrects the alignment
1741 of "nullptr_t".
1742
1743 Version 10, which first appeared in G++ 6.1, adds mangling of
1744 attributes that affect type identity, such as ia32 calling
1745 convention attributes (e.g. stdcall).
1746
1747 Version 11, which first appeared in G++ 7, corrects the mangling of
1748 sizeof... expressions and operator names. For multiple entities
1749 with the same name within a function, that are declared in
1750 different scopes, the mangling now changes starting with the
1751 twelfth occurrence. It also implies -fnew-inheriting-ctors.
1752
1753 Version 12, which first appeared in G++ 8, corrects the calling
1754 conventions for empty classes on the x86_64 target and for classes
1755 with only deleted copy/move constructors. It accidentally changes
1756 the calling convention for classes with a deleted copy constructor
1757 and a trivial move constructor.
1758
1759 Version 13, which first appeared in G++ 8.2, fixes the accidental
1760 change in version 12.
1761
1762 See also -Wabi.
1763
1764 -fabi-compat-version=n
1765 On targets that support strong aliases, G++ works around mangling
1766 changes by creating an alias with the correct mangled name when
1767 defining a symbol with an incorrect mangled name. This switch
1768 specifies which ABI version to use for the alias.
1769
1770 With -fabi-version=0 (the default), this defaults to 11 (GCC 7
1771 compatibility). If another ABI version is explicitly selected,
1772 this defaults to 0. For compatibility with GCC versions 3.2
1773 through 4.9, use -fabi-compat-version=2.
1774
1775 If this option is not provided but -Wabi=n is, that version is used
1776 for compatibility aliases. If this option is provided along with
1777 -Wabi (without the version), the version from this option is used
1778 for the warning.
1779
1780 -fno-access-control
1781 Turn off all access checking. This switch is mainly useful for
1782 working around bugs in the access control code.
1783
1784 -faligned-new
1785 Enable support for C++17 "new" of types that require more alignment
1786 than "void* ::operator new(std::size_t)" provides. A numeric
1787 argument such as "-faligned-new=32" can be used to specify how much
1788 alignment (in bytes) is provided by that function, but few users
1789 will need to override the default of "alignof(std::max_align_t)".
1790
1791 This flag is enabled by default for -std=c++17.
1792
1793 -fcheck-new
1794 Check that the pointer returned by "operator new" is non-null
1795 before attempting to modify the storage allocated. This check is
1796 normally unnecessary because the C++ standard specifies that
1797 "operator new" only returns 0 if it is declared "throw()", in which
1798 case the compiler always checks the return value even without this
1799 option. In all other cases, when "operator new" has a non-empty
1800 exception specification, memory exhaustion is signalled by throwing
1801 "std::bad_alloc". See also new (nothrow).
1802
1803 -fconcepts
1804 Enable support for the C++ Extensions for Concepts Technical
1805 Specification, ISO 19217 (2015), which allows code like
1806
1807 template <class T> concept bool Addable = requires (T t) { t + t; };
1808 template <Addable T> T add (T a, T b) { return a + b; }
1809
1810 -fconstexpr-depth=n
1811 Set the maximum nested evaluation depth for C++11 constexpr
1812 functions to n. A limit is needed to detect endless recursion
1813 during constant expression evaluation. The minimum specified by
1814 the standard is 512.
1815
1816 -fconstexpr-loop-limit=n
1817 Set the maximum number of iterations for a loop in C++14 constexpr
1818 functions to n. A limit is needed to detect infinite loops during
1819 constant expression evaluation. The default is 262144 (1<<18).
1820
1821 -fdeduce-init-list
1822 Enable deduction of a template type parameter as
1823 "std::initializer_list" from a brace-enclosed initializer list,
1824 i.e.
1825
1826 template <class T> auto forward(T t) -> decltype (realfn (t))
1827 {
1828 return realfn (t);
1829 }
1830
1831 void f()
1832 {
1833 forward({1,2}); // call forward<std::initializer_list<int>>
1834 }
1835
1836 This deduction was implemented as a possible extension to the
1837 originally proposed semantics for the C++11 standard, but was not
1838 part of the final standard, so it is disabled by default. This
1839 option is deprecated, and may be removed in a future version of
1840 G++.
1841
1842 -ffriend-injection
1843 Inject friend functions into the enclosing namespace, so that they
1844 are visible outside the scope of the class in which they are
1845 declared. Friend functions were documented to work this way in the
1846 old Annotated C++ Reference Manual. However, in ISO C++ a friend
1847 function that is not declared in an enclosing scope can only be
1848 found using argument dependent lookup. GCC defaults to the
1849 standard behavior.
1850
1851 This option is deprecated and will be removed.
1852
1853 -fno-elide-constructors
1854 The C++ standard allows an implementation to omit creating a
1855 temporary that is only used to initialize another object of the
1856 same type. Specifying this option disables that optimization, and
1857 forces G++ to call the copy constructor in all cases. This option
1858 also causes G++ to call trivial member functions which otherwise
1859 would be expanded inline.
1860
1861 In C++17, the compiler is required to omit these temporaries, but
1862 this option still affects trivial member functions.
1863
1864 -fno-enforce-eh-specs
1865 Don't generate code to check for violation of exception
1866 specifications at run time. This option violates the C++ standard,
1867 but may be useful for reducing code size in production builds, much
1868 like defining "NDEBUG". This does not give user code permission to
1869 throw exceptions in violation of the exception specifications; the
1870 compiler still optimizes based on the specifications, so throwing
1871 an unexpected exception results in undefined behavior at run time.
1872
1873 -fextern-tls-init
1874 -fno-extern-tls-init
1875 The C++11 and OpenMP standards allow "thread_local" and
1876 "threadprivate" variables to have dynamic (runtime) initialization.
1877 To support this, any use of such a variable goes through a wrapper
1878 function that performs any necessary initialization. When the use
1879 and definition of the variable are in the same translation unit,
1880 this overhead can be optimized away, but when the use is in a
1881 different translation unit there is significant overhead even if
1882 the variable doesn't actually need dynamic initialization. If the
1883 programmer can be sure that no use of the variable in a non-
1884 defining TU needs to trigger dynamic initialization (either because
1885 the variable is statically initialized, or a use of the variable in
1886 the defining TU will be executed before any uses in another TU),
1887 they can avoid this overhead with the -fno-extern-tls-init option.
1888
1889 On targets that support symbol aliases, the default is
1890 -fextern-tls-init. On targets that do not support symbol aliases,
1891 the default is -fno-extern-tls-init.
1892
1893 -ffor-scope
1894 -fno-for-scope
1895 If -ffor-scope is specified, the scope of variables declared in a
1896 for-init-statement is limited to the "for" loop itself, as
1897 specified by the C++ standard. If -fno-for-scope is specified, the
1898 scope of variables declared in a for-init-statement extends to the
1899 end of the enclosing scope, as was the case in old versions of G++,
1900 and other (traditional) implementations of C++.
1901
1902 This option is deprecated and the associated non-standard
1903 functionality will be removed.
1904
1905 -fno-gnu-keywords
1906 Do not recognize "typeof" as a keyword, so that code can use this
1907 word as an identifier. You can use the keyword "__typeof__"
1908 instead. This option is implied by the strict ISO C++ dialects:
1909 -ansi, -std=c++98, -std=c++11, etc.
1910
1911 -fno-implicit-templates
1912 Never emit code for non-inline templates that are instantiated
1913 implicitly (i.e. by use); only emit code for explicit
1914 instantiations.
1915
1916 -fno-implicit-inline-templates
1917 Don't emit code for implicit instantiations of inline templates,
1918 either. The default is to handle inlines differently so that
1919 compiles with and without optimization need the same set of
1920 explicit instantiations.
1921
1922 -fno-implement-inlines
1923 To save space, do not emit out-of-line copies of inline functions
1924 controlled by "#pragma implementation". This causes linker errors
1925 if these functions are not inlined everywhere they are called.
1926
1927 -fms-extensions
1928 Disable Wpedantic warnings about constructs used in MFC, such as
1929 implicit int and getting a pointer to member function via non-
1930 standard syntax.
1931
1932 -fnew-inheriting-ctors
1933 Enable the P0136 adjustment to the semantics of C++11 constructor
1934 inheritance. This is part of C++17 but also considered to be a
1935 Defect Report against C++11 and C++14. This flag is enabled by
1936 default unless -fabi-version=10 or lower is specified.
1937
1938 -fnew-ttp-matching
1939 Enable the P0522 resolution to Core issue 150, template template
1940 parameters and default arguments: this allows a template with
1941 default template arguments as an argument for a template template
1942 parameter with fewer template parameters. This flag is enabled by
1943 default for -std=c++17.
1944
1945 -fno-nonansi-builtins
1946 Disable built-in declarations of functions that are not mandated by
1947 ANSI/ISO C. These include "ffs", "alloca", "_exit", "index",
1948 "bzero", "conjf", and other related functions.
1949
1950 -fnothrow-opt
1951 Treat a "throw()" exception specification as if it were a
1952 "noexcept" specification to reduce or eliminate the text size
1953 overhead relative to a function with no exception specification.
1954 If the function has local variables of types with non-trivial
1955 destructors, the exception specification actually makes the
1956 function smaller because the EH cleanups for those variables can be
1957 optimized away. The semantic effect is that an exception thrown
1958 out of a function with such an exception specification results in a
1959 call to "terminate" rather than "unexpected".
1960
1961 -fno-operator-names
1962 Do not treat the operator name keywords "and", "bitand", "bitor",
1963 "compl", "not", "or" and "xor" as synonyms as keywords.
1964
1965 -fno-optional-diags
1966 Disable diagnostics that the standard says a compiler does not need
1967 to issue. Currently, the only such diagnostic issued by G++ is the
1968 one for a name having multiple meanings within a class.
1969
1970 -fpermissive
1971 Downgrade some diagnostics about nonconformant code from errors to
1972 warnings. Thus, using -fpermissive allows some nonconforming code
1973 to compile.
1974
1975 -fno-pretty-templates
1976 When an error message refers to a specialization of a function
1977 template, the compiler normally prints the signature of the
1978 template followed by the template arguments and any typedefs or
1979 typenames in the signature (e.g. "void f(T) [with T = int]" rather
1980 than "void f(int)") so that it's clear which template is involved.
1981 When an error message refers to a specialization of a class
1982 template, the compiler omits any template arguments that match the
1983 default template arguments for that template. If either of these
1984 behaviors make it harder to understand the error message rather
1985 than easier, you can use -fno-pretty-templates to disable them.
1986
1987 -frepo
1988 Enable automatic template instantiation at link time. This option
1989 also implies -fno-implicit-templates.
1990
1991 -fno-rtti
1992 Disable generation of information about every class with virtual
1993 functions for use by the C++ run-time type identification features
1994 ("dynamic_cast" and "typeid"). If you don't use those parts of the
1995 language, you can save some space by using this flag. Note that
1996 exception handling uses the same information, but G++ generates it
1997 as needed. The "dynamic_cast" operator can still be used for casts
1998 that do not require run-time type information, i.e. casts to "void
1999 *" or to unambiguous base classes.
2000
2001 -fsized-deallocation
2002 Enable the built-in global declarations
2003
2004 void operator delete (void *, std::size_t) noexcept;
2005 void operator delete[] (void *, std::size_t) noexcept;
2006
2007 as introduced in C++14. This is useful for user-defined
2008 replacement deallocation functions that, for example, use the size
2009 of the object to make deallocation faster. Enabled by default
2010 under -std=c++14 and above. The flag -Wsized-deallocation warns
2011 about places that might want to add a definition.
2012
2013 -fstrict-enums
2014 Allow the compiler to optimize using the assumption that a value of
2015 enumerated type can only be one of the values of the enumeration
2016 (as defined in the C++ standard; basically, a value that can be
2017 represented in the minimum number of bits needed to represent all
2018 the enumerators). This assumption may not be valid if the program
2019 uses a cast to convert an arbitrary integer value to the enumerated
2020 type.
2021
2022 -fstrong-eval-order
2023 Evaluate member access, array subscripting, and shift expressions
2024 in left-to-right order, and evaluate assignment in right-to-left
2025 order, as adopted for C++17. Enabled by default with -std=c++17.
2026 -fstrong-eval-order=some enables just the ordering of member access
2027 and shift expressions, and is the default without -std=c++17.
2028
2029 -ftemplate-backtrace-limit=n
2030 Set the maximum number of template instantiation notes for a single
2031 warning or error to n. The default value is 10.
2032
2033 -ftemplate-depth=n
2034 Set the maximum instantiation depth for template classes to n. A
2035 limit on the template instantiation depth is needed to detect
2036 endless recursions during template class instantiation. ANSI/ISO
2037 C++ conforming programs must not rely on a maximum depth greater
2038 than 17 (changed to 1024 in C++11). The default value is 900, as
2039 the compiler can run out of stack space before hitting 1024 in some
2040 situations.
2041
2042 -fno-threadsafe-statics
2043 Do not emit the extra code to use the routines specified in the C++
2044 ABI for thread-safe initialization of local statics. You can use
2045 this option to reduce code size slightly in code that doesn't need
2046 to be thread-safe.
2047
2048 -fuse-cxa-atexit
2049 Register destructors for objects with static storage duration with
2050 the "__cxa_atexit" function rather than the "atexit" function.
2051 This option is required for fully standards-compliant handling of
2052 static destructors, but only works if your C library supports
2053 "__cxa_atexit".
2054
2055 -fno-use-cxa-get-exception-ptr
2056 Don't use the "__cxa_get_exception_ptr" runtime routine. This
2057 causes "std::uncaught_exception" to be incorrect, but is necessary
2058 if the runtime routine is not available.
2059
2060 -fvisibility-inlines-hidden
2061 This switch declares that the user does not attempt to compare
2062 pointers to inline functions or methods where the addresses of the
2063 two functions are taken in different shared objects.
2064
2065 The effect of this is that GCC may, effectively, mark inline
2066 methods with "__attribute__ ((visibility ("hidden")))" so that they
2067 do not appear in the export table of a DSO and do not require a PLT
2068 indirection when used within the DSO. Enabling this option can
2069 have a dramatic effect on load and link times of a DSO as it
2070 massively reduces the size of the dynamic export table when the
2071 library makes heavy use of templates.
2072
2073 The behavior of this switch is not quite the same as marking the
2074 methods as hidden directly, because it does not affect static
2075 variables local to the function or cause the compiler to deduce
2076 that the function is defined in only one shared object.
2077
2078 You may mark a method as having a visibility explicitly to negate
2079 the effect of the switch for that method. For example, if you do
2080 want to compare pointers to a particular inline method, you might
2081 mark it as having default visibility. Marking the enclosing class
2082 with explicit visibility has no effect.
2083
2084 Explicitly instantiated inline methods are unaffected by this
2085 option as their linkage might otherwise cross a shared library
2086 boundary.
2087
2088 -fvisibility-ms-compat
2089 This flag attempts to use visibility settings to make GCC's C++
2090 linkage model compatible with that of Microsoft Visual Studio.
2091
2092 The flag makes these changes to GCC's linkage model:
2093
2094 1. It sets the default visibility to "hidden", like
2095 -fvisibility=hidden.
2096
2097 2. Types, but not their members, are not hidden by default.
2098
2099 3. The One Definition Rule is relaxed for types without explicit
2100 visibility specifications that are defined in more than one
2101 shared object: those declarations are permitted if they are
2102 permitted when this option is not used.
2103
2104 In new code it is better to use -fvisibility=hidden and export
2105 those classes that are intended to be externally visible.
2106 Unfortunately it is possible for code to rely, perhaps
2107 accidentally, on the Visual Studio behavior.
2108
2109 Among the consequences of these changes are that static data
2110 members of the same type with the same name but defined in
2111 different shared objects are different, so changing one does not
2112 change the other; and that pointers to function members defined in
2113 different shared objects may not compare equal. When this flag is
2114 given, it is a violation of the ODR to define types with the same
2115 name differently.
2116
2117 -fno-weak
2118 Do not use weak symbol support, even if it is provided by the
2119 linker. By default, G++ uses weak symbols if they are available.
2120 This option exists only for testing, and should not be used by end-
2121 users; it results in inferior code and has no benefits. This
2122 option may be removed in a future release of G++.
2123
2124 -nostdinc++
2125 Do not search for header files in the standard directories specific
2126 to C++, but do still search the other standard directories. (This
2127 option is used when building the C++ library.)
2128
2129 In addition, these optimization, warning, and code generation options
2130 have meanings only for C++ programs:
2131
2132 -Wabi (C, Objective-C, C++ and Objective-C++ only)
2133 Warn when G++ it generates code that is probably not compatible
2134 with the vendor-neutral C++ ABI. Since G++ now defaults to
2135 updating the ABI with each major release, normally -Wabi will warn
2136 only if there is a check added later in a release series for an ABI
2137 issue discovered since the initial release. -Wabi will warn about
2138 more things if an older ABI version is selected (with
2139 -fabi-version=n).
2140
2141 -Wabi can also be used with an explicit version number to warn
2142 about compatibility with a particular -fabi-version level, e.g.
2143 -Wabi=2 to warn about changes relative to -fabi-version=2.
2144
2145 If an explicit version number is provided and -fabi-compat-version
2146 is not specified, the version number from this option is used for
2147 compatibility aliases. If no explicit version number is provided
2148 with this option, but -fabi-compat-version is specified, that
2149 version number is used for ABI warnings.
2150
2151 Although an effort has been made to warn about all such cases,
2152 there are probably some cases that are not warned about, even
2153 though G++ is generating incompatible code. There may also be
2154 cases where warnings are emitted even though the code that is
2155 generated is compatible.
2156
2157 You should rewrite your code to avoid these warnings if you are
2158 concerned about the fact that code generated by G++ may not be
2159 binary compatible with code generated by other compilers.
2160
2161 Known incompatibilities in -fabi-version=2 (which was the default
2162 from GCC 3.4 to 4.9) include:
2163
2164 * A template with a non-type template parameter of reference type
2165 was mangled incorrectly:
2166
2167 extern int N;
2168 template <int &> struct S {};
2169 void n (S<N>) {2}
2170
2171 This was fixed in -fabi-version=3.
2172
2173 * SIMD vector types declared using "__attribute ((vector_size))"
2174 were mangled in a non-standard way that does not allow for
2175 overloading of functions taking vectors of different sizes.
2176
2177 The mangling was changed in -fabi-version=4.
2178
2179 * "__attribute ((const))" and "noreturn" were mangled as type
2180 qualifiers, and "decltype" of a plain declaration was folded
2181 away.
2182
2183 These mangling issues were fixed in -fabi-version=5.
2184
2185 * Scoped enumerators passed as arguments to a variadic function
2186 are promoted like unscoped enumerators, causing "va_arg" to
2187 complain. On most targets this does not actually affect the
2188 parameter passing ABI, as there is no way to pass an argument
2189 smaller than "int".
2190
2191 Also, the ABI changed the mangling of template argument packs,
2192 "const_cast", "static_cast", prefix increment/decrement, and a
2193 class scope function used as a template argument.
2194
2195 These issues were corrected in -fabi-version=6.
2196
2197 * Lambdas in default argument scope were mangled incorrectly, and
2198 the ABI changed the mangling of "nullptr_t".
2199
2200 These issues were corrected in -fabi-version=7.
2201
2202 * When mangling a function type with function-cv-qualifiers, the
2203 un-qualified function type was incorrectly treated as a
2204 substitution candidate.
2205
2206 This was fixed in -fabi-version=8, the default for GCC 5.1.
2207
2208 * "decltype(nullptr)" incorrectly had an alignment of 1, leading
2209 to unaligned accesses. Note that this did not affect the ABI
2210 of a function with a "nullptr_t" parameter, as parameters have
2211 a minimum alignment.
2212
2213 This was fixed in -fabi-version=9, the default for GCC 5.2.
2214
2215 * Target-specific attributes that affect the identity of a type,
2216 such as ia32 calling conventions on a function type (stdcall,
2217 regparm, etc.), did not affect the mangled name, leading to
2218 name collisions when function pointers were used as template
2219 arguments.
2220
2221 This was fixed in -fabi-version=10, the default for GCC 6.1.
2222
2223 It also warns about psABI-related changes. The known psABI changes
2224 at this point include:
2225
2226 * For SysV/x86-64, unions with "long double" members are passed
2227 in memory as specified in psABI. For example:
2228
2229 union U {
2230 long double ld;
2231 int i;
2232 };
2233
2234 "union U" is always passed in memory.
2235
2236 -Wabi-tag (C++ and Objective-C++ only)
2237 Warn when a type with an ABI tag is used in a context that does not
2238 have that ABI tag. See C++ Attributes for more information about
2239 ABI tags.
2240
2241 -Wctor-dtor-privacy (C++ and Objective-C++ only)
2242 Warn when a class seems unusable because all the constructors or
2243 destructors in that class are private, and it has neither friends
2244 nor public static member functions. Also warn if there are no non-
2245 private methods, and there's at least one private member function
2246 that isn't a constructor or destructor.
2247
2248 -Wdelete-non-virtual-dtor (C++ and Objective-C++ only)
2249 Warn when "delete" is used to destroy an instance of a class that
2250 has virtual functions and non-virtual destructor. It is unsafe to
2251 delete an instance of a derived class through a pointer to a base
2252 class if the base class does not have a virtual destructor. This
2253 warning is enabled by -Wall.
2254
2255 -Wliteral-suffix (C++ and Objective-C++ only)
2256 Warn when a string or character literal is followed by a ud-suffix
2257 which does not begin with an underscore. As a conforming
2258 extension, GCC treats such suffixes as separate preprocessing
2259 tokens in order to maintain backwards compatibility with code that
2260 uses formatting macros from "<inttypes.h>". For example:
2261
2262 #define __STDC_FORMAT_MACROS
2263 #include <inttypes.h>
2264 #include <stdio.h>
2265
2266 int main() {
2267 int64_t i64 = 123;
2268 printf("My int64: %" PRId64"\n", i64);
2269 }
2270
2271 In this case, "PRId64" is treated as a separate preprocessing
2272 token.
2273
2274 Additionally, warn when a user-defined literal operator is declared
2275 with a literal suffix identifier that doesn't begin with an
2276 underscore. Literal suffix identifiers that don't begin with an
2277 underscore are reserved for future standardization.
2278
2279 This warning is enabled by default.
2280
2281 -Wlto-type-mismatch
2282 During the link-time optimization warn about type mismatches in
2283 global declarations from different compilation units. Requires
2284 -flto to be enabled. Enabled by default.
2285
2286 -Wno-narrowing (C++ and Objective-C++ only)
2287 For C++11 and later standards, narrowing conversions are diagnosed
2288 by default, as required by the standard. A narrowing conversion
2289 from a constant produces an error, and a narrowing conversion from
2290 a non-constant produces a warning, but -Wno-narrowing suppresses
2291 the diagnostic. Note that this does not affect the meaning of
2292 well-formed code; narrowing conversions are still considered ill-
2293 formed in SFINAE contexts.
2294
2295 With -Wnarrowing in C++98, warn when a narrowing conversion
2296 prohibited by C++11 occurs within { }, e.g.
2297
2298 int i = { 2.2 }; // error: narrowing from double to int
2299
2300 This flag is included in -Wall and -Wc++11-compat.
2301
2302 -Wnoexcept (C++ and Objective-C++ only)
2303 Warn when a noexcept-expression evaluates to false because of a
2304 call to a function that does not have a non-throwing exception
2305 specification (i.e. "throw()" or "noexcept") but is known by the
2306 compiler to never throw an exception.
2307
2308 -Wnoexcept-type (C++ and Objective-C++ only)
2309 Warn if the C++17 feature making "noexcept" part of a function type
2310 changes the mangled name of a symbol relative to C++14. Enabled by
2311 -Wabi and -Wc++17-compat.
2312
2313 As an example:
2314
2315 template <class T> void f(T t) { t(); };
2316 void g() noexcept;
2317 void h() { f(g); }
2318
2319 In C++14, "f" calls "f<void(*)()>", but in C++17 it calls
2320 "f<void(*)()noexcept>".
2321
2322 -Wclass-memaccess (C++ and Objective-C++ only)
2323 Warn when the destination of a call to a raw memory function such
2324 as "memset" or "memcpy" is an object of class type, and when
2325 writing into such an object might bypass the class non-trivial or
2326 deleted constructor or copy assignment, violate const-correctness
2327 or encapsulation, or corrupt virtual table pointers. Modifying the
2328 representation of such objects may violate invariants maintained by
2329 member functions of the class. For example, the call to "memset"
2330 below is undefined because it modifies a non-trivial class object
2331 and is, therefore, diagnosed. The safe way to either initialize or
2332 clear the storage of objects of such types is by using the
2333 appropriate constructor or assignment operator, if one is
2334 available.
2335
2336 std::string str = "abc";
2337 memset (&str, 0, sizeof str);
2338
2339 The -Wclass-memaccess option is enabled by -Wall. Explicitly
2340 casting the pointer to the class object to "void *" or to a type
2341 that can be safely accessed by the raw memory function suppresses
2342 the warning.
2343
2344 -Wnon-virtual-dtor (C++ and Objective-C++ only)
2345 Warn when a class has virtual functions and an accessible non-
2346 virtual destructor itself or in an accessible polymorphic base
2347 class, in which case it is possible but unsafe to delete an
2348 instance of a derived class through a pointer to the class itself
2349 or base class. This warning is automatically enabled if -Weffc++
2350 is specified.
2351
2352 -Wregister (C++ and Objective-C++ only)
2353 Warn on uses of the "register" storage class specifier, except when
2354 it is part of the GNU Explicit Register Variables extension. The
2355 use of the "register" keyword as storage class specifier has been
2356 deprecated in C++11 and removed in C++17. Enabled by default with
2357 -std=c++17.
2358
2359 -Wreorder (C++ and Objective-C++ only)
2360 Warn when the order of member initializers given in the code does
2361 not match the order in which they must be executed. For instance:
2362
2363 struct A {
2364 int i;
2365 int j;
2366 A(): j (0), i (1) { }
2367 };
2368
2369 The compiler rearranges the member initializers for "i" and "j" to
2370 match the declaration order of the members, emitting a warning to
2371 that effect. This warning is enabled by -Wall.
2372
2373 -fext-numeric-literals (C++ and Objective-C++ only)
2374 Accept imaginary, fixed-point, or machine-defined literal number
2375 suffixes as GNU extensions. When this option is turned off these
2376 suffixes are treated as C++11 user-defined literal numeric
2377 suffixes. This is on by default for all pre-C++11 dialects and all
2378 GNU dialects: -std=c++98, -std=gnu++98, -std=gnu++11, -std=gnu++14.
2379 This option is off by default for ISO C++11 onwards (-std=c++11,
2380 ...).
2381
2382 The following -W... options are not affected by -Wall.
2383
2384 -Weffc++ (C++ and Objective-C++ only)
2385 Warn about violations of the following style guidelines from Scott
2386 Meyers' Effective C++ series of books:
2387
2388 * Define a copy constructor and an assignment operator for
2389 classes with dynamically-allocated memory.
2390
2391 * Prefer initialization to assignment in constructors.
2392
2393 * Have "operator=" return a reference to *this.
2394
2395 * Don't try to return a reference when you must return an object.
2396
2397 * Distinguish between prefix and postfix forms of increment and
2398 decrement operators.
2399
2400 * Never overload "&&", "||", or ",".
2401
2402 This option also enables -Wnon-virtual-dtor, which is also one of
2403 the effective C++ recommendations. However, the check is extended
2404 to warn about the lack of virtual destructor in accessible non-
2405 polymorphic bases classes too.
2406
2407 When selecting this option, be aware that the standard library
2408 headers do not obey all of these guidelines; use grep -v to filter
2409 out those warnings.
2410
2411 -Wstrict-null-sentinel (C++ and Objective-C++ only)
2412 Warn about the use of an uncasted "NULL" as sentinel. When
2413 compiling only with GCC this is a valid sentinel, as "NULL" is
2414 defined to "__null". Although it is a null pointer constant rather
2415 than a null pointer, it is guaranteed to be of the same size as a
2416 pointer. But this use is not portable across different compilers.
2417
2418 -Wno-non-template-friend (C++ and Objective-C++ only)
2419 Disable warnings when non-template friend functions are declared
2420 within a template. In very old versions of GCC that predate
2421 implementation of the ISO standard, declarations such as friend int
2422 foo(int), where the name of the friend is an unqualified-id, could
2423 be interpreted as a particular specialization of a template
2424 function; the warning exists to diagnose compatibility problems,
2425 and is enabled by default.
2426
2427 -Wold-style-cast (C++ and Objective-C++ only)
2428 Warn if an old-style (C-style) cast to a non-void type is used
2429 within a C++ program. The new-style casts ("dynamic_cast",
2430 "static_cast", "reinterpret_cast", and "const_cast") are less
2431 vulnerable to unintended effects and much easier to search for.
2432
2433 -Woverloaded-virtual (C++ and Objective-C++ only)
2434 Warn when a function declaration hides virtual functions from a
2435 base class. For example, in:
2436
2437 struct A {
2438 virtual void f();
2439 };
2440
2441 struct B: public A {
2442 void f(int);
2443 };
2444
2445 the "A" class version of "f" is hidden in "B", and code like:
2446
2447 B* b;
2448 b->f();
2449
2450 fails to compile.
2451
2452 -Wno-pmf-conversions (C++ and Objective-C++ only)
2453 Disable the diagnostic for converting a bound pointer to member
2454 function to a plain pointer.
2455
2456 -Wsign-promo (C++ and Objective-C++ only)
2457 Warn when overload resolution chooses a promotion from unsigned or
2458 enumerated type to a signed type, over a conversion to an unsigned
2459 type of the same size. Previous versions of G++ tried to preserve
2460 unsignedness, but the standard mandates the current behavior.
2461
2462 -Wtemplates (C++ and Objective-C++ only)
2463 Warn when a primary template declaration is encountered. Some
2464 coding rules disallow templates, and this may be used to enforce
2465 that rule. The warning is inactive inside a system header file,
2466 such as the STL, so one can still use the STL. One may also
2467 instantiate or specialize templates.
2468
2469 -Wmultiple-inheritance (C++ and Objective-C++ only)
2470 Warn when a class is defined with multiple direct base classes.
2471 Some coding rules disallow multiple inheritance, and this may be
2472 used to enforce that rule. The warning is inactive inside a system
2473 header file, such as the STL, so one can still use the STL. One
2474 may also define classes that indirectly use multiple inheritance.
2475
2476 -Wvirtual-inheritance
2477 Warn when a class is defined with a virtual direct base class.
2478 Some coding rules disallow multiple inheritance, and this may be
2479 used to enforce that rule. The warning is inactive inside a system
2480 header file, such as the STL, so one can still use the STL. One
2481 may also define classes that indirectly use virtual inheritance.
2482
2483 -Wnamespaces
2484 Warn when a namespace definition is opened. Some coding rules
2485 disallow namespaces, and this may be used to enforce that rule.
2486 The warning is inactive inside a system header file, such as the
2487 STL, so one can still use the STL. One may also use using
2488 directives and qualified names.
2489
2490 -Wno-terminate (C++ and Objective-C++ only)
2491 Disable the warning about a throw-expression that will immediately
2492 result in a call to "terminate".
2493
2494 Options Controlling Objective-C and Objective-C++ Dialects
2495 (NOTE: This manual does not describe the Objective-C and Objective-C++
2496 languages themselves.
2497
2498 This section describes the command-line options that are only
2499 meaningful for Objective-C and Objective-C++ programs. You can also
2500 use most of the language-independent GNU compiler options. For
2501 example, you might compile a file some_class.m like this:
2502
2503 gcc -g -fgnu-runtime -O -c some_class.m
2504
2505 In this example, -fgnu-runtime is an option meant only for Objective-C
2506 and Objective-C++ programs; you can use the other options with any
2507 language supported by GCC.
2508
2509 Note that since Objective-C is an extension of the C language,
2510 Objective-C compilations may also use options specific to the C front-
2511 end (e.g., -Wtraditional). Similarly, Objective-C++ compilations may
2512 use C++-specific options (e.g., -Wabi).
2513
2514 Here is a list of options that are only for compiling Objective-C and
2515 Objective-C++ programs:
2516
2517 -fconstant-string-class=class-name
2518 Use class-name as the name of the class to instantiate for each
2519 literal string specified with the syntax "@"..."". The default
2520 class name is "NXConstantString" if the GNU runtime is being used,
2521 and "NSConstantString" if the NeXT runtime is being used (see
2522 below). The -fconstant-cfstrings option, if also present,
2523 overrides the -fconstant-string-class setting and cause "@"...""
2524 literals to be laid out as constant CoreFoundation strings.
2525
2526 -fgnu-runtime
2527 Generate object code compatible with the standard GNU Objective-C
2528 runtime. This is the default for most types of systems.
2529
2530 -fnext-runtime
2531 Generate output compatible with the NeXT runtime. This is the
2532 default for NeXT-based systems, including Darwin and Mac OS X. The
2533 macro "__NEXT_RUNTIME__" is predefined if (and only if) this option
2534 is used.
2535
2536 -fno-nil-receivers
2537 Assume that all Objective-C message dispatches ("[receiver
2538 message:arg]") in this translation unit ensure that the receiver is
2539 not "nil". This allows for more efficient entry points in the
2540 runtime to be used. This option is only available in conjunction
2541 with the NeXT runtime and ABI version 0 or 1.
2542
2543 -fobjc-abi-version=n
2544 Use version n of the Objective-C ABI for the selected runtime.
2545 This option is currently supported only for the NeXT runtime. In
2546 that case, Version 0 is the traditional (32-bit) ABI without
2547 support for properties and other Objective-C 2.0 additions.
2548 Version 1 is the traditional (32-bit) ABI with support for
2549 properties and other Objective-C 2.0 additions. Version 2 is the
2550 modern (64-bit) ABI. If nothing is specified, the default is
2551 Version 0 on 32-bit target machines, and Version 2 on 64-bit target
2552 machines.
2553
2554 -fobjc-call-cxx-cdtors
2555 For each Objective-C class, check if any of its instance variables
2556 is a C++ object with a non-trivial default constructor. If so,
2557 synthesize a special "- (id) .cxx_construct" instance method which
2558 runs non-trivial default constructors on any such instance
2559 variables, in order, and then return "self". Similarly, check if
2560 any instance variable is a C++ object with a non-trivial
2561 destructor, and if so, synthesize a special "- (void)
2562 .cxx_destruct" method which runs all such default destructors, in
2563 reverse order.
2564
2565 The "- (id) .cxx_construct" and "- (void) .cxx_destruct" methods
2566 thusly generated only operate on instance variables declared in the
2567 current Objective-C class, and not those inherited from
2568 superclasses. It is the responsibility of the Objective-C runtime
2569 to invoke all such methods in an object's inheritance hierarchy.
2570 The "- (id) .cxx_construct" methods are invoked by the runtime
2571 immediately after a new object instance is allocated; the "- (void)
2572 .cxx_destruct" methods are invoked immediately before the runtime
2573 deallocates an object instance.
2574
2575 As of this writing, only the NeXT runtime on Mac OS X 10.4 and
2576 later has support for invoking the "- (id) .cxx_construct" and "-
2577 (void) .cxx_destruct" methods.
2578
2579 -fobjc-direct-dispatch
2580 Allow fast jumps to the message dispatcher. On Darwin this is
2581 accomplished via the comm page.
2582
2583 -fobjc-exceptions
2584 Enable syntactic support for structured exception handling in
2585 Objective-C, similar to what is offered by C++. This option is
2586 required to use the Objective-C keywords @try, @throw, @catch,
2587 @finally and @synchronized. This option is available with both the
2588 GNU runtime and the NeXT runtime (but not available in conjunction
2589 with the NeXT runtime on Mac OS X 10.2 and earlier).
2590
2591 -fobjc-gc
2592 Enable garbage collection (GC) in Objective-C and Objective-C++
2593 programs. This option is only available with the NeXT runtime; the
2594 GNU runtime has a different garbage collection implementation that
2595 does not require special compiler flags.
2596
2597 -fobjc-nilcheck
2598 For the NeXT runtime with version 2 of the ABI, check for a nil
2599 receiver in method invocations before doing the actual method call.
2600 This is the default and can be disabled using -fno-objc-nilcheck.
2601 Class methods and super calls are never checked for nil in this way
2602 no matter what this flag is set to. Currently this flag does
2603 nothing when the GNU runtime, or an older version of the NeXT
2604 runtime ABI, is used.
2605
2606 -fobjc-std=objc1
2607 Conform to the language syntax of Objective-C 1.0, the language
2608 recognized by GCC 4.0. This only affects the Objective-C additions
2609 to the C/C++ language; it does not affect conformance to C/C++
2610 standards, which is controlled by the separate C/C++ dialect option
2611 flags. When this option is used with the Objective-C or
2612 Objective-C++ compiler, any Objective-C syntax that is not
2613 recognized by GCC 4.0 is rejected. This is useful if you need to
2614 make sure that your Objective-C code can be compiled with older
2615 versions of GCC.
2616
2617 -freplace-objc-classes
2618 Emit a special marker instructing ld(1) not to statically link in
2619 the resulting object file, and allow dyld(1) to load it in at run
2620 time instead. This is used in conjunction with the Fix-and-
2621 Continue debugging mode, where the object file in question may be
2622 recompiled and dynamically reloaded in the course of program
2623 execution, without the need to restart the program itself.
2624 Currently, Fix-and-Continue functionality is only available in
2625 conjunction with the NeXT runtime on Mac OS X 10.3 and later.
2626
2627 -fzero-link
2628 When compiling for the NeXT runtime, the compiler ordinarily
2629 replaces calls to "objc_getClass("...")" (when the name of the
2630 class is known at compile time) with static class references that
2631 get initialized at load time, which improves run-time performance.
2632 Specifying the -fzero-link flag suppresses this behavior and causes
2633 calls to "objc_getClass("...")" to be retained. This is useful in
2634 Zero-Link debugging mode, since it allows for individual class
2635 implementations to be modified during program execution. The GNU
2636 runtime currently always retains calls to "objc_get_class("...")"
2637 regardless of command-line options.
2638
2639 -fno-local-ivars
2640 By default instance variables in Objective-C can be accessed as if
2641 they were local variables from within the methods of the class
2642 they're declared in. This can lead to shadowing between instance
2643 variables and other variables declared either locally inside a
2644 class method or globally with the same name. Specifying the
2645 -fno-local-ivars flag disables this behavior thus avoiding variable
2646 shadowing issues.
2647
2648 -fivar-visibility=[public|protected|private|package]
2649 Set the default instance variable visibility to the specified
2650 option so that instance variables declared outside the scope of any
2651 access modifier directives default to the specified visibility.
2652
2653 -gen-decls
2654 Dump interface declarations for all classes seen in the source file
2655 to a file named sourcename.decl.
2656
2657 -Wassign-intercept (Objective-C and Objective-C++ only)
2658 Warn whenever an Objective-C assignment is being intercepted by the
2659 garbage collector.
2660
2661 -Wno-protocol (Objective-C and Objective-C++ only)
2662 If a class is declared to implement a protocol, a warning is issued
2663 for every method in the protocol that is not implemented by the
2664 class. The default behavior is to issue a warning for every method
2665 not explicitly implemented in the class, even if a method
2666 implementation is inherited from the superclass. If you use the
2667 -Wno-protocol option, then methods inherited from the superclass
2668 are considered to be implemented, and no warning is issued for
2669 them.
2670
2671 -Wselector (Objective-C and Objective-C++ only)
2672 Warn if multiple methods of different types for the same selector
2673 are found during compilation. The check is performed on the list
2674 of methods in the final stage of compilation. Additionally, a
2675 check is performed for each selector appearing in a
2676 "@selector(...)" expression, and a corresponding method for that
2677 selector has been found during compilation. Because these checks
2678 scan the method table only at the end of compilation, these
2679 warnings are not produced if the final stage of compilation is not
2680 reached, for example because an error is found during compilation,
2681 or because the -fsyntax-only option is being used.
2682
2683 -Wstrict-selector-match (Objective-C and Objective-C++ only)
2684 Warn if multiple methods with differing argument and/or return
2685 types are found for a given selector when attempting to send a
2686 message using this selector to a receiver of type "id" or "Class".
2687 When this flag is off (which is the default behavior), the compiler
2688 omits such warnings if any differences found are confined to types
2689 that share the same size and alignment.
2690
2691 -Wundeclared-selector (Objective-C and Objective-C++ only)
2692 Warn if a "@selector(...)" expression referring to an undeclared
2693 selector is found. A selector is considered undeclared if no
2694 method with that name has been declared before the "@selector(...)"
2695 expression, either explicitly in an @interface or @protocol
2696 declaration, or implicitly in an @implementation section. This
2697 option always performs its checks as soon as a "@selector(...)"
2698 expression is found, while -Wselector only performs its checks in
2699 the final stage of compilation. This also enforces the coding
2700 style convention that methods and selectors must be declared before
2701 being used.
2702
2703 -print-objc-runtime-info
2704 Generate C header describing the largest structure that is passed
2705 by value, if any.
2706
2707 Options to Control Diagnostic Messages Formatting
2708 Traditionally, diagnostic messages have been formatted irrespective of
2709 the output device's aspect (e.g. its width, ...). You can use the
2710 options described below to control the formatting algorithm for
2711 diagnostic messages, e.g. how many characters per line, how often
2712 source location information should be reported. Note that some
2713 language front ends may not honor these options.
2714
2715 -fmessage-length=n
2716 Try to format error messages so that they fit on lines of about n
2717 characters. If n is zero, then no line-wrapping is done; each
2718 error message appears on a single line. This is the default for
2719 all front ends.
2720
2721 -fdiagnostics-show-location=once
2722 Only meaningful in line-wrapping mode. Instructs the diagnostic
2723 messages reporter to emit source location information once; that
2724 is, in case the message is too long to fit on a single physical
2725 line and has to be wrapped, the source location won't be emitted
2726 (as prefix) again, over and over, in subsequent continuation lines.
2727 This is the default behavior.
2728
2729 -fdiagnostics-show-location=every-line
2730 Only meaningful in line-wrapping mode. Instructs the diagnostic
2731 messages reporter to emit the same source location information (as
2732 prefix) for physical lines that result from the process of breaking
2733 a message which is too long to fit on a single line.
2734
2735 -fdiagnostics-color[=WHEN]
2736 -fno-diagnostics-color
2737 Use color in diagnostics. WHEN is never, always, or auto. The
2738 default depends on how the compiler has been configured, it can be
2739 any of the above WHEN options or also never if GCC_COLORS
2740 environment variable isn't present in the environment, and auto
2741 otherwise. auto means to use color only when the standard error is
2742 a terminal. The forms -fdiagnostics-color and
2743 -fno-diagnostics-color are aliases for -fdiagnostics-color=always
2744 and -fdiagnostics-color=never, respectively.
2745
2746 The colors are defined by the environment variable GCC_COLORS. Its
2747 value is a colon-separated list of capabilities and Select Graphic
2748 Rendition (SGR) substrings. SGR commands are interpreted by the
2749 terminal or terminal emulator. (See the section in the
2750 documentation of your text terminal for permitted values and their
2751 meanings as character attributes.) These substring values are
2752 integers in decimal representation and can be concatenated with
2753 semicolons. Common values to concatenate include 1 for bold, 4 for
2754 underline, 5 for blink, 7 for inverse, 39 for default foreground
2755 color, 30 to 37 for foreground colors, 90 to 97 for 16-color mode
2756 foreground colors, 38;5;0 to 38;5;255 for 88-color and 256-color
2757 modes foreground colors, 49 for default background color, 40 to 47
2758 for background colors, 100 to 107 for 16-color mode background
2759 colors, and 48;5;0 to 48;5;255 for 88-color and 256-color modes
2760 background colors.
2761
2762 The default GCC_COLORS is
2763
2764 error=01;31:warning=01;35:note=01;36:range1=32:range2=34:locus=01:\
2765 quote=01:fixit-insert=32:fixit-delete=31:\
2766 diff-filename=01:diff-hunk=32:diff-delete=31:diff-insert=32:\
2767 type-diff=01;32
2768
2769 where 01;31 is bold red, 01;35 is bold magenta, 01;36 is bold cyan,
2770 32 is green, 34 is blue, 01 is bold, and 31 is red. Setting
2771 GCC_COLORS to the empty string disables colors. Supported
2772 capabilities are as follows.
2773
2774 "error="
2775 SGR substring for error: markers.
2776
2777 "warning="
2778 SGR substring for warning: markers.
2779
2780 "note="
2781 SGR substring for note: markers.
2782
2783 "range1="
2784 SGR substring for first additional range.
2785
2786 "range2="
2787 SGR substring for second additional range.
2788
2789 "locus="
2790 SGR substring for location information, file:line or
2791 file:line:column etc.
2792
2793 "quote="
2794 SGR substring for information printed within quotes.
2795
2796 "fixit-insert="
2797 SGR substring for fix-it hints suggesting text to be inserted
2798 or replaced.
2799
2800 "fixit-delete="
2801 SGR substring for fix-it hints suggesting text to be deleted.
2802
2803 "diff-filename="
2804 SGR substring for filename headers within generated patches.
2805
2806 "diff-hunk="
2807 SGR substring for the starts of hunks within generated patches.
2808
2809 "diff-delete="
2810 SGR substring for deleted lines within generated patches.
2811
2812 "diff-insert="
2813 SGR substring for inserted lines within generated patches.
2814
2815 "type-diff="
2816 SGR substring for highlighting mismatching types within
2817 template arguments in the C++ frontend.
2818
2819 -fno-diagnostics-show-option
2820 By default, each diagnostic emitted includes text indicating the
2821 command-line option that directly controls the diagnostic (if such
2822 an option is known to the diagnostic machinery). Specifying the
2823 -fno-diagnostics-show-option flag suppresses that behavior.
2824
2825 -fno-diagnostics-show-caret
2826 By default, each diagnostic emitted includes the original source
2827 line and a caret ^ indicating the column. This option suppresses
2828 this information. The source line is truncated to n characters, if
2829 the -fmessage-length=n option is given. When the output is done to
2830 the terminal, the width is limited to the width given by the
2831 COLUMNS environment variable or, if not set, to the terminal width.
2832
2833 -fdiagnostics-parseable-fixits
2834 Emit fix-it hints in a machine-parseable format, suitable for
2835 consumption by IDEs. For each fix-it, a line will be printed after
2836 the relevant diagnostic, starting with the string "fix-it:". For
2837 example:
2838
2839 fix-it:"test.c":{45:3-45:21}:"gtk_widget_show_all"
2840
2841 The location is expressed as a half-open range, expressed as a
2842 count of bytes, starting at byte 1 for the initial column. In the
2843 above example, bytes 3 through 20 of line 45 of "test.c" are to be
2844 replaced with the given string:
2845
2846 00000000011111111112222222222
2847 12345678901234567890123456789
2848 gtk_widget_showall (dlg);
2849 ^^^^^^^^^^^^^^^^^^
2850 gtk_widget_show_all
2851
2852 The filename and replacement string escape backslash as "\\", tab
2853 as "\t", newline as "\n", double quotes as "\"", non-printable
2854 characters as octal (e.g. vertical tab as "\013").
2855
2856 An empty replacement string indicates that the given range is to be
2857 removed. An empty range (e.g. "45:3-45:3") indicates that the
2858 string is to be inserted at the given position.
2859
2860 -fdiagnostics-generate-patch
2861 Print fix-it hints to stderr in unified diff format, after any
2862 diagnostics are printed. For example:
2863
2864 --- test.c
2865 +++ test.c
2866 @ -42,5 +42,5 @
2867
2868 void show_cb(GtkDialog *dlg)
2869 {
2870 - gtk_widget_showall(dlg);
2871 + gtk_widget_show_all(dlg);
2872 }
2873
2874 The diff may or may not be colorized, following the same rules as
2875 for diagnostics (see -fdiagnostics-color).
2876
2877 -fdiagnostics-show-template-tree
2878 In the C++ frontend, when printing diagnostics showing mismatching
2879 template types, such as:
2880
2881 could not convert 'std::map<int, std::vector<double> >()'
2882 from 'map<[...],vector<double>>' to 'map<[...],vector<float>>
2883
2884 the -fdiagnostics-show-template-tree flag enables printing a tree-
2885 like structure showing the common and differing parts of the types,
2886 such as:
2887
2888 map<
2889 [...],
2890 vector<
2891 [double != float]>>
2892
2893 The parts that differ are highlighted with color ("double" and
2894 "float" in this case).
2895
2896 -fno-elide-type
2897 By default when the C++ frontend prints diagnostics showing
2898 mismatching template types, common parts of the types are printed
2899 as "[...]" to simplify the error message. For example:
2900
2901 could not convert 'std::map<int, std::vector<double> >()'
2902 from 'map<[...],vector<double>>' to 'map<[...],vector<float>>
2903
2904 Specifying the -fno-elide-type flag suppresses that behavior. This
2905 flag also affects the output of the
2906 -fdiagnostics-show-template-tree flag.
2907
2908 -fno-show-column
2909 Do not print column numbers in diagnostics. This may be necessary
2910 if diagnostics are being scanned by a program that does not
2911 understand the column numbers, such as dejagnu.
2912
2913 Options to Request or Suppress Warnings
2914 Warnings are diagnostic messages that report constructions that are not
2915 inherently erroneous but that are risky or suggest there may have been
2916 an error.
2917
2918 The following language-independent options do not enable specific
2919 warnings but control the kinds of diagnostics produced by GCC.
2920
2921 -fsyntax-only
2922 Check the code for syntax errors, but don't do anything beyond
2923 that.
2924
2925 -fmax-errors=n
2926 Limits the maximum number of error messages to n, at which point
2927 GCC bails out rather than attempting to continue processing the
2928 source code. If n is 0 (the default), there is no limit on the
2929 number of error messages produced. If -Wfatal-errors is also
2930 specified, then -Wfatal-errors takes precedence over this option.
2931
2932 -w Inhibit all warning messages.
2933
2934 -Werror
2935 Make all warnings into errors.
2936
2937 -Werror=
2938 Make the specified warning into an error. The specifier for a
2939 warning is appended; for example -Werror=switch turns the warnings
2940 controlled by -Wswitch into errors. This switch takes a negative
2941 form, to be used to negate -Werror for specific warnings; for
2942 example -Wno-error=switch makes -Wswitch warnings not be errors,
2943 even when -Werror is in effect.
2944
2945 The warning message for each controllable warning includes the
2946 option that controls the warning. That option can then be used
2947 with -Werror= and -Wno-error= as described above. (Printing of the
2948 option in the warning message can be disabled using the
2949 -fno-diagnostics-show-option flag.)
2950
2951 Note that specifying -Werror=foo automatically implies -Wfoo.
2952 However, -Wno-error=foo does not imply anything.
2953
2954 -Wfatal-errors
2955 This option causes the compiler to abort compilation on the first
2956 error occurred rather than trying to keep going and printing
2957 further error messages.
2958
2959 You can request many specific warnings with options beginning with -W,
2960 for example -Wimplicit to request warnings on implicit declarations.
2961 Each of these specific warning options also has a negative form
2962 beginning -Wno- to turn off warnings; for example, -Wno-implicit. This
2963 manual lists only one of the two forms, whichever is not the default.
2964 For further language-specific options also refer to C++ Dialect Options
2965 and Objective-C and Objective-C++ Dialect Options.
2966
2967 Some options, such as -Wall and -Wextra, turn on other options, such as
2968 -Wunused, which may turn on further options, such as -Wunused-value.
2969 The combined effect of positive and negative forms is that more
2970 specific options have priority over less specific ones, independently
2971 of their position in the command-line. For options of the same
2972 specificity, the last one takes effect. Options enabled or disabled via
2973 pragmas take effect as if they appeared at the end of the command-line.
2974
2975 When an unrecognized warning option is requested (e.g.,
2976 -Wunknown-warning), GCC emits a diagnostic stating that the option is
2977 not recognized. However, if the -Wno- form is used, the behavior is
2978 slightly different: no diagnostic is produced for -Wno-unknown-warning
2979 unless other diagnostics are being produced. This allows the use of
2980 new -Wno- options with old compilers, but if something goes wrong, the
2981 compiler warns that an unrecognized option is present.
2982
2983 -Wpedantic
2984 -pedantic
2985 Issue all the warnings demanded by strict ISO C and ISO C++; reject
2986 all programs that use forbidden extensions, and some other programs
2987 that do not follow ISO C and ISO C++. For ISO C, follows the
2988 version of the ISO C standard specified by any -std option used.
2989
2990 Valid ISO C and ISO C++ programs should compile properly with or
2991 without this option (though a rare few require -ansi or a -std
2992 option specifying the required version of ISO C). However, without
2993 this option, certain GNU extensions and traditional C and C++
2994 features are supported as well. With this option, they are
2995 rejected.
2996
2997 -Wpedantic does not cause warning messages for use of the alternate
2998 keywords whose names begin and end with __. Pedantic warnings are
2999 also disabled in the expression that follows "__extension__".
3000 However, only system header files should use these escape routes;
3001 application programs should avoid them.
3002
3003 Some users try to use -Wpedantic to check programs for strict ISO C
3004 conformance. They soon find that it does not do quite what they
3005 want: it finds some non-ISO practices, but not all---only those for
3006 which ISO C requires a diagnostic, and some others for which
3007 diagnostics have been added.
3008
3009 A feature to report any failure to conform to ISO C might be useful
3010 in some instances, but would require considerable additional work
3011 and would be quite different from -Wpedantic. We don't have plans
3012 to support such a feature in the near future.
3013
3014 Where the standard specified with -std represents a GNU extended
3015 dialect of C, such as gnu90 or gnu99, there is a corresponding base
3016 standard, the version of ISO C on which the GNU extended dialect is
3017 based. Warnings from -Wpedantic are given where they are required
3018 by the base standard. (It does not make sense for such warnings to
3019 be given only for features not in the specified GNU C dialect,
3020 since by definition the GNU dialects of C include all features the
3021 compiler supports with the given option, and there would be nothing
3022 to warn about.)
3023
3024 -pedantic-errors
3025 Give an error whenever the base standard (see -Wpedantic) requires
3026 a diagnostic, in some cases where there is undefined behavior at
3027 compile-time and in some other cases that do not prevent
3028 compilation of programs that are valid according to the standard.
3029 This is not equivalent to -Werror=pedantic, since there are errors
3030 enabled by this option and not enabled by the latter and vice
3031 versa.
3032
3033 -Wall
3034 This enables all the warnings about constructions that some users
3035 consider questionable, and that are easy to avoid (or modify to
3036 prevent the warning), even in conjunction with macros. This also
3037 enables some language-specific warnings described in C++ Dialect
3038 Options and Objective-C and Objective-C++ Dialect Options.
3039
3040 -Wall turns on the following warning flags:
3041
3042 -Waddress -Warray-bounds=1 (only with -O2) -Wbool-compare
3043 -Wbool-operation -Wc++11-compat -Wc++14-compat -Wcatch-value (C++
3044 and Objective-C++ only) -Wchar-subscripts -Wcomment
3045 -Wduplicate-decl-specifier (C and Objective-C only) -Wenum-compare
3046 (in C/ObjC; this is on by default in C++) -Wformat
3047 -Wint-in-bool-context -Wimplicit (C and Objective-C only)
3048 -Wimplicit-int (C and Objective-C only)
3049 -Wimplicit-function-declaration (C and Objective-C only)
3050 -Winit-self (only for C++) -Wlogical-not-parentheses -Wmain (only
3051 for C/ObjC and unless -ffreestanding) -Wmaybe-uninitialized
3052 -Wmemset-elt-size -Wmemset-transposed-args -Wmisleading-indentation
3053 (only for C/C++) -Wmissing-attributes -Wmissing-braces (only for
3054 C/ObjC) -Wmultistatement-macros -Wnarrowing (only for C++)
3055 -Wnonnull -Wnonnull-compare -Wopenmp-simd -Wparentheses
3056 -Wpointer-sign -Wreorder -Wrestrict -Wreturn-type -Wsequence-point
3057 -Wsign-compare (only in C++) -Wsizeof-pointer-div
3058 -Wsizeof-pointer-memaccess -Wstrict-aliasing -Wstrict-overflow=1
3059 -Wstringop-truncation -Wswitch -Wtautological-compare -Wtrigraphs
3060 -Wuninitialized -Wunknown-pragmas -Wunused-function -Wunused-label
3061 -Wunused-value -Wunused-variable -Wvolatile-register-var
3062
3063 Note that some warning flags are not implied by -Wall. Some of
3064 them warn about constructions that users generally do not consider
3065 questionable, but which occasionally you might wish to check for;
3066 others warn about constructions that are necessary or hard to avoid
3067 in some cases, and there is no simple way to modify the code to
3068 suppress the warning. Some of them are enabled by -Wextra but many
3069 of them must be enabled individually.
3070
3071 -Wextra
3072 This enables some extra warning flags that are not enabled by
3073 -Wall. (This option used to be called -W. The older name is still
3074 supported, but the newer name is more descriptive.)
3075
3076 -Wclobbered -Wcast-function-type -Wempty-body -Wignored-qualifiers
3077 -Wimplicit-fallthrough=3 -Wmissing-field-initializers
3078 -Wmissing-parameter-type (C only) -Wold-style-declaration (C only)
3079 -Woverride-init -Wsign-compare (C only) -Wtype-limits
3080 -Wuninitialized -Wshift-negative-value (in C++03 and in C99 and
3081 newer) -Wunused-parameter (only with -Wunused or -Wall)
3082 -Wunused-but-set-parameter (only with -Wunused or -Wall)
3083
3084 The option -Wextra also prints warning messages for the following
3085 cases:
3086
3087 * A pointer is compared against integer zero with "<", "<=", ">",
3088 or ">=".
3089
3090 * (C++ only) An enumerator and a non-enumerator both appear in a
3091 conditional expression.
3092
3093 * (C++ only) Ambiguous virtual bases.
3094
3095 * (C++ only) Subscripting an array that has been declared
3096 "register".
3097
3098 * (C++ only) Taking the address of a variable that has been
3099 declared "register".
3100
3101 * (C++ only) A base class is not initialized in the copy
3102 constructor of a derived class.
3103
3104 -Wchar-subscripts
3105 Warn if an array subscript has type "char". This is a common cause
3106 of error, as programmers often forget that this type is signed on
3107 some machines. This warning is enabled by -Wall.
3108
3109 -Wchkp
3110 Warn about an invalid memory access that is found by Pointer Bounds
3111 Checker (-fcheck-pointer-bounds).
3112
3113 -Wno-coverage-mismatch
3114 Warn if feedback profiles do not match when using the -fprofile-use
3115 option. If a source file is changed between compiling with
3116 -fprofile-gen and with -fprofile-use, the files with the profile
3117 feedback can fail to match the source file and GCC cannot use the
3118 profile feedback information. By default, this warning is enabled
3119 and is treated as an error. -Wno-coverage-mismatch can be used to
3120 disable the warning or -Wno-error=coverage-mismatch can be used to
3121 disable the error. Disabling the error for this warning can result
3122 in poorly optimized code and is useful only in the case of very
3123 minor changes such as bug fixes to an existing code-base.
3124 Completely disabling the warning is not recommended.
3125
3126 -Wno-cpp
3127 (C, Objective-C, C++, Objective-C++ and Fortran only)
3128
3129 Suppress warning messages emitted by "#warning" directives.
3130
3131 -Wdouble-promotion (C, C++, Objective-C and Objective-C++ only)
3132 Give a warning when a value of type "float" is implicitly promoted
3133 to "double". CPUs with a 32-bit "single-precision" floating-point
3134 unit implement "float" in hardware, but emulate "double" in
3135 software. On such a machine, doing computations using "double"
3136 values is much more expensive because of the overhead required for
3137 software emulation.
3138
3139 It is easy to accidentally do computations with "double" because
3140 floating-point literals are implicitly of type "double". For
3141 example, in:
3142
3143 float area(float radius)
3144 {
3145 return 3.14159 * radius * radius;
3146 }
3147
3148 the compiler performs the entire computation with "double" because
3149 the floating-point literal is a "double".
3150
3151 -Wduplicate-decl-specifier (C and Objective-C only)
3152 Warn if a declaration has duplicate "const", "volatile", "restrict"
3153 or "_Atomic" specifier. This warning is enabled by -Wall.
3154
3155 -Wformat
3156 -Wformat=n
3157 Check calls to "printf" and "scanf", etc., to make sure that the
3158 arguments supplied have types appropriate to the format string
3159 specified, and that the conversions specified in the format string
3160 make sense. This includes standard functions, and others specified
3161 by format attributes, in the "printf", "scanf", "strftime" and
3162 "strfmon" (an X/Open extension, not in the C standard) families (or
3163 other target-specific families). Which functions are checked
3164 without format attributes having been specified depends on the
3165 standard version selected, and such checks of functions without the
3166 attribute specified are disabled by -ffreestanding or -fno-builtin.
3167
3168 The formats are checked against the format features supported by
3169 GNU libc version 2.2. These include all ISO C90 and C99 features,
3170 as well as features from the Single Unix Specification and some BSD
3171 and GNU extensions. Other library implementations may not support
3172 all these features; GCC does not support warning about features
3173 that go beyond a particular library's limitations. However, if
3174 -Wpedantic is used with -Wformat, warnings are given about format
3175 features not in the selected standard version (but not for
3176 "strfmon" formats, since those are not in any version of the C
3177 standard).
3178
3179 -Wformat=1
3180 -Wformat
3181 Option -Wformat is equivalent to -Wformat=1, and -Wno-format is
3182 equivalent to -Wformat=0. Since -Wformat also checks for null
3183 format arguments for several functions, -Wformat also implies
3184 -Wnonnull. Some aspects of this level of format checking can
3185 be disabled by the options: -Wno-format-contains-nul,
3186 -Wno-format-extra-args, and -Wno-format-zero-length. -Wformat
3187 is enabled by -Wall.
3188
3189 -Wno-format-contains-nul
3190 If -Wformat is specified, do not warn about format strings that
3191 contain NUL bytes.
3192
3193 -Wno-format-extra-args
3194 If -Wformat is specified, do not warn about excess arguments to
3195 a "printf" or "scanf" format function. The C standard
3196 specifies that such arguments are ignored.
3197
3198 Where the unused arguments lie between used arguments that are
3199 specified with $ operand number specifications, normally
3200 warnings are still given, since the implementation could not
3201 know what type to pass to "va_arg" to skip the unused
3202 arguments. However, in the case of "scanf" formats, this
3203 option suppresses the warning if the unused arguments are all
3204 pointers, since the Single Unix Specification says that such
3205 unused arguments are allowed.
3206
3207 -Wformat-overflow
3208 -Wformat-overflow=level
3209 Warn about calls to formatted input/output functions such as
3210 "sprintf" and "vsprintf" that might overflow the destination
3211 buffer. When the exact number of bytes written by a format
3212 directive cannot be determined at compile-time it is estimated
3213 based on heuristics that depend on the level argument and on
3214 optimization. While enabling optimization will in most cases
3215 improve the accuracy of the warning, it may also result in
3216 false positives.
3217
3218 -Wformat-overflow
3219 -Wformat-overflow=1
3220 Level 1 of -Wformat-overflow enabled by -Wformat employs a
3221 conservative approach that warns only about calls that most
3222 likely overflow the buffer. At this level, numeric
3223 arguments to format directives with unknown values are
3224 assumed to have the value of one, and strings of unknown
3225 length to be empty. Numeric arguments that are known to be
3226 bounded to a subrange of their type, or string arguments
3227 whose output is bounded either by their directive's
3228 precision or by a finite set of string literals, are
3229 assumed to take on the value within the range that results
3230 in the most bytes on output. For example, the call to
3231 "sprintf" below is diagnosed because even with both a and b
3232 equal to zero, the terminating NUL character ('\0')
3233 appended by the function to the destination buffer will be
3234 written past its end. Increasing the size of the buffer by
3235 a single byte is sufficient to avoid the warning, though it
3236 may not be sufficient to avoid the overflow.
3237
3238 void f (int a, int b)
3239 {
3240 char buf [13];
3241 sprintf (buf, "a = %i, b = %i\n", a, b);
3242 }
3243
3244 -Wformat-overflow=2
3245 Level 2 warns also about calls that might overflow the
3246 destination buffer given an argument of sufficient length
3247 or magnitude. At level 2, unknown numeric arguments are
3248 assumed to have the minimum representable value for signed
3249 types with a precision greater than 1, and the maximum
3250 representable value otherwise. Unknown string arguments
3251 whose length cannot be assumed to be bounded either by the
3252 directive's precision, or by a finite set of string
3253 literals they may evaluate to, or the character array they
3254 may point to, are assumed to be 1 character long.
3255
3256 At level 2, the call in the example above is again
3257 diagnosed, but this time because with a equal to a 32-bit
3258 "INT_MIN" the first %i directive will write some of its
3259 digits beyond the end of the destination buffer. To make
3260 the call safe regardless of the values of the two
3261 variables, the size of the destination buffer must be
3262 increased to at least 34 bytes. GCC includes the minimum
3263 size of the buffer in an informational note following the
3264 warning.
3265
3266 An alternative to increasing the size of the destination
3267 buffer is to constrain the range of formatted values. The
3268 maximum length of string arguments can be bounded by
3269 specifying the precision in the format directive. When
3270 numeric arguments of format directives can be assumed to be
3271 bounded by less than the precision of their type, choosing
3272 an appropriate length modifier to the format specifier will
3273 reduce the required buffer size. For example, if a and b
3274 in the example above can be assumed to be within the
3275 precision of the "short int" type then using either the %hi
3276 format directive or casting the argument to "short" reduces
3277 the maximum required size of the buffer to 24 bytes.
3278
3279 void f (int a, int b)
3280 {
3281 char buf [23];
3282 sprintf (buf, "a = %hi, b = %i\n", a, (short)b);
3283 }
3284
3285 -Wno-format-zero-length
3286 If -Wformat is specified, do not warn about zero-length
3287 formats. The C standard specifies that zero-length formats are
3288 allowed.
3289
3290 -Wformat=2
3291 Enable -Wformat plus additional format checks. Currently
3292 equivalent to -Wformat -Wformat-nonliteral -Wformat-security
3293 -Wformat-y2k.
3294
3295 -Wformat-nonliteral
3296 If -Wformat is specified, also warn if the format string is not
3297 a string literal and so cannot be checked, unless the format
3298 function takes its format arguments as a "va_list".
3299
3300 -Wformat-security
3301 If -Wformat is specified, also warn about uses of format
3302 functions that represent possible security problems. At
3303 present, this warns about calls to "printf" and "scanf"
3304 functions where the format string is not a string literal and
3305 there are no format arguments, as in "printf (foo);". This may
3306 be a security hole if the format string came from untrusted
3307 input and contains %n. (This is currently a subset of what
3308 -Wformat-nonliteral warns about, but in future warnings may be
3309 added to -Wformat-security that are not included in
3310 -Wformat-nonliteral.)
3311
3312 -Wformat-signedness
3313 If -Wformat is specified, also warn if the format string
3314 requires an unsigned argument and the argument is signed and
3315 vice versa.
3316
3317 -Wformat-truncation
3318 -Wformat-truncation=level
3319 Warn about calls to formatted input/output functions such as
3320 "snprintf" and "vsnprintf" that might result in output
3321 truncation. When the exact number of bytes written by a format
3322 directive cannot be determined at compile-time it is estimated
3323 based on heuristics that depend on the level argument and on
3324 optimization. While enabling optimization will in most cases
3325 improve the accuracy of the warning, it may also result in
3326 false positives. Except as noted otherwise, the option uses
3327 the same logic -Wformat-overflow.
3328
3329 -Wformat-truncation
3330 -Wformat-truncation=1
3331 Level 1 of -Wformat-truncation enabled by -Wformat employs
3332 a conservative approach that warns only about calls to
3333 bounded functions whose return value is unused and that
3334 will most likely result in output truncation.
3335
3336 -Wformat-truncation=2
3337 Level 2 warns also about calls to bounded functions whose
3338 return value is used and that might result in truncation
3339 given an argument of sufficient length or magnitude.
3340
3341 -Wformat-y2k
3342 If -Wformat is specified, also warn about "strftime" formats
3343 that may yield only a two-digit year.
3344
3345 -Wnonnull
3346 Warn about passing a null pointer for arguments marked as requiring
3347 a non-null value by the "nonnull" function attribute.
3348
3349 -Wnonnull is included in -Wall and -Wformat. It can be disabled
3350 with the -Wno-nonnull option.
3351
3352 -Wnonnull-compare
3353 Warn when comparing an argument marked with the "nonnull" function
3354 attribute against null inside the function.
3355
3356 -Wnonnull-compare is included in -Wall. It can be disabled with
3357 the -Wno-nonnull-compare option.
3358
3359 -Wnull-dereference
3360 Warn if the compiler detects paths that trigger erroneous or
3361 undefined behavior due to dereferencing a null pointer. This
3362 option is only active when -fdelete-null-pointer-checks is active,
3363 which is enabled by optimizations in most targets. The precision
3364 of the warnings depends on the optimization options used.
3365
3366 -Winit-self (C, C++, Objective-C and Objective-C++ only)
3367 Warn about uninitialized variables that are initialized with
3368 themselves. Note this option can only be used with the
3369 -Wuninitialized option.
3370
3371 For example, GCC warns about "i" being uninitialized in the
3372 following snippet only when -Winit-self has been specified:
3373
3374 int f()
3375 {
3376 int i = i;
3377 return i;
3378 }
3379
3380 This warning is enabled by -Wall in C++.
3381
3382 -Wimplicit-int (C and Objective-C only)
3383 Warn when a declaration does not specify a type. This warning is
3384 enabled by -Wall.
3385
3386 -Wimplicit-function-declaration (C and Objective-C only)
3387 Give a warning whenever a function is used before being declared.
3388 In C99 mode (-std=c99 or -std=gnu99), this warning is enabled by
3389 default and it is made into an error by -pedantic-errors. This
3390 warning is also enabled by -Wall.
3391
3392 -Wimplicit (C and Objective-C only)
3393 Same as -Wimplicit-int and -Wimplicit-function-declaration. This
3394 warning is enabled by -Wall.
3395
3396 -Wimplicit-fallthrough
3397 -Wimplicit-fallthrough is the same as -Wimplicit-fallthrough=3 and
3398 -Wno-implicit-fallthrough is the same as -Wimplicit-fallthrough=0.
3399
3400 -Wimplicit-fallthrough=n
3401 Warn when a switch case falls through. For example:
3402
3403 switch (cond)
3404 {
3405 case 1:
3406 a = 1;
3407 break;
3408 case 2:
3409 a = 2;
3410 case 3:
3411 a = 3;
3412 break;
3413 }
3414
3415 This warning does not warn when the last statement of a case cannot
3416 fall through, e.g. when there is a return statement or a call to
3417 function declared with the noreturn attribute.
3418 -Wimplicit-fallthrough= also takes into account control flow
3419 statements, such as ifs, and only warns when appropriate. E.g.
3420
3421 switch (cond)
3422 {
3423 case 1:
3424 if (i > 3) {
3425 bar (5);
3426 break;
3427 } else if (i < 1) {
3428 bar (0);
3429 } else
3430 return;
3431 default:
3432 ...
3433 }
3434
3435 Since there are occasions where a switch case fall through is
3436 desirable, GCC provides an attribute, "__attribute__
3437 ((fallthrough))", that is to be used along with a null statement to
3438 suppress this warning that would normally occur:
3439
3440 switch (cond)
3441 {
3442 case 1:
3443 bar (0);
3444 __attribute__ ((fallthrough));
3445 default:
3446 ...
3447 }
3448
3449 C++17 provides a standard way to suppress the
3450 -Wimplicit-fallthrough warning using "[[fallthrough]];" instead of
3451 the GNU attribute. In C++11 or C++14 users can use
3452 "[[gnu::fallthrough]];", which is a GNU extension. Instead of
3453 these attributes, it is also possible to add a fallthrough comment
3454 to silence the warning. The whole body of the C or C++ style
3455 comment should match the given regular expressions listed below.
3456 The option argument n specifies what kind of comments are accepted:
3457
3458 *<-Wimplicit-fallthrough=0 disables the warning altogether.>
3459 *<-Wimplicit-fallthrough=1 matches ".*" regular>
3460 expression, any comment is used as fallthrough comment.
3461
3462 *<-Wimplicit-fallthrough=2 case insensitively matches>
3463 ".*falls?[ \t-]*thr(ough|u).*" regular expression.
3464
3465 *<-Wimplicit-fallthrough=3 case sensitively matches one of the>
3466 following regular expressions:
3467
3468 *<"-fallthrough">
3469 *<"@fallthrough@">
3470 *<"lint -fallthrough[ \t]*">
3471 *<"[ \t.!]*(ELSE,? |INTENTIONAL(LY)? )?FALL(S |
3472 |-)?THR(OUGH|U)[ \t.!]*(-[^\n\r]*)?">
3473 *<"[ \t.!]*(Else,? |Intentional(ly)? )?Fall((s |
3474 |-)[Tt]|t)hr(ough|u)[ \t.!]*(-[^\n\r]*)?">
3475 *<"[ \t.!]*([Ee]lse,? |[Ii]ntentional(ly)? )?fall(s |
3476 |-)?thr(ough|u)[ \t.!]*(-[^\n\r]*)?">
3477 *<-Wimplicit-fallthrough=4 case sensitively matches one of the>
3478 following regular expressions:
3479
3480 *<"-fallthrough">
3481 *<"@fallthrough@">
3482 *<"lint -fallthrough[ \t]*">
3483 *<"[ \t]*FALLTHR(OUGH|U)[ \t]*">
3484 *<-Wimplicit-fallthrough=5 doesn't recognize any comments as>
3485 fallthrough comments, only attributes disable the warning.
3486
3487 The comment needs to be followed after optional whitespace and
3488 other comments by "case" or "default" keywords or by a user label
3489 that precedes some "case" or "default" label.
3490
3491 switch (cond)
3492 {
3493 case 1:
3494 bar (0);
3495 /* FALLTHRU */
3496 default:
3497 ...
3498 }
3499
3500 The -Wimplicit-fallthrough=3 warning is enabled by -Wextra.
3501
3502 -Wif-not-aligned (C, C++, Objective-C and Objective-C++ only)
3503 Control if warning triggered by the "warn_if_not_aligned" attribute
3504 should be issued. This is enabled by default. Use
3505 -Wno-if-not-aligned to disable it.
3506
3507 -Wignored-qualifiers (C and C++ only)
3508 Warn if the return type of a function has a type qualifier such as
3509 "const". For ISO C such a type qualifier has no effect, since the
3510 value returned by a function is not an lvalue. For C++, the
3511 warning is only emitted for scalar types or "void". ISO C
3512 prohibits qualified "void" return types on function definitions, so
3513 such return types always receive a warning even without this
3514 option.
3515
3516 This warning is also enabled by -Wextra.
3517
3518 -Wignored-attributes (C and C++ only)
3519 Warn when an attribute is ignored. This is different from the
3520 -Wattributes option in that it warns whenever the compiler decides
3521 to drop an attribute, not that the attribute is either unknown,
3522 used in a wrong place, etc. This warning is enabled by default.
3523
3524 -Wmain
3525 Warn if the type of "main" is suspicious. "main" should be a
3526 function with external linkage, returning int, taking either zero
3527 arguments, two, or three arguments of appropriate types. This
3528 warning is enabled by default in C++ and is enabled by either -Wall
3529 or -Wpedantic.
3530
3531 -Wmisleading-indentation (C and C++ only)
3532 Warn when the indentation of the code does not reflect the block
3533 structure. Specifically, a warning is issued for "if", "else",
3534 "while", and "for" clauses with a guarded statement that does not
3535 use braces, followed by an unguarded statement with the same
3536 indentation.
3537
3538 In the following example, the call to "bar" is misleadingly
3539 indented as if it were guarded by the "if" conditional.
3540
3541 if (some_condition ())
3542 foo ();
3543 bar (); /* Gotcha: this is not guarded by the "if". */
3544
3545 In the case of mixed tabs and spaces, the warning uses the
3546 -ftabstop= option to determine if the statements line up
3547 (defaulting to 8).
3548
3549 The warning is not issued for code involving multiline preprocessor
3550 logic such as the following example.
3551
3552 if (flagA)
3553 foo (0);
3554 #if SOME_CONDITION_THAT_DOES_NOT_HOLD
3555 if (flagB)
3556 #endif
3557 foo (1);
3558
3559 The warning is not issued after a "#line" directive, since this
3560 typically indicates autogenerated code, and no assumptions can be
3561 made about the layout of the file that the directive references.
3562
3563 This warning is enabled by -Wall in C and C++.
3564
3565 -Wmissing-attributes
3566 Warn when a declaration of a function is missing one or more
3567 attributes that a related function is declared with and whose
3568 absence may adversely affect the correctness or efficiency of
3569 generated code. For example, in C++, the warning is issued when an
3570 explicit specialization of a primary template declared with
3571 attribute "alloc_align", "alloc_size", "assume_aligned", "format",
3572 "format_arg", "malloc", or "nonnull" is declared without it.
3573 Attributes "deprecated", "error", and "warning" suppress the
3574 warning..
3575
3576 -Wmissing-attributes is enabled by -Wall.
3577
3578 For example, since the declaration of the primary function template
3579 below makes use of both attribute "malloc" and "alloc_size" the
3580 declaration of the explicit specialization of the template is
3581 diagnosed because it is missing one of the attributes.
3582
3583 template <class T>
3584 T* __attribute__ ((malloc, alloc_size (1)))
3585 allocate (size_t);
3586
3587 template <>
3588 void* __attribute__ ((malloc)) // missing alloc_size
3589 allocate<void> (size_t);
3590
3591 -Wmissing-braces
3592 Warn if an aggregate or union initializer is not fully bracketed.
3593 In the following example, the initializer for "a" is not fully
3594 bracketed, but that for "b" is fully bracketed. This warning is
3595 enabled by -Wall in C.
3596
3597 int a[2][2] = { 0, 1, 2, 3 };
3598 int b[2][2] = { { 0, 1 }, { 2, 3 } };
3599
3600 This warning is enabled by -Wall.
3601
3602 -Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)
3603 Warn if a user-supplied include directory does not exist.
3604
3605 -Wmultistatement-macros
3606 Warn about unsafe multiple statement macros that appear to be
3607 guarded by a clause such as "if", "else", "for", "switch", or
3608 "while", in which only the first statement is actually guarded
3609 after the macro is expanded.
3610
3611 For example:
3612
3613 #define DOIT x++; y++
3614 if (c)
3615 DOIT;
3616
3617 will increment "y" unconditionally, not just when "c" holds. The
3618 can usually be fixed by wrapping the macro in a do-while loop:
3619
3620 #define DOIT do { x++; y++; } while (0)
3621 if (c)
3622 DOIT;
3623
3624 This warning is enabled by -Wall in C and C++.
3625
3626 -Wparentheses
3627 Warn if parentheses are omitted in certain contexts, such as when
3628 there is an assignment in a context where a truth value is
3629 expected, or when operators are nested whose precedence people
3630 often get confused about.
3631
3632 Also warn if a comparison like "x<=y<=z" appears; this is
3633 equivalent to "(x<=y ? 1 : 0) <= z", which is a different
3634 interpretation from that of ordinary mathematical notation.
3635
3636 Also warn for dangerous uses of the GNU extension to "?:" with
3637 omitted middle operand. When the condition in the "?": operator is
3638 a boolean expression, the omitted value is always 1. Often
3639 programmers expect it to be a value computed inside the conditional
3640 expression instead.
3641
3642 For C++ this also warns for some cases of unnecessary parentheses
3643 in declarations, which can indicate an attempt at a function call
3644 instead of a declaration:
3645
3646 {
3647 // Declares a local variable called mymutex.
3648 std::unique_lock<std::mutex> (mymutex);
3649 // User meant std::unique_lock<std::mutex> lock (mymutex);
3650 }
3651
3652 This warning is enabled by -Wall.
3653
3654 -Wsequence-point
3655 Warn about code that may have undefined semantics because of
3656 violations of sequence point rules in the C and C++ standards.
3657
3658 The C and C++ standards define the order in which expressions in a
3659 C/C++ program are evaluated in terms of sequence points, which
3660 represent a partial ordering between the execution of parts of the
3661 program: those executed before the sequence point, and those
3662 executed after it. These occur after the evaluation of a full
3663 expression (one which is not part of a larger expression), after
3664 the evaluation of the first operand of a "&&", "||", "? :" or ","
3665 (comma) operator, before a function is called (but after the
3666 evaluation of its arguments and the expression denoting the called
3667 function), and in certain other places. Other than as expressed by
3668 the sequence point rules, the order of evaluation of subexpressions
3669 of an expression is not specified. All these rules describe only a
3670 partial order rather than a total order, since, for example, if two
3671 functions are called within one expression with no sequence point
3672 between them, the order in which the functions are called is not
3673 specified. However, the standards committee have ruled that
3674 function calls do not overlap.
3675
3676 It is not specified when between sequence points modifications to
3677 the values of objects take effect. Programs whose behavior depends
3678 on this have undefined behavior; the C and C++ standards specify
3679 that "Between the previous and next sequence point an object shall
3680 have its stored value modified at most once by the evaluation of an
3681 expression. Furthermore, the prior value shall be read only to
3682 determine the value to be stored.". If a program breaks these
3683 rules, the results on any particular implementation are entirely
3684 unpredictable.
3685
3686 Examples of code with undefined behavior are "a = a++;", "a[n] =
3687 b[n++]" and "a[i++] = i;". Some more complicated cases are not
3688 diagnosed by this option, and it may give an occasional false
3689 positive result, but in general it has been found fairly effective
3690 at detecting this sort of problem in programs.
3691
3692 The C++17 standard will define the order of evaluation of operands
3693 in more cases: in particular it requires that the right-hand side
3694 of an assignment be evaluated before the left-hand side, so the
3695 above examples are no longer undefined. But this warning will
3696 still warn about them, to help people avoid writing code that is
3697 undefined in C and earlier revisions of C++.
3698
3699 The standard is worded confusingly, therefore there is some debate
3700 over the precise meaning of the sequence point rules in subtle
3701 cases. Links to discussions of the problem, including proposed
3702 formal definitions, may be found on the GCC readings page, at
3703 <http://gcc.gnu.org/readings.html>.
3704
3705 This warning is enabled by -Wall for C and C++.
3706
3707 -Wno-return-local-addr
3708 Do not warn about returning a pointer (or in C++, a reference) to a
3709 variable that goes out of scope after the function returns.
3710
3711 -Wreturn-type
3712 Warn whenever a function is defined with a return type that
3713 defaults to "int". Also warn about any "return" statement with no
3714 return value in a function whose return type is not "void" (falling
3715 off the end of the function body is considered returning without a
3716 value).
3717
3718 For C only, warn about a "return" statement with an expression in a
3719 function whose return type is "void", unless the expression type is
3720 also "void". As a GNU extension, the latter case is accepted
3721 without a warning unless -Wpedantic is used.
3722
3723 For C++, a function without return type always produces a
3724 diagnostic message, even when -Wno-return-type is specified. The
3725 only exceptions are "main" and functions defined in system headers.
3726
3727 This warning is enabled by default for C++ and is enabled by -Wall.
3728
3729 -Wshift-count-negative
3730 Warn if shift count is negative. This warning is enabled by
3731 default.
3732
3733 -Wshift-count-overflow
3734 Warn if shift count >= width of type. This warning is enabled by
3735 default.
3736
3737 -Wshift-negative-value
3738 Warn if left shifting a negative value. This warning is enabled by
3739 -Wextra in C99 and C++11 modes (and newer).
3740
3741 -Wshift-overflow
3742 -Wshift-overflow=n
3743 Warn about left shift overflows. This warning is enabled by
3744 default in C99 and C++11 modes (and newer).
3745
3746 -Wshift-overflow=1
3747 This is the warning level of -Wshift-overflow and is enabled by
3748 default in C99 and C++11 modes (and newer). This warning level
3749 does not warn about left-shifting 1 into the sign bit.
3750 (However, in C, such an overflow is still rejected in contexts
3751 where an integer constant expression is required.)
3752
3753 -Wshift-overflow=2
3754 This warning level also warns about left-shifting 1 into the
3755 sign bit, unless C++14 mode is active.
3756
3757 -Wswitch
3758 Warn whenever a "switch" statement has an index of enumerated type
3759 and lacks a "case" for one or more of the named codes of that
3760 enumeration. (The presence of a "default" label prevents this
3761 warning.) "case" labels outside the enumeration range also provoke
3762 warnings when this option is used (even if there is a "default"
3763 label). This warning is enabled by -Wall.
3764
3765 -Wswitch-default
3766 Warn whenever a "switch" statement does not have a "default" case.
3767
3768 -Wswitch-enum
3769 Warn whenever a "switch" statement has an index of enumerated type
3770 and lacks a "case" for one or more of the named codes of that
3771 enumeration. "case" labels outside the enumeration range also
3772 provoke warnings when this option is used. The only difference
3773 between -Wswitch and this option is that this option gives a
3774 warning about an omitted enumeration code even if there is a
3775 "default" label.
3776
3777 -Wswitch-bool
3778 Warn whenever a "switch" statement has an index of boolean type and
3779 the case values are outside the range of a boolean type. It is
3780 possible to suppress this warning by casting the controlling
3781 expression to a type other than "bool". For example:
3782
3783 switch ((int) (a == 4))
3784 {
3785 ...
3786 }
3787
3788 This warning is enabled by default for C and C++ programs.
3789
3790 -Wswitch-unreachable
3791 Warn whenever a "switch" statement contains statements between the
3792 controlling expression and the first case label, which will never
3793 be executed. For example:
3794
3795 switch (cond)
3796 {
3797 i = 15;
3798 ...
3799 case 5:
3800 ...
3801 }
3802
3803 -Wswitch-unreachable does not warn if the statement between the
3804 controlling expression and the first case label is just a
3805 declaration:
3806
3807 switch (cond)
3808 {
3809 int i;
3810 ...
3811 case 5:
3812 i = 5;
3813 ...
3814 }
3815
3816 This warning is enabled by default for C and C++ programs.
3817
3818 -Wsync-nand (C and C++ only)
3819 Warn when "__sync_fetch_and_nand" and "__sync_nand_and_fetch"
3820 built-in functions are used. These functions changed semantics in
3821 GCC 4.4.
3822
3823 -Wunused-but-set-parameter
3824 Warn whenever a function parameter is assigned to, but otherwise
3825 unused (aside from its declaration).
3826
3827 To suppress this warning use the "unused" attribute.
3828
3829 This warning is also enabled by -Wunused together with -Wextra.
3830
3831 -Wunused-but-set-variable
3832 Warn whenever a local variable is assigned to, but otherwise unused
3833 (aside from its declaration). This warning is enabled by -Wall.
3834
3835 To suppress this warning use the "unused" attribute.
3836
3837 This warning is also enabled by -Wunused, which is enabled by
3838 -Wall.
3839
3840 -Wunused-function
3841 Warn whenever a static function is declared but not defined or a
3842 non-inline static function is unused. This warning is enabled by
3843 -Wall.
3844
3845 -Wunused-label
3846 Warn whenever a label is declared but not used. This warning is
3847 enabled by -Wall.
3848
3849 To suppress this warning use the "unused" attribute.
3850
3851 -Wunused-local-typedefs (C, Objective-C, C++ and Objective-C++ only)
3852 Warn when a typedef locally defined in a function is not used.
3853 This warning is enabled by -Wall.
3854
3855 -Wunused-parameter
3856 Warn whenever a function parameter is unused aside from its
3857 declaration.
3858
3859 To suppress this warning use the "unused" attribute.
3860
3861 -Wno-unused-result
3862 Do not warn if a caller of a function marked with attribute
3863 "warn_unused_result" does not use its return value. The default is
3864 -Wunused-result.
3865
3866 -Wunused-variable
3867 Warn whenever a local or static variable is unused aside from its
3868 declaration. This option implies -Wunused-const-variable=1 for C,
3869 but not for C++. This warning is enabled by -Wall.
3870
3871 To suppress this warning use the "unused" attribute.
3872
3873 -Wunused-const-variable
3874 -Wunused-const-variable=n
3875 Warn whenever a constant static variable is unused aside from its
3876 declaration. -Wunused-const-variable=1 is enabled by
3877 -Wunused-variable for C, but not for C++. In C this declares
3878 variable storage, but in C++ this is not an error since const
3879 variables take the place of "#define"s.
3880
3881 To suppress this warning use the "unused" attribute.
3882
3883 -Wunused-const-variable=1
3884 This is the warning level that is enabled by -Wunused-variable
3885 for C. It warns only about unused static const variables
3886 defined in the main compilation unit, but not about static
3887 const variables declared in any header included.
3888
3889 -Wunused-const-variable=2
3890 This warning level also warns for unused constant static
3891 variables in headers (excluding system headers). This is the
3892 warning level of -Wunused-const-variable and must be explicitly
3893 requested since in C++ this isn't an error and in C it might be
3894 harder to clean up all headers included.
3895
3896 -Wunused-value
3897 Warn whenever a statement computes a result that is explicitly not
3898 used. To suppress this warning cast the unused expression to
3899 "void". This includes an expression-statement or the left-hand side
3900 of a comma expression that contains no side effects. For example,
3901 an expression such as "x[i,j]" causes a warning, while
3902 "x[(void)i,j]" does not.
3903
3904 This warning is enabled by -Wall.
3905
3906 -Wunused
3907 All the above -Wunused options combined.
3908
3909 In order to get a warning about an unused function parameter, you
3910 must either specify -Wextra -Wunused (note that -Wall implies
3911 -Wunused), or separately specify -Wunused-parameter.
3912
3913 -Wuninitialized
3914 Warn if an automatic variable is used without first being
3915 initialized or if a variable may be clobbered by a "setjmp" call.
3916 In C++, warn if a non-static reference or non-static "const" member
3917 appears in a class without constructors.
3918
3919 If you want to warn about code that uses the uninitialized value of
3920 the variable in its own initializer, use the -Winit-self option.
3921
3922 These warnings occur for individual uninitialized or clobbered
3923 elements of structure, union or array variables as well as for
3924 variables that are uninitialized or clobbered as a whole. They do
3925 not occur for variables or elements declared "volatile". Because
3926 these warnings depend on optimization, the exact variables or
3927 elements for which there are warnings depends on the precise
3928 optimization options and version of GCC used.
3929
3930 Note that there may be no warning about a variable that is used
3931 only to compute a value that itself is never used, because such
3932 computations may be deleted by data flow analysis before the
3933 warnings are printed.
3934
3935 -Winvalid-memory-model
3936 Warn for invocations of __atomic Builtins, __sync Builtins, and the
3937 C11 atomic generic functions with a memory consistency argument
3938 that is either invalid for the operation or outside the range of
3939 values of the "memory_order" enumeration. For example, since the
3940 "__atomic_store" and "__atomic_store_n" built-ins are only defined
3941 for the relaxed, release, and sequentially consistent memory orders
3942 the following code is diagnosed:
3943
3944 void store (int *i)
3945 {
3946 __atomic_store_n (i, 0, memory_order_consume);
3947 }
3948
3949 -Winvalid-memory-model is enabled by default.
3950
3951 -Wmaybe-uninitialized
3952 For an automatic (i.e. local) variable, if there exists a path from
3953 the function entry to a use of the variable that is initialized,
3954 but there exist some other paths for which the variable is not
3955 initialized, the compiler emits a warning if it cannot prove the
3956 uninitialized paths are not executed at run time.
3957
3958 These warnings are only possible in optimizing compilation, because
3959 otherwise GCC does not keep track of the state of variables.
3960
3961 These warnings are made optional because GCC may not be able to
3962 determine when the code is correct in spite of appearing to have an
3963 error. Here is one example of how this can happen:
3964
3965 {
3966 int x;
3967 switch (y)
3968 {
3969 case 1: x = 1;
3970 break;
3971 case 2: x = 4;
3972 break;
3973 case 3: x = 5;
3974 }
3975 foo (x);
3976 }
3977
3978 If the value of "y" is always 1, 2 or 3, then "x" is always
3979 initialized, but GCC doesn't know this. To suppress the warning,
3980 you need to provide a default case with assert(0) or similar code.
3981
3982 This option also warns when a non-volatile automatic variable might
3983 be changed by a call to "longjmp". The compiler sees only the
3984 calls to "setjmp". It cannot know where "longjmp" will be called;
3985 in fact, a signal handler could call it at any point in the code.
3986 As a result, you may get a warning even when there is in fact no
3987 problem because "longjmp" cannot in fact be called at the place
3988 that would cause a problem.
3989
3990 Some spurious warnings can be avoided if you declare all the
3991 functions you use that never return as "noreturn".
3992
3993 This warning is enabled by -Wall or -Wextra.
3994
3995 -Wunknown-pragmas
3996 Warn when a "#pragma" directive is encountered that is not
3997 understood by GCC. If this command-line option is used, warnings
3998 are even issued for unknown pragmas in system header files. This
3999 is not the case if the warnings are only enabled by the -Wall
4000 command-line option.
4001
4002 -Wno-pragmas
4003 Do not warn about misuses of pragmas, such as incorrect parameters,
4004 invalid syntax, or conflicts between pragmas. See also
4005 -Wunknown-pragmas.
4006
4007 -Wstrict-aliasing
4008 This option is only active when -fstrict-aliasing is active. It
4009 warns about code that might break the strict aliasing rules that
4010 the compiler is using for optimization. The warning does not catch
4011 all cases, but does attempt to catch the more common pitfalls. It
4012 is included in -Wall. It is equivalent to -Wstrict-aliasing=3
4013
4014 -Wstrict-aliasing=n
4015 This option is only active when -fstrict-aliasing is active. It
4016 warns about code that might break the strict aliasing rules that
4017 the compiler is using for optimization. Higher levels correspond
4018 to higher accuracy (fewer false positives). Higher levels also
4019 correspond to more effort, similar to the way -O works.
4020 -Wstrict-aliasing is equivalent to -Wstrict-aliasing=3.
4021
4022 Level 1: Most aggressive, quick, least accurate. Possibly useful
4023 when higher levels do not warn but -fstrict-aliasing still breaks
4024 the code, as it has very few false negatives. However, it has many
4025 false positives. Warns for all pointer conversions between
4026 possibly incompatible types, even if never dereferenced. Runs in
4027 the front end only.
4028
4029 Level 2: Aggressive, quick, not too precise. May still have many
4030 false positives (not as many as level 1 though), and few false
4031 negatives (but possibly more than level 1). Unlike level 1, it
4032 only warns when an address is taken. Warns about incomplete types.
4033 Runs in the front end only.
4034
4035 Level 3 (default for -Wstrict-aliasing): Should have very few false
4036 positives and few false negatives. Slightly slower than levels 1
4037 or 2 when optimization is enabled. Takes care of the common
4038 pun+dereference pattern in the front end: "*(int*)&some_float". If
4039 optimization is enabled, it also runs in the back end, where it
4040 deals with multiple statement cases using flow-sensitive points-to
4041 information. Only warns when the converted pointer is
4042 dereferenced. Does not warn about incomplete types.
4043
4044 -Wstrict-overflow
4045 -Wstrict-overflow=n
4046 This option is only active when signed overflow is undefined. It
4047 warns about cases where the compiler optimizes based on the
4048 assumption that signed overflow does not occur. Note that it does
4049 not warn about all cases where the code might overflow: it only
4050 warns about cases where the compiler implements some optimization.
4051 Thus this warning depends on the optimization level.
4052
4053 An optimization that assumes that signed overflow does not occur is
4054 perfectly safe if the values of the variables involved are such
4055 that overflow never does, in fact, occur. Therefore this warning
4056 can easily give a false positive: a warning about code that is not
4057 actually a problem. To help focus on important issues, several
4058 warning levels are defined. No warnings are issued for the use of
4059 undefined signed overflow when estimating how many iterations a
4060 loop requires, in particular when determining whether a loop will
4061 be executed at all.
4062
4063 -Wstrict-overflow=1
4064 Warn about cases that are both questionable and easy to avoid.
4065 For example the compiler simplifies "x + 1 > x" to 1. This
4066 level of -Wstrict-overflow is enabled by -Wall; higher levels
4067 are not, and must be explicitly requested.
4068
4069 -Wstrict-overflow=2
4070 Also warn about other cases where a comparison is simplified to
4071 a constant. For example: "abs (x) >= 0". This can only be
4072 simplified when signed integer overflow is undefined, because
4073 "abs (INT_MIN)" overflows to "INT_MIN", which is less than
4074 zero. -Wstrict-overflow (with no level) is the same as
4075 -Wstrict-overflow=2.
4076
4077 -Wstrict-overflow=3
4078 Also warn about other cases where a comparison is simplified.
4079 For example: "x + 1 > 1" is simplified to "x > 0".
4080
4081 -Wstrict-overflow=4
4082 Also warn about other simplifications not covered by the above
4083 cases. For example: "(x * 10) / 5" is simplified to "x * 2".
4084
4085 -Wstrict-overflow=5
4086 Also warn about cases where the compiler reduces the magnitude
4087 of a constant involved in a comparison. For example: "x + 2 >
4088 y" is simplified to "x + 1 >= y". This is reported only at the
4089 highest warning level because this simplification applies to
4090 many comparisons, so this warning level gives a very large
4091 number of false positives.
4092
4093 -Wstringop-overflow
4094 -Wstringop-overflow=type
4095 Warn for calls to string manipulation functions such as "memcpy"
4096 and "strcpy" that are determined to overflow the destination
4097 buffer. The optional argument is one greater than the type of
4098 Object Size Checking to perform to determine the size of the
4099 destination. The argument is meaningful only for functions that
4100 operate on character arrays but not for raw memory functions like
4101 "memcpy" which always make use of Object Size type-0. The option
4102 also warns for calls that specify a size in excess of the largest
4103 possible object or at most "SIZE_MAX / 2" bytes. The option
4104 produces the best results with optimization enabled but can detect
4105 a small subset of simple buffer overflows even without optimization
4106 in calls to the GCC built-in functions like "__builtin_memcpy" that
4107 correspond to the standard functions. In any case, the option
4108 warns about just a subset of buffer overflows detected by the
4109 corresponding overflow checking built-ins. For example, the option
4110 will issue a warning for the "strcpy" call below because it copies
4111 at least 5 characters (the string "blue" including the terminating
4112 NUL) into the buffer of size 4.
4113
4114 enum Color { blue, purple, yellow };
4115 const char* f (enum Color clr)
4116 {
4117 static char buf [4];
4118 const char *str;
4119 switch (clr)
4120 {
4121 case blue: str = "blue"; break;
4122 case purple: str = "purple"; break;
4123 case yellow: str = "yellow"; break;
4124 }
4125
4126 return strcpy (buf, str); // warning here
4127 }
4128
4129 Option -Wstringop-overflow=2 is enabled by default.
4130
4131 -Wstringop-overflow
4132 -Wstringop-overflow=1
4133 The -Wstringop-overflow=1 option uses type-zero Object Size
4134 Checking to determine the sizes of destination objects. This
4135 is the default setting of the option. At this setting the
4136 option will not warn for writes past the end of subobjects of
4137 larger objects accessed by pointers unless the size of the
4138 largest surrounding object is known. When the destination may
4139 be one of several objects it is assumed to be the largest one
4140 of them. On Linux systems, when optimization is enabled at
4141 this setting the option warns for the same code as when the
4142 "_FORTIFY_SOURCE" macro is defined to a non-zero value.
4143
4144 -Wstringop-overflow=2
4145 The -Wstringop-overflow=2 option uses type-one Object Size
4146 Checking to determine the sizes of destination objects. At
4147 this setting the option will warn about overflows when writing
4148 to members of the largest complete objects whose exact size is
4149 known. It will, however, not warn for excessive writes to the
4150 same members of unknown objects referenced by pointers since
4151 they may point to arrays containing unknown numbers of
4152 elements.
4153
4154 -Wstringop-overflow=3
4155 The -Wstringop-overflow=3 option uses type-two Object Size
4156 Checking to determine the sizes of destination objects. At
4157 this setting the option warns about overflowing the smallest
4158 object or data member. This is the most restrictive setting of
4159 the option that may result in warnings for safe code.
4160
4161 -Wstringop-overflow=4
4162 The -Wstringop-overflow=4 option uses type-three Object Size
4163 Checking to determine the sizes of destination objects. At
4164 this setting the option will warn about overflowing any data
4165 members, and when the destination is one of several objects it
4166 uses the size of the largest of them to decide whether to issue
4167 a warning. Similarly to -Wstringop-overflow=3 this setting of
4168 the option may result in warnings for benign code.
4169
4170 -Wstringop-truncation
4171 Warn for calls to bounded string manipulation functions such as
4172 "strncat", "strncpy", and "stpncpy" that may either truncate the
4173 copied string or leave the destination unchanged.
4174
4175 In the following example, the call to "strncat" specifies a bound
4176 that is less than the length of the source string. As a result,
4177 the copy of the source will be truncated and so the call is
4178 diagnosed. To avoid the warning use "bufsize - strlen (buf) - 1)"
4179 as the bound.
4180
4181 void append (char *buf, size_t bufsize)
4182 {
4183 strncat (buf, ".txt", 3);
4184 }
4185
4186 As another example, the following call to "strncpy" results in
4187 copying to "d" just the characters preceding the terminating NUL,
4188 without appending the NUL to the end. Assuming the result of
4189 "strncpy" is necessarily a NUL-terminated string is a common
4190 mistake, and so the call is diagnosed. To avoid the warning when
4191 the result is not expected to be NUL-terminated, call "memcpy"
4192 instead.
4193
4194 void copy (char *d, const char *s)
4195 {
4196 strncpy (d, s, strlen (s));
4197 }
4198
4199 In the following example, the call to "strncpy" specifies the size
4200 of the destination buffer as the bound. If the length of the
4201 source string is equal to or greater than this size the result of
4202 the copy will not be NUL-terminated. Therefore, the call is also
4203 diagnosed. To avoid the warning, specify "sizeof buf - 1" as the
4204 bound and set the last element of the buffer to "NUL".
4205
4206 void copy (const char *s)
4207 {
4208 char buf[80];
4209 strncpy (buf, s, sizeof buf);
4210 ...
4211 }
4212
4213 In situations where a character array is intended to store a
4214 sequence of bytes with no terminating "NUL" such an array may be
4215 annotated with attribute "nonstring" to avoid this warning. Such
4216 arrays, however, are not suitable arguments to functions that
4217 expect "NUL"-terminated strings. To help detect accidental misuses
4218 of such arrays GCC issues warnings unless it can prove that the use
4219 is safe.
4220
4221 Option -Wstringop-truncation is enabled by -Wall.
4222
4223 -Wsuggest-attribute=[pure|const|noreturn|format|cold|malloc]
4224 Warn for cases where adding an attribute may be beneficial. The
4225 attributes currently supported are listed below.
4226
4227 -Wsuggest-attribute=pure
4228 -Wsuggest-attribute=const
4229 -Wsuggest-attribute=noreturn
4230 -Wsuggest-attribute=malloc
4231 Warn about functions that might be candidates for attributes
4232 "pure", "const" or "noreturn" or "malloc". The compiler only
4233 warns for functions visible in other compilation units or (in
4234 the case of "pure" and "const") if it cannot prove that the
4235 function returns normally. A function returns normally if it
4236 doesn't contain an infinite loop or return abnormally by
4237 throwing, calling "abort" or trapping. This analysis requires
4238 option -fipa-pure-const, which is enabled by default at -O and
4239 higher. Higher optimization levels improve the accuracy of the
4240 analysis.
4241
4242 -Wsuggest-attribute=format
4243 -Wmissing-format-attribute
4244 Warn about function pointers that might be candidates for
4245 "format" attributes. Note these are only possible candidates,
4246 not absolute ones. GCC guesses that function pointers with
4247 "format" attributes that are used in assignment,
4248 initialization, parameter passing or return statements should
4249 have a corresponding "format" attribute in the resulting type.
4250 I.e. the left-hand side of the assignment or initialization,
4251 the type of the parameter variable, or the return type of the
4252 containing function respectively should also have a "format"
4253 attribute to avoid the warning.
4254
4255 GCC also warns about function definitions that might be
4256 candidates for "format" attributes. Again, these are only
4257 possible candidates. GCC guesses that "format" attributes
4258 might be appropriate for any function that calls a function
4259 like "vprintf" or "vscanf", but this might not always be the
4260 case, and some functions for which "format" attributes are
4261 appropriate may not be detected.
4262
4263 -Wsuggest-attribute=cold
4264 Warn about functions that might be candidates for "cold"
4265 attribute. This is based on static detection and generally
4266 will only warn about functions which always leads to a call to
4267 another "cold" function such as wrappers of C++ "throw" or
4268 fatal error reporting functions leading to "abort".
4269
4270 -Wsuggest-final-types
4271 Warn about types with virtual methods where code quality would be
4272 improved if the type were declared with the C++11 "final"
4273 specifier, or, if possible, declared in an anonymous namespace.
4274 This allows GCC to more aggressively devirtualize the polymorphic
4275 calls. This warning is more effective with link time optimization,
4276 where the information about the class hierarchy graph is more
4277 complete.
4278
4279 -Wsuggest-final-methods
4280 Warn about virtual methods where code quality would be improved if
4281 the method were declared with the C++11 "final" specifier, or, if
4282 possible, its type were declared in an anonymous namespace or with
4283 the "final" specifier. This warning is more effective with link-
4284 time optimization, where the information about the class hierarchy
4285 graph is more complete. It is recommended to first consider
4286 suggestions of -Wsuggest-final-types and then rebuild with new
4287 annotations.
4288
4289 -Wsuggest-override
4290 Warn about overriding virtual functions that are not marked with
4291 the override keyword.
4292
4293 -Walloc-zero
4294 Warn about calls to allocation functions decorated with attribute
4295 "alloc_size" that specify zero bytes, including those to the built-
4296 in forms of the functions "aligned_alloc", "alloca", "calloc",
4297 "malloc", and "realloc". Because the behavior of these functions
4298 when called with a zero size differs among implementations (and in
4299 the case of "realloc" has been deprecated) relying on it may result
4300 in subtle portability bugs and should be avoided.
4301
4302 -Walloc-size-larger-than=n
4303 Warn about calls to functions decorated with attribute "alloc_size"
4304 that attempt to allocate objects larger than the specified number
4305 of bytes, or where the result of the size computation in an integer
4306 type with infinite precision would exceed "SIZE_MAX / 2". The
4307 option argument n may end in one of the standard suffixes
4308 designating a multiple of bytes such as "kB" and "KiB" for kilobyte
4309 and kibibyte, respectively, "MB" and "MiB" for megabyte and
4310 mebibyte, and so on. -Walloc-size-larger-than=PTRDIFF_MAX is
4311 enabled by default. Warnings controlled by the option can be
4312 disabled by specifying n of SIZE_MAX or more.
4313
4314 -Walloca
4315 This option warns on all uses of "alloca" in the source.
4316
4317 -Walloca-larger-than=n
4318 This option warns on calls to "alloca" that are not bounded by a
4319 controlling predicate limiting its argument of integer type to at
4320 most n bytes, or calls to "alloca" where the bound is unknown.
4321 Arguments of non-integer types are considered unbounded even if
4322 they appear to be constrained to the expected range.
4323
4324 For example, a bounded case of "alloca" could be:
4325
4326 void func (size_t n)
4327 {
4328 void *p;
4329 if (n <= 1000)
4330 p = alloca (n);
4331 else
4332 p = malloc (n);
4333 f (p);
4334 }
4335
4336 In the above example, passing "-Walloca-larger-than=1000" would not
4337 issue a warning because the call to "alloca" is known to be at most
4338 1000 bytes. However, if "-Walloca-larger-than=500" were passed,
4339 the compiler would emit a warning.
4340
4341 Unbounded uses, on the other hand, are uses of "alloca" with no
4342 controlling predicate constraining its integer argument. For
4343 example:
4344
4345 void func ()
4346 {
4347 void *p = alloca (n);
4348 f (p);
4349 }
4350
4351 If "-Walloca-larger-than=500" were passed, the above would trigger
4352 a warning, but this time because of the lack of bounds checking.
4353
4354 Note, that even seemingly correct code involving signed integers
4355 could cause a warning:
4356
4357 void func (signed int n)
4358 {
4359 if (n < 500)
4360 {
4361 p = alloca (n);
4362 f (p);
4363 }
4364 }
4365
4366 In the above example, n could be negative, causing a larger than
4367 expected argument to be implicitly cast into the "alloca" call.
4368
4369 This option also warns when "alloca" is used in a loop.
4370
4371 This warning is not enabled by -Wall, and is only active when
4372 -ftree-vrp is active (default for -O2 and above).
4373
4374 See also -Wvla-larger-than=n.
4375
4376 -Warray-bounds
4377 -Warray-bounds=n
4378 This option is only active when -ftree-vrp is active (default for
4379 -O2 and above). It warns about subscripts to arrays that are always
4380 out of bounds. This warning is enabled by -Wall.
4381
4382 -Warray-bounds=1
4383 This is the warning level of -Warray-bounds and is enabled by
4384 -Wall; higher levels are not, and must be explicitly requested.
4385
4386 -Warray-bounds=2
4387 This warning level also warns about out of bounds access for
4388 arrays at the end of a struct and for arrays accessed through
4389 pointers. This warning level may give a larger number of false
4390 positives and is deactivated by default.
4391
4392 -Wattribute-alias
4393 Warn about declarations using the "alias" and similar attributes
4394 whose target is incompatible with the type of the alias.
4395
4396 -Wbool-compare
4397 Warn about boolean expression compared with an integer value
4398 different from "true"/"false". For instance, the following
4399 comparison is always false:
4400
4401 int n = 5;
4402 ...
4403 if ((n > 1) == 2) { ... }
4404
4405 This warning is enabled by -Wall.
4406
4407 -Wbool-operation
4408 Warn about suspicious operations on expressions of a boolean type.
4409 For instance, bitwise negation of a boolean is very likely a bug in
4410 the program. For C, this warning also warns about incrementing or
4411 decrementing a boolean, which rarely makes sense. (In C++,
4412 decrementing a boolean is always invalid. Incrementing a boolean
4413 is invalid in C++17, and deprecated otherwise.)
4414
4415 This warning is enabled by -Wall.
4416
4417 -Wduplicated-branches
4418 Warn when an if-else has identical branches. This warning detects
4419 cases like
4420
4421 if (p != NULL)
4422 return 0;
4423 else
4424 return 0;
4425
4426 It doesn't warn when both branches contain just a null statement.
4427 This warning also warn for conditional operators:
4428
4429 int i = x ? *p : *p;
4430
4431 -Wduplicated-cond
4432 Warn about duplicated conditions in an if-else-if chain. For
4433 instance, warn for the following code:
4434
4435 if (p->q != NULL) { ... }
4436 else if (p->q != NULL) { ... }
4437
4438 -Wframe-address
4439 Warn when the __builtin_frame_address or __builtin_return_address
4440 is called with an argument greater than 0. Such calls may return
4441 indeterminate values or crash the program. The warning is included
4442 in -Wall.
4443
4444 -Wno-discarded-qualifiers (C and Objective-C only)
4445 Do not warn if type qualifiers on pointers are being discarded.
4446 Typically, the compiler warns if a "const char *" variable is
4447 passed to a function that takes a "char *" parameter. This option
4448 can be used to suppress such a warning.
4449
4450 -Wno-discarded-array-qualifiers (C and Objective-C only)
4451 Do not warn if type qualifiers on arrays which are pointer targets
4452 are being discarded. Typically, the compiler warns if a "const int
4453 (*)[]" variable is passed to a function that takes a "int (*)[]"
4454 parameter. This option can be used to suppress such a warning.
4455
4456 -Wno-incompatible-pointer-types (C and Objective-C only)
4457 Do not warn when there is a conversion between pointers that have
4458 incompatible types. This warning is for cases not covered by
4459 -Wno-pointer-sign, which warns for pointer argument passing or
4460 assignment with different signedness.
4461
4462 -Wno-int-conversion (C and Objective-C only)
4463 Do not warn about incompatible integer to pointer and pointer to
4464 integer conversions. This warning is about implicit conversions;
4465 for explicit conversions the warnings -Wno-int-to-pointer-cast and
4466 -Wno-pointer-to-int-cast may be used.
4467
4468 -Wno-div-by-zero
4469 Do not warn about compile-time integer division by zero. Floating-
4470 point division by zero is not warned about, as it can be a
4471 legitimate way of obtaining infinities and NaNs.
4472
4473 -Wsystem-headers
4474 Print warning messages for constructs found in system header files.
4475 Warnings from system headers are normally suppressed, on the
4476 assumption that they usually do not indicate real problems and
4477 would only make the compiler output harder to read. Using this
4478 command-line option tells GCC to emit warnings from system headers
4479 as if they occurred in user code. However, note that using -Wall
4480 in conjunction with this option does not warn about unknown pragmas
4481 in system headers---for that, -Wunknown-pragmas must also be used.
4482
4483 -Wtautological-compare
4484 Warn if a self-comparison always evaluates to true or false. This
4485 warning detects various mistakes such as:
4486
4487 int i = 1;
4488 ...
4489 if (i > i) { ... }
4490
4491 This warning also warns about bitwise comparisons that always
4492 evaluate to true or false, for instance:
4493
4494 if ((a & 16) == 10) { ... }
4495
4496 will always be false.
4497
4498 This warning is enabled by -Wall.
4499
4500 -Wtrampolines
4501 Warn about trampolines generated for pointers to nested functions.
4502 A trampoline is a small piece of data or code that is created at
4503 run time on the stack when the address of a nested function is
4504 taken, and is used to call the nested function indirectly. For
4505 some targets, it is made up of data only and thus requires no
4506 special treatment. But, for most targets, it is made up of code
4507 and thus requires the stack to be made executable in order for the
4508 program to work properly.
4509
4510 -Wfloat-equal
4511 Warn if floating-point values are used in equality comparisons.
4512
4513 The idea behind this is that sometimes it is convenient (for the
4514 programmer) to consider floating-point values as approximations to
4515 infinitely precise real numbers. If you are doing this, then you
4516 need to compute (by analyzing the code, or in some other way) the
4517 maximum or likely maximum error that the computation introduces,
4518 and allow for it when performing comparisons (and when producing
4519 output, but that's a different problem). In particular, instead of
4520 testing for equality, you should check to see whether the two
4521 values have ranges that overlap; and this is done with the
4522 relational operators, so equality comparisons are probably
4523 mistaken.
4524
4525 -Wtraditional (C and Objective-C only)
4526 Warn about certain constructs that behave differently in
4527 traditional and ISO C. Also warn about ISO C constructs that have
4528 no traditional C equivalent, and/or problematic constructs that
4529 should be avoided.
4530
4531 * Macro parameters that appear within string literals in the
4532 macro body. In traditional C macro replacement takes place
4533 within string literals, but in ISO C it does not.
4534
4535 * In traditional C, some preprocessor directives did not exist.
4536 Traditional preprocessors only considered a line to be a
4537 directive if the # appeared in column 1 on the line. Therefore
4538 -Wtraditional warns about directives that traditional C
4539 understands but ignores because the # does not appear as the
4540 first character on the line. It also suggests you hide
4541 directives like "#pragma" not understood by traditional C by
4542 indenting them. Some traditional implementations do not
4543 recognize "#elif", so this option suggests avoiding it
4544 altogether.
4545
4546 * A function-like macro that appears without arguments.
4547
4548 * The unary plus operator.
4549
4550 * The U integer constant suffix, or the F or L floating-point
4551 constant suffixes. (Traditional C does support the L suffix on
4552 integer constants.) Note, these suffixes appear in macros
4553 defined in the system headers of most modern systems, e.g. the
4554 _MIN/_MAX macros in "<limits.h>". Use of these macros in user
4555 code might normally lead to spurious warnings, however GCC's
4556 integrated preprocessor has enough context to avoid warning in
4557 these cases.
4558
4559 * A function declared external in one block and then used after
4560 the end of the block.
4561
4562 * A "switch" statement has an operand of type "long".
4563
4564 * A non-"static" function declaration follows a "static" one.
4565 This construct is not accepted by some traditional C compilers.
4566
4567 * The ISO type of an integer constant has a different width or
4568 signedness from its traditional type. This warning is only
4569 issued if the base of the constant is ten. I.e. hexadecimal or
4570 octal values, which typically represent bit patterns, are not
4571 warned about.
4572
4573 * Usage of ISO string concatenation is detected.
4574
4575 * Initialization of automatic aggregates.
4576
4577 * Identifier conflicts with labels. Traditional C lacks a
4578 separate namespace for labels.
4579
4580 * Initialization of unions. If the initializer is zero, the
4581 warning is omitted. This is done under the assumption that the
4582 zero initializer in user code appears conditioned on e.g.
4583 "__STDC__" to avoid missing initializer warnings and relies on
4584 default initialization to zero in the traditional C case.
4585
4586 * Conversions by prototypes between fixed/floating-point values
4587 and vice versa. The absence of these prototypes when compiling
4588 with traditional C causes serious problems. This is a subset
4589 of the possible conversion warnings; for the full set use
4590 -Wtraditional-conversion.
4591
4592 * Use of ISO C style function definitions. This warning
4593 intentionally is not issued for prototype declarations or
4594 variadic functions because these ISO C features appear in your
4595 code when using libiberty's traditional C compatibility macros,
4596 "PARAMS" and "VPARAMS". This warning is also bypassed for
4597 nested functions because that feature is already a GCC
4598 extension and thus not relevant to traditional C compatibility.
4599
4600 -Wtraditional-conversion (C and Objective-C only)
4601 Warn if a prototype causes a type conversion that is different from
4602 what would happen to the same argument in the absence of a
4603 prototype. This includes conversions of fixed point to floating
4604 and vice versa, and conversions changing the width or signedness of
4605 a fixed-point argument except when the same as the default
4606 promotion.
4607
4608 -Wdeclaration-after-statement (C and Objective-C only)
4609 Warn when a declaration is found after a statement in a block.
4610 This construct, known from C++, was introduced with ISO C99 and is
4611 by default allowed in GCC. It is not supported by ISO C90.
4612
4613 -Wshadow
4614 Warn whenever a local variable or type declaration shadows another
4615 variable, parameter, type, class member (in C++), or instance
4616 variable (in Objective-C) or whenever a built-in function is
4617 shadowed. Note that in C++, the compiler warns if a local variable
4618 shadows an explicit typedef, but not if it shadows a
4619 struct/class/enum. Same as -Wshadow=global.
4620
4621 -Wno-shadow-ivar (Objective-C only)
4622 Do not warn whenever a local variable shadows an instance variable
4623 in an Objective-C method.
4624
4625 -Wshadow=global
4626 The default for -Wshadow. Warns for any (global) shadowing.
4627
4628 -Wshadow=local
4629 Warn when a local variable shadows another local variable or
4630 parameter. This warning is enabled by -Wshadow=global.
4631
4632 -Wshadow=compatible-local
4633 Warn when a local variable shadows another local variable or
4634 parameter whose type is compatible with that of the shadowing
4635 variable. In C++, type compatibility here means the type of the
4636 shadowing variable can be converted to that of the shadowed
4637 variable. The creation of this flag (in addition to -Wshadow=local)
4638 is based on the idea that when a local variable shadows another one
4639 of incompatible type, it is most likely intentional, not a bug or
4640 typo, as shown in the following example:
4641
4642 for (SomeIterator i = SomeObj.begin(); i != SomeObj.end(); ++i)
4643 {
4644 for (int i = 0; i < N; ++i)
4645 {
4646 ...
4647 }
4648 ...
4649 }
4650
4651 Since the two variable "i" in the example above have incompatible
4652 types, enabling only -Wshadow=compatible-local will not emit a
4653 warning. Because their types are incompatible, if a programmer
4654 accidentally uses one in place of the other, type checking will
4655 catch that and emit an error or warning. So not warning (about
4656 shadowing) in this case will not lead to undetected bugs. Use of
4657 this flag instead of -Wshadow=local can possibly reduce the number
4658 of warnings triggered by intentional shadowing.
4659
4660 This warning is enabled by -Wshadow=local.
4661
4662 -Wlarger-than=len
4663 Warn whenever an object of larger than len bytes is defined.
4664
4665 -Wframe-larger-than=len
4666 Warn if the size of a function frame is larger than len bytes. The
4667 computation done to determine the stack frame size is approximate
4668 and not conservative. The actual requirements may be somewhat
4669 greater than len even if you do not get a warning. In addition,
4670 any space allocated via "alloca", variable-length arrays, or
4671 related constructs is not included by the compiler when determining
4672 whether or not to issue a warning.
4673
4674 -Wno-free-nonheap-object
4675 Do not warn when attempting to free an object that was not
4676 allocated on the heap.
4677
4678 -Wstack-usage=len
4679 Warn if the stack usage of a function might be larger than len
4680 bytes. The computation done to determine the stack usage is
4681 conservative. Any space allocated via "alloca", variable-length
4682 arrays, or related constructs is included by the compiler when
4683 determining whether or not to issue a warning.
4684
4685 The message is in keeping with the output of -fstack-usage.
4686
4687 * If the stack usage is fully static but exceeds the specified
4688 amount, it's:
4689
4690 warning: stack usage is 1120 bytes
4691
4692 * If the stack usage is (partly) dynamic but bounded, it's:
4693
4694 warning: stack usage might be 1648 bytes
4695
4696 * If the stack usage is (partly) dynamic and not bounded, it's:
4697
4698 warning: stack usage might be unbounded
4699
4700 -Wno-pedantic-ms-format (MinGW targets only)
4701 When used in combination with -Wformat and -pedantic without GNU
4702 extensions, this option disables the warnings about non-ISO
4703 "printf" / "scanf" format width specifiers "I32", "I64", and "I"
4704 used on Windows targets, which depend on the MS runtime.
4705
4706 -Waligned-new
4707 Warn about a new-expression of a type that requires greater
4708 alignment than the "alignof(std::max_align_t)" but uses an
4709 allocation function without an explicit alignment parameter. This
4710 option is enabled by -Wall.
4711
4712 Normally this only warns about global allocation functions, but
4713 -Waligned-new=all also warns about class member allocation
4714 functions.
4715
4716 -Wplacement-new
4717 -Wplacement-new=n
4718 Warn about placement new expressions with undefined behavior, such
4719 as constructing an object in a buffer that is smaller than the type
4720 of the object. For example, the placement new expression below is
4721 diagnosed because it attempts to construct an array of 64 integers
4722 in a buffer only 64 bytes large.
4723
4724 char buf [64];
4725 new (buf) int[64];
4726
4727 This warning is enabled by default.
4728
4729 -Wplacement-new=1
4730 This is the default warning level of -Wplacement-new. At this
4731 level the warning is not issued for some strictly undefined
4732 constructs that GCC allows as extensions for compatibility with
4733 legacy code. For example, the following "new" expression is
4734 not diagnosed at this level even though it has undefined
4735 behavior according to the C++ standard because it writes past
4736 the end of the one-element array.
4737
4738 struct S { int n, a[1]; };
4739 S *s = (S *)malloc (sizeof *s + 31 * sizeof s->a[0]);
4740 new (s->a)int [32]();
4741
4742 -Wplacement-new=2
4743 At this level, in addition to diagnosing all the same
4744 constructs as at level 1, a diagnostic is also issued for
4745 placement new expressions that construct an object in the last
4746 member of structure whose type is an array of a single element
4747 and whose size is less than the size of the object being
4748 constructed. While the previous example would be diagnosed,
4749 the following construct makes use of the flexible member array
4750 extension to avoid the warning at level 2.
4751
4752 struct S { int n, a[]; };
4753 S *s = (S *)malloc (sizeof *s + 32 * sizeof s->a[0]);
4754 new (s->a)int [32]();
4755
4756 -Wpointer-arith
4757 Warn about anything that depends on the "size of" a function type
4758 or of "void". GNU C assigns these types a size of 1, for
4759 convenience in calculations with "void *" pointers and pointers to
4760 functions. In C++, warn also when an arithmetic operation involves
4761 "NULL". This warning is also enabled by -Wpedantic.
4762
4763 -Wpointer-compare
4764 Warn if a pointer is compared with a zero character constant. This
4765 usually means that the pointer was meant to be dereferenced. For
4766 example:
4767
4768 const char *p = foo ();
4769 if (p == '\0')
4770 return 42;
4771
4772 Note that the code above is invalid in C++11.
4773
4774 This warning is enabled by default.
4775
4776 -Wtype-limits
4777 Warn if a comparison is always true or always false due to the
4778 limited range of the data type, but do not warn for constant
4779 expressions. For example, warn if an unsigned variable is compared
4780 against zero with "<" or ">=". This warning is also enabled by
4781 -Wextra.
4782
4783 -Wcomment
4784 -Wcomments
4785 Warn whenever a comment-start sequence /* appears in a /* comment,
4786 or whenever a backslash-newline appears in a // comment. This
4787 warning is enabled by -Wall.
4788
4789 -Wtrigraphs
4790 Warn if any trigraphs are encountered that might change the meaning
4791 of the program. Trigraphs within comments are not warned about,
4792 except those that would form escaped newlines.
4793
4794 This option is implied by -Wall. If -Wall is not given, this
4795 option is still enabled unless trigraphs are enabled. To get
4796 trigraph conversion without warnings, but get the other -Wall
4797 warnings, use -trigraphs -Wall -Wno-trigraphs.
4798
4799 -Wundef
4800 Warn if an undefined identifier is evaluated in an "#if" directive.
4801 Such identifiers are replaced with zero.
4802
4803 -Wexpansion-to-defined
4804 Warn whenever defined is encountered in the expansion of a macro
4805 (including the case where the macro is expanded by an #if
4806 directive). Such usage is not portable. This warning is also
4807 enabled by -Wpedantic and -Wextra.
4808
4809 -Wunused-macros
4810 Warn about macros defined in the main file that are unused. A
4811 macro is used if it is expanded or tested for existence at least
4812 once. The preprocessor also warns if the macro has not been used
4813 at the time it is redefined or undefined.
4814
4815 Built-in macros, macros defined on the command line, and macros
4816 defined in include files are not warned about.
4817
4818 Note: If a macro is actually used, but only used in skipped
4819 conditional blocks, then the preprocessor reports it as unused. To
4820 avoid the warning in such a case, you might improve the scope of
4821 the macro's definition by, for example, moving it into the first
4822 skipped block. Alternatively, you could provide a dummy use with
4823 something like:
4824
4825 #if defined the_macro_causing_the_warning
4826 #endif
4827
4828 -Wno-endif-labels
4829 Do not warn whenever an "#else" or an "#endif" are followed by
4830 text. This sometimes happens in older programs with code of the
4831 form
4832
4833 #if FOO
4834 ...
4835 #else FOO
4836 ...
4837 #endif FOO
4838
4839 The second and third "FOO" should be in comments. This warning is
4840 on by default.
4841
4842 -Wbad-function-cast (C and Objective-C only)
4843 Warn when a function call is cast to a non-matching type. For
4844 example, warn if a call to a function returning an integer type is
4845 cast to a pointer type.
4846
4847 -Wc90-c99-compat (C and Objective-C only)
4848 Warn about features not present in ISO C90, but present in ISO C99.
4849 For instance, warn about use of variable length arrays, "long long"
4850 type, "bool" type, compound literals, designated initializers, and
4851 so on. This option is independent of the standards mode. Warnings
4852 are disabled in the expression that follows "__extension__".
4853
4854 -Wc99-c11-compat (C and Objective-C only)
4855 Warn about features not present in ISO C99, but present in ISO C11.
4856 For instance, warn about use of anonymous structures and unions,
4857 "_Atomic" type qualifier, "_Thread_local" storage-class specifier,
4858 "_Alignas" specifier, "Alignof" operator, "_Generic" keyword, and
4859 so on. This option is independent of the standards mode. Warnings
4860 are disabled in the expression that follows "__extension__".
4861
4862 -Wc++-compat (C and Objective-C only)
4863 Warn about ISO C constructs that are outside of the common subset
4864 of ISO C and ISO C++, e.g. request for implicit conversion from
4865 "void *" to a pointer to non-"void" type.
4866
4867 -Wc++11-compat (C++ and Objective-C++ only)
4868 Warn about C++ constructs whose meaning differs between ISO C++
4869 1998 and ISO C++ 2011, e.g., identifiers in ISO C++ 1998 that are
4870 keywords in ISO C++ 2011. This warning turns on -Wnarrowing and is
4871 enabled by -Wall.
4872
4873 -Wc++14-compat (C++ and Objective-C++ only)
4874 Warn about C++ constructs whose meaning differs between ISO C++
4875 2011 and ISO C++ 2014. This warning is enabled by -Wall.
4876
4877 -Wc++17-compat (C++ and Objective-C++ only)
4878 Warn about C++ constructs whose meaning differs between ISO C++
4879 2014 and ISO C++ 2017. This warning is enabled by -Wall.
4880
4881 -Wcast-qual
4882 Warn whenever a pointer is cast so as to remove a type qualifier
4883 from the target type. For example, warn if a "const char *" is
4884 cast to an ordinary "char *".
4885
4886 Also warn when making a cast that introduces a type qualifier in an
4887 unsafe way. For example, casting "char **" to "const char **" is
4888 unsafe, as in this example:
4889
4890 /* p is char ** value. */
4891 const char **q = (const char **) p;
4892 /* Assignment of readonly string to const char * is OK. */
4893 *q = "string";
4894 /* Now char** pointer points to read-only memory. */
4895 **p = 'b';
4896
4897 -Wcast-align
4898 Warn whenever a pointer is cast such that the required alignment of
4899 the target is increased. For example, warn if a "char *" is cast
4900 to an "int *" on machines where integers can only be accessed at
4901 two- or four-byte boundaries.
4902
4903 -Wcast-align=strict
4904 Warn whenever a pointer is cast such that the required alignment of
4905 the target is increased. For example, warn if a "char *" is cast
4906 to an "int *" regardless of the target machine.
4907
4908 -Wcast-function-type
4909 Warn when a function pointer is cast to an incompatible function
4910 pointer. In a cast involving function types with a variable
4911 argument list only the types of initial arguments that are provided
4912 are considered. Any parameter of pointer-type matches any other
4913 pointer-type. Any benign differences in integral types are
4914 ignored, like "int" vs. "long" on ILP32 targets. Likewise type
4915 qualifiers are ignored. The function type "void (*) (void)" is
4916 special and matches everything, which can be used to suppress this
4917 warning. In a cast involving pointer to member types this warning
4918 warns whenever the type cast is changing the pointer to member
4919 type. This warning is enabled by -Wextra.
4920
4921 -Wwrite-strings
4922 When compiling C, give string constants the type "const
4923 char[length]" so that copying the address of one into a non-"const"
4924 "char *" pointer produces a warning. These warnings help you find
4925 at compile time code that can try to write into a string constant,
4926 but only if you have been very careful about using "const" in
4927 declarations and prototypes. Otherwise, it is just a nuisance.
4928 This is why we did not make -Wall request these warnings.
4929
4930 When compiling C++, warn about the deprecated conversion from
4931 string literals to "char *". This warning is enabled by default
4932 for C++ programs.
4933
4934 -Wcatch-value
4935 -Wcatch-value=n (C++ and Objective-C++ only)
4936 Warn about catch handlers that do not catch via reference. With
4937 -Wcatch-value=1 (or -Wcatch-value for short) warn about polymorphic
4938 class types that are caught by value. With -Wcatch-value=2 warn
4939 about all class types that are caught by value. With
4940 -Wcatch-value=3 warn about all types that are not caught by
4941 reference. -Wcatch-value is enabled by -Wall.
4942
4943 -Wclobbered
4944 Warn for variables that might be changed by "longjmp" or "vfork".
4945 This warning is also enabled by -Wextra.
4946
4947 -Wconditionally-supported (C++ and Objective-C++ only)
4948 Warn for conditionally-supported (C++11 [intro.defs]) constructs.
4949
4950 -Wconversion
4951 Warn for implicit conversions that may alter a value. This includes
4952 conversions between real and integer, like "abs (x)" when "x" is
4953 "double"; conversions between signed and unsigned, like "unsigned
4954 ui = -1"; and conversions to smaller types, like "sqrtf (M_PI)". Do
4955 not warn for explicit casts like "abs ((int) x)" and "ui =
4956 (unsigned) -1", or if the value is not changed by the conversion
4957 like in "abs (2.0)". Warnings about conversions between signed and
4958 unsigned integers can be disabled by using -Wno-sign-conversion.
4959
4960 For C++, also warn for confusing overload resolution for user-
4961 defined conversions; and conversions that never use a type
4962 conversion operator: conversions to "void", the same type, a base
4963 class or a reference to them. Warnings about conversions between
4964 signed and unsigned integers are disabled by default in C++ unless
4965 -Wsign-conversion is explicitly enabled.
4966
4967 -Wno-conversion-null (C++ and Objective-C++ only)
4968 Do not warn for conversions between "NULL" and non-pointer types.
4969 -Wconversion-null is enabled by default.
4970
4971 -Wzero-as-null-pointer-constant (C++ and Objective-C++ only)
4972 Warn when a literal 0 is used as null pointer constant. This can
4973 be useful to facilitate the conversion to "nullptr" in C++11.
4974
4975 -Wsubobject-linkage (C++ and Objective-C++ only)
4976 Warn if a class type has a base or a field whose type uses the
4977 anonymous namespace or depends on a type with no linkage. If a
4978 type A depends on a type B with no or internal linkage, defining it
4979 in multiple translation units would be an ODR violation because the
4980 meaning of B is different in each translation unit. If A only
4981 appears in a single translation unit, the best way to silence the
4982 warning is to give it internal linkage by putting it in an
4983 anonymous namespace as well. The compiler doesn't give this
4984 warning for types defined in the main .C file, as those are
4985 unlikely to have multiple definitions. -Wsubobject-linkage is
4986 enabled by default.
4987
4988 -Wdangling-else
4989 Warn about constructions where there may be confusion to which "if"
4990 statement an "else" branch belongs. Here is an example of such a
4991 case:
4992
4993 {
4994 if (a)
4995 if (b)
4996 foo ();
4997 else
4998 bar ();
4999 }
5000
5001 In C/C++, every "else" branch belongs to the innermost possible
5002 "if" statement, which in this example is "if (b)". This is often
5003 not what the programmer expected, as illustrated in the above
5004 example by indentation the programmer chose. When there is the
5005 potential for this confusion, GCC issues a warning when this flag
5006 is specified. To eliminate the warning, add explicit braces around
5007 the innermost "if" statement so there is no way the "else" can
5008 belong to the enclosing "if". The resulting code looks like this:
5009
5010 {
5011 if (a)
5012 {
5013 if (b)
5014 foo ();
5015 else
5016 bar ();
5017 }
5018 }
5019
5020 This warning is enabled by -Wparentheses.
5021
5022 -Wdate-time
5023 Warn when macros "__TIME__", "__DATE__" or "__TIMESTAMP__" are
5024 encountered as they might prevent bit-wise-identical reproducible
5025 compilations.
5026
5027 -Wdelete-incomplete (C++ and Objective-C++ only)
5028 Warn when deleting a pointer to incomplete type, which may cause
5029 undefined behavior at runtime. This warning is enabled by default.
5030
5031 -Wuseless-cast (C++ and Objective-C++ only)
5032 Warn when an expression is casted to its own type.
5033
5034 -Wempty-body
5035 Warn if an empty body occurs in an "if", "else" or "do while"
5036 statement. This warning is also enabled by -Wextra.
5037
5038 -Wenum-compare
5039 Warn about a comparison between values of different enumerated
5040 types. In C++ enumerated type mismatches in conditional
5041 expressions are also diagnosed and the warning is enabled by
5042 default. In C this warning is enabled by -Wall.
5043
5044 -Wextra-semi (C++, Objective-C++ only)
5045 Warn about redundant semicolon after in-class function definition.
5046
5047 -Wjump-misses-init (C, Objective-C only)
5048 Warn if a "goto" statement or a "switch" statement jumps forward
5049 across the initialization of a variable, or jumps backward to a
5050 label after the variable has been initialized. This only warns
5051 about variables that are initialized when they are declared. This
5052 warning is only supported for C and Objective-C; in C++ this sort
5053 of branch is an error in any case.
5054
5055 -Wjump-misses-init is included in -Wc++-compat. It can be disabled
5056 with the -Wno-jump-misses-init option.
5057
5058 -Wsign-compare
5059 Warn when a comparison between signed and unsigned values could
5060 produce an incorrect result when the signed value is converted to
5061 unsigned. In C++, this warning is also enabled by -Wall. In C, it
5062 is also enabled by -Wextra.
5063
5064 -Wsign-conversion
5065 Warn for implicit conversions that may change the sign of an
5066 integer value, like assigning a signed integer expression to an
5067 unsigned integer variable. An explicit cast silences the warning.
5068 In C, this option is enabled also by -Wconversion.
5069
5070 -Wfloat-conversion
5071 Warn for implicit conversions that reduce the precision of a real
5072 value. This includes conversions from real to integer, and from
5073 higher precision real to lower precision real values. This option
5074 is also enabled by -Wconversion.
5075
5076 -Wno-scalar-storage-order
5077 Do not warn on suspicious constructs involving reverse scalar
5078 storage order.
5079
5080 -Wsized-deallocation (C++ and Objective-C++ only)
5081 Warn about a definition of an unsized deallocation function
5082
5083 void operator delete (void *) noexcept;
5084 void operator delete[] (void *) noexcept;
5085
5086 without a definition of the corresponding sized deallocation
5087 function
5088
5089 void operator delete (void *, std::size_t) noexcept;
5090 void operator delete[] (void *, std::size_t) noexcept;
5091
5092 or vice versa. Enabled by -Wextra along with -fsized-deallocation.
5093
5094 -Wsizeof-pointer-div
5095 Warn for suspicious divisions of two sizeof expressions that divide
5096 the pointer size by the element size, which is the usual way to
5097 compute the array size but won't work out correctly with pointers.
5098 This warning warns e.g. about "sizeof (ptr) / sizeof (ptr[0])" if
5099 "ptr" is not an array, but a pointer. This warning is enabled by
5100 -Wall.
5101
5102 -Wsizeof-pointer-memaccess
5103 Warn for suspicious length parameters to certain string and memory
5104 built-in functions if the argument uses "sizeof". This warning
5105 triggers for example for "memset (ptr, 0, sizeof (ptr));" if "ptr"
5106 is not an array, but a pointer, and suggests a possible fix, or
5107 about "memcpy (&foo, ptr, sizeof (&foo));".
5108 -Wsizeof-pointer-memaccess also warns about calls to bounded string
5109 copy functions like "strncat" or "strncpy" that specify as the
5110 bound a "sizeof" expression of the source array. For example, in
5111 the following function the call to "strncat" specifies the size of
5112 the source string as the bound. That is almost certainly a mistake
5113 and so the call is diagnosed.
5114
5115 void make_file (const char *name)
5116 {
5117 char path[PATH_MAX];
5118 strncpy (path, name, sizeof path - 1);
5119 strncat (path, ".text", sizeof ".text");
5120 ...
5121 }
5122
5123 The -Wsizeof-pointer-memaccess option is enabled by -Wall.
5124
5125 -Wsizeof-array-argument
5126 Warn when the "sizeof" operator is applied to a parameter that is
5127 declared as an array in a function definition. This warning is
5128 enabled by default for C and C++ programs.
5129
5130 -Wmemset-elt-size
5131 Warn for suspicious calls to the "memset" built-in function, if the
5132 first argument references an array, and the third argument is a
5133 number equal to the number of elements, but not equal to the size
5134 of the array in memory. This indicates that the user has omitted a
5135 multiplication by the element size. This warning is enabled by
5136 -Wall.
5137
5138 -Wmemset-transposed-args
5139 Warn for suspicious calls to the "memset" built-in function, if the
5140 second argument is not zero and the third argument is zero. This
5141 warns e.g.@ about "memset (buf, sizeof buf, 0)" where most probably
5142 "memset (buf, 0, sizeof buf)" was meant instead. The diagnostics
5143 is only emitted if the third argument is literal zero. If it is
5144 some expression that is folded to zero, a cast of zero to some
5145 type, etc., it is far less likely that the user has mistakenly
5146 exchanged the arguments and no warning is emitted. This warning is
5147 enabled by -Wall.
5148
5149 -Waddress
5150 Warn about suspicious uses of memory addresses. These include using
5151 the address of a function in a conditional expression, such as
5152 "void func(void); if (func)", and comparisons against the memory
5153 address of a string literal, such as "if (x == "abc")". Such uses
5154 typically indicate a programmer error: the address of a function
5155 always evaluates to true, so their use in a conditional usually
5156 indicate that the programmer forgot the parentheses in a function
5157 call; and comparisons against string literals result in unspecified
5158 behavior and are not portable in C, so they usually indicate that
5159 the programmer intended to use "strcmp". This warning is enabled
5160 by -Wall.
5161
5162 -Wlogical-op
5163 Warn about suspicious uses of logical operators in expressions.
5164 This includes using logical operators in contexts where a bit-wise
5165 operator is likely to be expected. Also warns when the operands of
5166 a logical operator are the same:
5167
5168 extern int a;
5169 if (a < 0 && a < 0) { ... }
5170
5171 -Wlogical-not-parentheses
5172 Warn about logical not used on the left hand side operand of a
5173 comparison. This option does not warn if the right operand is
5174 considered to be a boolean expression. Its purpose is to detect
5175 suspicious code like the following:
5176
5177 int a;
5178 ...
5179 if (!a > 1) { ... }
5180
5181 It is possible to suppress the warning by wrapping the LHS into
5182 parentheses:
5183
5184 if ((!a) > 1) { ... }
5185
5186 This warning is enabled by -Wall.
5187
5188 -Waggregate-return
5189 Warn if any functions that return structures or unions are defined
5190 or called. (In languages where you can return an array, this also
5191 elicits a warning.)
5192
5193 -Wno-aggressive-loop-optimizations
5194 Warn if in a loop with constant number of iterations the compiler
5195 detects undefined behavior in some statement during one or more of
5196 the iterations.
5197
5198 -Wno-attributes
5199 Do not warn if an unexpected "__attribute__" is used, such as
5200 unrecognized attributes, function attributes applied to variables,
5201 etc. This does not stop errors for incorrect use of supported
5202 attributes.
5203
5204 -Wno-builtin-declaration-mismatch
5205 Warn if a built-in function is declared with the wrong signature or
5206 as non-function. This warning is enabled by default.
5207
5208 -Wno-builtin-macro-redefined
5209 Do not warn if certain built-in macros are redefined. This
5210 suppresses warnings for redefinition of "__TIMESTAMP__",
5211 "__TIME__", "__DATE__", "__FILE__", and "__BASE_FILE__".
5212
5213 -Wstrict-prototypes (C and Objective-C only)
5214 Warn if a function is declared or defined without specifying the
5215 argument types. (An old-style function definition is permitted
5216 without a warning if preceded by a declaration that specifies the
5217 argument types.)
5218
5219 -Wold-style-declaration (C and Objective-C only)
5220 Warn for obsolescent usages, according to the C Standard, in a
5221 declaration. For example, warn if storage-class specifiers like
5222 "static" are not the first things in a declaration. This warning
5223 is also enabled by -Wextra.
5224
5225 -Wold-style-definition (C and Objective-C only)
5226 Warn if an old-style function definition is used. A warning is
5227 given even if there is a previous prototype.
5228
5229 -Wmissing-parameter-type (C and Objective-C only)
5230 A function parameter is declared without a type specifier in
5231 K&R-style functions:
5232
5233 void foo(bar) { }
5234
5235 This warning is also enabled by -Wextra.
5236
5237 -Wmissing-prototypes (C and Objective-C only)
5238 Warn if a global function is defined without a previous prototype
5239 declaration. This warning is issued even if the definition itself
5240 provides a prototype. Use this option to detect global functions
5241 that do not have a matching prototype declaration in a header file.
5242 This option is not valid for C++ because all function declarations
5243 provide prototypes and a non-matching declaration declares an
5244 overload rather than conflict with an earlier declaration. Use
5245 -Wmissing-declarations to detect missing declarations in C++.
5246
5247 -Wmissing-declarations
5248 Warn if a global function is defined without a previous
5249 declaration. Do so even if the definition itself provides a
5250 prototype. Use this option to detect global functions that are not
5251 declared in header files. In C, no warnings are issued for
5252 functions with previous non-prototype declarations; use
5253 -Wmissing-prototypes to detect missing prototypes. In C++, no
5254 warnings are issued for function templates, or for inline
5255 functions, or for functions in anonymous namespaces.
5256
5257 -Wmissing-field-initializers
5258 Warn if a structure's initializer has some fields missing. For
5259 example, the following code causes such a warning, because "x.h" is
5260 implicitly zero:
5261
5262 struct s { int f, g, h; };
5263 struct s x = { 3, 4 };
5264
5265 This option does not warn about designated initializers, so the
5266 following modification does not trigger a warning:
5267
5268 struct s { int f, g, h; };
5269 struct s x = { .f = 3, .g = 4 };
5270
5271 In C this option does not warn about the universal zero initializer
5272 { 0 }:
5273
5274 struct s { int f, g, h; };
5275 struct s x = { 0 };
5276
5277 Likewise, in C++ this option does not warn about the empty { }
5278 initializer, for example:
5279
5280 struct s { int f, g, h; };
5281 s x = { };
5282
5283 This warning is included in -Wextra. To get other -Wextra warnings
5284 without this one, use -Wextra -Wno-missing-field-initializers.
5285
5286 -Wno-multichar
5287 Do not warn if a multicharacter constant ('FOOF') is used. Usually
5288 they indicate a typo in the user's code, as they have
5289 implementation-defined values, and should not be used in portable
5290 code.
5291
5292 -Wnormalized=[none|id|nfc|nfkc]
5293 In ISO C and ISO C++, two identifiers are different if they are
5294 different sequences of characters. However, sometimes when
5295 characters outside the basic ASCII character set are used, you can
5296 have two different character sequences that look the same. To
5297 avoid confusion, the ISO 10646 standard sets out some normalization
5298 rules which when applied ensure that two sequences that look the
5299 same are turned into the same sequence. GCC can warn you if you
5300 are using identifiers that have not been normalized; this option
5301 controls that warning.
5302
5303 There are four levels of warning supported by GCC. The default is
5304 -Wnormalized=nfc, which warns about any identifier that is not in
5305 the ISO 10646 "C" normalized form, NFC. NFC is the recommended
5306 form for most uses. It is equivalent to -Wnormalized.
5307
5308 Unfortunately, there are some characters allowed in identifiers by
5309 ISO C and ISO C++ that, when turned into NFC, are not allowed in
5310 identifiers. That is, there's no way to use these symbols in
5311 portable ISO C or C++ and have all your identifiers in NFC.
5312 -Wnormalized=id suppresses the warning for these characters. It is
5313 hoped that future versions of the standards involved will correct
5314 this, which is why this option is not the default.
5315
5316 You can switch the warning off for all characters by writing
5317 -Wnormalized=none or -Wno-normalized. You should only do this if
5318 you are using some other normalization scheme (like "D"), because
5319 otherwise you can easily create bugs that are literally impossible
5320 to see.
5321
5322 Some characters in ISO 10646 have distinct meanings but look
5323 identical in some fonts or display methodologies, especially once
5324 formatting has been applied. For instance "\u207F", "SUPERSCRIPT
5325 LATIN SMALL LETTER N", displays just like a regular "n" that has
5326 been placed in a superscript. ISO 10646 defines the NFKC
5327 normalization scheme to convert all these into a standard form as
5328 well, and GCC warns if your code is not in NFKC if you use
5329 -Wnormalized=nfkc. This warning is comparable to warning about
5330 every identifier that contains the letter O because it might be
5331 confused with the digit 0, and so is not the default, but may be
5332 useful as a local coding convention if the programming environment
5333 cannot be fixed to display these characters distinctly.
5334
5335 -Wno-deprecated
5336 Do not warn about usage of deprecated features.
5337
5338 -Wno-deprecated-declarations
5339 Do not warn about uses of functions, variables, and types marked as
5340 deprecated by using the "deprecated" attribute.
5341
5342 -Wno-overflow
5343 Do not warn about compile-time overflow in constant expressions.
5344
5345 -Wno-odr
5346 Warn about One Definition Rule violations during link-time
5347 optimization. Requires -flto-odr-type-merging to be enabled.
5348 Enabled by default.
5349
5350 -Wopenmp-simd
5351 Warn if the vectorizer cost model overrides the OpenMP simd
5352 directive set by user. The -fsimd-cost-model=unlimited option can
5353 be used to relax the cost model.
5354
5355 -Woverride-init (C and Objective-C only)
5356 Warn if an initialized field without side effects is overridden
5357 when using designated initializers.
5358
5359 This warning is included in -Wextra. To get other -Wextra warnings
5360 without this one, use -Wextra -Wno-override-init.
5361
5362 -Woverride-init-side-effects (C and Objective-C only)
5363 Warn if an initialized field with side effects is overridden when
5364 using designated initializers. This warning is enabled by default.
5365
5366 -Wpacked
5367 Warn if a structure is given the packed attribute, but the packed
5368 attribute has no effect on the layout or size of the structure.
5369 Such structures may be mis-aligned for little benefit. For
5370 instance, in this code, the variable "f.x" in "struct bar" is
5371 misaligned even though "struct bar" does not itself have the packed
5372 attribute:
5373
5374 struct foo {
5375 int x;
5376 char a, b, c, d;
5377 } __attribute__((packed));
5378 struct bar {
5379 char z;
5380 struct foo f;
5381 };
5382
5383 -Wpacked-bitfield-compat
5384 The 4.1, 4.2 and 4.3 series of GCC ignore the "packed" attribute on
5385 bit-fields of type "char". This has been fixed in GCC 4.4 but the
5386 change can lead to differences in the structure layout. GCC
5387 informs you when the offset of such a field has changed in GCC 4.4.
5388 For example there is no longer a 4-bit padding between field "a"
5389 and "b" in this structure:
5390
5391 struct foo
5392 {
5393 char a:4;
5394 char b:8;
5395 } __attribute__ ((packed));
5396
5397 This warning is enabled by default. Use
5398 -Wno-packed-bitfield-compat to disable this warning.
5399
5400 -Wpacked-not-aligned (C, C++, Objective-C and Objective-C++ only)
5401 Warn if a structure field with explicitly specified alignment in a
5402 packed struct or union is misaligned. For example, a warning will
5403 be issued on "struct S", like, "warning: alignment 1 of 'struct S'
5404 is less than 8", in this code:
5405
5406 struct __attribute__ ((aligned (8))) S8 { char a[8]; };
5407 struct __attribute__ ((packed)) S {
5408 struct S8 s8;
5409 };
5410
5411 This warning is enabled by -Wall.
5412
5413 -Wpadded
5414 Warn if padding is included in a structure, either to align an
5415 element of the structure or to align the whole structure.
5416 Sometimes when this happens it is possible to rearrange the fields
5417 of the structure to reduce the padding and so make the structure
5418 smaller.
5419
5420 -Wredundant-decls
5421 Warn if anything is declared more than once in the same scope, even
5422 in cases where multiple declaration is valid and changes nothing.
5423
5424 -Wno-restrict
5425 Warn when an object referenced by a "restrict"-qualified parameter
5426 (or, in C++, a "__restrict"-qualified parameter) is aliased by
5427 another argument, or when copies between such objects overlap. For
5428 example, the call to the "strcpy" function below attempts to
5429 truncate the string by replacing its initial characters with the
5430 last four. However, because the call writes the terminating NUL
5431 into "a[4]", the copies overlap and the call is diagnosed.
5432
5433 void foo (void)
5434 {
5435 char a[] = "abcd1234";
5436 strcpy (a, a + 4);
5437 ...
5438 }
5439
5440 The -Wrestrict option detects some instances of simple overlap even
5441 without optimization but works best at -O2 and above. It is
5442 included in -Wall.
5443
5444 -Wnested-externs (C and Objective-C only)
5445 Warn if an "extern" declaration is encountered within a function.
5446
5447 -Wno-inherited-variadic-ctor
5448 Suppress warnings about use of C++11 inheriting constructors when
5449 the base class inherited from has a C variadic constructor; the
5450 warning is on by default because the ellipsis is not inherited.
5451
5452 -Winline
5453 Warn if a function that is declared as inline cannot be inlined.
5454 Even with this option, the compiler does not warn about failures to
5455 inline functions declared in system headers.
5456
5457 The compiler uses a variety of heuristics to determine whether or
5458 not to inline a function. For example, the compiler takes into
5459 account the size of the function being inlined and the amount of
5460 inlining that has already been done in the current function.
5461 Therefore, seemingly insignificant changes in the source program
5462 can cause the warnings produced by -Winline to appear or disappear.
5463
5464 -Wno-invalid-offsetof (C++ and Objective-C++ only)
5465 Suppress warnings from applying the "offsetof" macro to a non-POD
5466 type. According to the 2014 ISO C++ standard, applying "offsetof"
5467 to a non-standard-layout type is undefined. In existing C++
5468 implementations, however, "offsetof" typically gives meaningful
5469 results. This flag is for users who are aware that they are
5470 writing nonportable code and who have deliberately chosen to ignore
5471 the warning about it.
5472
5473 The restrictions on "offsetof" may be relaxed in a future version
5474 of the C++ standard.
5475
5476 -Wint-in-bool-context
5477 Warn for suspicious use of integer values where boolean values are
5478 expected, such as conditional expressions (?:) using non-boolean
5479 integer constants in boolean context, like "if (a <= b ? 2 : 3)".
5480 Or left shifting of signed integers in boolean context, like "for
5481 (a = 0; 1 << a; a++);". Likewise for all kinds of multiplications
5482 regardless of the data type. This warning is enabled by -Wall.
5483
5484 -Wno-int-to-pointer-cast
5485 Suppress warnings from casts to pointer type of an integer of a
5486 different size. In C++, casting to a pointer type of smaller size
5487 is an error. Wint-to-pointer-cast is enabled by default.
5488
5489 -Wno-pointer-to-int-cast (C and Objective-C only)
5490 Suppress warnings from casts from a pointer to an integer type of a
5491 different size.
5492
5493 -Winvalid-pch
5494 Warn if a precompiled header is found in the search path but cannot
5495 be used.
5496
5497 -Wlong-long
5498 Warn if "long long" type is used. This is enabled by either
5499 -Wpedantic or -Wtraditional in ISO C90 and C++98 modes. To inhibit
5500 the warning messages, use -Wno-long-long.
5501
5502 -Wvariadic-macros
5503 Warn if variadic macros are used in ISO C90 mode, or if the GNU
5504 alternate syntax is used in ISO C99 mode. This is enabled by
5505 either -Wpedantic or -Wtraditional. To inhibit the warning
5506 messages, use -Wno-variadic-macros.
5507
5508 -Wvarargs
5509 Warn upon questionable usage of the macros used to handle variable
5510 arguments like "va_start". This is default. To inhibit the
5511 warning messages, use -Wno-varargs.
5512
5513 -Wvector-operation-performance
5514 Warn if vector operation is not implemented via SIMD capabilities
5515 of the architecture. Mainly useful for the performance tuning.
5516 Vector operation can be implemented "piecewise", which means that
5517 the scalar operation is performed on every vector element; "in
5518 parallel", which means that the vector operation is implemented
5519 using scalars of wider type, which normally is more performance
5520 efficient; and "as a single scalar", which means that vector fits
5521 into a scalar type.
5522
5523 -Wno-virtual-move-assign
5524 Suppress warnings about inheriting from a virtual base with a non-
5525 trivial C++11 move assignment operator. This is dangerous because
5526 if the virtual base is reachable along more than one path, it is
5527 moved multiple times, which can mean both objects end up in the
5528 moved-from state. If the move assignment operator is written to
5529 avoid moving from a moved-from object, this warning can be
5530 disabled.
5531
5532 -Wvla
5533 Warn if a variable-length array is used in the code. -Wno-vla
5534 prevents the -Wpedantic warning of the variable-length array.
5535
5536 -Wvla-larger-than=n
5537 If this option is used, the compiler will warn on uses of variable-
5538 length arrays where the size is either unbounded, or bounded by an
5539 argument that can be larger than n bytes. This is similar to how
5540 -Walloca-larger-than=n works, but with variable-length arrays.
5541
5542 Note that GCC may optimize small variable-length arrays of a known
5543 value into plain arrays, so this warning may not get triggered for
5544 such arrays.
5545
5546 This warning is not enabled by -Wall, and is only active when
5547 -ftree-vrp is active (default for -O2 and above).
5548
5549 See also -Walloca-larger-than=n.
5550
5551 -Wvolatile-register-var
5552 Warn if a register variable is declared volatile. The volatile
5553 modifier does not inhibit all optimizations that may eliminate
5554 reads and/or writes to register variables. This warning is enabled
5555 by -Wall.
5556
5557 -Wdisabled-optimization
5558 Warn if a requested optimization pass is disabled. This warning
5559 does not generally indicate that there is anything wrong with your
5560 code; it merely indicates that GCC's optimizers are unable to
5561 handle the code effectively. Often, the problem is that your code
5562 is too big or too complex; GCC refuses to optimize programs when
5563 the optimization itself is likely to take inordinate amounts of
5564 time.
5565
5566 -Wpointer-sign (C and Objective-C only)
5567 Warn for pointer argument passing or assignment with different
5568 signedness. This option is only supported for C and Objective-C.
5569 It is implied by -Wall and by -Wpedantic, which can be disabled
5570 with -Wno-pointer-sign.
5571
5572 -Wstack-protector
5573 This option is only active when -fstack-protector is active. It
5574 warns about functions that are not protected against stack
5575 smashing.
5576
5577 -Woverlength-strings
5578 Warn about string constants that are longer than the "minimum
5579 maximum" length specified in the C standard. Modern compilers
5580 generally allow string constants that are much longer than the
5581 standard's minimum limit, but very portable programs should avoid
5582 using longer strings.
5583
5584 The limit applies after string constant concatenation, and does not
5585 count the trailing NUL. In C90, the limit was 509 characters; in
5586 C99, it was raised to 4095. C++98 does not specify a normative
5587 minimum maximum, so we do not diagnose overlength strings in C++.
5588
5589 This option is implied by -Wpedantic, and can be disabled with
5590 -Wno-overlength-strings.
5591
5592 -Wunsuffixed-float-constants (C and Objective-C only)
5593 Issue a warning for any floating constant that does not have a
5594 suffix. When used together with -Wsystem-headers it warns about
5595 such constants in system header files. This can be useful when
5596 preparing code to use with the "FLOAT_CONST_DECIMAL64" pragma from
5597 the decimal floating-point extension to C99.
5598
5599 -Wno-designated-init (C and Objective-C only)
5600 Suppress warnings when a positional initializer is used to
5601 initialize a structure that has been marked with the
5602 "designated_init" attribute.
5603
5604 -Whsa
5605 Issue a warning when HSAIL cannot be emitted for the compiled
5606 function or OpenMP construct.
5607
5608 Options for Debugging Your Program
5609 To tell GCC to emit extra information for use by a debugger, in almost
5610 all cases you need only to add -g to your other options.
5611
5612 GCC allows you to use -g with -O. The shortcuts taken by optimized
5613 code may occasionally be surprising: some variables you declared may
5614 not exist at all; flow of control may briefly move where you did not
5615 expect it; some statements may not be executed because they compute
5616 constant results or their values are already at hand; some statements
5617 may execute in different places because they have been moved out of
5618 loops. Nevertheless it is possible to debug optimized output. This
5619 makes it reasonable to use the optimizer for programs that might have
5620 bugs.
5621
5622 If you are not using some other optimization option, consider using -Og
5623 with -g. With no -O option at all, some compiler passes that collect
5624 information useful for debugging do not run at all, so that -Og may
5625 result in a better debugging experience.
5626
5627 -g Produce debugging information in the operating system's native
5628 format (stabs, COFF, XCOFF, or DWARF). GDB can work with this
5629 debugging information.
5630
5631 On most systems that use stabs format, -g enables use of extra
5632 debugging information that only GDB can use; this extra information
5633 makes debugging work better in GDB but probably makes other
5634 debuggers crash or refuse to read the program. If you want to
5635 control for certain whether to generate the extra information, use
5636 -gstabs+, -gstabs, -gxcoff+, -gxcoff, or -gvms (see below).
5637
5638 -ggdb
5639 Produce debugging information for use by GDB. This means to use
5640 the most expressive format available (DWARF, stabs, or the native
5641 format if neither of those are supported), including GDB extensions
5642 if at all possible.
5643
5644 -gdwarf
5645 -gdwarf-version
5646 Produce debugging information in DWARF format (if that is
5647 supported). The value of version may be either 2, 3, 4 or 5; the
5648 default version for most targets is 4. DWARF Version 5 is only
5649 experimental.
5650
5651 Note that with DWARF Version 2, some ports require and always use
5652 some non-conflicting DWARF 3 extensions in the unwind tables.
5653
5654 Version 4 may require GDB 7.0 and -fvar-tracking-assignments for
5655 maximum benefit.
5656
5657 GCC no longer supports DWARF Version 1, which is substantially
5658 different than Version 2 and later. For historical reasons, some
5659 other DWARF-related options such as -fno-dwarf2-cfi-asm) retain a
5660 reference to DWARF Version 2 in their names, but apply to all
5661 currently-supported versions of DWARF.
5662
5663 -gstabs
5664 Produce debugging information in stabs format (if that is
5665 supported), without GDB extensions. This is the format used by DBX
5666 on most BSD systems. On MIPS, Alpha and System V Release 4 systems
5667 this option produces stabs debugging output that is not understood
5668 by DBX. On System V Release 4 systems this option requires the GNU
5669 assembler.
5670
5671 -gstabs+
5672 Produce debugging information in stabs format (if that is
5673 supported), using GNU extensions understood only by the GNU
5674 debugger (GDB). The use of these extensions is likely to make
5675 other debuggers crash or refuse to read the program.
5676
5677 -gxcoff
5678 Produce debugging information in XCOFF format (if that is
5679 supported). This is the format used by the DBX debugger on IBM
5680 RS/6000 systems.
5681
5682 -gxcoff+
5683 Produce debugging information in XCOFF format (if that is
5684 supported), using GNU extensions understood only by the GNU
5685 debugger (GDB). The use of these extensions is likely to make
5686 other debuggers crash or refuse to read the program, and may cause
5687 assemblers other than the GNU assembler (GAS) to fail with an
5688 error.
5689
5690 -gvms
5691 Produce debugging information in Alpha/VMS debug format (if that is
5692 supported). This is the format used by DEBUG on Alpha/VMS systems.
5693
5694 -glevel
5695 -ggdblevel
5696 -gstabslevel
5697 -gxcofflevel
5698 -gvmslevel
5699 Request debugging information and also use level to specify how
5700 much information. The default level is 2.
5701
5702 Level 0 produces no debug information at all. Thus, -g0 negates
5703 -g.
5704
5705 Level 1 produces minimal information, enough for making backtraces
5706 in parts of the program that you don't plan to debug. This
5707 includes descriptions of functions and external variables, and line
5708 number tables, but no information about local variables.
5709
5710 Level 3 includes extra information, such as all the macro
5711 definitions present in the program. Some debuggers support macro
5712 expansion when you use -g3.
5713
5714 -gdwarf does not accept a concatenated debug level, to avoid
5715 confusion with -gdwarf-level. Instead use an additional -glevel
5716 option to change the debug level for DWARF.
5717
5718 -feliminate-unused-debug-symbols
5719 Produce debugging information in stabs format (if that is
5720 supported), for only symbols that are actually used.
5721
5722 -femit-class-debug-always
5723 Instead of emitting debugging information for a C++ class in only
5724 one object file, emit it in all object files using the class. This
5725 option should be used only with debuggers that are unable to handle
5726 the way GCC normally emits debugging information for classes
5727 because using this option increases the size of debugging
5728 information by as much as a factor of two.
5729
5730 -fno-merge-debug-strings
5731 Direct the linker to not merge together strings in the debugging
5732 information that are identical in different object files. Merging
5733 is not supported by all assemblers or linkers. Merging decreases
5734 the size of the debug information in the output file at the cost of
5735 increasing link processing time. Merging is enabled by default.
5736
5737 -fdebug-prefix-map=old=new
5738 When compiling files residing in directory old, record debugging
5739 information describing them as if the files resided in directory
5740 new instead. This can be used to replace a build-time path with an
5741 install-time path in the debug info. It can also be used to change
5742 an absolute path to a relative path by using . for new. This can
5743 give more reproducible builds, which are location independent, but
5744 may require an extra command to tell GDB where to find the source
5745 files. See also -ffile-prefix-map.
5746
5747 -fvar-tracking
5748 Run variable tracking pass. It computes where variables are stored
5749 at each position in code. Better debugging information is then
5750 generated (if the debugging information format supports this
5751 information).
5752
5753 It is enabled by default when compiling with optimization (-Os, -O,
5754 -O2, ...), debugging information (-g) and the debug info format
5755 supports it.
5756
5757 -fvar-tracking-assignments
5758 Annotate assignments to user variables early in the compilation and
5759 attempt to carry the annotations over throughout the compilation
5760 all the way to the end, in an attempt to improve debug information
5761 while optimizing. Use of -gdwarf-4 is recommended along with it.
5762
5763 It can be enabled even if var-tracking is disabled, in which case
5764 annotations are created and maintained, but discarded at the end.
5765 By default, this flag is enabled together with -fvar-tracking,
5766 except when selective scheduling is enabled.
5767
5768 -gsplit-dwarf
5769 Separate as much DWARF debugging information as possible into a
5770 separate output file with the extension .dwo. This option allows
5771 the build system to avoid linking files with debug information. To
5772 be useful, this option requires a debugger capable of reading .dwo
5773 files.
5774
5775 -gpubnames
5776 Generate DWARF ".debug_pubnames" and ".debug_pubtypes" sections.
5777
5778 -ggnu-pubnames
5779 Generate ".debug_pubnames" and ".debug_pubtypes" sections in a
5780 format suitable for conversion into a GDB index. This option is
5781 only useful with a linker that can produce GDB index version 7.
5782
5783 -fdebug-types-section
5784 When using DWARF Version 4 or higher, type DIEs can be put into
5785 their own ".debug_types" section instead of making them part of the
5786 ".debug_info" section. It is more efficient to put them in a
5787 separate comdat sections since the linker can then remove
5788 duplicates. But not all DWARF consumers support ".debug_types"
5789 sections yet and on some objects ".debug_types" produces larger
5790 instead of smaller debugging information.
5791
5792 -grecord-gcc-switches
5793 -gno-record-gcc-switches
5794 This switch causes the command-line options used to invoke the
5795 compiler that may affect code generation to be appended to the
5796 DW_AT_producer attribute in DWARF debugging information. The
5797 options are concatenated with spaces separating them from each
5798 other and from the compiler version. It is enabled by default.
5799 See also -frecord-gcc-switches for another way of storing compiler
5800 options into the object file.
5801
5802 -gstrict-dwarf
5803 Disallow using extensions of later DWARF standard version than
5804 selected with -gdwarf-version. On most targets using non-
5805 conflicting DWARF extensions from later standard versions is
5806 allowed.
5807
5808 -gno-strict-dwarf
5809 Allow using extensions of later DWARF standard version than
5810 selected with -gdwarf-version.
5811
5812 -gas-loc-support
5813 Inform the compiler that the assembler supports ".loc" directives.
5814 It may then use them for the assembler to generate DWARF2+ line
5815 number tables.
5816
5817 This is generally desirable, because assembler-generated line-
5818 number tables are a lot more compact than those the compiler can
5819 generate itself.
5820
5821 This option will be enabled by default if, at GCC configure time,
5822 the assembler was found to support such directives.
5823
5824 -gno-as-loc-support
5825 Force GCC to generate DWARF2+ line number tables internally, if
5826 DWARF2+ line number tables are to be generated.
5827
5828 gas-locview-support
5829 Inform the compiler that the assembler supports "view" assignment
5830 and reset assertion checking in ".loc" directives.
5831
5832 This option will be enabled by default if, at GCC configure time,
5833 the assembler was found to support them.
5834
5835 gno-as-locview-support
5836 Force GCC to assign view numbers internally, if
5837 -gvariable-location-views are explicitly requested.
5838
5839 -gcolumn-info
5840 -gno-column-info
5841 Emit location column information into DWARF debugging information,
5842 rather than just file and line. This option is enabled by default.
5843
5844 -gstatement-frontiers
5845 -gno-statement-frontiers
5846 This option causes GCC to create markers in the internal
5847 representation at the beginning of statements, and to keep them
5848 roughly in place throughout compilation, using them to guide the
5849 output of "is_stmt" markers in the line number table. This is
5850 enabled by default when compiling with optimization (-Os, -O, -O2,
5851 ...), and outputting DWARF 2 debug information at the normal level.
5852
5853 -gvariable-location-views
5854 -gvariable-location-views=incompat5
5855 -gno-variable-location-views
5856 Augment variable location lists with progressive view numbers
5857 implied from the line number table. This enables debug information
5858 consumers to inspect state at certain points of the program, even
5859 if no instructions associated with the corresponding source
5860 locations are present at that point. If the assembler lacks
5861 support for view numbers in line number tables, this will cause the
5862 compiler to emit the line number table, which generally makes them
5863 somewhat less compact. The augmented line number tables and
5864 location lists are fully backward-compatible, so they can be
5865 consumed by debug information consumers that are not aware of these
5866 augmentations, but they won't derive any benefit from them either.
5867
5868 This is enabled by default when outputting DWARF 2 debug
5869 information at the normal level, as long as there is assembler
5870 support, -fvar-tracking-assignments is enabled and -gstrict-dwarf
5871 is not. When assembler support is not available, this may still be
5872 enabled, but it will force GCC to output internal line number
5873 tables, and if -ginternal-reset-location-views is not enabled, that
5874 will most certainly lead to silently mismatching location views.
5875
5876 There is a proposed representation for view numbers that is not
5877 backward compatible with the location list format introduced in
5878 DWARF 5, that can be enabled with
5879 -gvariable-location-views=incompat5. This option may be removed in
5880 the future, is only provided as a reference implementation of the
5881 proposed representation. Debug information consumers are not
5882 expected to support this extended format, and they would be
5883 rendered unable to decode location lists using it.
5884
5885 -ginternal-reset-location-views
5886 -gnointernal-reset-location-views
5887 Attempt to determine location views that can be omitted from
5888 location view lists. This requires the compiler to have very
5889 accurate insn length estimates, which isn't always the case, and it
5890 may cause incorrect view lists to be generated silently when using
5891 an assembler that does not support location view lists. The GNU
5892 assembler will flag any such error as a "view number mismatch".
5893 This is only enabled on ports that define a reliable estimation
5894 function.
5895
5896 -ginline-points
5897 -gno-inline-points
5898 Generate extended debug information for inlined functions.
5899 Location view tracking markers are inserted at inlined entry
5900 points, so that address and view numbers can be computed and output
5901 in debug information. This can be enabled independently of
5902 location views, in which case the view numbers won't be output, but
5903 it can only be enabled along with statement frontiers, and it is
5904 only enabled by default if location views are enabled.
5905
5906 -gz[=type]
5907 Produce compressed debug sections in DWARF format, if that is
5908 supported. If type is not given, the default type depends on the
5909 capabilities of the assembler and linker used. type may be one of
5910 none (don't compress debug sections), zlib (use zlib compression in
5911 ELF gABI format), or zlib-gnu (use zlib compression in traditional
5912 GNU format). If the linker doesn't support writing compressed
5913 debug sections, the option is rejected. Otherwise, if the
5914 assembler does not support them, -gz is silently ignored when
5915 producing object files.
5916
5917 -femit-struct-debug-baseonly
5918 Emit debug information for struct-like types only when the base
5919 name of the compilation source file matches the base name of file
5920 in which the struct is defined.
5921
5922 This option substantially reduces the size of debugging
5923 information, but at significant potential loss in type information
5924 to the debugger. See -femit-struct-debug-reduced for a less
5925 aggressive option. See -femit-struct-debug-detailed for more
5926 detailed control.
5927
5928 This option works only with DWARF debug output.
5929
5930 -femit-struct-debug-reduced
5931 Emit debug information for struct-like types only when the base
5932 name of the compilation source file matches the base name of file
5933 in which the type is defined, unless the struct is a template or
5934 defined in a system header.
5935
5936 This option significantly reduces the size of debugging
5937 information, with some potential loss in type information to the
5938 debugger. See -femit-struct-debug-baseonly for a more aggressive
5939 option. See -femit-struct-debug-detailed for more detailed
5940 control.
5941
5942 This option works only with DWARF debug output.
5943
5944 -femit-struct-debug-detailed[=spec-list]
5945 Specify the struct-like types for which the compiler generates
5946 debug information. The intent is to reduce duplicate struct debug
5947 information between different object files within the same program.
5948
5949 This option is a detailed version of -femit-struct-debug-reduced
5950 and -femit-struct-debug-baseonly, which serves for most needs.
5951
5952 A specification has the
5953 syntax[dir:|ind:][ord:|gen:](any|sys|base|none)
5954
5955 The optional first word limits the specification to structs that
5956 are used directly (dir:) or used indirectly (ind:). A struct type
5957 is used directly when it is the type of a variable, member.
5958 Indirect uses arise through pointers to structs. That is, when use
5959 of an incomplete struct is valid, the use is indirect. An example
5960 is struct one direct; struct two * indirect;.
5961
5962 The optional second word limits the specification to ordinary
5963 structs (ord:) or generic structs (gen:). Generic structs are a
5964 bit complicated to explain. For C++, these are non-explicit
5965 specializations of template classes, or non-template classes within
5966 the above. Other programming languages have generics, but
5967 -femit-struct-debug-detailed does not yet implement them.
5968
5969 The third word specifies the source files for those structs for
5970 which the compiler should emit debug information. The values none
5971 and any have the normal meaning. The value base means that the
5972 base of name of the file in which the type declaration appears must
5973 match the base of the name of the main compilation file. In
5974 practice, this means that when compiling foo.c, debug information
5975 is generated for types declared in that file and foo.h, but not
5976 other header files. The value sys means those types satisfying
5977 base or declared in system or compiler headers.
5978
5979 You may need to experiment to determine the best settings for your
5980 application.
5981
5982 The default is -femit-struct-debug-detailed=all.
5983
5984 This option works only with DWARF debug output.
5985
5986 -fno-dwarf2-cfi-asm
5987 Emit DWARF unwind info as compiler generated ".eh_frame" section
5988 instead of using GAS ".cfi_*" directives.
5989
5990 -fno-eliminate-unused-debug-types
5991 Normally, when producing DWARF output, GCC avoids producing debug
5992 symbol output for types that are nowhere used in the source file
5993 being compiled. Sometimes it is useful to have GCC emit debugging
5994 information for all types declared in a compilation unit,
5995 regardless of whether or not they are actually used in that
5996 compilation unit, for example if, in the debugger, you want to cast
5997 a value to a type that is not actually used in your program (but is
5998 declared). More often, however, this results in a significant
5999 amount of wasted space.
6000
6001 Options That Control Optimization
6002 These options control various sorts of optimizations.
6003
6004 Without any optimization option, the compiler's goal is to reduce the
6005 cost of compilation and to make debugging produce the expected results.
6006 Statements are independent: if you stop the program with a breakpoint
6007 between statements, you can then assign a new value to any variable or
6008 change the program counter to any other statement in the function and
6009 get exactly the results you expect from the source code.
6010
6011 Turning on optimization flags makes the compiler attempt to improve the
6012 performance and/or code size at the expense of compilation time and
6013 possibly the ability to debug the program.
6014
6015 The compiler performs optimization based on the knowledge it has of the
6016 program. Compiling multiple files at once to a single output file mode
6017 allows the compiler to use information gained from all of the files
6018 when compiling each of them.
6019
6020 Not all optimizations are controlled directly by a flag. Only
6021 optimizations that have a flag are listed in this section.
6022
6023 Most optimizations are only enabled if an -O level is set on the
6024 command line. Otherwise they are disabled, even if individual
6025 optimization flags are specified.
6026
6027 Depending on the target and how GCC was configured, a slightly
6028 different set of optimizations may be enabled at each -O level than
6029 those listed here. You can invoke GCC with -Q --help=optimizers to
6030 find out the exact set of optimizations that are enabled at each level.
6031
6032 -O
6033 -O1 Optimize. Optimizing compilation takes somewhat more time, and a
6034 lot more memory for a large function.
6035
6036 With -O, the compiler tries to reduce code size and execution time,
6037 without performing any optimizations that take a great deal of
6038 compilation time.
6039
6040 -O turns on the following optimization flags:
6041
6042 -fauto-inc-dec -fbranch-count-reg -fcombine-stack-adjustments
6043 -fcompare-elim -fcprop-registers -fdce -fdefer-pop -fdelayed-branch
6044 -fdse -fforward-propagate -fguess-branch-probability
6045 -fif-conversion2 -fif-conversion -finline-functions-called-once
6046 -fipa-pure-const -fipa-profile -fipa-reference -fmerge-constants
6047 -fmove-loop-invariants -fomit-frame-pointer -freorder-blocks
6048 -fshrink-wrap -fshrink-wrap-separate -fsplit-wide-types
6049 -fssa-backprop -fssa-phiopt -ftree-bit-ccp -ftree-ccp -ftree-ch
6050 -ftree-coalesce-vars -ftree-copy-prop -ftree-dce
6051 -ftree-dominator-opts -ftree-dse -ftree-forwprop -ftree-fre
6052 -ftree-phiprop -ftree-sink -ftree-slsr -ftree-sra -ftree-pta
6053 -ftree-ter -funit-at-a-time
6054
6055 -O2 Optimize even more. GCC performs nearly all supported
6056 optimizations that do not involve a space-speed tradeoff. As
6057 compared to -O, this option increases both compilation time and the
6058 performance of the generated code.
6059
6060 -O2 turns on all optimization flags specified by -O. It also turns
6061 on the following optimization flags: -fthread-jumps
6062 -falign-functions -falign-jumps -falign-loops -falign-labels
6063 -fcaller-saves -fcrossjumping -fcse-follow-jumps -fcse-skip-blocks
6064 -fdelete-null-pointer-checks -fdevirtualize
6065 -fdevirtualize-speculatively -fexpensive-optimizations -fgcse
6066 -fgcse-lm -fhoist-adjacent-loads -finline-small-functions
6067 -findirect-inlining -fipa-cp -fipa-bit-cp -fipa-vrp -fipa-sra
6068 -fipa-icf -fisolate-erroneous-paths-dereference -flra-remat
6069 -foptimize-sibling-calls -foptimize-strlen -fpartial-inlining
6070 -fpeephole2 -freorder-blocks-algorithm=stc
6071 -freorder-blocks-and-partition -freorder-functions
6072 -frerun-cse-after-loop -fsched-interblock -fsched-spec
6073 -fschedule-insns -fschedule-insns2 -fstore-merging
6074 -fstrict-aliasing -ftree-builtin-call-dce -ftree-switch-conversion
6075 -ftree-tail-merge -fcode-hoisting -ftree-pre -ftree-vrp -fipa-ra
6076
6077 Please note the warning under -fgcse about invoking -O2 on programs
6078 that use computed gotos.
6079
6080 -O3 Optimize yet more. -O3 turns on all optimizations specified by -O2
6081 and also turns on the following optimization flags:
6082 -finline-functions -funswitch-loops -fpredictive-commoning
6083 -fgcse-after-reload -ftree-loop-vectorize -ftree-loop-distribution
6084 -ftree-loop-distribute-patterns -floop-interchange
6085 -floop-unroll-and-jam -fsplit-paths -ftree-slp-vectorize
6086 -fvect-cost-model -ftree-partial-pre -fpeel-loops -fipa-cp-clone
6087
6088 -O0 Reduce compilation time and make debugging produce the expected
6089 results. This is the default.
6090
6091 -Os Optimize for size. -Os enables all -O2 optimizations that do not
6092 typically increase code size.
6093
6094 -Os disables the following optimization flags: -falign-functions
6095 -falign-jumps -falign-loops -falign-labels -freorder-blocks
6096 -freorder-blocks-algorithm=stc -freorder-blocks-and-partition
6097 -fprefetch-loop-arrays
6098
6099 It also enables -finline-functions, causes the compiler to tune for
6100 code size rather than execution speed, and performs further
6101 optimizations designed to reduce code size.
6102
6103 -Ofast
6104 Disregard strict standards compliance. -Ofast enables all -O3
6105 optimizations. It also enables optimizations that are not valid
6106 for all standard-compliant programs. It turns on -ffast-math and
6107 the Fortran-specific -fstack-arrays, unless -fmax-stack-var-size is
6108 specified, and -fno-protect-parens.
6109
6110 -Og Optimize debugging experience. -Og enables optimizations that do
6111 not interfere with debugging. It should be the optimization level
6112 of choice for the standard edit-compile-debug cycle, offering a
6113 reasonable level of optimization while maintaining fast compilation
6114 and a good debugging experience.
6115
6116 If you use multiple -O options, with or without level numbers, the last
6117 such option is the one that is effective.
6118
6119 Options of the form -fflag specify machine-independent flags. Most
6120 flags have both positive and negative forms; the negative form of -ffoo
6121 is -fno-foo. In the table below, only one of the forms is listed---the
6122 one you typically use. You can figure out the other form by either
6123 removing no- or adding it.
6124
6125 The following options control specific optimizations. They are either
6126 activated by -O options or are related to ones that are. You can use
6127 the following flags in the rare cases when "fine-tuning" of
6128 optimizations to be performed is desired.
6129
6130 -fno-defer-pop
6131 Always pop the arguments to each function call as soon as that
6132 function returns. For machines that must pop arguments after a
6133 function call, the compiler normally lets arguments accumulate on
6134 the stack for several function calls and pops them all at once.
6135
6136 Disabled at levels -O, -O2, -O3, -Os.
6137
6138 -fforward-propagate
6139 Perform a forward propagation pass on RTL. The pass tries to
6140 combine two instructions and checks if the result can be
6141 simplified. If loop unrolling is active, two passes are performed
6142 and the second is scheduled after loop unrolling.
6143
6144 This option is enabled by default at optimization levels -O, -O2,
6145 -O3, -Os.
6146
6147 -ffp-contract=style
6148 -ffp-contract=off disables floating-point expression contraction.
6149 -ffp-contract=fast enables floating-point expression contraction
6150 such as forming of fused multiply-add operations if the target has
6151 native support for them. -ffp-contract=on enables floating-point
6152 expression contraction if allowed by the language standard. This
6153 is currently not implemented and treated equal to
6154 -ffp-contract=off.
6155
6156 The default is -ffp-contract=fast.
6157
6158 -fomit-frame-pointer
6159 Omit the frame pointer in functions that don't need one. This
6160 avoids the instructions to save, set up and restore the frame
6161 pointer; on many targets it also makes an extra register available.
6162
6163 On some targets this flag has no effect because the standard
6164 calling sequence always uses a frame pointer, so it cannot be
6165 omitted.
6166
6167 Note that -fno-omit-frame-pointer doesn't guarantee the frame
6168 pointer is used in all functions. Several targets always omit the
6169 frame pointer in leaf functions.
6170
6171 Enabled by default at -O and higher.
6172
6173 -foptimize-sibling-calls
6174 Optimize sibling and tail recursive calls.
6175
6176 Enabled at levels -O2, -O3, -Os.
6177
6178 -foptimize-strlen
6179 Optimize various standard C string functions (e.g. "strlen",
6180 "strchr" or "strcpy") and their "_FORTIFY_SOURCE" counterparts into
6181 faster alternatives.
6182
6183 Enabled at levels -O2, -O3.
6184
6185 -fno-inline
6186 Do not expand any functions inline apart from those marked with the
6187 "always_inline" attribute. This is the default when not
6188 optimizing.
6189
6190 Single functions can be exempted from inlining by marking them with
6191 the "noinline" attribute.
6192
6193 -finline-small-functions
6194 Integrate functions into their callers when their body is smaller
6195 than expected function call code (so overall size of program gets
6196 smaller). The compiler heuristically decides which functions are
6197 simple enough to be worth integrating in this way. This inlining
6198 applies to all functions, even those not declared inline.
6199
6200 Enabled at levels -O2, -O3, -Os.
6201
6202 -findirect-inlining
6203 Inline also indirect calls that are discovered to be known at
6204 compile time thanks to previous inlining. This option has any
6205 effect only when inlining itself is turned on by the
6206 -finline-functions or -finline-small-functions options.
6207
6208 Enabled at levels -O3, -Os. Also enabled by -fprofile-use and
6209 -fauto-profile.
6210
6211 -finline-functions
6212 Consider all functions for inlining, even if they are not declared
6213 inline. The compiler heuristically decides which functions are
6214 worth integrating in this way.
6215
6216 If all calls to a given function are integrated, and the function
6217 is declared "static", then the function is normally not output as
6218 assembler code in its own right.
6219
6220 Enabled at levels -O2, -O3, -Os.
6221
6222 -finline-functions-called-once
6223 Consider all "static" functions called once for inlining into their
6224 caller even if they are not marked "inline". If a call to a given
6225 function is integrated, then the function is not output as
6226 assembler code in its own right.
6227
6228 Enabled at levels -O1, -O2, -O3 and -Os.
6229
6230 -fearly-inlining
6231 Inline functions marked by "always_inline" and functions whose body
6232 seems smaller than the function call overhead early before doing
6233 -fprofile-generate instrumentation and real inlining pass. Doing
6234 so makes profiling significantly cheaper and usually inlining
6235 faster on programs having large chains of nested wrapper functions.
6236
6237 Enabled by default.
6238
6239 -fipa-sra
6240 Perform interprocedural scalar replacement of aggregates, removal
6241 of unused parameters and replacement of parameters passed by
6242 reference by parameters passed by value.
6243
6244 Enabled at levels -O2, -O3 and -Os.
6245
6246 -finline-limit=n
6247 By default, GCC limits the size of functions that can be inlined.
6248 This flag allows coarse control of this limit. n is the size of
6249 functions that can be inlined in number of pseudo instructions.
6250
6251 Inlining is actually controlled by a number of parameters, which
6252 may be specified individually by using --param name=value. The
6253 -finline-limit=n option sets some of these parameters as follows:
6254
6255 max-inline-insns-single
6256 is set to n/2.
6257
6258 max-inline-insns-auto
6259 is set to n/2.
6260
6261 See below for a documentation of the individual parameters
6262 controlling inlining and for the defaults of these parameters.
6263
6264 Note: there may be no value to -finline-limit that results in
6265 default behavior.
6266
6267 Note: pseudo instruction represents, in this particular context, an
6268 abstract measurement of function's size. In no way does it
6269 represent a count of assembly instructions and as such its exact
6270 meaning might change from one release to an another.
6271
6272 -fno-keep-inline-dllexport
6273 This is a more fine-grained version of -fkeep-inline-functions,
6274 which applies only to functions that are declared using the
6275 "dllexport" attribute or declspec.
6276
6277 -fkeep-inline-functions
6278 In C, emit "static" functions that are declared "inline" into the
6279 object file, even if the function has been inlined into all of its
6280 callers. This switch does not affect functions using the "extern
6281 inline" extension in GNU C90. In C++, emit any and all inline
6282 functions into the object file.
6283
6284 -fkeep-static-functions
6285 Emit "static" functions into the object file, even if the function
6286 is never used.
6287
6288 -fkeep-static-consts
6289 Emit variables declared "static const" when optimization isn't
6290 turned on, even if the variables aren't referenced.
6291
6292 GCC enables this option by default. If you want to force the
6293 compiler to check if a variable is referenced, regardless of
6294 whether or not optimization is turned on, use the
6295 -fno-keep-static-consts option.
6296
6297 -fmerge-constants
6298 Attempt to merge identical constants (string constants and
6299 floating-point constants) across compilation units.
6300
6301 This option is the default for optimized compilation if the
6302 assembler and linker support it. Use -fno-merge-constants to
6303 inhibit this behavior.
6304
6305 Enabled at levels -O, -O2, -O3, -Os.
6306
6307 -fmerge-all-constants
6308 Attempt to merge identical constants and identical variables.
6309
6310 This option implies -fmerge-constants. In addition to
6311 -fmerge-constants this considers e.g. even constant initialized
6312 arrays or initialized constant variables with integral or floating-
6313 point types. Languages like C or C++ require each variable,
6314 including multiple instances of the same variable in recursive
6315 calls, to have distinct locations, so using this option results in
6316 non-conforming behavior.
6317
6318 -fmodulo-sched
6319 Perform swing modulo scheduling immediately before the first
6320 scheduling pass. This pass looks at innermost loops and reorders
6321 their instructions by overlapping different iterations.
6322
6323 -fmodulo-sched-allow-regmoves
6324 Perform more aggressive SMS-based modulo scheduling with register
6325 moves allowed. By setting this flag certain anti-dependences edges
6326 are deleted, which triggers the generation of reg-moves based on
6327 the life-range analysis. This option is effective only with
6328 -fmodulo-sched enabled.
6329
6330 -fno-branch-count-reg
6331 Avoid running a pass scanning for opportunities to use "decrement
6332 and branch" instructions on a count register instead of generating
6333 sequences of instructions that decrement a register, compare it
6334 against zero, and then branch based upon the result. This option
6335 is only meaningful on architectures that support such instructions,
6336 which include x86, PowerPC, IA-64 and S/390. Note that the
6337 -fno-branch-count-reg option doesn't remove the decrement and
6338 branch instructions from the generated instruction stream
6339 introduced by other optimization passes.
6340
6341 Enabled by default at -O1 and higher.
6342
6343 The default is -fbranch-count-reg.
6344
6345 -fno-function-cse
6346 Do not put function addresses in registers; make each instruction
6347 that calls a constant function contain the function's address
6348 explicitly.
6349
6350 This option results in less efficient code, but some strange hacks
6351 that alter the assembler output may be confused by the
6352 optimizations performed when this option is not used.
6353
6354 The default is -ffunction-cse
6355
6356 -fno-zero-initialized-in-bss
6357 If the target supports a BSS section, GCC by default puts variables
6358 that are initialized to zero into BSS. This can save space in the
6359 resulting code.
6360
6361 This option turns off this behavior because some programs
6362 explicitly rely on variables going to the data section---e.g., so
6363 that the resulting executable can find the beginning of that
6364 section and/or make assumptions based on that.
6365
6366 The default is -fzero-initialized-in-bss.
6367
6368 -fthread-jumps
6369 Perform optimizations that check to see if a jump branches to a
6370 location where another comparison subsumed by the first is found.
6371 If so, the first branch is redirected to either the destination of
6372 the second branch or a point immediately following it, depending on
6373 whether the condition is known to be true or false.
6374
6375 Enabled at levels -O2, -O3, -Os.
6376
6377 -fsplit-wide-types
6378 When using a type that occupies multiple registers, such as "long
6379 long" on a 32-bit system, split the registers apart and allocate
6380 them independently. This normally generates better code for those
6381 types, but may make debugging more difficult.
6382
6383 Enabled at levels -O, -O2, -O3, -Os.
6384
6385 -fcse-follow-jumps
6386 In common subexpression elimination (CSE), scan through jump
6387 instructions when the target of the jump is not reached by any
6388 other path. For example, when CSE encounters an "if" statement
6389 with an "else" clause, CSE follows the jump when the condition
6390 tested is false.
6391
6392 Enabled at levels -O2, -O3, -Os.
6393
6394 -fcse-skip-blocks
6395 This is similar to -fcse-follow-jumps, but causes CSE to follow
6396 jumps that conditionally skip over blocks. When CSE encounters a
6397 simple "if" statement with no else clause, -fcse-skip-blocks causes
6398 CSE to follow the jump around the body of the "if".
6399
6400 Enabled at levels -O2, -O3, -Os.
6401
6402 -frerun-cse-after-loop
6403 Re-run common subexpression elimination after loop optimizations
6404 are performed.
6405
6406 Enabled at levels -O2, -O3, -Os.
6407
6408 -fgcse
6409 Perform a global common subexpression elimination pass. This pass
6410 also performs global constant and copy propagation.
6411
6412 Note: When compiling a program using computed gotos, a GCC
6413 extension, you may get better run-time performance if you disable
6414 the global common subexpression elimination pass by adding
6415 -fno-gcse to the command line.
6416
6417 Enabled at levels -O2, -O3, -Os.
6418
6419 -fgcse-lm
6420 When -fgcse-lm is enabled, global common subexpression elimination
6421 attempts to move loads that are only killed by stores into
6422 themselves. This allows a loop containing a load/store sequence to
6423 be changed to a load outside the loop, and a copy/store within the
6424 loop.
6425
6426 Enabled by default when -fgcse is enabled.
6427
6428 -fgcse-sm
6429 When -fgcse-sm is enabled, a store motion pass is run after global
6430 common subexpression elimination. This pass attempts to move
6431 stores out of loops. When used in conjunction with -fgcse-lm,
6432 loops containing a load/store sequence can be changed to a load
6433 before the loop and a store after the loop.
6434
6435 Not enabled at any optimization level.
6436
6437 -fgcse-las
6438 When -fgcse-las is enabled, the global common subexpression
6439 elimination pass eliminates redundant loads that come after stores
6440 to the same memory location (both partial and full redundancies).
6441
6442 Not enabled at any optimization level.
6443
6444 -fgcse-after-reload
6445 When -fgcse-after-reload is enabled, a redundant load elimination
6446 pass is performed after reload. The purpose of this pass is to
6447 clean up redundant spilling.
6448
6449 -faggressive-loop-optimizations
6450 This option tells the loop optimizer to use language constraints to
6451 derive bounds for the number of iterations of a loop. This assumes
6452 that loop code does not invoke undefined behavior by for example
6453 causing signed integer overflows or out-of-bound array accesses.
6454 The bounds for the number of iterations of a loop are used to guide
6455 loop unrolling and peeling and loop exit test optimizations. This
6456 option is enabled by default.
6457
6458 -funconstrained-commons
6459 This option tells the compiler that variables declared in common
6460 blocks (e.g. Fortran) may later be overridden with longer trailing
6461 arrays. This prevents certain optimizations that depend on knowing
6462 the array bounds.
6463
6464 -fcrossjumping
6465 Perform cross-jumping transformation. This transformation unifies
6466 equivalent code and saves code size. The resulting code may or may
6467 not perform better than without cross-jumping.
6468
6469 Enabled at levels -O2, -O3, -Os.
6470
6471 -fauto-inc-dec
6472 Combine increments or decrements of addresses with memory accesses.
6473 This pass is always skipped on architectures that do not have
6474 instructions to support this. Enabled by default at -O and higher
6475 on architectures that support this.
6476
6477 -fdce
6478 Perform dead code elimination (DCE) on RTL. Enabled by default at
6479 -O and higher.
6480
6481 -fdse
6482 Perform dead store elimination (DSE) on RTL. Enabled by default at
6483 -O and higher.
6484
6485 -fif-conversion
6486 Attempt to transform conditional jumps into branch-less
6487 equivalents. This includes use of conditional moves, min, max, set
6488 flags and abs instructions, and some tricks doable by standard
6489 arithmetics. The use of conditional execution on chips where it is
6490 available is controlled by -fif-conversion2.
6491
6492 Enabled at levels -O, -O2, -O3, -Os.
6493
6494 -fif-conversion2
6495 Use conditional execution (where available) to transform
6496 conditional jumps into branch-less equivalents.
6497
6498 Enabled at levels -O, -O2, -O3, -Os.
6499
6500 -fdeclone-ctor-dtor
6501 The C++ ABI requires multiple entry points for constructors and
6502 destructors: one for a base subobject, one for a complete object,
6503 and one for a virtual destructor that calls operator delete
6504 afterwards. For a hierarchy with virtual bases, the base and
6505 complete variants are clones, which means two copies of the
6506 function. With this option, the base and complete variants are
6507 changed to be thunks that call a common implementation.
6508
6509 Enabled by -Os.
6510
6511 -fdelete-null-pointer-checks
6512 Assume that programs cannot safely dereference null pointers, and
6513 that no code or data element resides at address zero. This option
6514 enables simple constant folding optimizations at all optimization
6515 levels. In addition, other optimization passes in GCC use this
6516 flag to control global dataflow analyses that eliminate useless
6517 checks for null pointers; these assume that a memory access to
6518 address zero always results in a trap, so that if a pointer is
6519 checked after it has already been dereferenced, it cannot be null.
6520
6521 Note however that in some environments this assumption is not true.
6522 Use -fno-delete-null-pointer-checks to disable this optimization
6523 for programs that depend on that behavior.
6524
6525 This option is enabled by default on most targets. On Nios II ELF,
6526 it defaults to off. On AVR, CR16, and MSP430, this option is
6527 completely disabled.
6528
6529 Passes that use the dataflow information are enabled independently
6530 at different optimization levels.
6531
6532 -fdevirtualize
6533 Attempt to convert calls to virtual functions to direct calls.
6534 This is done both within a procedure and interprocedurally as part
6535 of indirect inlining (-findirect-inlining) and interprocedural
6536 constant propagation (-fipa-cp). Enabled at levels -O2, -O3, -Os.
6537
6538 -fdevirtualize-speculatively
6539 Attempt to convert calls to virtual functions to speculative direct
6540 calls. Based on the analysis of the type inheritance graph,
6541 determine for a given call the set of likely targets. If the set is
6542 small, preferably of size 1, change the call into a conditional
6543 deciding between direct and indirect calls. The speculative calls
6544 enable more optimizations, such as inlining. When they seem
6545 useless after further optimization, they are converted back into
6546 original form.
6547
6548 -fdevirtualize-at-ltrans
6549 Stream extra information needed for aggressive devirtualization
6550 when running the link-time optimizer in local transformation mode.
6551 This option enables more devirtualization but significantly
6552 increases the size of streamed data. For this reason it is disabled
6553 by default.
6554
6555 -fexpensive-optimizations
6556 Perform a number of minor optimizations that are relatively
6557 expensive.
6558
6559 Enabled at levels -O2, -O3, -Os.
6560
6561 -free
6562 Attempt to remove redundant extension instructions. This is
6563 especially helpful for the x86-64 architecture, which implicitly
6564 zero-extends in 64-bit registers after writing to their lower
6565 32-bit half.
6566
6567 Enabled for Alpha, AArch64 and x86 at levels -O2, -O3, -Os.
6568
6569 -fno-lifetime-dse
6570 In C++ the value of an object is only affected by changes within
6571 its lifetime: when the constructor begins, the object has an
6572 indeterminate value, and any changes during the lifetime of the
6573 object are dead when the object is destroyed. Normally dead store
6574 elimination will take advantage of this; if your code relies on the
6575 value of the object storage persisting beyond the lifetime of the
6576 object, you can use this flag to disable this optimization. To
6577 preserve stores before the constructor starts (e.g. because your
6578 operator new clears the object storage) but still treat the object
6579 as dead after the destructor you, can use -flifetime-dse=1. The
6580 default behavior can be explicitly selected with -flifetime-dse=2.
6581 -flifetime-dse=0 is equivalent to -fno-lifetime-dse.
6582
6583 -flive-range-shrinkage
6584 Attempt to decrease register pressure through register live range
6585 shrinkage. This is helpful for fast processors with small or
6586 moderate size register sets.
6587
6588 -fira-algorithm=algorithm
6589 Use the specified coloring algorithm for the integrated register
6590 allocator. The algorithm argument can be priority, which specifies
6591 Chow's priority coloring, or CB, which specifies Chaitin-Briggs
6592 coloring. Chaitin-Briggs coloring is not implemented for all
6593 architectures, but for those targets that do support it, it is the
6594 default because it generates better code.
6595
6596 -fira-region=region
6597 Use specified regions for the integrated register allocator. The
6598 region argument should be one of the following:
6599
6600 all Use all loops as register allocation regions. This can give
6601 the best results for machines with a small and/or irregular
6602 register set.
6603
6604 mixed
6605 Use all loops except for loops with small register pressure as
6606 the regions. This value usually gives the best results in most
6607 cases and for most architectures, and is enabled by default
6608 when compiling with optimization for speed (-O, -O2, ...).
6609
6610 one Use all functions as a single region. This typically results
6611 in the smallest code size, and is enabled by default for -Os or
6612 -O0.
6613
6614 -fira-hoist-pressure
6615 Use IRA to evaluate register pressure in the code hoisting pass for
6616 decisions to hoist expressions. This option usually results in
6617 smaller code, but it can slow the compiler down.
6618
6619 This option is enabled at level -Os for all targets.
6620
6621 -fira-loop-pressure
6622 Use IRA to evaluate register pressure in loops for decisions to
6623 move loop invariants. This option usually results in generation of
6624 faster and smaller code on machines with large register files (>=
6625 32 registers), but it can slow the compiler down.
6626
6627 This option is enabled at level -O3 for some targets.
6628
6629 -fno-ira-share-save-slots
6630 Disable sharing of stack slots used for saving call-used hard
6631 registers living through a call. Each hard register gets a
6632 separate stack slot, and as a result function stack frames are
6633 larger.
6634
6635 -fno-ira-share-spill-slots
6636 Disable sharing of stack slots allocated for pseudo-registers.
6637 Each pseudo-register that does not get a hard register gets a
6638 separate stack slot, and as a result function stack frames are
6639 larger.
6640
6641 -flra-remat
6642 Enable CFG-sensitive rematerialization in LRA. Instead of loading
6643 values of spilled pseudos, LRA tries to rematerialize (recalculate)
6644 values if it is profitable.
6645
6646 Enabled at levels -O2, -O3, -Os.
6647
6648 -fdelayed-branch
6649 If supported for the target machine, attempt to reorder
6650 instructions to exploit instruction slots available after delayed
6651 branch instructions.
6652
6653 Enabled at levels -O, -O2, -O3, -Os.
6654
6655 -fschedule-insns
6656 If supported for the target machine, attempt to reorder
6657 instructions to eliminate execution stalls due to required data
6658 being unavailable. This helps machines that have slow floating
6659 point or memory load instructions by allowing other instructions to
6660 be issued until the result of the load or floating-point
6661 instruction is required.
6662
6663 Enabled at levels -O2, -O3.
6664
6665 -fschedule-insns2
6666 Similar to -fschedule-insns, but requests an additional pass of
6667 instruction scheduling after register allocation has been done.
6668 This is especially useful on machines with a relatively small
6669 number of registers and where memory load instructions take more
6670 than one cycle.
6671
6672 Enabled at levels -O2, -O3, -Os.
6673
6674 -fno-sched-interblock
6675 Don't schedule instructions across basic blocks. This is normally
6676 enabled by default when scheduling before register allocation, i.e.
6677 with -fschedule-insns or at -O2 or higher.
6678
6679 -fno-sched-spec
6680 Don't allow speculative motion of non-load instructions. This is
6681 normally enabled by default when scheduling before register
6682 allocation, i.e. with -fschedule-insns or at -O2 or higher.
6683
6684 -fsched-pressure
6685 Enable register pressure sensitive insn scheduling before register
6686 allocation. This only makes sense when scheduling before register
6687 allocation is enabled, i.e. with -fschedule-insns or at -O2 or
6688 higher. Usage of this option can improve the generated code and
6689 decrease its size by preventing register pressure increase above
6690 the number of available hard registers and subsequent spills in
6691 register allocation.
6692
6693 -fsched-spec-load
6694 Allow speculative motion of some load instructions. This only
6695 makes sense when scheduling before register allocation, i.e. with
6696 -fschedule-insns or at -O2 or higher.
6697
6698 -fsched-spec-load-dangerous
6699 Allow speculative motion of more load instructions. This only
6700 makes sense when scheduling before register allocation, i.e. with
6701 -fschedule-insns or at -O2 or higher.
6702
6703 -fsched-stalled-insns
6704 -fsched-stalled-insns=n
6705 Define how many insns (if any) can be moved prematurely from the
6706 queue of stalled insns into the ready list during the second
6707 scheduling pass. -fno-sched-stalled-insns means that no insns are
6708 moved prematurely, -fsched-stalled-insns=0 means there is no limit
6709 on how many queued insns can be moved prematurely.
6710 -fsched-stalled-insns without a value is equivalent to
6711 -fsched-stalled-insns=1.
6712
6713 -fsched-stalled-insns-dep
6714 -fsched-stalled-insns-dep=n
6715 Define how many insn groups (cycles) are examined for a dependency
6716 on a stalled insn that is a candidate for premature removal from
6717 the queue of stalled insns. This has an effect only during the
6718 second scheduling pass, and only if -fsched-stalled-insns is used.
6719 -fno-sched-stalled-insns-dep is equivalent to
6720 -fsched-stalled-insns-dep=0. -fsched-stalled-insns-dep without a
6721 value is equivalent to -fsched-stalled-insns-dep=1.
6722
6723 -fsched2-use-superblocks
6724 When scheduling after register allocation, use superblock
6725 scheduling. This allows motion across basic block boundaries,
6726 resulting in faster schedules. This option is experimental, as not
6727 all machine descriptions used by GCC model the CPU closely enough
6728 to avoid unreliable results from the algorithm.
6729
6730 This only makes sense when scheduling after register allocation,
6731 i.e. with -fschedule-insns2 or at -O2 or higher.
6732
6733 -fsched-group-heuristic
6734 Enable the group heuristic in the scheduler. This heuristic favors
6735 the instruction that belongs to a schedule group. This is enabled
6736 by default when scheduling is enabled, i.e. with -fschedule-insns
6737 or -fschedule-insns2 or at -O2 or higher.
6738
6739 -fsched-critical-path-heuristic
6740 Enable the critical-path heuristic in the scheduler. This
6741 heuristic favors instructions on the critical path. This is
6742 enabled by default when scheduling is enabled, i.e. with
6743 -fschedule-insns or -fschedule-insns2 or at -O2 or higher.
6744
6745 -fsched-spec-insn-heuristic
6746 Enable the speculative instruction heuristic in the scheduler.
6747 This heuristic favors speculative instructions with greater
6748 dependency weakness. This is enabled by default when scheduling is
6749 enabled, i.e. with -fschedule-insns or -fschedule-insns2 or at -O2
6750 or higher.
6751
6752 -fsched-rank-heuristic
6753 Enable the rank heuristic in the scheduler. This heuristic favors
6754 the instruction belonging to a basic block with greater size or
6755 frequency. This is enabled by default when scheduling is enabled,
6756 i.e. with -fschedule-insns or -fschedule-insns2 or at -O2 or
6757 higher.
6758
6759 -fsched-last-insn-heuristic
6760 Enable the last-instruction heuristic in the scheduler. This
6761 heuristic favors the instruction that is less dependent on the last
6762 instruction scheduled. This is enabled by default when scheduling
6763 is enabled, i.e. with -fschedule-insns or -fschedule-insns2 or at
6764 -O2 or higher.
6765
6766 -fsched-dep-count-heuristic
6767 Enable the dependent-count heuristic in the scheduler. This
6768 heuristic favors the instruction that has more instructions
6769 depending on it. This is enabled by default when scheduling is
6770 enabled, i.e. with -fschedule-insns or -fschedule-insns2 or at -O2
6771 or higher.
6772
6773 -freschedule-modulo-scheduled-loops
6774 Modulo scheduling is performed before traditional scheduling. If a
6775 loop is modulo scheduled, later scheduling passes may change its
6776 schedule. Use this option to control that behavior.
6777
6778 -fselective-scheduling
6779 Schedule instructions using selective scheduling algorithm.
6780 Selective scheduling runs instead of the first scheduler pass.
6781
6782 -fselective-scheduling2
6783 Schedule instructions using selective scheduling algorithm.
6784 Selective scheduling runs instead of the second scheduler pass.
6785
6786 -fsel-sched-pipelining
6787 Enable software pipelining of innermost loops during selective
6788 scheduling. This option has no effect unless one of
6789 -fselective-scheduling or -fselective-scheduling2 is turned on.
6790
6791 -fsel-sched-pipelining-outer-loops
6792 When pipelining loops during selective scheduling, also pipeline
6793 outer loops. This option has no effect unless
6794 -fsel-sched-pipelining is turned on.
6795
6796 -fsemantic-interposition
6797 Some object formats, like ELF, allow interposing of symbols by the
6798 dynamic linker. This means that for symbols exported from the DSO,
6799 the compiler cannot perform interprocedural propagation, inlining
6800 and other optimizations in anticipation that the function or
6801 variable in question may change. While this feature is useful, for
6802 example, to rewrite memory allocation functions by a debugging
6803 implementation, it is expensive in the terms of code quality. With
6804 -fno-semantic-interposition the compiler assumes that if
6805 interposition happens for functions the overwriting function will
6806 have precisely the same semantics (and side effects). Similarly if
6807 interposition happens for variables, the constructor of the
6808 variable will be the same. The flag has no effect for functions
6809 explicitly declared inline (where it is never allowed for
6810 interposition to change semantics) and for symbols explicitly
6811 declared weak.
6812
6813 -fshrink-wrap
6814 Emit function prologues only before parts of the function that need
6815 it, rather than at the top of the function. This flag is enabled
6816 by default at -O and higher.
6817
6818 -fshrink-wrap-separate
6819 Shrink-wrap separate parts of the prologue and epilogue separately,
6820 so that those parts are only executed when needed. This option is
6821 on by default, but has no effect unless -fshrink-wrap is also
6822 turned on and the target supports this.
6823
6824 -fcaller-saves
6825 Enable allocation of values to registers that are clobbered by
6826 function calls, by emitting extra instructions to save and restore
6827 the registers around such calls. Such allocation is done only when
6828 it seems to result in better code.
6829
6830 This option is always enabled by default on certain machines,
6831 usually those which have no call-preserved registers to use
6832 instead.
6833
6834 Enabled at levels -O2, -O3, -Os.
6835
6836 -fcombine-stack-adjustments
6837 Tracks stack adjustments (pushes and pops) and stack memory
6838 references and then tries to find ways to combine them.
6839
6840 Enabled by default at -O1 and higher.
6841
6842 -fipa-ra
6843 Use caller save registers for allocation if those registers are not
6844 used by any called function. In that case it is not necessary to
6845 save and restore them around calls. This is only possible if
6846 called functions are part of same compilation unit as current
6847 function and they are compiled before it.
6848
6849 Enabled at levels -O2, -O3, -Os, however the option is disabled if
6850 generated code will be instrumented for profiling (-p, or -pg) or
6851 if callee's register usage cannot be known exactly (this happens on
6852 targets that do not expose prologues and epilogues in RTL).
6853
6854 -fconserve-stack
6855 Attempt to minimize stack usage. The compiler attempts to use less
6856 stack space, even if that makes the program slower. This option
6857 implies setting the large-stack-frame parameter to 100 and the
6858 large-stack-frame-growth parameter to 400.
6859
6860 -ftree-reassoc
6861 Perform reassociation on trees. This flag is enabled by default at
6862 -O and higher.
6863
6864 -fcode-hoisting
6865 Perform code hoisting. Code hoisting tries to move the evaluation
6866 of expressions executed on all paths to the function exit as early
6867 as possible. This is especially useful as a code size
6868 optimization, but it often helps for code speed as well. This flag
6869 is enabled by default at -O2 and higher.
6870
6871 -ftree-pre
6872 Perform partial redundancy elimination (PRE) on trees. This flag
6873 is enabled by default at -O2 and -O3.
6874
6875 -ftree-partial-pre
6876 Make partial redundancy elimination (PRE) more aggressive. This
6877 flag is enabled by default at -O3.
6878
6879 -ftree-forwprop
6880 Perform forward propagation on trees. This flag is enabled by
6881 default at -O and higher.
6882
6883 -ftree-fre
6884 Perform full redundancy elimination (FRE) on trees. The difference
6885 between FRE and PRE is that FRE only considers expressions that are
6886 computed on all paths leading to the redundant computation. This
6887 analysis is faster than PRE, though it exposes fewer redundancies.
6888 This flag is enabled by default at -O and higher.
6889
6890 -ftree-phiprop
6891 Perform hoisting of loads from conditional pointers on trees. This
6892 pass is enabled by default at -O and higher.
6893
6894 -fhoist-adjacent-loads
6895 Speculatively hoist loads from both branches of an if-then-else if
6896 the loads are from adjacent locations in the same structure and the
6897 target architecture has a conditional move instruction. This flag
6898 is enabled by default at -O2 and higher.
6899
6900 -ftree-copy-prop
6901 Perform copy propagation on trees. This pass eliminates
6902 unnecessary copy operations. This flag is enabled by default at -O
6903 and higher.
6904
6905 -fipa-pure-const
6906 Discover which functions are pure or constant. Enabled by default
6907 at -O and higher.
6908
6909 -fipa-reference
6910 Discover which static variables do not escape the compilation unit.
6911 Enabled by default at -O and higher.
6912
6913 -fipa-pta
6914 Perform interprocedural pointer analysis and interprocedural
6915 modification and reference analysis. This option can cause
6916 excessive memory and compile-time usage on large compilation units.
6917 It is not enabled by default at any optimization level.
6918
6919 -fipa-profile
6920 Perform interprocedural profile propagation. The functions called
6921 only from cold functions are marked as cold. Also functions
6922 executed once (such as "cold", "noreturn", static constructors or
6923 destructors) are identified. Cold functions and loop less parts of
6924 functions executed once are then optimized for size. Enabled by
6925 default at -O and higher.
6926
6927 -fipa-cp
6928 Perform interprocedural constant propagation. This optimization
6929 analyzes the program to determine when values passed to functions
6930 are constants and then optimizes accordingly. This optimization
6931 can substantially increase performance if the application has
6932 constants passed to functions. This flag is enabled by default at
6933 -O2, -Os and -O3.
6934
6935 -fipa-cp-clone
6936 Perform function cloning to make interprocedural constant
6937 propagation stronger. When enabled, interprocedural constant
6938 propagation performs function cloning when externally visible
6939 function can be called with constant arguments. Because this
6940 optimization can create multiple copies of functions, it may
6941 significantly increase code size (see --param
6942 ipcp-unit-growth=value). This flag is enabled by default at -O3.
6943
6944 -fipa-bit-cp
6945 When enabled, perform interprocedural bitwise constant propagation.
6946 This flag is enabled by default at -O2. It requires that -fipa-cp
6947 is enabled.
6948
6949 -fipa-vrp
6950 When enabled, perform interprocedural propagation of value ranges.
6951 This flag is enabled by default at -O2. It requires that -fipa-cp
6952 is enabled.
6953
6954 -fipa-icf
6955 Perform Identical Code Folding for functions and read-only
6956 variables. The optimization reduces code size and may disturb
6957 unwind stacks by replacing a function by equivalent one with a
6958 different name. The optimization works more effectively with link-
6959 time optimization enabled.
6960
6961 Nevertheless the behavior is similar to Gold Linker ICF
6962 optimization, GCC ICF works on different levels and thus the
6963 optimizations are not same - there are equivalences that are found
6964 only by GCC and equivalences found only by Gold.
6965
6966 This flag is enabled by default at -O2 and -Os.
6967
6968 -fisolate-erroneous-paths-dereference
6969 Detect paths that trigger erroneous or undefined behavior due to
6970 dereferencing a null pointer. Isolate those paths from the main
6971 control flow and turn the statement with erroneous or undefined
6972 behavior into a trap. This flag is enabled by default at -O2 and
6973 higher and depends on -fdelete-null-pointer-checks also being
6974 enabled.
6975
6976 -fisolate-erroneous-paths-attribute
6977 Detect paths that trigger erroneous or undefined behavior due to a
6978 null value being used in a way forbidden by a "returns_nonnull" or
6979 "nonnull" attribute. Isolate those paths from the main control
6980 flow and turn the statement with erroneous or undefined behavior
6981 into a trap. This is not currently enabled, but may be enabled by
6982 -O2 in the future.
6983
6984 -ftree-sink
6985 Perform forward store motion on trees. This flag is enabled by
6986 default at -O and higher.
6987
6988 -ftree-bit-ccp
6989 Perform sparse conditional bit constant propagation on trees and
6990 propagate pointer alignment information. This pass only operates
6991 on local scalar variables and is enabled by default at -O and
6992 higher. It requires that -ftree-ccp is enabled.
6993
6994 -ftree-ccp
6995 Perform sparse conditional constant propagation (CCP) on trees.
6996 This pass only operates on local scalar variables and is enabled by
6997 default at -O and higher.
6998
6999 -fssa-backprop
7000 Propagate information about uses of a value up the definition chain
7001 in order to simplify the definitions. For example, this pass
7002 strips sign operations if the sign of a value never matters. The
7003 flag is enabled by default at -O and higher.
7004
7005 -fssa-phiopt
7006 Perform pattern matching on SSA PHI nodes to optimize conditional
7007 code. This pass is enabled by default at -O and higher.
7008
7009 -ftree-switch-conversion
7010 Perform conversion of simple initializations in a switch to
7011 initializations from a scalar array. This flag is enabled by
7012 default at -O2 and higher.
7013
7014 -ftree-tail-merge
7015 Look for identical code sequences. When found, replace one with a
7016 jump to the other. This optimization is known as tail merging or
7017 cross jumping. This flag is enabled by default at -O2 and higher.
7018 The compilation time in this pass can be limited using max-tail-
7019 merge-comparisons parameter and max-tail-merge-iterations
7020 parameter.
7021
7022 -ftree-dce
7023 Perform dead code elimination (DCE) on trees. This flag is enabled
7024 by default at -O and higher.
7025
7026 -ftree-builtin-call-dce
7027 Perform conditional dead code elimination (DCE) for calls to built-
7028 in functions that may set "errno" but are otherwise free of side
7029 effects. This flag is enabled by default at -O2 and higher if -Os
7030 is not also specified.
7031
7032 -ftree-dominator-opts
7033 Perform a variety of simple scalar cleanups (constant/copy
7034 propagation, redundancy elimination, range propagation and
7035 expression simplification) based on a dominator tree traversal.
7036 This also performs jump threading (to reduce jumps to jumps). This
7037 flag is enabled by default at -O and higher.
7038
7039 -ftree-dse
7040 Perform dead store elimination (DSE) on trees. A dead store is a
7041 store into a memory location that is later overwritten by another
7042 store without any intervening loads. In this case the earlier
7043 store can be deleted. This flag is enabled by default at -O and
7044 higher.
7045
7046 -ftree-ch
7047 Perform loop header copying on trees. This is beneficial since it
7048 increases effectiveness of code motion optimizations. It also
7049 saves one jump. This flag is enabled by default at -O and higher.
7050 It is not enabled for -Os, since it usually increases code size.
7051
7052 -ftree-loop-optimize
7053 Perform loop optimizations on trees. This flag is enabled by
7054 default at -O and higher.
7055
7056 -ftree-loop-linear
7057 -floop-strip-mine
7058 -floop-block
7059 Perform loop nest optimizations. Same as -floop-nest-optimize. To
7060 use this code transformation, GCC has to be configured with
7061 --with-isl to enable the Graphite loop transformation
7062 infrastructure.
7063
7064 -fgraphite-identity
7065 Enable the identity transformation for graphite. For every SCoP we
7066 generate the polyhedral representation and transform it back to
7067 gimple. Using -fgraphite-identity we can check the costs or
7068 benefits of the GIMPLE -> GRAPHITE -> GIMPLE transformation. Some
7069 minimal optimizations are also performed by the code generator isl,
7070 like index splitting and dead code elimination in loops.
7071
7072 -floop-nest-optimize
7073 Enable the isl based loop nest optimizer. This is a generic loop
7074 nest optimizer based on the Pluto optimization algorithms. It
7075 calculates a loop structure optimized for data-locality and
7076 parallelism. This option is experimental.
7077
7078 -floop-parallelize-all
7079 Use the Graphite data dependence analysis to identify loops that
7080 can be parallelized. Parallelize all the loops that can be
7081 analyzed to not contain loop carried dependences without checking
7082 that it is profitable to parallelize the loops.
7083
7084 -ftree-coalesce-vars
7085 While transforming the program out of the SSA representation,
7086 attempt to reduce copying by coalescing versions of different user-
7087 defined variables, instead of just compiler temporaries. This may
7088 severely limit the ability to debug an optimized program compiled
7089 with -fno-var-tracking-assignments. In the negated form, this flag
7090 prevents SSA coalescing of user variables. This option is enabled
7091 by default if optimization is enabled, and it does very little
7092 otherwise.
7093
7094 -ftree-loop-if-convert
7095 Attempt to transform conditional jumps in the innermost loops to
7096 branch-less equivalents. The intent is to remove control-flow from
7097 the innermost loops in order to improve the ability of the
7098 vectorization pass to handle these loops. This is enabled by
7099 default if vectorization is enabled.
7100
7101 -ftree-loop-distribution
7102 Perform loop distribution. This flag can improve cache performance
7103 on big loop bodies and allow further loop optimizations, like
7104 parallelization or vectorization, to take place. For example, the
7105 loop
7106
7107 DO I = 1, N
7108 A(I) = B(I) + C
7109 D(I) = E(I) * F
7110 ENDDO
7111
7112 is transformed to
7113
7114 DO I = 1, N
7115 A(I) = B(I) + C
7116 ENDDO
7117 DO I = 1, N
7118 D(I) = E(I) * F
7119 ENDDO
7120
7121 -ftree-loop-distribute-patterns
7122 Perform loop distribution of patterns that can be code generated
7123 with calls to a library. This flag is enabled by default at -O3.
7124
7125 This pass distributes the initialization loops and generates a call
7126 to memset zero. For example, the loop
7127
7128 DO I = 1, N
7129 A(I) = 0
7130 B(I) = A(I) + I
7131 ENDDO
7132
7133 is transformed to
7134
7135 DO I = 1, N
7136 A(I) = 0
7137 ENDDO
7138 DO I = 1, N
7139 B(I) = A(I) + I
7140 ENDDO
7141
7142 and the initialization loop is transformed into a call to memset
7143 zero.
7144
7145 -floop-interchange
7146 Perform loop interchange outside of graphite. This flag can
7147 improve cache performance on loop nest and allow further loop
7148 optimizations, like vectorization, to take place. For example, the
7149 loop
7150
7151 for (int i = 0; i < N; i++)
7152 for (int j = 0; j < N; j++)
7153 for (int k = 0; k < N; k++)
7154 c[i][j] = c[i][j] + a[i][k]*b[k][j];
7155
7156 is transformed to
7157
7158 for (int i = 0; i < N; i++)
7159 for (int k = 0; k < N; k++)
7160 for (int j = 0; j < N; j++)
7161 c[i][j] = c[i][j] + a[i][k]*b[k][j];
7162
7163 This flag is enabled by default at -O3.
7164
7165 -floop-unroll-and-jam
7166 Apply unroll and jam transformations on feasible loops. In a loop
7167 nest this unrolls the outer loop by some factor and fuses the
7168 resulting multiple inner loops. This flag is enabled by default at
7169 -O3.
7170
7171 -ftree-loop-im
7172 Perform loop invariant motion on trees. This pass moves only
7173 invariants that are hard to handle at RTL level (function calls,
7174 operations that expand to nontrivial sequences of insns). With
7175 -funswitch-loops it also moves operands of conditions that are
7176 invariant out of the loop, so that we can use just trivial
7177 invariantness analysis in loop unswitching. The pass also includes
7178 store motion.
7179
7180 -ftree-loop-ivcanon
7181 Create a canonical counter for number of iterations in loops for
7182 which determining number of iterations requires complicated
7183 analysis. Later optimizations then may determine the number
7184 easily. Useful especially in connection with unrolling.
7185
7186 -fivopts
7187 Perform induction variable optimizations (strength reduction,
7188 induction variable merging and induction variable elimination) on
7189 trees.
7190
7191 -ftree-parallelize-loops=n
7192 Parallelize loops, i.e., split their iteration space to run in n
7193 threads. This is only possible for loops whose iterations are
7194 independent and can be arbitrarily reordered. The optimization is
7195 only profitable on multiprocessor machines, for loops that are CPU-
7196 intensive, rather than constrained e.g. by memory bandwidth. This
7197 option implies -pthread, and thus is only supported on targets that
7198 have support for -pthread.
7199
7200 -ftree-pta
7201 Perform function-local points-to analysis on trees. This flag is
7202 enabled by default at -O and higher.
7203
7204 -ftree-sra
7205 Perform scalar replacement of aggregates. This pass replaces
7206 structure references with scalars to prevent committing structures
7207 to memory too early. This flag is enabled by default at -O and
7208 higher.
7209
7210 -fstore-merging
7211 Perform merging of narrow stores to consecutive memory addresses.
7212 This pass merges contiguous stores of immediate values narrower
7213 than a word into fewer wider stores to reduce the number of
7214 instructions. This is enabled by default at -O2 and higher as well
7215 as -Os.
7216
7217 -ftree-ter
7218 Perform temporary expression replacement during the SSA->normal
7219 phase. Single use/single def temporaries are replaced at their use
7220 location with their defining expression. This results in non-
7221 GIMPLE code, but gives the expanders much more complex trees to
7222 work on resulting in better RTL generation. This is enabled by
7223 default at -O and higher.
7224
7225 -ftree-slsr
7226 Perform straight-line strength reduction on trees. This recognizes
7227 related expressions involving multiplications and replaces them by
7228 less expensive calculations when possible. This is enabled by
7229 default at -O and higher.
7230
7231 -ftree-vectorize
7232 Perform vectorization on trees. This flag enables
7233 -ftree-loop-vectorize and -ftree-slp-vectorize if not explicitly
7234 specified.
7235
7236 -ftree-loop-vectorize
7237 Perform loop vectorization on trees. This flag is enabled by
7238 default at -O3 and when -ftree-vectorize is enabled.
7239
7240 -ftree-slp-vectorize
7241 Perform basic block vectorization on trees. This flag is enabled by
7242 default at -O3 and when -ftree-vectorize is enabled.
7243
7244 -fvect-cost-model=model
7245 Alter the cost model used for vectorization. The model argument
7246 should be one of unlimited, dynamic or cheap. With the unlimited
7247 model the vectorized code-path is assumed to be profitable while
7248 with the dynamic model a runtime check guards the vectorized code-
7249 path to enable it only for iteration counts that will likely
7250 execute faster than when executing the original scalar loop. The
7251 cheap model disables vectorization of loops where doing so would be
7252 cost prohibitive for example due to required runtime checks for
7253 data dependence or alignment but otherwise is equal to the dynamic
7254 model. The default cost model depends on other optimization flags
7255 and is either dynamic or cheap.
7256
7257 -fsimd-cost-model=model
7258 Alter the cost model used for vectorization of loops marked with
7259 the OpenMP simd directive. The model argument should be one of
7260 unlimited, dynamic, cheap. All values of model have the same
7261 meaning as described in -fvect-cost-model and by default a cost
7262 model defined with -fvect-cost-model is used.
7263
7264 -ftree-vrp
7265 Perform Value Range Propagation on trees. This is similar to the
7266 constant propagation pass, but instead of values, ranges of values
7267 are propagated. This allows the optimizers to remove unnecessary
7268 range checks like array bound checks and null pointer checks. This
7269 is enabled by default at -O2 and higher. Null pointer check
7270 elimination is only done if -fdelete-null-pointer-checks is
7271 enabled.
7272
7273 -fsplit-paths
7274 Split paths leading to loop backedges. This can improve dead code
7275 elimination and common subexpression elimination. This is enabled
7276 by default at -O2 and above.
7277
7278 -fsplit-ivs-in-unroller
7279 Enables expression of values of induction variables in later
7280 iterations of the unrolled loop using the value in the first
7281 iteration. This breaks long dependency chains, thus improving
7282 efficiency of the scheduling passes.
7283
7284 A combination of -fweb and CSE is often sufficient to obtain the
7285 same effect. However, that is not reliable in cases where the loop
7286 body is more complicated than a single basic block. It also does
7287 not work at all on some architectures due to restrictions in the
7288 CSE pass.
7289
7290 This optimization is enabled by default.
7291
7292 -fvariable-expansion-in-unroller
7293 With this option, the compiler creates multiple copies of some
7294 local variables when unrolling a loop, which can result in superior
7295 code.
7296
7297 -fpartial-inlining
7298 Inline parts of functions. This option has any effect only when
7299 inlining itself is turned on by the -finline-functions or
7300 -finline-small-functions options.
7301
7302 Enabled at levels -O2, -O3, -Os.
7303
7304 -fpredictive-commoning
7305 Perform predictive commoning optimization, i.e., reusing
7306 computations (especially memory loads and stores) performed in
7307 previous iterations of loops.
7308
7309 This option is enabled at level -O3.
7310
7311 -fprefetch-loop-arrays
7312 If supported by the target machine, generate instructions to
7313 prefetch memory to improve the performance of loops that access
7314 large arrays.
7315
7316 This option may generate better or worse code; results are highly
7317 dependent on the structure of loops within the source code.
7318
7319 Disabled at level -Os.
7320
7321 -fno-printf-return-value
7322 Do not substitute constants for known return value of formatted
7323 output functions such as "sprintf", "snprintf", "vsprintf", and
7324 "vsnprintf" (but not "printf" of "fprintf"). This transformation
7325 allows GCC to optimize or even eliminate branches based on the
7326 known return value of these functions called with arguments that
7327 are either constant, or whose values are known to be in a range
7328 that makes determining the exact return value possible. For
7329 example, when -fprintf-return-value is in effect, both the branch
7330 and the body of the "if" statement (but not the call to "snprint")
7331 can be optimized away when "i" is a 32-bit or smaller integer
7332 because the return value is guaranteed to be at most 8.
7333
7334 char buf[9];
7335 if (snprintf (buf, "%08x", i) >= sizeof buf)
7336 ...
7337
7338 The -fprintf-return-value option relies on other optimizations and
7339 yields best results with -O2 and above. It works in tandem with
7340 the -Wformat-overflow and -Wformat-truncation options. The
7341 -fprintf-return-value option is enabled by default.
7342
7343 -fno-peephole
7344 -fno-peephole2
7345 Disable any machine-specific peephole optimizations. The
7346 difference between -fno-peephole and -fno-peephole2 is in how they
7347 are implemented in the compiler; some targets use one, some use the
7348 other, a few use both.
7349
7350 -fpeephole is enabled by default. -fpeephole2 enabled at levels
7351 -O2, -O3, -Os.
7352
7353 -fno-guess-branch-probability
7354 Do not guess branch probabilities using heuristics.
7355
7356 GCC uses heuristics to guess branch probabilities if they are not
7357 provided by profiling feedback (-fprofile-arcs). These heuristics
7358 are based on the control flow graph. If some branch probabilities
7359 are specified by "__builtin_expect", then the heuristics are used
7360 to guess branch probabilities for the rest of the control flow
7361 graph, taking the "__builtin_expect" info into account. The
7362 interactions between the heuristics and "__builtin_expect" can be
7363 complex, and in some cases, it may be useful to disable the
7364 heuristics so that the effects of "__builtin_expect" are easier to
7365 understand.
7366
7367 The default is -fguess-branch-probability at levels -O, -O2, -O3,
7368 -Os.
7369
7370 -freorder-blocks
7371 Reorder basic blocks in the compiled function in order to reduce
7372 number of taken branches and improve code locality.
7373
7374 Enabled at levels -O, -O2, -O3, -Os.
7375
7376 -freorder-blocks-algorithm=algorithm
7377 Use the specified algorithm for basic block reordering. The
7378 algorithm argument can be simple, which does not increase code size
7379 (except sometimes due to secondary effects like alignment), or stc,
7380 the "software trace cache" algorithm, which tries to put all often
7381 executed code together, minimizing the number of branches executed
7382 by making extra copies of code.
7383
7384 The default is simple at levels -O, -Os, and stc at levels -O2,
7385 -O3.
7386
7387 -freorder-blocks-and-partition
7388 In addition to reordering basic blocks in the compiled function, in
7389 order to reduce number of taken branches, partitions hot and cold
7390 basic blocks into separate sections of the assembly and .o files,
7391 to improve paging and cache locality performance.
7392
7393 This optimization is automatically turned off in the presence of
7394 exception handling or unwind tables (on targets using
7395 setjump/longjump or target specific scheme), for linkonce sections,
7396 for functions with a user-defined section attribute and on any
7397 architecture that does not support named sections. When
7398 -fsplit-stack is used this option is not enabled by default (to
7399 avoid linker errors), but may be enabled explicitly (if using a
7400 working linker).
7401
7402 Enabled for x86 at levels -O2, -O3, -Os.
7403
7404 -freorder-functions
7405 Reorder functions in the object file in order to improve code
7406 locality. This is implemented by using special subsections
7407 ".text.hot" for most frequently executed functions and
7408 ".text.unlikely" for unlikely executed functions. Reordering is
7409 done by the linker so object file format must support named
7410 sections and linker must place them in a reasonable way.
7411
7412 Also profile feedback must be available to make this option
7413 effective. See -fprofile-arcs for details.
7414
7415 Enabled at levels -O2, -O3, -Os.
7416
7417 -fstrict-aliasing
7418 Allow the compiler to assume the strictest aliasing rules
7419 applicable to the language being compiled. For C (and C++), this
7420 activates optimizations based on the type of expressions. In
7421 particular, an object of one type is assumed never to reside at the
7422 same address as an object of a different type, unless the types are
7423 almost the same. For example, an "unsigned int" can alias an
7424 "int", but not a "void*" or a "double". A character type may alias
7425 any other type.
7426
7427 Pay special attention to code like this:
7428
7429 union a_union {
7430 int i;
7431 double d;
7432 };
7433
7434 int f() {
7435 union a_union t;
7436 t.d = 3.0;
7437 return t.i;
7438 }
7439
7440 The practice of reading from a different union member than the one
7441 most recently written to (called "type-punning") is common. Even
7442 with -fstrict-aliasing, type-punning is allowed, provided the
7443 memory is accessed through the union type. So, the code above
7444 works as expected. However, this code might not:
7445
7446 int f() {
7447 union a_union t;
7448 int* ip;
7449 t.d = 3.0;
7450 ip = &t.i;
7451 return *ip;
7452 }
7453
7454 Similarly, access by taking the address, casting the resulting
7455 pointer and dereferencing the result has undefined behavior, even
7456 if the cast uses a union type, e.g.:
7457
7458 int f() {
7459 double d = 3.0;
7460 return ((union a_union *) &d)->i;
7461 }
7462
7463 The -fstrict-aliasing option is enabled at levels -O2, -O3, -Os.
7464
7465 -falign-functions
7466 -falign-functions=n
7467 Align the start of functions to the next power-of-two greater than
7468 n, skipping up to n bytes. For instance, -falign-functions=32
7469 aligns functions to the next 32-byte boundary, but
7470 -falign-functions=24 aligns to the next 32-byte boundary only if
7471 this can be done by skipping 23 bytes or less.
7472
7473 -fno-align-functions and -falign-functions=1 are equivalent and
7474 mean that functions are not aligned.
7475
7476 Some assemblers only support this flag when n is a power of two; in
7477 that case, it is rounded up.
7478
7479 If n is not specified or is zero, use a machine-dependent default.
7480 The maximum allowed n option value is 65536.
7481
7482 Enabled at levels -O2, -O3.
7483
7484 -flimit-function-alignment
7485 If this option is enabled, the compiler tries to avoid
7486 unnecessarily overaligning functions. It attempts to instruct the
7487 assembler to align by the amount specified by -falign-functions,
7488 but not to skip more bytes than the size of the function.
7489
7490 -falign-labels
7491 -falign-labels=n
7492 Align all branch targets to a power-of-two boundary, skipping up to
7493 n bytes like -falign-functions. This option can easily make code
7494 slower, because it must insert dummy operations for when the branch
7495 target is reached in the usual flow of the code.
7496
7497 -fno-align-labels and -falign-labels=1 are equivalent and mean that
7498 labels are not aligned.
7499
7500 If -falign-loops or -falign-jumps are applicable and are greater
7501 than this value, then their values are used instead.
7502
7503 If n is not specified or is zero, use a machine-dependent default
7504 which is very likely to be 1, meaning no alignment. The maximum
7505 allowed n option value is 65536.
7506
7507 Enabled at levels -O2, -O3.
7508
7509 -falign-loops
7510 -falign-loops=n
7511 Align loops to a power-of-two boundary, skipping up to n bytes like
7512 -falign-functions. If the loops are executed many times, this
7513 makes up for any execution of the dummy operations.
7514
7515 -fno-align-loops and -falign-loops=1 are equivalent and mean that
7516 loops are not aligned. The maximum allowed n option value is
7517 65536.
7518
7519 If n is not specified or is zero, use a machine-dependent default.
7520
7521 Enabled at levels -O2, -O3.
7522
7523 -falign-jumps
7524 -falign-jumps=n
7525 Align branch targets to a power-of-two boundary, for branch targets
7526 where the targets can only be reached by jumping, skipping up to n
7527 bytes like -falign-functions. In this case, no dummy operations
7528 need be executed.
7529
7530 -fno-align-jumps and -falign-jumps=1 are equivalent and mean that
7531 loops are not aligned.
7532
7533 If n is not specified or is zero, use a machine-dependent default.
7534 The maximum allowed n option value is 65536.
7535
7536 Enabled at levels -O2, -O3.
7537
7538 -funit-at-a-time
7539 This option is left for compatibility reasons. -funit-at-a-time has
7540 no effect, while -fno-unit-at-a-time implies -fno-toplevel-reorder
7541 and -fno-section-anchors.
7542
7543 Enabled by default.
7544
7545 -fno-toplevel-reorder
7546 Do not reorder top-level functions, variables, and "asm"
7547 statements. Output them in the same order that they appear in the
7548 input file. When this option is used, unreferenced static
7549 variables are not removed. This option is intended to support
7550 existing code that relies on a particular ordering. For new code,
7551 it is better to use attributes when possible.
7552
7553 Enabled at level -O0. When disabled explicitly, it also implies
7554 -fno-section-anchors, which is otherwise enabled at -O0 on some
7555 targets.
7556
7557 -fweb
7558 Constructs webs as commonly used for register allocation purposes
7559 and assign each web individual pseudo register. This allows the
7560 register allocation pass to operate on pseudos directly, but also
7561 strengthens several other optimization passes, such as CSE, loop
7562 optimizer and trivial dead code remover. It can, however, make
7563 debugging impossible, since variables no longer stay in a "home
7564 register".
7565
7566 Enabled by default with -funroll-loops.
7567
7568 -fwhole-program
7569 Assume that the current compilation unit represents the whole
7570 program being compiled. All public functions and variables with
7571 the exception of "main" and those merged by attribute
7572 "externally_visible" become static functions and in effect are
7573 optimized more aggressively by interprocedural optimizers.
7574
7575 This option should not be used in combination with -flto. Instead
7576 relying on a linker plugin should provide safer and more precise
7577 information.
7578
7579 -flto[=n]
7580 This option runs the standard link-time optimizer. When invoked
7581 with source code, it generates GIMPLE (one of GCC's internal
7582 representations) and writes it to special ELF sections in the
7583 object file. When the object files are linked together, all the
7584 function bodies are read from these ELF sections and instantiated
7585 as if they had been part of the same translation unit.
7586
7587 To use the link-time optimizer, -flto and optimization options
7588 should be specified at compile time and during the final link. It
7589 is recommended that you compile all the files participating in the
7590 same link with the same options and also specify those options at
7591 link time. For example:
7592
7593 gcc -c -O2 -flto foo.c
7594 gcc -c -O2 -flto bar.c
7595 gcc -o myprog -flto -O2 foo.o bar.o
7596
7597 The first two invocations to GCC save a bytecode representation of
7598 GIMPLE into special ELF sections inside foo.o and bar.o. The final
7599 invocation reads the GIMPLE bytecode from foo.o and bar.o, merges
7600 the two files into a single internal image, and compiles the result
7601 as usual. Since both foo.o and bar.o are merged into a single
7602 image, this causes all the interprocedural analyses and
7603 optimizations in GCC to work across the two files as if they were a
7604 single one. This means, for example, that the inliner is able to
7605 inline functions in bar.o into functions in foo.o and vice-versa.
7606
7607 Another (simpler) way to enable link-time optimization is:
7608
7609 gcc -o myprog -flto -O2 foo.c bar.c
7610
7611 The above generates bytecode for foo.c and bar.c, merges them
7612 together into a single GIMPLE representation and optimizes them as
7613 usual to produce myprog.
7614
7615 The only important thing to keep in mind is that to enable link-
7616 time optimizations you need to use the GCC driver to perform the
7617 link step. GCC then automatically performs link-time optimization
7618 if any of the objects involved were compiled with the -flto
7619 command-line option. You generally should specify the optimization
7620 options to be used for link-time optimization though GCC tries to
7621 be clever at guessing an optimization level to use from the options
7622 used at compile time if you fail to specify one at link time. You
7623 can always override the automatic decision to do link-time
7624 optimization by passing -fno-lto to the link command.
7625
7626 To make whole program optimization effective, it is necessary to
7627 make certain whole program assumptions. The compiler needs to know
7628 what functions and variables can be accessed by libraries and
7629 runtime outside of the link-time optimized unit. When supported by
7630 the linker, the linker plugin (see -fuse-linker-plugin) passes
7631 information to the compiler about used and externally visible
7632 symbols. When the linker plugin is not available, -fwhole-program
7633 should be used to allow the compiler to make these assumptions,
7634 which leads to more aggressive optimization decisions.
7635
7636 When -fuse-linker-plugin is not enabled, when a file is compiled
7637 with -flto, the generated object file is larger than a regular
7638 object file because it contains GIMPLE bytecodes and the usual
7639 final code (see -ffat-lto-objects. This means that object files
7640 with LTO information can be linked as normal object files; if
7641 -fno-lto is passed to the linker, no interprocedural optimizations
7642 are applied. Note that when -fno-fat-lto-objects is enabled the
7643 compile stage is faster but you cannot perform a regular, non-LTO
7644 link on them.
7645
7646 Additionally, the optimization flags used to compile individual
7647 files are not necessarily related to those used at link time. For
7648 instance,
7649
7650 gcc -c -O0 -ffat-lto-objects -flto foo.c
7651 gcc -c -O0 -ffat-lto-objects -flto bar.c
7652 gcc -o myprog -O3 foo.o bar.o
7653
7654 This produces individual object files with unoptimized assembler
7655 code, but the resulting binary myprog is optimized at -O3. If,
7656 instead, the final binary is generated with -fno-lto, then myprog
7657 is not optimized.
7658
7659 When producing the final binary, GCC only applies link-time
7660 optimizations to those files that contain bytecode. Therefore, you
7661 can mix and match object files and libraries with GIMPLE bytecodes
7662 and final object code. GCC automatically selects which files to
7663 optimize in LTO mode and which files to link without further
7664 processing.
7665
7666 There are some code generation flags preserved by GCC when
7667 generating bytecodes, as they need to be used during the final link
7668 stage. Generally options specified at link time override those
7669 specified at compile time.
7670
7671 If you do not specify an optimization level option -O at link time,
7672 then GCC uses the highest optimization level used when compiling
7673 the object files.
7674
7675 Currently, the following options and their settings are taken from
7676 the first object file that explicitly specifies them: -fPIC, -fpic,
7677 -fpie, -fcommon, -fexceptions, -fnon-call-exceptions, -fgnu-tm and
7678 all the -m target flags.
7679
7680 Certain ABI-changing flags are required to match in all compilation
7681 units, and trying to override this at link time with a conflicting
7682 value is ignored. This includes options such as
7683 -freg-struct-return and -fpcc-struct-return.
7684
7685 Other options such as -ffp-contract, -fno-strict-overflow, -fwrapv,
7686 -fno-trapv or -fno-strict-aliasing are passed through to the link
7687 stage and merged conservatively for conflicting translation units.
7688 Specifically -fno-strict-overflow, -fwrapv and -fno-trapv take
7689 precedence; and for example -ffp-contract=off takes precedence over
7690 -ffp-contract=fast. You can override them at link time.
7691
7692 If LTO encounters objects with C linkage declared with incompatible
7693 types in separate translation units to be linked together
7694 (undefined behavior according to ISO C99 6.2.7), a non-fatal
7695 diagnostic may be issued. The behavior is still undefined at run
7696 time. Similar diagnostics may be raised for other languages.
7697
7698 Another feature of LTO is that it is possible to apply
7699 interprocedural optimizations on files written in different
7700 languages:
7701
7702 gcc -c -flto foo.c
7703 g++ -c -flto bar.cc
7704 gfortran -c -flto baz.f90
7705 g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran
7706
7707 Notice that the final link is done with g++ to get the C++ runtime
7708 libraries and -lgfortran is added to get the Fortran runtime
7709 libraries. In general, when mixing languages in LTO mode, you
7710 should use the same link command options as when mixing languages
7711 in a regular (non-LTO) compilation.
7712
7713 If object files containing GIMPLE bytecode are stored in a library
7714 archive, say libfoo.a, it is possible to extract and use them in an
7715 LTO link if you are using a linker with plugin support. To create
7716 static libraries suitable for LTO, use gcc-ar and gcc-ranlib
7717 instead of ar and ranlib; to show the symbols of object files with
7718 GIMPLE bytecode, use gcc-nm. Those commands require that ar,
7719 ranlib and nm have been compiled with plugin support. At link
7720 time, use the flag -fuse-linker-plugin to ensure that the library
7721 participates in the LTO optimization process:
7722
7723 gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo
7724
7725 With the linker plugin enabled, the linker extracts the needed
7726 GIMPLE files from libfoo.a and passes them on to the running GCC to
7727 make them part of the aggregated GIMPLE image to be optimized.
7728
7729 If you are not using a linker with plugin support and/or do not
7730 enable the linker plugin, then the objects inside libfoo.a are
7731 extracted and linked as usual, but they do not participate in the
7732 LTO optimization process. In order to make a static library
7733 suitable for both LTO optimization and usual linkage, compile its
7734 object files with -flto -ffat-lto-objects.
7735
7736 Link-time optimizations do not require the presence of the whole
7737 program to operate. If the program does not require any symbols to
7738 be exported, it is possible to combine -flto and -fwhole-program to
7739 allow the interprocedural optimizers to use more aggressive
7740 assumptions which may lead to improved optimization opportunities.
7741 Use of -fwhole-program is not needed when linker plugin is active
7742 (see -fuse-linker-plugin).
7743
7744 The current implementation of LTO makes no attempt to generate
7745 bytecode that is portable between different types of hosts. The
7746 bytecode files are versioned and there is a strict version check,
7747 so bytecode files generated in one version of GCC do not work with
7748 an older or newer version of GCC.
7749
7750 Link-time optimization does not work well with generation of
7751 debugging information on systems other than those using a
7752 combination of ELF and DWARF.
7753
7754 If you specify the optional n, the optimization and code generation
7755 done at link time is executed in parallel using n parallel jobs by
7756 utilizing an installed make program. The environment variable MAKE
7757 may be used to override the program used. The default value for n
7758 is 1.
7759
7760 You can also specify -flto=jobserver to use GNU make's job server
7761 mode to determine the number of parallel jobs. This is useful when
7762 the Makefile calling GCC is already executing in parallel. You
7763 must prepend a + to the command recipe in the parent Makefile for
7764 this to work. This option likely only works if MAKE is GNU make.
7765
7766 -flto-partition=alg
7767 Specify the partitioning algorithm used by the link-time optimizer.
7768 The value is either 1to1 to specify a partitioning mirroring the
7769 original source files or balanced to specify partitioning into
7770 equally sized chunks (whenever possible) or max to create new
7771 partition for every symbol where possible. Specifying none as an
7772 algorithm disables partitioning and streaming completely. The
7773 default value is balanced. While 1to1 can be used as an workaround
7774 for various code ordering issues, the max partitioning is intended
7775 for internal testing only. The value one specifies that exactly
7776 one partition should be used while the value none bypasses
7777 partitioning and executes the link-time optimization step directly
7778 from the WPA phase.
7779
7780 -flto-odr-type-merging
7781 Enable streaming of mangled types names of C++ types and their
7782 unification at link time. This increases size of LTO object files,
7783 but enables diagnostics about One Definition Rule violations.
7784
7785 -flto-compression-level=n
7786 This option specifies the level of compression used for
7787 intermediate language written to LTO object files, and is only
7788 meaningful in conjunction with LTO mode (-flto). Valid values are
7789 0 (no compression) to 9 (maximum compression). Values outside this
7790 range are clamped to either 0 or 9. If the option is not given, a
7791 default balanced compression setting is used.
7792
7793 -fuse-linker-plugin
7794 Enables the use of a linker plugin during link-time optimization.
7795 This option relies on plugin support in the linker, which is
7796 available in gold or in GNU ld 2.21 or newer.
7797
7798 This option enables the extraction of object files with GIMPLE
7799 bytecode out of library archives. This improves the quality of
7800 optimization by exposing more code to the link-time optimizer.
7801 This information specifies what symbols can be accessed externally
7802 (by non-LTO object or during dynamic linking). Resulting code
7803 quality improvements on binaries (and shared libraries that use
7804 hidden visibility) are similar to -fwhole-program. See -flto for a
7805 description of the effect of this flag and how to use it.
7806
7807 This option is enabled by default when LTO support in GCC is
7808 enabled and GCC was configured for use with a linker supporting
7809 plugins (GNU ld 2.21 or newer or gold).
7810
7811 -ffat-lto-objects
7812 Fat LTO objects are object files that contain both the intermediate
7813 language and the object code. This makes them usable for both LTO
7814 linking and normal linking. This option is effective only when
7815 compiling with -flto and is ignored at link time.
7816
7817 -fno-fat-lto-objects improves compilation time over plain LTO, but
7818 requires the complete toolchain to be aware of LTO. It requires a
7819 linker with linker plugin support for basic functionality.
7820 Additionally, nm, ar and ranlib need to support linker plugins to
7821 allow a full-featured build environment (capable of building static
7822 libraries etc). GCC provides the gcc-ar, gcc-nm, gcc-ranlib
7823 wrappers to pass the right options to these tools. With non fat LTO
7824 makefiles need to be modified to use them.
7825
7826 Note that modern binutils provide plugin auto-load mechanism.
7827 Installing the linker plugin into $libdir/bfd-plugins has the same
7828 effect as usage of the command wrappers (gcc-ar, gcc-nm and gcc-
7829 ranlib).
7830
7831 The default is -fno-fat-lto-objects on targets with linker plugin
7832 support.
7833
7834 -fcompare-elim
7835 After register allocation and post-register allocation instruction
7836 splitting, identify arithmetic instructions that compute processor
7837 flags similar to a comparison operation based on that arithmetic.
7838 If possible, eliminate the explicit comparison operation.
7839
7840 This pass only applies to certain targets that cannot explicitly
7841 represent the comparison operation before register allocation is
7842 complete.
7843
7844 Enabled at levels -O, -O2, -O3, -Os.
7845
7846 -fcprop-registers
7847 After register allocation and post-register allocation instruction
7848 splitting, perform a copy-propagation pass to try to reduce
7849 scheduling dependencies and occasionally eliminate the copy.
7850
7851 Enabled at levels -O, -O2, -O3, -Os.
7852
7853 -fprofile-correction
7854 Profiles collected using an instrumented binary for multi-threaded
7855 programs may be inconsistent due to missed counter updates. When
7856 this option is specified, GCC uses heuristics to correct or smooth
7857 out such inconsistencies. By default, GCC emits an error message
7858 when an inconsistent profile is detected.
7859
7860 -fprofile-use
7861 -fprofile-use=path
7862 Enable profile feedback-directed optimizations, and the following
7863 optimizations which are generally profitable only with profile
7864 feedback available: -fbranch-probabilities, -fvpt, -funroll-loops,
7865 -fpeel-loops, -ftracer, -ftree-vectorize, and ftree-loop-
7866 distribute-patterns.
7867
7868 Before you can use this option, you must first generate profiling
7869 information.
7870
7871 By default, GCC emits an error message if the feedback profiles do
7872 not match the source code. This error can be turned into a warning
7873 by using -Wcoverage-mismatch. Note this may result in poorly
7874 optimized code.
7875
7876 If path is specified, GCC looks at the path to find the profile
7877 feedback data files. See -fprofile-dir.
7878
7879 -fauto-profile
7880 -fauto-profile=path
7881 Enable sampling-based feedback-directed optimizations, and the
7882 following optimizations which are generally profitable only with
7883 profile feedback available: -fbranch-probabilities, -fvpt,
7884 -funroll-loops, -fpeel-loops, -ftracer, -ftree-vectorize,
7885 -finline-functions, -fipa-cp, -fipa-cp-clone,
7886 -fpredictive-commoning, -funswitch-loops, -fgcse-after-reload, and
7887 -ftree-loop-distribute-patterns.
7888
7889 path is the name of a file containing AutoFDO profile information.
7890 If omitted, it defaults to fbdata.afdo in the current directory.
7891
7892 Producing an AutoFDO profile data file requires running your
7893 program with the perf utility on a supported GNU/Linux target
7894 system. For more information, see <https://perf.wiki.kernel.org/>.
7895
7896 E.g.
7897
7898 perf record -e br_inst_retired:near_taken -b -o perf.data \
7899 -- your_program
7900
7901 Then use the create_gcov tool to convert the raw profile data to a
7902 format that can be used by GCC. You must also supply the
7903 unstripped binary for your program to this tool. See
7904 <https://github.com/google/autofdo>.
7905
7906 E.g.
7907
7908 create_gcov --binary=your_program.unstripped --profile=perf.data \
7909 --gcov=profile.afdo
7910
7911 The following options control compiler behavior regarding floating-
7912 point arithmetic. These options trade off between speed and
7913 correctness. All must be specifically enabled.
7914
7915 -ffloat-store
7916 Do not store floating-point variables in registers, and inhibit
7917 other options that might change whether a floating-point value is
7918 taken from a register or memory.
7919
7920 This option prevents undesirable excess precision on machines such
7921 as the 68000 where the floating registers (of the 68881) keep more
7922 precision than a "double" is supposed to have. Similarly for the
7923 x86 architecture. For most programs, the excess precision does
7924 only good, but a few programs rely on the precise definition of
7925 IEEE floating point. Use -ffloat-store for such programs, after
7926 modifying them to store all pertinent intermediate computations
7927 into variables.
7928
7929 -fexcess-precision=style
7930 This option allows further control over excess precision on
7931 machines where floating-point operations occur in a format with
7932 more precision or range than the IEEE standard and interchange
7933 floating-point types. By default, -fexcess-precision=fast is in
7934 effect; this means that operations may be carried out in a wider
7935 precision than the types specified in the source if that would
7936 result in faster code, and it is unpredictable when rounding to the
7937 types specified in the source code takes place. When compiling C,
7938 if -fexcess-precision=standard is specified then excess precision
7939 follows the rules specified in ISO C99; in particular, both casts
7940 and assignments cause values to be rounded to their semantic types
7941 (whereas -ffloat-store only affects assignments). This option is
7942 enabled by default for C if a strict conformance option such as
7943 -std=c99 is used. -ffast-math enables -fexcess-precision=fast by
7944 default regardless of whether a strict conformance option is used.
7945
7946 -fexcess-precision=standard is not implemented for languages other
7947 than C. On the x86, it has no effect if -mfpmath=sse or
7948 -mfpmath=sse+387 is specified; in the former case, IEEE semantics
7949 apply without excess precision, and in the latter, rounding is
7950 unpredictable.
7951
7952 -ffast-math
7953 Sets the options -fno-math-errno, -funsafe-math-optimizations,
7954 -ffinite-math-only, -fno-rounding-math, -fno-signaling-nans,
7955 -fcx-limited-range and -fexcess-precision=fast.
7956
7957 This option causes the preprocessor macro "__FAST_MATH__" to be
7958 defined.
7959
7960 This option is not turned on by any -O option besides -Ofast since
7961 it can result in incorrect output for programs that depend on an
7962 exact implementation of IEEE or ISO rules/specifications for math
7963 functions. It may, however, yield faster code for programs that do
7964 not require the guarantees of these specifications.
7965
7966 -fno-math-errno
7967 Do not set "errno" after calling math functions that are executed
7968 with a single instruction, e.g., "sqrt". A program that relies on
7969 IEEE exceptions for math error handling may want to use this flag
7970 for speed while maintaining IEEE arithmetic compatibility.
7971
7972 This option is not turned on by any -O option since it can result
7973 in incorrect output for programs that depend on an exact
7974 implementation of IEEE or ISO rules/specifications for math
7975 functions. It may, however, yield faster code for programs that do
7976 not require the guarantees of these specifications.
7977
7978 The default is -fmath-errno.
7979
7980 On Darwin systems, the math library never sets "errno". There is
7981 therefore no reason for the compiler to consider the possibility
7982 that it might, and -fno-math-errno is the default.
7983
7984 -funsafe-math-optimizations
7985 Allow optimizations for floating-point arithmetic that (a) assume
7986 that arguments and results are valid and (b) may violate IEEE or
7987 ANSI standards. When used at link time, it may include libraries
7988 or startup files that change the default FPU control word or other
7989 similar optimizations.
7990
7991 This option is not turned on by any -O option since it can result
7992 in incorrect output for programs that depend on an exact
7993 implementation of IEEE or ISO rules/specifications for math
7994 functions. It may, however, yield faster code for programs that do
7995 not require the guarantees of these specifications. Enables
7996 -fno-signed-zeros, -fno-trapping-math, -fassociative-math and
7997 -freciprocal-math.
7998
7999 The default is -fno-unsafe-math-optimizations.
8000
8001 -fassociative-math
8002 Allow re-association of operands in series of floating-point
8003 operations. This violates the ISO C and C++ language standard by
8004 possibly changing computation result. NOTE: re-ordering may change
8005 the sign of zero as well as ignore NaNs and inhibit or create
8006 underflow or overflow (and thus cannot be used on code that relies
8007 on rounding behavior like "(x + 2**52) - 2**52". May also reorder
8008 floating-point comparisons and thus may not be used when ordered
8009 comparisons are required. This option requires that both
8010 -fno-signed-zeros and -fno-trapping-math be in effect. Moreover,
8011 it doesn't make much sense with -frounding-math. For Fortran the
8012 option is automatically enabled when both -fno-signed-zeros and
8013 -fno-trapping-math are in effect.
8014
8015 The default is -fno-associative-math.
8016
8017 -freciprocal-math
8018 Allow the reciprocal of a value to be used instead of dividing by
8019 the value if this enables optimizations. For example "x / y" can
8020 be replaced with "x * (1/y)", which is useful if "(1/y)" is subject
8021 to common subexpression elimination. Note that this loses
8022 precision and increases the number of flops operating on the value.
8023
8024 The default is -fno-reciprocal-math.
8025
8026 -ffinite-math-only
8027 Allow optimizations for floating-point arithmetic that assume that
8028 arguments and results are not NaNs or +-Infs.
8029
8030 This option is not turned on by any -O option since it can result
8031 in incorrect output for programs that depend on an exact
8032 implementation of IEEE or ISO rules/specifications for math
8033 functions. It may, however, yield faster code for programs that do
8034 not require the guarantees of these specifications.
8035
8036 The default is -fno-finite-math-only.
8037
8038 -fno-signed-zeros
8039 Allow optimizations for floating-point arithmetic that ignore the
8040 signedness of zero. IEEE arithmetic specifies the behavior of
8041 distinct +0.0 and -0.0 values, which then prohibits simplification
8042 of expressions such as x+0.0 or 0.0*x (even with
8043 -ffinite-math-only). This option implies that the sign of a zero
8044 result isn't significant.
8045
8046 The default is -fsigned-zeros.
8047
8048 -fno-trapping-math
8049 Compile code assuming that floating-point operations cannot
8050 generate user-visible traps. These traps include division by zero,
8051 overflow, underflow, inexact result and invalid operation. This
8052 option requires that -fno-signaling-nans be in effect. Setting
8053 this option may allow faster code if one relies on "non-stop" IEEE
8054 arithmetic, for example.
8055
8056 This option should never be turned on by any -O option since it can
8057 result in incorrect output for programs that depend on an exact
8058 implementation of IEEE or ISO rules/specifications for math
8059 functions.
8060
8061 The default is -ftrapping-math.
8062
8063 -frounding-math
8064 Disable transformations and optimizations that assume default
8065 floating-point rounding behavior. This is round-to-zero for all
8066 floating point to integer conversions, and round-to-nearest for all
8067 other arithmetic truncations. This option should be specified for
8068 programs that change the FP rounding mode dynamically, or that may
8069 be executed with a non-default rounding mode. This option disables
8070 constant folding of floating-point expressions at compile time
8071 (which may be affected by rounding mode) and arithmetic
8072 transformations that are unsafe in the presence of sign-dependent
8073 rounding modes.
8074
8075 The default is -fno-rounding-math.
8076
8077 This option is experimental and does not currently guarantee to
8078 disable all GCC optimizations that are affected by rounding mode.
8079 Future versions of GCC may provide finer control of this setting
8080 using C99's "FENV_ACCESS" pragma. This command-line option will be
8081 used to specify the default state for "FENV_ACCESS".
8082
8083 -fsignaling-nans
8084 Compile code assuming that IEEE signaling NaNs may generate user-
8085 visible traps during floating-point operations. Setting this
8086 option disables optimizations that may change the number of
8087 exceptions visible with signaling NaNs. This option implies
8088 -ftrapping-math.
8089
8090 This option causes the preprocessor macro "__SUPPORT_SNAN__" to be
8091 defined.
8092
8093 The default is -fno-signaling-nans.
8094
8095 This option is experimental and does not currently guarantee to
8096 disable all GCC optimizations that affect signaling NaN behavior.
8097
8098 -fno-fp-int-builtin-inexact
8099 Do not allow the built-in functions "ceil", "floor", "round" and
8100 "trunc", and their "float" and "long double" variants, to generate
8101 code that raises the "inexact" floating-point exception for
8102 noninteger arguments. ISO C99 and C11 allow these functions to
8103 raise the "inexact" exception, but ISO/IEC TS 18661-1:2014, the C
8104 bindings to IEEE 754-2008, does not allow these functions to do so.
8105
8106 The default is -ffp-int-builtin-inexact, allowing the exception to
8107 be raised. This option does nothing unless -ftrapping-math is in
8108 effect.
8109
8110 Even if -fno-fp-int-builtin-inexact is used, if the functions
8111 generate a call to a library function then the "inexact" exception
8112 may be raised if the library implementation does not follow TS
8113 18661.
8114
8115 -fsingle-precision-constant
8116 Treat floating-point constants as single precision instead of
8117 implicitly converting them to double-precision constants.
8118
8119 -fcx-limited-range
8120 When enabled, this option states that a range reduction step is not
8121 needed when performing complex division. Also, there is no
8122 checking whether the result of a complex multiplication or division
8123 is "NaN + I*NaN", with an attempt to rescue the situation in that
8124 case. The default is -fno-cx-limited-range, but is enabled by
8125 -ffast-math.
8126
8127 This option controls the default setting of the ISO C99
8128 "CX_LIMITED_RANGE" pragma. Nevertheless, the option applies to all
8129 languages.
8130
8131 -fcx-fortran-rules
8132 Complex multiplication and division follow Fortran rules. Range
8133 reduction is done as part of complex division, but there is no
8134 checking whether the result of a complex multiplication or division
8135 is "NaN + I*NaN", with an attempt to rescue the situation in that
8136 case.
8137
8138 The default is -fno-cx-fortran-rules.
8139
8140 The following options control optimizations that may improve
8141 performance, but are not enabled by any -O options. This section
8142 includes experimental options that may produce broken code.
8143
8144 -fbranch-probabilities
8145 After running a program compiled with -fprofile-arcs, you can
8146 compile it a second time using -fbranch-probabilities, to improve
8147 optimizations based on the number of times each branch was taken.
8148 When a program compiled with -fprofile-arcs exits, it saves arc
8149 execution counts to a file called sourcename.gcda for each source
8150 file. The information in this data file is very dependent on the
8151 structure of the generated code, so you must use the same source
8152 code and the same optimization options for both compilations.
8153
8154 With -fbranch-probabilities, GCC puts a REG_BR_PROB note on each
8155 JUMP_INSN and CALL_INSN. These can be used to improve
8156 optimization. Currently, they are only used in one place: in
8157 reorg.c, instead of guessing which path a branch is most likely to
8158 take, the REG_BR_PROB values are used to exactly determine which
8159 path is taken more often.
8160
8161 -fprofile-values
8162 If combined with -fprofile-arcs, it adds code so that some data
8163 about values of expressions in the program is gathered.
8164
8165 With -fbranch-probabilities, it reads back the data gathered from
8166 profiling values of expressions for usage in optimizations.
8167
8168 Enabled with -fprofile-generate and -fprofile-use.
8169
8170 -fprofile-reorder-functions
8171 Function reordering based on profile instrumentation collects first
8172 time of execution of a function and orders these functions in
8173 ascending order.
8174
8175 Enabled with -fprofile-use.
8176
8177 -fvpt
8178 If combined with -fprofile-arcs, this option instructs the compiler
8179 to add code to gather information about values of expressions.
8180
8181 With -fbranch-probabilities, it reads back the data gathered and
8182 actually performs the optimizations based on them. Currently the
8183 optimizations include specialization of division operations using
8184 the knowledge about the value of the denominator.
8185
8186 -frename-registers
8187 Attempt to avoid false dependencies in scheduled code by making use
8188 of registers left over after register allocation. This
8189 optimization most benefits processors with lots of registers.
8190 Depending on the debug information format adopted by the target,
8191 however, it can make debugging impossible, since variables no
8192 longer stay in a "home register".
8193
8194 Enabled by default with -funroll-loops.
8195
8196 -fschedule-fusion
8197 Performs a target dependent pass over the instruction stream to
8198 schedule instructions of same type together because target machine
8199 can execute them more efficiently if they are adjacent to each
8200 other in the instruction flow.
8201
8202 Enabled at levels -O2, -O3, -Os.
8203
8204 -ftracer
8205 Perform tail duplication to enlarge superblock size. This
8206 transformation simplifies the control flow of the function allowing
8207 other optimizations to do a better job.
8208
8209 Enabled with -fprofile-use.
8210
8211 -funroll-loops
8212 Unroll loops whose number of iterations can be determined at
8213 compile time or upon entry to the loop. -funroll-loops implies
8214 -frerun-cse-after-loop, -fweb and -frename-registers. It also
8215 turns on complete loop peeling (i.e. complete removal of loops with
8216 a small constant number of iterations). This option makes code
8217 larger, and may or may not make it run faster.
8218
8219 Enabled with -fprofile-use.
8220
8221 -funroll-all-loops
8222 Unroll all loops, even if their number of iterations is uncertain
8223 when the loop is entered. This usually makes programs run more
8224 slowly. -funroll-all-loops implies the same options as
8225 -funroll-loops.
8226
8227 -fpeel-loops
8228 Peels loops for which there is enough information that they do not
8229 roll much (from profile feedback or static analysis). It also
8230 turns on complete loop peeling (i.e. complete removal of loops with
8231 small constant number of iterations).
8232
8233 Enabled with -O3 and/or -fprofile-use.
8234
8235 -fmove-loop-invariants
8236 Enables the loop invariant motion pass in the RTL loop optimizer.
8237 Enabled at level -O1
8238
8239 -fsplit-loops
8240 Split a loop into two if it contains a condition that's always true
8241 for one side of the iteration space and false for the other.
8242
8243 -funswitch-loops
8244 Move branches with loop invariant conditions out of the loop, with
8245 duplicates of the loop on both branches (modified according to
8246 result of the condition).
8247
8248 -ffunction-sections
8249 -fdata-sections
8250 Place each function or data item into its own section in the output
8251 file if the target supports arbitrary sections. The name of the
8252 function or the name of the data item determines the section's name
8253 in the output file.
8254
8255 Use these options on systems where the linker can perform
8256 optimizations to improve locality of reference in the instruction
8257 space. Most systems using the ELF object format have linkers with
8258 such optimizations. On AIX, the linker rearranges sections
8259 (CSECTs) based on the call graph. The performance impact varies.
8260
8261 Together with a linker garbage collection (linker --gc-sections
8262 option) these options may lead to smaller statically-linked
8263 executables (after stripping).
8264
8265 On ELF/DWARF systems these options do not degenerate the quality of
8266 the debug information. There could be issues with other object
8267 files/debug info formats.
8268
8269 Only use these options when there are significant benefits from
8270 doing so. When you specify these options, the assembler and linker
8271 create larger object and executable files and are also slower.
8272 These options affect code generation. They prevent optimizations
8273 by the compiler and assembler using relative locations inside a
8274 translation unit since the locations are unknown until link time.
8275 An example of such an optimization is relaxing calls to short call
8276 instructions.
8277
8278 -fbranch-target-load-optimize
8279 Perform branch target register load optimization before prologue /
8280 epilogue threading. The use of target registers can typically be
8281 exposed only during reload, thus hoisting loads out of loops and
8282 doing inter-block scheduling needs a separate optimization pass.
8283
8284 -fbranch-target-load-optimize2
8285 Perform branch target register load optimization after prologue /
8286 epilogue threading.
8287
8288 -fbtr-bb-exclusive
8289 When performing branch target register load optimization, don't
8290 reuse branch target registers within any basic block.
8291
8292 -fstdarg-opt
8293 Optimize the prologue of variadic argument functions with respect
8294 to usage of those arguments.
8295
8296 -fsection-anchors
8297 Try to reduce the number of symbolic address calculations by using
8298 shared "anchor" symbols to address nearby objects. This
8299 transformation can help to reduce the number of GOT entries and GOT
8300 accesses on some targets.
8301
8302 For example, the implementation of the following function "foo":
8303
8304 static int a, b, c;
8305 int foo (void) { return a + b + c; }
8306
8307 usually calculates the addresses of all three variables, but if you
8308 compile it with -fsection-anchors, it accesses the variables from a
8309 common anchor point instead. The effect is similar to the
8310 following pseudocode (which isn't valid C):
8311
8312 int foo (void)
8313 {
8314 register int *xr = &x;
8315 return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
8316 }
8317
8318 Not all targets support this option.
8319
8320 --param name=value
8321 In some places, GCC uses various constants to control the amount of
8322 optimization that is done. For example, GCC does not inline
8323 functions that contain more than a certain number of instructions.
8324 You can control some of these constants on the command line using
8325 the --param option.
8326
8327 The names of specific parameters, and the meaning of the values,
8328 are tied to the internals of the compiler, and are subject to
8329 change without notice in future releases.
8330
8331 In each case, the value is an integer. The allowable choices for
8332 name are:
8333
8334 predictable-branch-outcome
8335 When branch is predicted to be taken with probability lower
8336 than this threshold (in percent), then it is considered well
8337 predictable. The default is 10.
8338
8339 max-rtl-if-conversion-insns
8340 RTL if-conversion tries to remove conditional branches around a
8341 block and replace them with conditionally executed
8342 instructions. This parameter gives the maximum number of
8343 instructions in a block which should be considered for if-
8344 conversion. The default is 10, though the compiler will also
8345 use other heuristics to decide whether if-conversion is likely
8346 to be profitable.
8347
8348 max-rtl-if-conversion-predictable-cost
8349 max-rtl-if-conversion-unpredictable-cost
8350 RTL if-conversion will try to remove conditional branches
8351 around a block and replace them with conditionally executed
8352 instructions. These parameters give the maximum permissible
8353 cost for the sequence that would be generated by if-conversion
8354 depending on whether the branch is statically determined to be
8355 predictable or not. The units for this parameter are the same
8356 as those for the GCC internal seq_cost metric. The compiler
8357 will try to provide a reasonable default for this parameter
8358 using the BRANCH_COST target macro.
8359
8360 max-crossjump-edges
8361 The maximum number of incoming edges to consider for cross-
8362 jumping. The algorithm used by -fcrossjumping is O(N^2) in the
8363 number of edges incoming to each block. Increasing values mean
8364 more aggressive optimization, making the compilation time
8365 increase with probably small improvement in executable size.
8366
8367 min-crossjump-insns
8368 The minimum number of instructions that must be matched at the
8369 end of two blocks before cross-jumping is performed on them.
8370 This value is ignored in the case where all instructions in the
8371 block being cross-jumped from are matched. The default value
8372 is 5.
8373
8374 max-grow-copy-bb-insns
8375 The maximum code size expansion factor when copying basic
8376 blocks instead of jumping. The expansion is relative to a jump
8377 instruction. The default value is 8.
8378
8379 max-goto-duplication-insns
8380 The maximum number of instructions to duplicate to a block that
8381 jumps to a computed goto. To avoid O(N^2) behavior in a number
8382 of passes, GCC factors computed gotos early in the compilation
8383 process, and unfactors them as late as possible. Only computed
8384 jumps at the end of a basic blocks with no more than max-goto-
8385 duplication-insns are unfactored. The default value is 8.
8386
8387 max-delay-slot-insn-search
8388 The maximum number of instructions to consider when looking for
8389 an instruction to fill a delay slot. If more than this
8390 arbitrary number of instructions are searched, the time savings
8391 from filling the delay slot are minimal, so stop searching.
8392 Increasing values mean more aggressive optimization, making the
8393 compilation time increase with probably small improvement in
8394 execution time.
8395
8396 max-delay-slot-live-search
8397 When trying to fill delay slots, the maximum number of
8398 instructions to consider when searching for a block with valid
8399 live register information. Increasing this arbitrarily chosen
8400 value means more aggressive optimization, increasing the
8401 compilation time. This parameter should be removed when the
8402 delay slot code is rewritten to maintain the control-flow
8403 graph.
8404
8405 max-gcse-memory
8406 The approximate maximum amount of memory that can be allocated
8407 in order to perform the global common subexpression elimination
8408 optimization. If more memory than specified is required, the
8409 optimization is not done.
8410
8411 max-gcse-insertion-ratio
8412 If the ratio of expression insertions to deletions is larger
8413 than this value for any expression, then RTL PRE inserts or
8414 removes the expression and thus leaves partially redundant
8415 computations in the instruction stream. The default value is
8416 20.
8417
8418 max-pending-list-length
8419 The maximum number of pending dependencies scheduling allows
8420 before flushing the current state and starting over. Large
8421 functions with few branches or calls can create excessively
8422 large lists which needlessly consume memory and resources.
8423
8424 max-modulo-backtrack-attempts
8425 The maximum number of backtrack attempts the scheduler should
8426 make when modulo scheduling a loop. Larger values can
8427 exponentially increase compilation time.
8428
8429 max-inline-insns-single
8430 Several parameters control the tree inliner used in GCC. This
8431 number sets the maximum number of instructions (counted in
8432 GCC's internal representation) in a single function that the
8433 tree inliner considers for inlining. This only affects
8434 functions declared inline and methods implemented in a class
8435 declaration (C++). The default value is 400.
8436
8437 max-inline-insns-auto
8438 When you use -finline-functions (included in -O3), a lot of
8439 functions that would otherwise not be considered for inlining
8440 by the compiler are investigated. To those functions, a
8441 different (more restrictive) limit compared to functions
8442 declared inline can be applied. The default value is 30.
8443
8444 inline-min-speedup
8445 When estimated performance improvement of caller + callee
8446 runtime exceeds this threshold (in percent), the function can
8447 be inlined regardless of the limit on --param max-inline-insns-
8448 single and --param max-inline-insns-auto. The default value is
8449 15.
8450
8451 large-function-insns
8452 The limit specifying really large functions. For functions
8453 larger than this limit after inlining, inlining is constrained
8454 by --param large-function-growth. This parameter is useful
8455 primarily to avoid extreme compilation time caused by non-
8456 linear algorithms used by the back end. The default value is
8457 2700.
8458
8459 large-function-growth
8460 Specifies maximal growth of large function caused by inlining
8461 in percents. The default value is 100 which limits large
8462 function growth to 2.0 times the original size.
8463
8464 large-unit-insns
8465 The limit specifying large translation unit. Growth caused by
8466 inlining of units larger than this limit is limited by --param
8467 inline-unit-growth. For small units this might be too tight.
8468 For example, consider a unit consisting of function A that is
8469 inline and B that just calls A three times. If B is small
8470 relative to A, the growth of unit is 300\% and yet such
8471 inlining is very sane. For very large units consisting of
8472 small inlineable functions, however, the overall unit growth
8473 limit is needed to avoid exponential explosion of code size.
8474 Thus for smaller units, the size is increased to --param large-
8475 unit-insns before applying --param inline-unit-growth. The
8476 default is 10000.
8477
8478 inline-unit-growth
8479 Specifies maximal overall growth of the compilation unit caused
8480 by inlining. The default value is 20 which limits unit growth
8481 to 1.2 times the original size. Cold functions (either marked
8482 cold via an attribute or by profile feedback) are not accounted
8483 into the unit size.
8484
8485 ipcp-unit-growth
8486 Specifies maximal overall growth of the compilation unit caused
8487 by interprocedural constant propagation. The default value is
8488 10 which limits unit growth to 1.1 times the original size.
8489
8490 large-stack-frame
8491 The limit specifying large stack frames. While inlining the
8492 algorithm is trying to not grow past this limit too much. The
8493 default value is 256 bytes.
8494
8495 large-stack-frame-growth
8496 Specifies maximal growth of large stack frames caused by
8497 inlining in percents. The default value is 1000 which limits
8498 large stack frame growth to 11 times the original size.
8499
8500 max-inline-insns-recursive
8501 max-inline-insns-recursive-auto
8502 Specifies the maximum number of instructions an out-of-line
8503 copy of a self-recursive inline function can grow into by
8504 performing recursive inlining.
8505
8506 --param max-inline-insns-recursive applies to functions
8507 declared inline. For functions not declared inline, recursive
8508 inlining happens only when -finline-functions (included in -O3)
8509 is enabled; --param max-inline-insns-recursive-auto applies
8510 instead. The default value is 450.
8511
8512 max-inline-recursive-depth
8513 max-inline-recursive-depth-auto
8514 Specifies the maximum recursion depth used for recursive
8515 inlining.
8516
8517 --param max-inline-recursive-depth applies to functions
8518 declared inline. For functions not declared inline, recursive
8519 inlining happens only when -finline-functions (included in -O3)
8520 is enabled; --param max-inline-recursive-depth-auto applies
8521 instead. The default value is 8.
8522
8523 min-inline-recursive-probability
8524 Recursive inlining is profitable only for function having deep
8525 recursion in average and can hurt for function having little
8526 recursion depth by increasing the prologue size or complexity
8527 of function body to other optimizers.
8528
8529 When profile feedback is available (see -fprofile-generate) the
8530 actual recursion depth can be guessed from the probability that
8531 function recurses via a given call expression. This parameter
8532 limits inlining only to call expressions whose probability
8533 exceeds the given threshold (in percents). The default value
8534 is 10.
8535
8536 early-inlining-insns
8537 Specify growth that the early inliner can make. In effect it
8538 increases the amount of inlining for code having a large
8539 abstraction penalty. The default value is 14.
8540
8541 max-early-inliner-iterations
8542 Limit of iterations of the early inliner. This basically
8543 bounds the number of nested indirect calls the early inliner
8544 can resolve. Deeper chains are still handled by late inlining.
8545
8546 comdat-sharing-probability
8547 Probability (in percent) that C++ inline function with comdat
8548 visibility are shared across multiple compilation units. The
8549 default value is 20.
8550
8551 profile-func-internal-id
8552 A parameter to control whether to use function internal id in
8553 profile database lookup. If the value is 0, the compiler uses
8554 an id that is based on function assembler name and filename,
8555 which makes old profile data more tolerant to source changes
8556 such as function reordering etc. The default value is 0.
8557
8558 min-vect-loop-bound
8559 The minimum number of iterations under which loops are not
8560 vectorized when -ftree-vectorize is used. The number of
8561 iterations after vectorization needs to be greater than the
8562 value specified by this option to allow vectorization. The
8563 default value is 0.
8564
8565 gcse-cost-distance-ratio
8566 Scaling factor in calculation of maximum distance an expression
8567 can be moved by GCSE optimizations. This is currently
8568 supported only in the code hoisting pass. The bigger the
8569 ratio, the more aggressive code hoisting is with simple
8570 expressions, i.e., the expressions that have cost less than
8571 gcse-unrestricted-cost. Specifying 0 disables hoisting of
8572 simple expressions. The default value is 10.
8573
8574 gcse-unrestricted-cost
8575 Cost, roughly measured as the cost of a single typical machine
8576 instruction, at which GCSE optimizations do not constrain the
8577 distance an expression can travel. This is currently supported
8578 only in the code hoisting pass. The lesser the cost, the more
8579 aggressive code hoisting is. Specifying 0 allows all
8580 expressions to travel unrestricted distances. The default
8581 value is 3.
8582
8583 max-hoist-depth
8584 The depth of search in the dominator tree for expressions to
8585 hoist. This is used to avoid quadratic behavior in hoisting
8586 algorithm. The value of 0 does not limit on the search, but
8587 may slow down compilation of huge functions. The default value
8588 is 30.
8589
8590 max-tail-merge-comparisons
8591 The maximum amount of similar bbs to compare a bb with. This
8592 is used to avoid quadratic behavior in tree tail merging. The
8593 default value is 10.
8594
8595 max-tail-merge-iterations
8596 The maximum amount of iterations of the pass over the function.
8597 This is used to limit compilation time in tree tail merging.
8598 The default value is 2.
8599
8600 store-merging-allow-unaligned
8601 Allow the store merging pass to introduce unaligned stores if
8602 it is legal to do so. The default value is 1.
8603
8604 max-stores-to-merge
8605 The maximum number of stores to attempt to merge into wider
8606 stores in the store merging pass. The minimum value is 2 and
8607 the default is 64.
8608
8609 max-unrolled-insns
8610 The maximum number of instructions that a loop may have to be
8611 unrolled. If a loop is unrolled, this parameter also
8612 determines how many times the loop code is unrolled.
8613
8614 max-average-unrolled-insns
8615 The maximum number of instructions biased by probabilities of
8616 their execution that a loop may have to be unrolled. If a loop
8617 is unrolled, this parameter also determines how many times the
8618 loop code is unrolled.
8619
8620 max-unroll-times
8621 The maximum number of unrollings of a single loop.
8622
8623 max-peeled-insns
8624 The maximum number of instructions that a loop may have to be
8625 peeled. If a loop is peeled, this parameter also determines
8626 how many times the loop code is peeled.
8627
8628 max-peel-times
8629 The maximum number of peelings of a single loop.
8630
8631 max-peel-branches
8632 The maximum number of branches on the hot path through the
8633 peeled sequence.
8634
8635 max-completely-peeled-insns
8636 The maximum number of insns of a completely peeled loop.
8637
8638 max-completely-peel-times
8639 The maximum number of iterations of a loop to be suitable for
8640 complete peeling.
8641
8642 max-completely-peel-loop-nest-depth
8643 The maximum depth of a loop nest suitable for complete peeling.
8644
8645 max-unswitch-insns
8646 The maximum number of insns of an unswitched loop.
8647
8648 max-unswitch-level
8649 The maximum number of branches unswitched in a single loop.
8650
8651 max-loop-headers-insns
8652 The maximum number of insns in loop header duplicated by the
8653 copy loop headers pass.
8654
8655 lim-expensive
8656 The minimum cost of an expensive expression in the loop
8657 invariant motion.
8658
8659 iv-consider-all-candidates-bound
8660 Bound on number of candidates for induction variables, below
8661 which all candidates are considered for each use in induction
8662 variable optimizations. If there are more candidates than
8663 this, only the most relevant ones are considered to avoid
8664 quadratic time complexity.
8665
8666 iv-max-considered-uses
8667 The induction variable optimizations give up on loops that
8668 contain more induction variable uses.
8669
8670 iv-always-prune-cand-set-bound
8671 If the number of candidates in the set is smaller than this
8672 value, always try to remove unnecessary ivs from the set when
8673 adding a new one.
8674
8675 avg-loop-niter
8676 Average number of iterations of a loop.
8677
8678 dse-max-object-size
8679 Maximum size (in bytes) of objects tracked bytewise by dead
8680 store elimination. Larger values may result in larger
8681 compilation times.
8682
8683 scev-max-expr-size
8684 Bound on size of expressions used in the scalar evolutions
8685 analyzer. Large expressions slow the analyzer.
8686
8687 scev-max-expr-complexity
8688 Bound on the complexity of the expressions in the scalar
8689 evolutions analyzer. Complex expressions slow the analyzer.
8690
8691 max-tree-if-conversion-phi-args
8692 Maximum number of arguments in a PHI supported by TREE if
8693 conversion unless the loop is marked with simd pragma.
8694
8695 vect-max-version-for-alignment-checks
8696 The maximum number of run-time checks that can be performed
8697 when doing loop versioning for alignment in the vectorizer.
8698
8699 vect-max-version-for-alias-checks
8700 The maximum number of run-time checks that can be performed
8701 when doing loop versioning for alias in the vectorizer.
8702
8703 vect-max-peeling-for-alignment
8704 The maximum number of loop peels to enhance access alignment
8705 for vectorizer. Value -1 means no limit.
8706
8707 max-iterations-to-track
8708 The maximum number of iterations of a loop the brute-force
8709 algorithm for analysis of the number of iterations of the loop
8710 tries to evaluate.
8711
8712 hot-bb-count-ws-permille
8713 A basic block profile count is considered hot if it contributes
8714 to the given permillage (i.e. 0...1000) of the entire profiled
8715 execution.
8716
8717 hot-bb-frequency-fraction
8718 Select fraction of the entry block frequency of executions of
8719 basic block in function given basic block needs to have to be
8720 considered hot.
8721
8722 max-predicted-iterations
8723 The maximum number of loop iterations we predict statically.
8724 This is useful in cases where a function contains a single loop
8725 with known bound and another loop with unknown bound. The
8726 known number of iterations is predicted correctly, while the
8727 unknown number of iterations average to roughly 10. This means
8728 that the loop without bounds appears artificially cold relative
8729 to the other one.
8730
8731 builtin-expect-probability
8732 Control the probability of the expression having the specified
8733 value. This parameter takes a percentage (i.e. 0 ... 100) as
8734 input. The default probability of 90 is obtained empirically.
8735
8736 align-threshold
8737 Select fraction of the maximal frequency of executions of a
8738 basic block in a function to align the basic block.
8739
8740 align-loop-iterations
8741 A loop expected to iterate at least the selected number of
8742 iterations is aligned.
8743
8744 tracer-dynamic-coverage
8745 tracer-dynamic-coverage-feedback
8746 This value is used to limit superblock formation once the given
8747 percentage of executed instructions is covered. This limits
8748 unnecessary code size expansion.
8749
8750 The tracer-dynamic-coverage-feedback parameter is used only
8751 when profile feedback is available. The real profiles (as
8752 opposed to statically estimated ones) are much less balanced
8753 allowing the threshold to be larger value.
8754
8755 tracer-max-code-growth
8756 Stop tail duplication once code growth has reached given
8757 percentage. This is a rather artificial limit, as most of the
8758 duplicates are eliminated later in cross jumping, so it may be
8759 set to much higher values than is the desired code growth.
8760
8761 tracer-min-branch-ratio
8762 Stop reverse growth when the reverse probability of best edge
8763 is less than this threshold (in percent).
8764
8765 tracer-min-branch-probability
8766 tracer-min-branch-probability-feedback
8767 Stop forward growth if the best edge has probability lower than
8768 this threshold.
8769
8770 Similarly to tracer-dynamic-coverage two parameters are
8771 provided. tracer-min-branch-probability-feedback is used for
8772 compilation with profile feedback and tracer-min-branch-
8773 probability compilation without. The value for compilation
8774 with profile feedback needs to be more conservative (higher) in
8775 order to make tracer effective.
8776
8777 stack-clash-protection-guard-size
8778 Specify the size of the operating system provided stack guard
8779 as 2 raised to num bytes. The default value is 12 (4096
8780 bytes). Acceptable values are between 12 and 30. Higher
8781 values may reduce the number of explicit probes, but a value
8782 larger than the operating system provided guard will leave code
8783 vulnerable to stack clash style attacks.
8784
8785 stack-clash-protection-probe-interval
8786 Stack clash protection involves probing stack space as it is
8787 allocated. This param controls the maximum distance between
8788 probes into the stack as 2 raised to num bytes. Acceptable
8789 values are between 10 and 16 and defaults to 12. Higher values
8790 may reduce the number of explicit probes, but a value larger
8791 than the operating system provided guard will leave code
8792 vulnerable to stack clash style attacks.
8793
8794 max-cse-path-length
8795 The maximum number of basic blocks on path that CSE considers.
8796 The default is 10.
8797
8798 max-cse-insns
8799 The maximum number of instructions CSE processes before
8800 flushing. The default is 1000.
8801
8802 ggc-min-expand
8803 GCC uses a garbage collector to manage its own memory
8804 allocation. This parameter specifies the minimum percentage by
8805 which the garbage collector's heap should be allowed to expand
8806 between collections. Tuning this may improve compilation
8807 speed; it has no effect on code generation.
8808
8809 The default is 30% + 70% * (RAM/1GB) with an upper bound of
8810 100% when RAM >= 1GB. If "getrlimit" is available, the notion
8811 of "RAM" is the smallest of actual RAM and "RLIMIT_DATA" or
8812 "RLIMIT_AS". If GCC is not able to calculate RAM on a
8813 particular platform, the lower bound of 30% is used. Setting
8814 this parameter and ggc-min-heapsize to zero causes a full
8815 collection to occur at every opportunity. This is extremely
8816 slow, but can be useful for debugging.
8817
8818 ggc-min-heapsize
8819 Minimum size of the garbage collector's heap before it begins
8820 bothering to collect garbage. The first collection occurs
8821 after the heap expands by ggc-min-expand% beyond ggc-min-
8822 heapsize. Again, tuning this may improve compilation speed,
8823 and has no effect on code generation.
8824
8825 The default is the smaller of RAM/8, RLIMIT_RSS, or a limit
8826 that tries to ensure that RLIMIT_DATA or RLIMIT_AS are not
8827 exceeded, but with a lower bound of 4096 (four megabytes) and
8828 an upper bound of 131072 (128 megabytes). If GCC is not able
8829 to calculate RAM on a particular platform, the lower bound is
8830 used. Setting this parameter very large effectively disables
8831 garbage collection. Setting this parameter and ggc-min-expand
8832 to zero causes a full collection to occur at every opportunity.
8833
8834 max-reload-search-insns
8835 The maximum number of instruction reload should look backward
8836 for equivalent register. Increasing values mean more
8837 aggressive optimization, making the compilation time increase
8838 with probably slightly better performance. The default value
8839 is 100.
8840
8841 max-cselib-memory-locations
8842 The maximum number of memory locations cselib should take into
8843 account. Increasing values mean more aggressive optimization,
8844 making the compilation time increase with probably slightly
8845 better performance. The default value is 500.
8846
8847 max-sched-ready-insns
8848 The maximum number of instructions ready to be issued the
8849 scheduler should consider at any given time during the first
8850 scheduling pass. Increasing values mean more thorough
8851 searches, making the compilation time increase with probably
8852 little benefit. The default value is 100.
8853
8854 max-sched-region-blocks
8855 The maximum number of blocks in a region to be considered for
8856 interblock scheduling. The default value is 10.
8857
8858 max-pipeline-region-blocks
8859 The maximum number of blocks in a region to be considered for
8860 pipelining in the selective scheduler. The default value is
8861 15.
8862
8863 max-sched-region-insns
8864 The maximum number of insns in a region to be considered for
8865 interblock scheduling. The default value is 100.
8866
8867 max-pipeline-region-insns
8868 The maximum number of insns in a region to be considered for
8869 pipelining in the selective scheduler. The default value is
8870 200.
8871
8872 min-spec-prob
8873 The minimum probability (in percents) of reaching a source
8874 block for interblock speculative scheduling. The default value
8875 is 40.
8876
8877 max-sched-extend-regions-iters
8878 The maximum number of iterations through CFG to extend regions.
8879 A value of 0 (the default) disables region extensions.
8880
8881 max-sched-insn-conflict-delay
8882 The maximum conflict delay for an insn to be considered for
8883 speculative motion. The default value is 3.
8884
8885 sched-spec-prob-cutoff
8886 The minimal probability of speculation success (in percents),
8887 so that speculative insns are scheduled. The default value is
8888 40.
8889
8890 sched-state-edge-prob-cutoff
8891 The minimum probability an edge must have for the scheduler to
8892 save its state across it. The default value is 10.
8893
8894 sched-mem-true-dep-cost
8895 Minimal distance (in CPU cycles) between store and load
8896 targeting same memory locations. The default value is 1.
8897
8898 selsched-max-lookahead
8899 The maximum size of the lookahead window of selective
8900 scheduling. It is a depth of search for available
8901 instructions. The default value is 50.
8902
8903 selsched-max-sched-times
8904 The maximum number of times that an instruction is scheduled
8905 during selective scheduling. This is the limit on the number
8906 of iterations through which the instruction may be pipelined.
8907 The default value is 2.
8908
8909 selsched-insns-to-rename
8910 The maximum number of best instructions in the ready list that
8911 are considered for renaming in the selective scheduler. The
8912 default value is 2.
8913
8914 sms-min-sc
8915 The minimum value of stage count that swing modulo scheduler
8916 generates. The default value is 2.
8917
8918 max-last-value-rtl
8919 The maximum size measured as number of RTLs that can be
8920 recorded in an expression in combiner for a pseudo register as
8921 last known value of that register. The default is 10000.
8922
8923 max-combine-insns
8924 The maximum number of instructions the RTL combiner tries to
8925 combine. The default value is 2 at -Og and 4 otherwise.
8926
8927 integer-share-limit
8928 Small integer constants can use a shared data structure,
8929 reducing the compiler's memory usage and increasing its speed.
8930 This sets the maximum value of a shared integer constant. The
8931 default value is 256.
8932
8933 ssp-buffer-size
8934 The minimum size of buffers (i.e. arrays) that receive stack
8935 smashing protection when -fstack-protection is used.
8936
8937 min-size-for-stack-sharing
8938 The minimum size of variables taking part in stack slot sharing
8939 when not optimizing. The default value is 32.
8940
8941 max-jump-thread-duplication-stmts
8942 Maximum number of statements allowed in a block that needs to
8943 be duplicated when threading jumps.
8944
8945 max-fields-for-field-sensitive
8946 Maximum number of fields in a structure treated in a field
8947 sensitive manner during pointer analysis. The default is zero
8948 for -O0 and -O1, and 100 for -Os, -O2, and -O3.
8949
8950 prefetch-latency
8951 Estimate on average number of instructions that are executed
8952 before prefetch finishes. The distance prefetched ahead is
8953 proportional to this constant. Increasing this number may also
8954 lead to less streams being prefetched (see simultaneous-
8955 prefetches).
8956
8957 simultaneous-prefetches
8958 Maximum number of prefetches that can run at the same time.
8959
8960 l1-cache-line-size
8961 The size of cache line in L1 cache, in bytes.
8962
8963 l1-cache-size
8964 The size of L1 cache, in kilobytes.
8965
8966 l2-cache-size
8967 The size of L2 cache, in kilobytes.
8968
8969 loop-interchange-max-num-stmts
8970 The maximum number of stmts in a loop to be interchanged.
8971
8972 loop-interchange-stride-ratio
8973 The minimum ratio between stride of two loops for interchange
8974 to be profitable.
8975
8976 min-insn-to-prefetch-ratio
8977 The minimum ratio between the number of instructions and the
8978 number of prefetches to enable prefetching in a loop.
8979
8980 prefetch-min-insn-to-mem-ratio
8981 The minimum ratio between the number of instructions and the
8982 number of memory references to enable prefetching in a loop.
8983
8984 use-canonical-types
8985 Whether the compiler should use the "canonical" type system.
8986 By default, this should always be 1, which uses a more
8987 efficient internal mechanism for comparing types in C++ and
8988 Objective-C++. However, if bugs in the canonical type system
8989 are causing compilation failures, set this value to 0 to
8990 disable canonical types.
8991
8992 switch-conversion-max-branch-ratio
8993 Switch initialization conversion refuses to create arrays that
8994 are bigger than switch-conversion-max-branch-ratio times the
8995 number of branches in the switch.
8996
8997 max-partial-antic-length
8998 Maximum length of the partial antic set computed during the
8999 tree partial redundancy elimination optimization (-ftree-pre)
9000 when optimizing at -O3 and above. For some sorts of source
9001 code the enhanced partial redundancy elimination optimization
9002 can run away, consuming all of the memory available on the host
9003 machine. This parameter sets a limit on the length of the sets
9004 that are computed, which prevents the runaway behavior.
9005 Setting a value of 0 for this parameter allows an unlimited set
9006 length.
9007
9008 sccvn-max-scc-size
9009 Maximum size of a strongly connected component (SCC) during
9010 SCCVN processing. If this limit is hit, SCCVN processing for
9011 the whole function is not done and optimizations depending on
9012 it are disabled. The default maximum SCC size is 10000.
9013
9014 sccvn-max-alias-queries-per-access
9015 Maximum number of alias-oracle queries we perform when looking
9016 for redundancies for loads and stores. If this limit is hit
9017 the search is aborted and the load or store is not considered
9018 redundant. The number of queries is algorithmically limited to
9019 the number of stores on all paths from the load to the function
9020 entry. The default maximum number of queries is 1000.
9021
9022 ira-max-loops-num
9023 IRA uses regional register allocation by default. If a
9024 function contains more loops than the number given by this
9025 parameter, only at most the given number of the most
9026 frequently-executed loops form regions for regional register
9027 allocation. The default value of the parameter is 100.
9028
9029 ira-max-conflict-table-size
9030 Although IRA uses a sophisticated algorithm to compress the
9031 conflict table, the table can still require excessive amounts
9032 of memory for huge functions. If the conflict table for a
9033 function could be more than the size in MB given by this
9034 parameter, the register allocator instead uses a faster,
9035 simpler, and lower-quality algorithm that does not require
9036 building a pseudo-register conflict table. The default value
9037 of the parameter is 2000.
9038
9039 ira-loop-reserved-regs
9040 IRA can be used to evaluate more accurate register pressure in
9041 loops for decisions to move loop invariants (see -O3). The
9042 number of available registers reserved for some other purposes
9043 is given by this parameter. The default value of the parameter
9044 is 2, which is the minimal number of registers needed by
9045 typical instructions. This value is the best found from
9046 numerous experiments.
9047
9048 lra-inheritance-ebb-probability-cutoff
9049 LRA tries to reuse values reloaded in registers in subsequent
9050 insns. This optimization is called inheritance. EBB is used
9051 as a region to do this optimization. The parameter defines a
9052 minimal fall-through edge probability in percentage used to add
9053 BB to inheritance EBB in LRA. The default value of the
9054 parameter is 40. The value was chosen from numerous runs of
9055 SPEC2000 on x86-64.
9056
9057 loop-invariant-max-bbs-in-loop
9058 Loop invariant motion can be very expensive, both in
9059 compilation time and in amount of needed compile-time memory,
9060 with very large loops. Loops with more basic blocks than this
9061 parameter won't have loop invariant motion optimization
9062 performed on them. The default value of the parameter is 1000
9063 for -O1 and 10000 for -O2 and above.
9064
9065 loop-max-datarefs-for-datadeps
9066 Building data dependencies is expensive for very large loops.
9067 This parameter limits the number of data references in loops
9068 that are considered for data dependence analysis. These large
9069 loops are no handled by the optimizations using loop data
9070 dependencies. The default value is 1000.
9071
9072 max-vartrack-size
9073 Sets a maximum number of hash table slots to use during
9074 variable tracking dataflow analysis of any function. If this
9075 limit is exceeded with variable tracking at assignments
9076 enabled, analysis for that function is retried without it,
9077 after removing all debug insns from the function. If the limit
9078 is exceeded even without debug insns, var tracking analysis is
9079 completely disabled for the function. Setting the parameter to
9080 zero makes it unlimited.
9081
9082 max-vartrack-expr-depth
9083 Sets a maximum number of recursion levels when attempting to
9084 map variable names or debug temporaries to value expressions.
9085 This trades compilation time for more complete debug
9086 information. If this is set too low, value expressions that
9087 are available and could be represented in debug information may
9088 end up not being used; setting this higher may enable the
9089 compiler to find more complex debug expressions, but compile
9090 time and memory use may grow. The default is 12.
9091
9092 max-debug-marker-count
9093 Sets a threshold on the number of debug markers (e.g. begin
9094 stmt markers) to avoid complexity explosion at inlining or
9095 expanding to RTL. If a function has more such gimple stmts
9096 than the set limit, such stmts will be dropped from the inlined
9097 copy of a function, and from its RTL expansion. The default is
9098 100000.
9099
9100 min-nondebug-insn-uid
9101 Use uids starting at this parameter for nondebug insns. The
9102 range below the parameter is reserved exclusively for debug
9103 insns created by -fvar-tracking-assignments, but debug insns
9104 may get (non-overlapping) uids above it if the reserved range
9105 is exhausted.
9106
9107 ipa-sra-ptr-growth-factor
9108 IPA-SRA replaces a pointer to an aggregate with one or more new
9109 parameters only when their cumulative size is less or equal to
9110 ipa-sra-ptr-growth-factor times the size of the original
9111 pointer parameter.
9112
9113 sra-max-scalarization-size-Ospeed
9114 sra-max-scalarization-size-Osize
9115 The two Scalar Reduction of Aggregates passes (SRA and IPA-SRA)
9116 aim to replace scalar parts of aggregates with uses of
9117 independent scalar variables. These parameters control the
9118 maximum size, in storage units, of aggregate which is
9119 considered for replacement when compiling for speed (sra-max-
9120 scalarization-size-Ospeed) or size (sra-max-scalarization-size-
9121 Osize) respectively.
9122
9123 tm-max-aggregate-size
9124 When making copies of thread-local variables in a transaction,
9125 this parameter specifies the size in bytes after which
9126 variables are saved with the logging functions as opposed to
9127 save/restore code sequence pairs. This option only applies
9128 when using -fgnu-tm.
9129
9130 graphite-max-nb-scop-params
9131 To avoid exponential effects in the Graphite loop transforms,
9132 the number of parameters in a Static Control Part (SCoP) is
9133 bounded. The default value is 10 parameters, a value of zero
9134 can be used to lift the bound. A variable whose value is
9135 unknown at compilation time and defined outside a SCoP is a
9136 parameter of the SCoP.
9137
9138 loop-block-tile-size
9139 Loop blocking or strip mining transforms, enabled with
9140 -floop-block or -floop-strip-mine, strip mine each loop in the
9141 loop nest by a given number of iterations. The strip length
9142 can be changed using the loop-block-tile-size parameter. The
9143 default value is 51 iterations.
9144
9145 loop-unroll-jam-size
9146 Specify the unroll factor for the -floop-unroll-and-jam option.
9147 The default value is 4.
9148
9149 loop-unroll-jam-depth
9150 Specify the dimension to be unrolled (counting from the most
9151 inner loop) for the -floop-unroll-and-jam. The default value
9152 is 2.
9153
9154 ipa-cp-value-list-size
9155 IPA-CP attempts to track all possible values and types passed
9156 to a function's parameter in order to propagate them and
9157 perform devirtualization. ipa-cp-value-list-size is the
9158 maximum number of values and types it stores per one formal
9159 parameter of a function.
9160
9161 ipa-cp-eval-threshold
9162 IPA-CP calculates its own score of cloning profitability
9163 heuristics and performs those cloning opportunities with scores
9164 that exceed ipa-cp-eval-threshold.
9165
9166 ipa-cp-recursion-penalty
9167 Percentage penalty the recursive functions will receive when
9168 they are evaluated for cloning.
9169
9170 ipa-cp-single-call-penalty
9171 Percentage penalty functions containing a single call to
9172 another function will receive when they are evaluated for
9173 cloning.
9174
9175 ipa-max-agg-items
9176 IPA-CP is also capable to propagate a number of scalar values
9177 passed in an aggregate. ipa-max-agg-items controls the maximum
9178 number of such values per one parameter.
9179
9180 ipa-cp-loop-hint-bonus
9181 When IPA-CP determines that a cloning candidate would make the
9182 number of iterations of a loop known, it adds a bonus of ipa-
9183 cp-loop-hint-bonus to the profitability score of the candidate.
9184
9185 ipa-cp-array-index-hint-bonus
9186 When IPA-CP determines that a cloning candidate would make the
9187 index of an array access known, it adds a bonus of ipa-cp-
9188 array-index-hint-bonus to the profitability score of the
9189 candidate.
9190
9191 ipa-max-aa-steps
9192 During its analysis of function bodies, IPA-CP employs alias
9193 analysis in order to track values pointed to by function
9194 parameters. In order not spend too much time analyzing huge
9195 functions, it gives up and consider all memory clobbered after
9196 examining ipa-max-aa-steps statements modifying memory.
9197
9198 lto-partitions
9199 Specify desired number of partitions produced during WHOPR
9200 compilation. The number of partitions should exceed the number
9201 of CPUs used for compilation. The default value is 32.
9202
9203 lto-min-partition
9204 Size of minimal partition for WHOPR (in estimated
9205 instructions). This prevents expenses of splitting very small
9206 programs into too many partitions.
9207
9208 lto-max-partition
9209 Size of max partition for WHOPR (in estimated instructions).
9210 to provide an upper bound for individual size of partition.
9211 Meant to be used only with balanced partitioning.
9212
9213 cxx-max-namespaces-for-diagnostic-help
9214 The maximum number of namespaces to consult for suggestions
9215 when C++ name lookup fails for an identifier. The default is
9216 1000.
9217
9218 sink-frequency-threshold
9219 The maximum relative execution frequency (in percents) of the
9220 target block relative to a statement's original block to allow
9221 statement sinking of a statement. Larger numbers result in
9222 more aggressive statement sinking. The default value is 75. A
9223 small positive adjustment is applied for statements with memory
9224 operands as those are even more profitable so sink.
9225
9226 max-stores-to-sink
9227 The maximum number of conditional store pairs that can be sunk.
9228 Set to 0 if either vectorization (-ftree-vectorize) or if-
9229 conversion (-ftree-loop-if-convert) is disabled. The default
9230 is 2.
9231
9232 allow-store-data-races
9233 Allow optimizers to introduce new data races on stores. Set to
9234 1 to allow, otherwise to 0. This option is enabled by default
9235 at optimization level -Ofast.
9236
9237 case-values-threshold
9238 The smallest number of different values for which it is best to
9239 use a jump-table instead of a tree of conditional branches. If
9240 the value is 0, use the default for the machine. The default
9241 is 0.
9242
9243 tree-reassoc-width
9244 Set the maximum number of instructions executed in parallel in
9245 reassociated tree. This parameter overrides target dependent
9246 heuristics used by default if has non zero value.
9247
9248 sched-pressure-algorithm
9249 Choose between the two available implementations of
9250 -fsched-pressure. Algorithm 1 is the original implementation
9251 and is the more likely to prevent instructions from being
9252 reordered. Algorithm 2 was designed to be a compromise between
9253 the relatively conservative approach taken by algorithm 1 and
9254 the rather aggressive approach taken by the default scheduler.
9255 It relies more heavily on having a regular register file and
9256 accurate register pressure classes. See haifa-sched.c in the
9257 GCC sources for more details.
9258
9259 The default choice depends on the target.
9260
9261 max-slsr-cand-scan
9262 Set the maximum number of existing candidates that are
9263 considered when seeking a basis for a new straight-line
9264 strength reduction candidate.
9265
9266 asan-globals
9267 Enable buffer overflow detection for global objects. This kind
9268 of protection is enabled by default if you are using
9269 -fsanitize=address option. To disable global objects
9270 protection use --param asan-globals=0.
9271
9272 asan-stack
9273 Enable buffer overflow detection for stack objects. This kind
9274 of protection is enabled by default when using
9275 -fsanitize=address. To disable stack protection use --param
9276 asan-stack=0 option.
9277
9278 asan-instrument-reads
9279 Enable buffer overflow detection for memory reads. This kind
9280 of protection is enabled by default when using
9281 -fsanitize=address. To disable memory reads protection use
9282 --param asan-instrument-reads=0.
9283
9284 asan-instrument-writes
9285 Enable buffer overflow detection for memory writes. This kind
9286 of protection is enabled by default when using
9287 -fsanitize=address. To disable memory writes protection use
9288 --param asan-instrument-writes=0 option.
9289
9290 asan-memintrin
9291 Enable detection for built-in functions. This kind of
9292 protection is enabled by default when using -fsanitize=address.
9293 To disable built-in functions protection use --param
9294 asan-memintrin=0.
9295
9296 asan-use-after-return
9297 Enable detection of use-after-return. This kind of protection
9298 is enabled by default when using the -fsanitize=address option.
9299 To disable it use --param asan-use-after-return=0.
9300
9301 Note: By default the check is disabled at run time. To enable
9302 it, add "detect_stack_use_after_return=1" to the environment
9303 variable ASAN_OPTIONS.
9304
9305 asan-instrumentation-with-call-threshold
9306 If number of memory accesses in function being instrumented is
9307 greater or equal to this number, use callbacks instead of
9308 inline checks. E.g. to disable inline code use --param
9309 asan-instrumentation-with-call-threshold=0.
9310
9311 use-after-scope-direct-emission-threshold
9312 If the size of a local variable in bytes is smaller or equal to
9313 this number, directly poison (or unpoison) shadow memory
9314 instead of using run-time callbacks. The default value is 256.
9315
9316 chkp-max-ctor-size
9317 Static constructors generated by Pointer Bounds Checker may
9318 become very large and significantly increase compile time at
9319 optimization level -O1 and higher. This parameter is a maximum
9320 number of statements in a single generated constructor.
9321 Default value is 5000.
9322
9323 max-fsm-thread-path-insns
9324 Maximum number of instructions to copy when duplicating blocks
9325 on a finite state automaton jump thread path. The default is
9326 100.
9327
9328 max-fsm-thread-length
9329 Maximum number of basic blocks on a finite state automaton jump
9330 thread path. The default is 10.
9331
9332 max-fsm-thread-paths
9333 Maximum number of new jump thread paths to create for a finite
9334 state automaton. The default is 50.
9335
9336 parloops-chunk-size
9337 Chunk size of omp schedule for loops parallelized by parloops.
9338 The default is 0.
9339
9340 parloops-schedule
9341 Schedule type of omp schedule for loops parallelized by
9342 parloops (static, dynamic, guided, auto, runtime). The default
9343 is static.
9344
9345 parloops-min-per-thread
9346 The minimum number of iterations per thread of an innermost
9347 parallelized loop for which the parallelized variant is
9348 prefered over the single threaded one. The default is 100.
9349 Note that for a parallelized loop nest the minimum number of
9350 iterations of the outermost loop per thread is two.
9351
9352 max-ssa-name-query-depth
9353 Maximum depth of recursion when querying properties of SSA
9354 names in things like fold routines. One level of recursion
9355 corresponds to following a use-def chain.
9356
9357 hsa-gen-debug-stores
9358 Enable emission of special debug stores within HSA kernels
9359 which are then read and reported by libgomp plugin. Generation
9360 of these stores is disabled by default, use --param
9361 hsa-gen-debug-stores=1 to enable it.
9362
9363 max-speculative-devirt-maydefs
9364 The maximum number of may-defs we analyze when looking for a
9365 must-def specifying the dynamic type of an object that invokes
9366 a virtual call we may be able to devirtualize speculatively.
9367
9368 max-vrp-switch-assertions
9369 The maximum number of assertions to add along the default edge
9370 of a switch statement during VRP. The default is 10.
9371
9372 unroll-jam-min-percent
9373 The minimum percentage of memory references that must be
9374 optimized away for the unroll-and-jam transformation to be
9375 considered profitable.
9376
9377 unroll-jam-max-unroll
9378 The maximum number of times the outer loop should be unrolled
9379 by the unroll-and-jam transformation.
9380
9381 Program Instrumentation Options
9382 GCC supports a number of command-line options that control adding run-
9383 time instrumentation to the code it normally generates. For example,
9384 one purpose of instrumentation is collect profiling statistics for use
9385 in finding program hot spots, code coverage analysis, or profile-guided
9386 optimizations. Another class of program instrumentation is adding run-
9387 time checking to detect programming errors like invalid pointer
9388 dereferences or out-of-bounds array accesses, as well as deliberately
9389 hostile attacks such as stack smashing or C++ vtable hijacking. There
9390 is also a general hook which can be used to implement other forms of
9391 tracing or function-level instrumentation for debug or program analysis
9392 purposes.
9393
9394 -p Generate extra code to write profile information suitable for the
9395 analysis program prof. You must use this option when compiling the
9396 source files you want data about, and you must also use it when
9397 linking.
9398
9399 -pg Generate extra code to write profile information suitable for the
9400 analysis program gprof. You must use this option when compiling
9401 the source files you want data about, and you must also use it when
9402 linking.
9403
9404 -fprofile-arcs
9405 Add code so that program flow arcs are instrumented. During
9406 execution the program records how many times each branch and call
9407 is executed and how many times it is taken or returns. On targets
9408 that support constructors with priority support, profiling properly
9409 handles constructors, destructors and C++ constructors (and
9410 destructors) of classes which are used as a type of a global
9411 variable.
9412
9413 When the compiled program exits it saves this data to a file called
9414 auxname.gcda for each source file. The data may be used for
9415 profile-directed optimizations (-fbranch-probabilities), or for
9416 test coverage analysis (-ftest-coverage). Each object file's
9417 auxname is generated from the name of the output file, if
9418 explicitly specified and it is not the final executable, otherwise
9419 it is the basename of the source file. In both cases any suffix is
9420 removed (e.g. foo.gcda for input file dir/foo.c, or dir/foo.gcda
9421 for output file specified as -o dir/foo.o).
9422
9423 --coverage
9424 This option is used to compile and link code instrumented for
9425 coverage analysis. The option is a synonym for -fprofile-arcs
9426 -ftest-coverage (when compiling) and -lgcov (when linking). See
9427 the documentation for those options for more details.
9428
9429 * Compile the source files with -fprofile-arcs plus optimization
9430 and code generation options. For test coverage analysis, use
9431 the additional -ftest-coverage option. You do not need to
9432 profile every source file in a program.
9433
9434 * Compile the source files additionally with -fprofile-abs-path
9435 to create absolute path names in the .gcno files. This allows
9436 gcov to find the correct sources in projects where compilations
9437 occur with different working directories.
9438
9439 * Link your object files with -lgcov or -fprofile-arcs (the
9440 latter implies the former).
9441
9442 * Run the program on a representative workload to generate the
9443 arc profile information. This may be repeated any number of
9444 times. You can run concurrent instances of your program, and
9445 provided that the file system supports locking, the data files
9446 will be correctly updated. Unless a strict ISO C dialect
9447 option is in effect, "fork" calls are detected and correctly
9448 handled without double counting.
9449
9450 * For profile-directed optimizations, compile the source files
9451 again with the same optimization and code generation options
9452 plus -fbranch-probabilities.
9453
9454 * For test coverage analysis, use gcov to produce human readable
9455 information from the .gcno and .gcda files. Refer to the gcov
9456 documentation for further information.
9457
9458 With -fprofile-arcs, for each function of your program GCC creates
9459 a program flow graph, then finds a spanning tree for the graph.
9460 Only arcs that are not on the spanning tree have to be
9461 instrumented: the compiler adds code to count the number of times
9462 that these arcs are executed. When an arc is the only exit or only
9463 entrance to a block, the instrumentation code can be added to the
9464 block; otherwise, a new basic block must be created to hold the
9465 instrumentation code.
9466
9467 -ftest-coverage
9468 Produce a notes file that the gcov code-coverage utility can use to
9469 show program coverage. Each source file's note file is called
9470 auxname.gcno. Refer to the -fprofile-arcs option above for a
9471 description of auxname and instructions on how to generate test
9472 coverage data. Coverage data matches the source files more closely
9473 if you do not optimize.
9474
9475 -fprofile-abs-path
9476 Automatically convert relative source file names to absolute path
9477 names in the .gcno files. This allows gcov to find the correct
9478 sources in projects where compilations occur with different working
9479 directories.
9480
9481 -fprofile-dir=path
9482 Set the directory to search for the profile data files in to path.
9483 This option affects only the profile data generated by
9484 -fprofile-generate, -ftest-coverage, -fprofile-arcs and used by
9485 -fprofile-use and -fbranch-probabilities and its related options.
9486 Both absolute and relative paths can be used. By default, GCC uses
9487 the current directory as path, thus the profile data file appears
9488 in the same directory as the object file.
9489
9490 -fprofile-generate
9491 -fprofile-generate=path
9492 Enable options usually used for instrumenting application to
9493 produce profile useful for later recompilation with profile
9494 feedback based optimization. You must use -fprofile-generate both
9495 when compiling and when linking your program.
9496
9497 The following options are enabled: -fprofile-arcs,
9498 -fprofile-values, -fvpt.
9499
9500 If path is specified, GCC looks at the path to find the profile
9501 feedback data files. See -fprofile-dir.
9502
9503 To optimize the program based on the collected profile information,
9504 use -fprofile-use.
9505
9506 -fprofile-update=method
9507 Alter the update method for an application instrumented for profile
9508 feedback based optimization. The method argument should be one of
9509 single, atomic or prefer-atomic. The first one is useful for
9510 single-threaded applications, while the second one prevents profile
9511 corruption by emitting thread-safe code.
9512
9513 Warning: When an application does not properly join all threads (or
9514 creates an detached thread), a profile file can be still corrupted.
9515
9516 Using prefer-atomic would be transformed either to atomic, when
9517 supported by a target, or to single otherwise. The GCC driver
9518 automatically selects prefer-atomic when -pthread is present in the
9519 command line.
9520
9521 -fsanitize=address
9522 Enable AddressSanitizer, a fast memory error detector. Memory
9523 access instructions are instrumented to detect out-of-bounds and
9524 use-after-free bugs. The option enables
9525 -fsanitize-address-use-after-scope. See
9526 <https://github.com/google/sanitizers/wiki/AddressSanitizer> for
9527 more details. The run-time behavior can be influenced using the
9528 ASAN_OPTIONS environment variable. When set to "help=1", the
9529 available options are shown at startup of the instrumented program.
9530 See
9531 <https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags>
9532 for a list of supported options. The option cannot be combined
9533 with -fsanitize=thread and/or -fcheck-pointer-bounds.
9534
9535 -fsanitize=kernel-address
9536 Enable AddressSanitizer for Linux kernel. See
9537 <https://github.com/google/kasan/wiki> for more details. The
9538 option cannot be combined with -fcheck-pointer-bounds.
9539
9540 -fsanitize=pointer-compare
9541 Instrument comparison operation (<, <=, >, >=) with pointer
9542 operands. The option must be combined with either
9543 -fsanitize=kernel-address or -fsanitize=address The option cannot
9544 be combined with -fsanitize=thread and/or -fcheck-pointer-bounds.
9545 Note: By default the check is disabled at run time. To enable it,
9546 add "detect_invalid_pointer_pairs=2" to the environment variable
9547 ASAN_OPTIONS. Using "detect_invalid_pointer_pairs=1" detects
9548 invalid operation only when both pointers are non-null.
9549
9550 -fsanitize=pointer-subtract
9551 Instrument subtraction with pointer operands. The option must be
9552 combined with either -fsanitize=kernel-address or
9553 -fsanitize=address The option cannot be combined with
9554 -fsanitize=thread and/or -fcheck-pointer-bounds. Note: By default
9555 the check is disabled at run time. To enable it, add
9556 "detect_invalid_pointer_pairs=2" to the environment variable
9557 ASAN_OPTIONS. Using "detect_invalid_pointer_pairs=1" detects
9558 invalid operation only when both pointers are non-null.
9559
9560 -fsanitize=thread
9561 Enable ThreadSanitizer, a fast data race detector. Memory access
9562 instructions are instrumented to detect data race bugs. See
9563 <https://github.com/google/sanitizers/wiki#threadsanitizer> for
9564 more details. The run-time behavior can be influenced using the
9565 TSAN_OPTIONS environment variable; see
9566 <https://github.com/google/sanitizers/wiki/ThreadSanitizerFlags>
9567 for a list of supported options. The option cannot be combined
9568 with -fsanitize=address, -fsanitize=leak and/or
9569 -fcheck-pointer-bounds.
9570
9571 Note that sanitized atomic builtins cannot throw exceptions when
9572 operating on invalid memory addresses with non-call exceptions
9573 (-fnon-call-exceptions).
9574
9575 -fsanitize=leak
9576 Enable LeakSanitizer, a memory leak detector. This option only
9577 matters for linking of executables and the executable is linked
9578 against a library that overrides "malloc" and other allocator
9579 functions. See
9580 <https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer>
9581 for more details. The run-time behavior can be influenced using
9582 the LSAN_OPTIONS environment variable. The option cannot be
9583 combined with -fsanitize=thread.
9584
9585 -fsanitize=undefined
9586 Enable UndefinedBehaviorSanitizer, a fast undefined behavior
9587 detector. Various computations are instrumented to detect
9588 undefined behavior at runtime. Current suboptions are:
9589
9590 -fsanitize=shift
9591 This option enables checking that the result of a shift
9592 operation is not undefined. Note that what exactly is
9593 considered undefined differs slightly between C and C++, as
9594 well as between ISO C90 and C99, etc. This option has two
9595 suboptions, -fsanitize=shift-base and
9596 -fsanitize=shift-exponent.
9597
9598 -fsanitize=shift-exponent
9599 This option enables checking that the second argument of a
9600 shift operation is not negative and is smaller than the
9601 precision of the promoted first argument.
9602
9603 -fsanitize=shift-base
9604 If the second argument of a shift operation is within range,
9605 check that the result of a shift operation is not undefined.
9606 Note that what exactly is considered undefined differs slightly
9607 between C and C++, as well as between ISO C90 and C99, etc.
9608
9609 -fsanitize=integer-divide-by-zero
9610 Detect integer division by zero as well as "INT_MIN / -1"
9611 division.
9612
9613 -fsanitize=unreachable
9614 With this option, the compiler turns the
9615 "__builtin_unreachable" call into a diagnostics message call
9616 instead. When reaching the "__builtin_unreachable" call, the
9617 behavior is undefined.
9618
9619 -fsanitize=vla-bound
9620 This option instructs the compiler to check that the size of a
9621 variable length array is positive.
9622
9623 -fsanitize=null
9624 This option enables pointer checking. Particularly, the
9625 application built with this option turned on will issue an
9626 error message when it tries to dereference a NULL pointer, or
9627 if a reference (possibly an rvalue reference) is bound to a
9628 NULL pointer, or if a method is invoked on an object pointed by
9629 a NULL pointer.
9630
9631 -fsanitize=return
9632 This option enables return statement checking. Programs built
9633 with this option turned on will issue an error message when the
9634 end of a non-void function is reached without actually
9635 returning a value. This option works in C++ only.
9636
9637 -fsanitize=signed-integer-overflow
9638 This option enables signed integer overflow checking. We check
9639 that the result of "+", "*", and both unary and binary "-" does
9640 not overflow in the signed arithmetics. Note, integer
9641 promotion rules must be taken into account. That is, the
9642 following is not an overflow:
9643
9644 signed char a = SCHAR_MAX;
9645 a++;
9646
9647 -fsanitize=bounds
9648 This option enables instrumentation of array bounds. Various
9649 out of bounds accesses are detected. Flexible array members,
9650 flexible array member-like arrays, and initializers of
9651 variables with static storage are not instrumented. The option
9652 cannot be combined with -fcheck-pointer-bounds.
9653
9654 -fsanitize=bounds-strict
9655 This option enables strict instrumentation of array bounds.
9656 Most out of bounds accesses are detected, including flexible
9657 array members and flexible array member-like arrays.
9658 Initializers of variables with static storage are not
9659 instrumented. The option cannot be combined with
9660 -fcheck-pointer-bounds.
9661
9662 -fsanitize=alignment
9663 This option enables checking of alignment of pointers when they
9664 are dereferenced, or when a reference is bound to
9665 insufficiently aligned target, or when a method or constructor
9666 is invoked on insufficiently aligned object.
9667
9668 -fsanitize=object-size
9669 This option enables instrumentation of memory references using
9670 the "__builtin_object_size" function. Various out of bounds
9671 pointer accesses are detected.
9672
9673 -fsanitize=float-divide-by-zero
9674 Detect floating-point division by zero. Unlike other similar
9675 options, -fsanitize=float-divide-by-zero is not enabled by
9676 -fsanitize=undefined, since floating-point division by zero can
9677 be a legitimate way of obtaining infinities and NaNs.
9678
9679 -fsanitize=float-cast-overflow
9680 This option enables floating-point type to integer conversion
9681 checking. We check that the result of the conversion does not
9682 overflow. Unlike other similar options,
9683 -fsanitize=float-cast-overflow is not enabled by
9684 -fsanitize=undefined. This option does not work well with
9685 "FE_INVALID" exceptions enabled.
9686
9687 -fsanitize=nonnull-attribute
9688 This option enables instrumentation of calls, checking whether
9689 null values are not passed to arguments marked as requiring a
9690 non-null value by the "nonnull" function attribute.
9691
9692 -fsanitize=returns-nonnull-attribute
9693 This option enables instrumentation of return statements in
9694 functions marked with "returns_nonnull" function attribute, to
9695 detect returning of null values from such functions.
9696
9697 -fsanitize=bool
9698 This option enables instrumentation of loads from bool. If a
9699 value other than 0/1 is loaded, a run-time error is issued.
9700
9701 -fsanitize=enum
9702 This option enables instrumentation of loads from an enum type.
9703 If a value outside the range of values for the enum type is
9704 loaded, a run-time error is issued.
9705
9706 -fsanitize=vptr
9707 This option enables instrumentation of C++ member function
9708 calls, member accesses and some conversions between pointers to
9709 base and derived classes, to verify the referenced object has
9710 the correct dynamic type.
9711
9712 -fsanitize=pointer-overflow
9713 This option enables instrumentation of pointer arithmetics. If
9714 the pointer arithmetics overflows, a run-time error is issued.
9715
9716 -fsanitize=builtin
9717 This option enables instrumentation of arguments to selected
9718 builtin functions. If an invalid value is passed to such
9719 arguments, a run-time error is issued. E.g. passing 0 as the
9720 argument to "__builtin_ctz" or "__builtin_clz" invokes
9721 undefined behavior and is diagnosed by this option.
9722
9723 While -ftrapv causes traps for signed overflows to be emitted,
9724 -fsanitize=undefined gives a diagnostic message. This currently
9725 works only for the C family of languages.
9726
9727 -fno-sanitize=all
9728 This option disables all previously enabled sanitizers.
9729 -fsanitize=all is not allowed, as some sanitizers cannot be used
9730 together.
9731
9732 -fasan-shadow-offset=number
9733 This option forces GCC to use custom shadow offset in
9734 AddressSanitizer checks. It is useful for experimenting with
9735 different shadow memory layouts in Kernel AddressSanitizer.
9736
9737 -fsanitize-sections=s1,s2,...
9738 Sanitize global variables in selected user-defined sections. si
9739 may contain wildcards.
9740
9741 -fsanitize-recover[=opts]
9742 -fsanitize-recover= controls error recovery mode for sanitizers
9743 mentioned in comma-separated list of opts. Enabling this option
9744 for a sanitizer component causes it to attempt to continue running
9745 the program as if no error happened. This means multiple runtime
9746 errors can be reported in a single program run, and the exit code
9747 of the program may indicate success even when errors have been
9748 reported. The -fno-sanitize-recover= option can be used to alter
9749 this behavior: only the first detected error is reported and
9750 program then exits with a non-zero exit code.
9751
9752 Currently this feature only works for -fsanitize=undefined (and its
9753 suboptions except for -fsanitize=unreachable and
9754 -fsanitize=return), -fsanitize=float-cast-overflow,
9755 -fsanitize=float-divide-by-zero, -fsanitize=bounds-strict,
9756 -fsanitize=kernel-address and -fsanitize=address. For these
9757 sanitizers error recovery is turned on by default, except
9758 -fsanitize=address, for which this feature is experimental.
9759 -fsanitize-recover=all and -fno-sanitize-recover=all is also
9760 accepted, the former enables recovery for all sanitizers that
9761 support it, the latter disables recovery for all sanitizers that
9762 support it.
9763
9764 Even if a recovery mode is turned on the compiler side, it needs to
9765 be also enabled on the runtime library side, otherwise the failures
9766 are still fatal. The runtime library defaults to "halt_on_error=0"
9767 for ThreadSanitizer and UndefinedBehaviorSanitizer, while default
9768 value for AddressSanitizer is "halt_on_error=1". This can be
9769 overridden through setting the "halt_on_error" flag in the
9770 corresponding environment variable.
9771
9772 Syntax without an explicit opts parameter is deprecated. It is
9773 equivalent to specifying an opts list of:
9774
9775 undefined,float-cast-overflow,float-divide-by-zero,bounds-strict
9776
9777 -fsanitize-address-use-after-scope
9778 Enable sanitization of local variables to detect use-after-scope
9779 bugs. The option sets -fstack-reuse to none.
9780
9781 -fsanitize-undefined-trap-on-error
9782 The -fsanitize-undefined-trap-on-error option instructs the
9783 compiler to report undefined behavior using "__builtin_trap" rather
9784 than a "libubsan" library routine. The advantage of this is that
9785 the "libubsan" library is not needed and is not linked in, so this
9786 is usable even in freestanding environments.
9787
9788 -fsanitize-coverage=trace-pc
9789 Enable coverage-guided fuzzing code instrumentation. Inserts a
9790 call to "__sanitizer_cov_trace_pc" into every basic block.
9791
9792 -fsanitize-coverage=trace-cmp
9793 Enable dataflow guided fuzzing code instrumentation. Inserts a
9794 call to "__sanitizer_cov_trace_cmp1", "__sanitizer_cov_trace_cmp2",
9795 "__sanitizer_cov_trace_cmp4" or "__sanitizer_cov_trace_cmp8" for
9796 integral comparison with both operands variable or
9797 "__sanitizer_cov_trace_const_cmp1",
9798 "__sanitizer_cov_trace_const_cmp2",
9799 "__sanitizer_cov_trace_const_cmp4" or
9800 "__sanitizer_cov_trace_const_cmp8" for integral comparison with one
9801 operand constant, "__sanitizer_cov_trace_cmpf" or
9802 "__sanitizer_cov_trace_cmpd" for float or double comparisons and
9803 "__sanitizer_cov_trace_switch" for switch statements.
9804
9805 -fbounds-check
9806 For front ends that support it, generate additional code to check
9807 that indices used to access arrays are within the declared range.
9808 This is currently only supported by the Fortran front end, where
9809 this option defaults to false.
9810
9811 -fcheck-pointer-bounds
9812 Enable Pointer Bounds Checker instrumentation. Each memory
9813 reference is instrumented with checks of the pointer used for
9814 memory access against bounds associated with that pointer.
9815
9816 Currently there is only an implementation for Intel MPX available,
9817 thus x86 GNU/Linux target and -mmpx are required to enable this
9818 feature. MPX-based instrumentation requires a runtime library to
9819 enable MPX in hardware and handle bounds violation signals. By
9820 default when -fcheck-pointer-bounds and -mmpx options are used to
9821 link a program, the GCC driver links against the libmpx and
9822 libmpxwrappers libraries. Bounds checking on calls to dynamic
9823 libraries requires a linker with -z bndplt support; if GCC was
9824 configured with a linker without support for this option (including
9825 the Gold linker and older versions of ld), a warning is given if
9826 you link with -mmpx without also specifying -static, since the
9827 overall effectiveness of the bounds checking protection is reduced.
9828 See also -static-libmpxwrappers.
9829
9830 MPX-based instrumentation may be used for debugging and also may be
9831 included in production code to increase program security.
9832 Depending on usage, you may have different requirements for the
9833 runtime library. The current version of the MPX runtime library is
9834 more oriented for use as a debugging tool. MPX runtime library
9835 usage implies -lpthread. See also -static-libmpx. The runtime
9836 library behavior can be influenced using various CHKP_RT_*
9837 environment variables. See
9838 <https://gcc.gnu.org/wiki/Intel%20MPX%20support%20in%20the%20GCC%20compiler>
9839 for more details.
9840
9841 Generated instrumentation may be controlled by various -fchkp-*
9842 options and by the "bnd_variable_size" structure field attribute
9843 and "bnd_legacy", and "bnd_instrument" function attributes. GCC
9844 also provides a number of built-in functions for controlling the
9845 Pointer Bounds Checker.
9846
9847 -fchkp-check-incomplete-type
9848 Generate pointer bounds checks for variables with incomplete type.
9849 Enabled by default.
9850
9851 -fchkp-narrow-bounds
9852 Controls bounds used by Pointer Bounds Checker for pointers to
9853 object fields. If narrowing is enabled then field bounds are used.
9854 Otherwise object bounds are used. See also
9855 -fchkp-narrow-to-innermost-array and
9856 -fchkp-first-field-has-own-bounds. Enabled by default.
9857
9858 -fchkp-first-field-has-own-bounds
9859 Forces Pointer Bounds Checker to use narrowed bounds for the
9860 address of the first field in the structure. By default a pointer
9861 to the first field has the same bounds as a pointer to the whole
9862 structure.
9863
9864 -fchkp-flexible-struct-trailing-arrays
9865 Forces Pointer Bounds Checker to treat all trailing arrays in
9866 structures as possibly flexible. By default only array fields with
9867 zero length or that are marked with attribute bnd_variable_size are
9868 treated as flexible.
9869
9870 -fchkp-narrow-to-innermost-array
9871 Forces Pointer Bounds Checker to use bounds of the innermost arrays
9872 in case of nested static array access. By default this option is
9873 disabled and bounds of the outermost array are used.
9874
9875 -fchkp-optimize
9876 Enables Pointer Bounds Checker optimizations. Enabled by default
9877 at optimization levels -O, -O2, -O3.
9878
9879 -fchkp-use-fast-string-functions
9880 Enables use of *_nobnd versions of string functions (not copying
9881 bounds) by Pointer Bounds Checker. Disabled by default.
9882
9883 -fchkp-use-nochk-string-functions
9884 Enables use of *_nochk versions of string functions (not checking
9885 bounds) by Pointer Bounds Checker. Disabled by default.
9886
9887 -fchkp-use-static-bounds
9888 Allow Pointer Bounds Checker to generate static bounds holding
9889 bounds of static variables. Enabled by default.
9890
9891 -fchkp-use-static-const-bounds
9892 Use statically-initialized bounds for constant bounds instead of
9893 generating them each time they are required. By default enabled
9894 when -fchkp-use-static-bounds is enabled.
9895
9896 -fchkp-treat-zero-dynamic-size-as-infinite
9897 With this option, objects with incomplete type whose dynamically-
9898 obtained size is zero are treated as having infinite size instead
9899 by Pointer Bounds Checker. This option may be helpful if a program
9900 is linked with a library missing size information for some symbols.
9901 Disabled by default.
9902
9903 -fchkp-check-read
9904 Instructs Pointer Bounds Checker to generate checks for all read
9905 accesses to memory. Enabled by default.
9906
9907 -fchkp-check-write
9908 Instructs Pointer Bounds Checker to generate checks for all write
9909 accesses to memory. Enabled by default.
9910
9911 -fchkp-store-bounds
9912 Instructs Pointer Bounds Checker to generate bounds stores for
9913 pointer writes. Enabled by default.
9914
9915 -fchkp-instrument-calls
9916 Instructs Pointer Bounds Checker to pass pointer bounds to calls.
9917 Enabled by default.
9918
9919 -fchkp-instrument-marked-only
9920 Instructs Pointer Bounds Checker to instrument only functions
9921 marked with the "bnd_instrument" attribute. Disabled by default.
9922
9923 -fchkp-use-wrappers
9924 Allows Pointer Bounds Checker to replace calls to built-in
9925 functions with calls to wrapper functions. When
9926 -fchkp-use-wrappers is used to link a program, the GCC driver
9927 automatically links against libmpxwrappers. See also
9928 -static-libmpxwrappers. Enabled by default.
9929
9930 -fcf-protection=[full|branch|return|none]
9931 Enable code instrumentation of control-flow transfers to increase
9932 program security by checking that target addresses of control-flow
9933 transfer instructions (such as indirect function call, function
9934 return, indirect jump) are valid. This prevents diverting the flow
9935 of control to an unexpected target. This is intended to protect
9936 against such threats as Return-oriented Programming (ROP), and
9937 similarly call/jmp-oriented programming (COP/JOP).
9938
9939 The value "branch" tells the compiler to implement checking of
9940 validity of control-flow transfer at the point of indirect branch
9941 instructions, i.e. call/jmp instructions. The value "return"
9942 implements checking of validity at the point of returning from a
9943 function. The value "full" is an alias for specifying both
9944 "branch" and "return". The value "none" turns off instrumentation.
9945
9946 The macro "__CET__" is defined when -fcf-protection is used. The
9947 first bit of "__CET__" is set to 1 for the value "branch" and the
9948 second bit of "__CET__" is set to 1 for the "return".
9949
9950 You can also use the "nocf_check" attribute to identify which
9951 functions and calls should be skipped from instrumentation.
9952
9953 Currently the x86 GNU/Linux target provides an implementation based
9954 on Intel Control-flow Enforcement Technology (CET).
9955
9956 -fstack-protector
9957 Emit extra code to check for buffer overflows, such as stack
9958 smashing attacks. This is done by adding a guard variable to
9959 functions with vulnerable objects. This includes functions that
9960 call "alloca", and functions with buffers larger than 8 bytes. The
9961 guards are initialized when a function is entered and then checked
9962 when the function exits. If a guard check fails, an error message
9963 is printed and the program exits.
9964
9965 -fstack-protector-all
9966 Like -fstack-protector except that all functions are protected.
9967
9968 -fstack-protector-strong
9969 Like -fstack-protector but includes additional functions to be
9970 protected --- those that have local array definitions, or have
9971 references to local frame addresses.
9972
9973 -fstack-protector-explicit
9974 Like -fstack-protector but only protects those functions which have
9975 the "stack_protect" attribute.
9976
9977 -fstack-check
9978 Generate code to verify that you do not go beyond the boundary of
9979 the stack. You should specify this flag if you are running in an
9980 environment with multiple threads, but you only rarely need to
9981 specify it in a single-threaded environment since stack overflow is
9982 automatically detected on nearly all systems if there is only one
9983 stack.
9984
9985 Note that this switch does not actually cause checking to be done;
9986 the operating system or the language runtime must do that. The
9987 switch causes generation of code to ensure that they see the stack
9988 being extended.
9989
9990 You can additionally specify a string parameter: no means no
9991 checking, generic means force the use of old-style checking,
9992 specific means use the best checking method and is equivalent to
9993 bare -fstack-check.
9994
9995 Old-style checking is a generic mechanism that requires no specific
9996 target support in the compiler but comes with the following
9997 drawbacks:
9998
9999 1. Modified allocation strategy for large objects: they are always
10000 allocated dynamically if their size exceeds a fixed threshold.
10001 Note this may change the semantics of some code.
10002
10003 2. Fixed limit on the size of the static frame of functions: when
10004 it is topped by a particular function, stack checking is not
10005 reliable and a warning is issued by the compiler.
10006
10007 3. Inefficiency: because of both the modified allocation strategy
10008 and the generic implementation, code performance is hampered.
10009
10010 Note that old-style stack checking is also the fallback method for
10011 specific if no target support has been added in the compiler.
10012
10013 -fstack-check= is designed for Ada's needs to detect infinite
10014 recursion and stack overflows. specific is an excellent choice
10015 when compiling Ada code. It is not generally sufficient to protect
10016 against stack-clash attacks. To protect against those you want
10017 -fstack-clash-protection.
10018
10019 -fstack-clash-protection
10020 Generate code to prevent stack clash style attacks. When this
10021 option is enabled, the compiler will only allocate one page of
10022 stack space at a time and each page is accessed immediately after
10023 allocation. Thus, it prevents allocations from jumping over any
10024 stack guard page provided by the operating system.
10025
10026 Most targets do not fully support stack clash protection. However,
10027 on those targets -fstack-clash-protection will protect dynamic
10028 stack allocations. -fstack-clash-protection may also provide
10029 limited protection for static stack allocations if the target
10030 supports -fstack-check=specific.
10031
10032 -fstack-limit-register=reg
10033 -fstack-limit-symbol=sym
10034 -fno-stack-limit
10035 Generate code to ensure that the stack does not grow beyond a
10036 certain value, either the value of a register or the address of a
10037 symbol. If a larger stack is required, a signal is raised at run
10038 time. For most targets, the signal is raised before the stack
10039 overruns the boundary, so it is possible to catch the signal
10040 without taking special precautions.
10041
10042 For instance, if the stack starts at absolute address 0x80000000
10043 and grows downwards, you can use the flags
10044 -fstack-limit-symbol=__stack_limit and
10045 -Wl,--defsym,__stack_limit=0x7ffe0000 to enforce a stack limit of
10046 128KB. Note that this may only work with the GNU linker.
10047
10048 You can locally override stack limit checking by using the
10049 "no_stack_limit" function attribute.
10050
10051 -fsplit-stack
10052 Generate code to automatically split the stack before it overflows.
10053 The resulting program has a discontiguous stack which can only
10054 overflow if the program is unable to allocate any more memory.
10055 This is most useful when running threaded programs, as it is no
10056 longer necessary to calculate a good stack size to use for each
10057 thread. This is currently only implemented for the x86 targets
10058 running GNU/Linux.
10059
10060 When code compiled with -fsplit-stack calls code compiled without
10061 -fsplit-stack, there may not be much stack space available for the
10062 latter code to run. If compiling all code, including library code,
10063 with -fsplit-stack is not an option, then the linker can fix up
10064 these calls so that the code compiled without -fsplit-stack always
10065 has a large stack. Support for this is implemented in the gold
10066 linker in GNU binutils release 2.21 and later.
10067
10068 -fvtable-verify=[std|preinit|none]
10069 This option is only available when compiling C++ code. It turns on
10070 (or off, if using -fvtable-verify=none) the security feature that
10071 verifies at run time, for every virtual call, that the vtable
10072 pointer through which the call is made is valid for the type of the
10073 object, and has not been corrupted or overwritten. If an invalid
10074 vtable pointer is detected at run time, an error is reported and
10075 execution of the program is immediately halted.
10076
10077 This option causes run-time data structures to be built at program
10078 startup, which are used for verifying the vtable pointers. The
10079 options std and preinit control the timing of when these data
10080 structures are built. In both cases the data structures are built
10081 before execution reaches "main". Using -fvtable-verify=std causes
10082 the data structures to be built after shared libraries have been
10083 loaded and initialized. -fvtable-verify=preinit causes them to be
10084 built before shared libraries have been loaded and initialized.
10085
10086 If this option appears multiple times in the command line with
10087 different values specified, none takes highest priority over both
10088 std and preinit; preinit takes priority over std.
10089
10090 -fvtv-debug
10091 When used in conjunction with -fvtable-verify=std or
10092 -fvtable-verify=preinit, causes debug versions of the runtime
10093 functions for the vtable verification feature to be called. This
10094 flag also causes the compiler to log information about which vtable
10095 pointers it finds for each class. This information is written to a
10096 file named vtv_set_ptr_data.log in the directory named by the
10097 environment variable VTV_LOGS_DIR if that is defined or the current
10098 working directory otherwise.
10099
10100 Note: This feature appends data to the log file. If you want a
10101 fresh log file, be sure to delete any existing one.
10102
10103 -fvtv-counts
10104 This is a debugging flag. When used in conjunction with
10105 -fvtable-verify=std or -fvtable-verify=preinit, this causes the
10106 compiler to keep track of the total number of virtual calls it
10107 encounters and the number of verifications it inserts. It also
10108 counts the number of calls to certain run-time library functions
10109 that it inserts and logs this information for each compilation
10110 unit. The compiler writes this information to a file named
10111 vtv_count_data.log in the directory named by the environment
10112 variable VTV_LOGS_DIR if that is defined or the current working
10113 directory otherwise. It also counts the size of the vtable pointer
10114 sets for each class, and writes this information to
10115 vtv_class_set_sizes.log in the same directory.
10116
10117 Note: This feature appends data to the log files. To get fresh
10118 log files, be sure to delete any existing ones.
10119
10120 -finstrument-functions
10121 Generate instrumentation calls for entry and exit to functions.
10122 Just after function entry and just before function exit, the
10123 following profiling functions are called with the address of the
10124 current function and its call site. (On some platforms,
10125 "__builtin_return_address" does not work beyond the current
10126 function, so the call site information may not be available to the
10127 profiling functions otherwise.)
10128
10129 void __cyg_profile_func_enter (void *this_fn,
10130 void *call_site);
10131 void __cyg_profile_func_exit (void *this_fn,
10132 void *call_site);
10133
10134 The first argument is the address of the start of the current
10135 function, which may be looked up exactly in the symbol table.
10136
10137 This instrumentation is also done for functions expanded inline in
10138 other functions. The profiling calls indicate where, conceptually,
10139 the inline function is entered and exited. This means that
10140 addressable versions of such functions must be available. If all
10141 your uses of a function are expanded inline, this may mean an
10142 additional expansion of code size. If you use "extern inline" in
10143 your C code, an addressable version of such functions must be
10144 provided. (This is normally the case anyway, but if you get lucky
10145 and the optimizer always expands the functions inline, you might
10146 have gotten away without providing static copies.)
10147
10148 A function may be given the attribute "no_instrument_function", in
10149 which case this instrumentation is not done. This can be used, for
10150 example, for the profiling functions listed above, high-priority
10151 interrupt routines, and any functions from which the profiling
10152 functions cannot safely be called (perhaps signal handlers, if the
10153 profiling routines generate output or allocate memory).
10154
10155 -finstrument-functions-exclude-file-list=file,file,...
10156 Set the list of functions that are excluded from instrumentation
10157 (see the description of -finstrument-functions). If the file that
10158 contains a function definition matches with one of file, then that
10159 function is not instrumented. The match is done on substrings: if
10160 the file parameter is a substring of the file name, it is
10161 considered to be a match.
10162
10163 For example:
10164
10165 -finstrument-functions-exclude-file-list=/bits/stl,include/sys
10166
10167 excludes any inline function defined in files whose pathnames
10168 contain /bits/stl or include/sys.
10169
10170 If, for some reason, you want to include letter , in one of sym,
10171 write ,. For example,
10172 -finstrument-functions-exclude-file-list=',,tmp' (note the single
10173 quote surrounding the option).
10174
10175 -finstrument-functions-exclude-function-list=sym,sym,...
10176 This is similar to -finstrument-functions-exclude-file-list, but
10177 this option sets the list of function names to be excluded from
10178 instrumentation. The function name to be matched is its user-
10179 visible name, such as "vector<int> blah(const vector<int> &)", not
10180 the internal mangled name (e.g., "_Z4blahRSt6vectorIiSaIiEE"). The
10181 match is done on substrings: if the sym parameter is a substring of
10182 the function name, it is considered to be a match. For C99 and C++
10183 extended identifiers, the function name must be given in UTF-8, not
10184 using universal character names.
10185
10186 -fpatchable-function-entry=N[,M]
10187 Generate N NOPs right at the beginning of each function, with the
10188 function entry point before the Mth NOP. If M is omitted, it
10189 defaults to 0 so the function entry points to the address just at
10190 the first NOP. The NOP instructions reserve extra space which can
10191 be used to patch in any desired instrumentation at run time,
10192 provided that the code segment is writable. The amount of space is
10193 controllable indirectly via the number of NOPs; the NOP instruction
10194 used corresponds to the instruction emitted by the internal GCC
10195 back-end interface "gen_nop". This behavior is target-specific and
10196 may also depend on the architecture variant and/or other
10197 compilation options.
10198
10199 For run-time identification, the starting addresses of these areas,
10200 which correspond to their respective function entries minus M, are
10201 additionally collected in the "__patchable_function_entries"
10202 section of the resulting binary.
10203
10204 Note that the value of "__attribute__ ((patchable_function_entry
10205 (N,M)))" takes precedence over command-line option
10206 -fpatchable-function-entry=N,M. This can be used to increase the
10207 area size or to remove it completely on a single function. If
10208 "N=0", no pad location is recorded.
10209
10210 The NOP instructions are inserted at---and maybe before, depending
10211 on M---the function entry address, even before the prologue.
10212
10213 Options Controlling the Preprocessor
10214 These options control the C preprocessor, which is run on each C source
10215 file before actual compilation.
10216
10217 If you use the -E option, nothing is done except preprocessing. Some
10218 of these options make sense only together with -E because they cause
10219 the preprocessor output to be unsuitable for actual compilation.
10220
10221 In addition to the options listed here, there are a number of options
10222 to control search paths for include files documented in Directory
10223 Options. Options to control preprocessor diagnostics are listed in
10224 Warning Options.
10225
10226 -D name
10227 Predefine name as a macro, with definition 1.
10228
10229 -D name=definition
10230 The contents of definition are tokenized and processed as if they
10231 appeared during translation phase three in a #define directive. In
10232 particular, the definition is truncated by embedded newline
10233 characters.
10234
10235 If you are invoking the preprocessor from a shell or shell-like
10236 program you may need to use the shell's quoting syntax to protect
10237 characters such as spaces that have a meaning in the shell syntax.
10238
10239 If you wish to define a function-like macro on the command line,
10240 write its argument list with surrounding parentheses before the
10241 equals sign (if any). Parentheses are meaningful to most shells,
10242 so you should quote the option. With sh and csh,
10243 -D'name(args...)=definition' works.
10244
10245 -D and -U options are processed in the order they are given on the
10246 command line. All -imacros file and -include file options are
10247 processed after all -D and -U options.
10248
10249 -U name
10250 Cancel any previous definition of name, either built in or provided
10251 with a -D option.
10252
10253 -include file
10254 Process file as if "#include "file"" appeared as the first line of
10255 the primary source file. However, the first directory searched for
10256 file is the preprocessor's working directory instead of the
10257 directory containing the main source file. If not found there, it
10258 is searched for in the remainder of the "#include "..."" search
10259 chain as normal.
10260
10261 If multiple -include options are given, the files are included in
10262 the order they appear on the command line.
10263
10264 -imacros file
10265 Exactly like -include, except that any output produced by scanning
10266 file is thrown away. Macros it defines remain defined. This
10267 allows you to acquire all the macros from a header without also
10268 processing its declarations.
10269
10270 All files specified by -imacros are processed before all files
10271 specified by -include.
10272
10273 -undef
10274 Do not predefine any system-specific or GCC-specific macros. The
10275 standard predefined macros remain defined.
10276
10277 -pthread
10278 Define additional macros required for using the POSIX threads
10279 library. You should use this option consistently for both
10280 compilation and linking. This option is supported on GNU/Linux
10281 targets, most other Unix derivatives, and also on x86 Cygwin and
10282 MinGW targets.
10283
10284 -M Instead of outputting the result of preprocessing, output a rule
10285 suitable for make describing the dependencies of the main source
10286 file. The preprocessor outputs one make rule containing the object
10287 file name for that source file, a colon, and the names of all the
10288 included files, including those coming from -include or -imacros
10289 command-line options.
10290
10291 Unless specified explicitly (with -MT or -MQ), the object file name
10292 consists of the name of the source file with any suffix replaced
10293 with object file suffix and with any leading directory parts
10294 removed. If there are many included files then the rule is split
10295 into several lines using \-newline. The rule has no commands.
10296
10297 This option does not suppress the preprocessor's debug output, such
10298 as -dM. To avoid mixing such debug output with the dependency
10299 rules you should explicitly specify the dependency output file with
10300 -MF, or use an environment variable like DEPENDENCIES_OUTPUT.
10301 Debug output is still sent to the regular output stream as normal.
10302
10303 Passing -M to the driver implies -E, and suppresses warnings with
10304 an implicit -w.
10305
10306 -MM Like -M but do not mention header files that are found in system
10307 header directories, nor header files that are included, directly or
10308 indirectly, from such a header.
10309
10310 This implies that the choice of angle brackets or double quotes in
10311 an #include directive does not in itself determine whether that
10312 header appears in -MM dependency output.
10313
10314 -MF file
10315 When used with -M or -MM, specifies a file to write the
10316 dependencies to. If no -MF switch is given the preprocessor sends
10317 the rules to the same place it would send preprocessed output.
10318
10319 When used with the driver options -MD or -MMD, -MF overrides the
10320 default dependency output file.
10321
10322 If file is -, then the dependencies are written to stdout.
10323
10324 -MG In conjunction with an option such as -M requesting dependency
10325 generation, -MG assumes missing header files are generated files
10326 and adds them to the dependency list without raising an error. The
10327 dependency filename is taken directly from the "#include" directive
10328 without prepending any path. -MG also suppresses preprocessed
10329 output, as a missing header file renders this useless.
10330
10331 This feature is used in automatic updating of makefiles.
10332
10333 -MP This option instructs CPP to add a phony target for each dependency
10334 other than the main file, causing each to depend on nothing. These
10335 dummy rules work around errors make gives if you remove header
10336 files without updating the Makefile to match.
10337
10338 This is typical output:
10339
10340 test.o: test.c test.h
10341
10342 test.h:
10343
10344 -MT target
10345 Change the target of the rule emitted by dependency generation. By
10346 default CPP takes the name of the main input file, deletes any
10347 directory components and any file suffix such as .c, and appends
10348 the platform's usual object suffix. The result is the target.
10349
10350 An -MT option sets the target to be exactly the string you specify.
10351 If you want multiple targets, you can specify them as a single
10352 argument to -MT, or use multiple -MT options.
10353
10354 For example, -MT '$(objpfx)foo.o' might give
10355
10356 $(objpfx)foo.o: foo.c
10357
10358 -MQ target
10359 Same as -MT, but it quotes any characters which are special to
10360 Make. -MQ '$(objpfx)foo.o' gives
10361
10362 $$(objpfx)foo.o: foo.c
10363
10364 The default target is automatically quoted, as if it were given
10365 with -MQ.
10366
10367 -MD -MD is equivalent to -M -MF file, except that -E is not implied.
10368 The driver determines file based on whether an -o option is given.
10369 If it is, the driver uses its argument but with a suffix of .d,
10370 otherwise it takes the name of the input file, removes any
10371 directory components and suffix, and applies a .d suffix.
10372
10373 If -MD is used in conjunction with -E, any -o switch is understood
10374 to specify the dependency output file, but if used without -E, each
10375 -o is understood to specify a target object file.
10376
10377 Since -E is not implied, -MD can be used to generate a dependency
10378 output file as a side effect of the compilation process.
10379
10380 -MMD
10381 Like -MD except mention only user header files, not system header
10382 files.
10383
10384 -fpreprocessed
10385 Indicate to the preprocessor that the input file has already been
10386 preprocessed. This suppresses things like macro expansion,
10387 trigraph conversion, escaped newline splicing, and processing of
10388 most directives. The preprocessor still recognizes and removes
10389 comments, so that you can pass a file preprocessed with -C to the
10390 compiler without problems. In this mode the integrated
10391 preprocessor is little more than a tokenizer for the front ends.
10392
10393 -fpreprocessed is implicit if the input file has one of the
10394 extensions .i, .ii or .mi. These are the extensions that GCC uses
10395 for preprocessed files created by -save-temps.
10396
10397 -fdirectives-only
10398 When preprocessing, handle directives, but do not expand macros.
10399
10400 The option's behavior depends on the -E and -fpreprocessed options.
10401
10402 With -E, preprocessing is limited to the handling of directives
10403 such as "#define", "#ifdef", and "#error". Other preprocessor
10404 operations, such as macro expansion and trigraph conversion are not
10405 performed. In addition, the -dD option is implicitly enabled.
10406
10407 With -fpreprocessed, predefinition of command line and most builtin
10408 macros is disabled. Macros such as "__LINE__", which are
10409 contextually dependent, are handled normally. This enables
10410 compilation of files previously preprocessed with "-E
10411 -fdirectives-only".
10412
10413 With both -E and -fpreprocessed, the rules for -fpreprocessed take
10414 precedence. This enables full preprocessing of files previously
10415 preprocessed with "-E -fdirectives-only".
10416
10417 -fdollars-in-identifiers
10418 Accept $ in identifiers.
10419
10420 -fextended-identifiers
10421 Accept universal character names in identifiers. This option is
10422 enabled by default for C99 (and later C standard versions) and C++.
10423
10424 -fno-canonical-system-headers
10425 When preprocessing, do not shorten system header paths with
10426 canonicalization.
10427
10428 -ftabstop=width
10429 Set the distance between tab stops. This helps the preprocessor
10430 report correct column numbers in warnings or errors, even if tabs
10431 appear on the line. If the value is less than 1 or greater than
10432 100, the option is ignored. The default is 8.
10433
10434 -ftrack-macro-expansion[=level]
10435 Track locations of tokens across macro expansions. This allows the
10436 compiler to emit diagnostic about the current macro expansion stack
10437 when a compilation error occurs in a macro expansion. Using this
10438 option makes the preprocessor and the compiler consume more memory.
10439 The level parameter can be used to choose the level of precision of
10440 token location tracking thus decreasing the memory consumption if
10441 necessary. Value 0 of level de-activates this option. Value 1
10442 tracks tokens locations in a degraded mode for the sake of minimal
10443 memory overhead. In this mode all tokens resulting from the
10444 expansion of an argument of a function-like macro have the same
10445 location. Value 2 tracks tokens locations completely. This value is
10446 the most memory hungry. When this option is given no argument, the
10447 default parameter value is 2.
10448
10449 Note that "-ftrack-macro-expansion=2" is activated by default.
10450
10451 -fmacro-prefix-map=old=new
10452 When preprocessing files residing in directory old, expand the
10453 "__FILE__" and "__BASE_FILE__" macros as if the files resided in
10454 directory new instead. This can be used to change an absolute path
10455 to a relative path by using . for new which can result in more
10456 reproducible builds that are location independent. This option
10457 also affects "__builtin_FILE()" during compilation. See also
10458 -ffile-prefix-map.
10459
10460 -fexec-charset=charset
10461 Set the execution character set, used for string and character
10462 constants. The default is UTF-8. charset can be any encoding
10463 supported by the system's "iconv" library routine.
10464
10465 -fwide-exec-charset=charset
10466 Set the wide execution character set, used for wide string and
10467 character constants. The default is UTF-32 or UTF-16, whichever
10468 corresponds to the width of "wchar_t". As with -fexec-charset,
10469 charset can be any encoding supported by the system's "iconv"
10470 library routine; however, you will have problems with encodings
10471 that do not fit exactly in "wchar_t".
10472
10473 -finput-charset=charset
10474 Set the input character set, used for translation from the
10475 character set of the input file to the source character set used by
10476 GCC. If the locale does not specify, or GCC cannot get this
10477 information from the locale, the default is UTF-8. This can be
10478 overridden by either the locale or this command-line option.
10479 Currently the command-line option takes precedence if there's a
10480 conflict. charset can be any encoding supported by the system's
10481 "iconv" library routine.
10482
10483 -fpch-deps
10484 When using precompiled headers, this flag causes the dependency-
10485 output flags to also list the files from the precompiled header's
10486 dependencies. If not specified, only the precompiled header are
10487 listed and not the files that were used to create it, because those
10488 files are not consulted when a precompiled header is used.
10489
10490 -fpch-preprocess
10491 This option allows use of a precompiled header together with -E.
10492 It inserts a special "#pragma", "#pragma GCC pch_preprocess
10493 "filename"" in the output to mark the place where the precompiled
10494 header was found, and its filename. When -fpreprocessed is in use,
10495 GCC recognizes this "#pragma" and loads the PCH.
10496
10497 This option is off by default, because the resulting preprocessed
10498 output is only really suitable as input to GCC. It is switched on
10499 by -save-temps.
10500
10501 You should not write this "#pragma" in your own code, but it is
10502 safe to edit the filename if the PCH file is available in a
10503 different location. The filename may be absolute or it may be
10504 relative to GCC's current directory.
10505
10506 -fworking-directory
10507 Enable generation of linemarkers in the preprocessor output that
10508 let the compiler know the current working directory at the time of
10509 preprocessing. When this option is enabled, the preprocessor
10510 emits, after the initial linemarker, a second linemarker with the
10511 current working directory followed by two slashes. GCC uses this
10512 directory, when it's present in the preprocessed input, as the
10513 directory emitted as the current working directory in some
10514 debugging information formats. This option is implicitly enabled
10515 if debugging information is enabled, but this can be inhibited with
10516 the negated form -fno-working-directory. If the -P flag is present
10517 in the command line, this option has no effect, since no "#line"
10518 directives are emitted whatsoever.
10519
10520 -A predicate=answer
10521 Make an assertion with the predicate predicate and answer answer.
10522 This form is preferred to the older form -A predicate(answer),
10523 which is still supported, because it does not use shell special
10524 characters.
10525
10526 -A -predicate=answer
10527 Cancel an assertion with the predicate predicate and answer answer.
10528
10529 -C Do not discard comments. All comments are passed through to the
10530 output file, except for comments in processed directives, which are
10531 deleted along with the directive.
10532
10533 You should be prepared for side effects when using -C; it causes
10534 the preprocessor to treat comments as tokens in their own right.
10535 For example, comments appearing at the start of what would be a
10536 directive line have the effect of turning that line into an
10537 ordinary source line, since the first token on the line is no
10538 longer a #.
10539
10540 -CC Do not discard comments, including during macro expansion. This is
10541 like -C, except that comments contained within macros are also
10542 passed through to the output file where the macro is expanded.
10543
10544 In addition to the side effects of the -C option, the -CC option
10545 causes all C++-style comments inside a macro to be converted to
10546 C-style comments. This is to prevent later use of that macro from
10547 inadvertently commenting out the remainder of the source line.
10548
10549 The -CC option is generally used to support lint comments.
10550
10551 -P Inhibit generation of linemarkers in the output from the
10552 preprocessor. This might be useful when running the preprocessor
10553 on something that is not C code, and will be sent to a program
10554 which might be confused by the linemarkers.
10555
10556 -traditional
10557 -traditional-cpp
10558 Try to imitate the behavior of pre-standard C preprocessors, as
10559 opposed to ISO C preprocessors. See the GNU CPP manual for
10560 details.
10561
10562 Note that GCC does not otherwise attempt to emulate a pre-standard
10563 C compiler, and these options are only supported with the -E
10564 switch, or when invoking CPP explicitly.
10565
10566 -trigraphs
10567 Support ISO C trigraphs. These are three-character sequences, all
10568 starting with ??, that are defined by ISO C to stand for single
10569 characters. For example, ??/ stands for \, so '??/n' is a
10570 character constant for a newline.
10571
10572 The nine trigraphs and their replacements are
10573
10574 Trigraph: ??( ??) ??< ??> ??= ??/ ??' ??! ??-
10575 Replacement: [ ] { } # \ ^ | ~
10576
10577 By default, GCC ignores trigraphs, but in standard-conforming modes
10578 it converts them. See the -std and -ansi options.
10579
10580 -remap
10581 Enable special code to work around file systems which only permit
10582 very short file names, such as MS-DOS.
10583
10584 -H Print the name of each header file used, in addition to other
10585 normal activities. Each name is indented to show how deep in the
10586 #include stack it is. Precompiled header files are also printed,
10587 even if they are found to be invalid; an invalid precompiled header
10588 file is printed with ...x and a valid one with ...! .
10589
10590 -dletters
10591 Says to make debugging dumps during compilation as specified by
10592 letters. The flags documented here are those relevant to the
10593 preprocessor. Other letters are interpreted by the compiler
10594 proper, or reserved for future versions of GCC, and so are silently
10595 ignored. If you specify letters whose behavior conflicts, the
10596 result is undefined.
10597
10598 -dM Instead of the normal output, generate a list of #define
10599 directives for all the macros defined during the execution of
10600 the preprocessor, including predefined macros. This gives you
10601 a way of finding out what is predefined in your version of the
10602 preprocessor. Assuming you have no file foo.h, the command
10603
10604 touch foo.h; cpp -dM foo.h
10605
10606 shows all the predefined macros.
10607
10608 If you use -dM without the -E option, -dM is interpreted as a
10609 synonym for -fdump-rtl-mach.
10610
10611 -dD Like -dM except in two respects: it does not include the
10612 predefined macros, and it outputs both the #define directives
10613 and the result of preprocessing. Both kinds of output go to
10614 the standard output file.
10615
10616 -dN Like -dD, but emit only the macro names, not their expansions.
10617
10618 -dI Output #include directives in addition to the result of
10619 preprocessing.
10620
10621 -dU Like -dD except that only macros that are expanded, or whose
10622 definedness is tested in preprocessor directives, are output;
10623 the output is delayed until the use or test of the macro; and
10624 #undef directives are also output for macros tested but
10625 undefined at the time.
10626
10627 -fdebug-cpp
10628 This option is only useful for debugging GCC. When used from CPP
10629 or with -E, it dumps debugging information about location maps.
10630 Every token in the output is preceded by the dump of the map its
10631 location belongs to.
10632
10633 When used from GCC without -E, this option has no effect.
10634
10635 -Wp,option
10636 You can use -Wp,option to bypass the compiler driver and pass
10637 option directly through to the preprocessor. If option contains
10638 commas, it is split into multiple options at the commas. However,
10639 many options are modified, translated or interpreted by the
10640 compiler driver before being passed to the preprocessor, and -Wp
10641 forcibly bypasses this phase. The preprocessor's direct interface
10642 is undocumented and subject to change, so whenever possible you
10643 should avoid using -Wp and let the driver handle the options
10644 instead.
10645
10646 -Xpreprocessor option
10647 Pass option as an option to the preprocessor. You can use this to
10648 supply system-specific preprocessor options that GCC does not
10649 recognize.
10650
10651 If you want to pass an option that takes an argument, you must use
10652 -Xpreprocessor twice, once for the option and once for the
10653 argument.
10654
10655 -no-integrated-cpp
10656 Perform preprocessing as a separate pass before compilation. By
10657 default, GCC performs preprocessing as an integrated part of input
10658 tokenization and parsing. If this option is provided, the
10659 appropriate language front end (cc1, cc1plus, or cc1obj for C, C++,
10660 and Objective-C, respectively) is instead invoked twice, once for
10661 preprocessing only and once for actual compilation of the
10662 preprocessed input. This option may be useful in conjunction with
10663 the -B or -wrapper options to specify an alternate preprocessor or
10664 perform additional processing of the program source between normal
10665 preprocessing and compilation.
10666
10667 Passing Options to the Assembler
10668 You can pass options to the assembler.
10669
10670 -Wa,option
10671 Pass option as an option to the assembler. If option contains
10672 commas, it is split into multiple options at the commas.
10673
10674 -Xassembler option
10675 Pass option as an option to the assembler. You can use this to
10676 supply system-specific assembler options that GCC does not
10677 recognize.
10678
10679 If you want to pass an option that takes an argument, you must use
10680 -Xassembler twice, once for the option and once for the argument.
10681
10682 Options for Linking
10683 These options come into play when the compiler links object files into
10684 an executable output file. They are meaningless if the compiler is not
10685 doing a link step.
10686
10687 object-file-name
10688 A file name that does not end in a special recognized suffix is
10689 considered to name an object file or library. (Object files are
10690 distinguished from libraries by the linker according to the file
10691 contents.) If linking is done, these object files are used as
10692 input to the linker.
10693
10694 -c
10695 -S
10696 -E If any of these options is used, then the linker is not run, and
10697 object file names should not be used as arguments.
10698
10699 -fuse-ld=bfd
10700 Use the bfd linker instead of the default linker.
10701
10702 -fuse-ld=gold
10703 Use the gold linker instead of the default linker.
10704
10705 -llibrary
10706 -l library
10707 Search the library named library when linking. (The second
10708 alternative with the library as a separate argument is only for
10709 POSIX compliance and is not recommended.)
10710
10711 It makes a difference where in the command you write this option;
10712 the linker searches and processes libraries and object files in the
10713 order they are specified. Thus, foo.o -lz bar.o searches library z
10714 after file foo.o but before bar.o. If bar.o refers to functions in
10715 z, those functions may not be loaded.
10716
10717 The linker searches a standard list of directories for the library,
10718 which is actually a file named liblibrary.a. The linker then uses
10719 this file as if it had been specified precisely by name.
10720
10721 The directories searched include several standard system
10722 directories plus any that you specify with -L.
10723
10724 Normally the files found this way are library files---archive files
10725 whose members are object files. The linker handles an archive file
10726 by scanning through it for members which define symbols that have
10727 so far been referenced but not defined. But if the file that is
10728 found is an ordinary object file, it is linked in the usual
10729 fashion. The only difference between using an -l option and
10730 specifying a file name is that -l surrounds library with lib and .a
10731 and searches several directories.
10732
10733 -lobjc
10734 You need this special case of the -l option in order to link an
10735 Objective-C or Objective-C++ program.
10736
10737 -nostartfiles
10738 Do not use the standard system startup files when linking. The
10739 standard system libraries are used normally, unless -nostdlib or
10740 -nodefaultlibs is used.
10741
10742 -nodefaultlibs
10743 Do not use the standard system libraries when linking. Only the
10744 libraries you specify are passed to the linker, and options
10745 specifying linkage of the system libraries, such as -static-libgcc
10746 or -shared-libgcc, are ignored. The standard startup files are
10747 used normally, unless -nostartfiles is used.
10748
10749 The compiler may generate calls to "memcmp", "memset", "memcpy" and
10750 "memmove". These entries are usually resolved by entries in libc.
10751 These entry points should be supplied through some other mechanism
10752 when this option is specified.
10753
10754 -nostdlib
10755 Do not use the standard system startup files or libraries when
10756 linking. No startup files and only the libraries you specify are
10757 passed to the linker, and options specifying linkage of the system
10758 libraries, such as -static-libgcc or -shared-libgcc, are ignored.
10759
10760 The compiler may generate calls to "memcmp", "memset", "memcpy" and
10761 "memmove". These entries are usually resolved by entries in libc.
10762 These entry points should be supplied through some other mechanism
10763 when this option is specified.
10764
10765 One of the standard libraries bypassed by -nostdlib and
10766 -nodefaultlibs is libgcc.a, a library of internal subroutines which
10767 GCC uses to overcome shortcomings of particular machines, or
10768 special needs for some languages.
10769
10770 In most cases, you need libgcc.a even when you want to avoid other
10771 standard libraries. In other words, when you specify -nostdlib or
10772 -nodefaultlibs you should usually specify -lgcc as well. This
10773 ensures that you have no unresolved references to internal GCC
10774 library subroutines. (An example of such an internal subroutine is
10775 "__main", used to ensure C++ constructors are called.)
10776
10777 -pie
10778 Produce a dynamically linked position independent executable on
10779 targets that support it. For predictable results, you must also
10780 specify the same set of options used for compilation (-fpie, -fPIE,
10781 or model suboptions) when you specify this linker option.
10782
10783 -no-pie
10784 Don't produce a dynamically linked position independent executable.
10785
10786 -static-pie
10787 Produce a static position independent executable on targets that
10788 support it. A static position independent executable is similar to
10789 a static executable, but can be loaded at any address without a
10790 dynamic linker. For predictable results, you must also specify the
10791 same set of options used for compilation (-fpie, -fPIE, or model
10792 suboptions) when you specify this linker option.
10793
10794 -pthread
10795 Link with the POSIX threads library. This option is supported on
10796 GNU/Linux targets, most other Unix derivatives, and also on x86
10797 Cygwin and MinGW targets. On some targets this option also sets
10798 flags for the preprocessor, so it should be used consistently for
10799 both compilation and linking.
10800
10801 -rdynamic
10802 Pass the flag -export-dynamic to the ELF linker, on targets that
10803 support it. This instructs the linker to add all symbols, not only
10804 used ones, to the dynamic symbol table. This option is needed for
10805 some uses of "dlopen" or to allow obtaining backtraces from within
10806 a program.
10807
10808 -s Remove all symbol table and relocation information from the
10809 executable.
10810
10811 -static
10812 On systems that support dynamic linking, this overrides -pie and
10813 prevents linking with the shared libraries. On other systems, this
10814 option has no effect.
10815
10816 -shared
10817 Produce a shared object which can then be linked with other objects
10818 to form an executable. Not all systems support this option. For
10819 predictable results, you must also specify the same set of options
10820 used for compilation (-fpic, -fPIC, or model suboptions) when you
10821 specify this linker option.[1]
10822
10823 -shared-libgcc
10824 -static-libgcc
10825 On systems that provide libgcc as a shared library, these options
10826 force the use of either the shared or static version, respectively.
10827 If no shared version of libgcc was built when the compiler was
10828 configured, these options have no effect.
10829
10830 There are several situations in which an application should use the
10831 shared libgcc instead of the static version. The most common of
10832 these is when the application wishes to throw and catch exceptions
10833 across different shared libraries. In that case, each of the
10834 libraries as well as the application itself should use the shared
10835 libgcc.
10836
10837 Therefore, the G++ driver automatically adds -shared-libgcc
10838 whenever you build a shared library or a main executable, because
10839 C++ programs typically use exceptions, so this is the right thing
10840 to do.
10841
10842 If, instead, you use the GCC driver to create shared libraries, you
10843 may find that they are not always linked with the shared libgcc.
10844 If GCC finds, at its configuration time, that you have a non-GNU
10845 linker or a GNU linker that does not support option --eh-frame-hdr,
10846 it links the shared version of libgcc into shared libraries by
10847 default. Otherwise, it takes advantage of the linker and optimizes
10848 away the linking with the shared version of libgcc, linking with
10849 the static version of libgcc by default. This allows exceptions to
10850 propagate through such shared libraries, without incurring
10851 relocation costs at library load time.
10852
10853 However, if a library or main executable is supposed to throw or
10854 catch exceptions, you must link it using the G++ driver, or using
10855 the option -shared-libgcc, such that it is linked with the shared
10856 libgcc.
10857
10858 -static-libasan
10859 When the -fsanitize=address option is used to link a program, the
10860 GCC driver automatically links against libasan. If libasan is
10861 available as a shared library, and the -static option is not used,
10862 then this links against the shared version of libasan. The
10863 -static-libasan option directs the GCC driver to link libasan
10864 statically, without necessarily linking other libraries statically.
10865
10866 -static-libtsan
10867 When the -fsanitize=thread option is used to link a program, the
10868 GCC driver automatically links against libtsan. If libtsan is
10869 available as a shared library, and the -static option is not used,
10870 then this links against the shared version of libtsan. The
10871 -static-libtsan option directs the GCC driver to link libtsan
10872 statically, without necessarily linking other libraries statically.
10873
10874 -static-liblsan
10875 When the -fsanitize=leak option is used to link a program, the GCC
10876 driver automatically links against liblsan. If liblsan is
10877 available as a shared library, and the -static option is not used,
10878 then this links against the shared version of liblsan. The
10879 -static-liblsan option directs the GCC driver to link liblsan
10880 statically, without necessarily linking other libraries statically.
10881
10882 -static-libubsan
10883 When the -fsanitize=undefined option is used to link a program, the
10884 GCC driver automatically links against libubsan. If libubsan is
10885 available as a shared library, and the -static option is not used,
10886 then this links against the shared version of libubsan. The
10887 -static-libubsan option directs the GCC driver to link libubsan
10888 statically, without necessarily linking other libraries statically.
10889
10890 -static-libmpx
10891 When the -fcheck-pointer bounds and -mmpx options are used to link
10892 a program, the GCC driver automatically links against libmpx. If
10893 libmpx is available as a shared library, and the -static option is
10894 not used, then this links against the shared version of libmpx.
10895 The -static-libmpx option directs the GCC driver to link libmpx
10896 statically, without necessarily linking other libraries statically.
10897
10898 -static-libmpxwrappers
10899 When the -fcheck-pointer bounds and -mmpx options are used to link
10900 a program without also using -fno-chkp-use-wrappers, the GCC driver
10901 automatically links against libmpxwrappers. If libmpxwrappers is
10902 available as a shared library, and the -static option is not used,
10903 then this links against the shared version of libmpxwrappers. The
10904 -static-libmpxwrappers option directs the GCC driver to link
10905 libmpxwrappers statically, without necessarily linking other
10906 libraries statically.
10907
10908 -static-libstdc++
10909 When the g++ program is used to link a C++ program, it normally
10910 automatically links against libstdc++. If libstdc++ is available
10911 as a shared library, and the -static option is not used, then this
10912 links against the shared version of libstdc++. That is normally
10913 fine. However, it is sometimes useful to freeze the version of
10914 libstdc++ used by the program without going all the way to a fully
10915 static link. The -static-libstdc++ option directs the g++ driver
10916 to link libstdc++ statically, without necessarily linking other
10917 libraries statically.
10918
10919 -symbolic
10920 Bind references to global symbols when building a shared object.
10921 Warn about any unresolved references (unless overridden by the link
10922 editor option -Xlinker -z -Xlinker defs). Only a few systems
10923 support this option.
10924
10925 -T script
10926 Use script as the linker script. This option is supported by most
10927 systems using the GNU linker. On some targets, such as bare-board
10928 targets without an operating system, the -T option may be required
10929 when linking to avoid references to undefined symbols.
10930
10931 -Xlinker option
10932 Pass option as an option to the linker. You can use this to supply
10933 system-specific linker options that GCC does not recognize.
10934
10935 If you want to pass an option that takes a separate argument, you
10936 must use -Xlinker twice, once for the option and once for the
10937 argument. For example, to pass -assert definitions, you must write
10938 -Xlinker -assert -Xlinker definitions. It does not work to write
10939 -Xlinker "-assert definitions", because this passes the entire
10940 string as a single argument, which is not what the linker expects.
10941
10942 When using the GNU linker, it is usually more convenient to pass
10943 arguments to linker options using the option=value syntax than as
10944 separate arguments. For example, you can specify -Xlinker
10945 -Map=output.map rather than -Xlinker -Map -Xlinker output.map.
10946 Other linkers may not support this syntax for command-line options.
10947
10948 -Wl,option
10949 Pass option as an option to the linker. If option contains commas,
10950 it is split into multiple options at the commas. You can use this
10951 syntax to pass an argument to the option. For example,
10952 -Wl,-Map,output.map passes -Map output.map to the linker. When
10953 using the GNU linker, you can also get the same effect with
10954 -Wl,-Map=output.map.
10955
10956 -u symbol
10957 Pretend the symbol symbol is undefined, to force linking of library
10958 modules to define it. You can use -u multiple times with different
10959 symbols to force loading of additional library modules.
10960
10961 -z keyword
10962 -z is passed directly on to the linker along with the keyword
10963 keyword. See the section in the documentation of your linker for
10964 permitted values and their meanings.
10965
10966 Options for Directory Search
10967 These options specify directories to search for header files, for
10968 libraries and for parts of the compiler:
10969
10970 -I dir
10971 -iquote dir
10972 -isystem dir
10973 -idirafter dir
10974 Add the directory dir to the list of directories to be searched for
10975 header files during preprocessing. If dir begins with = or
10976 $SYSROOT, then the = or $SYSROOT is replaced by the sysroot prefix;
10977 see --sysroot and -isysroot.
10978
10979 Directories specified with -iquote apply only to the quote form of
10980 the directive, "#include "file"". Directories specified with -I,
10981 -isystem, or -idirafter apply to lookup for both the
10982 "#include "file"" and "#include <file>" directives.
10983
10984 You can specify any number or combination of these options on the
10985 command line to search for header files in several directories.
10986 The lookup order is as follows:
10987
10988 1. For the quote form of the include directive, the directory of
10989 the current file is searched first.
10990
10991 2. For the quote form of the include directive, the directories
10992 specified by -iquote options are searched in left-to-right
10993 order, as they appear on the command line.
10994
10995 3. Directories specified with -I options are scanned in left-to-
10996 right order.
10997
10998 4. Directories specified with -isystem options are scanned in
10999 left-to-right order.
11000
11001 5. Standard system directories are scanned.
11002
11003 6. Directories specified with -idirafter options are scanned in
11004 left-to-right order.
11005
11006 You can use -I to override a system header file, substituting your
11007 own version, since these directories are searched before the
11008 standard system header file directories. However, you should not
11009 use this option to add directories that contain vendor-supplied
11010 system header files; use -isystem for that.
11011
11012 The -isystem and -idirafter options also mark the directory as a
11013 system directory, so that it gets the same special treatment that
11014 is applied to the standard system directories.
11015
11016 If a standard system include directory, or a directory specified
11017 with -isystem, is also specified with -I, the -I option is ignored.
11018 The directory is still searched but as a system directory at its
11019 normal position in the system include chain. This is to ensure
11020 that GCC's procedure to fix buggy system headers and the ordering
11021 for the "#include_next" directive are not inadvertently changed.
11022 If you really need to change the search order for system
11023 directories, use the -nostdinc and/or -isystem options.
11024
11025 -I- Split the include path. This option has been deprecated. Please
11026 use -iquote instead for -I directories before the -I- and remove
11027 the -I- option.
11028
11029 Any directories specified with -I options before -I- are searched
11030 only for headers requested with "#include "file""; they are not
11031 searched for "#include <file>". If additional directories are
11032 specified with -I options after the -I-, those directories are
11033 searched for all #include directives.
11034
11035 In addition, -I- inhibits the use of the directory of the current
11036 file directory as the first search directory for "#include "file"".
11037 There is no way to override this effect of -I-.
11038
11039 -iprefix prefix
11040 Specify prefix as the prefix for subsequent -iwithprefix options.
11041 If the prefix represents a directory, you should include the final
11042 /.
11043
11044 -iwithprefix dir
11045 -iwithprefixbefore dir
11046 Append dir to the prefix specified previously with -iprefix, and
11047 add the resulting directory to the include search path.
11048 -iwithprefixbefore puts it in the same place -I would; -iwithprefix
11049 puts it where -idirafter would.
11050
11051 -isysroot dir
11052 This option is like the --sysroot option, but applies only to
11053 header files (except for Darwin targets, where it applies to both
11054 header files and libraries). See the --sysroot option for more
11055 information.
11056
11057 -imultilib dir
11058 Use dir as a subdirectory of the directory containing target-
11059 specific C++ headers.
11060
11061 -nostdinc
11062 Do not search the standard system directories for header files.
11063 Only the directories explicitly specified with -I, -iquote,
11064 -isystem, and/or -idirafter options (and the directory of the
11065 current file, if appropriate) are searched.
11066
11067 -nostdinc++
11068 Do not search for header files in the C++-specific standard
11069 directories, but do still search the other standard directories.
11070 (This option is used when building the C++ library.)
11071
11072 -iplugindir=dir
11073 Set the directory to search for plugins that are passed by
11074 -fplugin=name instead of -fplugin=path/name.so. This option is not
11075 meant to be used by the user, but only passed by the driver.
11076
11077 -Ldir
11078 Add directory dir to the list of directories to be searched for -l.
11079
11080 -Bprefix
11081 This option specifies where to find the executables, libraries,
11082 include files, and data files of the compiler itself.
11083
11084 The compiler driver program runs one or more of the subprograms
11085 cpp, cc1, as and ld. It tries prefix as a prefix for each program
11086 it tries to run, both with and without machine/version/ for the
11087 corresponding target machine and compiler version.
11088
11089 For each subprogram to be run, the compiler driver first tries the
11090 -B prefix, if any. If that name is not found, or if -B is not
11091 specified, the driver tries two standard prefixes, /usr/lib/gcc/
11092 and /usr/local/lib/gcc/. If neither of those results in a file
11093 name that is found, the unmodified program name is searched for
11094 using the directories specified in your PATH environment variable.
11095
11096 The compiler checks to see if the path provided by -B refers to a
11097 directory, and if necessary it adds a directory separator character
11098 at the end of the path.
11099
11100 -B prefixes that effectively specify directory names also apply to
11101 libraries in the linker, because the compiler translates these
11102 options into -L options for the linker. They also apply to include
11103 files in the preprocessor, because the compiler translates these
11104 options into -isystem options for the preprocessor. In this case,
11105 the compiler appends include to the prefix.
11106
11107 The runtime support file libgcc.a can also be searched for using
11108 the -B prefix, if needed. If it is not found there, the two
11109 standard prefixes above are tried, and that is all. The file is
11110 left out of the link if it is not found by those means.
11111
11112 Another way to specify a prefix much like the -B prefix is to use
11113 the environment variable GCC_EXEC_PREFIX.
11114
11115 As a special kludge, if the path provided by -B is [dir/]stageN/,
11116 where N is a number in the range 0 to 9, then it is replaced by
11117 [dir/]include. This is to help with boot-strapping the compiler.
11118
11119 -no-canonical-prefixes
11120 Do not expand any symbolic links, resolve references to /../ or
11121 /./, or make the path absolute when generating a relative prefix.
11122
11123 --sysroot=dir
11124 Use dir as the logical root directory for headers and libraries.
11125 For example, if the compiler normally searches for headers in
11126 /usr/include and libraries in /usr/lib, it instead searches
11127 dir/usr/include and dir/usr/lib.
11128
11129 If you use both this option and the -isysroot option, then the
11130 --sysroot option applies to libraries, but the -isysroot option
11131 applies to header files.
11132
11133 The GNU linker (beginning with version 2.16) has the necessary
11134 support for this option. If your linker does not support this
11135 option, the header file aspect of --sysroot still works, but the
11136 library aspect does not.
11137
11138 --no-sysroot-suffix
11139 For some targets, a suffix is added to the root directory specified
11140 with --sysroot, depending on the other options used, so that
11141 headers may for example be found in dir/suffix/usr/include instead
11142 of dir/usr/include. This option disables the addition of such a
11143 suffix.
11144
11145 Options for Code Generation Conventions
11146 These machine-independent options control the interface conventions
11147 used in code generation.
11148
11149 Most of them have both positive and negative forms; the negative form
11150 of -ffoo is -fno-foo. In the table below, only one of the forms is
11151 listed---the one that is not the default. You can figure out the other
11152 form by either removing no- or adding it.
11153
11154 -fstack-reuse=reuse-level
11155 This option controls stack space reuse for user declared local/auto
11156 variables and compiler generated temporaries. reuse_level can be
11157 all, named_vars, or none. all enables stack reuse for all local
11158 variables and temporaries, named_vars enables the reuse only for
11159 user defined local variables with names, and none disables stack
11160 reuse completely. The default value is all. The option is needed
11161 when the program extends the lifetime of a scoped local variable or
11162 a compiler generated temporary beyond the end point defined by the
11163 language. When a lifetime of a variable ends, and if the variable
11164 lives in memory, the optimizing compiler has the freedom to reuse
11165 its stack space with other temporaries or scoped local variables
11166 whose live range does not overlap with it. Legacy code extending
11167 local lifetime is likely to break with the stack reuse
11168 optimization.
11169
11170 For example,
11171
11172 int *p;
11173 {
11174 int local1;
11175
11176 p = &local1;
11177 local1 = 10;
11178 ....
11179 }
11180 {
11181 int local2;
11182 local2 = 20;
11183 ...
11184 }
11185
11186 if (*p == 10) // out of scope use of local1
11187 {
11188
11189 }
11190
11191 Another example:
11192
11193 struct A
11194 {
11195 A(int k) : i(k), j(k) { }
11196 int i;
11197 int j;
11198 };
11199
11200 A *ap;
11201
11202 void foo(const A& ar)
11203 {
11204 ap = &ar;
11205 }
11206
11207 void bar()
11208 {
11209 foo(A(10)); // temp object's lifetime ends when foo returns
11210
11211 {
11212 A a(20);
11213 ....
11214 }
11215 ap->i+= 10; // ap references out of scope temp whose space
11216 // is reused with a. What is the value of ap->i?
11217 }
11218
11219 The lifetime of a compiler generated temporary is well defined by
11220 the C++ standard. When a lifetime of a temporary ends, and if the
11221 temporary lives in memory, the optimizing compiler has the freedom
11222 to reuse its stack space with other temporaries or scoped local
11223 variables whose live range does not overlap with it. However some
11224 of the legacy code relies on the behavior of older compilers in
11225 which temporaries' stack space is not reused, the aggressive stack
11226 reuse can lead to runtime errors. This option is used to control
11227 the temporary stack reuse optimization.
11228
11229 -ftrapv
11230 This option generates traps for signed overflow on addition,
11231 subtraction, multiplication operations. The options -ftrapv and
11232 -fwrapv override each other, so using -ftrapv -fwrapv on the
11233 command-line results in -fwrapv being effective. Note that only
11234 active options override, so using -ftrapv -fwrapv -fno-wrapv on the
11235 command-line results in -ftrapv being effective.
11236
11237 -fwrapv
11238 This option instructs the compiler to assume that signed arithmetic
11239 overflow of addition, subtraction and multiplication wraps around
11240 using twos-complement representation. This flag enables some
11241 optimizations and disables others. The options -ftrapv and -fwrapv
11242 override each other, so using -ftrapv -fwrapv on the command-line
11243 results in -fwrapv being effective. Note that only active options
11244 override, so using -ftrapv -fwrapv -fno-wrapv on the command-line
11245 results in -ftrapv being effective.
11246
11247 -fwrapv-pointer
11248 This option instructs the compiler to assume that pointer
11249 arithmetic overflow on addition and subtraction wraps around using
11250 twos-complement representation. This flag disables some
11251 optimizations which assume pointer overflow is invalid.
11252
11253 -fstrict-overflow
11254 This option implies -fno-wrapv -fno-wrapv-pointer and when negated
11255 implies -fwrapv -fwrapv-pointer.
11256
11257 -fexceptions
11258 Enable exception handling. Generates extra code needed to
11259 propagate exceptions. For some targets, this implies GCC generates
11260 frame unwind information for all functions, which can produce
11261 significant data size overhead, although it does not affect
11262 execution. If you do not specify this option, GCC enables it by
11263 default for languages like C++ that normally require exception
11264 handling, and disables it for languages like C that do not normally
11265 require it. However, you may need to enable this option when
11266 compiling C code that needs to interoperate properly with exception
11267 handlers written in C++. You may also wish to disable this option
11268 if you are compiling older C++ programs that don't use exception
11269 handling.
11270
11271 -fnon-call-exceptions
11272 Generate code that allows trapping instructions to throw
11273 exceptions. Note that this requires platform-specific runtime
11274 support that does not exist everywhere. Moreover, it only allows
11275 trapping instructions to throw exceptions, i.e. memory references
11276 or floating-point instructions. It does not allow exceptions to be
11277 thrown from arbitrary signal handlers such as "SIGALRM".
11278
11279 -fdelete-dead-exceptions
11280 Consider that instructions that may throw exceptions but don't
11281 otherwise contribute to the execution of the program can be
11282 optimized away. This option is enabled by default for the Ada
11283 front end, as permitted by the Ada language specification.
11284 Optimization passes that cause dead exceptions to be removed are
11285 enabled independently at different optimization levels.
11286
11287 -funwind-tables
11288 Similar to -fexceptions, except that it just generates any needed
11289 static data, but does not affect the generated code in any other
11290 way. You normally do not need to enable this option; instead, a
11291 language processor that needs this handling enables it on your
11292 behalf.
11293
11294 -fasynchronous-unwind-tables
11295 Generate unwind table in DWARF format, if supported by target
11296 machine. The table is exact at each instruction boundary, so it
11297 can be used for stack unwinding from asynchronous events (such as
11298 debugger or garbage collector).
11299
11300 -fno-gnu-unique
11301 On systems with recent GNU assembler and C library, the C++
11302 compiler uses the "STB_GNU_UNIQUE" binding to make sure that
11303 definitions of template static data members and static local
11304 variables in inline functions are unique even in the presence of
11305 "RTLD_LOCAL"; this is necessary to avoid problems with a library
11306 used by two different "RTLD_LOCAL" plugins depending on a
11307 definition in one of them and therefore disagreeing with the other
11308 one about the binding of the symbol. But this causes "dlclose" to
11309 be ignored for affected DSOs; if your program relies on
11310 reinitialization of a DSO via "dlclose" and "dlopen", you can use
11311 -fno-gnu-unique.
11312
11313 -fpcc-struct-return
11314 Return "short" "struct" and "union" values in memory like longer
11315 ones, rather than in registers. This convention is less efficient,
11316 but it has the advantage of allowing intercallability between GCC-
11317 compiled files and files compiled with other compilers,
11318 particularly the Portable C Compiler (pcc).
11319
11320 The precise convention for returning structures in memory depends
11321 on the target configuration macros.
11322
11323 Short structures and unions are those whose size and alignment
11324 match that of some integer type.
11325
11326 Warning: code compiled with the -fpcc-struct-return switch is not
11327 binary compatible with code compiled with the -freg-struct-return
11328 switch. Use it to conform to a non-default application binary
11329 interface.
11330
11331 -freg-struct-return
11332 Return "struct" and "union" values in registers when possible.
11333 This is more efficient for small structures than
11334 -fpcc-struct-return.
11335
11336 If you specify neither -fpcc-struct-return nor -freg-struct-return,
11337 GCC defaults to whichever convention is standard for the target.
11338 If there is no standard convention, GCC defaults to
11339 -fpcc-struct-return, except on targets where GCC is the principal
11340 compiler. In those cases, we can choose the standard, and we chose
11341 the more efficient register return alternative.
11342
11343 Warning: code compiled with the -freg-struct-return switch is not
11344 binary compatible with code compiled with the -fpcc-struct-return
11345 switch. Use it to conform to a non-default application binary
11346 interface.
11347
11348 -fshort-enums
11349 Allocate to an "enum" type only as many bytes as it needs for the
11350 declared range of possible values. Specifically, the "enum" type
11351 is equivalent to the smallest integer type that has enough room.
11352
11353 Warning: the -fshort-enums switch causes GCC to generate code that
11354 is not binary compatible with code generated without that switch.
11355 Use it to conform to a non-default application binary interface.
11356
11357 -fshort-wchar
11358 Override the underlying type for "wchar_t" to be "short unsigned
11359 int" instead of the default for the target. This option is useful
11360 for building programs to run under WINE.
11361
11362 Warning: the -fshort-wchar switch causes GCC to generate code that
11363 is not binary compatible with code generated without that switch.
11364 Use it to conform to a non-default application binary interface.
11365
11366 -fno-common
11367 In C code, this option controls the placement of global variables
11368 defined without an initializer, known as tentative definitions in
11369 the C standard. Tentative definitions are distinct from
11370 declarations of a variable with the "extern" keyword, which do not
11371 allocate storage.
11372
11373 Unix C compilers have traditionally allocated storage for
11374 uninitialized global variables in a common block. This allows the
11375 linker to resolve all tentative definitions of the same variable in
11376 different compilation units to the same object, or to a non-
11377 tentative definition. This is the behavior specified by -fcommon,
11378 and is the default for GCC on most targets. On the other hand,
11379 this behavior is not required by ISO C, and on some targets may
11380 carry a speed or code size penalty on variable references.
11381
11382 The -fno-common option specifies that the compiler should instead
11383 place uninitialized global variables in the data section of the
11384 object file. This inhibits the merging of tentative definitions by
11385 the linker so you get a multiple-definition error if the same
11386 variable is defined in more than one compilation unit. Compiling
11387 with -fno-common is useful on targets for which it provides better
11388 performance, or if you wish to verify that the program will work on
11389 other systems that always treat uninitialized variable definitions
11390 this way.
11391
11392 -fno-ident
11393 Ignore the "#ident" directive.
11394
11395 -finhibit-size-directive
11396 Don't output a ".size" assembler directive, or anything else that
11397 would cause trouble if the function is split in the middle, and the
11398 two halves are placed at locations far apart in memory. This
11399 option is used when compiling crtstuff.c; you should not need to
11400 use it for anything else.
11401
11402 -fverbose-asm
11403 Put extra commentary information in the generated assembly code to
11404 make it more readable. This option is generally only of use to
11405 those who actually need to read the generated assembly code
11406 (perhaps while debugging the compiler itself).
11407
11408 -fno-verbose-asm, the default, causes the extra information to be
11409 omitted and is useful when comparing two assembler files.
11410
11411 The added comments include:
11412
11413 * information on the compiler version and command-line options,
11414
11415 * the source code lines associated with the assembly
11416 instructions, in the form FILENAME:LINENUMBER:CONTENT OF LINE,
11417
11418 * hints on which high-level expressions correspond to the various
11419 assembly instruction operands.
11420
11421 For example, given this C source file:
11422
11423 int test (int n)
11424 {
11425 int i;
11426 int total = 0;
11427
11428 for (i = 0; i < n; i++)
11429 total += i * i;
11430
11431 return total;
11432 }
11433
11434 compiling to (x86_64) assembly via -S and emitting the result
11435 direct to stdout via -o -
11436
11437 gcc -S test.c -fverbose-asm -Os -o -
11438
11439 gives output similar to this:
11440
11441 .file "test.c"
11442 # GNU C11 (GCC) version 7.0.0 20160809 (experimental) (x86_64-pc-linux-gnu)
11443 [...snip...]
11444 # options passed:
11445 [...snip...]
11446
11447 .text
11448 .globl test
11449 .type test, @function
11450 test:
11451 .LFB0:
11452 .cfi_startproc
11453 # test.c:4: int total = 0;
11454 xorl %eax, %eax # <retval>
11455 # test.c:6: for (i = 0; i < n; i++)
11456 xorl %edx, %edx # i
11457 .L2:
11458 # test.c:6: for (i = 0; i < n; i++)
11459 cmpl %edi, %edx # n, i
11460 jge .L5 #,
11461 # test.c:7: total += i * i;
11462 movl %edx, %ecx # i, tmp92
11463 imull %edx, %ecx # i, tmp92
11464 # test.c:6: for (i = 0; i < n; i++)
11465 incl %edx # i
11466 # test.c:7: total += i * i;
11467 addl %ecx, %eax # tmp92, <retval>
11468 jmp .L2 #
11469 .L5:
11470 # test.c:10: }
11471 ret
11472 .cfi_endproc
11473 .LFE0:
11474 .size test, .-test
11475 .ident "GCC: (GNU) 7.0.0 20160809 (experimental)"
11476 .section .note.GNU-stack,"",@progbits
11477
11478 The comments are intended for humans rather than machines and hence
11479 the precise format of the comments is subject to change.
11480
11481 -frecord-gcc-switches
11482 This switch causes the command line used to invoke the compiler to
11483 be recorded into the object file that is being created. This
11484 switch is only implemented on some targets and the exact format of
11485 the recording is target and binary file format dependent, but it
11486 usually takes the form of a section containing ASCII text. This
11487 switch is related to the -fverbose-asm switch, but that switch only
11488 records information in the assembler output file as comments, so it
11489 never reaches the object file. See also -grecord-gcc-switches for
11490 another way of storing compiler options into the object file.
11491
11492 -fpic
11493 Generate position-independent code (PIC) suitable for use in a
11494 shared library, if supported for the target machine. Such code
11495 accesses all constant addresses through a global offset table
11496 (GOT). The dynamic loader resolves the GOT entries when the
11497 program starts (the dynamic loader is not part of GCC; it is part
11498 of the operating system). If the GOT size for the linked
11499 executable exceeds a machine-specific maximum size, you get an
11500 error message from the linker indicating that -fpic does not work;
11501 in that case, recompile with -fPIC instead. (These maximums are 8k
11502 on the SPARC, 28k on AArch64 and 32k on the m68k and RS/6000. The
11503 x86 has no such limit.)
11504
11505 Position-independent code requires special support, and therefore
11506 works only on certain machines. For the x86, GCC supports PIC for
11507 System V but not for the Sun 386i. Code generated for the IBM
11508 RS/6000 is always position-independent.
11509
11510 When this flag is set, the macros "__pic__" and "__PIC__" are
11511 defined to 1.
11512
11513 -fPIC
11514 If supported for the target machine, emit position-independent
11515 code, suitable for dynamic linking and avoiding any limit on the
11516 size of the global offset table. This option makes a difference on
11517 AArch64, m68k, PowerPC and SPARC.
11518
11519 Position-independent code requires special support, and therefore
11520 works only on certain machines.
11521
11522 When this flag is set, the macros "__pic__" and "__PIC__" are
11523 defined to 2.
11524
11525 -fpie
11526 -fPIE
11527 These options are similar to -fpic and -fPIC, but generated
11528 position independent code can be only linked into executables.
11529 Usually these options are used when -pie GCC option is used during
11530 linking.
11531
11532 -fpie and -fPIE both define the macros "__pie__" and "__PIE__".
11533 The macros have the value 1 for -fpie and 2 for -fPIE.
11534
11535 -fno-plt
11536 Do not use the PLT for external function calls in position-
11537 independent code. Instead, load the callee address at call sites
11538 from the GOT and branch to it. This leads to more efficient code
11539 by eliminating PLT stubs and exposing GOT loads to optimizations.
11540 On architectures such as 32-bit x86 where PLT stubs expect the GOT
11541 pointer in a specific register, this gives more register allocation
11542 freedom to the compiler. Lazy binding requires use of the PLT;
11543 with -fno-plt all external symbols are resolved at load time.
11544
11545 Alternatively, the function attribute "noplt" can be used to avoid
11546 calls through the PLT for specific external functions.
11547
11548 In position-dependent code, a few targets also convert calls to
11549 functions that are marked to not use the PLT to use the GOT
11550 instead.
11551
11552 -fno-jump-tables
11553 Do not use jump tables for switch statements even where it would be
11554 more efficient than other code generation strategies. This option
11555 is of use in conjunction with -fpic or -fPIC for building code that
11556 forms part of a dynamic linker and cannot reference the address of
11557 a jump table. On some targets, jump tables do not require a GOT
11558 and this option is not needed.
11559
11560 -ffixed-reg
11561 Treat the register named reg as a fixed register; generated code
11562 should never refer to it (except perhaps as a stack pointer, frame
11563 pointer or in some other fixed role).
11564
11565 reg must be the name of a register. The register names accepted
11566 are machine-specific and are defined in the "REGISTER_NAMES" macro
11567 in the machine description macro file.
11568
11569 This flag does not have a negative form, because it specifies a
11570 three-way choice.
11571
11572 -fcall-used-reg
11573 Treat the register named reg as an allocable register that is
11574 clobbered by function calls. It may be allocated for temporaries
11575 or variables that do not live across a call. Functions compiled
11576 this way do not save and restore the register reg.
11577
11578 It is an error to use this flag with the frame pointer or stack
11579 pointer. Use of this flag for other registers that have fixed
11580 pervasive roles in the machine's execution model produces
11581 disastrous results.
11582
11583 This flag does not have a negative form, because it specifies a
11584 three-way choice.
11585
11586 -fcall-saved-reg
11587 Treat the register named reg as an allocable register saved by
11588 functions. It may be allocated even for temporaries or variables
11589 that live across a call. Functions compiled this way save and
11590 restore the register reg if they use it.
11591
11592 It is an error to use this flag with the frame pointer or stack
11593 pointer. Use of this flag for other registers that have fixed
11594 pervasive roles in the machine's execution model produces
11595 disastrous results.
11596
11597 A different sort of disaster results from the use of this flag for
11598 a register in which function values may be returned.
11599
11600 This flag does not have a negative form, because it specifies a
11601 three-way choice.
11602
11603 -fpack-struct[=n]
11604 Without a value specified, pack all structure members together
11605 without holes. When a value is specified (which must be a small
11606 power of two), pack structure members according to this value,
11607 representing the maximum alignment (that is, objects with default
11608 alignment requirements larger than this are output potentially
11609 unaligned at the next fitting location.
11610
11611 Warning: the -fpack-struct switch causes GCC to generate code that
11612 is not binary compatible with code generated without that switch.
11613 Additionally, it makes the code suboptimal. Use it to conform to a
11614 non-default application binary interface.
11615
11616 -fleading-underscore
11617 This option and its counterpart, -fno-leading-underscore, forcibly
11618 change the way C symbols are represented in the object file. One
11619 use is to help link with legacy assembly code.
11620
11621 Warning: the -fleading-underscore switch causes GCC to generate
11622 code that is not binary compatible with code generated without that
11623 switch. Use it to conform to a non-default application binary
11624 interface. Not all targets provide complete support for this
11625 switch.
11626
11627 -ftls-model=model
11628 Alter the thread-local storage model to be used. The model
11629 argument should be one of global-dynamic, local-dynamic, initial-
11630 exec or local-exec. Note that the choice is subject to
11631 optimization: the compiler may use a more efficient model for
11632 symbols not visible outside of the translation unit, or if -fpic is
11633 not given on the command line.
11634
11635 The default without -fpic is initial-exec; with -fpic the default
11636 is global-dynamic.
11637
11638 -ftrampolines
11639 For targets that normally need trampolines for nested functions,
11640 always generate them instead of using descriptors. Otherwise, for
11641 targets that do not need them, like for example HP-PA or IA-64, do
11642 nothing.
11643
11644 A trampoline is a small piece of code that is created at run time
11645 on the stack when the address of a nested function is taken, and is
11646 used to call the nested function indirectly. Therefore, it
11647 requires the stack to be made executable in order for the program
11648 to work properly.
11649
11650 -fno-trampolines is enabled by default on a language by language
11651 basis to let the compiler avoid generating them, if it computes
11652 that this is safe, and replace them with descriptors. Descriptors
11653 are made up of data only, but the generated code must be prepared
11654 to deal with them. As of this writing, -fno-trampolines is enabled
11655 by default only for Ada.
11656
11657 Moreover, code compiled with -ftrampolines and code compiled with
11658 -fno-trampolines are not binary compatible if nested functions are
11659 present. This option must therefore be used on a program-wide
11660 basis and be manipulated with extreme care.
11661
11662 -fvisibility=[default|internal|hidden|protected]
11663 Set the default ELF image symbol visibility to the specified
11664 option---all symbols are marked with this unless overridden within
11665 the code. Using this feature can very substantially improve
11666 linking and load times of shared object libraries, produce more
11667 optimized code, provide near-perfect API export and prevent symbol
11668 clashes. It is strongly recommended that you use this in any
11669 shared objects you distribute.
11670
11671 Despite the nomenclature, default always means public; i.e.,
11672 available to be linked against from outside the shared object.
11673 protected and internal are pretty useless in real-world usage so
11674 the only other commonly used option is hidden. The default if
11675 -fvisibility isn't specified is default, i.e., make every symbol
11676 public.
11677
11678 A good explanation of the benefits offered by ensuring ELF symbols
11679 have the correct visibility is given by "How To Write Shared
11680 Libraries" by Ulrich Drepper (which can be found at
11681 <https://www.akkadia.org/drepper/>)---however a superior solution
11682 made possible by this option to marking things hidden when the
11683 default is public is to make the default hidden and mark things
11684 public. This is the norm with DLLs on Windows and with
11685 -fvisibility=hidden and "__attribute__ ((visibility("default")))"
11686 instead of "__declspec(dllexport)" you get almost identical
11687 semantics with identical syntax. This is a great boon to those
11688 working with cross-platform projects.
11689
11690 For those adding visibility support to existing code, you may find
11691 "#pragma GCC visibility" of use. This works by you enclosing the
11692 declarations you wish to set visibility for with (for example)
11693 "#pragma GCC visibility push(hidden)" and "#pragma GCC visibility
11694 pop". Bear in mind that symbol visibility should be viewed as part
11695 of the API interface contract and thus all new code should always
11696 specify visibility when it is not the default; i.e., declarations
11697 only for use within the local DSO should always be marked
11698 explicitly as hidden as so to avoid PLT indirection
11699 overheads---making this abundantly clear also aids readability and
11700 self-documentation of the code. Note that due to ISO C++
11701 specification requirements, "operator new" and "operator delete"
11702 must always be of default visibility.
11703
11704 Be aware that headers from outside your project, in particular
11705 system headers and headers from any other library you use, may not
11706 be expecting to be compiled with visibility other than the default.
11707 You may need to explicitly say "#pragma GCC visibility
11708 push(default)" before including any such headers.
11709
11710 "extern" declarations are not affected by -fvisibility, so a lot of
11711 code can be recompiled with -fvisibility=hidden with no
11712 modifications. However, this means that calls to "extern"
11713 functions with no explicit visibility use the PLT, so it is more
11714 effective to use "__attribute ((visibility))" and/or "#pragma GCC
11715 visibility" to tell the compiler which "extern" declarations should
11716 be treated as hidden.
11717
11718 Note that -fvisibility does affect C++ vague linkage entities. This
11719 means that, for instance, an exception class that is be thrown
11720 between DSOs must be explicitly marked with default visibility so
11721 that the type_info nodes are unified between the DSOs.
11722
11723 An overview of these techniques, their benefits and how to use them
11724 is at <http://gcc.gnu.org/wiki/Visibility>.
11725
11726 -fstrict-volatile-bitfields
11727 This option should be used if accesses to volatile bit-fields (or
11728 other structure fields, although the compiler usually honors those
11729 types anyway) should use a single access of the width of the
11730 field's type, aligned to a natural alignment if possible. For
11731 example, targets with memory-mapped peripheral registers might
11732 require all such accesses to be 16 bits wide; with this flag you
11733 can declare all peripheral bit-fields as "unsigned short" (assuming
11734 short is 16 bits on these targets) to force GCC to use 16-bit
11735 accesses instead of, perhaps, a more efficient 32-bit access.
11736
11737 If this option is disabled, the compiler uses the most efficient
11738 instruction. In the previous example, that might be a 32-bit load
11739 instruction, even though that accesses bytes that do not contain
11740 any portion of the bit-field, or memory-mapped registers unrelated
11741 to the one being updated.
11742
11743 In some cases, such as when the "packed" attribute is applied to a
11744 structure field, it may not be possible to access the field with a
11745 single read or write that is correctly aligned for the target
11746 machine. In this case GCC falls back to generating multiple
11747 accesses rather than code that will fault or truncate the result at
11748 run time.
11749
11750 Note: Due to restrictions of the C/C++11 memory model, write
11751 accesses are not allowed to touch non bit-field members. It is
11752 therefore recommended to define all bits of the field's type as
11753 bit-field members.
11754
11755 The default value of this option is determined by the application
11756 binary interface for the target processor.
11757
11758 -fsync-libcalls
11759 This option controls whether any out-of-line instance of the
11760 "__sync" family of functions may be used to implement the C++11
11761 "__atomic" family of functions.
11762
11763 The default value of this option is enabled, thus the only useful
11764 form of the option is -fno-sync-libcalls. This option is used in
11765 the implementation of the libatomic runtime library.
11766
11767 GCC Developer Options
11768 This section describes command-line options that are primarily of
11769 interest to GCC developers, including options to support compiler
11770 testing and investigation of compiler bugs and compile-time performance
11771 problems. This includes options that produce debug dumps at various
11772 points in the compilation; that print statistics such as memory use and
11773 execution time; and that print information about GCC's configuration,
11774 such as where it searches for libraries. You should rarely need to use
11775 any of these options for ordinary compilation and linking tasks.
11776
11777 -dletters
11778 -fdump-rtl-pass
11779 -fdump-rtl-pass=filename
11780 Says to make debugging dumps during compilation at times specified
11781 by letters. This is used for debugging the RTL-based passes of the
11782 compiler. The file names for most of the dumps are made by
11783 appending a pass number and a word to the dumpname, and the files
11784 are created in the directory of the output file. In case of
11785 =filename option, the dump is output on the given file instead of
11786 the pass numbered dump files. Note that the pass number is
11787 assigned as passes are registered into the pass manager. Most
11788 passes are registered in the order that they will execute and for
11789 these passes the number corresponds to the pass execution order.
11790 However, passes registered by plugins, passes specific to
11791 compilation targets, or passes that are otherwise registered after
11792 all the other passes are numbered higher than a pass named "final",
11793 even if they are executed earlier. dumpname is generated from the
11794 name of the output file if explicitly specified and not an
11795 executable, otherwise it is the basename of the source file.
11796
11797 Some -dletters switches have different meaning when -E is used for
11798 preprocessing.
11799
11800 Debug dumps can be enabled with a -fdump-rtl switch or some -d
11801 option letters. Here are the possible letters for use in pass and
11802 letters, and their meanings:
11803
11804 -fdump-rtl-alignments
11805 Dump after branch alignments have been computed.
11806
11807 -fdump-rtl-asmcons
11808 Dump after fixing rtl statements that have unsatisfied in/out
11809 constraints.
11810
11811 -fdump-rtl-auto_inc_dec
11812 Dump after auto-inc-dec discovery. This pass is only run on
11813 architectures that have auto inc or auto dec instructions.
11814
11815 -fdump-rtl-barriers
11816 Dump after cleaning up the barrier instructions.
11817
11818 -fdump-rtl-bbpart
11819 Dump after partitioning hot and cold basic blocks.
11820
11821 -fdump-rtl-bbro
11822 Dump after block reordering.
11823
11824 -fdump-rtl-btl1
11825 -fdump-rtl-btl2
11826 -fdump-rtl-btl1 and -fdump-rtl-btl2 enable dumping after the
11827 two branch target load optimization passes.
11828
11829 -fdump-rtl-bypass
11830 Dump after jump bypassing and control flow optimizations.
11831
11832 -fdump-rtl-combine
11833 Dump after the RTL instruction combination pass.
11834
11835 -fdump-rtl-compgotos
11836 Dump after duplicating the computed gotos.
11837
11838 -fdump-rtl-ce1
11839 -fdump-rtl-ce2
11840 -fdump-rtl-ce3
11841 -fdump-rtl-ce1, -fdump-rtl-ce2, and -fdump-rtl-ce3 enable
11842 dumping after the three if conversion passes.
11843
11844 -fdump-rtl-cprop_hardreg
11845 Dump after hard register copy propagation.
11846
11847 -fdump-rtl-csa
11848 Dump after combining stack adjustments.
11849
11850 -fdump-rtl-cse1
11851 -fdump-rtl-cse2
11852 -fdump-rtl-cse1 and -fdump-rtl-cse2 enable dumping after the
11853 two common subexpression elimination passes.
11854
11855 -fdump-rtl-dce
11856 Dump after the standalone dead code elimination passes.
11857
11858 -fdump-rtl-dbr
11859 Dump after delayed branch scheduling.
11860
11861 -fdump-rtl-dce1
11862 -fdump-rtl-dce2
11863 -fdump-rtl-dce1 and -fdump-rtl-dce2 enable dumping after the
11864 two dead store elimination passes.
11865
11866 -fdump-rtl-eh
11867 Dump after finalization of EH handling code.
11868
11869 -fdump-rtl-eh_ranges
11870 Dump after conversion of EH handling range regions.
11871
11872 -fdump-rtl-expand
11873 Dump after RTL generation.
11874
11875 -fdump-rtl-fwprop1
11876 -fdump-rtl-fwprop2
11877 -fdump-rtl-fwprop1 and -fdump-rtl-fwprop2 enable dumping after
11878 the two forward propagation passes.
11879
11880 -fdump-rtl-gcse1
11881 -fdump-rtl-gcse2
11882 -fdump-rtl-gcse1 and -fdump-rtl-gcse2 enable dumping after
11883 global common subexpression elimination.
11884
11885 -fdump-rtl-init-regs
11886 Dump after the initialization of the registers.
11887
11888 -fdump-rtl-initvals
11889 Dump after the computation of the initial value sets.
11890
11891 -fdump-rtl-into_cfglayout
11892 Dump after converting to cfglayout mode.
11893
11894 -fdump-rtl-ira
11895 Dump after iterated register allocation.
11896
11897 -fdump-rtl-jump
11898 Dump after the second jump optimization.
11899
11900 -fdump-rtl-loop2
11901 -fdump-rtl-loop2 enables dumping after the rtl loop
11902 optimization passes.
11903
11904 -fdump-rtl-mach
11905 Dump after performing the machine dependent reorganization
11906 pass, if that pass exists.
11907
11908 -fdump-rtl-mode_sw
11909 Dump after removing redundant mode switches.
11910
11911 -fdump-rtl-rnreg
11912 Dump after register renumbering.
11913
11914 -fdump-rtl-outof_cfglayout
11915 Dump after converting from cfglayout mode.
11916
11917 -fdump-rtl-peephole2
11918 Dump after the peephole pass.
11919
11920 -fdump-rtl-postreload
11921 Dump after post-reload optimizations.
11922
11923 -fdump-rtl-pro_and_epilogue
11924 Dump after generating the function prologues and epilogues.
11925
11926 -fdump-rtl-sched1
11927 -fdump-rtl-sched2
11928 -fdump-rtl-sched1 and -fdump-rtl-sched2 enable dumping after
11929 the basic block scheduling passes.
11930
11931 -fdump-rtl-ree
11932 Dump after sign/zero extension elimination.
11933
11934 -fdump-rtl-seqabstr
11935 Dump after common sequence discovery.
11936
11937 -fdump-rtl-shorten
11938 Dump after shortening branches.
11939
11940 -fdump-rtl-sibling
11941 Dump after sibling call optimizations.
11942
11943 -fdump-rtl-split1
11944 -fdump-rtl-split2
11945 -fdump-rtl-split3
11946 -fdump-rtl-split4
11947 -fdump-rtl-split5
11948 These options enable dumping after five rounds of instruction
11949 splitting.
11950
11951 -fdump-rtl-sms
11952 Dump after modulo scheduling. This pass is only run on some
11953 architectures.
11954
11955 -fdump-rtl-stack
11956 Dump after conversion from GCC's "flat register file" registers
11957 to the x87's stack-like registers. This pass is only run on
11958 x86 variants.
11959
11960 -fdump-rtl-subreg1
11961 -fdump-rtl-subreg2
11962 -fdump-rtl-subreg1 and -fdump-rtl-subreg2 enable dumping after
11963 the two subreg expansion passes.
11964
11965 -fdump-rtl-unshare
11966 Dump after all rtl has been unshared.
11967
11968 -fdump-rtl-vartrack
11969 Dump after variable tracking.
11970
11971 -fdump-rtl-vregs
11972 Dump after converting virtual registers to hard registers.
11973
11974 -fdump-rtl-web
11975 Dump after live range splitting.
11976
11977 -fdump-rtl-regclass
11978 -fdump-rtl-subregs_of_mode_init
11979 -fdump-rtl-subregs_of_mode_finish
11980 -fdump-rtl-dfinit
11981 -fdump-rtl-dfinish
11982 These dumps are defined but always produce empty files.
11983
11984 -da
11985 -fdump-rtl-all
11986 Produce all the dumps listed above.
11987
11988 -dA Annotate the assembler output with miscellaneous debugging
11989 information.
11990
11991 -dD Dump all macro definitions, at the end of preprocessing, in
11992 addition to normal output.
11993
11994 -dH Produce a core dump whenever an error occurs.
11995
11996 -dp Annotate the assembler output with a comment indicating which
11997 pattern and alternative is used. The length and cost of each
11998 instruction are also printed.
11999
12000 -dP Dump the RTL in the assembler output as a comment before each
12001 instruction. Also turns on -dp annotation.
12002
12003 -dx Just generate RTL for a function instead of compiling it.
12004 Usually used with -fdump-rtl-expand.
12005
12006 -fdump-noaddr
12007 When doing debugging dumps, suppress address output. This makes it
12008 more feasible to use diff on debugging dumps for compiler
12009 invocations with different compiler binaries and/or different text
12010 / bss / data / heap / stack / dso start locations.
12011
12012 -freport-bug
12013 Collect and dump debug information into a temporary file if an
12014 internal compiler error (ICE) occurs.
12015
12016 -fdump-unnumbered
12017 When doing debugging dumps, suppress instruction numbers and
12018 address output. This makes it more feasible to use diff on
12019 debugging dumps for compiler invocations with different options, in
12020 particular with and without -g.
12021
12022 -fdump-unnumbered-links
12023 When doing debugging dumps (see -d option above), suppress
12024 instruction numbers for the links to the previous and next
12025 instructions in a sequence.
12026
12027 -fdump-ipa-switch
12028 Control the dumping at various stages of inter-procedural analysis
12029 language tree to a file. The file name is generated by appending a
12030 switch specific suffix to the source file name, and the file is
12031 created in the same directory as the output file. The following
12032 dumps are possible:
12033
12034 all Enables all inter-procedural analysis dumps.
12035
12036 cgraph
12037 Dumps information about call-graph optimization, unused
12038 function removal, and inlining decisions.
12039
12040 inline
12041 Dump after function inlining.
12042
12043 -fdump-lang-all
12044 -fdump-lang-switch
12045 -fdump-lang-switch-options
12046 -fdump-lang-switch-options=filename
12047 Control the dumping of language-specific information. The options
12048 and filename portions behave as described in the -fdump-tree
12049 option. The following switch values are accepted:
12050
12051 all Enable all language-specific dumps.
12052
12053 class
12054 Dump class hierarchy information. Virtual table information is
12055 emitted unless 'slim' is specified. This option is applicable
12056 to C++ only.
12057
12058 raw Dump the raw internal tree data. This option is applicable to
12059 C++ only.
12060
12061 -fdump-passes
12062 Print on stderr the list of optimization passes that are turned on
12063 and off by the current command-line options.
12064
12065 -fdump-statistics-option
12066 Enable and control dumping of pass statistics in a separate file.
12067 The file name is generated by appending a suffix ending in
12068 .statistics to the source file name, and the file is created in the
12069 same directory as the output file. If the -option form is used,
12070 -stats causes counters to be summed over the whole compilation unit
12071 while -details dumps every event as the passes generate them. The
12072 default with no option is to sum counters for each function
12073 compiled.
12074
12075 -fdump-tree-all
12076 -fdump-tree-switch
12077 -fdump-tree-switch-options
12078 -fdump-tree-switch-options=filename
12079 Control the dumping at various stages of processing the
12080 intermediate language tree to a file. The file name is generated
12081 by appending a switch-specific suffix to the source file name, and
12082 the file is created in the same directory as the output file. In
12083 case of =filename option, the dump is output on the given file
12084 instead of the auto named dump files. If the -options form is
12085 used, options is a list of - separated options which control the
12086 details of the dump. Not all options are applicable to all dumps;
12087 those that are not meaningful are ignored. The following options
12088 are available
12089
12090 address
12091 Print the address of each node. Usually this is not meaningful
12092 as it changes according to the environment and source file.
12093 Its primary use is for tying up a dump file with a debug
12094 environment.
12095
12096 asmname
12097 If "DECL_ASSEMBLER_NAME" has been set for a given decl, use
12098 that in the dump instead of "DECL_NAME". Its primary use is
12099 ease of use working backward from mangled names in the assembly
12100 file.
12101
12102 slim
12103 When dumping front-end intermediate representations, inhibit
12104 dumping of members of a scope or body of a function merely
12105 because that scope has been reached. Only dump such items when
12106 they are directly reachable by some other path.
12107
12108 When dumping pretty-printed trees, this option inhibits dumping
12109 the bodies of control structures.
12110
12111 When dumping RTL, print the RTL in slim (condensed) form
12112 instead of the default LISP-like representation.
12113
12114 raw Print a raw representation of the tree. By default, trees are
12115 pretty-printed into a C-like representation.
12116
12117 details
12118 Enable more detailed dumps (not honored by every dump option).
12119 Also include information from the optimization passes.
12120
12121 stats
12122 Enable dumping various statistics about the pass (not honored
12123 by every dump option).
12124
12125 blocks
12126 Enable showing basic block boundaries (disabled in raw dumps).
12127
12128 graph
12129 For each of the other indicated dump files (-fdump-rtl-pass),
12130 dump a representation of the control flow graph suitable for
12131 viewing with GraphViz to file.passid.pass.dot. Each function
12132 in the file is pretty-printed as a subgraph, so that GraphViz
12133 can render them all in a single plot.
12134
12135 This option currently only works for RTL dumps, and the RTL is
12136 always dumped in slim form.
12137
12138 vops
12139 Enable showing virtual operands for every statement.
12140
12141 lineno
12142 Enable showing line numbers for statements.
12143
12144 uid Enable showing the unique ID ("DECL_UID") for each variable.
12145
12146 verbose
12147 Enable showing the tree dump for each statement.
12148
12149 eh Enable showing the EH region number holding each statement.
12150
12151 scev
12152 Enable showing scalar evolution analysis details.
12153
12154 optimized
12155 Enable showing optimization information (only available in
12156 certain passes).
12157
12158 missed
12159 Enable showing missed optimization information (only available
12160 in certain passes).
12161
12162 note
12163 Enable other detailed optimization information (only available
12164 in certain passes).
12165
12166 =filename
12167 Instead of an auto named dump file, output into the given file
12168 name. The file names stdout and stderr are treated specially
12169 and are considered already open standard streams. For example,
12170
12171 gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks=foo.dump
12172 -fdump-tree-pre=/dev/stderr file.c
12173
12174 outputs vectorizer dump into foo.dump, while the PRE dump is
12175 output on to stderr. If two conflicting dump filenames are
12176 given for the same pass, then the latter option overrides the
12177 earlier one.
12178
12179 all Turn on all options, except raw, slim, verbose and lineno.
12180
12181 optall
12182 Turn on all optimization options, i.e., optimized, missed, and
12183 note.
12184
12185 To determine what tree dumps are available or find the dump for a
12186 pass of interest follow the steps below.
12187
12188 1. Invoke GCC with -fdump-passes and in the stderr output look for
12189 a code that corresponds to the pass you are interested in. For
12190 example, the codes "tree-evrp", "tree-vrp1", and "tree-vrp2"
12191 correspond to the three Value Range Propagation passes. The
12192 number at the end distinguishes distinct invocations of the
12193 same pass.
12194
12195 2. To enable the creation of the dump file, append the pass code
12196 to the -fdump- option prefix and invoke GCC with it. For
12197 example, to enable the dump from the Early Value Range
12198 Propagation pass, invoke GCC with the -fdump-tree-evrp option.
12199 Optionally, you may specify the name of the dump file. If you
12200 don't specify one, GCC creates as described below.
12201
12202 3. Find the pass dump in a file whose name is composed of three
12203 components separated by a period: the name of the source file
12204 GCC was invoked to compile, a numeric suffix indicating the
12205 pass number followed by the letter t for tree passes (and the
12206 letter r for RTL passes), and finally the pass code. For
12207 example, the Early VRP pass dump might be in a file named
12208 myfile.c.038t.evrp in the current working directory. Note that
12209 the numeric codes are not stable and may change from one
12210 version of GCC to another.
12211
12212 -fopt-info
12213 -fopt-info-options
12214 -fopt-info-options=filename
12215 Controls optimization dumps from various optimization passes. If
12216 the -options form is used, options is a list of - separated option
12217 keywords to select the dump details and optimizations.
12218
12219 The options can be divided into two groups: options describing the
12220 verbosity of the dump, and options describing which optimizations
12221 should be included. The options from both the groups can be freely
12222 mixed as they are non-overlapping. However, in case of any
12223 conflicts, the later options override the earlier options on the
12224 command line.
12225
12226 The following options control the dump verbosity:
12227
12228 optimized
12229 Print information when an optimization is successfully applied.
12230 It is up to a pass to decide which information is relevant. For
12231 example, the vectorizer passes print the source location of
12232 loops which are successfully vectorized.
12233
12234 missed
12235 Print information about missed optimizations. Individual passes
12236 control which information to include in the output.
12237
12238 note
12239 Print verbose information about optimizations, such as certain
12240 transformations, more detailed messages about decisions etc.
12241
12242 all Print detailed optimization information. This includes
12243 optimized, missed, and note.
12244
12245 One or more of the following option keywords can be used to
12246 describe a group of optimizations:
12247
12248 ipa Enable dumps from all interprocedural optimizations.
12249
12250 loop
12251 Enable dumps from all loop optimizations.
12252
12253 inline
12254 Enable dumps from all inlining optimizations.
12255
12256 omp Enable dumps from all OMP (Offloading and Multi Processing)
12257 optimizations.
12258
12259 vec Enable dumps from all vectorization optimizations.
12260
12261 optall
12262 Enable dumps from all optimizations. This is a superset of the
12263 optimization groups listed above.
12264
12265 If options is omitted, it defaults to optimized-optall, which means
12266 to dump all info about successful optimizations from all the
12267 passes.
12268
12269 If the filename is provided, then the dumps from all the applicable
12270 optimizations are concatenated into the filename. Otherwise the
12271 dump is output onto stderr. Though multiple -fopt-info options are
12272 accepted, only one of them can include a filename. If other
12273 filenames are provided then all but the first such option are
12274 ignored.
12275
12276 Note that the output filename is overwritten in case of multiple
12277 translation units. If a combined output from multiple translation
12278 units is desired, stderr should be used instead.
12279
12280 In the following example, the optimization info is output to
12281 stderr:
12282
12283 gcc -O3 -fopt-info
12284
12285 This example:
12286
12287 gcc -O3 -fopt-info-missed=missed.all
12288
12289 outputs missed optimization report from all the passes into
12290 missed.all, and this one:
12291
12292 gcc -O2 -ftree-vectorize -fopt-info-vec-missed
12293
12294 prints information about missed optimization opportunities from
12295 vectorization passes on stderr. Note that -fopt-info-vec-missed is
12296 equivalent to -fopt-info-missed-vec. The order of the optimization
12297 group names and message types listed after -fopt-info does not
12298 matter.
12299
12300 As another example,
12301
12302 gcc -O3 -fopt-info-inline-optimized-missed=inline.txt
12303
12304 outputs information about missed optimizations as well as optimized
12305 locations from all the inlining passes into inline.txt.
12306
12307 Finally, consider:
12308
12309 gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt
12310
12311 Here the two output filenames vec.miss and loop.opt are in conflict
12312 since only one output file is allowed. In this case, only the first
12313 option takes effect and the subsequent options are ignored. Thus
12314 only vec.miss is produced which contains dumps from the vectorizer
12315 about missed opportunities.
12316
12317 -fsched-verbose=n
12318 On targets that use instruction scheduling, this option controls
12319 the amount of debugging output the scheduler prints to the dump
12320 files.
12321
12322 For n greater than zero, -fsched-verbose outputs the same
12323 information as -fdump-rtl-sched1 and -fdump-rtl-sched2. For n
12324 greater than one, it also output basic block probabilities,
12325 detailed ready list information and unit/insn info. For n greater
12326 than two, it includes RTL at abort point, control-flow and regions
12327 info. And for n over four, -fsched-verbose also includes
12328 dependence info.
12329
12330 -fenable-kind-pass
12331 -fdisable-kind-pass=range-list
12332 This is a set of options that are used to explicitly disable/enable
12333 optimization passes. These options are intended for use for
12334 debugging GCC. Compiler users should use regular options for
12335 enabling/disabling passes instead.
12336
12337 -fdisable-ipa-pass
12338 Disable IPA pass pass. pass is the pass name. If the same pass
12339 is statically invoked in the compiler multiple times, the pass
12340 name should be appended with a sequential number starting from
12341 1.
12342
12343 -fdisable-rtl-pass
12344 -fdisable-rtl-pass=range-list
12345 Disable RTL pass pass. pass is the pass name. If the same
12346 pass is statically invoked in the compiler multiple times, the
12347 pass name should be appended with a sequential number starting
12348 from 1. range-list is a comma-separated list of function
12349 ranges or assembler names. Each range is a number pair
12350 separated by a colon. The range is inclusive in both ends. If
12351 the range is trivial, the number pair can be simplified as a
12352 single number. If the function's call graph node's uid falls
12353 within one of the specified ranges, the pass is disabled for
12354 that function. The uid is shown in the function header of a
12355 dump file, and the pass names can be dumped by using option
12356 -fdump-passes.
12357
12358 -fdisable-tree-pass
12359 -fdisable-tree-pass=range-list
12360 Disable tree pass pass. See -fdisable-rtl for the description
12361 of option arguments.
12362
12363 -fenable-ipa-pass
12364 Enable IPA pass pass. pass is the pass name. If the same pass
12365 is statically invoked in the compiler multiple times, the pass
12366 name should be appended with a sequential number starting from
12367 1.
12368
12369 -fenable-rtl-pass
12370 -fenable-rtl-pass=range-list
12371 Enable RTL pass pass. See -fdisable-rtl for option argument
12372 description and examples.
12373
12374 -fenable-tree-pass
12375 -fenable-tree-pass=range-list
12376 Enable tree pass pass. See -fdisable-rtl for the description
12377 of option arguments.
12378
12379 Here are some examples showing uses of these options.
12380
12381 # disable ccp1 for all functions
12382 -fdisable-tree-ccp1
12383 # disable complete unroll for function whose cgraph node uid is 1
12384 -fenable-tree-cunroll=1
12385 # disable gcse2 for functions at the following ranges [1,1],
12386 # [300,400], and [400,1000]
12387 # disable gcse2 for functions foo and foo2
12388 -fdisable-rtl-gcse2=foo,foo2
12389 # disable early inlining
12390 -fdisable-tree-einline
12391 # disable ipa inlining
12392 -fdisable-ipa-inline
12393 # enable tree full unroll
12394 -fenable-tree-unroll
12395
12396 -fchecking
12397 -fchecking=n
12398 Enable internal consistency checking. The default depends on the
12399 compiler configuration. -fchecking=2 enables further internal
12400 consistency checking that might affect code generation.
12401
12402 -frandom-seed=string
12403 This option provides a seed that GCC uses in place of random
12404 numbers in generating certain symbol names that have to be
12405 different in every compiled file. It is also used to place unique
12406 stamps in coverage data files and the object files that produce
12407 them. You can use the -frandom-seed option to produce reproducibly
12408 identical object files.
12409
12410 The string can either be a number (decimal, octal or hex) or an
12411 arbitrary string (in which case it's converted to a number by
12412 computing CRC32).
12413
12414 The string should be different for every file you compile.
12415
12416 -save-temps
12417 -save-temps=cwd
12418 Store the usual "temporary" intermediate files permanently; place
12419 them in the current directory and name them based on the source
12420 file. Thus, compiling foo.c with -c -save-temps produces files
12421 foo.i and foo.s, as well as foo.o. This creates a preprocessed
12422 foo.i output file even though the compiler now normally uses an
12423 integrated preprocessor.
12424
12425 When used in combination with the -x command-line option,
12426 -save-temps is sensible enough to avoid over writing an input
12427 source file with the same extension as an intermediate file. The
12428 corresponding intermediate file may be obtained by renaming the
12429 source file before using -save-temps.
12430
12431 If you invoke GCC in parallel, compiling several different source
12432 files that share a common base name in different subdirectories or
12433 the same source file compiled for multiple output destinations, it
12434 is likely that the different parallel compilers will interfere with
12435 each other, and overwrite the temporary files. For instance:
12436
12437 gcc -save-temps -o outdir1/foo.o indir1/foo.c&
12438 gcc -save-temps -o outdir2/foo.o indir2/foo.c&
12439
12440 may result in foo.i and foo.o being written to simultaneously by
12441 both compilers.
12442
12443 -save-temps=obj
12444 Store the usual "temporary" intermediate files permanently. If the
12445 -o option is used, the temporary files are based on the object
12446 file. If the -o option is not used, the -save-temps=obj switch
12447 behaves like -save-temps.
12448
12449 For example:
12450
12451 gcc -save-temps=obj -c foo.c
12452 gcc -save-temps=obj -c bar.c -o dir/xbar.o
12453 gcc -save-temps=obj foobar.c -o dir2/yfoobar
12454
12455 creates foo.i, foo.s, dir/xbar.i, dir/xbar.s, dir2/yfoobar.i,
12456 dir2/yfoobar.s, and dir2/yfoobar.o.
12457
12458 -time[=file]
12459 Report the CPU time taken by each subprocess in the compilation
12460 sequence. For C source files, this is the compiler proper and
12461 assembler (plus the linker if linking is done).
12462
12463 Without the specification of an output file, the output looks like
12464 this:
12465
12466 # cc1 0.12 0.01
12467 # as 0.00 0.01
12468
12469 The first number on each line is the "user time", that is time
12470 spent executing the program itself. The second number is "system
12471 time", time spent executing operating system routines on behalf of
12472 the program. Both numbers are in seconds.
12473
12474 With the specification of an output file, the output is appended to
12475 the named file, and it looks like this:
12476
12477 0.12 0.01 cc1 <options>
12478 0.00 0.01 as <options>
12479
12480 The "user time" and the "system time" are moved before the program
12481 name, and the options passed to the program are displayed, so that
12482 one can later tell what file was being compiled, and with which
12483 options.
12484
12485 -fdump-final-insns[=file]
12486 Dump the final internal representation (RTL) to file. If the
12487 optional argument is omitted (or if file is "."), the name of the
12488 dump file is determined by appending ".gkd" to the compilation
12489 output file name.
12490
12491 -fcompare-debug[=opts]
12492 If no error occurs during compilation, run the compiler a second
12493 time, adding opts and -fcompare-debug-second to the arguments
12494 passed to the second compilation. Dump the final internal
12495 representation in both compilations, and print an error if they
12496 differ.
12497
12498 If the equal sign is omitted, the default -gtoggle is used.
12499
12500 The environment variable GCC_COMPARE_DEBUG, if defined, non-empty
12501 and nonzero, implicitly enables -fcompare-debug. If
12502 GCC_COMPARE_DEBUG is defined to a string starting with a dash, then
12503 it is used for opts, otherwise the default -gtoggle is used.
12504
12505 -fcompare-debug=, with the equal sign but without opts, is
12506 equivalent to -fno-compare-debug, which disables the dumping of the
12507 final representation and the second compilation, preventing even
12508 GCC_COMPARE_DEBUG from taking effect.
12509
12510 To verify full coverage during -fcompare-debug testing, set
12511 GCC_COMPARE_DEBUG to say -fcompare-debug-not-overridden, which GCC
12512 rejects as an invalid option in any actual compilation (rather than
12513 preprocessing, assembly or linking). To get just a warning,
12514 setting GCC_COMPARE_DEBUG to -w%n-fcompare-debug not overridden
12515 will do.
12516
12517 -fcompare-debug-second
12518 This option is implicitly passed to the compiler for the second
12519 compilation requested by -fcompare-debug, along with options to
12520 silence warnings, and omitting other options that would cause the
12521 compiler to produce output to files or to standard output as a side
12522 effect. Dump files and preserved temporary files are renamed so as
12523 to contain the ".gk" additional extension during the second
12524 compilation, to avoid overwriting those generated by the first.
12525
12526 When this option is passed to the compiler driver, it causes the
12527 first compilation to be skipped, which makes it useful for little
12528 other than debugging the compiler proper.
12529
12530 -gtoggle
12531 Turn off generation of debug info, if leaving out this option
12532 generates it, or turn it on at level 2 otherwise. The position of
12533 this argument in the command line does not matter; it takes effect
12534 after all other options are processed, and it does so only once, no
12535 matter how many times it is given. This is mainly intended to be
12536 used with -fcompare-debug.
12537
12538 -fvar-tracking-assignments-toggle
12539 Toggle -fvar-tracking-assignments, in the same way that -gtoggle
12540 toggles -g.
12541
12542 -Q Makes the compiler print out each function name as it is compiled,
12543 and print some statistics about each pass when it finishes.
12544
12545 -ftime-report
12546 Makes the compiler print some statistics about the time consumed by
12547 each pass when it finishes.
12548
12549 -ftime-report-details
12550 Record the time consumed by infrastructure parts separately for
12551 each pass.
12552
12553 -fira-verbose=n
12554 Control the verbosity of the dump file for the integrated register
12555 allocator. The default value is 5. If the value n is greater or
12556 equal to 10, the dump output is sent to stderr using the same
12557 format as n minus 10.
12558
12559 -flto-report
12560 Prints a report with internal details on the workings of the link-
12561 time optimizer. The contents of this report vary from version to
12562 version. It is meant to be useful to GCC developers when
12563 processing object files in LTO mode (via -flto).
12564
12565 Disabled by default.
12566
12567 -flto-report-wpa
12568 Like -flto-report, but only print for the WPA phase of Link Time
12569 Optimization.
12570
12571 -fmem-report
12572 Makes the compiler print some statistics about permanent memory
12573 allocation when it finishes.
12574
12575 -fmem-report-wpa
12576 Makes the compiler print some statistics about permanent memory
12577 allocation for the WPA phase only.
12578
12579 -fpre-ipa-mem-report
12580 -fpost-ipa-mem-report
12581 Makes the compiler print some statistics about permanent memory
12582 allocation before or after interprocedural optimization.
12583
12584 -fprofile-report
12585 Makes the compiler print some statistics about consistency of the
12586 (estimated) profile and effect of individual passes.
12587
12588 -fstack-usage
12589 Makes the compiler output stack usage information for the program,
12590 on a per-function basis. The filename for the dump is made by
12591 appending .su to the auxname. auxname is generated from the name
12592 of the output file, if explicitly specified and it is not an
12593 executable, otherwise it is the basename of the source file. An
12594 entry is made up of three fields:
12595
12596 * The name of the function.
12597
12598 * A number of bytes.
12599
12600 * One or more qualifiers: "static", "dynamic", "bounded".
12601
12602 The qualifier "static" means that the function manipulates the
12603 stack statically: a fixed number of bytes are allocated for the
12604 frame on function entry and released on function exit; no stack
12605 adjustments are otherwise made in the function. The second field
12606 is this fixed number of bytes.
12607
12608 The qualifier "dynamic" means that the function manipulates the
12609 stack dynamically: in addition to the static allocation described
12610 above, stack adjustments are made in the body of the function, for
12611 example to push/pop arguments around function calls. If the
12612 qualifier "bounded" is also present, the amount of these
12613 adjustments is bounded at compile time and the second field is an
12614 upper bound of the total amount of stack used by the function. If
12615 it is not present, the amount of these adjustments is not bounded
12616 at compile time and the second field only represents the bounded
12617 part.
12618
12619 -fstats
12620 Emit statistics about front-end processing at the end of the
12621 compilation. This option is supported only by the C++ front end,
12622 and the information is generally only useful to the G++ development
12623 team.
12624
12625 -fdbg-cnt-list
12626 Print the name and the counter upper bound for all debug counters.
12627
12628 -fdbg-cnt=counter-value-list
12629 Set the internal debug counter upper bound. counter-value-list is
12630 a comma-separated list of name:value pairs which sets the upper
12631 bound of each debug counter name to value. All debug counters have
12632 the initial upper bound of "UINT_MAX"; thus "dbg_cnt" returns true
12633 always unless the upper bound is set by this option. For example,
12634 with -fdbg-cnt=dce:10,tail_call:0, "dbg_cnt(dce)" returns true only
12635 for first 10 invocations.
12636
12637 -print-file-name=library
12638 Print the full absolute name of the library file library that would
12639 be used when linking---and don't do anything else. With this
12640 option, GCC does not compile or link anything; it just prints the
12641 file name.
12642
12643 -print-multi-directory
12644 Print the directory name corresponding to the multilib selected by
12645 any other switches present in the command line. This directory is
12646 supposed to exist in GCC_EXEC_PREFIX.
12647
12648 -print-multi-lib
12649 Print the mapping from multilib directory names to compiler
12650 switches that enable them. The directory name is separated from
12651 the switches by ;, and each switch starts with an @ instead of the
12652 -, without spaces between multiple switches. This is supposed to
12653 ease shell processing.
12654
12655 -print-multi-os-directory
12656 Print the path to OS libraries for the selected multilib, relative
12657 to some lib subdirectory. If OS libraries are present in the lib
12658 subdirectory and no multilibs are used, this is usually just ., if
12659 OS libraries are present in libsuffix sibling directories this
12660 prints e.g. ../lib64, ../lib or ../lib32, or if OS libraries are
12661 present in lib/subdir subdirectories it prints e.g. amd64, sparcv9
12662 or ev6.
12663
12664 -print-multiarch
12665 Print the path to OS libraries for the selected multiarch, relative
12666 to some lib subdirectory.
12667
12668 -print-prog-name=program
12669 Like -print-file-name, but searches for a program such as cpp.
12670
12671 -print-libgcc-file-name
12672 Same as -print-file-name=libgcc.a.
12673
12674 This is useful when you use -nostdlib or -nodefaultlibs but you do
12675 want to link with libgcc.a. You can do:
12676
12677 gcc -nostdlib <files>... `gcc -print-libgcc-file-name`
12678
12679 -print-search-dirs
12680 Print the name of the configured installation directory and a list
12681 of program and library directories gcc searches---and don't do
12682 anything else.
12683
12684 This is useful when gcc prints the error message installation
12685 problem, cannot exec cpp0: No such file or directory. To resolve
12686 this you either need to put cpp0 and the other compiler components
12687 where gcc expects to find them, or you can set the environment
12688 variable GCC_EXEC_PREFIX to the directory where you installed them.
12689 Don't forget the trailing /.
12690
12691 -print-sysroot
12692 Print the target sysroot directory that is used during compilation.
12693 This is the target sysroot specified either at configure time or
12694 using the --sysroot option, possibly with an extra suffix that
12695 depends on compilation options. If no target sysroot is specified,
12696 the option prints nothing.
12697
12698 -print-sysroot-headers-suffix
12699 Print the suffix added to the target sysroot when searching for
12700 headers, or give an error if the compiler is not configured with
12701 such a suffix---and don't do anything else.
12702
12703 -dumpmachine
12704 Print the compiler's target machine (for example,
12705 i686-pc-linux-gnu)---and don't do anything else.
12706
12707 -dumpversion
12708 Print the compiler version (for example, 3.0, 6.3.0 or 7)---and
12709 don't do anything else. This is the compiler version used in
12710 filesystem paths, specs, can be depending on how the compiler has
12711 been configured just a single number (major version), two numbers
12712 separated by dot (major and minor version) or three numbers
12713 separated by dots (major, minor and patchlevel version).
12714
12715 -dumpfullversion
12716 Print the full compiler version, always 3 numbers separated by
12717 dots, major, minor and patchlevel version.
12718
12719 -dumpspecs
12720 Print the compiler's built-in specs---and don't do anything else.
12721 (This is used when GCC itself is being built.)
12722
12723 Machine-Dependent Options
12724 Each target machine supported by GCC can have its own options---for
12725 example, to allow you to compile for a particular processor variant or
12726 ABI, or to control optimizations specific to that machine. By
12727 convention, the names of machine-specific options start with -m.
12728
12729 Some configurations of the compiler also support additional target-
12730 specific options, usually for compatibility with other compilers on the
12731 same platform.
12732
12733 AArch64 Options
12734
12735 These options are defined for AArch64 implementations:
12736
12737 -mabi=name
12738 Generate code for the specified data model. Permissible values are
12739 ilp32 for SysV-like data model where int, long int and pointers are
12740 32 bits, and lp64 for SysV-like data model where int is 32 bits,
12741 but long int and pointers are 64 bits.
12742
12743 The default depends on the specific target configuration. Note
12744 that the LP64 and ILP32 ABIs are not link-compatible; you must
12745 compile your entire program with the same ABI, and link with a
12746 compatible set of libraries.
12747
12748 -mbig-endian
12749 Generate big-endian code. This is the default when GCC is
12750 configured for an aarch64_be-*-* target.
12751
12752 -mgeneral-regs-only
12753 Generate code which uses only the general-purpose registers. This
12754 will prevent the compiler from using floating-point and Advanced
12755 SIMD registers but will not impose any restrictions on the
12756 assembler.
12757
12758 -mlittle-endian
12759 Generate little-endian code. This is the default when GCC is
12760 configured for an aarch64-*-* but not an aarch64_be-*-* target.
12761
12762 -mcmodel=tiny
12763 Generate code for the tiny code model. The program and its
12764 statically defined symbols must be within 1MB of each other.
12765 Programs can be statically or dynamically linked.
12766
12767 -mcmodel=small
12768 Generate code for the small code model. The program and its
12769 statically defined symbols must be within 4GB of each other.
12770 Programs can be statically or dynamically linked. This is the
12771 default code model.
12772
12773 -mcmodel=large
12774 Generate code for the large code model. This makes no assumptions
12775 about addresses and sizes of sections. Programs can be statically
12776 linked only.
12777
12778 -mstrict-align
12779 Avoid generating memory accesses that may not be aligned on a
12780 natural object boundary as described in the architecture
12781 specification.
12782
12783 -momit-leaf-frame-pointer
12784 -mno-omit-leaf-frame-pointer
12785 Omit or keep the frame pointer in leaf functions. The former
12786 behavior is the default.
12787
12788 -mtls-dialect=desc
12789 Use TLS descriptors as the thread-local storage mechanism for
12790 dynamic accesses of TLS variables. This is the default.
12791
12792 -mtls-dialect=traditional
12793 Use traditional TLS as the thread-local storage mechanism for
12794 dynamic accesses of TLS variables.
12795
12796 -mtls-size=size
12797 Specify bit size of immediate TLS offsets. Valid values are 12,
12798 24, 32, 48. This option requires binutils 2.26 or newer.
12799
12800 -mfix-cortex-a53-835769
12801 -mno-fix-cortex-a53-835769
12802 Enable or disable the workaround for the ARM Cortex-A53 erratum
12803 number 835769. This involves inserting a NOP instruction between
12804 memory instructions and 64-bit integer multiply-accumulate
12805 instructions.
12806
12807 -mfix-cortex-a53-843419
12808 -mno-fix-cortex-a53-843419
12809 Enable or disable the workaround for the ARM Cortex-A53 erratum
12810 number 843419. This erratum workaround is made at link time and
12811 this will only pass the corresponding flag to the linker.
12812
12813 -mlow-precision-recip-sqrt
12814 -mno-low-precision-recip-sqrt
12815 Enable or disable the reciprocal square root approximation. This
12816 option only has an effect if -ffast-math or
12817 -funsafe-math-optimizations is used as well. Enabling this reduces
12818 precision of reciprocal square root results to about 16 bits for
12819 single precision and to 32 bits for double precision.
12820
12821 -mlow-precision-sqrt
12822 -mno-low-precision-sqrt
12823 Enable or disable the square root approximation. This option only
12824 has an effect if -ffast-math or -funsafe-math-optimizations is used
12825 as well. Enabling this reduces precision of square root results to
12826 about 16 bits for single precision and to 32 bits for double
12827 precision. If enabled, it implies -mlow-precision-recip-sqrt.
12828
12829 -mlow-precision-div
12830 -mno-low-precision-div
12831 Enable or disable the division approximation. This option only has
12832 an effect if -ffast-math or -funsafe-math-optimizations is used as
12833 well. Enabling this reduces precision of division results to about
12834 16 bits for single precision and to 32 bits for double precision.
12835
12836 -march=name
12837 Specify the name of the target architecture and, optionally, one or
12838 more feature modifiers. This option has the form
12839 -march=arch{+[no]feature}*.
12840
12841 The permissible values for arch are armv8-a, armv8.1-a, armv8.2-a,
12842 armv8.3-a or armv8.4-a or native.
12843
12844 The value armv8.4-a implies armv8.3-a and enables compiler support
12845 for the ARMv8.4-A architecture extensions.
12846
12847 The value armv8.3-a implies armv8.2-a and enables compiler support
12848 for the ARMv8.3-A architecture extensions.
12849
12850 The value armv8.2-a implies armv8.1-a and enables compiler support
12851 for the ARMv8.2-A architecture extensions.
12852
12853 The value armv8.1-a implies armv8-a and enables compiler support
12854 for the ARMv8.1-A architecture extension. In particular, it
12855 enables the +crc, +lse, and +rdma features.
12856
12857 The value native is available on native AArch64 GNU/Linux and
12858 causes the compiler to pick the architecture of the host system.
12859 This option has no effect if the compiler is unable to recognize
12860 the architecture of the host system,
12861
12862 The permissible values for feature are listed in the sub-section on
12863 aarch64-feature-modifiers,,-march and -mcpu Feature Modifiers.
12864 Where conflicting feature modifiers are specified, the right-most
12865 feature is used.
12866
12867 GCC uses name to determine what kind of instructions it can emit
12868 when generating assembly code. If -march is specified without
12869 either of -mtune or -mcpu also being specified, the code is tuned
12870 to perform well across a range of target processors implementing
12871 the target architecture.
12872
12873 -mtune=name
12874 Specify the name of the target processor for which GCC should tune
12875 the performance of the code. Permissible values for this option
12876 are: generic, cortex-a35, cortex-a53, cortex-a55, cortex-a57,
12877 cortex-a72, cortex-a73, cortex-a75, exynos-m1, falkor, qdf24xx,
12878 saphira, xgene1, vulcan, thunderx, thunderxt88, thunderxt88p1,
12879 thunderxt81, thunderxt83, thunderx2t99, cortex-a57.cortex-a53,
12880 cortex-a72.cortex-a53, cortex-a73.cortex-a35,
12881 cortex-a73.cortex-a53, cortex-a75.cortex-a55, native.
12882
12883 The values cortex-a57.cortex-a53, cortex-a72.cortex-a53,
12884 cortex-a73.cortex-a35, cortex-a73.cortex-a53, cortex-a75.cortex-a55
12885 specify that GCC should tune for a big.LITTLE system.
12886
12887 Additionally on native AArch64 GNU/Linux systems the value native
12888 tunes performance to the host system. This option has no effect if
12889 the compiler is unable to recognize the processor of the host
12890 system.
12891
12892 Where none of -mtune=, -mcpu= or -march= are specified, the code is
12893 tuned to perform well across a range of target processors.
12894
12895 This option cannot be suffixed by feature modifiers.
12896
12897 -mcpu=name
12898 Specify the name of the target processor, optionally suffixed by
12899 one or more feature modifiers. This option has the form
12900 -mcpu=cpu{+[no]feature}*, where the permissible values for cpu are
12901 the same as those available for -mtune. The permissible values for
12902 feature are documented in the sub-section on
12903 aarch64-feature-modifiers,,-march and -mcpu Feature Modifiers.
12904 Where conflicting feature modifiers are specified, the right-most
12905 feature is used.
12906
12907 GCC uses name to determine what kind of instructions it can emit
12908 when generating assembly code (as if by -march) and to determine
12909 the target processor for which to tune for performance (as if by
12910 -mtune). Where this option is used in conjunction with -march or
12911 -mtune, those options take precedence over the appropriate part of
12912 this option.
12913
12914 -moverride=string
12915 Override tuning decisions made by the back-end in response to a
12916 -mtune= switch. The syntax, semantics, and accepted values for
12917 string in this option are not guaranteed to be consistent across
12918 releases.
12919
12920 This option is only intended to be useful when developing GCC.
12921
12922 -mverbose-cost-dump
12923 Enable verbose cost model dumping in the debug dump files. This
12924 option is provided for use in debugging the compiler.
12925
12926 -mpc-relative-literal-loads
12927 -mno-pc-relative-literal-loads
12928 Enable or disable PC-relative literal loads. With this option
12929 literal pools are accessed using a single instruction and emitted
12930 after each function. This limits the maximum size of functions to
12931 1MB. This is enabled by default for -mcmodel=tiny.
12932
12933 -msign-return-address=scope
12934 Select the function scope on which return address signing will be
12935 applied. Permissible values are none, which disables return
12936 address signing, non-leaf, which enables pointer signing for
12937 functions which are not leaf functions, and all, which enables
12938 pointer signing for all functions. The default value is none.
12939
12940 -msve-vector-bits=bits
12941 Specify the number of bits in an SVE vector register. This option
12942 only has an effect when SVE is enabled.
12943
12944 GCC supports two forms of SVE code generation: "vector-length
12945 agnostic" output that works with any size of vector register and
12946 "vector-length specific" output that allows GCC to make assumptions
12947 about the vector length when it is useful for optimization reasons.
12948 The possible values of bits are: scalable, 128, 256, 512, 1024 and
12949 2048. Specifying scalable selects vector-length agnostic output.
12950 At present -msve-vector-bits=128 also generates vector-length
12951 agnostic output. All other values generate vector-length specific
12952 code. The behavior of these values may change in future releases
12953 and no value except scalable should be relied on for producing code
12954 that is portable across different hardware SVE vector lengths.
12955
12956 The default is -msve-vector-bits=scalable, which produces vector-
12957 length agnostic code.
12958
12959 -march and -mcpu Feature Modifiers
12960
12961 Feature modifiers used with -march and -mcpu can be any of the
12962 following and their inverses nofeature:
12963
12964 crc Enable CRC extension. This is on by default for -march=armv8.1-a.
12965
12966 crypto
12967 Enable Crypto extension. This also enables Advanced SIMD and
12968 floating-point instructions.
12969
12970 fp Enable floating-point instructions. This is on by default for all
12971 possible values for options -march and -mcpu.
12972
12973 simd
12974 Enable Advanced SIMD instructions. This also enables floating-
12975 point instructions. This is on by default for all possible values
12976 for options -march and -mcpu.
12977
12978 sve Enable Scalable Vector Extension instructions. This also enables
12979 Advanced SIMD and floating-point instructions.
12980
12981 lse Enable Large System Extension instructions. This is on by default
12982 for -march=armv8.1-a.
12983
12984 rdma
12985 Enable Round Double Multiply Accumulate instructions. This is on
12986 by default for -march=armv8.1-a.
12987
12988 fp16
12989 Enable FP16 extension. This also enables floating-point
12990 instructions.
12991
12992 fp16fml
12993 Enable FP16 fmla extension. This also enables FP16 extensions and
12994 floating-point instructions. This option is enabled by default for
12995 -march=armv8.4-a. Use of this option with architectures prior to
12996 Armv8.2-A is not supported.
12997
12998 rcpc
12999 Enable the RcPc extension. This does not change code generation
13000 from GCC, but is passed on to the assembler, enabling inline asm
13001 statements to use instructions from the RcPc extension.
13002
13003 dotprod
13004 Enable the Dot Product extension. This also enables Advanced SIMD
13005 instructions.
13006
13007 aes Enable the Armv8-a aes and pmull crypto extension. This also
13008 enables Advanced SIMD instructions.
13009
13010 sha2
13011 Enable the Armv8-a sha2 crypto extension. This also enables
13012 Advanced SIMD instructions.
13013
13014 sha3
13015 Enable the sha512 and sha3 crypto extension. This also enables
13016 Advanced SIMD instructions. Use of this option with architectures
13017 prior to Armv8.2-A is not supported.
13018
13019 sm4 Enable the sm3 and sm4 crypto extension. This also enables
13020 Advanced SIMD instructions. Use of this option with architectures
13021 prior to Armv8.2-A is not supported.
13022
13023 Feature crypto implies aes, sha2, and simd, which implies fp.
13024 Conversely, nofp implies nosimd, which implies nocrypto, noaes and
13025 nosha2.
13026
13027 Adapteva Epiphany Options
13028
13029 These -m options are defined for Adapteva Epiphany:
13030
13031 -mhalf-reg-file
13032 Don't allocate any register in the range "r32"..."r63". That
13033 allows code to run on hardware variants that lack these registers.
13034
13035 -mprefer-short-insn-regs
13036 Preferentially allocate registers that allow short instruction
13037 generation. This can result in increased instruction count, so
13038 this may either reduce or increase overall code size.
13039
13040 -mbranch-cost=num
13041 Set the cost of branches to roughly num "simple" instructions.
13042 This cost is only a heuristic and is not guaranteed to produce
13043 consistent results across releases.
13044
13045 -mcmove
13046 Enable the generation of conditional moves.
13047
13048 -mnops=num
13049 Emit num NOPs before every other generated instruction.
13050
13051 -mno-soft-cmpsf
13052 For single-precision floating-point comparisons, emit an "fsub"
13053 instruction and test the flags. This is faster than a software
13054 comparison, but can get incorrect results in the presence of NaNs,
13055 or when two different small numbers are compared such that their
13056 difference is calculated as zero. The default is -msoft-cmpsf,
13057 which uses slower, but IEEE-compliant, software comparisons.
13058
13059 -mstack-offset=num
13060 Set the offset between the top of the stack and the stack pointer.
13061 E.g., a value of 8 means that the eight bytes in the range
13062 "sp+0...sp+7" can be used by leaf functions without stack
13063 allocation. Values other than 8 or 16 are untested and unlikely to
13064 work. Note also that this option changes the ABI; compiling a
13065 program with a different stack offset than the libraries have been
13066 compiled with generally does not work. This option can be useful
13067 if you want to evaluate if a different stack offset would give you
13068 better code, but to actually use a different stack offset to build
13069 working programs, it is recommended to configure the toolchain with
13070 the appropriate --with-stack-offset=num option.
13071
13072 -mno-round-nearest
13073 Make the scheduler assume that the rounding mode has been set to
13074 truncating. The default is -mround-nearest.
13075
13076 -mlong-calls
13077 If not otherwise specified by an attribute, assume all calls might
13078 be beyond the offset range of the "b" / "bl" instructions, and
13079 therefore load the function address into a register before
13080 performing a (otherwise direct) call. This is the default.
13081
13082 -mshort-calls
13083 If not otherwise specified by an attribute, assume all direct calls
13084 are in the range of the "b" / "bl" instructions, so use these
13085 instructions for direct calls. The default is -mlong-calls.
13086
13087 -msmall16
13088 Assume addresses can be loaded as 16-bit unsigned values. This
13089 does not apply to function addresses for which -mlong-calls
13090 semantics are in effect.
13091
13092 -mfp-mode=mode
13093 Set the prevailing mode of the floating-point unit. This
13094 determines the floating-point mode that is provided and expected at
13095 function call and return time. Making this mode match the mode you
13096 predominantly need at function start can make your programs smaller
13097 and faster by avoiding unnecessary mode switches.
13098
13099 mode can be set to one the following values:
13100
13101 caller
13102 Any mode at function entry is valid, and retained or restored
13103 when the function returns, and when it calls other functions.
13104 This mode is useful for compiling libraries or other
13105 compilation units you might want to incorporate into different
13106 programs with different prevailing FPU modes, and the
13107 convenience of being able to use a single object file outweighs
13108 the size and speed overhead for any extra mode switching that
13109 might be needed, compared with what would be needed with a more
13110 specific choice of prevailing FPU mode.
13111
13112 truncate
13113 This is the mode used for floating-point calculations with
13114 truncating (i.e. round towards zero) rounding mode. That
13115 includes conversion from floating point to integer.
13116
13117 round-nearest
13118 This is the mode used for floating-point calculations with
13119 round-to-nearest-or-even rounding mode.
13120
13121 int This is the mode used to perform integer calculations in the
13122 FPU, e.g. integer multiply, or integer multiply-and-
13123 accumulate.
13124
13125 The default is -mfp-mode=caller
13126
13127 -mnosplit-lohi
13128 -mno-postinc
13129 -mno-postmodify
13130 Code generation tweaks that disable, respectively, splitting of
13131 32-bit loads, generation of post-increment addresses, and
13132 generation of post-modify addresses. The defaults are msplit-lohi,
13133 -mpost-inc, and -mpost-modify.
13134
13135 -mnovect-double
13136 Change the preferred SIMD mode to SImode. The default is
13137 -mvect-double, which uses DImode as preferred SIMD mode.
13138
13139 -max-vect-align=num
13140 The maximum alignment for SIMD vector mode types. num may be 4 or
13141 8. The default is 8. Note that this is an ABI change, even though
13142 many library function interfaces are unaffected if they don't use
13143 SIMD vector modes in places that affect size and/or alignment of
13144 relevant types.
13145
13146 -msplit-vecmove-early
13147 Split vector moves into single word moves before reload. In theory
13148 this can give better register allocation, but so far the reverse
13149 seems to be generally the case.
13150
13151 -m1reg-reg
13152 Specify a register to hold the constant -1, which makes loading
13153 small negative constants and certain bitmasks faster. Allowable
13154 values for reg are r43 and r63, which specify use of that register
13155 as a fixed register, and none, which means that no register is used
13156 for this purpose. The default is -m1reg-none.
13157
13158 ARC Options
13159
13160 The following options control the architecture variant for which code
13161 is being compiled:
13162
13163 -mbarrel-shifter
13164 Generate instructions supported by barrel shifter. This is the
13165 default unless -mcpu=ARC601 or -mcpu=ARCEM is in effect.
13166
13167 -mjli-always
13168 Force to call a function using jli_s instruction. This option is
13169 valid only for ARCv2 architecture.
13170
13171 -mcpu=cpu
13172 Set architecture type, register usage, and instruction scheduling
13173 parameters for cpu. There are also shortcut alias options
13174 available for backward compatibility and convenience. Supported
13175 values for cpu are
13176
13177 arc600
13178 Compile for ARC600. Aliases: -mA6, -mARC600.
13179
13180 arc601
13181 Compile for ARC601. Alias: -mARC601.
13182
13183 arc700
13184 Compile for ARC700. Aliases: -mA7, -mARC700. This is the
13185 default when configured with --with-cpu=arc700.
13186
13187 arcem
13188 Compile for ARC EM.
13189
13190 archs
13191 Compile for ARC HS.
13192
13193 em Compile for ARC EM CPU with no hardware extensions.
13194
13195 em4 Compile for ARC EM4 CPU.
13196
13197 em4_dmips
13198 Compile for ARC EM4 DMIPS CPU.
13199
13200 em4_fpus
13201 Compile for ARC EM4 DMIPS CPU with the single-precision
13202 floating-point extension.
13203
13204 em4_fpuda
13205 Compile for ARC EM4 DMIPS CPU with single-precision floating-
13206 point and double assist instructions.
13207
13208 hs Compile for ARC HS CPU with no hardware extensions except the
13209 atomic instructions.
13210
13211 hs34
13212 Compile for ARC HS34 CPU.
13213
13214 hs38
13215 Compile for ARC HS38 CPU.
13216
13217 hs38_linux
13218 Compile for ARC HS38 CPU with all hardware extensions on.
13219
13220 arc600_norm
13221 Compile for ARC 600 CPU with "norm" instructions enabled.
13222
13223 arc600_mul32x16
13224 Compile for ARC 600 CPU with "norm" and 32x16-bit multiply
13225 instructions enabled.
13226
13227 arc600_mul64
13228 Compile for ARC 600 CPU with "norm" and "mul64"-family
13229 instructions enabled.
13230
13231 arc601_norm
13232 Compile for ARC 601 CPU with "norm" instructions enabled.
13233
13234 arc601_mul32x16
13235 Compile for ARC 601 CPU with "norm" and 32x16-bit multiply
13236 instructions enabled.
13237
13238 arc601_mul64
13239 Compile for ARC 601 CPU with "norm" and "mul64"-family
13240 instructions enabled.
13241
13242 nps400
13243 Compile for ARC 700 on NPS400 chip.
13244
13245 em_mini
13246 Compile for ARC EM minimalist configuration featuring reduced
13247 register set.
13248
13249 -mdpfp
13250 -mdpfp-compact
13251 Generate double-precision FPX instructions, tuned for the compact
13252 implementation.
13253
13254 -mdpfp-fast
13255 Generate double-precision FPX instructions, tuned for the fast
13256 implementation.
13257
13258 -mno-dpfp-lrsr
13259 Disable "lr" and "sr" instructions from using FPX extension aux
13260 registers.
13261
13262 -mea
13263 Generate extended arithmetic instructions. Currently only "divaw",
13264 "adds", "subs", and "sat16" are supported. This is always enabled
13265 for -mcpu=ARC700.
13266
13267 -mno-mpy
13268 Do not generate "mpy"-family instructions for ARC700. This option
13269 is deprecated.
13270
13271 -mmul32x16
13272 Generate 32x16-bit multiply and multiply-accumulate instructions.
13273
13274 -mmul64
13275 Generate "mul64" and "mulu64" instructions. Only valid for
13276 -mcpu=ARC600.
13277
13278 -mnorm
13279 Generate "norm" instructions. This is the default if -mcpu=ARC700
13280 is in effect.
13281
13282 -mspfp
13283 -mspfp-compact
13284 Generate single-precision FPX instructions, tuned for the compact
13285 implementation.
13286
13287 -mspfp-fast
13288 Generate single-precision FPX instructions, tuned for the fast
13289 implementation.
13290
13291 -msimd
13292 Enable generation of ARC SIMD instructions via target-specific
13293 builtins. Only valid for -mcpu=ARC700.
13294
13295 -msoft-float
13296 This option ignored; it is provided for compatibility purposes
13297 only. Software floating-point code is emitted by default, and this
13298 default can overridden by FPX options; -mspfp, -mspfp-compact, or
13299 -mspfp-fast for single precision, and -mdpfp, -mdpfp-compact, or
13300 -mdpfp-fast for double precision.
13301
13302 -mswap
13303 Generate "swap" instructions.
13304
13305 -matomic
13306 This enables use of the locked load/store conditional extension to
13307 implement atomic memory built-in functions. Not available for ARC
13308 6xx or ARC EM cores.
13309
13310 -mdiv-rem
13311 Enable "div" and "rem" instructions for ARCv2 cores.
13312
13313 -mcode-density
13314 Enable code density instructions for ARC EM. This option is on by
13315 default for ARC HS.
13316
13317 -mll64
13318 Enable double load/store operations for ARC HS cores.
13319
13320 -mtp-regno=regno
13321 Specify thread pointer register number.
13322
13323 -mmpy-option=multo
13324 Compile ARCv2 code with a multiplier design option. You can
13325 specify the option using either a string or numeric value for
13326 multo. wlh1 is the default value. The recognized values are:
13327
13328 0
13329 none
13330 No multiplier available.
13331
13332 1
13333 w 16x16 multiplier, fully pipelined. The following instructions
13334 are enabled: "mpyw" and "mpyuw".
13335
13336 2
13337 wlh1
13338 32x32 multiplier, fully pipelined (1 stage). The following
13339 instructions are additionally enabled: "mpy", "mpyu", "mpym",
13340 "mpymu", and "mpy_s".
13341
13342 3
13343 wlh2
13344 32x32 multiplier, fully pipelined (2 stages). The following
13345 instructions are additionally enabled: "mpy", "mpyu", "mpym",
13346 "mpymu", and "mpy_s".
13347
13348 4
13349 wlh3
13350 Two 16x16 multipliers, blocking, sequential. The following
13351 instructions are additionally enabled: "mpy", "mpyu", "mpym",
13352 "mpymu", and "mpy_s".
13353
13354 5
13355 wlh4
13356 One 16x16 multiplier, blocking, sequential. The following
13357 instructions are additionally enabled: "mpy", "mpyu", "mpym",
13358 "mpymu", and "mpy_s".
13359
13360 6
13361 wlh5
13362 One 32x4 multiplier, blocking, sequential. The following
13363 instructions are additionally enabled: "mpy", "mpyu", "mpym",
13364 "mpymu", and "mpy_s".
13365
13366 7
13367 plus_dmpy
13368 ARC HS SIMD support.
13369
13370 8
13371 plus_macd
13372 ARC HS SIMD support.
13373
13374 9
13375 plus_qmacw
13376 ARC HS SIMD support.
13377
13378 This option is only available for ARCv2 cores.
13379
13380 -mfpu=fpu
13381 Enables support for specific floating-point hardware extensions for
13382 ARCv2 cores. Supported values for fpu are:
13383
13384 fpus
13385 Enables support for single-precision floating-point hardware
13386 extensions.
13387
13388 fpud
13389 Enables support for double-precision floating-point hardware
13390 extensions. The single-precision floating-point extension is
13391 also enabled. Not available for ARC EM.
13392
13393 fpuda
13394 Enables support for double-precision floating-point hardware
13395 extensions using double-precision assist instructions. The
13396 single-precision floating-point extension is also enabled.
13397 This option is only available for ARC EM.
13398
13399 fpuda_div
13400 Enables support for double-precision floating-point hardware
13401 extensions using double-precision assist instructions. The
13402 single-precision floating-point, square-root, and divide
13403 extensions are also enabled. This option is only available for
13404 ARC EM.
13405
13406 fpuda_fma
13407 Enables support for double-precision floating-point hardware
13408 extensions using double-precision assist instructions. The
13409 single-precision floating-point and fused multiply and add
13410 hardware extensions are also enabled. This option is only
13411 available for ARC EM.
13412
13413 fpuda_all
13414 Enables support for double-precision floating-point hardware
13415 extensions using double-precision assist instructions. All
13416 single-precision floating-point hardware extensions are also
13417 enabled. This option is only available for ARC EM.
13418
13419 fpus_div
13420 Enables support for single-precision floating-point, square-
13421 root and divide hardware extensions.
13422
13423 fpud_div
13424 Enables support for double-precision floating-point, square-
13425 root and divide hardware extensions. This option includes
13426 option fpus_div. Not available for ARC EM.
13427
13428 fpus_fma
13429 Enables support for single-precision floating-point and fused
13430 multiply and add hardware extensions.
13431
13432 fpud_fma
13433 Enables support for double-precision floating-point and fused
13434 multiply and add hardware extensions. This option includes
13435 option fpus_fma. Not available for ARC EM.
13436
13437 fpus_all
13438 Enables support for all single-precision floating-point
13439 hardware extensions.
13440
13441 fpud_all
13442 Enables support for all single- and double-precision floating-
13443 point hardware extensions. Not available for ARC EM.
13444
13445 -mirq-ctrl-saved=register-range, blink, lp_count
13446 Specifies general-purposes registers that the processor
13447 automatically saves/restores on interrupt entry and exit.
13448 register-range is specified as two registers separated by a dash.
13449 The register range always starts with "r0", the upper limit is "fp"
13450 register. blink and lp_count are optional. This option is only
13451 valid for ARC EM and ARC HS cores.
13452
13453 -mrgf-banked-regs=number
13454 Specifies the number of registers replicated in second register
13455 bank on entry to fast interrupt. Fast interrupts are interrupts
13456 with the highest priority level P0. These interrupts save only PC
13457 and STATUS32 registers to avoid memory transactions during
13458 interrupt entry and exit sequences. Use this option when you are
13459 using fast interrupts in an ARC V2 family processor. Permitted
13460 values are 4, 8, 16, and 32.
13461
13462 -mlpc-width=width
13463 Specify the width of the "lp_count" register. Valid values for
13464 width are 8, 16, 20, 24, 28 and 32 bits. The default width is
13465 fixed to 32 bits. If the width is less than 32, the compiler does
13466 not attempt to transform loops in your program to use the zero-
13467 delay loop mechanism unless it is known that the "lp_count"
13468 register can hold the required loop-counter value. Depending on
13469 the width specified, the compiler and run-time library might
13470 continue to use the loop mechanism for various needs. This option
13471 defines macro "__ARC_LPC_WIDTH__" with the value of width.
13472
13473 -mrf16
13474 This option instructs the compiler to generate code for a 16-entry
13475 register file. This option defines the "__ARC_RF16__" preprocessor
13476 macro.
13477
13478 The following options are passed through to the assembler, and also
13479 define preprocessor macro symbols.
13480
13481 -mdsp-packa
13482 Passed down to the assembler to enable the DSP Pack A extensions.
13483 Also sets the preprocessor symbol "__Xdsp_packa". This option is
13484 deprecated.
13485
13486 -mdvbf
13487 Passed down to the assembler to enable the dual Viterbi butterfly
13488 extension. Also sets the preprocessor symbol "__Xdvbf". This
13489 option is deprecated.
13490
13491 -mlock
13492 Passed down to the assembler to enable the locked load/store
13493 conditional extension. Also sets the preprocessor symbol
13494 "__Xlock".
13495
13496 -mmac-d16
13497 Passed down to the assembler. Also sets the preprocessor symbol
13498 "__Xxmac_d16". This option is deprecated.
13499
13500 -mmac-24
13501 Passed down to the assembler. Also sets the preprocessor symbol
13502 "__Xxmac_24". This option is deprecated.
13503
13504 -mrtsc
13505 Passed down to the assembler to enable the 64-bit time-stamp
13506 counter extension instruction. Also sets the preprocessor symbol
13507 "__Xrtsc". This option is deprecated.
13508
13509 -mswape
13510 Passed down to the assembler to enable the swap byte ordering
13511 extension instruction. Also sets the preprocessor symbol
13512 "__Xswape".
13513
13514 -mtelephony
13515 Passed down to the assembler to enable dual- and single-operand
13516 instructions for telephony. Also sets the preprocessor symbol
13517 "__Xtelephony". This option is deprecated.
13518
13519 -mxy
13520 Passed down to the assembler to enable the XY memory extension.
13521 Also sets the preprocessor symbol "__Xxy".
13522
13523 The following options control how the assembly code is annotated:
13524
13525 -misize
13526 Annotate assembler instructions with estimated addresses.
13527
13528 -mannotate-align
13529 Explain what alignment considerations lead to the decision to make
13530 an instruction short or long.
13531
13532 The following options are passed through to the linker:
13533
13534 -marclinux
13535 Passed through to the linker, to specify use of the "arclinux"
13536 emulation. This option is enabled by default in tool chains built
13537 for "arc-linux-uclibc" and "arceb-linux-uclibc" targets when
13538 profiling is not requested.
13539
13540 -marclinux_prof
13541 Passed through to the linker, to specify use of the "arclinux_prof"
13542 emulation. This option is enabled by default in tool chains built
13543 for "arc-linux-uclibc" and "arceb-linux-uclibc" targets when
13544 profiling is requested.
13545
13546 The following options control the semantics of generated code:
13547
13548 -mlong-calls
13549 Generate calls as register indirect calls, thus providing access to
13550 the full 32-bit address range.
13551
13552 -mmedium-calls
13553 Don't use less than 25-bit addressing range for calls, which is the
13554 offset available for an unconditional branch-and-link instruction.
13555 Conditional execution of function calls is suppressed, to allow use
13556 of the 25-bit range, rather than the 21-bit range with conditional
13557 branch-and-link. This is the default for tool chains built for
13558 "arc-linux-uclibc" and "arceb-linux-uclibc" targets.
13559
13560 -G num
13561 Put definitions of externally-visible data in a small data section
13562 if that data is no bigger than num bytes. The default value of num
13563 is 4 for any ARC configuration, or 8 when we have double load/store
13564 operations.
13565
13566 -mno-sdata
13567 Do not generate sdata references. This is the default for tool
13568 chains built for "arc-linux-uclibc" and "arceb-linux-uclibc"
13569 targets.
13570
13571 -mvolatile-cache
13572 Use ordinarily cached memory accesses for volatile references.
13573 This is the default.
13574
13575 -mno-volatile-cache
13576 Enable cache bypass for volatile references.
13577
13578 The following options fine tune code generation:
13579
13580 -malign-call
13581 Do alignment optimizations for call instructions.
13582
13583 -mauto-modify-reg
13584 Enable the use of pre/post modify with register displacement.
13585
13586 -mbbit-peephole
13587 Enable bbit peephole2.
13588
13589 -mno-brcc
13590 This option disables a target-specific pass in arc_reorg to
13591 generate compare-and-branch ("brcc") instructions. It has no
13592 effect on generation of these instructions driven by the combiner
13593 pass.
13594
13595 -mcase-vector-pcrel
13596 Use PC-relative switch case tables to enable case table shortening.
13597 This is the default for -Os.
13598
13599 -mcompact-casesi
13600 Enable compact "casesi" pattern. This is the default for -Os, and
13601 only available for ARCv1 cores.
13602
13603 -mno-cond-exec
13604 Disable the ARCompact-specific pass to generate conditional
13605 execution instructions.
13606
13607 Due to delay slot scheduling and interactions between operand
13608 numbers, literal sizes, instruction lengths, and the support for
13609 conditional execution, the target-independent pass to generate
13610 conditional execution is often lacking, so the ARC port has kept a
13611 special pass around that tries to find more conditional execution
13612 generation opportunities after register allocation, branch
13613 shortening, and delay slot scheduling have been done. This pass
13614 generally, but not always, improves performance and code size, at
13615 the cost of extra compilation time, which is why there is an option
13616 to switch it off. If you have a problem with call instructions
13617 exceeding their allowable offset range because they are
13618 conditionalized, you should consider using -mmedium-calls instead.
13619
13620 -mearly-cbranchsi
13621 Enable pre-reload use of the "cbranchsi" pattern.
13622
13623 -mexpand-adddi
13624 Expand "adddi3" and "subdi3" at RTL generation time into "add.f",
13625 "adc" etc. This option is deprecated.
13626
13627 -mindexed-loads
13628 Enable the use of indexed loads. This can be problematic because
13629 some optimizers then assume that indexed stores exist, which is not
13630 the case.
13631
13632 -mlra
13633 Enable Local Register Allocation. This is still experimental for
13634 ARC, so by default the compiler uses standard reload (i.e.
13635 -mno-lra).
13636
13637 -mlra-priority-none
13638 Don't indicate any priority for target registers.
13639
13640 -mlra-priority-compact
13641 Indicate target register priority for r0..r3 / r12..r15.
13642
13643 -mlra-priority-noncompact
13644 Reduce target register priority for r0..r3 / r12..r15.
13645
13646 -mno-millicode
13647 When optimizing for size (using -Os), prologues and epilogues that
13648 have to save or restore a large number of registers are often
13649 shortened by using call to a special function in libgcc; this is
13650 referred to as a millicode call. As these calls can pose
13651 performance issues, and/or cause linking issues when linking in a
13652 nonstandard way, this option is provided to turn off millicode call
13653 generation.
13654
13655 -mmixed-code
13656 Tweak register allocation to help 16-bit instruction generation.
13657 This generally has the effect of decreasing the average instruction
13658 size while increasing the instruction count.
13659
13660 -mq-class
13661 Enable q instruction alternatives. This is the default for -Os.
13662
13663 -mRcq
13664 Enable Rcq constraint handling. Most short code generation depends
13665 on this. This is the default.
13666
13667 -mRcw
13668 Enable Rcw constraint handling. Most ccfsm condexec mostly depends
13669 on this. This is the default.
13670
13671 -msize-level=level
13672 Fine-tune size optimization with regards to instruction lengths and
13673 alignment. The recognized values for level are:
13674
13675 0 No size optimization. This level is deprecated and treated
13676 like 1.
13677
13678 1 Short instructions are used opportunistically.
13679
13680 2 In addition, alignment of loops and of code after barriers are
13681 dropped.
13682
13683 3 In addition, optional data alignment is dropped, and the option
13684 Os is enabled.
13685
13686 This defaults to 3 when -Os is in effect. Otherwise, the behavior
13687 when this is not set is equivalent to level 1.
13688
13689 -mtune=cpu
13690 Set instruction scheduling parameters for cpu, overriding any
13691 implied by -mcpu=.
13692
13693 Supported values for cpu are
13694
13695 ARC600
13696 Tune for ARC600 CPU.
13697
13698 ARC601
13699 Tune for ARC601 CPU.
13700
13701 ARC700
13702 Tune for ARC700 CPU with standard multiplier block.
13703
13704 ARC700-xmac
13705 Tune for ARC700 CPU with XMAC block.
13706
13707 ARC725D
13708 Tune for ARC725D CPU.
13709
13710 ARC750D
13711 Tune for ARC750D CPU.
13712
13713 -mmultcost=num
13714 Cost to assume for a multiply instruction, with 4 being equal to a
13715 normal instruction.
13716
13717 -munalign-prob-threshold=probability
13718 Set probability threshold for unaligning branches. When tuning for
13719 ARC700 and optimizing for speed, branches without filled delay slot
13720 are preferably emitted unaligned and long, unless profiling
13721 indicates that the probability for the branch to be taken is below
13722 probability. The default is (REG_BR_PROB_BASE/2), i.e. 5000.
13723
13724 The following options are maintained for backward compatibility, but
13725 are now deprecated and will be removed in a future release:
13726
13727 -margonaut
13728 Obsolete FPX.
13729
13730 -mbig-endian
13731 -EB Compile code for big-endian targets. Use of these options is now
13732 deprecated. Big-endian code is supported by configuring GCC to
13733 build "arceb-elf32" and "arceb-linux-uclibc" targets, for which big
13734 endian is the default.
13735
13736 -mlittle-endian
13737 -EL Compile code for little-endian targets. Use of these options is
13738 now deprecated. Little-endian code is supported by configuring GCC
13739 to build "arc-elf32" and "arc-linux-uclibc" targets, for which
13740 little endian is the default.
13741
13742 -mbarrel_shifter
13743 Replaced by -mbarrel-shifter.
13744
13745 -mdpfp_compact
13746 Replaced by -mdpfp-compact.
13747
13748 -mdpfp_fast
13749 Replaced by -mdpfp-fast.
13750
13751 -mdsp_packa
13752 Replaced by -mdsp-packa.
13753
13754 -mEA
13755 Replaced by -mea.
13756
13757 -mmac_24
13758 Replaced by -mmac-24.
13759
13760 -mmac_d16
13761 Replaced by -mmac-d16.
13762
13763 -mspfp_compact
13764 Replaced by -mspfp-compact.
13765
13766 -mspfp_fast
13767 Replaced by -mspfp-fast.
13768
13769 -mtune=cpu
13770 Values arc600, arc601, arc700 and arc700-xmac for cpu are replaced
13771 by ARC600, ARC601, ARC700 and ARC700-xmac respectively.
13772
13773 -multcost=num
13774 Replaced by -mmultcost.
13775
13776 ARM Options
13777
13778 These -m options are defined for the ARM port:
13779
13780 -mabi=name
13781 Generate code for the specified ABI. Permissible values are: apcs-
13782 gnu, atpcs, aapcs, aapcs-linux and iwmmxt.
13783
13784 -mapcs-frame
13785 Generate a stack frame that is compliant with the ARM Procedure
13786 Call Standard for all functions, even if this is not strictly
13787 necessary for correct execution of the code. Specifying
13788 -fomit-frame-pointer with this option causes the stack frames not
13789 to be generated for leaf functions. The default is
13790 -mno-apcs-frame. This option is deprecated.
13791
13792 -mapcs
13793 This is a synonym for -mapcs-frame and is deprecated.
13794
13795 -mthumb-interwork
13796 Generate code that supports calling between the ARM and Thumb
13797 instruction sets. Without this option, on pre-v5 architectures,
13798 the two instruction sets cannot be reliably used inside one
13799 program. The default is -mno-thumb-interwork, since slightly
13800 larger code is generated when -mthumb-interwork is specified. In
13801 AAPCS configurations this option is meaningless.
13802
13803 -mno-sched-prolog
13804 Prevent the reordering of instructions in the function prologue, or
13805 the merging of those instruction with the instructions in the
13806 function's body. This means that all functions start with a
13807 recognizable set of instructions (or in fact one of a choice from a
13808 small set of different function prologues), and this information
13809 can be used to locate the start of functions inside an executable
13810 piece of code. The default is -msched-prolog.
13811
13812 -mfloat-abi=name
13813 Specifies which floating-point ABI to use. Permissible values are:
13814 soft, softfp and hard.
13815
13816 Specifying soft causes GCC to generate output containing library
13817 calls for floating-point operations. softfp allows the generation
13818 of code using hardware floating-point instructions, but still uses
13819 the soft-float calling conventions. hard allows generation of
13820 floating-point instructions and uses FPU-specific calling
13821 conventions.
13822
13823 The default depends on the specific target configuration. Note
13824 that the hard-float and soft-float ABIs are not link-compatible;
13825 you must compile your entire program with the same ABI, and link
13826 with a compatible set of libraries.
13827
13828 -mlittle-endian
13829 Generate code for a processor running in little-endian mode. This
13830 is the default for all standard configurations.
13831
13832 -mbig-endian
13833 Generate code for a processor running in big-endian mode; the
13834 default is to compile code for a little-endian processor.
13835
13836 -mbe8
13837 -mbe32
13838 When linking a big-endian image select between BE8 and BE32
13839 formats. The option has no effect for little-endian images and is
13840 ignored. The default is dependent on the selected target
13841 architecture. For ARMv6 and later architectures the default is
13842 BE8, for older architectures the default is BE32. BE32 format has
13843 been deprecated by ARM.
13844
13845 -march=name[+extension...]
13846 This specifies the name of the target ARM architecture. GCC uses
13847 this name to determine what kind of instructions it can emit when
13848 generating assembly code. This option can be used in conjunction
13849 with or instead of the -mcpu= option.
13850
13851 Permissible names are: armv4t, armv5t, armv5te, armv6, armv6j,
13852 armv6k, armv6kz, armv6t2, armv6z, armv6zk, armv7, armv7-a, armv7ve,
13853 armv8-a, armv8.1-a, armv8.2-a, armv8.3-a, armv8.4-a, armv7-r,
13854 armv8-r, armv6-m, armv6s-m, armv7-m, armv7e-m, armv8-m.base,
13855 armv8-m.main, iwmmxt and iwmmxt2.
13856
13857 Additionally, the following architectures, which lack support for
13858 the Thumb execution state, are recognized but support is
13859 deprecated: armv2, armv2a, armv3, armv3m, armv4, armv5 and armv5e.
13860
13861 Many of the architectures support extensions. These can be added
13862 by appending +extension to the architecture name. Extension
13863 options are processed in order and capabilities accumulate. An
13864 extension will also enable any necessary base extensions upon which
13865 it depends. For example, the +crypto extension will always enable
13866 the +simd extension. The exception to the additive construction is
13867 for extensions that are prefixed with +no...: these extensions
13868 disable the specified option and any other extensions that may
13869 depend on the presence of that extension.
13870
13871 For example, -march=armv7-a+simd+nofp+vfpv4 is equivalent to
13872 writing -march=armv7-a+vfpv4 since the +simd option is entirely
13873 disabled by the +nofp option that follows it.
13874
13875 Most extension names are generically named, but have an effect that
13876 is dependent upon the architecture to which it is applied. For
13877 example, the +simd option can be applied to both armv7-a and
13878 armv8-a architectures, but will enable the original ARMv7-A
13879 Advanced SIMD (Neon) extensions for armv7-a and the ARMv8-A variant
13880 for armv8-a.
13881
13882 The table below lists the supported extensions for each
13883 architecture. Architectures not mentioned do not support any
13884 extensions.
13885
13886 armv5e
13887 armv5te
13888 armv6
13889 armv6j
13890 armv6k
13891 armv6kz
13892 armv6t2
13893 armv6z
13894 armv6zk
13895 +fp The VFPv2 floating-point instructions. The extension
13896 +vfpv2 can be used as an alias for this extension.
13897
13898 +nofp
13899 Disable the floating-point instructions.
13900
13901 armv7
13902 The common subset of the ARMv7-A, ARMv7-R and ARMv7-M
13903 architectures.
13904
13905 +fp The VFPv3 floating-point instructions, with 16 double-
13906 precision registers. The extension +vfpv3-d16 can be used
13907 as an alias for this extension. Note that floating-point
13908 is not supported by the base ARMv7-M architecture, but is
13909 compatible with both the ARMv7-A and ARMv7-R architectures.
13910
13911 +nofp
13912 Disable the floating-point instructions.
13913
13914 armv7-a
13915 +mp The multiprocessing extension.
13916
13917 +sec
13918 The security extension.
13919
13920 +fp The VFPv3 floating-point instructions, with 16 double-
13921 precision registers. The extension +vfpv3-d16 can be used
13922 as an alias for this extension.
13923
13924 +simd
13925 The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
13926 instructions. The extensions +neon and +neon-vfpv3 can be
13927 used as aliases for this extension.
13928
13929 +vfpv3
13930 The VFPv3 floating-point instructions, with 32 double-
13931 precision registers.
13932
13933 +vfpv3-d16-fp16
13934 The VFPv3 floating-point instructions, with 16 double-
13935 precision registers and the half-precision floating-point
13936 conversion operations.
13937
13938 +vfpv3-fp16
13939 The VFPv3 floating-point instructions, with 32 double-
13940 precision registers and the half-precision floating-point
13941 conversion operations.
13942
13943 +vfpv4-d16
13944 The VFPv4 floating-point instructions, with 16 double-
13945 precision registers.
13946
13947 +vfpv4
13948 The VFPv4 floating-point instructions, with 32 double-
13949 precision registers.
13950
13951 +neon-fp16
13952 The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
13953 instructions, with the half-precision floating-point
13954 conversion operations.
13955
13956 +neon-vfpv4
13957 The Advanced SIMD (Neon) v2 and the VFPv4 floating-point
13958 instructions.
13959
13960 +nosimd
13961 Disable the Advanced SIMD instructions (does not disable
13962 floating point).
13963
13964 +nofp
13965 Disable the floating-point and Advanced SIMD instructions.
13966
13967 armv7ve
13968 The extended version of the ARMv7-A architecture with support
13969 for virtualization.
13970
13971 +fp The VFPv4 floating-point instructions, with 16 double-
13972 precision registers. The extension +vfpv4-d16 can be used
13973 as an alias for this extension.
13974
13975 +simd
13976 The Advanced SIMD (Neon) v2 and the VFPv4 floating-point
13977 instructions. The extension +neon-vfpv4 can be used as an
13978 alias for this extension.
13979
13980 +vfpv3-d16
13981 The VFPv3 floating-point instructions, with 16 double-
13982 precision registers.
13983
13984 +vfpv3
13985 The VFPv3 floating-point instructions, with 32 double-
13986 precision registers.
13987
13988 +vfpv3-d16-fp16
13989 The VFPv3 floating-point instructions, with 16 double-
13990 precision registers and the half-precision floating-point
13991 conversion operations.
13992
13993 +vfpv3-fp16
13994 The VFPv3 floating-point instructions, with 32 double-
13995 precision registers and the half-precision floating-point
13996 conversion operations.
13997
13998 +vfpv4-d16
13999 The VFPv4 floating-point instructions, with 16 double-
14000 precision registers.
14001
14002 +vfpv4
14003 The VFPv4 floating-point instructions, with 32 double-
14004 precision registers.
14005
14006 +neon
14007 The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
14008 instructions. The extension +neon-vfpv3 can be used as an
14009 alias for this extension.
14010
14011 +neon-fp16
14012 The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
14013 instructions, with the half-precision floating-point
14014 conversion operations.
14015
14016 +nosimd
14017 Disable the Advanced SIMD instructions (does not disable
14018 floating point).
14019
14020 +nofp
14021 Disable the floating-point and Advanced SIMD instructions.
14022
14023 armv8-a
14024 +crc
14025 The Cyclic Redundancy Check (CRC) instructions.
14026
14027 +simd
14028 The ARMv8-A Advanced SIMD and floating-point instructions.
14029
14030 +crypto
14031 The cryptographic instructions.
14032
14033 +nocrypto
14034 Disable the cryptographic instructions.
14035
14036 +nofp
14037 Disable the floating-point, Advanced SIMD and cryptographic
14038 instructions.
14039
14040 armv8.1-a
14041 +simd
14042 The ARMv8.1-A Advanced SIMD and floating-point
14043 instructions.
14044
14045 +crypto
14046 The cryptographic instructions. This also enables the
14047 Advanced SIMD and floating-point instructions.
14048
14049 +nocrypto
14050 Disable the cryptographic instructions.
14051
14052 +nofp
14053 Disable the floating-point, Advanced SIMD and cryptographic
14054 instructions.
14055
14056 armv8.2-a
14057 armv8.3-a
14058 +fp16
14059 The half-precision floating-point data processing
14060 instructions. This also enables the Advanced SIMD and
14061 floating-point instructions.
14062
14063 +fp16fml
14064 The half-precision floating-point fmla extension. This
14065 also enables the half-precision floating-point extension
14066 and Advanced SIMD and floating-point instructions.
14067
14068 +simd
14069 The ARMv8.1-A Advanced SIMD and floating-point
14070 instructions.
14071
14072 +crypto
14073 The cryptographic instructions. This also enables the
14074 Advanced SIMD and floating-point instructions.
14075
14076 +dotprod
14077 Enable the Dot Product extension. This also enables
14078 Advanced SIMD instructions.
14079
14080 +nocrypto
14081 Disable the cryptographic extension.
14082
14083 +nofp
14084 Disable the floating-point, Advanced SIMD and cryptographic
14085 instructions.
14086
14087 armv8.4-a
14088 +fp16
14089 The half-precision floating-point data processing
14090 instructions. This also enables the Advanced SIMD and
14091 floating-point instructions as well as the Dot Product
14092 extension and the half-precision floating-point fmla
14093 extension.
14094
14095 +simd
14096 The ARMv8.3-A Advanced SIMD and floating-point instructions
14097 as well as the Dot Product extension.
14098
14099 +crypto
14100 The cryptographic instructions. This also enables the
14101 Advanced SIMD and floating-point instructions as well as
14102 the Dot Product extension.
14103
14104 +nocrypto
14105 Disable the cryptographic extension.
14106
14107 +nofp
14108 Disable the floating-point, Advanced SIMD and cryptographic
14109 instructions.
14110
14111 armv7-r
14112 +fp.sp
14113 The single-precision VFPv3 floating-point instructions.
14114 The extension +vfpv3xd can be used as an alias for this
14115 extension.
14116
14117 +fp The VFPv3 floating-point instructions with 16 double-
14118 precision registers. The extension +vfpv3-d16 can be used
14119 as an alias for this extension.
14120
14121 +vfpv3xd-d16-fp16
14122 The single-precision VFPv3 floating-point instructions with
14123 16 double-precision registers and the half-precision
14124 floating-point conversion operations.
14125
14126 +vfpv3-d16-fp16
14127 The VFPv3 floating-point instructions, with 16 double-
14128 precision registers and the half-precision floating-point
14129 conversion operations.
14130
14131 +nofp
14132 Disable the floating-point extension.
14133
14134 +idiv
14135 The ARM-state integer division instructions.
14136
14137 +noidiv
14138 Disable the ARM-state integer division extension.
14139
14140 armv7e-m
14141 +fp The single-precision VFPv4 floating-point instructions.
14142
14143 +fpv5
14144 The single-precision FPv5 floating-point instructions.
14145
14146 +fp.dp
14147 The single- and double-precision FPv5 floating-point
14148 instructions.
14149
14150 +nofp
14151 Disable the floating-point extensions.
14152
14153 armv8-m.main
14154 +dsp
14155 The DSP instructions.
14156
14157 +nodsp
14158 Disable the DSP extension.
14159
14160 +fp The single-precision floating-point instructions.
14161
14162 +fp.dp
14163 The single- and double-precision floating-point
14164 instructions.
14165
14166 +nofp
14167 Disable the floating-point extension.
14168
14169 armv8-r
14170 +crc
14171 The Cyclic Redundancy Check (CRC) instructions.
14172
14173 +fp.sp
14174 The single-precision FPv5 floating-point instructions.
14175
14176 +simd
14177 The ARMv8-A Advanced SIMD and floating-point instructions.
14178
14179 +crypto
14180 The cryptographic instructions.
14181
14182 +nocrypto
14183 Disable the cryptographic instructions.
14184
14185 +nofp
14186 Disable the floating-point, Advanced SIMD and cryptographic
14187 instructions.
14188
14189 -march=native causes the compiler to auto-detect the architecture
14190 of the build computer. At present, this feature is only supported
14191 on GNU/Linux, and not all architectures are recognized. If the
14192 auto-detect is unsuccessful the option has no effect.
14193
14194 -mtune=name
14195 This option specifies the name of the target ARM processor for
14196 which GCC should tune the performance of the code. For some ARM
14197 implementations better performance can be obtained by using this
14198 option. Permissible names are: arm2, arm250, arm3, arm6, arm60,
14199 arm600, arm610, arm620, arm7, arm7m, arm7d, arm7dm, arm7di,
14200 arm7dmi, arm70, arm700, arm700i, arm710, arm710c, arm7100, arm720,
14201 arm7500, arm7500fe, arm7tdmi, arm7tdmi-s, arm710t, arm720t,
14202 arm740t, strongarm, strongarm110, strongarm1100, strongarm1110,
14203 arm8, arm810, arm9, arm9e, arm920, arm920t, arm922t, arm946e-s,
14204 arm966e-s, arm968e-s, arm926ej-s, arm940t, arm9tdmi, arm10tdmi,
14205 arm1020t, arm1026ej-s, arm10e, arm1020e, arm1022e, arm1136j-s,
14206 arm1136jf-s, mpcore, mpcorenovfp, arm1156t2-s, arm1156t2f-s,
14207 arm1176jz-s, arm1176jzf-s, generic-armv7-a, cortex-a5, cortex-a7,
14208 cortex-a8, cortex-a9, cortex-a12, cortex-a15, cortex-a17,
14209 cortex-a32, cortex-a35, cortex-a53, cortex-a55, cortex-a57,
14210 cortex-a72, cortex-a73, cortex-a75, cortex-r4, cortex-r4f,
14211 cortex-r5, cortex-r7, cortex-r8, cortex-r52, cortex-m33,
14212 cortex-m23, cortex-m7, cortex-m4, cortex-m3, cortex-m1, cortex-m0,
14213 cortex-m0plus, cortex-m1.small-multiply, cortex-m0.small-multiply,
14214 cortex-m0plus.small-multiply, exynos-m1, marvell-pj4, xscale,
14215 iwmmxt, iwmmxt2, ep9312, fa526, fa626, fa606te, fa626te, fmp626,
14216 fa726te, xgene1.
14217
14218 Additionally, this option can specify that GCC should tune the
14219 performance of the code for a big.LITTLE system. Permissible names
14220 are: cortex-a15.cortex-a7, cortex-a17.cortex-a7,
14221 cortex-a57.cortex-a53, cortex-a72.cortex-a53,
14222 cortex-a72.cortex-a35, cortex-a73.cortex-a53,
14223 cortex-a75.cortex-a55.
14224
14225 -mtune=generic-arch specifies that GCC should tune the performance
14226 for a blend of processors within architecture arch. The aim is to
14227 generate code that run well on the current most popular processors,
14228 balancing between optimizations that benefit some CPUs in the
14229 range, and avoiding performance pitfalls of other CPUs. The
14230 effects of this option may change in future GCC versions as CPU
14231 models come and go.
14232
14233 -mtune permits the same extension options as -mcpu, but the
14234 extension options do not affect the tuning of the generated code.
14235
14236 -mtune=native causes the compiler to auto-detect the CPU of the
14237 build computer. At present, this feature is only supported on
14238 GNU/Linux, and not all architectures are recognized. If the auto-
14239 detect is unsuccessful the option has no effect.
14240
14241 -mcpu=name[+extension...]
14242 This specifies the name of the target ARM processor. GCC uses this
14243 name to derive the name of the target ARM architecture (as if
14244 specified by -march) and the ARM processor type for which to tune
14245 for performance (as if specified by -mtune). Where this option is
14246 used in conjunction with -march or -mtune, those options take
14247 precedence over the appropriate part of this option.
14248
14249 Many of the supported CPUs implement optional architectural
14250 extensions. Where this is so the architectural extensions are
14251 normally enabled by default. If implementations that lack the
14252 extension exist, then the extension syntax can be used to disable
14253 those extensions that have been omitted. For floating-point and
14254 Advanced SIMD (Neon) instructions, the settings of the options
14255 -mfloat-abi and -mfpu must also be considered: floating-point and
14256 Advanced SIMD instructions will only be used if -mfloat-abi is not
14257 set to soft; and any setting of -mfpu other than auto will override
14258 the available floating-point and SIMD extension instructions.
14259
14260 For example, cortex-a9 can be found in three major configurations:
14261 integer only, with just a floating-point unit or with floating-
14262 point and Advanced SIMD. The default is to enable all the
14263 instructions, but the extensions +nosimd and +nofp can be used to
14264 disable just the SIMD or both the SIMD and floating-point
14265 instructions respectively.
14266
14267 Permissible names for this option are the same as those for -mtune.
14268
14269 The following extension options are common to the listed CPUs:
14270
14271 +nodsp
14272 Disable the DSP instructions on cortex-m33.
14273
14274 +nofp
14275 Disables the floating-point instructions on arm9e, arm946e-s,
14276 arm966e-s, arm968e-s, arm10e, arm1020e, arm1022e, arm926ej-s,
14277 arm1026ej-s, cortex-r5, cortex-r7, cortex-r8, cortex-m4,
14278 cortex-m7 and cortex-m33. Disables the floating-point and SIMD
14279 instructions on generic-armv7-a, cortex-a5, cortex-a7,
14280 cortex-a8, cortex-a9, cortex-a12, cortex-a15, cortex-a17,
14281 cortex-a15.cortex-a7, cortex-a17.cortex-a7, cortex-a32,
14282 cortex-a35, cortex-a53 and cortex-a55.
14283
14284 +nofp.dp
14285 Disables the double-precision component of the floating-point
14286 instructions on cortex-r5, cortex-r7, cortex-r8, cortex-r52 and
14287 cortex-m7.
14288
14289 +nosimd
14290 Disables the SIMD (but not floating-point) instructions on
14291 generic-armv7-a, cortex-a5, cortex-a7 and cortex-a9.
14292
14293 +crypto
14294 Enables the cryptographic instructions on cortex-a32,
14295 cortex-a35, cortex-a53, cortex-a55, cortex-a57, cortex-a72,
14296 cortex-a73, cortex-a75, exynos-m1, xgene1,
14297 cortex-a57.cortex-a53, cortex-a72.cortex-a53,
14298 cortex-a73.cortex-a35, cortex-a73.cortex-a53 and
14299 cortex-a75.cortex-a55.
14300
14301 Additionally the generic-armv7-a pseudo target defaults to VFPv3
14302 with 16 double-precision registers. It supports the following
14303 extension options: mp, sec, vfpv3-d16, vfpv3, vfpv3-d16-fp16,
14304 vfpv3-fp16, vfpv4-d16, vfpv4, neon, neon-vfpv3, neon-fp16,
14305 neon-vfpv4. The meanings are the same as for the extensions to
14306 -march=armv7-a.
14307
14308 -mcpu=generic-arch is also permissible, and is equivalent to
14309 -march=arch -mtune=generic-arch. See -mtune for more information.
14310
14311 -mcpu=native causes the compiler to auto-detect the CPU of the
14312 build computer. At present, this feature is only supported on
14313 GNU/Linux, and not all architectures are recognized. If the auto-
14314 detect is unsuccessful the option has no effect.
14315
14316 -mfpu=name
14317 This specifies what floating-point hardware (or hardware emulation)
14318 is available on the target. Permissible names are: auto, vfpv2,
14319 vfpv3, vfpv3-fp16, vfpv3-d16, vfpv3-d16-fp16, vfpv3xd,
14320 vfpv3xd-fp16, neon-vfpv3, neon-fp16, vfpv4, vfpv4-d16, fpv4-sp-d16,
14321 neon-vfpv4, fpv5-d16, fpv5-sp-d16, fp-armv8, neon-fp-armv8 and
14322 crypto-neon-fp-armv8. Note that neon is an alias for neon-vfpv3
14323 and vfp is an alias for vfpv2.
14324
14325 The setting auto is the default and is special. It causes the
14326 compiler to select the floating-point and Advanced SIMD
14327 instructions based on the settings of -mcpu and -march.
14328
14329 If the selected floating-point hardware includes the NEON extension
14330 (e.g. -mfpu=neon), note that floating-point operations are not
14331 generated by GCC's auto-vectorization pass unless
14332 -funsafe-math-optimizations is also specified. This is because
14333 NEON hardware does not fully implement the IEEE 754 standard for
14334 floating-point arithmetic (in particular denormal values are
14335 treated as zero), so the use of NEON instructions may lead to a
14336 loss of precision.
14337
14338 You can also set the fpu name at function level by using the
14339 "target("fpu=")" function attributes or pragmas.
14340
14341 -mfp16-format=name
14342 Specify the format of the "__fp16" half-precision floating-point
14343 type. Permissible names are none, ieee, and alternative; the
14344 default is none, in which case the "__fp16" type is not defined.
14345
14346 -mstructure-size-boundary=n
14347 The sizes of all structures and unions are rounded up to a multiple
14348 of the number of bits set by this option. Permissible values are
14349 8, 32 and 64. The default value varies for different toolchains.
14350 For the COFF targeted toolchain the default value is 8. A value of
14351 64 is only allowed if the underlying ABI supports it.
14352
14353 Specifying a larger number can produce faster, more efficient code,
14354 but can also increase the size of the program. Different values
14355 are potentially incompatible. Code compiled with one value cannot
14356 necessarily expect to work with code or libraries compiled with
14357 another value, if they exchange information using structures or
14358 unions.
14359
14360 This option is deprecated.
14361
14362 -mabort-on-noreturn
14363 Generate a call to the function "abort" at the end of a "noreturn"
14364 function. It is executed if the function tries to return.
14365
14366 -mlong-calls
14367 -mno-long-calls
14368 Tells the compiler to perform function calls by first loading the
14369 address of the function into a register and then performing a
14370 subroutine call on this register. This switch is needed if the
14371 target function lies outside of the 64-megabyte addressing range of
14372 the offset-based version of subroutine call instruction.
14373
14374 Even if this switch is enabled, not all function calls are turned
14375 into long calls. The heuristic is that static functions, functions
14376 that have the "short_call" attribute, functions that are inside the
14377 scope of a "#pragma no_long_calls" directive, and functions whose
14378 definitions have already been compiled within the current
14379 compilation unit are not turned into long calls. The exceptions to
14380 this rule are that weak function definitions, functions with the
14381 "long_call" attribute or the "section" attribute, and functions
14382 that are within the scope of a "#pragma long_calls" directive are
14383 always turned into long calls.
14384
14385 This feature is not enabled by default. Specifying -mno-long-calls
14386 restores the default behavior, as does placing the function calls
14387 within the scope of a "#pragma long_calls_off" directive. Note
14388 these switches have no effect on how the compiler generates code to
14389 handle function calls via function pointers.
14390
14391 -msingle-pic-base
14392 Treat the register used for PIC addressing as read-only, rather
14393 than loading it in the prologue for each function. The runtime
14394 system is responsible for initializing this register with an
14395 appropriate value before execution begins.
14396
14397 -mpic-register=reg
14398 Specify the register to be used for PIC addressing. For standard
14399 PIC base case, the default is any suitable register determined by
14400 compiler. For single PIC base case, the default is R9 if target is
14401 EABI based or stack-checking is enabled, otherwise the default is
14402 R10.
14403
14404 -mpic-data-is-text-relative
14405 Assume that the displacement between the text and data segments is
14406 fixed at static link time. This permits using PC-relative
14407 addressing operations to access data known to be in the data
14408 segment. For non-VxWorks RTP targets, this option is enabled by
14409 default. When disabled on such targets, it will enable
14410 -msingle-pic-base by default.
14411
14412 -mpoke-function-name
14413 Write the name of each function into the text section, directly
14414 preceding the function prologue. The generated code is similar to
14415 this:
14416
14417 t0
14418 .ascii "arm_poke_function_name", 0
14419 .align
14420 t1
14421 .word 0xff000000 + (t1 - t0)
14422 arm_poke_function_name
14423 mov ip, sp
14424 stmfd sp!, {fp, ip, lr, pc}
14425 sub fp, ip, #4
14426
14427 When performing a stack backtrace, code can inspect the value of
14428 "pc" stored at "fp + 0". If the trace function then looks at
14429 location "pc - 12" and the top 8 bits are set, then we know that
14430 there is a function name embedded immediately preceding this
14431 location and has length "((pc[-3]) & 0xff000000)".
14432
14433 -mthumb
14434 -marm
14435 Select between generating code that executes in ARM and Thumb
14436 states. The default for most configurations is to generate code
14437 that executes in ARM state, but the default can be changed by
14438 configuring GCC with the --with-mode=state configure option.
14439
14440 You can also override the ARM and Thumb mode for each function by
14441 using the "target("thumb")" and "target("arm")" function attributes
14442 or pragmas.
14443
14444 -mflip-thumb
14445 Switch ARM/Thumb modes on alternating functions. This option is
14446 provided for regression testing of mixed Thumb/ARM code generation,
14447 and is not intended for ordinary use in compiling code.
14448
14449 -mtpcs-frame
14450 Generate a stack frame that is compliant with the Thumb Procedure
14451 Call Standard for all non-leaf functions. (A leaf function is one
14452 that does not call any other functions.) The default is
14453 -mno-tpcs-frame.
14454
14455 -mtpcs-leaf-frame
14456 Generate a stack frame that is compliant with the Thumb Procedure
14457 Call Standard for all leaf functions. (A leaf function is one that
14458 does not call any other functions.) The default is
14459 -mno-apcs-leaf-frame.
14460
14461 -mcallee-super-interworking
14462 Gives all externally visible functions in the file being compiled
14463 an ARM instruction set header which switches to Thumb mode before
14464 executing the rest of the function. This allows these functions to
14465 be called from non-interworking code. This option is not valid in
14466 AAPCS configurations because interworking is enabled by default.
14467
14468 -mcaller-super-interworking
14469 Allows calls via function pointers (including virtual functions) to
14470 execute correctly regardless of whether the target code has been
14471 compiled for interworking or not. There is a small overhead in the
14472 cost of executing a function pointer if this option is enabled.
14473 This option is not valid in AAPCS configurations because
14474 interworking is enabled by default.
14475
14476 -mtp=name
14477 Specify the access model for the thread local storage pointer. The
14478 valid models are soft, which generates calls to "__aeabi_read_tp",
14479 cp15, which fetches the thread pointer from "cp15" directly
14480 (supported in the arm6k architecture), and auto, which uses the
14481 best available method for the selected processor. The default
14482 setting is auto.
14483
14484 -mtls-dialect=dialect
14485 Specify the dialect to use for accessing thread local storage. Two
14486 dialects are supported---gnu and gnu2. The gnu dialect selects the
14487 original GNU scheme for supporting local and global dynamic TLS
14488 models. The gnu2 dialect selects the GNU descriptor scheme, which
14489 provides better performance for shared libraries. The GNU
14490 descriptor scheme is compatible with the original scheme, but does
14491 require new assembler, linker and library support. Initial and
14492 local exec TLS models are unaffected by this option and always use
14493 the original scheme.
14494
14495 -mword-relocations
14496 Only generate absolute relocations on word-sized values (i.e.
14497 R_ARM_ABS32). This is enabled by default on targets (uClinux,
14498 SymbianOS) where the runtime loader imposes this restriction, and
14499 when -fpic or -fPIC is specified.
14500
14501 -mfix-cortex-m3-ldrd
14502 Some Cortex-M3 cores can cause data corruption when "ldrd"
14503 instructions with overlapping destination and base registers are
14504 used. This option avoids generating these instructions. This
14505 option is enabled by default when -mcpu=cortex-m3 is specified.
14506
14507 -munaligned-access
14508 -mno-unaligned-access
14509 Enables (or disables) reading and writing of 16- and 32- bit values
14510 from addresses that are not 16- or 32- bit aligned. By default
14511 unaligned access is disabled for all pre-ARMv6, all ARMv6-M and for
14512 ARMv8-M Baseline architectures, and enabled for all other
14513 architectures. If unaligned access is not enabled then words in
14514 packed data structures are accessed a byte at a time.
14515
14516 The ARM attribute "Tag_CPU_unaligned_access" is set in the
14517 generated object file to either true or false, depending upon the
14518 setting of this option. If unaligned access is enabled then the
14519 preprocessor symbol "__ARM_FEATURE_UNALIGNED" is also defined.
14520
14521 -mneon-for-64bits
14522 Enables using Neon to handle scalar 64-bits operations. This is
14523 disabled by default since the cost of moving data from core
14524 registers to Neon is high.
14525
14526 -mslow-flash-data
14527 Assume loading data from flash is slower than fetching instruction.
14528 Therefore literal load is minimized for better performance. This
14529 option is only supported when compiling for ARMv7 M-profile and off
14530 by default.
14531
14532 -masm-syntax-unified
14533 Assume inline assembler is using unified asm syntax. The default
14534 is currently off which implies divided syntax. This option has no
14535 impact on Thumb2. However, this may change in future releases of
14536 GCC. Divided syntax should be considered deprecated.
14537
14538 -mrestrict-it
14539 Restricts generation of IT blocks to conform to the rules of
14540 ARMv8-A. IT blocks can only contain a single 16-bit instruction
14541 from a select set of instructions. This option is on by default for
14542 ARMv8-A Thumb mode.
14543
14544 -mprint-tune-info
14545 Print CPU tuning information as comment in assembler file. This is
14546 an option used only for regression testing of the compiler and not
14547 intended for ordinary use in compiling code. This option is
14548 disabled by default.
14549
14550 -mverbose-cost-dump
14551 Enable verbose cost model dumping in the debug dump files. This
14552 option is provided for use in debugging the compiler.
14553
14554 -mpure-code
14555 Do not allow constant data to be placed in code sections.
14556 Additionally, when compiling for ELF object format give all text
14557 sections the ELF processor-specific section attribute
14558 "SHF_ARM_PURECODE". This option is only available when generating
14559 non-pic code for M-profile targets with the MOVT instruction.
14560
14561 -mcmse
14562 Generate secure code as per the "ARMv8-M Security Extensions:
14563 Requirements on Development Tools Engineering Specification", which
14564 can be found on
14565 <http://infocenter.arm.com/help/topic/com.arm.doc.ecm0359818/ECM0359818_armv8m_security_extensions_reqs_on_dev_tools_1_0.pdf>.
14566
14567 AVR Options
14568
14569 These options are defined for AVR implementations:
14570
14571 -mmcu=mcu
14572 Specify Atmel AVR instruction set architectures (ISA) or MCU type.
14573
14574 The default for this option is@tie{}avr2.
14575
14576 GCC supports the following AVR devices and ISAs:
14577
14578 "avr2"
14579 "Classic" devices with up to 8@tie{}KiB of program memory.
14580 mcu@tie{}= "attiny22", "attiny26", "at90c8534", "at90s2313",
14581 "at90s2323", "at90s2333", "at90s2343", "at90s4414",
14582 "at90s4433", "at90s4434", "at90s8515", "at90s8535".
14583
14584 "avr25"
14585 "Classic" devices with up to 8@tie{}KiB of program memory and
14586 with the "MOVW" instruction. mcu@tie{}= "ata5272", "ata6616c",
14587 "attiny13", "attiny13a", "attiny2313", "attiny2313a",
14588 "attiny24", "attiny24a", "attiny25", "attiny261", "attiny261a",
14589 "attiny43u", "attiny4313", "attiny44", "attiny44a",
14590 "attiny441", "attiny45", "attiny461", "attiny461a", "attiny48",
14591 "attiny828", "attiny84", "attiny84a", "attiny841", "attiny85",
14592 "attiny861", "attiny861a", "attiny87", "attiny88", "at86rf401".
14593
14594 "avr3"
14595 "Classic" devices with 16@tie{}KiB up to 64@tie{}KiB of
14596 program memory. mcu@tie{}= "at43usb355", "at76c711".
14597
14598 "avr31"
14599 "Classic" devices with 128@tie{}KiB of program memory.
14600 mcu@tie{}= "atmega103", "at43usb320".
14601
14602 "avr35"
14603 "Classic" devices with 16@tie{}KiB up to 64@tie{}KiB of program
14604 memory and with the "MOVW" instruction. mcu@tie{}= "ata5505",
14605 "ata6617c", "ata664251", "atmega16u2", "atmega32u2",
14606 "atmega8u2", "attiny1634", "attiny167", "at90usb162",
14607 "at90usb82".
14608
14609 "avr4"
14610 "Enhanced" devices with up to 8@tie{}KiB of program memory.
14611 mcu@tie{}= "ata6285", "ata6286", "ata6289", "ata6612c",
14612 "atmega48", "atmega48a", "atmega48p", "atmega48pa",
14613 "atmega48pb", "atmega8", "atmega8a", "atmega8hva",
14614 "atmega8515", "atmega8535", "atmega88", "atmega88a",
14615 "atmega88p", "atmega88pa", "atmega88pb", "at90pwm1",
14616 "at90pwm2", "at90pwm2b", "at90pwm3", "at90pwm3b", "at90pwm81".
14617
14618 "avr5"
14619 "Enhanced" devices with 16@tie{}KiB up to 64@tie{}KiB of
14620 program memory. mcu@tie{}= "ata5702m322", "ata5782",
14621 "ata5790", "ata5790n", "ata5791", "ata5795", "ata5831",
14622 "ata6613c", "ata6614q", "ata8210", "ata8510", "atmega16",
14623 "atmega16a", "atmega16hva", "atmega16hva2", "atmega16hvb",
14624 "atmega16hvbrevb", "atmega16m1", "atmega16u4", "atmega161",
14625 "atmega162", "atmega163", "atmega164a", "atmega164p",
14626 "atmega164pa", "atmega165", "atmega165a", "atmega165p",
14627 "atmega165pa", "atmega168", "atmega168a", "atmega168p",
14628 "atmega168pa", "atmega168pb", "atmega169", "atmega169a",
14629 "atmega169p", "atmega169pa", "atmega32", "atmega32a",
14630 "atmega32c1", "atmega32hvb", "atmega32hvbrevb", "atmega32m1",
14631 "atmega32u4", "atmega32u6", "atmega323", "atmega324a",
14632 "atmega324p", "atmega324pa", "atmega325", "atmega325a",
14633 "atmega325p", "atmega325pa", "atmega3250", "atmega3250a",
14634 "atmega3250p", "atmega3250pa", "atmega328", "atmega328p",
14635 "atmega328pb", "atmega329", "atmega329a", "atmega329p",
14636 "atmega329pa", "atmega3290", "atmega3290a", "atmega3290p",
14637 "atmega3290pa", "atmega406", "atmega64", "atmega64a",
14638 "atmega64c1", "atmega64hve", "atmega64hve2", "atmega64m1",
14639 "atmega64rfr2", "atmega640", "atmega644", "atmega644a",
14640 "atmega644p", "atmega644pa", "atmega644rfr2", "atmega645",
14641 "atmega645a", "atmega645p", "atmega6450", "atmega6450a",
14642 "atmega6450p", "atmega649", "atmega649a", "atmega649p",
14643 "atmega6490", "atmega6490a", "atmega6490p", "at90can32",
14644 "at90can64", "at90pwm161", "at90pwm216", "at90pwm316",
14645 "at90scr100", "at90usb646", "at90usb647", "at94k", "m3000".
14646
14647 "avr51"
14648 "Enhanced" devices with 128@tie{}KiB of program memory.
14649 mcu@tie{}= "atmega128", "atmega128a", "atmega128rfa1",
14650 "atmega128rfr2", "atmega1280", "atmega1281", "atmega1284",
14651 "atmega1284p", "atmega1284rfr2", "at90can128", "at90usb1286",
14652 "at90usb1287".
14653
14654 "avr6"
14655 "Enhanced" devices with 3-byte PC, i.e. with more than
14656 128@tie{}KiB of program memory. mcu@tie{}= "atmega256rfr2",
14657 "atmega2560", "atmega2561", "atmega2564rfr2".
14658
14659 "avrxmega2"
14660 "XMEGA" devices with more than 8@tie{}KiB and up to 64@tie{}KiB
14661 of program memory. mcu@tie{}= "atxmega16a4", "atxmega16a4u",
14662 "atxmega16c4", "atxmega16d4", "atxmega16e5", "atxmega32a4",
14663 "atxmega32a4u", "atxmega32c3", "atxmega32c4", "atxmega32d3",
14664 "atxmega32d4", "atxmega32e5", "atxmega8e5".
14665
14666 "avrxmega3"
14667 "XMEGA" devices with up to 64@tie{}KiB of combined program
14668 memory and RAM, and with program memory visible in the RAM
14669 address space. mcu@tie{}= "attiny1614", "attiny1616",
14670 "attiny1617", "attiny212", "attiny214", "attiny3214",
14671 "attiny3216", "attiny3217", "attiny412", "attiny414",
14672 "attiny416", "attiny417", "attiny814", "attiny816",
14673 "attiny817".
14674
14675 "avrxmega4"
14676 "XMEGA" devices with more than 64@tie{}KiB and up to
14677 128@tie{}KiB of program memory. mcu@tie{}= "atxmega64a3",
14678 "atxmega64a3u", "atxmega64a4u", "atxmega64b1", "atxmega64b3",
14679 "atxmega64c3", "atxmega64d3", "atxmega64d4".
14680
14681 "avrxmega5"
14682 "XMEGA" devices with more than 64@tie{}KiB and up to
14683 128@tie{}KiB of program memory and more than 64@tie{}KiB of
14684 RAM. mcu@tie{}= "atxmega64a1", "atxmega64a1u".
14685
14686 "avrxmega6"
14687 "XMEGA" devices with more than 128@tie{}KiB of program memory.
14688 mcu@tie{}= "atxmega128a3", "atxmega128a3u", "atxmega128b1",
14689 "atxmega128b3", "atxmega128c3", "atxmega128d3", "atxmega128d4",
14690 "atxmega192a3", "atxmega192a3u", "atxmega192c3",
14691 "atxmega192d3", "atxmega256a3", "atxmega256a3b",
14692 "atxmega256a3bu", "atxmega256a3u", "atxmega256c3",
14693 "atxmega256d3", "atxmega384c3", "atxmega384d3".
14694
14695 "avrxmega7"
14696 "XMEGA" devices with more than 128@tie{}KiB of program memory
14697 and more than 64@tie{}KiB of RAM. mcu@tie{}= "atxmega128a1",
14698 "atxmega128a1u", "atxmega128a4u".
14699
14700 "avrtiny"
14701 "TINY" Tiny core devices with 512@tie{}B up to 4@tie{}KiB of
14702 program memory. mcu@tie{}= "attiny10", "attiny20", "attiny4",
14703 "attiny40", "attiny5", "attiny9".
14704
14705 "avr1"
14706 This ISA is implemented by the minimal AVR core and supported
14707 for assembler only. mcu@tie{}= "attiny11", "attiny12",
14708 "attiny15", "attiny28", "at90s1200".
14709
14710 -mabsdata
14711 Assume that all data in static storage can be accessed by LDS / STS
14712 instructions. This option has only an effect on reduced Tiny
14713 devices like ATtiny40. See also the "absdata" AVR Variable
14714 Attributes,variable attribute.
14715
14716 -maccumulate-args
14717 Accumulate outgoing function arguments and acquire/release the
14718 needed stack space for outgoing function arguments once in function
14719 prologue/epilogue. Without this option, outgoing arguments are
14720 pushed before calling a function and popped afterwards.
14721
14722 Popping the arguments after the function call can be expensive on
14723 AVR so that accumulating the stack space might lead to smaller
14724 executables because arguments need not be removed from the stack
14725 after such a function call.
14726
14727 This option can lead to reduced code size for functions that
14728 perform several calls to functions that get their arguments on the
14729 stack like calls to printf-like functions.
14730
14731 -mbranch-cost=cost
14732 Set the branch costs for conditional branch instructions to cost.
14733 Reasonable values for cost are small, non-negative integers. The
14734 default branch cost is 0.
14735
14736 -mcall-prologues
14737 Functions prologues/epilogues are expanded as calls to appropriate
14738 subroutines. Code size is smaller.
14739
14740 -mgas-isr-prologues
14741 Interrupt service routines (ISRs) may use the "__gcc_isr" pseudo
14742 instruction supported by GNU Binutils. If this option is on, the
14743 feature can still be disabled for individual ISRs by means of the
14744 AVR Function Attributes,,"no_gccisr" function attribute. This
14745 feature is activated per default if optimization is on (but not
14746 with -Og, @pxref{Optimize Options}), and if GNU Binutils support
14747 PR21683 ("https://sourceware.org/PR21683").
14748
14749 -mint8
14750 Assume "int" to be 8-bit integer. This affects the sizes of all
14751 types: a "char" is 1 byte, an "int" is 1 byte, a "long" is 2 bytes,
14752 and "long long" is 4 bytes. Please note that this option does not
14753 conform to the C standards, but it results in smaller code size.
14754
14755 -mmain-is-OS_task
14756 Do not save registers in "main". The effect is the same like
14757 attaching attribute AVR Function Attributes,,"OS_task" to "main".
14758 It is activated per default if optimization is on.
14759
14760 -mn-flash=num
14761 Assume that the flash memory has a size of num times 64@tie{}KiB.
14762
14763 -mno-interrupts
14764 Generated code is not compatible with hardware interrupts. Code
14765 size is smaller.
14766
14767 -mrelax
14768 Try to replace "CALL" resp. "JMP" instruction by the shorter
14769 "RCALL" resp. "RJMP" instruction if applicable. Setting -mrelax
14770 just adds the --mlink-relax option to the assembler's command line
14771 and the --relax option to the linker's command line.
14772
14773 Jump relaxing is performed by the linker because jump offsets are
14774 not known before code is located. Therefore, the assembler code
14775 generated by the compiler is the same, but the instructions in the
14776 executable may differ from instructions in the assembler code.
14777
14778 Relaxing must be turned on if linker stubs are needed, see the
14779 section on "EIND" and linker stubs below.
14780
14781 -mrmw
14782 Assume that the device supports the Read-Modify-Write instructions
14783 "XCH", "LAC", "LAS" and "LAT".
14784
14785 -mshort-calls
14786 Assume that "RJMP" and "RCALL" can target the whole program memory.
14787
14788 This option is used internally for multilib selection. It is not
14789 an optimization option, and you don't need to set it by hand.
14790
14791 -msp8
14792 Treat the stack pointer register as an 8-bit register, i.e. assume
14793 the high byte of the stack pointer is zero. In general, you don't
14794 need to set this option by hand.
14795
14796 This option is used internally by the compiler to select and build
14797 multilibs for architectures "avr2" and "avr25". These
14798 architectures mix devices with and without "SPH". For any setting
14799 other than -mmcu=avr2 or -mmcu=avr25 the compiler driver adds or
14800 removes this option from the compiler proper's command line,
14801 because the compiler then knows if the device or architecture has
14802 an 8-bit stack pointer and thus no "SPH" register or not.
14803
14804 -mstrict-X
14805 Use address register "X" in a way proposed by the hardware. This
14806 means that "X" is only used in indirect, post-increment or pre-
14807 decrement addressing.
14808
14809 Without this option, the "X" register may be used in the same way
14810 as "Y" or "Z" which then is emulated by additional instructions.
14811 For example, loading a value with "X+const" addressing with a small
14812 non-negative "const < 64" to a register Rn is performed as
14813
14814 adiw r26, const ; X += const
14815 ld <Rn>, X ; <Rn> = *X
14816 sbiw r26, const ; X -= const
14817
14818 -mtiny-stack
14819 Only change the lower 8@tie{}bits of the stack pointer.
14820
14821 -mfract-convert-truncate
14822 Allow to use truncation instead of rounding towards zero for
14823 fractional fixed-point types.
14824
14825 -nodevicelib
14826 Don't link against AVR-LibC's device specific library "lib<mcu>.a".
14827
14828 -Waddr-space-convert
14829 Warn about conversions between address spaces in the case where the
14830 resulting address space is not contained in the incoming address
14831 space.
14832
14833 -Wmisspelled-isr
14834 Warn if the ISR is misspelled, i.e. without __vector prefix.
14835 Enabled by default.
14836
14837 "EIND" and Devices with More Than 128 Ki Bytes of Flash
14838
14839 Pointers in the implementation are 16@tie{}bits wide. The address of a
14840 function or label is represented as word address so that indirect jumps
14841 and calls can target any code address in the range of 64@tie{}Ki words.
14842
14843 In order to facilitate indirect jump on devices with more than
14844 128@tie{}Ki bytes of program memory space, there is a special function
14845 register called "EIND" that serves as most significant part of the
14846 target address when "EICALL" or "EIJMP" instructions are used.
14847
14848 Indirect jumps and calls on these devices are handled as follows by the
14849 compiler and are subject to some limitations:
14850
14851 * The compiler never sets "EIND".
14852
14853 * The compiler uses "EIND" implicitly in "EICALL"/"EIJMP"
14854 instructions or might read "EIND" directly in order to emulate an
14855 indirect call/jump by means of a "RET" instruction.
14856
14857 * The compiler assumes that "EIND" never changes during the startup
14858 code or during the application. In particular, "EIND" is not
14859 saved/restored in function or interrupt service routine
14860 prologue/epilogue.
14861
14862 * For indirect calls to functions and computed goto, the linker
14863 generates stubs. Stubs are jump pads sometimes also called
14864 trampolines. Thus, the indirect call/jump jumps to such a stub.
14865 The stub contains a direct jump to the desired address.
14866
14867 * Linker relaxation must be turned on so that the linker generates
14868 the stubs correctly in all situations. See the compiler option
14869 -mrelax and the linker option --relax. There are corner cases
14870 where the linker is supposed to generate stubs but aborts without
14871 relaxation and without a helpful error message.
14872
14873 * The default linker script is arranged for code with "EIND = 0". If
14874 code is supposed to work for a setup with "EIND != 0", a custom
14875 linker script has to be used in order to place the sections whose
14876 name start with ".trampolines" into the segment where "EIND" points
14877 to.
14878
14879 * The startup code from libgcc never sets "EIND". Notice that
14880 startup code is a blend of code from libgcc and AVR-LibC. For the
14881 impact of AVR-LibC on "EIND", see the AVR-LibC user manual
14882 ("http://nongnu.org/avr-libc/user-manual/").
14883
14884 * It is legitimate for user-specific startup code to set up "EIND"
14885 early, for example by means of initialization code located in
14886 section ".init3". Such code runs prior to general startup code that
14887 initializes RAM and calls constructors, but after the bit of
14888 startup code from AVR-LibC that sets "EIND" to the segment where
14889 the vector table is located.
14890
14891 #include <avr/io.h>
14892
14893 static void
14894 __attribute__((section(".init3"),naked,used,no_instrument_function))
14895 init3_set_eind (void)
14896 {
14897 __asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t"
14898 "out %i0,r24" :: "n" (&EIND) : "r24","memory");
14899 }
14900
14901 The "__trampolines_start" symbol is defined in the linker script.
14902
14903 * Stubs are generated automatically by the linker if the following
14904 two conditions are met:
14905
14906 -<The address of a label is taken by means of the "gs" modifier>
14907 (short for generate stubs) like so:
14908
14909 LDI r24, lo8(gs(<func>))
14910 LDI r25, hi8(gs(<func>))
14911
14912 -<The final location of that label is in a code segment>
14913 outside the segment where the stubs are located.
14914
14915 * The compiler emits such "gs" modifiers for code labels in the
14916 following situations:
14917
14918 -<Taking address of a function or code label.>
14919 -<Computed goto.>
14920 -<If prologue-save function is used, see -mcall-prologues>
14921 command-line option.
14922
14923 -<Switch/case dispatch tables. If you do not want such dispatch>
14924 tables you can specify the -fno-jump-tables command-line
14925 option.
14926
14927 -<C and C++ constructors/destructors called during
14928 startup/shutdown.>
14929 -<If the tools hit a "gs()" modifier explained above.>
14930 * Jumping to non-symbolic addresses like so is not supported:
14931
14932 int main (void)
14933 {
14934 /* Call function at word address 0x2 */
14935 return ((int(*)(void)) 0x2)();
14936 }
14937
14938 Instead, a stub has to be set up, i.e. the function has to be
14939 called through a symbol ("func_4" in the example):
14940
14941 int main (void)
14942 {
14943 extern int func_4 (void);
14944
14945 /* Call function at byte address 0x4 */
14946 return func_4();
14947 }
14948
14949 and the application be linked with -Wl,--defsym,func_4=0x4.
14950 Alternatively, "func_4" can be defined in the linker script.
14951
14952 Handling of the "RAMPD", "RAMPX", "RAMPY" and "RAMPZ" Special Function
14953 Registers
14954
14955 Some AVR devices support memories larger than the 64@tie{}KiB range
14956 that can be accessed with 16-bit pointers. To access memory locations
14957 outside this 64@tie{}KiB range, the content of a "RAMP" register is
14958 used as high part of the address: The "X", "Y", "Z" address register is
14959 concatenated with the "RAMPX", "RAMPY", "RAMPZ" special function
14960 register, respectively, to get a wide address. Similarly, "RAMPD" is
14961 used together with direct addressing.
14962
14963 * The startup code initializes the "RAMP" special function registers
14964 with zero.
14965
14966 * If a AVR Named Address Spaces,named address space other than
14967 generic or "__flash" is used, then "RAMPZ" is set as needed before
14968 the operation.
14969
14970 * If the device supports RAM larger than 64@tie{}KiB and the compiler
14971 needs to change "RAMPZ" to accomplish an operation, "RAMPZ" is
14972 reset to zero after the operation.
14973
14974 * If the device comes with a specific "RAMP" register, the ISR
14975 prologue/epilogue saves/restores that SFR and initializes it with
14976 zero in case the ISR code might (implicitly) use it.
14977
14978 * RAM larger than 64@tie{}KiB is not supported by GCC for AVR
14979 targets. If you use inline assembler to read from locations
14980 outside the 16-bit address range and change one of the "RAMP"
14981 registers, you must reset it to zero after the access.
14982
14983 AVR Built-in Macros
14984
14985 GCC defines several built-in macros so that the user code can test for
14986 the presence or absence of features. Almost any of the following
14987 built-in macros are deduced from device capabilities and thus triggered
14988 by the -mmcu= command-line option.
14989
14990 For even more AVR-specific built-in macros see AVR Named Address Spaces
14991 and AVR Built-in Functions.
14992
14993 "__AVR_ARCH__"
14994 Build-in macro that resolves to a decimal number that identifies
14995 the architecture and depends on the -mmcu=mcu option. Possible
14996 values are:
14997
14998 2, 25, 3, 31, 35, 4, 5, 51, 6
14999
15000 for mcu="avr2", "avr25", "avr3", "avr31", "avr35", "avr4", "avr5",
15001 "avr51", "avr6",
15002
15003 respectively and
15004
15005 100, 102, 103, 104, 105, 106, 107
15006
15007 for mcu="avrtiny", "avrxmega2", "avrxmega3", "avrxmega4",
15008 "avrxmega5", "avrxmega6", "avrxmega7", respectively. If mcu
15009 specifies a device, this built-in macro is set accordingly. For
15010 example, with -mmcu=atmega8 the macro is defined to 4.
15011
15012 "__AVR_Device__"
15013 Setting -mmcu=device defines this built-in macro which reflects the
15014 device's name. For example, -mmcu=atmega8 defines the built-in
15015 macro "__AVR_ATmega8__", -mmcu=attiny261a defines
15016 "__AVR_ATtiny261A__", etc.
15017
15018 The built-in macros' names follow the scheme "__AVR_Device__" where
15019 Device is the device name as from the AVR user manual. The
15020 difference between Device in the built-in macro and device in
15021 -mmcu=device is that the latter is always lowercase.
15022
15023 If device is not a device but only a core architecture like avr51,
15024 this macro is not defined.
15025
15026 "__AVR_DEVICE_NAME__"
15027 Setting -mmcu=device defines this built-in macro to the device's
15028 name. For example, with -mmcu=atmega8 the macro is defined to
15029 "atmega8".
15030
15031 If device is not a device but only a core architecture like avr51,
15032 this macro is not defined.
15033
15034 "__AVR_XMEGA__"
15035 The device / architecture belongs to the XMEGA family of devices.
15036
15037 "__AVR_HAVE_ELPM__"
15038 The device has the "ELPM" instruction.
15039
15040 "__AVR_HAVE_ELPMX__"
15041 The device has the "ELPM Rn,Z" and "ELPM Rn,Z+" instructions.
15042
15043 "__AVR_HAVE_MOVW__"
15044 The device has the "MOVW" instruction to perform 16-bit register-
15045 register moves.
15046
15047 "__AVR_HAVE_LPMX__"
15048 The device has the "LPM Rn,Z" and "LPM Rn,Z+" instructions.
15049
15050 "__AVR_HAVE_MUL__"
15051 The device has a hardware multiplier.
15052
15053 "__AVR_HAVE_JMP_CALL__"
15054 The device has the "JMP" and "CALL" instructions. This is the case
15055 for devices with more than 8@tie{}KiB of program memory.
15056
15057 "__AVR_HAVE_EIJMP_EICALL__"
15058 "__AVR_3_BYTE_PC__"
15059 The device has the "EIJMP" and "EICALL" instructions. This is the
15060 case for devices with more than 128@tie{}KiB of program memory.
15061 This also means that the program counter (PC) is 3@tie{}bytes wide.
15062
15063 "__AVR_2_BYTE_PC__"
15064 The program counter (PC) is 2@tie{}bytes wide. This is the case for
15065 devices with up to 128@tie{}KiB of program memory.
15066
15067 "__AVR_HAVE_8BIT_SP__"
15068 "__AVR_HAVE_16BIT_SP__"
15069 The stack pointer (SP) register is treated as 8-bit respectively
15070 16-bit register by the compiler. The definition of these macros is
15071 affected by -mtiny-stack.
15072
15073 "__AVR_HAVE_SPH__"
15074 "__AVR_SP8__"
15075 The device has the SPH (high part of stack pointer) special
15076 function register or has an 8-bit stack pointer, respectively. The
15077 definition of these macros is affected by -mmcu= and in the cases
15078 of -mmcu=avr2 and -mmcu=avr25 also by -msp8.
15079
15080 "__AVR_HAVE_RAMPD__"
15081 "__AVR_HAVE_RAMPX__"
15082 "__AVR_HAVE_RAMPY__"
15083 "__AVR_HAVE_RAMPZ__"
15084 The device has the "RAMPD", "RAMPX", "RAMPY", "RAMPZ" special
15085 function register, respectively.
15086
15087 "__NO_INTERRUPTS__"
15088 This macro reflects the -mno-interrupts command-line option.
15089
15090 "__AVR_ERRATA_SKIP__"
15091 "__AVR_ERRATA_SKIP_JMP_CALL__"
15092 Some AVR devices (AT90S8515, ATmega103) must not skip 32-bit
15093 instructions because of a hardware erratum. Skip instructions are
15094 "SBRS", "SBRC", "SBIS", "SBIC" and "CPSE". The second macro is
15095 only defined if "__AVR_HAVE_JMP_CALL__" is also set.
15096
15097 "__AVR_ISA_RMW__"
15098 The device has Read-Modify-Write instructions (XCH, LAC, LAS and
15099 LAT).
15100
15101 "__AVR_SFR_OFFSET__=offset"
15102 Instructions that can address I/O special function registers
15103 directly like "IN", "OUT", "SBI", etc. may use a different address
15104 as if addressed by an instruction to access RAM like "LD" or "STS".
15105 This offset depends on the device architecture and has to be
15106 subtracted from the RAM address in order to get the respective
15107 I/O@tie{}address.
15108
15109 "__AVR_SHORT_CALLS__"
15110 The -mshort-calls command line option is set.
15111
15112 "__AVR_PM_BASE_ADDRESS__=addr"
15113 Some devices support reading from flash memory by means of "LD*"
15114 instructions. The flash memory is seen in the data address space
15115 at an offset of "__AVR_PM_BASE_ADDRESS__". If this macro is not
15116 defined, this feature is not available. If defined, the address
15117 space is linear and there is no need to put ".rodata" into RAM.
15118 This is handled by the default linker description file, and is
15119 currently available for "avrtiny" and "avrxmega3". Even more
15120 convenient, there is no need to use address spaces like "__flash"
15121 or features like attribute "progmem" and "pgm_read_*".
15122
15123 "__WITH_AVRLIBC__"
15124 The compiler is configured to be used together with AVR-Libc. See
15125 the --with-avrlibc configure option.
15126
15127 Blackfin Options
15128
15129 -mcpu=cpu[-sirevision]
15130 Specifies the name of the target Blackfin processor. Currently,
15131 cpu can be one of bf512, bf514, bf516, bf518, bf522, bf523, bf524,
15132 bf525, bf526, bf527, bf531, bf532, bf533, bf534, bf536, bf537,
15133 bf538, bf539, bf542, bf544, bf547, bf548, bf549, bf542m, bf544m,
15134 bf547m, bf548m, bf549m, bf561, bf592.
15135
15136 The optional sirevision specifies the silicon revision of the
15137 target Blackfin processor. Any workarounds available for the
15138 targeted silicon revision are enabled. If sirevision is none, no
15139 workarounds are enabled. If sirevision is any, all workarounds for
15140 the targeted processor are enabled. The "__SILICON_REVISION__"
15141 macro is defined to two hexadecimal digits representing the major
15142 and minor numbers in the silicon revision. If sirevision is none,
15143 the "__SILICON_REVISION__" is not defined. If sirevision is any,
15144 the "__SILICON_REVISION__" is defined to be 0xffff. If this
15145 optional sirevision is not used, GCC assumes the latest known
15146 silicon revision of the targeted Blackfin processor.
15147
15148 GCC defines a preprocessor macro for the specified cpu. For the
15149 bfin-elf toolchain, this option causes the hardware BSP provided by
15150 libgloss to be linked in if -msim is not given.
15151
15152 Without this option, bf532 is used as the processor by default.
15153
15154 Note that support for bf561 is incomplete. For bf561, only the
15155 preprocessor macro is defined.
15156
15157 -msim
15158 Specifies that the program will be run on the simulator. This
15159 causes the simulator BSP provided by libgloss to be linked in.
15160 This option has effect only for bfin-elf toolchain. Certain other
15161 options, such as -mid-shared-library and -mfdpic, imply -msim.
15162
15163 -momit-leaf-frame-pointer
15164 Don't keep the frame pointer in a register for leaf functions.
15165 This avoids the instructions to save, set up and restore frame
15166 pointers and makes an extra register available in leaf functions.
15167
15168 -mspecld-anomaly
15169 When enabled, the compiler ensures that the generated code does not
15170 contain speculative loads after jump instructions. If this option
15171 is used, "__WORKAROUND_SPECULATIVE_LOADS" is defined.
15172
15173 -mno-specld-anomaly
15174 Don't generate extra code to prevent speculative loads from
15175 occurring.
15176
15177 -mcsync-anomaly
15178 When enabled, the compiler ensures that the generated code does not
15179 contain CSYNC or SSYNC instructions too soon after conditional
15180 branches. If this option is used, "__WORKAROUND_SPECULATIVE_SYNCS"
15181 is defined.
15182
15183 -mno-csync-anomaly
15184 Don't generate extra code to prevent CSYNC or SSYNC instructions
15185 from occurring too soon after a conditional branch.
15186
15187 -mlow-64k
15188 When enabled, the compiler is free to take advantage of the
15189 knowledge that the entire program fits into the low 64k of memory.
15190
15191 -mno-low-64k
15192 Assume that the program is arbitrarily large. This is the default.
15193
15194 -mstack-check-l1
15195 Do stack checking using information placed into L1 scratchpad
15196 memory by the uClinux kernel.
15197
15198 -mid-shared-library
15199 Generate code that supports shared libraries via the library ID
15200 method. This allows for execute in place and shared libraries in
15201 an environment without virtual memory management. This option
15202 implies -fPIC. With a bfin-elf target, this option implies -msim.
15203
15204 -mno-id-shared-library
15205 Generate code that doesn't assume ID-based shared libraries are
15206 being used. This is the default.
15207
15208 -mleaf-id-shared-library
15209 Generate code that supports shared libraries via the library ID
15210 method, but assumes that this library or executable won't link
15211 against any other ID shared libraries. That allows the compiler to
15212 use faster code for jumps and calls.
15213
15214 -mno-leaf-id-shared-library
15215 Do not assume that the code being compiled won't link against any
15216 ID shared libraries. Slower code is generated for jump and call
15217 insns.
15218
15219 -mshared-library-id=n
15220 Specifies the identification number of the ID-based shared library
15221 being compiled. Specifying a value of 0 generates more compact
15222 code; specifying other values forces the allocation of that number
15223 to the current library but is no more space- or time-efficient than
15224 omitting this option.
15225
15226 -msep-data
15227 Generate code that allows the data segment to be located in a
15228 different area of memory from the text segment. This allows for
15229 execute in place in an environment without virtual memory
15230 management by eliminating relocations against the text section.
15231
15232 -mno-sep-data
15233 Generate code that assumes that the data segment follows the text
15234 segment. This is the default.
15235
15236 -mlong-calls
15237 -mno-long-calls
15238 Tells the compiler to perform function calls by first loading the
15239 address of the function into a register and then performing a
15240 subroutine call on this register. This switch is needed if the
15241 target function lies outside of the 24-bit addressing range of the
15242 offset-based version of subroutine call instruction.
15243
15244 This feature is not enabled by default. Specifying -mno-long-calls
15245 restores the default behavior. Note these switches have no effect
15246 on how the compiler generates code to handle function calls via
15247 function pointers.
15248
15249 -mfast-fp
15250 Link with the fast floating-point library. This library relaxes
15251 some of the IEEE floating-point standard's rules for checking
15252 inputs against Not-a-Number (NAN), in the interest of performance.
15253
15254 -minline-plt
15255 Enable inlining of PLT entries in function calls to functions that
15256 are not known to bind locally. It has no effect without -mfdpic.
15257
15258 -mmulticore
15259 Build a standalone application for multicore Blackfin processors.
15260 This option causes proper start files and link scripts supporting
15261 multicore to be used, and defines the macro "__BFIN_MULTICORE". It
15262 can only be used with -mcpu=bf561[-sirevision].
15263
15264 This option can be used with -mcorea or -mcoreb, which selects the
15265 one-application-per-core programming model. Without -mcorea or
15266 -mcoreb, the single-application/dual-core programming model is
15267 used. In this model, the main function of Core B should be named as
15268 "coreb_main".
15269
15270 If this option is not used, the single-core application programming
15271 model is used.
15272
15273 -mcorea
15274 Build a standalone application for Core A of BF561 when using the
15275 one-application-per-core programming model. Proper start files and
15276 link scripts are used to support Core A, and the macro
15277 "__BFIN_COREA" is defined. This option can only be used in
15278 conjunction with -mmulticore.
15279
15280 -mcoreb
15281 Build a standalone application for Core B of BF561 when using the
15282 one-application-per-core programming model. Proper start files and
15283 link scripts are used to support Core B, and the macro
15284 "__BFIN_COREB" is defined. When this option is used, "coreb_main"
15285 should be used instead of "main". This option can only be used in
15286 conjunction with -mmulticore.
15287
15288 -msdram
15289 Build a standalone application for SDRAM. Proper start files and
15290 link scripts are used to put the application into SDRAM, and the
15291 macro "__BFIN_SDRAM" is defined. The loader should initialize
15292 SDRAM before loading the application.
15293
15294 -micplb
15295 Assume that ICPLBs are enabled at run time. This has an effect on
15296 certain anomaly workarounds. For Linux targets, the default is to
15297 assume ICPLBs are enabled; for standalone applications the default
15298 is off.
15299
15300 C6X Options
15301
15302 -march=name
15303 This specifies the name of the target architecture. GCC uses this
15304 name to determine what kind of instructions it can emit when
15305 generating assembly code. Permissible names are: c62x, c64x,
15306 c64x+, c67x, c67x+, c674x.
15307
15308 -mbig-endian
15309 Generate code for a big-endian target.
15310
15311 -mlittle-endian
15312 Generate code for a little-endian target. This is the default.
15313
15314 -msim
15315 Choose startup files and linker script suitable for the simulator.
15316
15317 -msdata=default
15318 Put small global and static data in the ".neardata" section, which
15319 is pointed to by register "B14". Put small uninitialized global
15320 and static data in the ".bss" section, which is adjacent to the
15321 ".neardata" section. Put small read-only data into the ".rodata"
15322 section. The corresponding sections used for large pieces of data
15323 are ".fardata", ".far" and ".const".
15324
15325 -msdata=all
15326 Put all data, not just small objects, into the sections reserved
15327 for small data, and use addressing relative to the "B14" register
15328 to access them.
15329
15330 -msdata=none
15331 Make no use of the sections reserved for small data, and use
15332 absolute addresses to access all data. Put all initialized global
15333 and static data in the ".fardata" section, and all uninitialized
15334 data in the ".far" section. Put all constant data into the
15335 ".const" section.
15336
15337 CRIS Options
15338
15339 These options are defined specifically for the CRIS ports.
15340
15341 -march=architecture-type
15342 -mcpu=architecture-type
15343 Generate code for the specified architecture. The choices for
15344 architecture-type are v3, v8 and v10 for respectively ETRAX 4,
15345 ETRAX 100, and ETRAX 100 LX. Default is v0 except for cris-axis-
15346 linux-gnu, where the default is v10.
15347
15348 -mtune=architecture-type
15349 Tune to architecture-type everything applicable about the generated
15350 code, except for the ABI and the set of available instructions.
15351 The choices for architecture-type are the same as for
15352 -march=architecture-type.
15353
15354 -mmax-stack-frame=n
15355 Warn when the stack frame of a function exceeds n bytes.
15356
15357 -metrax4
15358 -metrax100
15359 The options -metrax4 and -metrax100 are synonyms for -march=v3 and
15360 -march=v8 respectively.
15361
15362 -mmul-bug-workaround
15363 -mno-mul-bug-workaround
15364 Work around a bug in the "muls" and "mulu" instructions for CPU
15365 models where it applies. This option is active by default.
15366
15367 -mpdebug
15368 Enable CRIS-specific verbose debug-related information in the
15369 assembly code. This option also has the effect of turning off the
15370 #NO_APP formatted-code indicator to the assembler at the beginning
15371 of the assembly file.
15372
15373 -mcc-init
15374 Do not use condition-code results from previous instruction; always
15375 emit compare and test instructions before use of condition codes.
15376
15377 -mno-side-effects
15378 Do not emit instructions with side effects in addressing modes
15379 other than post-increment.
15380
15381 -mstack-align
15382 -mno-stack-align
15383 -mdata-align
15384 -mno-data-align
15385 -mconst-align
15386 -mno-const-align
15387 These options (no- options) arrange (eliminate arrangements) for
15388 the stack frame, individual data and constants to be aligned for
15389 the maximum single data access size for the chosen CPU model. The
15390 default is to arrange for 32-bit alignment. ABI details such as
15391 structure layout are not affected by these options.
15392
15393 -m32-bit
15394 -m16-bit
15395 -m8-bit
15396 Similar to the stack- data- and const-align options above, these
15397 options arrange for stack frame, writable data and constants to all
15398 be 32-bit, 16-bit or 8-bit aligned. The default is 32-bit
15399 alignment.
15400
15401 -mno-prologue-epilogue
15402 -mprologue-epilogue
15403 With -mno-prologue-epilogue, the normal function prologue and
15404 epilogue which set up the stack frame are omitted and no return
15405 instructions or return sequences are generated in the code. Use
15406 this option only together with visual inspection of the compiled
15407 code: no warnings or errors are generated when call-saved registers
15408 must be saved, or storage for local variables needs to be
15409 allocated.
15410
15411 -mno-gotplt
15412 -mgotplt
15413 With -fpic and -fPIC, don't generate (do generate) instruction
15414 sequences that load addresses for functions from the PLT part of
15415 the GOT rather than (traditional on other architectures) calls to
15416 the PLT. The default is -mgotplt.
15417
15418 -melf
15419 Legacy no-op option only recognized with the cris-axis-elf and
15420 cris-axis-linux-gnu targets.
15421
15422 -mlinux
15423 Legacy no-op option only recognized with the cris-axis-linux-gnu
15424 target.
15425
15426 -sim
15427 This option, recognized for the cris-axis-elf, arranges to link
15428 with input-output functions from a simulator library. Code,
15429 initialized data and zero-initialized data are allocated
15430 consecutively.
15431
15432 -sim2
15433 Like -sim, but pass linker options to locate initialized data at
15434 0x40000000 and zero-initialized data at 0x80000000.
15435
15436 CR16 Options
15437
15438 These options are defined specifically for the CR16 ports.
15439
15440 -mmac
15441 Enable the use of multiply-accumulate instructions. Disabled by
15442 default.
15443
15444 -mcr16cplus
15445 -mcr16c
15446 Generate code for CR16C or CR16C+ architecture. CR16C+ architecture
15447 is default.
15448
15449 -msim
15450 Links the library libsim.a which is in compatible with simulator.
15451 Applicable to ELF compiler only.
15452
15453 -mint32
15454 Choose integer type as 32-bit wide.
15455
15456 -mbit-ops
15457 Generates "sbit"/"cbit" instructions for bit manipulations.
15458
15459 -mdata-model=model
15460 Choose a data model. The choices for model are near, far or medium.
15461 medium is default. However, far is not valid with -mcr16c, as the
15462 CR16C architecture does not support the far data model.
15463
15464 Darwin Options
15465
15466 These options are defined for all architectures running the Darwin
15467 operating system.
15468
15469 FSF GCC on Darwin does not create "fat" object files; it creates an
15470 object file for the single architecture that GCC was built to target.
15471 Apple's GCC on Darwin does create "fat" files if multiple -arch options
15472 are used; it does so by running the compiler or linker multiple times
15473 and joining the results together with lipo.
15474
15475 The subtype of the file created (like ppc7400 or ppc970 or i686) is
15476 determined by the flags that specify the ISA that GCC is targeting,
15477 like -mcpu or -march. The -force_cpusubtype_ALL option can be used to
15478 override this.
15479
15480 The Darwin tools vary in their behavior when presented with an ISA
15481 mismatch. The assembler, as, only permits instructions to be used that
15482 are valid for the subtype of the file it is generating, so you cannot
15483 put 64-bit instructions in a ppc750 object file. The linker for shared
15484 libraries, /usr/bin/libtool, fails and prints an error if asked to
15485 create a shared library with a less restrictive subtype than its input
15486 files (for instance, trying to put a ppc970 object file in a ppc7400
15487 library). The linker for executables, ld, quietly gives the executable
15488 the most restrictive subtype of any of its input files.
15489
15490 -Fdir
15491 Add the framework directory dir to the head of the list of
15492 directories to be searched for header files. These directories are
15493 interleaved with those specified by -I options and are scanned in a
15494 left-to-right order.
15495
15496 A framework directory is a directory with frameworks in it. A
15497 framework is a directory with a Headers and/or PrivateHeaders
15498 directory contained directly in it that ends in .framework. The
15499 name of a framework is the name of this directory excluding the
15500 .framework. Headers associated with the framework are found in one
15501 of those two directories, with Headers being searched first. A
15502 subframework is a framework directory that is in a framework's
15503 Frameworks directory. Includes of subframework headers can only
15504 appear in a header of a framework that contains the subframework,
15505 or in a sibling subframework header. Two subframeworks are
15506 siblings if they occur in the same framework. A subframework
15507 should not have the same name as a framework; a warning is issued
15508 if this is violated. Currently a subframework cannot have
15509 subframeworks; in the future, the mechanism may be extended to
15510 support this. The standard frameworks can be found in
15511 /System/Library/Frameworks and /Library/Frameworks. An example
15512 include looks like "#include <Framework/header.h>", where Framework
15513 denotes the name of the framework and header.h is found in the
15514 PrivateHeaders or Headers directory.
15515
15516 -iframeworkdir
15517 Like -F except the directory is a treated as a system directory.
15518 The main difference between this -iframework and -F is that with
15519 -iframework the compiler does not warn about constructs contained
15520 within header files found via dir. This option is valid only for
15521 the C family of languages.
15522
15523 -gused
15524 Emit debugging information for symbols that are used. For stabs
15525 debugging format, this enables -feliminate-unused-debug-symbols.
15526 This is by default ON.
15527
15528 -gfull
15529 Emit debugging information for all symbols and types.
15530
15531 -mmacosx-version-min=version
15532 The earliest version of MacOS X that this executable will run on is
15533 version. Typical values of version include 10.1, 10.2, and 10.3.9.
15534
15535 If the compiler was built to use the system's headers by default,
15536 then the default for this option is the system version on which the
15537 compiler is running, otherwise the default is to make choices that
15538 are compatible with as many systems and code bases as possible.
15539
15540 -mkernel
15541 Enable kernel development mode. The -mkernel option sets -static,
15542 -fno-common, -fno-use-cxa-atexit, -fno-exceptions,
15543 -fno-non-call-exceptions, -fapple-kext, -fno-weak and -fno-rtti
15544 where applicable. This mode also sets -mno-altivec, -msoft-float,
15545 -fno-builtin and -mlong-branch for PowerPC targets.
15546
15547 -mone-byte-bool
15548 Override the defaults for "bool" so that "sizeof(bool)==1". By
15549 default "sizeof(bool)" is 4 when compiling for Darwin/PowerPC and 1
15550 when compiling for Darwin/x86, so this option has no effect on x86.
15551
15552 Warning: The -mone-byte-bool switch causes GCC to generate code
15553 that is not binary compatible with code generated without that
15554 switch. Using this switch may require recompiling all other
15555 modules in a program, including system libraries. Use this switch
15556 to conform to a non-default data model.
15557
15558 -mfix-and-continue
15559 -ffix-and-continue
15560 -findirect-data
15561 Generate code suitable for fast turnaround development, such as to
15562 allow GDB to dynamically load .o files into already-running
15563 programs. -findirect-data and -ffix-and-continue are provided for
15564 backwards compatibility.
15565
15566 -all_load
15567 Loads all members of static archive libraries. See man ld(1) for
15568 more information.
15569
15570 -arch_errors_fatal
15571 Cause the errors having to do with files that have the wrong
15572 architecture to be fatal.
15573
15574 -bind_at_load
15575 Causes the output file to be marked such that the dynamic linker
15576 will bind all undefined references when the file is loaded or
15577 launched.
15578
15579 -bundle
15580 Produce a Mach-o bundle format file. See man ld(1) for more
15581 information.
15582
15583 -bundle_loader executable
15584 This option specifies the executable that will load the build
15585 output file being linked. See man ld(1) for more information.
15586
15587 -dynamiclib
15588 When passed this option, GCC produces a dynamic library instead of
15589 an executable when linking, using the Darwin libtool command.
15590
15591 -force_cpusubtype_ALL
15592 This causes GCC's output file to have the ALL subtype, instead of
15593 one controlled by the -mcpu or -march option.
15594
15595 -allowable_client client_name
15596 -client_name
15597 -compatibility_version
15598 -current_version
15599 -dead_strip
15600 -dependency-file
15601 -dylib_file
15602 -dylinker_install_name
15603 -dynamic
15604 -exported_symbols_list
15605 -filelist
15606 -flat_namespace
15607 -force_flat_namespace
15608 -headerpad_max_install_names
15609 -image_base
15610 -init
15611 -install_name
15612 -keep_private_externs
15613 -multi_module
15614 -multiply_defined
15615 -multiply_defined_unused
15616 -noall_load
15617 -no_dead_strip_inits_and_terms
15618 -nofixprebinding
15619 -nomultidefs
15620 -noprebind
15621 -noseglinkedit
15622 -pagezero_size
15623 -prebind
15624 -prebind_all_twolevel_modules
15625 -private_bundle
15626 -read_only_relocs
15627 -sectalign
15628 -sectobjectsymbols
15629 -whyload
15630 -seg1addr
15631 -sectcreate
15632 -sectobjectsymbols
15633 -sectorder
15634 -segaddr
15635 -segs_read_only_addr
15636 -segs_read_write_addr
15637 -seg_addr_table
15638 -seg_addr_table_filename
15639 -seglinkedit
15640 -segprot
15641 -segs_read_only_addr
15642 -segs_read_write_addr
15643 -single_module
15644 -static
15645 -sub_library
15646 -sub_umbrella
15647 -twolevel_namespace
15648 -umbrella
15649 -undefined
15650 -unexported_symbols_list
15651 -weak_reference_mismatches
15652 -whatsloaded
15653 These options are passed to the Darwin linker. The Darwin linker
15654 man page describes them in detail.
15655
15656 DEC Alpha Options
15657
15658 These -m options are defined for the DEC Alpha implementations:
15659
15660 -mno-soft-float
15661 -msoft-float
15662 Use (do not use) the hardware floating-point instructions for
15663 floating-point operations. When -msoft-float is specified,
15664 functions in libgcc.a are used to perform floating-point
15665 operations. Unless they are replaced by routines that emulate the
15666 floating-point operations, or compiled in such a way as to call
15667 such emulations routines, these routines issue floating-point
15668 operations. If you are compiling for an Alpha without floating-
15669 point operations, you must ensure that the library is built so as
15670 not to call them.
15671
15672 Note that Alpha implementations without floating-point operations
15673 are required to have floating-point registers.
15674
15675 -mfp-reg
15676 -mno-fp-regs
15677 Generate code that uses (does not use) the floating-point register
15678 set. -mno-fp-regs implies -msoft-float. If the floating-point
15679 register set is not used, floating-point operands are passed in
15680 integer registers as if they were integers and floating-point
15681 results are passed in $0 instead of $f0. This is a non-standard
15682 calling sequence, so any function with a floating-point argument or
15683 return value called by code compiled with -mno-fp-regs must also be
15684 compiled with that option.
15685
15686 A typical use of this option is building a kernel that does not
15687 use, and hence need not save and restore, any floating-point
15688 registers.
15689
15690 -mieee
15691 The Alpha architecture implements floating-point hardware optimized
15692 for maximum performance. It is mostly compliant with the IEEE
15693 floating-point standard. However, for full compliance, software
15694 assistance is required. This option generates code fully IEEE-
15695 compliant code except that the inexact-flag is not maintained (see
15696 below). If this option is turned on, the preprocessor macro
15697 "_IEEE_FP" is defined during compilation. The resulting code is
15698 less efficient but is able to correctly support denormalized
15699 numbers and exceptional IEEE values such as not-a-number and
15700 plus/minus infinity. Other Alpha compilers call this option
15701 -ieee_with_no_inexact.
15702
15703 -mieee-with-inexact
15704 This is like -mieee except the generated code also maintains the
15705 IEEE inexact-flag. Turning on this option causes the generated
15706 code to implement fully-compliant IEEE math. In addition to
15707 "_IEEE_FP", "_IEEE_FP_EXACT" is defined as a preprocessor macro.
15708 On some Alpha implementations the resulting code may execute
15709 significantly slower than the code generated by default. Since
15710 there is very little code that depends on the inexact-flag, you
15711 should normally not specify this option. Other Alpha compilers
15712 call this option -ieee_with_inexact.
15713
15714 -mfp-trap-mode=trap-mode
15715 This option controls what floating-point related traps are enabled.
15716 Other Alpha compilers call this option -fptm trap-mode. The trap
15717 mode can be set to one of four values:
15718
15719 n This is the default (normal) setting. The only traps that are
15720 enabled are the ones that cannot be disabled in software (e.g.,
15721 division by zero trap).
15722
15723 u In addition to the traps enabled by n, underflow traps are
15724 enabled as well.
15725
15726 su Like u, but the instructions are marked to be safe for software
15727 completion (see Alpha architecture manual for details).
15728
15729 sui Like su, but inexact traps are enabled as well.
15730
15731 -mfp-rounding-mode=rounding-mode
15732 Selects the IEEE rounding mode. Other Alpha compilers call this
15733 option -fprm rounding-mode. The rounding-mode can be one of:
15734
15735 n Normal IEEE rounding mode. Floating-point numbers are rounded
15736 towards the nearest machine number or towards the even machine
15737 number in case of a tie.
15738
15739 m Round towards minus infinity.
15740
15741 c Chopped rounding mode. Floating-point numbers are rounded
15742 towards zero.
15743
15744 d Dynamic rounding mode. A field in the floating-point control
15745 register (fpcr, see Alpha architecture reference manual)
15746 controls the rounding mode in effect. The C library
15747 initializes this register for rounding towards plus infinity.
15748 Thus, unless your program modifies the fpcr, d corresponds to
15749 round towards plus infinity.
15750
15751 -mtrap-precision=trap-precision
15752 In the Alpha architecture, floating-point traps are imprecise.
15753 This means without software assistance it is impossible to recover
15754 from a floating trap and program execution normally needs to be
15755 terminated. GCC can generate code that can assist operating system
15756 trap handlers in determining the exact location that caused a
15757 floating-point trap. Depending on the requirements of an
15758 application, different levels of precisions can be selected:
15759
15760 p Program precision. This option is the default and means a trap
15761 handler can only identify which program caused a floating-point
15762 exception.
15763
15764 f Function precision. The trap handler can determine the
15765 function that caused a floating-point exception.
15766
15767 i Instruction precision. The trap handler can determine the
15768 exact instruction that caused a floating-point exception.
15769
15770 Other Alpha compilers provide the equivalent options called
15771 -scope_safe and -resumption_safe.
15772
15773 -mieee-conformant
15774 This option marks the generated code as IEEE conformant. You must
15775 not use this option unless you also specify -mtrap-precision=i and
15776 either -mfp-trap-mode=su or -mfp-trap-mode=sui. Its only effect is
15777 to emit the line .eflag 48 in the function prologue of the
15778 generated assembly file.
15779
15780 -mbuild-constants
15781 Normally GCC examines a 32- or 64-bit integer constant to see if it
15782 can construct it from smaller constants in two or three
15783 instructions. If it cannot, it outputs the constant as a literal
15784 and generates code to load it from the data segment at run time.
15785
15786 Use this option to require GCC to construct all integer constants
15787 using code, even if it takes more instructions (the maximum is
15788 six).
15789
15790 You typically use this option to build a shared library dynamic
15791 loader. Itself a shared library, it must relocate itself in memory
15792 before it can find the variables and constants in its own data
15793 segment.
15794
15795 -mbwx
15796 -mno-bwx
15797 -mcix
15798 -mno-cix
15799 -mfix
15800 -mno-fix
15801 -mmax
15802 -mno-max
15803 Indicate whether GCC should generate code to use the optional BWX,
15804 CIX, FIX and MAX instruction sets. The default is to use the
15805 instruction sets supported by the CPU type specified via -mcpu=
15806 option or that of the CPU on which GCC was built if none is
15807 specified.
15808
15809 -mfloat-vax
15810 -mfloat-ieee
15811 Generate code that uses (does not use) VAX F and G floating-point
15812 arithmetic instead of IEEE single and double precision.
15813
15814 -mexplicit-relocs
15815 -mno-explicit-relocs
15816 Older Alpha assemblers provided no way to generate symbol
15817 relocations except via assembler macros. Use of these macros does
15818 not allow optimal instruction scheduling. GNU binutils as of
15819 version 2.12 supports a new syntax that allows the compiler to
15820 explicitly mark which relocations should apply to which
15821 instructions. This option is mostly useful for debugging, as GCC
15822 detects the capabilities of the assembler when it is built and sets
15823 the default accordingly.
15824
15825 -msmall-data
15826 -mlarge-data
15827 When -mexplicit-relocs is in effect, static data is accessed via
15828 gp-relative relocations. When -msmall-data is used, objects 8
15829 bytes long or smaller are placed in a small data area (the ".sdata"
15830 and ".sbss" sections) and are accessed via 16-bit relocations off
15831 of the $gp register. This limits the size of the small data area
15832 to 64KB, but allows the variables to be directly accessed via a
15833 single instruction.
15834
15835 The default is -mlarge-data. With this option the data area is
15836 limited to just below 2GB. Programs that require more than 2GB of
15837 data must use "malloc" or "mmap" to allocate the data in the heap
15838 instead of in the program's data segment.
15839
15840 When generating code for shared libraries, -fpic implies
15841 -msmall-data and -fPIC implies -mlarge-data.
15842
15843 -msmall-text
15844 -mlarge-text
15845 When -msmall-text is used, the compiler assumes that the code of
15846 the entire program (or shared library) fits in 4MB, and is thus
15847 reachable with a branch instruction. When -msmall-data is used,
15848 the compiler can assume that all local symbols share the same $gp
15849 value, and thus reduce the number of instructions required for a
15850 function call from 4 to 1.
15851
15852 The default is -mlarge-text.
15853
15854 -mcpu=cpu_type
15855 Set the instruction set and instruction scheduling parameters for
15856 machine type cpu_type. You can specify either the EV style name or
15857 the corresponding chip number. GCC supports scheduling parameters
15858 for the EV4, EV5 and EV6 family of processors and chooses the
15859 default values for the instruction set from the processor you
15860 specify. If you do not specify a processor type, GCC defaults to
15861 the processor on which the compiler was built.
15862
15863 Supported values for cpu_type are
15864
15865 ev4
15866 ev45
15867 21064
15868 Schedules as an EV4 and has no instruction set extensions.
15869
15870 ev5
15871 21164
15872 Schedules as an EV5 and has no instruction set extensions.
15873
15874 ev56
15875 21164a
15876 Schedules as an EV5 and supports the BWX extension.
15877
15878 pca56
15879 21164pc
15880 21164PC
15881 Schedules as an EV5 and supports the BWX and MAX extensions.
15882
15883 ev6
15884 21264
15885 Schedules as an EV6 and supports the BWX, FIX, and MAX
15886 extensions.
15887
15888 ev67
15889 21264a
15890 Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX
15891 extensions.
15892
15893 Native toolchains also support the value native, which selects the
15894 best architecture option for the host processor. -mcpu=native has
15895 no effect if GCC does not recognize the processor.
15896
15897 -mtune=cpu_type
15898 Set only the instruction scheduling parameters for machine type
15899 cpu_type. The instruction set is not changed.
15900
15901 Native toolchains also support the value native, which selects the
15902 best architecture option for the host processor. -mtune=native has
15903 no effect if GCC does not recognize the processor.
15904
15905 -mmemory-latency=time
15906 Sets the latency the scheduler should assume for typical memory
15907 references as seen by the application. This number is highly
15908 dependent on the memory access patterns used by the application and
15909 the size of the external cache on the machine.
15910
15911 Valid options for time are
15912
15913 number
15914 A decimal number representing clock cycles.
15915
15916 L1
15917 L2
15918 L3
15919 main
15920 The compiler contains estimates of the number of clock cycles
15921 for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches
15922 (also called Dcache, Scache, and Bcache), as well as to main
15923 memory. Note that L3 is only valid for EV5.
15924
15925 FR30 Options
15926
15927 These options are defined specifically for the FR30 port.
15928
15929 -msmall-model
15930 Use the small address space model. This can produce smaller code,
15931 but it does assume that all symbolic values and addresses fit into
15932 a 20-bit range.
15933
15934 -mno-lsim
15935 Assume that runtime support has been provided and so there is no
15936 need to include the simulator library (libsim.a) on the linker
15937 command line.
15938
15939 FT32 Options
15940
15941 These options are defined specifically for the FT32 port.
15942
15943 -msim
15944 Specifies that the program will be run on the simulator. This
15945 causes an alternate runtime startup and library to be linked. You
15946 must not use this option when generating programs that will run on
15947 real hardware; you must provide your own runtime library for
15948 whatever I/O functions are needed.
15949
15950 -mlra
15951 Enable Local Register Allocation. This is still experimental for
15952 FT32, so by default the compiler uses standard reload.
15953
15954 -mnodiv
15955 Do not use div and mod instructions.
15956
15957 -mft32b
15958 Enable use of the extended instructions of the FT32B processor.
15959
15960 -mcompress
15961 Compress all code using the Ft32B code compression scheme.
15962
15963 -mnopm
15964 Do not generate code that reads program memory.
15965
15966 FRV Options
15967
15968 -mgpr-32
15969 Only use the first 32 general-purpose registers.
15970
15971 -mgpr-64
15972 Use all 64 general-purpose registers.
15973
15974 -mfpr-32
15975 Use only the first 32 floating-point registers.
15976
15977 -mfpr-64
15978 Use all 64 floating-point registers.
15979
15980 -mhard-float
15981 Use hardware instructions for floating-point operations.
15982
15983 -msoft-float
15984 Use library routines for floating-point operations.
15985
15986 -malloc-cc
15987 Dynamically allocate condition code registers.
15988
15989 -mfixed-cc
15990 Do not try to dynamically allocate condition code registers, only
15991 use "icc0" and "fcc0".
15992
15993 -mdword
15994 Change ABI to use double word insns.
15995
15996 -mno-dword
15997 Do not use double word instructions.
15998
15999 -mdouble
16000 Use floating-point double instructions.
16001
16002 -mno-double
16003 Do not use floating-point double instructions.
16004
16005 -mmedia
16006 Use media instructions.
16007
16008 -mno-media
16009 Do not use media instructions.
16010
16011 -mmuladd
16012 Use multiply and add/subtract instructions.
16013
16014 -mno-muladd
16015 Do not use multiply and add/subtract instructions.
16016
16017 -mfdpic
16018 Select the FDPIC ABI, which uses function descriptors to represent
16019 pointers to functions. Without any PIC/PIE-related options, it
16020 implies -fPIE. With -fpic or -fpie, it assumes GOT entries and
16021 small data are within a 12-bit range from the GOT base address;
16022 with -fPIC or -fPIE, GOT offsets are computed with 32 bits. With a
16023 bfin-elf target, this option implies -msim.
16024
16025 -minline-plt
16026 Enable inlining of PLT entries in function calls to functions that
16027 are not known to bind locally. It has no effect without -mfdpic.
16028 It's enabled by default if optimizing for speed and compiling for
16029 shared libraries (i.e., -fPIC or -fpic), or when an optimization
16030 option such as -O3 or above is present in the command line.
16031
16032 -mTLS
16033 Assume a large TLS segment when generating thread-local code.
16034
16035 -mtls
16036 Do not assume a large TLS segment when generating thread-local
16037 code.
16038
16039 -mgprel-ro
16040 Enable the use of "GPREL" relocations in the FDPIC ABI for data
16041 that is known to be in read-only sections. It's enabled by
16042 default, except for -fpic or -fpie: even though it may help make
16043 the global offset table smaller, it trades 1 instruction for 4.
16044 With -fPIC or -fPIE, it trades 3 instructions for 4, one of which
16045 may be shared by multiple symbols, and it avoids the need for a GOT
16046 entry for the referenced symbol, so it's more likely to be a win.
16047 If it is not, -mno-gprel-ro can be used to disable it.
16048
16049 -multilib-library-pic
16050 Link with the (library, not FD) pic libraries. It's implied by
16051 -mlibrary-pic, as well as by -fPIC and -fpic without -mfdpic. You
16052 should never have to use it explicitly.
16053
16054 -mlinked-fp
16055 Follow the EABI requirement of always creating a frame pointer
16056 whenever a stack frame is allocated. This option is enabled by
16057 default and can be disabled with -mno-linked-fp.
16058
16059 -mlong-calls
16060 Use indirect addressing to call functions outside the current
16061 compilation unit. This allows the functions to be placed anywhere
16062 within the 32-bit address space.
16063
16064 -malign-labels
16065 Try to align labels to an 8-byte boundary by inserting NOPs into
16066 the previous packet. This option only has an effect when VLIW
16067 packing is enabled. It doesn't create new packets; it merely adds
16068 NOPs to existing ones.
16069
16070 -mlibrary-pic
16071 Generate position-independent EABI code.
16072
16073 -macc-4
16074 Use only the first four media accumulator registers.
16075
16076 -macc-8
16077 Use all eight media accumulator registers.
16078
16079 -mpack
16080 Pack VLIW instructions.
16081
16082 -mno-pack
16083 Do not pack VLIW instructions.
16084
16085 -mno-eflags
16086 Do not mark ABI switches in e_flags.
16087
16088 -mcond-move
16089 Enable the use of conditional-move instructions (default).
16090
16091 This switch is mainly for debugging the compiler and will likely be
16092 removed in a future version.
16093
16094 -mno-cond-move
16095 Disable the use of conditional-move instructions.
16096
16097 This switch is mainly for debugging the compiler and will likely be
16098 removed in a future version.
16099
16100 -mscc
16101 Enable the use of conditional set instructions (default).
16102
16103 This switch is mainly for debugging the compiler and will likely be
16104 removed in a future version.
16105
16106 -mno-scc
16107 Disable the use of conditional set instructions.
16108
16109 This switch is mainly for debugging the compiler and will likely be
16110 removed in a future version.
16111
16112 -mcond-exec
16113 Enable the use of conditional execution (default).
16114
16115 This switch is mainly for debugging the compiler and will likely be
16116 removed in a future version.
16117
16118 -mno-cond-exec
16119 Disable the use of conditional execution.
16120
16121 This switch is mainly for debugging the compiler and will likely be
16122 removed in a future version.
16123
16124 -mvliw-branch
16125 Run a pass to pack branches into VLIW instructions (default).
16126
16127 This switch is mainly for debugging the compiler and will likely be
16128 removed in a future version.
16129
16130 -mno-vliw-branch
16131 Do not run a pass to pack branches into VLIW instructions.
16132
16133 This switch is mainly for debugging the compiler and will likely be
16134 removed in a future version.
16135
16136 -mmulti-cond-exec
16137 Enable optimization of "&&" and "||" in conditional execution
16138 (default).
16139
16140 This switch is mainly for debugging the compiler and will likely be
16141 removed in a future version.
16142
16143 -mno-multi-cond-exec
16144 Disable optimization of "&&" and "||" in conditional execution.
16145
16146 This switch is mainly for debugging the compiler and will likely be
16147 removed in a future version.
16148
16149 -mnested-cond-exec
16150 Enable nested conditional execution optimizations (default).
16151
16152 This switch is mainly for debugging the compiler and will likely be
16153 removed in a future version.
16154
16155 -mno-nested-cond-exec
16156 Disable nested conditional execution optimizations.
16157
16158 This switch is mainly for debugging the compiler and will likely be
16159 removed in a future version.
16160
16161 -moptimize-membar
16162 This switch removes redundant "membar" instructions from the
16163 compiler-generated code. It is enabled by default.
16164
16165 -mno-optimize-membar
16166 This switch disables the automatic removal of redundant "membar"
16167 instructions from the generated code.
16168
16169 -mtomcat-stats
16170 Cause gas to print out tomcat statistics.
16171
16172 -mcpu=cpu
16173 Select the processor type for which to generate code. Possible
16174 values are frv, fr550, tomcat, fr500, fr450, fr405, fr400, fr300
16175 and simple.
16176
16177 GNU/Linux Options
16178
16179 These -m options are defined for GNU/Linux targets:
16180
16181 -mglibc
16182 Use the GNU C library. This is the default except on
16183 *-*-linux-*uclibc*, *-*-linux-*musl* and *-*-linux-*android*
16184 targets.
16185
16186 -muclibc
16187 Use uClibc C library. This is the default on *-*-linux-*uclibc*
16188 targets.
16189
16190 -mmusl
16191 Use the musl C library. This is the default on *-*-linux-*musl*
16192 targets.
16193
16194 -mbionic
16195 Use Bionic C library. This is the default on *-*-linux-*android*
16196 targets.
16197
16198 -mandroid
16199 Compile code compatible with Android platform. This is the default
16200 on *-*-linux-*android* targets.
16201
16202 When compiling, this option enables -mbionic, -fPIC,
16203 -fno-exceptions and -fno-rtti by default. When linking, this
16204 option makes the GCC driver pass Android-specific options to the
16205 linker. Finally, this option causes the preprocessor macro
16206 "__ANDROID__" to be defined.
16207
16208 -tno-android-cc
16209 Disable compilation effects of -mandroid, i.e., do not enable
16210 -mbionic, -fPIC, -fno-exceptions and -fno-rtti by default.
16211
16212 -tno-android-ld
16213 Disable linking effects of -mandroid, i.e., pass standard Linux
16214 linking options to the linker.
16215
16216 H8/300 Options
16217
16218 These -m options are defined for the H8/300 implementations:
16219
16220 -mrelax
16221 Shorten some address references at link time, when possible; uses
16222 the linker option -relax.
16223
16224 -mh Generate code for the H8/300H.
16225
16226 -ms Generate code for the H8S.
16227
16228 -mn Generate code for the H8S and H8/300H in the normal mode. This
16229 switch must be used either with -mh or -ms.
16230
16231 -ms2600
16232 Generate code for the H8S/2600. This switch must be used with -ms.
16233
16234 -mexr
16235 Extended registers are stored on stack before execution of function
16236 with monitor attribute. Default option is -mexr. This option is
16237 valid only for H8S targets.
16238
16239 -mno-exr
16240 Extended registers are not stored on stack before execution of
16241 function with monitor attribute. Default option is -mno-exr. This
16242 option is valid only for H8S targets.
16243
16244 -mint32
16245 Make "int" data 32 bits by default.
16246
16247 -malign-300
16248 On the H8/300H and H8S, use the same alignment rules as for the
16249 H8/300. The default for the H8/300H and H8S is to align longs and
16250 floats on 4-byte boundaries. -malign-300 causes them to be aligned
16251 on 2-byte boundaries. This option has no effect on the H8/300.
16252
16253 HPPA Options
16254
16255 These -m options are defined for the HPPA family of computers:
16256
16257 -march=architecture-type
16258 Generate code for the specified architecture. The choices for
16259 architecture-type are 1.0 for PA 1.0, 1.1 for PA 1.1, and 2.0 for
16260 PA 2.0 processors. Refer to /usr/lib/sched.models on an HP-UX
16261 system to determine the proper architecture option for your
16262 machine. Code compiled for lower numbered architectures runs on
16263 higher numbered architectures, but not the other way around.
16264
16265 -mpa-risc-1-0
16266 -mpa-risc-1-1
16267 -mpa-risc-2-0
16268 Synonyms for -march=1.0, -march=1.1, and -march=2.0 respectively.
16269
16270 -mcaller-copies
16271 The caller copies function arguments passed by hidden reference.
16272 This option should be used with care as it is not compatible with
16273 the default 32-bit runtime. However, only aggregates larger than
16274 eight bytes are passed by hidden reference and the option provides
16275 better compatibility with OpenMP.
16276
16277 -mjump-in-delay
16278 This option is ignored and provided for compatibility purposes
16279 only.
16280
16281 -mdisable-fpregs
16282 Prevent floating-point registers from being used in any manner.
16283 This is necessary for compiling kernels that perform lazy context
16284 switching of floating-point registers. If you use this option and
16285 attempt to perform floating-point operations, the compiler aborts.
16286
16287 -mdisable-indexing
16288 Prevent the compiler from using indexing address modes. This
16289 avoids some rather obscure problems when compiling MIG generated
16290 code under MACH.
16291
16292 -mno-space-regs
16293 Generate code that assumes the target has no space registers. This
16294 allows GCC to generate faster indirect calls and use unscaled index
16295 address modes.
16296
16297 Such code is suitable for level 0 PA systems and kernels.
16298
16299 -mfast-indirect-calls
16300 Generate code that assumes calls never cross space boundaries.
16301 This allows GCC to emit code that performs faster indirect calls.
16302
16303 This option does not work in the presence of shared libraries or
16304 nested functions.
16305
16306 -mfixed-range=register-range
16307 Generate code treating the given register range as fixed registers.
16308 A fixed register is one that the register allocator cannot use.
16309 This is useful when compiling kernel code. A register range is
16310 specified as two registers separated by a dash. Multiple register
16311 ranges can be specified separated by a comma.
16312
16313 -mlong-load-store
16314 Generate 3-instruction load and store sequences as sometimes
16315 required by the HP-UX 10 linker. This is equivalent to the +k
16316 option to the HP compilers.
16317
16318 -mportable-runtime
16319 Use the portable calling conventions proposed by HP for ELF
16320 systems.
16321
16322 -mgas
16323 Enable the use of assembler directives only GAS understands.
16324
16325 -mschedule=cpu-type
16326 Schedule code according to the constraints for the machine type
16327 cpu-type. The choices for cpu-type are 700 7100, 7100LC, 7200,
16328 7300 and 8000. Refer to /usr/lib/sched.models on an HP-UX system
16329 to determine the proper scheduling option for your machine. The
16330 default scheduling is 8000.
16331
16332 -mlinker-opt
16333 Enable the optimization pass in the HP-UX linker. Note this makes
16334 symbolic debugging impossible. It also triggers a bug in the HP-UX
16335 8 and HP-UX 9 linkers in which they give bogus error messages when
16336 linking some programs.
16337
16338 -msoft-float
16339 Generate output containing library calls for floating point.
16340 Warning: the requisite libraries are not available for all HPPA
16341 targets. Normally the facilities of the machine's usual C compiler
16342 are used, but this cannot be done directly in cross-compilation.
16343 You must make your own arrangements to provide suitable library
16344 functions for cross-compilation.
16345
16346 -msoft-float changes the calling convention in the output file;
16347 therefore, it is only useful if you compile all of a program with
16348 this option. In particular, you need to compile libgcc.a, the
16349 library that comes with GCC, with -msoft-float in order for this to
16350 work.
16351
16352 -msio
16353 Generate the predefine, "_SIO", for server IO. The default is
16354 -mwsio. This generates the predefines, "__hp9000s700",
16355 "__hp9000s700__" and "_WSIO", for workstation IO. These options
16356 are available under HP-UX and HI-UX.
16357
16358 -mgnu-ld
16359 Use options specific to GNU ld. This passes -shared to ld when
16360 building a shared library. It is the default when GCC is
16361 configured, explicitly or implicitly, with the GNU linker. This
16362 option does not affect which ld is called; it only changes what
16363 parameters are passed to that ld. The ld that is called is
16364 determined by the --with-ld configure option, GCC's program search
16365 path, and finally by the user's PATH. The linker used by GCC can
16366 be printed using which `gcc -print-prog-name=ld`. This option is
16367 only available on the 64-bit HP-UX GCC, i.e. configured with
16368 hppa*64*-*-hpux*.
16369
16370 -mhp-ld
16371 Use options specific to HP ld. This passes -b to ld when building
16372 a shared library and passes +Accept TypeMismatch to ld on all
16373 links. It is the default when GCC is configured, explicitly or
16374 implicitly, with the HP linker. This option does not affect which
16375 ld is called; it only changes what parameters are passed to that
16376 ld. The ld that is called is determined by the --with-ld configure
16377 option, GCC's program search path, and finally by the user's PATH.
16378 The linker used by GCC can be printed using which `gcc
16379 -print-prog-name=ld`. This option is only available on the 64-bit
16380 HP-UX GCC, i.e. configured with hppa*64*-*-hpux*.
16381
16382 -mlong-calls
16383 Generate code that uses long call sequences. This ensures that a
16384 call is always able to reach linker generated stubs. The default
16385 is to generate long calls only when the distance from the call site
16386 to the beginning of the function or translation unit, as the case
16387 may be, exceeds a predefined limit set by the branch type being
16388 used. The limits for normal calls are 7,600,000 and 240,000 bytes,
16389 respectively for the PA 2.0 and PA 1.X architectures. Sibcalls are
16390 always limited at 240,000 bytes.
16391
16392 Distances are measured from the beginning of functions when using
16393 the -ffunction-sections option, or when using the -mgas and
16394 -mno-portable-runtime options together under HP-UX with the SOM
16395 linker.
16396
16397 It is normally not desirable to use this option as it degrades
16398 performance. However, it may be useful in large applications,
16399 particularly when partial linking is used to build the application.
16400
16401 The types of long calls used depends on the capabilities of the
16402 assembler and linker, and the type of code being generated. The
16403 impact on systems that support long absolute calls, and long pic
16404 symbol-difference or pc-relative calls should be relatively small.
16405 However, an indirect call is used on 32-bit ELF systems in pic code
16406 and it is quite long.
16407
16408 -munix=unix-std
16409 Generate compiler predefines and select a startfile for the
16410 specified UNIX standard. The choices for unix-std are 93, 95 and
16411 98. 93 is supported on all HP-UX versions. 95 is available on HP-
16412 UX 10.10 and later. 98 is available on HP-UX 11.11 and later. The
16413 default values are 93 for HP-UX 10.00, 95 for HP-UX 10.10 though to
16414 11.00, and 98 for HP-UX 11.11 and later.
16415
16416 -munix=93 provides the same predefines as GCC 3.3 and 3.4.
16417 -munix=95 provides additional predefines for "XOPEN_UNIX" and
16418 "_XOPEN_SOURCE_EXTENDED", and the startfile unix95.o. -munix=98
16419 provides additional predefines for "_XOPEN_UNIX",
16420 "_XOPEN_SOURCE_EXTENDED", "_INCLUDE__STDC_A1_SOURCE" and
16421 "_INCLUDE_XOPEN_SOURCE_500", and the startfile unix98.o.
16422
16423 It is important to note that this option changes the interfaces for
16424 various library routines. It also affects the operational behavior
16425 of the C library. Thus, extreme care is needed in using this
16426 option.
16427
16428 Library code that is intended to operate with more than one UNIX
16429 standard must test, set and restore the variable
16430 "__xpg4_extended_mask" as appropriate. Most GNU software doesn't
16431 provide this capability.
16432
16433 -nolibdld
16434 Suppress the generation of link options to search libdld.sl when
16435 the -static option is specified on HP-UX 10 and later.
16436
16437 -static
16438 The HP-UX implementation of setlocale in libc has a dependency on
16439 libdld.sl. There isn't an archive version of libdld.sl. Thus,
16440 when the -static option is specified, special link options are
16441 needed to resolve this dependency.
16442
16443 On HP-UX 10 and later, the GCC driver adds the necessary options to
16444 link with libdld.sl when the -static option is specified. This
16445 causes the resulting binary to be dynamic. On the 64-bit port, the
16446 linkers generate dynamic binaries by default in any case. The
16447 -nolibdld option can be used to prevent the GCC driver from adding
16448 these link options.
16449
16450 -threads
16451 Add support for multithreading with the dce thread library under
16452 HP-UX. This option sets flags for both the preprocessor and
16453 linker.
16454
16455 IA-64 Options
16456
16457 These are the -m options defined for the Intel IA-64 architecture.
16458
16459 -mbig-endian
16460 Generate code for a big-endian target. This is the default for HP-
16461 UX.
16462
16463 -mlittle-endian
16464 Generate code for a little-endian target. This is the default for
16465 AIX5 and GNU/Linux.
16466
16467 -mgnu-as
16468 -mno-gnu-as
16469 Generate (or don't) code for the GNU assembler. This is the
16470 default.
16471
16472 -mgnu-ld
16473 -mno-gnu-ld
16474 Generate (or don't) code for the GNU linker. This is the default.
16475
16476 -mno-pic
16477 Generate code that does not use a global pointer register. The
16478 result is not position independent code, and violates the IA-64
16479 ABI.
16480
16481 -mvolatile-asm-stop
16482 -mno-volatile-asm-stop
16483 Generate (or don't) a stop bit immediately before and after
16484 volatile asm statements.
16485
16486 -mregister-names
16487 -mno-register-names
16488 Generate (or don't) in, loc, and out register names for the stacked
16489 registers. This may make assembler output more readable.
16490
16491 -mno-sdata
16492 -msdata
16493 Disable (or enable) optimizations that use the small data section.
16494 This may be useful for working around optimizer bugs.
16495
16496 -mconstant-gp
16497 Generate code that uses a single constant global pointer value.
16498 This is useful when compiling kernel code.
16499
16500 -mauto-pic
16501 Generate code that is self-relocatable. This implies
16502 -mconstant-gp. This is useful when compiling firmware code.
16503
16504 -minline-float-divide-min-latency
16505 Generate code for inline divides of floating-point values using the
16506 minimum latency algorithm.
16507
16508 -minline-float-divide-max-throughput
16509 Generate code for inline divides of floating-point values using the
16510 maximum throughput algorithm.
16511
16512 -mno-inline-float-divide
16513 Do not generate inline code for divides of floating-point values.
16514
16515 -minline-int-divide-min-latency
16516 Generate code for inline divides of integer values using the
16517 minimum latency algorithm.
16518
16519 -minline-int-divide-max-throughput
16520 Generate code for inline divides of integer values using the
16521 maximum throughput algorithm.
16522
16523 -mno-inline-int-divide
16524 Do not generate inline code for divides of integer values.
16525
16526 -minline-sqrt-min-latency
16527 Generate code for inline square roots using the minimum latency
16528 algorithm.
16529
16530 -minline-sqrt-max-throughput
16531 Generate code for inline square roots using the maximum throughput
16532 algorithm.
16533
16534 -mno-inline-sqrt
16535 Do not generate inline code for "sqrt".
16536
16537 -mfused-madd
16538 -mno-fused-madd
16539 Do (don't) generate code that uses the fused multiply/add or
16540 multiply/subtract instructions. The default is to use these
16541 instructions.
16542
16543 -mno-dwarf2-asm
16544 -mdwarf2-asm
16545 Don't (or do) generate assembler code for the DWARF line number
16546 debugging info. This may be useful when not using the GNU
16547 assembler.
16548
16549 -mearly-stop-bits
16550 -mno-early-stop-bits
16551 Allow stop bits to be placed earlier than immediately preceding the
16552 instruction that triggered the stop bit. This can improve
16553 instruction scheduling, but does not always do so.
16554
16555 -mfixed-range=register-range
16556 Generate code treating the given register range as fixed registers.
16557 A fixed register is one that the register allocator cannot use.
16558 This is useful when compiling kernel code. A register range is
16559 specified as two registers separated by a dash. Multiple register
16560 ranges can be specified separated by a comma.
16561
16562 -mtls-size=tls-size
16563 Specify bit size of immediate TLS offsets. Valid values are 14,
16564 22, and 64.
16565
16566 -mtune=cpu-type
16567 Tune the instruction scheduling for a particular CPU, Valid values
16568 are itanium, itanium1, merced, itanium2, and mckinley.
16569
16570 -milp32
16571 -mlp64
16572 Generate code for a 32-bit or 64-bit environment. The 32-bit
16573 environment sets int, long and pointer to 32 bits. The 64-bit
16574 environment sets int to 32 bits and long and pointer to 64 bits.
16575 These are HP-UX specific flags.
16576
16577 -mno-sched-br-data-spec
16578 -msched-br-data-spec
16579 (Dis/En)able data speculative scheduling before reload. This
16580 results in generation of "ld.a" instructions and the corresponding
16581 check instructions ("ld.c" / "chk.a"). The default setting is
16582 disabled.
16583
16584 -msched-ar-data-spec
16585 -mno-sched-ar-data-spec
16586 (En/Dis)able data speculative scheduling after reload. This
16587 results in generation of "ld.a" instructions and the corresponding
16588 check instructions ("ld.c" / "chk.a"). The default setting is
16589 enabled.
16590
16591 -mno-sched-control-spec
16592 -msched-control-spec
16593 (Dis/En)able control speculative scheduling. This feature is
16594 available only during region scheduling (i.e. before reload). This
16595 results in generation of the "ld.s" instructions and the
16596 corresponding check instructions "chk.s". The default setting is
16597 disabled.
16598
16599 -msched-br-in-data-spec
16600 -mno-sched-br-in-data-spec
16601 (En/Dis)able speculative scheduling of the instructions that are
16602 dependent on the data speculative loads before reload. This is
16603 effective only with -msched-br-data-spec enabled. The default
16604 setting is enabled.
16605
16606 -msched-ar-in-data-spec
16607 -mno-sched-ar-in-data-spec
16608 (En/Dis)able speculative scheduling of the instructions that are
16609 dependent on the data speculative loads after reload. This is
16610 effective only with -msched-ar-data-spec enabled. The default
16611 setting is enabled.
16612
16613 -msched-in-control-spec
16614 -mno-sched-in-control-spec
16615 (En/Dis)able speculative scheduling of the instructions that are
16616 dependent on the control speculative loads. This is effective only
16617 with -msched-control-spec enabled. The default setting is enabled.
16618
16619 -mno-sched-prefer-non-data-spec-insns
16620 -msched-prefer-non-data-spec-insns
16621 If enabled, data-speculative instructions are chosen for schedule
16622 only if there are no other choices at the moment. This makes the
16623 use of the data speculation much more conservative. The default
16624 setting is disabled.
16625
16626 -mno-sched-prefer-non-control-spec-insns
16627 -msched-prefer-non-control-spec-insns
16628 If enabled, control-speculative instructions are chosen for
16629 schedule only if there are no other choices at the moment. This
16630 makes the use of the control speculation much more conservative.
16631 The default setting is disabled.
16632
16633 -mno-sched-count-spec-in-critical-path
16634 -msched-count-spec-in-critical-path
16635 If enabled, speculative dependencies are considered during
16636 computation of the instructions priorities. This makes the use of
16637 the speculation a bit more conservative. The default setting is
16638 disabled.
16639
16640 -msched-spec-ldc
16641 Use a simple data speculation check. This option is on by default.
16642
16643 -msched-control-spec-ldc
16644 Use a simple check for control speculation. This option is on by
16645 default.
16646
16647 -msched-stop-bits-after-every-cycle
16648 Place a stop bit after every cycle when scheduling. This option is
16649 on by default.
16650
16651 -msched-fp-mem-deps-zero-cost
16652 Assume that floating-point stores and loads are not likely to cause
16653 a conflict when placed into the same instruction group. This
16654 option is disabled by default.
16655
16656 -msel-sched-dont-check-control-spec
16657 Generate checks for control speculation in selective scheduling.
16658 This flag is disabled by default.
16659
16660 -msched-max-memory-insns=max-insns
16661 Limit on the number of memory insns per instruction group, giving
16662 lower priority to subsequent memory insns attempting to schedule in
16663 the same instruction group. Frequently useful to prevent cache bank
16664 conflicts. The default value is 1.
16665
16666 -msched-max-memory-insns-hard-limit
16667 Makes the limit specified by msched-max-memory-insns a hard limit,
16668 disallowing more than that number in an instruction group.
16669 Otherwise, the limit is "soft", meaning that non-memory operations
16670 are preferred when the limit is reached, but memory operations may
16671 still be scheduled.
16672
16673 LM32 Options
16674
16675 These -m options are defined for the LatticeMico32 architecture:
16676
16677 -mbarrel-shift-enabled
16678 Enable barrel-shift instructions.
16679
16680 -mdivide-enabled
16681 Enable divide and modulus instructions.
16682
16683 -mmultiply-enabled
16684 Enable multiply instructions.
16685
16686 -msign-extend-enabled
16687 Enable sign extend instructions.
16688
16689 -muser-enabled
16690 Enable user-defined instructions.
16691
16692 M32C Options
16693
16694 -mcpu=name
16695 Select the CPU for which code is generated. name may be one of r8c
16696 for the R8C/Tiny series, m16c for the M16C (up to /60) series,
16697 m32cm for the M16C/80 series, or m32c for the M32C/80 series.
16698
16699 -msim
16700 Specifies that the program will be run on the simulator. This
16701 causes an alternate runtime library to be linked in which supports,
16702 for example, file I/O. You must not use this option when
16703 generating programs that will run on real hardware; you must
16704 provide your own runtime library for whatever I/O functions are
16705 needed.
16706
16707 -memregs=number
16708 Specifies the number of memory-based pseudo-registers GCC uses
16709 during code generation. These pseudo-registers are used like real
16710 registers, so there is a tradeoff between GCC's ability to fit the
16711 code into available registers, and the performance penalty of using
16712 memory instead of registers. Note that all modules in a program
16713 must be compiled with the same value for this option. Because of
16714 that, you must not use this option with GCC's default runtime
16715 libraries.
16716
16717 M32R/D Options
16718
16719 These -m options are defined for Renesas M32R/D architectures:
16720
16721 -m32r2
16722 Generate code for the M32R/2.
16723
16724 -m32rx
16725 Generate code for the M32R/X.
16726
16727 -m32r
16728 Generate code for the M32R. This is the default.
16729
16730 -mmodel=small
16731 Assume all objects live in the lower 16MB of memory (so that their
16732 addresses can be loaded with the "ld24" instruction), and assume
16733 all subroutines are reachable with the "bl" instruction. This is
16734 the default.
16735
16736 The addressability of a particular object can be set with the
16737 "model" attribute.
16738
16739 -mmodel=medium
16740 Assume objects may be anywhere in the 32-bit address space (the
16741 compiler generates "seth/add3" instructions to load their
16742 addresses), and assume all subroutines are reachable with the "bl"
16743 instruction.
16744
16745 -mmodel=large
16746 Assume objects may be anywhere in the 32-bit address space (the
16747 compiler generates "seth/add3" instructions to load their
16748 addresses), and assume subroutines may not be reachable with the
16749 "bl" instruction (the compiler generates the much slower
16750 "seth/add3/jl" instruction sequence).
16751
16752 -msdata=none
16753 Disable use of the small data area. Variables are put into one of
16754 ".data", ".bss", or ".rodata" (unless the "section" attribute has
16755 been specified). This is the default.
16756
16757 The small data area consists of sections ".sdata" and ".sbss".
16758 Objects may be explicitly put in the small data area with the
16759 "section" attribute using one of these sections.
16760
16761 -msdata=sdata
16762 Put small global and static data in the small data area, but do not
16763 generate special code to reference them.
16764
16765 -msdata=use
16766 Put small global and static data in the small data area, and
16767 generate special instructions to reference them.
16768
16769 -G num
16770 Put global and static objects less than or equal to num bytes into
16771 the small data or BSS sections instead of the normal data or BSS
16772 sections. The default value of num is 8. The -msdata option must
16773 be set to one of sdata or use for this option to have any effect.
16774
16775 All modules should be compiled with the same -G num value.
16776 Compiling with different values of num may or may not work; if it
16777 doesn't the linker gives an error message---incorrect code is not
16778 generated.
16779
16780 -mdebug
16781 Makes the M32R-specific code in the compiler display some
16782 statistics that might help in debugging programs.
16783
16784 -malign-loops
16785 Align all loops to a 32-byte boundary.
16786
16787 -mno-align-loops
16788 Do not enforce a 32-byte alignment for loops. This is the default.
16789
16790 -missue-rate=number
16791 Issue number instructions per cycle. number can only be 1 or 2.
16792
16793 -mbranch-cost=number
16794 number can only be 1 or 2. If it is 1 then branches are preferred
16795 over conditional code, if it is 2, then the opposite applies.
16796
16797 -mflush-trap=number
16798 Specifies the trap number to use to flush the cache. The default
16799 is 12. Valid numbers are between 0 and 15 inclusive.
16800
16801 -mno-flush-trap
16802 Specifies that the cache cannot be flushed by using a trap.
16803
16804 -mflush-func=name
16805 Specifies the name of the operating system function to call to
16806 flush the cache. The default is _flush_cache, but a function call
16807 is only used if a trap is not available.
16808
16809 -mno-flush-func
16810 Indicates that there is no OS function for flushing the cache.
16811
16812 M680x0 Options
16813
16814 These are the -m options defined for M680x0 and ColdFire processors.
16815 The default settings depend on which architecture was selected when the
16816 compiler was configured; the defaults for the most common choices are
16817 given below.
16818
16819 -march=arch
16820 Generate code for a specific M680x0 or ColdFire instruction set
16821 architecture. Permissible values of arch for M680x0 architectures
16822 are: 68000, 68010, 68020, 68030, 68040, 68060 and cpu32. ColdFire
16823 architectures are selected according to Freescale's ISA
16824 classification and the permissible values are: isaa, isaaplus, isab
16825 and isac.
16826
16827 GCC defines a macro "__mcfarch__" whenever it is generating code
16828 for a ColdFire target. The arch in this macro is one of the -march
16829 arguments given above.
16830
16831 When used together, -march and -mtune select code that runs on a
16832 family of similar processors but that is optimized for a particular
16833 microarchitecture.
16834
16835 -mcpu=cpu
16836 Generate code for a specific M680x0 or ColdFire processor. The
16837 M680x0 cpus are: 68000, 68010, 68020, 68030, 68040, 68060, 68302,
16838 68332 and cpu32. The ColdFire cpus are given by the table below,
16839 which also classifies the CPUs into families:
16840
16841 Family : -mcpu arguments
16842 51 : 51 51ac 51ag 51cn 51em 51je 51jf 51jg 51jm 51mm 51qe 51qm
16843 5206 : 5202 5204 5206
16844 5206e : 5206e
16845 5208 : 5207 5208
16846 5211a : 5210a 5211a
16847 5213 : 5211 5212 5213
16848 5216 : 5214 5216
16849 52235 : 52230 52231 52232 52233 52234 52235
16850 5225 : 5224 5225
16851 52259 : 52252 52254 52255 52256 52258 52259
16852 5235 : 5232 5233 5234 5235 523x
16853 5249 : 5249
16854 5250 : 5250
16855 5271 : 5270 5271
16856 5272 : 5272
16857 5275 : 5274 5275
16858 5282 : 5280 5281 5282 528x
16859 53017 : 53011 53012 53013 53014 53015 53016 53017
16860 5307 : 5307
16861 5329 : 5327 5328 5329 532x
16862 5373 : 5372 5373 537x
16863 5407 : 5407
16864 5475 : 5470 5471 5472 5473 5474 5475 547x 5480 5481 5482 5483 5484
16865 5485
16866
16867 -mcpu=cpu overrides -march=arch if arch is compatible with cpu.
16868 Other combinations of -mcpu and -march are rejected.
16869
16870 GCC defines the macro "__mcf_cpu_cpu" when ColdFire target cpu is
16871 selected. It also defines "__mcf_family_family", where the value
16872 of family is given by the table above.
16873
16874 -mtune=tune
16875 Tune the code for a particular microarchitecture within the
16876 constraints set by -march and -mcpu. The M680x0 microarchitectures
16877 are: 68000, 68010, 68020, 68030, 68040, 68060 and cpu32. The
16878 ColdFire microarchitectures are: cfv1, cfv2, cfv3, cfv4 and cfv4e.
16879
16880 You can also use -mtune=68020-40 for code that needs to run
16881 relatively well on 68020, 68030 and 68040 targets. -mtune=68020-60
16882 is similar but includes 68060 targets as well. These two options
16883 select the same tuning decisions as -m68020-40 and -m68020-60
16884 respectively.
16885
16886 GCC defines the macros "__mcarch" and "__mcarch__" when tuning for
16887 680x0 architecture arch. It also defines "mcarch" unless either
16888 -ansi or a non-GNU -std option is used. If GCC is tuning for a
16889 range of architectures, as selected by -mtune=68020-40 or
16890 -mtune=68020-60, it defines the macros for every architecture in
16891 the range.
16892
16893 GCC also defines the macro "__muarch__" when tuning for ColdFire
16894 microarchitecture uarch, where uarch is one of the arguments given
16895 above.
16896
16897 -m68000
16898 -mc68000
16899 Generate output for a 68000. This is the default when the compiler
16900 is configured for 68000-based systems. It is equivalent to
16901 -march=68000.
16902
16903 Use this option for microcontrollers with a 68000 or EC000 core,
16904 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
16905
16906 -m68010
16907 Generate output for a 68010. This is the default when the compiler
16908 is configured for 68010-based systems. It is equivalent to
16909 -march=68010.
16910
16911 -m68020
16912 -mc68020
16913 Generate output for a 68020. This is the default when the compiler
16914 is configured for 68020-based systems. It is equivalent to
16915 -march=68020.
16916
16917 -m68030
16918 Generate output for a 68030. This is the default when the compiler
16919 is configured for 68030-based systems. It is equivalent to
16920 -march=68030.
16921
16922 -m68040
16923 Generate output for a 68040. This is the default when the compiler
16924 is configured for 68040-based systems. It is equivalent to
16925 -march=68040.
16926
16927 This option inhibits the use of 68881/68882 instructions that have
16928 to be emulated by software on the 68040. Use this option if your
16929 68040 does not have code to emulate those instructions.
16930
16931 -m68060
16932 Generate output for a 68060. This is the default when the compiler
16933 is configured for 68060-based systems. It is equivalent to
16934 -march=68060.
16935
16936 This option inhibits the use of 68020 and 68881/68882 instructions
16937 that have to be emulated by software on the 68060. Use this option
16938 if your 68060 does not have code to emulate those instructions.
16939
16940 -mcpu32
16941 Generate output for a CPU32. This is the default when the compiler
16942 is configured for CPU32-based systems. It is equivalent to
16943 -march=cpu32.
16944
16945 Use this option for microcontrollers with a CPU32 or CPU32+ core,
16946 including the 68330, 68331, 68332, 68333, 68334, 68336, 68340,
16947 68341, 68349 and 68360.
16948
16949 -m5200
16950 Generate output for a 520X ColdFire CPU. This is the default when
16951 the compiler is configured for 520X-based systems. It is
16952 equivalent to -mcpu=5206, and is now deprecated in favor of that
16953 option.
16954
16955 Use this option for microcontroller with a 5200 core, including the
16956 MCF5202, MCF5203, MCF5204 and MCF5206.
16957
16958 -m5206e
16959 Generate output for a 5206e ColdFire CPU. The option is now
16960 deprecated in favor of the equivalent -mcpu=5206e.
16961
16962 -m528x
16963 Generate output for a member of the ColdFire 528X family. The
16964 option is now deprecated in favor of the equivalent -mcpu=528x.
16965
16966 -m5307
16967 Generate output for a ColdFire 5307 CPU. The option is now
16968 deprecated in favor of the equivalent -mcpu=5307.
16969
16970 -m5407
16971 Generate output for a ColdFire 5407 CPU. The option is now
16972 deprecated in favor of the equivalent -mcpu=5407.
16973
16974 -mcfv4e
16975 Generate output for a ColdFire V4e family CPU (e.g. 547x/548x).
16976 This includes use of hardware floating-point instructions. The
16977 option is equivalent to -mcpu=547x, and is now deprecated in favor
16978 of that option.
16979
16980 -m68020-40
16981 Generate output for a 68040, without using any of the new
16982 instructions. This results in code that can run relatively
16983 efficiently on either a 68020/68881 or a 68030 or a 68040. The
16984 generated code does use the 68881 instructions that are emulated on
16985 the 68040.
16986
16987 The option is equivalent to -march=68020 -mtune=68020-40.
16988
16989 -m68020-60
16990 Generate output for a 68060, without using any of the new
16991 instructions. This results in code that can run relatively
16992 efficiently on either a 68020/68881 or a 68030 or a 68040. The
16993 generated code does use the 68881 instructions that are emulated on
16994 the 68060.
16995
16996 The option is equivalent to -march=68020 -mtune=68020-60.
16997
16998 -mhard-float
16999 -m68881
17000 Generate floating-point instructions. This is the default for
17001 68020 and above, and for ColdFire devices that have an FPU. It
17002 defines the macro "__HAVE_68881__" on M680x0 targets and
17003 "__mcffpu__" on ColdFire targets.
17004
17005 -msoft-float
17006 Do not generate floating-point instructions; use library calls
17007 instead. This is the default for 68000, 68010, and 68832 targets.
17008 It is also the default for ColdFire devices that have no FPU.
17009
17010 -mdiv
17011 -mno-div
17012 Generate (do not generate) ColdFire hardware divide and remainder
17013 instructions. If -march is used without -mcpu, the default is "on"
17014 for ColdFire architectures and "off" for M680x0 architectures.
17015 Otherwise, the default is taken from the target CPU (either the
17016 default CPU, or the one specified by -mcpu). For example, the
17017 default is "off" for -mcpu=5206 and "on" for -mcpu=5206e.
17018
17019 GCC defines the macro "__mcfhwdiv__" when this option is enabled.
17020
17021 -mshort
17022 Consider type "int" to be 16 bits wide, like "short int".
17023 Additionally, parameters passed on the stack are also aligned to a
17024 16-bit boundary even on targets whose API mandates promotion to
17025 32-bit.
17026
17027 -mno-short
17028 Do not consider type "int" to be 16 bits wide. This is the
17029 default.
17030
17031 -mnobitfield
17032 -mno-bitfield
17033 Do not use the bit-field instructions. The -m68000, -mcpu32 and
17034 -m5200 options imply -mnobitfield.
17035
17036 -mbitfield
17037 Do use the bit-field instructions. The -m68020 option implies
17038 -mbitfield. This is the default if you use a configuration
17039 designed for a 68020.
17040
17041 -mrtd
17042 Use a different function-calling convention, in which functions
17043 that take a fixed number of arguments return with the "rtd"
17044 instruction, which pops their arguments while returning. This
17045 saves one instruction in the caller since there is no need to pop
17046 the arguments there.
17047
17048 This calling convention is incompatible with the one normally used
17049 on Unix, so you cannot use it if you need to call libraries
17050 compiled with the Unix compiler.
17051
17052 Also, you must provide function prototypes for all functions that
17053 take variable numbers of arguments (including "printf"); otherwise
17054 incorrect code is generated for calls to those functions.
17055
17056 In addition, seriously incorrect code results if you call a
17057 function with too many arguments. (Normally, extra arguments are
17058 harmlessly ignored.)
17059
17060 The "rtd" instruction is supported by the 68010, 68020, 68030,
17061 68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
17062
17063 -mno-rtd
17064 Do not use the calling conventions selected by -mrtd. This is the
17065 default.
17066
17067 -malign-int
17068 -mno-align-int
17069 Control whether GCC aligns "int", "long", "long long", "float",
17070 "double", and "long double" variables on a 32-bit boundary
17071 (-malign-int) or a 16-bit boundary (-mno-align-int). Aligning
17072 variables on 32-bit boundaries produces code that runs somewhat
17073 faster on processors with 32-bit busses at the expense of more
17074 memory.
17075
17076 Warning: if you use the -malign-int switch, GCC aligns structures
17077 containing the above types differently than most published
17078 application binary interface specifications for the m68k.
17079
17080 -mpcrel
17081 Use the pc-relative addressing mode of the 68000 directly, instead
17082 of using a global offset table. At present, this option implies
17083 -fpic, allowing at most a 16-bit offset for pc-relative addressing.
17084 -fPIC is not presently supported with -mpcrel, though this could be
17085 supported for 68020 and higher processors.
17086
17087 -mno-strict-align
17088 -mstrict-align
17089 Do not (do) assume that unaligned memory references are handled by
17090 the system.
17091
17092 -msep-data
17093 Generate code that allows the data segment to be located in a
17094 different area of memory from the text segment. This allows for
17095 execute-in-place in an environment without virtual memory
17096 management. This option implies -fPIC.
17097
17098 -mno-sep-data
17099 Generate code that assumes that the data segment follows the text
17100 segment. This is the default.
17101
17102 -mid-shared-library
17103 Generate code that supports shared libraries via the library ID
17104 method. This allows for execute-in-place and shared libraries in
17105 an environment without virtual memory management. This option
17106 implies -fPIC.
17107
17108 -mno-id-shared-library
17109 Generate code that doesn't assume ID-based shared libraries are
17110 being used. This is the default.
17111
17112 -mshared-library-id=n
17113 Specifies the identification number of the ID-based shared library
17114 being compiled. Specifying a value of 0 generates more compact
17115 code; specifying other values forces the allocation of that number
17116 to the current library, but is no more space- or time-efficient
17117 than omitting this option.
17118
17119 -mxgot
17120 -mno-xgot
17121 When generating position-independent code for ColdFire, generate
17122 code that works if the GOT has more than 8192 entries. This code
17123 is larger and slower than code generated without this option. On
17124 M680x0 processors, this option is not needed; -fPIC suffices.
17125
17126 GCC normally uses a single instruction to load values from the GOT.
17127 While this is relatively efficient, it only works if the GOT is
17128 smaller than about 64k. Anything larger causes the linker to
17129 report an error such as:
17130
17131 relocation truncated to fit: R_68K_GOT16O foobar
17132
17133 If this happens, you should recompile your code with -mxgot. It
17134 should then work with very large GOTs. However, code generated
17135 with -mxgot is less efficient, since it takes 4 instructions to
17136 fetch the value of a global symbol.
17137
17138 Note that some linkers, including newer versions of the GNU linker,
17139 can create multiple GOTs and sort GOT entries. If you have such a
17140 linker, you should only need to use -mxgot when compiling a single
17141 object file that accesses more than 8192 GOT entries. Very few do.
17142
17143 These options have no effect unless GCC is generating position-
17144 independent code.
17145
17146 -mlong-jump-table-offsets
17147 Use 32-bit offsets in "switch" tables. The default is to use
17148 16-bit offsets.
17149
17150 MCore Options
17151
17152 These are the -m options defined for the Motorola M*Core processors.
17153
17154 -mhardlit
17155 -mno-hardlit
17156 Inline constants into the code stream if it can be done in two
17157 instructions or less.
17158
17159 -mdiv
17160 -mno-div
17161 Use the divide instruction. (Enabled by default).
17162
17163 -mrelax-immediate
17164 -mno-relax-immediate
17165 Allow arbitrary-sized immediates in bit operations.
17166
17167 -mwide-bitfields
17168 -mno-wide-bitfields
17169 Always treat bit-fields as "int"-sized.
17170
17171 -m4byte-functions
17172 -mno-4byte-functions
17173 Force all functions to be aligned to a 4-byte boundary.
17174
17175 -mcallgraph-data
17176 -mno-callgraph-data
17177 Emit callgraph information.
17178
17179 -mslow-bytes
17180 -mno-slow-bytes
17181 Prefer word access when reading byte quantities.
17182
17183 -mlittle-endian
17184 -mbig-endian
17185 Generate code for a little-endian target.
17186
17187 -m210
17188 -m340
17189 Generate code for the 210 processor.
17190
17191 -mno-lsim
17192 Assume that runtime support has been provided and so omit the
17193 simulator library (libsim.a) from the linker command line.
17194
17195 -mstack-increment=size
17196 Set the maximum amount for a single stack increment operation.
17197 Large values can increase the speed of programs that contain
17198 functions that need a large amount of stack space, but they can
17199 also trigger a segmentation fault if the stack is extended too
17200 much. The default value is 0x1000.
17201
17202 MeP Options
17203
17204 -mabsdiff
17205 Enables the "abs" instruction, which is the absolute difference
17206 between two registers.
17207
17208 -mall-opts
17209 Enables all the optional instructions---average, multiply, divide,
17210 bit operations, leading zero, absolute difference, min/max, clip,
17211 and saturation.
17212
17213 -maverage
17214 Enables the "ave" instruction, which computes the average of two
17215 registers.
17216
17217 -mbased=n
17218 Variables of size n bytes or smaller are placed in the ".based"
17219 section by default. Based variables use the $tp register as a base
17220 register, and there is a 128-byte limit to the ".based" section.
17221
17222 -mbitops
17223 Enables the bit operation instructions---bit test ("btstm"), set
17224 ("bsetm"), clear ("bclrm"), invert ("bnotm"), and test-and-set
17225 ("tas").
17226
17227 -mc=name
17228 Selects which section constant data is placed in. name may be
17229 tiny, near, or far.
17230
17231 -mclip
17232 Enables the "clip" instruction. Note that -mclip is not useful
17233 unless you also provide -mminmax.
17234
17235 -mconfig=name
17236 Selects one of the built-in core configurations. Each MeP chip has
17237 one or more modules in it; each module has a core CPU and a variety
17238 of coprocessors, optional instructions, and peripherals. The
17239 "MeP-Integrator" tool, not part of GCC, provides these
17240 configurations through this option; using this option is the same
17241 as using all the corresponding command-line options. The default
17242 configuration is default.
17243
17244 -mcop
17245 Enables the coprocessor instructions. By default, this is a 32-bit
17246 coprocessor. Note that the coprocessor is normally enabled via the
17247 -mconfig= option.
17248
17249 -mcop32
17250 Enables the 32-bit coprocessor's instructions.
17251
17252 -mcop64
17253 Enables the 64-bit coprocessor's instructions.
17254
17255 -mivc2
17256 Enables IVC2 scheduling. IVC2 is a 64-bit VLIW coprocessor.
17257
17258 -mdc
17259 Causes constant variables to be placed in the ".near" section.
17260
17261 -mdiv
17262 Enables the "div" and "divu" instructions.
17263
17264 -meb
17265 Generate big-endian code.
17266
17267 -mel
17268 Generate little-endian code.
17269
17270 -mio-volatile
17271 Tells the compiler that any variable marked with the "io" attribute
17272 is to be considered volatile.
17273
17274 -ml Causes variables to be assigned to the ".far" section by default.
17275
17276 -mleadz
17277 Enables the "leadz" (leading zero) instruction.
17278
17279 -mm Causes variables to be assigned to the ".near" section by default.
17280
17281 -mminmax
17282 Enables the "min" and "max" instructions.
17283
17284 -mmult
17285 Enables the multiplication and multiply-accumulate instructions.
17286
17287 -mno-opts
17288 Disables all the optional instructions enabled by -mall-opts.
17289
17290 -mrepeat
17291 Enables the "repeat" and "erepeat" instructions, used for low-
17292 overhead looping.
17293
17294 -ms Causes all variables to default to the ".tiny" section. Note that
17295 there is a 65536-byte limit to this section. Accesses to these
17296 variables use the %gp base register.
17297
17298 -msatur
17299 Enables the saturation instructions. Note that the compiler does
17300 not currently generate these itself, but this option is included
17301 for compatibility with other tools, like "as".
17302
17303 -msdram
17304 Link the SDRAM-based runtime instead of the default ROM-based
17305 runtime.
17306
17307 -msim
17308 Link the simulator run-time libraries.
17309
17310 -msimnovec
17311 Link the simulator runtime libraries, excluding built-in support
17312 for reset and exception vectors and tables.
17313
17314 -mtf
17315 Causes all functions to default to the ".far" section. Without
17316 this option, functions default to the ".near" section.
17317
17318 -mtiny=n
17319 Variables that are n bytes or smaller are allocated to the ".tiny"
17320 section. These variables use the $gp base register. The default
17321 for this option is 4, but note that there's a 65536-byte limit to
17322 the ".tiny" section.
17323
17324 MicroBlaze Options
17325
17326 -msoft-float
17327 Use software emulation for floating point (default).
17328
17329 -mhard-float
17330 Use hardware floating-point instructions.
17331
17332 -mmemcpy
17333 Do not optimize block moves, use "memcpy".
17334
17335 -mno-clearbss
17336 This option is deprecated. Use -fno-zero-initialized-in-bss
17337 instead.
17338
17339 -mcpu=cpu-type
17340 Use features of, and schedule code for, the given CPU. Supported
17341 values are in the format vX.YY.Z, where X is a major version, YY is
17342 the minor version, and Z is compatibility code. Example values are
17343 v3.00.a, v4.00.b, v5.00.a, v5.00.b, v6.00.a.
17344
17345 -mxl-soft-mul
17346 Use software multiply emulation (default).
17347
17348 -mxl-soft-div
17349 Use software emulation for divides (default).
17350
17351 -mxl-barrel-shift
17352 Use the hardware barrel shifter.
17353
17354 -mxl-pattern-compare
17355 Use pattern compare instructions.
17356
17357 -msmall-divides
17358 Use table lookup optimization for small signed integer divisions.
17359
17360 -mxl-stack-check
17361 This option is deprecated. Use -fstack-check instead.
17362
17363 -mxl-gp-opt
17364 Use GP-relative ".sdata"/".sbss" sections.
17365
17366 -mxl-multiply-high
17367 Use multiply high instructions for high part of 32x32 multiply.
17368
17369 -mxl-float-convert
17370 Use hardware floating-point conversion instructions.
17371
17372 -mxl-float-sqrt
17373 Use hardware floating-point square root instruction.
17374
17375 -mbig-endian
17376 Generate code for a big-endian target.
17377
17378 -mlittle-endian
17379 Generate code for a little-endian target.
17380
17381 -mxl-reorder
17382 Use reorder instructions (swap and byte reversed load/store).
17383
17384 -mxl-mode-app-model
17385 Select application model app-model. Valid models are
17386
17387 executable
17388 normal executable (default), uses startup code crt0.o.
17389
17390 xmdstub
17391 for use with Xilinx Microprocessor Debugger (XMD) based
17392 software intrusive debug agent called xmdstub. This uses
17393 startup file crt1.o and sets the start address of the program
17394 to 0x800.
17395
17396 bootstrap
17397 for applications that are loaded using a bootloader. This
17398 model uses startup file crt2.o which does not contain a
17399 processor reset vector handler. This is suitable for
17400 transferring control on a processor reset to the bootloader
17401 rather than the application.
17402
17403 novectors
17404 for applications that do not require any of the MicroBlaze
17405 vectors. This option may be useful for applications running
17406 within a monitoring application. This model uses crt3.o as a
17407 startup file.
17408
17409 Option -xl-mode-app-model is a deprecated alias for -mxl-mode-app-
17410 model.
17411
17412 MIPS Options
17413
17414 -EB Generate big-endian code.
17415
17416 -EL Generate little-endian code. This is the default for mips*el-*-*
17417 configurations.
17418
17419 -march=arch
17420 Generate code that runs on arch, which can be the name of a generic
17421 MIPS ISA, or the name of a particular processor. The ISA names
17422 are: mips1, mips2, mips3, mips4, mips32, mips32r2, mips32r3,
17423 mips32r5, mips32r6, mips64, mips64r2, mips64r3, mips64r5 and
17424 mips64r6. The processor names are: 4kc, 4km, 4kp, 4ksc, 4kec,
17425 4kem, 4kep, 4ksd, 5kc, 5kf, 20kc, 24kc, 24kf2_1, 24kf1_1, 24kec,
17426 24kef2_1, 24kef1_1, 34kc, 34kf2_1, 34kf1_1, 34kn, 74kc, 74kf2_1,
17427 74kf1_1, 74kf3_2, 1004kc, 1004kf2_1, 1004kf1_1, i6400, interaptiv,
17428 loongson2e, loongson2f, loongson3a, m4k, m14k, m14kc, m14ke,
17429 m14kec, m5100, m5101, octeon, octeon+, octeon2, octeon3, orion,
17430 p5600, r2000, r3000, r3900, r4000, r4400, r4600, r4650, r4700,
17431 r6000, r8000, rm7000, rm9000, r10000, r12000, r14000, r16000, sb1,
17432 sr71000, vr4100, vr4111, vr4120, vr4130, vr4300, vr5000, vr5400,
17433 vr5500, xlr and xlp. The special value from-abi selects the most
17434 compatible architecture for the selected ABI (that is, mips1 for
17435 32-bit ABIs and mips3 for 64-bit ABIs).
17436
17437 The native Linux/GNU toolchain also supports the value native,
17438 which selects the best architecture option for the host processor.
17439 -march=native has no effect if GCC does not recognize the
17440 processor.
17441
17442 In processor names, a final 000 can be abbreviated as k (for
17443 example, -march=r2k). Prefixes are optional, and vr may be written
17444 r.
17445
17446 Names of the form nf2_1 refer to processors with FPUs clocked at
17447 half the rate of the core, names of the form nf1_1 refer to
17448 processors with FPUs clocked at the same rate as the core, and
17449 names of the form nf3_2 refer to processors with FPUs clocked a
17450 ratio of 3:2 with respect to the core. For compatibility reasons,
17451 nf is accepted as a synonym for nf2_1 while nx and bfx are accepted
17452 as synonyms for nf1_1.
17453
17454 GCC defines two macros based on the value of this option. The
17455 first is "_MIPS_ARCH", which gives the name of target architecture,
17456 as a string. The second has the form "_MIPS_ARCH_foo", where foo
17457 is the capitalized value of "_MIPS_ARCH". For example,
17458 -march=r2000 sets "_MIPS_ARCH" to "r2000" and defines the macro
17459 "_MIPS_ARCH_R2000".
17460
17461 Note that the "_MIPS_ARCH" macro uses the processor names given
17462 above. In other words, it has the full prefix and does not
17463 abbreviate 000 as k. In the case of from-abi, the macro names the
17464 resolved architecture (either "mips1" or "mips3"). It names the
17465 default architecture when no -march option is given.
17466
17467 -mtune=arch
17468 Optimize for arch. Among other things, this option controls the
17469 way instructions are scheduled, and the perceived cost of
17470 arithmetic operations. The list of arch values is the same as for
17471 -march.
17472
17473 When this option is not used, GCC optimizes for the processor
17474 specified by -march. By using -march and -mtune together, it is
17475 possible to generate code that runs on a family of processors, but
17476 optimize the code for one particular member of that family.
17477
17478 -mtune defines the macros "_MIPS_TUNE" and "_MIPS_TUNE_foo", which
17479 work in the same way as the -march ones described above.
17480
17481 -mips1
17482 Equivalent to -march=mips1.
17483
17484 -mips2
17485 Equivalent to -march=mips2.
17486
17487 -mips3
17488 Equivalent to -march=mips3.
17489
17490 -mips4
17491 Equivalent to -march=mips4.
17492
17493 -mips32
17494 Equivalent to -march=mips32.
17495
17496 -mips32r3
17497 Equivalent to -march=mips32r3.
17498
17499 -mips32r5
17500 Equivalent to -march=mips32r5.
17501
17502 -mips32r6
17503 Equivalent to -march=mips32r6.
17504
17505 -mips64
17506 Equivalent to -march=mips64.
17507
17508 -mips64r2
17509 Equivalent to -march=mips64r2.
17510
17511 -mips64r3
17512 Equivalent to -march=mips64r3.
17513
17514 -mips64r5
17515 Equivalent to -march=mips64r5.
17516
17517 -mips64r6
17518 Equivalent to -march=mips64r6.
17519
17520 -mips16
17521 -mno-mips16
17522 Generate (do not generate) MIPS16 code. If GCC is targeting a
17523 MIPS32 or MIPS64 architecture, it makes use of the MIPS16e ASE.
17524
17525 MIPS16 code generation can also be controlled on a per-function
17526 basis by means of "mips16" and "nomips16" attributes.
17527
17528 -mflip-mips16
17529 Generate MIPS16 code on alternating functions. This option is
17530 provided for regression testing of mixed MIPS16/non-MIPS16 code
17531 generation, and is not intended for ordinary use in compiling user
17532 code.
17533
17534 -minterlink-compressed
17535 -mno-interlink-compressed
17536 Require (do not require) that code using the standard
17537 (uncompressed) MIPS ISA be link-compatible with MIPS16 and
17538 microMIPS code, and vice versa.
17539
17540 For example, code using the standard ISA encoding cannot jump
17541 directly to MIPS16 or microMIPS code; it must either use a call or
17542 an indirect jump. -minterlink-compressed therefore disables direct
17543 jumps unless GCC knows that the target of the jump is not
17544 compressed.
17545
17546 -minterlink-mips16
17547 -mno-interlink-mips16
17548 Aliases of -minterlink-compressed and -mno-interlink-compressed.
17549 These options predate the microMIPS ASE and are retained for
17550 backwards compatibility.
17551
17552 -mabi=32
17553 -mabi=o64
17554 -mabi=n32
17555 -mabi=64
17556 -mabi=eabi
17557 Generate code for the given ABI.
17558
17559 Note that the EABI has a 32-bit and a 64-bit variant. GCC normally
17560 generates 64-bit code when you select a 64-bit architecture, but
17561 you can use -mgp32 to get 32-bit code instead.
17562
17563 For information about the O64 ABI, see
17564 <http://gcc.gnu.org/projects/mipso64-abi.html>.
17565
17566 GCC supports a variant of the o32 ABI in which floating-point
17567 registers are 64 rather than 32 bits wide. You can select this
17568 combination with -mabi=32 -mfp64. This ABI relies on the "mthc1"
17569 and "mfhc1" instructions and is therefore only supported for
17570 MIPS32R2, MIPS32R3 and MIPS32R5 processors.
17571
17572 The register assignments for arguments and return values remain the
17573 same, but each scalar value is passed in a single 64-bit register
17574 rather than a pair of 32-bit registers. For example, scalar
17575 floating-point values are returned in $f0 only, not a $f0/$f1 pair.
17576 The set of call-saved registers also remains the same in that the
17577 even-numbered double-precision registers are saved.
17578
17579 Two additional variants of the o32 ABI are supported to enable a
17580 transition from 32-bit to 64-bit registers. These are FPXX
17581 (-mfpxx) and FP64A (-mfp64 -mno-odd-spreg). The FPXX extension
17582 mandates that all code must execute correctly when run using 32-bit
17583 or 64-bit registers. The code can be interlinked with either FP32
17584 or FP64, but not both. The FP64A extension is similar to the FP64
17585 extension but forbids the use of odd-numbered single-precision
17586 registers. This can be used in conjunction with the "FRE" mode of
17587 FPUs in MIPS32R5 processors and allows both FP32 and FP64A code to
17588 interlink and run in the same process without changing FPU modes.
17589
17590 -mabicalls
17591 -mno-abicalls
17592 Generate (do not generate) code that is suitable for SVR4-style
17593 dynamic objects. -mabicalls is the default for SVR4-based systems.
17594
17595 -mshared
17596 -mno-shared
17597 Generate (do not generate) code that is fully position-independent,
17598 and that can therefore be linked into shared libraries. This
17599 option only affects -mabicalls.
17600
17601 All -mabicalls code has traditionally been position-independent,
17602 regardless of options like -fPIC and -fpic. However, as an
17603 extension, the GNU toolchain allows executables to use absolute
17604 accesses for locally-binding symbols. It can also use shorter GP
17605 initialization sequences and generate direct calls to locally-
17606 defined functions. This mode is selected by -mno-shared.
17607
17608 -mno-shared depends on binutils 2.16 or higher and generates
17609 objects that can only be linked by the GNU linker. However, the
17610 option does not affect the ABI of the final executable; it only
17611 affects the ABI of relocatable objects. Using -mno-shared
17612 generally makes executables both smaller and quicker.
17613
17614 -mshared is the default.
17615
17616 -mplt
17617 -mno-plt
17618 Assume (do not assume) that the static and dynamic linkers support
17619 PLTs and copy relocations. This option only affects -mno-shared
17620 -mabicalls. For the n64 ABI, this option has no effect without
17621 -msym32.
17622
17623 You can make -mplt the default by configuring GCC with
17624 --with-mips-plt. The default is -mno-plt otherwise.
17625
17626 -mxgot
17627 -mno-xgot
17628 Lift (do not lift) the usual restrictions on the size of the global
17629 offset table.
17630
17631 GCC normally uses a single instruction to load values from the GOT.
17632 While this is relatively efficient, it only works if the GOT is
17633 smaller than about 64k. Anything larger causes the linker to
17634 report an error such as:
17635
17636 relocation truncated to fit: R_MIPS_GOT16 foobar
17637
17638 If this happens, you should recompile your code with -mxgot. This
17639 works with very large GOTs, although the code is also less
17640 efficient, since it takes three instructions to fetch the value of
17641 a global symbol.
17642
17643 Note that some linkers can create multiple GOTs. If you have such
17644 a linker, you should only need to use -mxgot when a single object
17645 file accesses more than 64k's worth of GOT entries. Very few do.
17646
17647 These options have no effect unless GCC is generating position
17648 independent code.
17649
17650 -mgp32
17651 Assume that general-purpose registers are 32 bits wide.
17652
17653 -mgp64
17654 Assume that general-purpose registers are 64 bits wide.
17655
17656 -mfp32
17657 Assume that floating-point registers are 32 bits wide.
17658
17659 -mfp64
17660 Assume that floating-point registers are 64 bits wide.
17661
17662 -mfpxx
17663 Do not assume the width of floating-point registers.
17664
17665 -mhard-float
17666 Use floating-point coprocessor instructions.
17667
17668 -msoft-float
17669 Do not use floating-point coprocessor instructions. Implement
17670 floating-point calculations using library calls instead.
17671
17672 -mno-float
17673 Equivalent to -msoft-float, but additionally asserts that the
17674 program being compiled does not perform any floating-point
17675 operations. This option is presently supported only by some bare-
17676 metal MIPS configurations, where it may select a special set of
17677 libraries that lack all floating-point support (including, for
17678 example, the floating-point "printf" formats). If code compiled
17679 with -mno-float accidentally contains floating-point operations, it
17680 is likely to suffer a link-time or run-time failure.
17681
17682 -msingle-float
17683 Assume that the floating-point coprocessor only supports single-
17684 precision operations.
17685
17686 -mdouble-float
17687 Assume that the floating-point coprocessor supports double-
17688 precision operations. This is the default.
17689
17690 -modd-spreg
17691 -mno-odd-spreg
17692 Enable the use of odd-numbered single-precision floating-point
17693 registers for the o32 ABI. This is the default for processors that
17694 are known to support these registers. When using the o32 FPXX ABI,
17695 -mno-odd-spreg is set by default.
17696
17697 -mabs=2008
17698 -mabs=legacy
17699 These options control the treatment of the special not-a-number
17700 (NaN) IEEE 754 floating-point data with the "abs.fmt" and "neg.fmt"
17701 machine instructions.
17702
17703 By default or when -mabs=legacy is used the legacy treatment is
17704 selected. In this case these instructions are considered
17705 arithmetic and avoided where correct operation is required and the
17706 input operand might be a NaN. A longer sequence of instructions
17707 that manipulate the sign bit of floating-point datum manually is
17708 used instead unless the -ffinite-math-only option has also been
17709 specified.
17710
17711 The -mabs=2008 option selects the IEEE 754-2008 treatment. In this
17712 case these instructions are considered non-arithmetic and therefore
17713 operating correctly in all cases, including in particular where the
17714 input operand is a NaN. These instructions are therefore always
17715 used for the respective operations.
17716
17717 -mnan=2008
17718 -mnan=legacy
17719 These options control the encoding of the special not-a-number
17720 (NaN) IEEE 754 floating-point data.
17721
17722 The -mnan=legacy option selects the legacy encoding. In this case
17723 quiet NaNs (qNaNs) are denoted by the first bit of their trailing
17724 significand field being 0, whereas signaling NaNs (sNaNs) are
17725 denoted by the first bit of their trailing significand field being
17726 1.
17727
17728 The -mnan=2008 option selects the IEEE 754-2008 encoding. In this
17729 case qNaNs are denoted by the first bit of their trailing
17730 significand field being 1, whereas sNaNs are denoted by the first
17731 bit of their trailing significand field being 0.
17732
17733 The default is -mnan=legacy unless GCC has been configured with
17734 --with-nan=2008.
17735
17736 -mllsc
17737 -mno-llsc
17738 Use (do not use) ll, sc, and sync instructions to implement atomic
17739 memory built-in functions. When neither option is specified, GCC
17740 uses the instructions if the target architecture supports them.
17741
17742 -mllsc is useful if the runtime environment can emulate the
17743 instructions and -mno-llsc can be useful when compiling for
17744 nonstandard ISAs. You can make either option the default by
17745 configuring GCC with --with-llsc and --without-llsc respectively.
17746 --with-llsc is the default for some configurations; see the
17747 installation documentation for details.
17748
17749 -mdsp
17750 -mno-dsp
17751 Use (do not use) revision 1 of the MIPS DSP ASE.
17752 This option defines the preprocessor macro "__mips_dsp". It also
17753 defines "__mips_dsp_rev" to 1.
17754
17755 -mdspr2
17756 -mno-dspr2
17757 Use (do not use) revision 2 of the MIPS DSP ASE.
17758 This option defines the preprocessor macros "__mips_dsp" and
17759 "__mips_dspr2". It also defines "__mips_dsp_rev" to 2.
17760
17761 -msmartmips
17762 -mno-smartmips
17763 Use (do not use) the MIPS SmartMIPS ASE.
17764
17765 -mpaired-single
17766 -mno-paired-single
17767 Use (do not use) paired-single floating-point instructions.
17768 This option requires hardware floating-point support to be
17769 enabled.
17770
17771 -mdmx
17772 -mno-mdmx
17773 Use (do not use) MIPS Digital Media Extension instructions. This
17774 option can only be used when generating 64-bit code and requires
17775 hardware floating-point support to be enabled.
17776
17777 -mips3d
17778 -mno-mips3d
17779 Use (do not use) the MIPS-3D ASE. The option -mips3d implies
17780 -mpaired-single.
17781
17782 -mmicromips
17783 -mno-micromips
17784 Generate (do not generate) microMIPS code.
17785
17786 MicroMIPS code generation can also be controlled on a per-function
17787 basis by means of "micromips" and "nomicromips" attributes.
17788
17789 -mmt
17790 -mno-mt
17791 Use (do not use) MT Multithreading instructions.
17792
17793 -mmcu
17794 -mno-mcu
17795 Use (do not use) the MIPS MCU ASE instructions.
17796
17797 -meva
17798 -mno-eva
17799 Use (do not use) the MIPS Enhanced Virtual Addressing instructions.
17800
17801 -mvirt
17802 -mno-virt
17803 Use (do not use) the MIPS Virtualization (VZ) instructions.
17804
17805 -mxpa
17806 -mno-xpa
17807 Use (do not use) the MIPS eXtended Physical Address (XPA)
17808 instructions.
17809
17810 -mlong64
17811 Force "long" types to be 64 bits wide. See -mlong32 for an
17812 explanation of the default and the way that the pointer size is
17813 determined.
17814
17815 -mlong32
17816 Force "long", "int", and pointer types to be 32 bits wide.
17817
17818 The default size of "int"s, "long"s and pointers depends on the
17819 ABI. All the supported ABIs use 32-bit "int"s. The n64 ABI uses
17820 64-bit "long"s, as does the 64-bit EABI; the others use 32-bit
17821 "long"s. Pointers are the same size as "long"s, or the same size
17822 as integer registers, whichever is smaller.
17823
17824 -msym32
17825 -mno-sym32
17826 Assume (do not assume) that all symbols have 32-bit values,
17827 regardless of the selected ABI. This option is useful in
17828 combination with -mabi=64 and -mno-abicalls because it allows GCC
17829 to generate shorter and faster references to symbolic addresses.
17830
17831 -G num
17832 Put definitions of externally-visible data in a small data section
17833 if that data is no bigger than num bytes. GCC can then generate
17834 more efficient accesses to the data; see -mgpopt for details.
17835
17836 The default -G option depends on the configuration.
17837
17838 -mlocal-sdata
17839 -mno-local-sdata
17840 Extend (do not extend) the -G behavior to local data too, such as
17841 to static variables in C. -mlocal-sdata is the default for all
17842 configurations.
17843
17844 If the linker complains that an application is using too much small
17845 data, you might want to try rebuilding the less performance-
17846 critical parts with -mno-local-sdata. You might also want to build
17847 large libraries with -mno-local-sdata, so that the libraries leave
17848 more room for the main program.
17849
17850 -mextern-sdata
17851 -mno-extern-sdata
17852 Assume (do not assume) that externally-defined data is in a small
17853 data section if the size of that data is within the -G limit.
17854 -mextern-sdata is the default for all configurations.
17855
17856 If you compile a module Mod with -mextern-sdata -G num -mgpopt, and
17857 Mod references a variable Var that is no bigger than num bytes, you
17858 must make sure that Var is placed in a small data section. If Var
17859 is defined by another module, you must either compile that module
17860 with a high-enough -G setting or attach a "section" attribute to
17861 Var's definition. If Var is common, you must link the application
17862 with a high-enough -G setting.
17863
17864 The easiest way of satisfying these restrictions is to compile and
17865 link every module with the same -G option. However, you may wish
17866 to build a library that supports several different small data
17867 limits. You can do this by compiling the library with the highest
17868 supported -G setting and additionally using -mno-extern-sdata to
17869 stop the library from making assumptions about externally-defined
17870 data.
17871
17872 -mgpopt
17873 -mno-gpopt
17874 Use (do not use) GP-relative accesses for symbols that are known to
17875 be in a small data section; see -G, -mlocal-sdata and
17876 -mextern-sdata. -mgpopt is the default for all configurations.
17877
17878 -mno-gpopt is useful for cases where the $gp register might not
17879 hold the value of "_gp". For example, if the code is part of a
17880 library that might be used in a boot monitor, programs that call
17881 boot monitor routines pass an unknown value in $gp. (In such
17882 situations, the boot monitor itself is usually compiled with -G0.)
17883
17884 -mno-gpopt implies -mno-local-sdata and -mno-extern-sdata.
17885
17886 -membedded-data
17887 -mno-embedded-data
17888 Allocate variables to the read-only data section first if possible,
17889 then next in the small data section if possible, otherwise in data.
17890 This gives slightly slower code than the default, but reduces the
17891 amount of RAM required when executing, and thus may be preferred
17892 for some embedded systems.
17893
17894 -muninit-const-in-rodata
17895 -mno-uninit-const-in-rodata
17896 Put uninitialized "const" variables in the read-only data section.
17897 This option is only meaningful in conjunction with -membedded-data.
17898
17899 -mcode-readable=setting
17900 Specify whether GCC may generate code that reads from executable
17901 sections. There are three possible settings:
17902
17903 -mcode-readable=yes
17904 Instructions may freely access executable sections. This is
17905 the default setting.
17906
17907 -mcode-readable=pcrel
17908 MIPS16 PC-relative load instructions can access executable
17909 sections, but other instructions must not do so. This option
17910 is useful on 4KSc and 4KSd processors when the code TLBs have
17911 the Read Inhibit bit set. It is also useful on processors that
17912 can be configured to have a dual instruction/data SRAM
17913 interface and that, like the M4K, automatically redirect PC-
17914 relative loads to the instruction RAM.
17915
17916 -mcode-readable=no
17917 Instructions must not access executable sections. This option
17918 can be useful on targets that are configured to have a dual
17919 instruction/data SRAM interface but that (unlike the M4K) do
17920 not automatically redirect PC-relative loads to the instruction
17921 RAM.
17922
17923 -msplit-addresses
17924 -mno-split-addresses
17925 Enable (disable) use of the "%hi()" and "%lo()" assembler
17926 relocation operators. This option has been superseded by
17927 -mexplicit-relocs but is retained for backwards compatibility.
17928
17929 -mexplicit-relocs
17930 -mno-explicit-relocs
17931 Use (do not use) assembler relocation operators when dealing with
17932 symbolic addresses. The alternative, selected by
17933 -mno-explicit-relocs, is to use assembler macros instead.
17934
17935 -mexplicit-relocs is the default if GCC was configured to use an
17936 assembler that supports relocation operators.
17937
17938 -mcheck-zero-division
17939 -mno-check-zero-division
17940 Trap (do not trap) on integer division by zero.
17941
17942 The default is -mcheck-zero-division.
17943
17944 -mdivide-traps
17945 -mdivide-breaks
17946 MIPS systems check for division by zero by generating either a
17947 conditional trap or a break instruction. Using traps results in
17948 smaller code, but is only supported on MIPS II and later. Also,
17949 some versions of the Linux kernel have a bug that prevents trap
17950 from generating the proper signal ("SIGFPE"). Use -mdivide-traps
17951 to allow conditional traps on architectures that support them and
17952 -mdivide-breaks to force the use of breaks.
17953
17954 The default is usually -mdivide-traps, but this can be overridden
17955 at configure time using --with-divide=breaks. Divide-by-zero
17956 checks can be completely disabled using -mno-check-zero-division.
17957
17958 -mload-store-pairs
17959 -mno-load-store-pairs
17960 Enable (disable) an optimization that pairs consecutive load or
17961 store instructions to enable load/store bonding. This option is
17962 enabled by default but only takes effect when the selected
17963 architecture is known to support bonding.
17964
17965 -mmemcpy
17966 -mno-memcpy
17967 Force (do not force) the use of "memcpy" for non-trivial block
17968 moves. The default is -mno-memcpy, which allows GCC to inline most
17969 constant-sized copies.
17970
17971 -mlong-calls
17972 -mno-long-calls
17973 Disable (do not disable) use of the "jal" instruction. Calling
17974 functions using "jal" is more efficient but requires the caller and
17975 callee to be in the same 256 megabyte segment.
17976
17977 This option has no effect on abicalls code. The default is
17978 -mno-long-calls.
17979
17980 -mmad
17981 -mno-mad
17982 Enable (disable) use of the "mad", "madu" and "mul" instructions,
17983 as provided by the R4650 ISA.
17984
17985 -mimadd
17986 -mno-imadd
17987 Enable (disable) use of the "madd" and "msub" integer instructions.
17988 The default is -mimadd on architectures that support "madd" and
17989 "msub" except for the 74k architecture where it was found to
17990 generate slower code.
17991
17992 -mfused-madd
17993 -mno-fused-madd
17994 Enable (disable) use of the floating-point multiply-accumulate
17995 instructions, when they are available. The default is
17996 -mfused-madd.
17997
17998 On the R8000 CPU when multiply-accumulate instructions are used,
17999 the intermediate product is calculated to infinite precision and is
18000 not subject to the FCSR Flush to Zero bit. This may be undesirable
18001 in some circumstances. On other processors the result is
18002 numerically identical to the equivalent computation using separate
18003 multiply, add, subtract and negate instructions.
18004
18005 -nocpp
18006 Tell the MIPS assembler to not run its preprocessor over user
18007 assembler files (with a .s suffix) when assembling them.
18008
18009 -mfix-24k
18010 -mno-fix-24k
18011 Work around the 24K E48 (lost data on stores during refill) errata.
18012 The workarounds are implemented by the assembler rather than by
18013 GCC.
18014
18015 -mfix-r4000
18016 -mno-fix-r4000
18017 Work around certain R4000 CPU errata:
18018
18019 - A double-word or a variable shift may give an incorrect result
18020 if executed immediately after starting an integer division.
18021
18022 - A double-word or a variable shift may give an incorrect result
18023 if executed while an integer multiplication is in progress.
18024
18025 - An integer division may give an incorrect result if started in
18026 a delay slot of a taken branch or a jump.
18027
18028 -mfix-r4400
18029 -mno-fix-r4400
18030 Work around certain R4400 CPU errata:
18031
18032 - A double-word or a variable shift may give an incorrect result
18033 if executed immediately after starting an integer division.
18034
18035 -mfix-r10000
18036 -mno-fix-r10000
18037 Work around certain R10000 errata:
18038
18039 - "ll"/"sc" sequences may not behave atomically on revisions
18040 prior to 3.0. They may deadlock on revisions 2.6 and earlier.
18041
18042 This option can only be used if the target architecture supports
18043 branch-likely instructions. -mfix-r10000 is the default when
18044 -march=r10000 is used; -mno-fix-r10000 is the default otherwise.
18045
18046 -mfix-rm7000
18047 -mno-fix-rm7000
18048 Work around the RM7000 "dmult"/"dmultu" errata. The workarounds
18049 are implemented by the assembler rather than by GCC.
18050
18051 -mfix-vr4120
18052 -mno-fix-vr4120
18053 Work around certain VR4120 errata:
18054
18055 - "dmultu" does not always produce the correct result.
18056
18057 - "div" and "ddiv" do not always produce the correct result if
18058 one of the operands is negative.
18059
18060 The workarounds for the division errata rely on special functions
18061 in libgcc.a. At present, these functions are only provided by the
18062 "mips64vr*-elf" configurations.
18063
18064 Other VR4120 errata require a NOP to be inserted between certain
18065 pairs of instructions. These errata are handled by the assembler,
18066 not by GCC itself.
18067
18068 -mfix-vr4130
18069 Work around the VR4130 "mflo"/"mfhi" errata. The workarounds are
18070 implemented by the assembler rather than by GCC, although GCC
18071 avoids using "mflo" and "mfhi" if the VR4130 "macc", "macchi",
18072 "dmacc" and "dmacchi" instructions are available instead.
18073
18074 -mfix-sb1
18075 -mno-fix-sb1
18076 Work around certain SB-1 CPU core errata. (This flag currently
18077 works around the SB-1 revision 2 "F1" and "F2" floating-point
18078 errata.)
18079
18080 -mr10k-cache-barrier=setting
18081 Specify whether GCC should insert cache barriers to avoid the side
18082 effects of speculation on R10K processors.
18083
18084 In common with many processors, the R10K tries to predict the
18085 outcome of a conditional branch and speculatively executes
18086 instructions from the "taken" branch. It later aborts these
18087 instructions if the predicted outcome is wrong. However, on the
18088 R10K, even aborted instructions can have side effects.
18089
18090 This problem only affects kernel stores and, depending on the
18091 system, kernel loads. As an example, a speculatively-executed
18092 store may load the target memory into cache and mark the cache line
18093 as dirty, even if the store itself is later aborted. If a DMA
18094 operation writes to the same area of memory before the "dirty" line
18095 is flushed, the cached data overwrites the DMA-ed data. See the
18096 R10K processor manual for a full description, including other
18097 potential problems.
18098
18099 One workaround is to insert cache barrier instructions before every
18100 memory access that might be speculatively executed and that might
18101 have side effects even if aborted. -mr10k-cache-barrier=setting
18102 controls GCC's implementation of this workaround. It assumes that
18103 aborted accesses to any byte in the following regions does not have
18104 side effects:
18105
18106 1. the memory occupied by the current function's stack frame;
18107
18108 2. the memory occupied by an incoming stack argument;
18109
18110 3. the memory occupied by an object with a link-time-constant
18111 address.
18112
18113 It is the kernel's responsibility to ensure that speculative
18114 accesses to these regions are indeed safe.
18115
18116 If the input program contains a function declaration such as:
18117
18118 void foo (void);
18119
18120 then the implementation of "foo" must allow "j foo" and "jal foo"
18121 to be executed speculatively. GCC honors this restriction for
18122 functions it compiles itself. It expects non-GCC functions (such
18123 as hand-written assembly code) to do the same.
18124
18125 The option has three forms:
18126
18127 -mr10k-cache-barrier=load-store
18128 Insert a cache barrier before a load or store that might be
18129 speculatively executed and that might have side effects even if
18130 aborted.
18131
18132 -mr10k-cache-barrier=store
18133 Insert a cache barrier before a store that might be
18134 speculatively executed and that might have side effects even if
18135 aborted.
18136
18137 -mr10k-cache-barrier=none
18138 Disable the insertion of cache barriers. This is the default
18139 setting.
18140
18141 -mflush-func=func
18142 -mno-flush-func
18143 Specifies the function to call to flush the I and D caches, or to
18144 not call any such function. If called, the function must take the
18145 same arguments as the common "_flush_func", that is, the address of
18146 the memory range for which the cache is being flushed, the size of
18147 the memory range, and the number 3 (to flush both caches). The
18148 default depends on the target GCC was configured for, but commonly
18149 is either "_flush_func" or "__cpu_flush".
18150
18151 mbranch-cost=num
18152 Set the cost of branches to roughly num "simple" instructions.
18153 This cost is only a heuristic and is not guaranteed to produce
18154 consistent results across releases. A zero cost redundantly
18155 selects the default, which is based on the -mtune setting.
18156
18157 -mbranch-likely
18158 -mno-branch-likely
18159 Enable or disable use of Branch Likely instructions, regardless of
18160 the default for the selected architecture. By default, Branch
18161 Likely instructions may be generated if they are supported by the
18162 selected architecture. An exception is for the MIPS32 and MIPS64
18163 architectures and processors that implement those architectures;
18164 for those, Branch Likely instructions are not be generated by
18165 default because the MIPS32 and MIPS64 architectures specifically
18166 deprecate their use.
18167
18168 -mcompact-branches=never
18169 -mcompact-branches=optimal
18170 -mcompact-branches=always
18171 These options control which form of branches will be generated.
18172 The default is -mcompact-branches=optimal.
18173
18174 The -mcompact-branches=never option ensures that compact branch
18175 instructions will never be generated.
18176
18177 The -mcompact-branches=always option ensures that a compact branch
18178 instruction will be generated if available. If a compact branch
18179 instruction is not available, a delay slot form of the branch will
18180 be used instead.
18181
18182 This option is supported from MIPS Release 6 onwards.
18183
18184 The -mcompact-branches=optimal option will cause a delay slot
18185 branch to be used if one is available in the current ISA and the
18186 delay slot is successfully filled. If the delay slot is not
18187 filled, a compact branch will be chosen if one is available.
18188
18189 -mfp-exceptions
18190 -mno-fp-exceptions
18191 Specifies whether FP exceptions are enabled. This affects how FP
18192 instructions are scheduled for some processors. The default is
18193 that FP exceptions are enabled.
18194
18195 For instance, on the SB-1, if FP exceptions are disabled, and we
18196 are emitting 64-bit code, then we can use both FP pipes.
18197 Otherwise, we can only use one FP pipe.
18198
18199 -mvr4130-align
18200 -mno-vr4130-align
18201 The VR4130 pipeline is two-way superscalar, but can only issue two
18202 instructions together if the first one is 8-byte aligned. When
18203 this option is enabled, GCC aligns pairs of instructions that it
18204 thinks should execute in parallel.
18205
18206 This option only has an effect when optimizing for the VR4130. It
18207 normally makes code faster, but at the expense of making it bigger.
18208 It is enabled by default at optimization level -O3.
18209
18210 -msynci
18211 -mno-synci
18212 Enable (disable) generation of "synci" instructions on
18213 architectures that support it. The "synci" instructions (if
18214 enabled) are generated when "__builtin___clear_cache" is compiled.
18215
18216 This option defaults to -mno-synci, but the default can be
18217 overridden by configuring GCC with --with-synci.
18218
18219 When compiling code for single processor systems, it is generally
18220 safe to use "synci". However, on many multi-core (SMP) systems, it
18221 does not invalidate the instruction caches on all cores and may
18222 lead to undefined behavior.
18223
18224 -mrelax-pic-calls
18225 -mno-relax-pic-calls
18226 Try to turn PIC calls that are normally dispatched via register $25
18227 into direct calls. This is only possible if the linker can resolve
18228 the destination at link time and if the destination is within range
18229 for a direct call.
18230
18231 -mrelax-pic-calls is the default if GCC was configured to use an
18232 assembler and a linker that support the ".reloc" assembly directive
18233 and -mexplicit-relocs is in effect. With -mno-explicit-relocs,
18234 this optimization can be performed by the assembler and the linker
18235 alone without help from the compiler.
18236
18237 -mmcount-ra-address
18238 -mno-mcount-ra-address
18239 Emit (do not emit) code that allows "_mcount" to modify the calling
18240 function's return address. When enabled, this option extends the
18241 usual "_mcount" interface with a new ra-address parameter, which
18242 has type "intptr_t *" and is passed in register $12. "_mcount" can
18243 then modify the return address by doing both of the following:
18244
18245 * Returning the new address in register $31.
18246
18247 * Storing the new address in "*ra-address", if ra-address is
18248 nonnull.
18249
18250 The default is -mno-mcount-ra-address.
18251
18252 -mframe-header-opt
18253 -mno-frame-header-opt
18254 Enable (disable) frame header optimization in the o32 ABI. When
18255 using the o32 ABI, calling functions will allocate 16 bytes on the
18256 stack for the called function to write out register arguments.
18257 When enabled, this optimization will suppress the allocation of the
18258 frame header if it can be determined that it is unused.
18259
18260 This optimization is off by default at all optimization levels.
18261
18262 -mlxc1-sxc1
18263 -mno-lxc1-sxc1
18264 When applicable, enable (disable) the generation of "lwxc1",
18265 "swxc1", "ldxc1", "sdxc1" instructions. Enabled by default.
18266
18267 -mmadd4
18268 -mno-madd4
18269 When applicable, enable (disable) the generation of 4-operand
18270 "madd.s", "madd.d" and related instructions. Enabled by default.
18271
18272 MMIX Options
18273
18274 These options are defined for the MMIX:
18275
18276 -mlibfuncs
18277 -mno-libfuncs
18278 Specify that intrinsic library functions are being compiled,
18279 passing all values in registers, no matter the size.
18280
18281 -mepsilon
18282 -mno-epsilon
18283 Generate floating-point comparison instructions that compare with
18284 respect to the "rE" epsilon register.
18285
18286 -mabi=mmixware
18287 -mabi=gnu
18288 Generate code that passes function parameters and return values
18289 that (in the called function) are seen as registers $0 and up, as
18290 opposed to the GNU ABI which uses global registers $231 and up.
18291
18292 -mzero-extend
18293 -mno-zero-extend
18294 When reading data from memory in sizes shorter than 64 bits, use
18295 (do not use) zero-extending load instructions by default, rather
18296 than sign-extending ones.
18297
18298 -mknuthdiv
18299 -mno-knuthdiv
18300 Make the result of a division yielding a remainder have the same
18301 sign as the divisor. With the default, -mno-knuthdiv, the sign of
18302 the remainder follows the sign of the dividend. Both methods are
18303 arithmetically valid, the latter being almost exclusively used.
18304
18305 -mtoplevel-symbols
18306 -mno-toplevel-symbols
18307 Prepend (do not prepend) a : to all global symbols, so the assembly
18308 code can be used with the "PREFIX" assembly directive.
18309
18310 -melf
18311 Generate an executable in the ELF format, rather than the default
18312 mmo format used by the mmix simulator.
18313
18314 -mbranch-predict
18315 -mno-branch-predict
18316 Use (do not use) the probable-branch instructions, when static
18317 branch prediction indicates a probable branch.
18318
18319 -mbase-addresses
18320 -mno-base-addresses
18321 Generate (do not generate) code that uses base addresses. Using a
18322 base address automatically generates a request (handled by the
18323 assembler and the linker) for a constant to be set up in a global
18324 register. The register is used for one or more base address
18325 requests within the range 0 to 255 from the value held in the
18326 register. The generally leads to short and fast code, but the
18327 number of different data items that can be addressed is limited.
18328 This means that a program that uses lots of static data may require
18329 -mno-base-addresses.
18330
18331 -msingle-exit
18332 -mno-single-exit
18333 Force (do not force) generated code to have a single exit point in
18334 each function.
18335
18336 MN10300 Options
18337
18338 These -m options are defined for Matsushita MN10300 architectures:
18339
18340 -mmult-bug
18341 Generate code to avoid bugs in the multiply instructions for the
18342 MN10300 processors. This is the default.
18343
18344 -mno-mult-bug
18345 Do not generate code to avoid bugs in the multiply instructions for
18346 the MN10300 processors.
18347
18348 -mam33
18349 Generate code using features specific to the AM33 processor.
18350
18351 -mno-am33
18352 Do not generate code using features specific to the AM33 processor.
18353 This is the default.
18354
18355 -mam33-2
18356 Generate code using features specific to the AM33/2.0 processor.
18357
18358 -mam34
18359 Generate code using features specific to the AM34 processor.
18360
18361 -mtune=cpu-type
18362 Use the timing characteristics of the indicated CPU type when
18363 scheduling instructions. This does not change the targeted
18364 processor type. The CPU type must be one of mn10300, am33, am33-2
18365 or am34.
18366
18367 -mreturn-pointer-on-d0
18368 When generating a function that returns a pointer, return the
18369 pointer in both "a0" and "d0". Otherwise, the pointer is returned
18370 only in "a0", and attempts to call such functions without a
18371 prototype result in errors. Note that this option is on by
18372 default; use -mno-return-pointer-on-d0 to disable it.
18373
18374 -mno-crt0
18375 Do not link in the C run-time initialization object file.
18376
18377 -mrelax
18378 Indicate to the linker that it should perform a relaxation
18379 optimization pass to shorten branches, calls and absolute memory
18380 addresses. This option only has an effect when used on the command
18381 line for the final link step.
18382
18383 This option makes symbolic debugging impossible.
18384
18385 -mliw
18386 Allow the compiler to generate Long Instruction Word instructions
18387 if the target is the AM33 or later. This is the default. This
18388 option defines the preprocessor macro "__LIW__".
18389
18390 -mnoliw
18391 Do not allow the compiler to generate Long Instruction Word
18392 instructions. This option defines the preprocessor macro
18393 "__NO_LIW__".
18394
18395 -msetlb
18396 Allow the compiler to generate the SETLB and Lcc instructions if
18397 the target is the AM33 or later. This is the default. This option
18398 defines the preprocessor macro "__SETLB__".
18399
18400 -mnosetlb
18401 Do not allow the compiler to generate SETLB or Lcc instructions.
18402 This option defines the preprocessor macro "__NO_SETLB__".
18403
18404 Moxie Options
18405
18406 -meb
18407 Generate big-endian code. This is the default for moxie-*-*
18408 configurations.
18409
18410 -mel
18411 Generate little-endian code.
18412
18413 -mmul.x
18414 Generate mul.x and umul.x instructions. This is the default for
18415 moxiebox-*-* configurations.
18416
18417 -mno-crt0
18418 Do not link in the C run-time initialization object file.
18419
18420 MSP430 Options
18421
18422 These options are defined for the MSP430:
18423
18424 -masm-hex
18425 Force assembly output to always use hex constants. Normally such
18426 constants are signed decimals, but this option is available for
18427 testsuite and/or aesthetic purposes.
18428
18429 -mmcu=
18430 Select the MCU to target. This is used to create a C preprocessor
18431 symbol based upon the MCU name, converted to upper case and pre-
18432 and post-fixed with __. This in turn is used by the msp430.h
18433 header file to select an MCU-specific supplementary header file.
18434
18435 The option also sets the ISA to use. If the MCU name is one that
18436 is known to only support the 430 ISA then that is selected,
18437 otherwise the 430X ISA is selected. A generic MCU name of msp430
18438 can also be used to select the 430 ISA. Similarly the generic
18439 msp430x MCU name selects the 430X ISA.
18440
18441 In addition an MCU-specific linker script is added to the linker
18442 command line. The script's name is the name of the MCU with .ld
18443 appended. Thus specifying -mmcu=xxx on the gcc command line
18444 defines the C preprocessor symbol "__XXX__" and cause the linker to
18445 search for a script called xxx.ld.
18446
18447 This option is also passed on to the assembler.
18448
18449 -mwarn-mcu
18450 -mno-warn-mcu
18451 This option enables or disables warnings about conflicts between
18452 the MCU name specified by the -mmcu option and the ISA set by the
18453 -mcpu option and/or the hardware multiply support set by the
18454 -mhwmult option. It also toggles warnings about unrecognized MCU
18455 names. This option is on by default.
18456
18457 -mcpu=
18458 Specifies the ISA to use. Accepted values are msp430, msp430x and
18459 msp430xv2. This option is deprecated. The -mmcu= option should be
18460 used to select the ISA.
18461
18462 -msim
18463 Link to the simulator runtime libraries and linker script.
18464 Overrides any scripts that would be selected by the -mmcu= option.
18465
18466 -mlarge
18467 Use large-model addressing (20-bit pointers, 32-bit "size_t").
18468
18469 -msmall
18470 Use small-model addressing (16-bit pointers, 16-bit "size_t").
18471
18472 -mrelax
18473 This option is passed to the assembler and linker, and allows the
18474 linker to perform certain optimizations that cannot be done until
18475 the final link.
18476
18477 mhwmult=
18478 Describes the type of hardware multiply supported by the target.
18479 Accepted values are none for no hardware multiply, 16bit for the
18480 original 16-bit-only multiply supported by early MCUs. 32bit for
18481 the 16/32-bit multiply supported by later MCUs and f5series for the
18482 16/32-bit multiply supported by F5-series MCUs. A value of auto
18483 can also be given. This tells GCC to deduce the hardware multiply
18484 support based upon the MCU name provided by the -mmcu option. If
18485 no -mmcu option is specified or if the MCU name is not recognized
18486 then no hardware multiply support is assumed. "auto" is the
18487 default setting.
18488
18489 Hardware multiplies are normally performed by calling a library
18490 routine. This saves space in the generated code. When compiling
18491 at -O3 or higher however the hardware multiplier is invoked inline.
18492 This makes for bigger, but faster code.
18493
18494 The hardware multiply routines disable interrupts whilst running
18495 and restore the previous interrupt state when they finish. This
18496 makes them safe to use inside interrupt handlers as well as in
18497 normal code.
18498
18499 -minrt
18500 Enable the use of a minimum runtime environment - no static
18501 initializers or constructors. This is intended for memory-
18502 constrained devices. The compiler includes special symbols in some
18503 objects that tell the linker and runtime which code fragments are
18504 required.
18505
18506 -mcode-region=
18507 -mdata-region=
18508 These options tell the compiler where to place functions and data
18509 that do not have one of the "lower", "upper", "either" or "section"
18510 attributes. Possible values are "lower", "upper", "either" or
18511 "any". The first three behave like the corresponding attribute.
18512 The fourth possible value - "any" - is the default. It leaves
18513 placement entirely up to the linker script and how it assigns the
18514 standard sections (".text", ".data", etc) to the memory regions.
18515
18516 -msilicon-errata=
18517 This option passes on a request to assembler to enable the fixes
18518 for the named silicon errata.
18519
18520 -msilicon-errata-warn=
18521 This option passes on a request to the assembler to enable warning
18522 messages when a silicon errata might need to be applied.
18523
18524 NDS32 Options
18525
18526 These options are defined for NDS32 implementations:
18527
18528 -mbig-endian
18529 Generate code in big-endian mode.
18530
18531 -mlittle-endian
18532 Generate code in little-endian mode.
18533
18534 -mreduced-regs
18535 Use reduced-set registers for register allocation.
18536
18537 -mfull-regs
18538 Use full-set registers for register allocation.
18539
18540 -mcmov
18541 Generate conditional move instructions.
18542
18543 -mno-cmov
18544 Do not generate conditional move instructions.
18545
18546 -mext-perf
18547 Generate performance extension instructions.
18548
18549 -mno-ext-perf
18550 Do not generate performance extension instructions.
18551
18552 -mext-perf2
18553 Generate performance extension 2 instructions.
18554
18555 -mno-ext-perf2
18556 Do not generate performance extension 2 instructions.
18557
18558 -mext-string
18559 Generate string extension instructions.
18560
18561 -mno-ext-string
18562 Do not generate string extension instructions.
18563
18564 -mv3push
18565 Generate v3 push25/pop25 instructions.
18566
18567 -mno-v3push
18568 Do not generate v3 push25/pop25 instructions.
18569
18570 -m16-bit
18571 Generate 16-bit instructions.
18572
18573 -mno-16-bit
18574 Do not generate 16-bit instructions.
18575
18576 -misr-vector-size=num
18577 Specify the size of each interrupt vector, which must be 4 or 16.
18578
18579 -mcache-block-size=num
18580 Specify the size of each cache block, which must be a power of 2
18581 between 4 and 512.
18582
18583 -march=arch
18584 Specify the name of the target architecture.
18585
18586 -mcmodel=code-model
18587 Set the code model to one of
18588
18589 small
18590 All the data and read-only data segments must be within 512KB
18591 addressing space. The text segment must be within 16MB
18592 addressing space.
18593
18594 medium
18595 The data segment must be within 512KB while the read-only data
18596 segment can be within 4GB addressing space. The text segment
18597 should be still within 16MB addressing space.
18598
18599 large
18600 All the text and data segments can be within 4GB addressing
18601 space.
18602
18603 -mctor-dtor
18604 Enable constructor/destructor feature.
18605
18606 -mrelax
18607 Guide linker to relax instructions.
18608
18609 Nios II Options
18610
18611 These are the options defined for the Altera Nios II processor.
18612
18613 -G num
18614 Put global and static objects less than or equal to num bytes into
18615 the small data or BSS sections instead of the normal data or BSS
18616 sections. The default value of num is 8.
18617
18618 -mgpopt=option
18619 -mgpopt
18620 -mno-gpopt
18621 Generate (do not generate) GP-relative accesses. The following
18622 option names are recognized:
18623
18624 none
18625 Do not generate GP-relative accesses.
18626
18627 local
18628 Generate GP-relative accesses for small data objects that are
18629 not external, weak, or uninitialized common symbols. Also use
18630 GP-relative addressing for objects that have been explicitly
18631 placed in a small data section via a "section" attribute.
18632
18633 global
18634 As for local, but also generate GP-relative accesses for small
18635 data objects that are external, weak, or common. If you use
18636 this option, you must ensure that all parts of your program
18637 (including libraries) are compiled with the same -G setting.
18638
18639 data
18640 Generate GP-relative accesses for all data objects in the
18641 program. If you use this option, the entire data and BSS
18642 segments of your program must fit in 64K of memory and you must
18643 use an appropriate linker script to allocate them within the
18644 addressable range of the global pointer.
18645
18646 all Generate GP-relative addresses for function pointers as well as
18647 data pointers. If you use this option, the entire text, data,
18648 and BSS segments of your program must fit in 64K of memory and
18649 you must use an appropriate linker script to allocate them
18650 within the addressable range of the global pointer.
18651
18652 -mgpopt is equivalent to -mgpopt=local, and -mno-gpopt is
18653 equivalent to -mgpopt=none.
18654
18655 The default is -mgpopt except when -fpic or -fPIC is specified to
18656 generate position-independent code. Note that the Nios II ABI does
18657 not permit GP-relative accesses from shared libraries.
18658
18659 You may need to specify -mno-gpopt explicitly when building
18660 programs that include large amounts of small data, including large
18661 GOT data sections. In this case, the 16-bit offset for GP-relative
18662 addressing may not be large enough to allow access to the entire
18663 small data section.
18664
18665 -mgprel-sec=regexp
18666 This option specifies additional section names that can be accessed
18667 via GP-relative addressing. It is most useful in conjunction with
18668 "section" attributes on variable declarations and a custom linker
18669 script. The regexp is a POSIX Extended Regular Expression.
18670
18671 This option does not affect the behavior of the -G option, and the
18672 specified sections are in addition to the standard ".sdata" and
18673 ".sbss" small-data sections that are recognized by -mgpopt.
18674
18675 -mr0rel-sec=regexp
18676 This option specifies names of sections that can be accessed via a
18677 16-bit offset from "r0"; that is, in the low 32K or high 32K of the
18678 32-bit address space. It is most useful in conjunction with
18679 "section" attributes on variable declarations and a custom linker
18680 script. The regexp is a POSIX Extended Regular Expression.
18681
18682 In contrast to the use of GP-relative addressing for small data,
18683 zero-based addressing is never generated by default and there are
18684 no conventional section names used in standard linker scripts for
18685 sections in the low or high areas of memory.
18686
18687 -mel
18688 -meb
18689 Generate little-endian (default) or big-endian (experimental) code,
18690 respectively.
18691
18692 -march=arch
18693 This specifies the name of the target Nios II architecture. GCC
18694 uses this name to determine what kind of instructions it can emit
18695 when generating assembly code. Permissible names are: r1, r2.
18696
18697 The preprocessor macro "__nios2_arch__" is available to programs,
18698 with value 1 or 2, indicating the targeted ISA level.
18699
18700 -mbypass-cache
18701 -mno-bypass-cache
18702 Force all load and store instructions to always bypass cache by
18703 using I/O variants of the instructions. The default is not to
18704 bypass the cache.
18705
18706 -mno-cache-volatile
18707 -mcache-volatile
18708 Volatile memory access bypass the cache using the I/O variants of
18709 the load and store instructions. The default is not to bypass the
18710 cache.
18711
18712 -mno-fast-sw-div
18713 -mfast-sw-div
18714 Do not use table-based fast divide for small numbers. The default
18715 is to use the fast divide at -O3 and above.
18716
18717 -mno-hw-mul
18718 -mhw-mul
18719 -mno-hw-mulx
18720 -mhw-mulx
18721 -mno-hw-div
18722 -mhw-div
18723 Enable or disable emitting "mul", "mulx" and "div" family of
18724 instructions by the compiler. The default is to emit "mul" and not
18725 emit "div" and "mulx".
18726
18727 -mbmx
18728 -mno-bmx
18729 -mcdx
18730 -mno-cdx
18731 Enable or disable generation of Nios II R2 BMX (bit manipulation)
18732 and CDX (code density) instructions. Enabling these instructions
18733 also requires -march=r2. Since these instructions are optional
18734 extensions to the R2 architecture, the default is not to emit them.
18735
18736 -mcustom-insn=N
18737 -mno-custom-insn
18738 Each -mcustom-insn=N option enables use of a custom instruction
18739 with encoding N when generating code that uses insn. For example,
18740 -mcustom-fadds=253 generates custom instruction 253 for single-
18741 precision floating-point add operations instead of the default
18742 behavior of using a library call.
18743
18744 The following values of insn are supported. Except as otherwise
18745 noted, floating-point operations are expected to be implemented
18746 with normal IEEE 754 semantics and correspond directly to the C
18747 operators or the equivalent GCC built-in functions.
18748
18749 Single-precision floating point:
18750
18751 fadds, fsubs, fdivs, fmuls
18752 Binary arithmetic operations.
18753
18754 fnegs
18755 Unary negation.
18756
18757 fabss
18758 Unary absolute value.
18759
18760 fcmpeqs, fcmpges, fcmpgts, fcmples, fcmplts, fcmpnes
18761 Comparison operations.
18762
18763 fmins, fmaxs
18764 Floating-point minimum and maximum. These instructions are
18765 only generated if -ffinite-math-only is specified.
18766
18767 fsqrts
18768 Unary square root operation.
18769
18770 fcoss, fsins, ftans, fatans, fexps, flogs
18771 Floating-point trigonometric and exponential functions. These
18772 instructions are only generated if -funsafe-math-optimizations
18773 is also specified.
18774
18775 Double-precision floating point:
18776
18777 faddd, fsubd, fdivd, fmuld
18778 Binary arithmetic operations.
18779
18780 fnegd
18781 Unary negation.
18782
18783 fabsd
18784 Unary absolute value.
18785
18786 fcmpeqd, fcmpged, fcmpgtd, fcmpled, fcmpltd, fcmpned
18787 Comparison operations.
18788
18789 fmind, fmaxd
18790 Double-precision minimum and maximum. These instructions are
18791 only generated if -ffinite-math-only is specified.
18792
18793 fsqrtd
18794 Unary square root operation.
18795
18796 fcosd, fsind, ftand, fatand, fexpd, flogd
18797 Double-precision trigonometric and exponential functions.
18798 These instructions are only generated if
18799 -funsafe-math-optimizations is also specified.
18800
18801 Conversions:
18802
18803 fextsd
18804 Conversion from single precision to double precision.
18805
18806 ftruncds
18807 Conversion from double precision to single precision.
18808
18809 fixsi, fixsu, fixdi, fixdu
18810 Conversion from floating point to signed or unsigned integer
18811 types, with truncation towards zero.
18812
18813 round
18814 Conversion from single-precision floating point to signed
18815 integer, rounding to the nearest integer and ties away from
18816 zero. This corresponds to the "__builtin_lroundf" function
18817 when -fno-math-errno is used.
18818
18819 floatis, floatus, floatid, floatud
18820 Conversion from signed or unsigned integer types to floating-
18821 point types.
18822
18823 In addition, all of the following transfer instructions for
18824 internal registers X and Y must be provided to use any of the
18825 double-precision floating-point instructions. Custom instructions
18826 taking two double-precision source operands expect the first
18827 operand in the 64-bit register X. The other operand (or only
18828 operand of a unary operation) is given to the custom arithmetic
18829 instruction with the least significant half in source register src1
18830 and the most significant half in src2. A custom instruction that
18831 returns a double-precision result returns the most significant 32
18832 bits in the destination register and the other half in 32-bit
18833 register Y. GCC automatically generates the necessary code
18834 sequences to write register X and/or read register Y when double-
18835 precision floating-point instructions are used.
18836
18837 fwrx
18838 Write src1 into the least significant half of X and src2 into
18839 the most significant half of X.
18840
18841 fwry
18842 Write src1 into Y.
18843
18844 frdxhi, frdxlo
18845 Read the most or least (respectively) significant half of X and
18846 store it in dest.
18847
18848 frdy
18849 Read the value of Y and store it into dest.
18850
18851 Note that you can gain more local control over generation of Nios
18852 II custom instructions by using the "target("custom-insn=N")" and
18853 "target("no-custom-insn")" function attributes or pragmas.
18854
18855 -mcustom-fpu-cfg=name
18856 This option enables a predefined, named set of custom instruction
18857 encodings (see -mcustom-insn above). Currently, the following sets
18858 are defined:
18859
18860 -mcustom-fpu-cfg=60-1 is equivalent to: -mcustom-fmuls=252
18861 -mcustom-fadds=253 -mcustom-fsubs=254 -fsingle-precision-constant
18862
18863 -mcustom-fpu-cfg=60-2 is equivalent to: -mcustom-fmuls=252
18864 -mcustom-fadds=253 -mcustom-fsubs=254 -mcustom-fdivs=255
18865 -fsingle-precision-constant
18866
18867 -mcustom-fpu-cfg=72-3 is equivalent to: -mcustom-floatus=243
18868 -mcustom-fixsi=244 -mcustom-floatis=245 -mcustom-fcmpgts=246
18869 -mcustom-fcmples=249 -mcustom-fcmpeqs=250 -mcustom-fcmpnes=251
18870 -mcustom-fmuls=252 -mcustom-fadds=253 -mcustom-fsubs=254
18871 -mcustom-fdivs=255 -fsingle-precision-constant
18872
18873 Custom instruction assignments given by individual -mcustom-insn=
18874 options override those given by -mcustom-fpu-cfg=, regardless of
18875 the order of the options on the command line.
18876
18877 Note that you can gain more local control over selection of a FPU
18878 configuration by using the "target("custom-fpu-cfg=name")" function
18879 attribute or pragma.
18880
18881 These additional -m options are available for the Altera Nios II ELF
18882 (bare-metal) target:
18883
18884 -mhal
18885 Link with HAL BSP. This suppresses linking with the GCC-provided C
18886 runtime startup and termination code, and is typically used in
18887 conjunction with -msys-crt0= to specify the location of the
18888 alternate startup code provided by the HAL BSP.
18889
18890 -msmallc
18891 Link with a limited version of the C library, -lsmallc, rather than
18892 Newlib.
18893
18894 -msys-crt0=startfile
18895 startfile is the file name of the startfile (crt0) to use when
18896 linking. This option is only useful in conjunction with -mhal.
18897
18898 -msys-lib=systemlib
18899 systemlib is the library name of the library that provides low-
18900 level system calls required by the C library, e.g. "read" and
18901 "write". This option is typically used to link with a library
18902 provided by a HAL BSP.
18903
18904 Nvidia PTX Options
18905
18906 These options are defined for Nvidia PTX:
18907
18908 -m32
18909 -m64
18910 Generate code for 32-bit or 64-bit ABI.
18911
18912 -mmainkernel
18913 Link in code for a __main kernel. This is for stand-alone instead
18914 of offloading execution.
18915
18916 -moptimize
18917 Apply partitioned execution optimizations. This is the default
18918 when any level of optimization is selected.
18919
18920 -msoft-stack
18921 Generate code that does not use ".local" memory directly for stack
18922 storage. Instead, a per-warp stack pointer is maintained
18923 explicitly. This enables variable-length stack allocation (with
18924 variable-length arrays or "alloca"), and when global memory is used
18925 for underlying storage, makes it possible to access automatic
18926 variables from other threads, or with atomic instructions. This
18927 code generation variant is used for OpenMP offloading, but the
18928 option is exposed on its own for the purpose of testing the
18929 compiler; to generate code suitable for linking into programs using
18930 OpenMP offloading, use option -mgomp.
18931
18932 -muniform-simt
18933 Switch to code generation variant that allows to execute all
18934 threads in each warp, while maintaining memory state and side
18935 effects as if only one thread in each warp was active outside of
18936 OpenMP SIMD regions. All atomic operations and calls to runtime
18937 (malloc, free, vprintf) are conditionally executed (iff current
18938 lane index equals the master lane index), and the register being
18939 assigned is copied via a shuffle instruction from the master lane.
18940 Outside of SIMD regions lane 0 is the master; inside, each thread
18941 sees itself as the master. Shared memory array "int __nvptx_uni[]"
18942 stores all-zeros or all-ones bitmasks for each warp, indicating
18943 current mode (0 outside of SIMD regions). Each thread can bitwise-
18944 and the bitmask at position "tid.y" with current lane index to
18945 compute the master lane index.
18946
18947 -mgomp
18948 Generate code for use in OpenMP offloading: enables -msoft-stack
18949 and -muniform-simt options, and selects corresponding multilib
18950 variant.
18951
18952 PDP-11 Options
18953
18954 These options are defined for the PDP-11:
18955
18956 -mfpu
18957 Use hardware FPP floating point. This is the default. (FIS
18958 floating point on the PDP-11/40 is not supported.)
18959
18960 -msoft-float
18961 Do not use hardware floating point.
18962
18963 -mac0
18964 Return floating-point results in ac0 (fr0 in Unix assembler
18965 syntax).
18966
18967 -mno-ac0
18968 Return floating-point results in memory. This is the default.
18969
18970 -m40
18971 Generate code for a PDP-11/40.
18972
18973 -m45
18974 Generate code for a PDP-11/45. This is the default.
18975
18976 -m10
18977 Generate code for a PDP-11/10.
18978
18979 -mbcopy-builtin
18980 Use inline "movmemhi" patterns for copying memory. This is the
18981 default.
18982
18983 -mbcopy
18984 Do not use inline "movmemhi" patterns for copying memory.
18985
18986 -mint16
18987 -mno-int32
18988 Use 16-bit "int". This is the default.
18989
18990 -mint32
18991 -mno-int16
18992 Use 32-bit "int".
18993
18994 -mfloat64
18995 -mno-float32
18996 Use 64-bit "float". This is the default.
18997
18998 -mfloat32
18999 -mno-float64
19000 Use 32-bit "float".
19001
19002 -mabshi
19003 Use "abshi2" pattern. This is the default.
19004
19005 -mno-abshi
19006 Do not use "abshi2" pattern.
19007
19008 -mbranch-expensive
19009 Pretend that branches are expensive. This is for experimenting
19010 with code generation only.
19011
19012 -mbranch-cheap
19013 Do not pretend that branches are expensive. This is the default.
19014
19015 -munix-asm
19016 Use Unix assembler syntax. This is the default when configured for
19017 pdp11-*-bsd.
19018
19019 -mdec-asm
19020 Use DEC assembler syntax. This is the default when configured for
19021 any PDP-11 target other than pdp11-*-bsd.
19022
19023 picoChip Options
19024
19025 These -m options are defined for picoChip implementations:
19026
19027 -mae=ae_type
19028 Set the instruction set, register set, and instruction scheduling
19029 parameters for array element type ae_type. Supported values for
19030 ae_type are ANY, MUL, and MAC.
19031
19032 -mae=ANY selects a completely generic AE type. Code generated with
19033 this option runs on any of the other AE types. The code is not as
19034 efficient as it would be if compiled for a specific AE type, and
19035 some types of operation (e.g., multiplication) do not work properly
19036 on all types of AE.
19037
19038 -mae=MUL selects a MUL AE type. This is the most useful AE type
19039 for compiled code, and is the default.
19040
19041 -mae=MAC selects a DSP-style MAC AE. Code compiled with this
19042 option may suffer from poor performance of byte (char)
19043 manipulation, since the DSP AE does not provide hardware support
19044 for byte load/stores.
19045
19046 -msymbol-as-address
19047 Enable the compiler to directly use a symbol name as an address in
19048 a load/store instruction, without first loading it into a register.
19049 Typically, the use of this option generates larger programs, which
19050 run faster than when the option isn't used. However, the results
19051 vary from program to program, so it is left as a user option,
19052 rather than being permanently enabled.
19053
19054 -mno-inefficient-warnings
19055 Disables warnings about the generation of inefficient code. These
19056 warnings can be generated, for example, when compiling code that
19057 performs byte-level memory operations on the MAC AE type. The MAC
19058 AE has no hardware support for byte-level memory operations, so all
19059 byte load/stores must be synthesized from word load/store
19060 operations. This is inefficient and a warning is generated to
19061 indicate that you should rewrite the code to avoid byte operations,
19062 or to target an AE type that has the necessary hardware support.
19063 This option disables these warnings.
19064
19065 PowerPC Options
19066
19067 These are listed under
19068
19069 PowerPC SPE Options
19070
19071 These -m options are defined for PowerPC SPE:
19072
19073 -mmfcrf
19074 -mno-mfcrf
19075 -mpopcntb
19076 -mno-popcntb
19077 You use these options to specify which instructions are available
19078 on the processor you are using. The default value of these options
19079 is determined when configuring GCC. Specifying the -mcpu=cpu_type
19080 overrides the specification of these options. We recommend you use
19081 the -mcpu=cpu_type option rather than the options listed above.
19082
19083 The -mmfcrf option allows GCC to generate the move from condition
19084 register field instruction implemented on the POWER4 processor and
19085 other processors that support the PowerPC V2.01 architecture. The
19086 -mpopcntb option allows GCC to generate the popcount and double-
19087 precision FP reciprocal estimate instruction implemented on the
19088 POWER5 processor and other processors that support the PowerPC
19089 V2.02 architecture.
19090
19091 -mcpu=cpu_type
19092 Set architecture type, register usage, and instruction scheduling
19093 parameters for machine type cpu_type. Supported values for
19094 cpu_type are 8540, 8548, and native.
19095
19096 -mcpu=powerpc specifies pure 32-bit PowerPC (either endian), with
19097 an appropriate, generic processor model assumed for scheduling
19098 purposes.
19099
19100 Specifying native as cpu type detects and selects the architecture
19101 option that corresponds to the host processor of the system
19102 performing the compilation. -mcpu=native has no effect if GCC does
19103 not recognize the processor.
19104
19105 The other options specify a specific processor. Code generated
19106 under those options runs best on that processor, and may not run at
19107 all on others.
19108
19109 The -mcpu options automatically enable or disable the following
19110 options:
19111
19112 -mhard-float -mmfcrf -mmultiple -mpopcntb -mpopcntd
19113 -msingle-float -mdouble-float -mfloat128
19114
19115 The particular options set for any particular CPU varies between
19116 compiler versions, depending on what setting seems to produce
19117 optimal code for that CPU; it doesn't necessarily reflect the
19118 actual hardware's capabilities. If you wish to set an individual
19119 option to a particular value, you may specify it after the -mcpu
19120 option, like -mcpu=8548.
19121
19122 -mtune=cpu_type
19123 Set the instruction scheduling parameters for machine type
19124 cpu_type, but do not set the architecture type or register usage,
19125 as -mcpu=cpu_type does. The same values for cpu_type are used for
19126 -mtune as for -mcpu. If both are specified, the code generated
19127 uses the architecture and registers set by -mcpu, but the
19128 scheduling parameters set by -mtune.
19129
19130 -msecure-plt
19131 Generate code that allows ld and ld.so to build executables and
19132 shared libraries with non-executable ".plt" and ".got" sections.
19133 This is a PowerPC 32-bit SYSV ABI option.
19134
19135 -mbss-plt
19136 Generate code that uses a BSS ".plt" section that ld.so fills in,
19137 and requires ".plt" and ".got" sections that are both writable and
19138 executable. This is a PowerPC 32-bit SYSV ABI option.
19139
19140 -misel
19141 -mno-isel
19142 This switch enables or disables the generation of ISEL
19143 instructions.
19144
19145 -misel=yes/no
19146 This switch has been deprecated. Use -misel and -mno-isel instead.
19147
19148 -mspe
19149 -mno-spe
19150 This switch enables or disables the generation of SPE simd
19151 instructions.
19152
19153 -mspe=yes/no
19154 This option has been deprecated. Use -mspe and -mno-spe instead.
19155
19156 -mfloat128
19157 -mno-float128
19158 Enable/disable the __float128 keyword for IEEE 128-bit floating
19159 point and use either software emulation for IEEE 128-bit floating
19160 point or hardware instructions.
19161
19162 -mfloat-gprs=yes/single/double/no
19163 -mfloat-gprs
19164 This switch enables or disables the generation of floating-point
19165 operations on the general-purpose registers for architectures that
19166 support it.
19167
19168 The argument yes or single enables the use of single-precision
19169 floating-point operations.
19170
19171 The argument double enables the use of single and double-precision
19172 floating-point operations.
19173
19174 The argument no disables floating-point operations on the general-
19175 purpose registers.
19176
19177 This option is currently only available on the MPC854x.
19178
19179 -mfull-toc
19180 -mno-fp-in-toc
19181 -mno-sum-in-toc
19182 -mminimal-toc
19183 Modify generation of the TOC (Table Of Contents), which is created
19184 for every executable file. The -mfull-toc option is selected by
19185 default. In that case, GCC allocates at least one TOC entry for
19186 each unique non-automatic variable reference in your program. GCC
19187 also places floating-point constants in the TOC. However, only
19188 16,384 entries are available in the TOC.
19189
19190 If you receive a linker error message that saying you have
19191 overflowed the available TOC space, you can reduce the amount of
19192 TOC space used with the -mno-fp-in-toc and -mno-sum-in-toc options.
19193 -mno-fp-in-toc prevents GCC from putting floating-point constants
19194 in the TOC and -mno-sum-in-toc forces GCC to generate code to
19195 calculate the sum of an address and a constant at run time instead
19196 of putting that sum into the TOC. You may specify one or both of
19197 these options. Each causes GCC to produce very slightly slower and
19198 larger code at the expense of conserving TOC space.
19199
19200 If you still run out of space in the TOC even when you specify both
19201 of these options, specify -mminimal-toc instead. This option
19202 causes GCC to make only one TOC entry for every file. When you
19203 specify this option, GCC produces code that is slower and larger
19204 but which uses extremely little TOC space. You may wish to use
19205 this option only on files that contain less frequently-executed
19206 code.
19207
19208 -maix32
19209 Disables the 64-bit ABI. GCC defaults to -maix32.
19210
19211 -mxl-compat
19212 -mno-xl-compat
19213 Produce code that conforms more closely to IBM XL compiler
19214 semantics when using AIX-compatible ABI. Pass floating-point
19215 arguments to prototyped functions beyond the register save area
19216 (RSA) on the stack in addition to argument FPRs. Do not assume
19217 that most significant double in 128-bit long double value is
19218 properly rounded when comparing values and converting to double.
19219 Use XL symbol names for long double support routines.
19220
19221 The AIX calling convention was extended but not initially
19222 documented to handle an obscure K&R C case of calling a function
19223 that takes the address of its arguments with fewer arguments than
19224 declared. IBM XL compilers access floating-point arguments that do
19225 not fit in the RSA from the stack when a subroutine is compiled
19226 without optimization. Because always storing floating-point
19227 arguments on the stack is inefficient and rarely needed, this
19228 option is not enabled by default and only is necessary when calling
19229 subroutines compiled by IBM XL compilers without optimization.
19230
19231 -malign-natural
19232 -malign-power
19233 On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
19234 -malign-natural overrides the ABI-defined alignment of larger
19235 types, such as floating-point doubles, on their natural size-based
19236 boundary. The option -malign-power instructs GCC to follow the
19237 ABI-specified alignment rules. GCC defaults to the standard
19238 alignment defined in the ABI.
19239
19240 On 64-bit Darwin, natural alignment is the default, and
19241 -malign-power is not supported.
19242
19243 -msoft-float
19244 -mhard-float
19245 Generate code that does not use (uses) the floating-point register
19246 set. Software floating-point emulation is provided if you use the
19247 -msoft-float option, and pass the option to GCC when linking.
19248
19249 -msingle-float
19250 -mdouble-float
19251 Generate code for single- or double-precision floating-point
19252 operations. -mdouble-float implies -msingle-float.
19253
19254 -mmultiple
19255 -mno-multiple
19256 Generate code that uses (does not use) the load multiple word
19257 instructions and the store multiple word instructions. These
19258 instructions are generated by default on POWER systems, and not
19259 generated on PowerPC systems. Do not use -mmultiple on little-
19260 endian PowerPC systems, since those instructions do not work when
19261 the processor is in little-endian mode. The exceptions are PPC740
19262 and PPC750 which permit these instructions in little-endian mode.
19263
19264 -mupdate
19265 -mno-update
19266 Generate code that uses (does not use) the load or store
19267 instructions that update the base register to the address of the
19268 calculated memory location. These instructions are generated by
19269 default. If you use -mno-update, there is a small window between
19270 the time that the stack pointer is updated and the address of the
19271 previous frame is stored, which means code that walks the stack
19272 frame across interrupts or signals may get corrupted data.
19273
19274 -mavoid-indexed-addresses
19275 -mno-avoid-indexed-addresses
19276 Generate code that tries to avoid (not avoid) the use of indexed
19277 load or store instructions. These instructions can incur a
19278 performance penalty on Power6 processors in certain situations,
19279 such as when stepping through large arrays that cross a 16M
19280 boundary. This option is enabled by default when targeting Power6
19281 and disabled otherwise.
19282
19283 -mfused-madd
19284 -mno-fused-madd
19285 Generate code that uses (does not use) the floating-point multiply
19286 and accumulate instructions. These instructions are generated by
19287 default if hardware floating point is used. The machine-dependent
19288 -mfused-madd option is now mapped to the machine-independent
19289 -ffp-contract=fast option, and -mno-fused-madd is mapped to
19290 -ffp-contract=off.
19291
19292 -mno-strict-align
19293 -mstrict-align
19294 On System V.4 and embedded PowerPC systems do not (do) assume that
19295 unaligned memory references are handled by the system.
19296
19297 -mrelocatable
19298 -mno-relocatable
19299 Generate code that allows (does not allow) a static executable to
19300 be relocated to a different address at run time. A simple embedded
19301 PowerPC system loader should relocate the entire contents of
19302 ".got2" and 4-byte locations listed in the ".fixup" section, a
19303 table of 32-bit addresses generated by this option. For this to
19304 work, all objects linked together must be compiled with
19305 -mrelocatable or -mrelocatable-lib. -mrelocatable code aligns the
19306 stack to an 8-byte boundary.
19307
19308 -mrelocatable-lib
19309 -mno-relocatable-lib
19310 Like -mrelocatable, -mrelocatable-lib generates a ".fixup" section
19311 to allow static executables to be relocated at run time, but
19312 -mrelocatable-lib does not use the smaller stack alignment of
19313 -mrelocatable. Objects compiled with -mrelocatable-lib may be
19314 linked with objects compiled with any combination of the
19315 -mrelocatable options.
19316
19317 -mno-toc
19318 -mtoc
19319 On System V.4 and embedded PowerPC systems do not (do) assume that
19320 register 2 contains a pointer to a global area pointing to the
19321 addresses used in the program.
19322
19323 -mlittle
19324 -mlittle-endian
19325 On System V.4 and embedded PowerPC systems compile code for the
19326 processor in little-endian mode. The -mlittle-endian option is the
19327 same as -mlittle.
19328
19329 -mbig
19330 -mbig-endian
19331 On System V.4 and embedded PowerPC systems compile code for the
19332 processor in big-endian mode. The -mbig-endian option is the same
19333 as -mbig.
19334
19335 -mdynamic-no-pic
19336 On Darwin and Mac OS X systems, compile code so that it is not
19337 relocatable, but that its external references are relocatable. The
19338 resulting code is suitable for applications, but not shared
19339 libraries.
19340
19341 -msingle-pic-base
19342 Treat the register used for PIC addressing as read-only, rather
19343 than loading it in the prologue for each function. The runtime
19344 system is responsible for initializing this register with an
19345 appropriate value before execution begins.
19346
19347 -mprioritize-restricted-insns=priority
19348 This option controls the priority that is assigned to dispatch-slot
19349 restricted instructions during the second scheduling pass. The
19350 argument priority takes the value 0, 1, or 2 to assign no, highest,
19351 or second-highest (respectively) priority to dispatch-slot
19352 restricted instructions.
19353
19354 -msched-costly-dep=dependence_type
19355 This option controls which dependences are considered costly by the
19356 target during instruction scheduling. The argument dependence_type
19357 takes one of the following values:
19358
19359 no No dependence is costly.
19360
19361 all All dependences are costly.
19362
19363 true_store_to_load
19364 A true dependence from store to load is costly.
19365
19366 store_to_load
19367 Any dependence from store to load is costly.
19368
19369 number
19370 Any dependence for which the latency is greater than or equal
19371 to number is costly.
19372
19373 -minsert-sched-nops=scheme
19374 This option controls which NOP insertion scheme is used during the
19375 second scheduling pass. The argument scheme takes one of the
19376 following values:
19377
19378 no Don't insert NOPs.
19379
19380 pad Pad with NOPs any dispatch group that has vacant issue slots,
19381 according to the scheduler's grouping.
19382
19383 regroup_exact
19384 Insert NOPs to force costly dependent insns into separate
19385 groups. Insert exactly as many NOPs as needed to force an insn
19386 to a new group, according to the estimated processor grouping.
19387
19388 number
19389 Insert NOPs to force costly dependent insns into separate
19390 groups. Insert number NOPs to force an insn to a new group.
19391
19392 -mcall-sysv
19393 On System V.4 and embedded PowerPC systems compile code using
19394 calling conventions that adhere to the March 1995 draft of the
19395 System V Application Binary Interface, PowerPC processor
19396 supplement. This is the default unless you configured GCC using
19397 powerpc-*-eabiaix.
19398
19399 -mcall-sysv-eabi
19400 -mcall-eabi
19401 Specify both -mcall-sysv and -meabi options.
19402
19403 -mcall-sysv-noeabi
19404 Specify both -mcall-sysv and -mno-eabi options.
19405
19406 -mcall-aixdesc
19407 On System V.4 and embedded PowerPC systems compile code for the AIX
19408 operating system.
19409
19410 -mcall-linux
19411 On System V.4 and embedded PowerPC systems compile code for the
19412 Linux-based GNU system.
19413
19414 -mcall-freebsd
19415 On System V.4 and embedded PowerPC systems compile code for the
19416 FreeBSD operating system.
19417
19418 -mcall-netbsd
19419 On System V.4 and embedded PowerPC systems compile code for the
19420 NetBSD operating system.
19421
19422 -mcall-openbsd
19423 On System V.4 and embedded PowerPC systems compile code for the
19424 OpenBSD operating system.
19425
19426 -maix-struct-return
19427 Return all structures in memory (as specified by the AIX ABI).
19428
19429 -msvr4-struct-return
19430 Return structures smaller than 8 bytes in registers (as specified
19431 by the SVR4 ABI).
19432
19433 -mabi=abi-type
19434 Extend the current ABI with a particular extension, or remove such
19435 extension. Valid values are altivec, no-altivec, spe, no-spe,
19436 ibmlongdouble, ieeelongdouble, elfv1, elfv2.
19437
19438 -mabi=spe
19439 Extend the current ABI with SPE ABI extensions. This does not
19440 change the default ABI, instead it adds the SPE ABI extensions to
19441 the current ABI.
19442
19443 -mabi=no-spe
19444 Disable Book-E SPE ABI extensions for the current ABI.
19445
19446 -mabi=ibmlongdouble
19447 Change the current ABI to use IBM extended-precision long double.
19448 This is not likely to work if your system defaults to using IEEE
19449 extended-precision long double. If you change the long double type
19450 from IEEE extended-precision, the compiler will issue a warning
19451 unless you use the -Wno-psabi option. Requires -mlong-double-128
19452 to be enabled.
19453
19454 -mabi=ieeelongdouble
19455 Change the current ABI to use IEEE extended-precision long double.
19456 This is not likely to work if your system defaults to using IBM
19457 extended-precision long double. If you change the long double type
19458 from IBM extended-precision, the compiler will issue a warning
19459 unless you use the -Wno-psabi option. Requires -mlong-double-128
19460 to be enabled.
19461
19462 -mabi=elfv1
19463 Change the current ABI to use the ELFv1 ABI. This is the default
19464 ABI for big-endian PowerPC 64-bit Linux. Overriding the default
19465 ABI requires special system support and is likely to fail in
19466 spectacular ways.
19467
19468 -mabi=elfv2
19469 Change the current ABI to use the ELFv2 ABI. This is the default
19470 ABI for little-endian PowerPC 64-bit Linux. Overriding the default
19471 ABI requires special system support and is likely to fail in
19472 spectacular ways.
19473
19474 -mgnu-attribute
19475 -mno-gnu-attribute
19476 Emit .gnu_attribute assembly directives to set tag/value pairs in a
19477 .gnu.attributes section that specify ABI variations in function
19478 parameters or return values.
19479
19480 -mprototype
19481 -mno-prototype
19482 On System V.4 and embedded PowerPC systems assume that all calls to
19483 variable argument functions are properly prototyped. Otherwise,
19484 the compiler must insert an instruction before every non-prototyped
19485 call to set or clear bit 6 of the condition code register ("CR") to
19486 indicate whether floating-point values are passed in the floating-
19487 point registers in case the function takes variable arguments.
19488 With -mprototype, only calls to prototyped variable argument
19489 functions set or clear the bit.
19490
19491 -msim
19492 On embedded PowerPC systems, assume that the startup module is
19493 called sim-crt0.o and that the standard C libraries are libsim.a
19494 and libc.a. This is the default for powerpc-*-eabisim
19495 configurations.
19496
19497 -mmvme
19498 On embedded PowerPC systems, assume that the startup module is
19499 called crt0.o and the standard C libraries are libmvme.a and
19500 libc.a.
19501
19502 -mads
19503 On embedded PowerPC systems, assume that the startup module is
19504 called crt0.o and the standard C libraries are libads.a and libc.a.
19505
19506 -myellowknife
19507 On embedded PowerPC systems, assume that the startup module is
19508 called crt0.o and the standard C libraries are libyk.a and libc.a.
19509
19510 -mvxworks
19511 On System V.4 and embedded PowerPC systems, specify that you are
19512 compiling for a VxWorks system.
19513
19514 -memb
19515 On embedded PowerPC systems, set the "PPC_EMB" bit in the ELF flags
19516 header to indicate that eabi extended relocations are used.
19517
19518 -meabi
19519 -mno-eabi
19520 On System V.4 and embedded PowerPC systems do (do not) adhere to
19521 the Embedded Applications Binary Interface (EABI), which is a set
19522 of modifications to the System V.4 specifications. Selecting
19523 -meabi means that the stack is aligned to an 8-byte boundary, a
19524 function "__eabi" is called from "main" to set up the EABI
19525 environment, and the -msdata option can use both "r2" and "r13" to
19526 point to two separate small data areas. Selecting -mno-eabi means
19527 that the stack is aligned to a 16-byte boundary, no EABI
19528 initialization function is called from "main", and the -msdata
19529 option only uses "r13" to point to a single small data area. The
19530 -meabi option is on by default if you configured GCC using one of
19531 the powerpc*-*-eabi* options.
19532
19533 -msdata=eabi
19534 On System V.4 and embedded PowerPC systems, put small initialized
19535 "const" global and static data in the ".sdata2" section, which is
19536 pointed to by register "r2". Put small initialized non-"const"
19537 global and static data in the ".sdata" section, which is pointed to
19538 by register "r13". Put small uninitialized global and static data
19539 in the ".sbss" section, which is adjacent to the ".sdata" section.
19540 The -msdata=eabi option is incompatible with the -mrelocatable
19541 option. The -msdata=eabi option also sets the -memb option.
19542
19543 -msdata=sysv
19544 On System V.4 and embedded PowerPC systems, put small global and
19545 static data in the ".sdata" section, which is pointed to by
19546 register "r13". Put small uninitialized global and static data in
19547 the ".sbss" section, which is adjacent to the ".sdata" section.
19548 The -msdata=sysv option is incompatible with the -mrelocatable
19549 option.
19550
19551 -msdata=default
19552 -msdata
19553 On System V.4 and embedded PowerPC systems, if -meabi is used,
19554 compile code the same as -msdata=eabi, otherwise compile code the
19555 same as -msdata=sysv.
19556
19557 -msdata=data
19558 On System V.4 and embedded PowerPC systems, put small global data
19559 in the ".sdata" section. Put small uninitialized global data in
19560 the ".sbss" section. Do not use register "r13" to address small
19561 data however. This is the default behavior unless other -msdata
19562 options are used.
19563
19564 -msdata=none
19565 -mno-sdata
19566 On embedded PowerPC systems, put all initialized global and static
19567 data in the ".data" section, and all uninitialized data in the
19568 ".bss" section.
19569
19570 -mblock-move-inline-limit=num
19571 Inline all block moves (such as calls to "memcpy" or structure
19572 copies) less than or equal to num bytes. The minimum value for num
19573 is 32 bytes on 32-bit targets and 64 bytes on 64-bit targets. The
19574 default value is target-specific.
19575
19576 -G num
19577 On embedded PowerPC systems, put global and static items less than
19578 or equal to num bytes into the small data or BSS sections instead
19579 of the normal data or BSS section. By default, num is 8. The -G
19580 num switch is also passed to the linker. All modules should be
19581 compiled with the same -G num value.
19582
19583 -mregnames
19584 -mno-regnames
19585 On System V.4 and embedded PowerPC systems do (do not) emit
19586 register names in the assembly language output using symbolic
19587 forms.
19588
19589 -mlongcall
19590 -mno-longcall
19591 By default assume that all calls are far away so that a longer and
19592 more expensive calling sequence is required. This is required for
19593 calls farther than 32 megabytes (33,554,432 bytes) from the current
19594 location. A short call is generated if the compiler knows the call
19595 cannot be that far away. This setting can be overridden by the
19596 "shortcall" function attribute, or by "#pragma longcall(0)".
19597
19598 Some linkers are capable of detecting out-of-range calls and
19599 generating glue code on the fly. On these systems, long calls are
19600 unnecessary and generate slower code. As of this writing, the AIX
19601 linker can do this, as can the GNU linker for PowerPC/64. It is
19602 planned to add this feature to the GNU linker for 32-bit PowerPC
19603 systems as well.
19604
19605 In the future, GCC may ignore all longcall specifications when the
19606 linker is known to generate glue.
19607
19608 -mtls-markers
19609 -mno-tls-markers
19610 Mark (do not mark) calls to "__tls_get_addr" with a relocation
19611 specifying the function argument. The relocation allows the linker
19612 to reliably associate function call with argument setup
19613 instructions for TLS optimization, which in turn allows GCC to
19614 better schedule the sequence.
19615
19616 -mrecip
19617 -mno-recip
19618 This option enables use of the reciprocal estimate and reciprocal
19619 square root estimate instructions with additional Newton-Raphson
19620 steps to increase precision instead of doing a divide or square
19621 root and divide for floating-point arguments. You should use the
19622 -ffast-math option when using -mrecip (or at least
19623 -funsafe-math-optimizations, -ffinite-math-only, -freciprocal-math
19624 and -fno-trapping-math). Note that while the throughput of the
19625 sequence is generally higher than the throughput of the non-
19626 reciprocal instruction, the precision of the sequence can be
19627 decreased by up to 2 ulp (i.e. the inverse of 1.0 equals
19628 0.99999994) for reciprocal square roots.
19629
19630 -mrecip=opt
19631 This option controls which reciprocal estimate instructions may be
19632 used. opt is a comma-separated list of options, which may be
19633 preceded by a "!" to invert the option:
19634
19635 all Enable all estimate instructions.
19636
19637 default
19638 Enable the default instructions, equivalent to -mrecip.
19639
19640 none
19641 Disable all estimate instructions, equivalent to -mno-recip.
19642
19643 div Enable the reciprocal approximation instructions for both
19644 single and double precision.
19645
19646 divf
19647 Enable the single-precision reciprocal approximation
19648 instructions.
19649
19650 divd
19651 Enable the double-precision reciprocal approximation
19652 instructions.
19653
19654 rsqrt
19655 Enable the reciprocal square root approximation instructions
19656 for both single and double precision.
19657
19658 rsqrtf
19659 Enable the single-precision reciprocal square root
19660 approximation instructions.
19661
19662 rsqrtd
19663 Enable the double-precision reciprocal square root
19664 approximation instructions.
19665
19666 So, for example, -mrecip=all,!rsqrtd enables all of the reciprocal
19667 estimate instructions, except for the "FRSQRTE", "XSRSQRTEDP", and
19668 "XVRSQRTEDP" instructions which handle the double-precision
19669 reciprocal square root calculations.
19670
19671 -mrecip-precision
19672 -mno-recip-precision
19673 Assume (do not assume) that the reciprocal estimate instructions
19674 provide higher-precision estimates than is mandated by the PowerPC
19675 ABI. Selecting -mcpu=power6, -mcpu=power7 or -mcpu=power8
19676 automatically selects -mrecip-precision. The double-precision
19677 square root estimate instructions are not generated by default on
19678 low-precision machines, since they do not provide an estimate that
19679 converges after three steps.
19680
19681 -mpointers-to-nested-functions
19682 -mno-pointers-to-nested-functions
19683 Generate (do not generate) code to load up the static chain
19684 register ("r11") when calling through a pointer on AIX and 64-bit
19685 Linux systems where a function pointer points to a 3-word
19686 descriptor giving the function address, TOC value to be loaded in
19687 register "r2", and static chain value to be loaded in register
19688 "r11". The -mpointers-to-nested-functions is on by default. You
19689 cannot call through pointers to nested functions or pointers to
19690 functions compiled in other languages that use the static chain if
19691 you use -mno-pointers-to-nested-functions.
19692
19693 -msave-toc-indirect
19694 -mno-save-toc-indirect
19695 Generate (do not generate) code to save the TOC value in the
19696 reserved stack location in the function prologue if the function
19697 calls through a pointer on AIX and 64-bit Linux systems. If the
19698 TOC value is not saved in the prologue, it is saved just before the
19699 call through the pointer. The -mno-save-toc-indirect option is the
19700 default.
19701
19702 -mcompat-align-parm
19703 -mno-compat-align-parm
19704 Generate (do not generate) code to pass structure parameters with a
19705 maximum alignment of 64 bits, for compatibility with older versions
19706 of GCC.
19707
19708 Older versions of GCC (prior to 4.9.0) incorrectly did not align a
19709 structure parameter on a 128-bit boundary when that structure
19710 contained a member requiring 128-bit alignment. This is corrected
19711 in more recent versions of GCC. This option may be used to
19712 generate code that is compatible with functions compiled with older
19713 versions of GCC.
19714
19715 The -mno-compat-align-parm option is the default.
19716
19717 -mstack-protector-guard=guard
19718 -mstack-protector-guard-reg=reg
19719 -mstack-protector-guard-offset=offset
19720 -mstack-protector-guard-symbol=symbol
19721 Generate stack protection code using canary at guard. Supported
19722 locations are global for global canary or tls for per-thread canary
19723 in the TLS block (the default with GNU libc version 2.4 or later).
19724
19725 With the latter choice the options -mstack-protector-guard-reg=reg
19726 and -mstack-protector-guard-offset=offset furthermore specify which
19727 register to use as base register for reading the canary, and from
19728 what offset from that base register. The default for those is as
19729 specified in the relevant ABI.
19730 -mstack-protector-guard-symbol=symbol overrides the offset with a
19731 symbol reference to a canary in the TLS block.
19732
19733 RISC-V Options
19734
19735 These command-line options are defined for RISC-V targets:
19736
19737 -mbranch-cost=n
19738 Set the cost of branches to roughly n instructions.
19739
19740 -mplt
19741 -mno-plt
19742 When generating PIC code, do or don't allow the use of PLTs.
19743 Ignored for non-PIC. The default is -mplt.
19744
19745 -mabi=ABI-string
19746 Specify integer and floating-point calling convention. ABI-string
19747 contains two parts: the size of integer types and the registers
19748 used for floating-point types. For example -march=rv64ifd
19749 -mabi=lp64d means that long and pointers are 64-bit (implicitly
19750 defining int to be 32-bit), and that floating-point values up to 64
19751 bits wide are passed in F registers. Contrast this with
19752 -march=rv64ifd -mabi=lp64f, which still allows the compiler to
19753 generate code that uses the F and D extensions but only allows
19754 floating-point values up to 32 bits long to be passed in registers;
19755 or -march=rv64ifd -mabi=lp64, in which no floating-point arguments
19756 will be passed in registers.
19757
19758 The default for this argument is system dependent, users who want a
19759 specific calling convention should specify one explicitly. The
19760 valid calling conventions are: ilp32, ilp32f, ilp32d, lp64, lp64f,
19761 and lp64d. Some calling conventions are impossible to implement on
19762 some ISAs: for example, -march=rv32if -mabi=ilp32d is invalid
19763 because the ABI requires 64-bit values be passed in F registers,
19764 but F registers are only 32 bits wide.
19765
19766 -mfdiv
19767 -mno-fdiv
19768 Do or don't use hardware floating-point divide and square root
19769 instructions. This requires the F or D extensions for floating-
19770 point registers. The default is to use them if the specified
19771 architecture has these instructions.
19772
19773 -mdiv
19774 -mno-div
19775 Do or don't use hardware instructions for integer division. This
19776 requires the M extension. The default is to use them if the
19777 specified architecture has these instructions.
19778
19779 -march=ISA-string
19780 Generate code for given RISC-V ISA (e.g. rv64im). ISA strings must
19781 be lower-case. Examples include rv64i, rv32g, and rv32imaf.
19782
19783 -mtune=processor-string
19784 Optimize the output for the given processor, specified by
19785 microarchitecture name.
19786
19787 -mpreferred-stack-boundary=num
19788 Attempt to keep the stack boundary aligned to a 2 raised to num
19789 byte boundary. If -mpreferred-stack-boundary is not specified, the
19790 default is 4 (16 bytes or 128-bits).
19791
19792 Warning: If you use this switch, then you must build all modules
19793 with the same value, including any libraries. This includes the
19794 system libraries and startup modules.
19795
19796 -msmall-data-limit=n
19797 Put global and static data smaller than n bytes into a special
19798 section (on some targets).
19799
19800 -msave-restore
19801 -mno-save-restore
19802 Do or don't use smaller but slower prologue and epilogue code that
19803 uses library function calls. The default is to use fast inline
19804 prologues and epilogues.
19805
19806 -mstrict-align
19807 -mno-strict-align
19808 Do not or do generate unaligned memory accesses. The default is
19809 set depending on whether the processor we are optimizing for
19810 supports fast unaligned access or not.
19811
19812 -mcmodel=medlow
19813 Generate code for the medium-low code model. The program and its
19814 statically defined symbols must lie within a single 2 GiB address
19815 range and must lie between absolute addresses -2 GiB and +2 GiB.
19816 Programs can be statically or dynamically linked. This is the
19817 default code model.
19818
19819 -mcmodel=medany
19820 Generate code for the medium-any code model. The program and its
19821 statically defined symbols must be within any single 2 GiB address
19822 range. Programs can be statically or dynamically linked.
19823
19824 -mexplicit-relocs
19825 -mno-exlicit-relocs
19826 Use or do not use assembler relocation operators when dealing with
19827 symbolic addresses. The alternative is to use assembler macros
19828 instead, which may limit optimization.
19829
19830 -mrelax
19831 -mno-relax
19832 Take advantage of linker relaxations to reduce the number of
19833 instructions required to materialize symbol addresses. The default
19834 is to take advantage of linker relaxations.
19835
19836 RL78 Options
19837
19838 -msim
19839 Links in additional target libraries to support operation within a
19840 simulator.
19841
19842 -mmul=none
19843 -mmul=g10
19844 -mmul=g13
19845 -mmul=g14
19846 -mmul=rl78
19847 Specifies the type of hardware multiplication and division support
19848 to be used. The simplest is "none", which uses software for both
19849 multiplication and division. This is the default. The "g13" value
19850 is for the hardware multiply/divide peripheral found on the
19851 RL78/G13 (S2 core) targets. The "g14" value selects the use of the
19852 multiplication and division instructions supported by the RL78/G14
19853 (S3 core) parts. The value "rl78" is an alias for "g14" and the
19854 value "mg10" is an alias for "none".
19855
19856 In addition a C preprocessor macro is defined, based upon the
19857 setting of this option. Possible values are: "__RL78_MUL_NONE__",
19858 "__RL78_MUL_G13__" or "__RL78_MUL_G14__".
19859
19860 -mcpu=g10
19861 -mcpu=g13
19862 -mcpu=g14
19863 -mcpu=rl78
19864 Specifies the RL78 core to target. The default is the G14 core,
19865 also known as an S3 core or just RL78. The G13 or S2 core does not
19866 have multiply or divide instructions, instead it uses a hardware
19867 peripheral for these operations. The G10 or S1 core does not have
19868 register banks, so it uses a different calling convention.
19869
19870 If this option is set it also selects the type of hardware multiply
19871 support to use, unless this is overridden by an explicit -mmul=none
19872 option on the command line. Thus specifying -mcpu=g13 enables the
19873 use of the G13 hardware multiply peripheral and specifying
19874 -mcpu=g10 disables the use of hardware multiplications altogether.
19875
19876 Note, although the RL78/G14 core is the default target, specifying
19877 -mcpu=g14 or -mcpu=rl78 on the command line does change the
19878 behavior of the toolchain since it also enables G14 hardware
19879 multiply support. If these options are not specified on the
19880 command line then software multiplication routines will be used
19881 even though the code targets the RL78 core. This is for backwards
19882 compatibility with older toolchains which did not have hardware
19883 multiply and divide support.
19884
19885 In addition a C preprocessor macro is defined, based upon the
19886 setting of this option. Possible values are: "__RL78_G10__",
19887 "__RL78_G13__" or "__RL78_G14__".
19888
19889 -mg10
19890 -mg13
19891 -mg14
19892 -mrl78
19893 These are aliases for the corresponding -mcpu= option. They are
19894 provided for backwards compatibility.
19895
19896 -mallregs
19897 Allow the compiler to use all of the available registers. By
19898 default registers "r24..r31" are reserved for use in interrupt
19899 handlers. With this option enabled these registers can be used in
19900 ordinary functions as well.
19901
19902 -m64bit-doubles
19903 -m32bit-doubles
19904 Make the "double" data type be 64 bits (-m64bit-doubles) or 32 bits
19905 (-m32bit-doubles) in size. The default is -m32bit-doubles.
19906
19907 -msave-mduc-in-interrupts
19908 -mno-save-mduc-in-interrupts
19909 Specifies that interrupt handler functions should preserve the MDUC
19910 registers. This is only necessary if normal code might use the
19911 MDUC registers, for example because it performs multiplication and
19912 division operations. The default is to ignore the MDUC registers
19913 as this makes the interrupt handlers faster. The target option
19914 -mg13 needs to be passed for this to work as this feature is only
19915 available on the G13 target (S2 core). The MDUC registers will
19916 only be saved if the interrupt handler performs a multiplication or
19917 division operation or it calls another function.
19918
19919 IBM RS/6000 and PowerPC Options
19920
19921 These -m options are defined for the IBM RS/6000 and PowerPC:
19922
19923 -mpowerpc-gpopt
19924 -mno-powerpc-gpopt
19925 -mpowerpc-gfxopt
19926 -mno-powerpc-gfxopt
19927 -mpowerpc64
19928 -mno-powerpc64
19929 -mmfcrf
19930 -mno-mfcrf
19931 -mpopcntb
19932 -mno-popcntb
19933 -mpopcntd
19934 -mno-popcntd
19935 -mfprnd
19936 -mno-fprnd
19937 -mcmpb
19938 -mno-cmpb
19939 -mmfpgpr
19940 -mno-mfpgpr
19941 -mhard-dfp
19942 -mno-hard-dfp
19943 You use these options to specify which instructions are available
19944 on the processor you are using. The default value of these options
19945 is determined when configuring GCC. Specifying the -mcpu=cpu_type
19946 overrides the specification of these options. We recommend you use
19947 the -mcpu=cpu_type option rather than the options listed above.
19948
19949 Specifying -mpowerpc-gpopt allows GCC to use the optional PowerPC
19950 architecture instructions in the General Purpose group, including
19951 floating-point square root. Specifying -mpowerpc-gfxopt allows GCC
19952 to use the optional PowerPC architecture instructions in the
19953 Graphics group, including floating-point select.
19954
19955 The -mmfcrf option allows GCC to generate the move from condition
19956 register field instruction implemented on the POWER4 processor and
19957 other processors that support the PowerPC V2.01 architecture. The
19958 -mpopcntb option allows GCC to generate the popcount and double-
19959 precision FP reciprocal estimate instruction implemented on the
19960 POWER5 processor and other processors that support the PowerPC
19961 V2.02 architecture. The -mpopcntd option allows GCC to generate
19962 the popcount instruction implemented on the POWER7 processor and
19963 other processors that support the PowerPC V2.06 architecture. The
19964 -mfprnd option allows GCC to generate the FP round to integer
19965 instructions implemented on the POWER5+ processor and other
19966 processors that support the PowerPC V2.03 architecture. The -mcmpb
19967 option allows GCC to generate the compare bytes instruction
19968 implemented on the POWER6 processor and other processors that
19969 support the PowerPC V2.05 architecture. The -mmfpgpr option allows
19970 GCC to generate the FP move to/from general-purpose register
19971 instructions implemented on the POWER6X processor and other
19972 processors that support the extended PowerPC V2.05 architecture.
19973 The -mhard-dfp option allows GCC to generate the decimal floating-
19974 point instructions implemented on some POWER processors.
19975
19976 The -mpowerpc64 option allows GCC to generate the additional 64-bit
19977 instructions that are found in the full PowerPC64 architecture and
19978 to treat GPRs as 64-bit, doubleword quantities. GCC defaults to
19979 -mno-powerpc64.
19980
19981 -mcpu=cpu_type
19982 Set architecture type, register usage, and instruction scheduling
19983 parameters for machine type cpu_type. Supported values for
19984 cpu_type are 401, 403, 405, 405fp, 440, 440fp, 464, 464fp, 476,
19985 476fp, 505, 601, 602, 603, 603e, 604, 604e, 620, 630, 740, 7400,
19986 7450, 750, 801, 821, 823, 860, 970, 8540, a2, e300c2, e300c3,
19987 e500mc, e500mc64, e5500, e6500, ec603e, G3, G4, G5, titan, power3,
19988 power4, power5, power5+, power6, power6x, power7, power8, power9,
19989 powerpc, powerpc64, powerpc64le, rs64, and native.
19990
19991 -mcpu=powerpc, -mcpu=powerpc64, and -mcpu=powerpc64le specify pure
19992 32-bit PowerPC (either endian), 64-bit big endian PowerPC and
19993 64-bit little endian PowerPC architecture machine types, with an
19994 appropriate, generic processor model assumed for scheduling
19995 purposes.
19996
19997 Specifying native as cpu type detects and selects the architecture
19998 option that corresponds to the host processor of the system
19999 performing the compilation. -mcpu=native has no effect if GCC does
20000 not recognize the processor.
20001
20002 The other options specify a specific processor. Code generated
20003 under those options runs best on that processor, and may not run at
20004 all on others.
20005
20006 The -mcpu options automatically enable or disable the following
20007 options:
20008
20009 -maltivec -mfprnd -mhard-float -mmfcrf -mmultiple -mpopcntb
20010 -mpopcntd -mpowerpc64 -mpowerpc-gpopt -mpowerpc-gfxopt
20011 -msingle-float -mdouble-float -msimple-fpu -mmulhw -mdlmzb
20012 -mmfpgpr -mvsx -mcrypto -mhtm -mpower8-fusion -mpower8-vector
20013 -mquad-memory -mquad-memory-atomic -mfloat128 -mfloat128-hardware
20014
20015 The particular options set for any particular CPU varies between
20016 compiler versions, depending on what setting seems to produce
20017 optimal code for that CPU; it doesn't necessarily reflect the
20018 actual hardware's capabilities. If you wish to set an individual
20019 option to a particular value, you may specify it after the -mcpu
20020 option, like -mcpu=970 -mno-altivec.
20021
20022 On AIX, the -maltivec and -mpowerpc64 options are not enabled or
20023 disabled by the -mcpu option at present because AIX does not have
20024 full support for these options. You may still enable or disable
20025 them individually if you're sure it'll work in your environment.
20026
20027 -mtune=cpu_type
20028 Set the instruction scheduling parameters for machine type
20029 cpu_type, but do not set the architecture type or register usage,
20030 as -mcpu=cpu_type does. The same values for cpu_type are used for
20031 -mtune as for -mcpu. If both are specified, the code generated
20032 uses the architecture and registers set by -mcpu, but the
20033 scheduling parameters set by -mtune.
20034
20035 -mcmodel=small
20036 Generate PowerPC64 code for the small model: The TOC is limited to
20037 64k.
20038
20039 -mcmodel=medium
20040 Generate PowerPC64 code for the medium model: The TOC and other
20041 static data may be up to a total of 4G in size. This is the
20042 default for 64-bit Linux.
20043
20044 -mcmodel=large
20045 Generate PowerPC64 code for the large model: The TOC may be up to
20046 4G in size. Other data and code is only limited by the 64-bit
20047 address space.
20048
20049 -maltivec
20050 -mno-altivec
20051 Generate code that uses (does not use) AltiVec instructions, and
20052 also enable the use of built-in functions that allow more direct
20053 access to the AltiVec instruction set. You may also need to set
20054 -mabi=altivec to adjust the current ABI with AltiVec ABI
20055 enhancements.
20056
20057 When -maltivec is used, rather than -maltivec=le or -maltivec=be,
20058 the element order for AltiVec intrinsics such as "vec_splat",
20059 "vec_extract", and "vec_insert" match array element order
20060 corresponding to the endianness of the target. That is, element
20061 zero identifies the leftmost element in a vector register when
20062 targeting a big-endian platform, and identifies the rightmost
20063 element in a vector register when targeting a little-endian
20064 platform.
20065
20066 -maltivec=be
20067 Generate AltiVec instructions using big-endian element order,
20068 regardless of whether the target is big- or little-endian. This is
20069 the default when targeting a big-endian platform. Using this
20070 option is currently deprecated. Support for this feature will be
20071 removed in GCC 9.
20072
20073 The element order is used to interpret element numbers in AltiVec
20074 intrinsics such as "vec_splat", "vec_extract", and "vec_insert".
20075 By default, these match array element order corresponding to the
20076 endianness for the target.
20077
20078 -maltivec=le
20079 Generate AltiVec instructions using little-endian element order,
20080 regardless of whether the target is big- or little-endian. This is
20081 the default when targeting a little-endian platform. This option
20082 is currently ignored when targeting a big-endian platform.
20083
20084 The element order is used to interpret element numbers in AltiVec
20085 intrinsics such as "vec_splat", "vec_extract", and "vec_insert".
20086 By default, these match array element order corresponding to the
20087 endianness for the target.
20088
20089 -mvrsave
20090 -mno-vrsave
20091 Generate VRSAVE instructions when generating AltiVec code.
20092
20093 -msecure-plt
20094 Generate code that allows ld and ld.so to build executables and
20095 shared libraries with non-executable ".plt" and ".got" sections.
20096 This is a PowerPC 32-bit SYSV ABI option.
20097
20098 -mbss-plt
20099 Generate code that uses a BSS ".plt" section that ld.so fills in,
20100 and requires ".plt" and ".got" sections that are both writable and
20101 executable. This is a PowerPC 32-bit SYSV ABI option.
20102
20103 -misel
20104 -mno-isel
20105 This switch enables or disables the generation of ISEL
20106 instructions.
20107
20108 -misel=yes/no
20109 This switch has been deprecated. Use -misel and -mno-isel instead.
20110
20111 -mpaired
20112 -mno-paired
20113 This switch enables or disables the generation of PAIRED simd
20114 instructions.
20115
20116 -mvsx
20117 -mno-vsx
20118 Generate code that uses (does not use) vector/scalar (VSX)
20119 instructions, and also enable the use of built-in functions that
20120 allow more direct access to the VSX instruction set.
20121
20122 -mcrypto
20123 -mno-crypto
20124 Enable the use (disable) of the built-in functions that allow
20125 direct access to the cryptographic instructions that were added in
20126 version 2.07 of the PowerPC ISA.
20127
20128 -mhtm
20129 -mno-htm
20130 Enable (disable) the use of the built-in functions that allow
20131 direct access to the Hardware Transactional Memory (HTM)
20132 instructions that were added in version 2.07 of the PowerPC ISA.
20133
20134 -mpower8-fusion
20135 -mno-power8-fusion
20136 Generate code that keeps (does not keeps) some integer operations
20137 adjacent so that the instructions can be fused together on power8
20138 and later processors.
20139
20140 -mpower8-vector
20141 -mno-power8-vector
20142 Generate code that uses (does not use) the vector and scalar
20143 instructions that were added in version 2.07 of the PowerPC ISA.
20144 Also enable the use of built-in functions that allow more direct
20145 access to the vector instructions.
20146
20147 -mquad-memory
20148 -mno-quad-memory
20149 Generate code that uses (does not use) the non-atomic quad word
20150 memory instructions. The -mquad-memory option requires use of
20151 64-bit mode.
20152
20153 -mquad-memory-atomic
20154 -mno-quad-memory-atomic
20155 Generate code that uses (does not use) the atomic quad word memory
20156 instructions. The -mquad-memory-atomic option requires use of
20157 64-bit mode.
20158
20159 -mfloat128
20160 -mno-float128
20161 Enable/disable the __float128 keyword for IEEE 128-bit floating
20162 point and use either software emulation for IEEE 128-bit floating
20163 point or hardware instructions.
20164
20165 The VSX instruction set (-mvsx, -mcpu=power7, -mcpu=power8), or
20166 -mcpu=power9 must be enabled to use the IEEE 128-bit floating point
20167 support. The IEEE 128-bit floating point support only works on
20168 PowerPC Linux systems.
20169
20170 The default for -mfloat128 is enabled on PowerPC Linux systems
20171 using the VSX instruction set, and disabled on other systems.
20172
20173 If you use the ISA 3.0 instruction set (-mpower9-vector or
20174 -mcpu=power9) on a 64-bit system, the IEEE 128-bit floating point
20175 support will also enable the generation of ISA 3.0 IEEE 128-bit
20176 floating point instructions. Otherwise, if you do not specify to
20177 generate ISA 3.0 instructions or you are targeting a 32-bit big
20178 endian system, IEEE 128-bit floating point will be done with
20179 software emulation.
20180
20181 -mfloat128-hardware
20182 -mno-float128-hardware
20183 Enable/disable using ISA 3.0 hardware instructions to support the
20184 __float128 data type.
20185
20186 The default for -mfloat128-hardware is enabled on PowerPC Linux
20187 systems using the ISA 3.0 instruction set, and disabled on other
20188 systems.
20189
20190 -m32
20191 -m64
20192 Generate code for 32-bit or 64-bit environments of Darwin and SVR4
20193 targets (including GNU/Linux). The 32-bit environment sets int,
20194 long and pointer to 32 bits and generates code that runs on any
20195 PowerPC variant. The 64-bit environment sets int to 32 bits and
20196 long and pointer to 64 bits, and generates code for PowerPC64, as
20197 for -mpowerpc64.
20198
20199 -mfull-toc
20200 -mno-fp-in-toc
20201 -mno-sum-in-toc
20202 -mminimal-toc
20203 Modify generation of the TOC (Table Of Contents), which is created
20204 for every executable file. The -mfull-toc option is selected by
20205 default. In that case, GCC allocates at least one TOC entry for
20206 each unique non-automatic variable reference in your program. GCC
20207 also places floating-point constants in the TOC. However, only
20208 16,384 entries are available in the TOC.
20209
20210 If you receive a linker error message that saying you have
20211 overflowed the available TOC space, you can reduce the amount of
20212 TOC space used with the -mno-fp-in-toc and -mno-sum-in-toc options.
20213 -mno-fp-in-toc prevents GCC from putting floating-point constants
20214 in the TOC and -mno-sum-in-toc forces GCC to generate code to
20215 calculate the sum of an address and a constant at run time instead
20216 of putting that sum into the TOC. You may specify one or both of
20217 these options. Each causes GCC to produce very slightly slower and
20218 larger code at the expense of conserving TOC space.
20219
20220 If you still run out of space in the TOC even when you specify both
20221 of these options, specify -mminimal-toc instead. This option
20222 causes GCC to make only one TOC entry for every file. When you
20223 specify this option, GCC produces code that is slower and larger
20224 but which uses extremely little TOC space. You may wish to use
20225 this option only on files that contain less frequently-executed
20226 code.
20227
20228 -maix64
20229 -maix32
20230 Enable 64-bit AIX ABI and calling convention: 64-bit pointers,
20231 64-bit "long" type, and the infrastructure needed to support them.
20232 Specifying -maix64 implies -mpowerpc64, while -maix32 disables the
20233 64-bit ABI and implies -mno-powerpc64. GCC defaults to -maix32.
20234
20235 -mxl-compat
20236 -mno-xl-compat
20237 Produce code that conforms more closely to IBM XL compiler
20238 semantics when using AIX-compatible ABI. Pass floating-point
20239 arguments to prototyped functions beyond the register save area
20240 (RSA) on the stack in addition to argument FPRs. Do not assume
20241 that most significant double in 128-bit long double value is
20242 properly rounded when comparing values and converting to double.
20243 Use XL symbol names for long double support routines.
20244
20245 The AIX calling convention was extended but not initially
20246 documented to handle an obscure K&R C case of calling a function
20247 that takes the address of its arguments with fewer arguments than
20248 declared. IBM XL compilers access floating-point arguments that do
20249 not fit in the RSA from the stack when a subroutine is compiled
20250 without optimization. Because always storing floating-point
20251 arguments on the stack is inefficient and rarely needed, this
20252 option is not enabled by default and only is necessary when calling
20253 subroutines compiled by IBM XL compilers without optimization.
20254
20255 -mpe
20256 Support IBM RS/6000 SP Parallel Environment (PE). Link an
20257 application written to use message passing with special startup
20258 code to enable the application to run. The system must have PE
20259 installed in the standard location (/usr/lpp/ppe.poe/), or the
20260 specs file must be overridden with the -specs= option to specify
20261 the appropriate directory location. The Parallel Environment does
20262 not support threads, so the -mpe option and the -pthread option are
20263 incompatible.
20264
20265 -malign-natural
20266 -malign-power
20267 On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
20268 -malign-natural overrides the ABI-defined alignment of larger
20269 types, such as floating-point doubles, on their natural size-based
20270 boundary. The option -malign-power instructs GCC to follow the
20271 ABI-specified alignment rules. GCC defaults to the standard
20272 alignment defined in the ABI.
20273
20274 On 64-bit Darwin, natural alignment is the default, and
20275 -malign-power is not supported.
20276
20277 -msoft-float
20278 -mhard-float
20279 Generate code that does not use (uses) the floating-point register
20280 set. Software floating-point emulation is provided if you use the
20281 -msoft-float option, and pass the option to GCC when linking.
20282
20283 -msingle-float
20284 -mdouble-float
20285 Generate code for single- or double-precision floating-point
20286 operations. -mdouble-float implies -msingle-float.
20287
20288 -msimple-fpu
20289 Do not generate "sqrt" and "div" instructions for hardware
20290 floating-point unit.
20291
20292 -mfpu=name
20293 Specify type of floating-point unit. Valid values for name are
20294 sp_lite (equivalent to -msingle-float -msimple-fpu), dp_lite
20295 (equivalent to -mdouble-float -msimple-fpu), sp_full (equivalent to
20296 -msingle-float), and dp_full (equivalent to -mdouble-float).
20297
20298 -mxilinx-fpu
20299 Perform optimizations for the floating-point unit on Xilinx PPC
20300 405/440.
20301
20302 -mmultiple
20303 -mno-multiple
20304 Generate code that uses (does not use) the load multiple word
20305 instructions and the store multiple word instructions. These
20306 instructions are generated by default on POWER systems, and not
20307 generated on PowerPC systems. Do not use -mmultiple on little-
20308 endian PowerPC systems, since those instructions do not work when
20309 the processor is in little-endian mode. The exceptions are PPC740
20310 and PPC750 which permit these instructions in little-endian mode.
20311
20312 -mupdate
20313 -mno-update
20314 Generate code that uses (does not use) the load or store
20315 instructions that update the base register to the address of the
20316 calculated memory location. These instructions are generated by
20317 default. If you use -mno-update, there is a small window between
20318 the time that the stack pointer is updated and the address of the
20319 previous frame is stored, which means code that walks the stack
20320 frame across interrupts or signals may get corrupted data.
20321
20322 -mavoid-indexed-addresses
20323 -mno-avoid-indexed-addresses
20324 Generate code that tries to avoid (not avoid) the use of indexed
20325 load or store instructions. These instructions can incur a
20326 performance penalty on Power6 processors in certain situations,
20327 such as when stepping through large arrays that cross a 16M
20328 boundary. This option is enabled by default when targeting Power6
20329 and disabled otherwise.
20330
20331 -mfused-madd
20332 -mno-fused-madd
20333 Generate code that uses (does not use) the floating-point multiply
20334 and accumulate instructions. These instructions are generated by
20335 default if hardware floating point is used. The machine-dependent
20336 -mfused-madd option is now mapped to the machine-independent
20337 -ffp-contract=fast option, and -mno-fused-madd is mapped to
20338 -ffp-contract=off.
20339
20340 -mmulhw
20341 -mno-mulhw
20342 Generate code that uses (does not use) the half-word multiply and
20343 multiply-accumulate instructions on the IBM 405, 440, 464 and 476
20344 processors. These instructions are generated by default when
20345 targeting those processors.
20346
20347 -mdlmzb
20348 -mno-dlmzb
20349 Generate code that uses (does not use) the string-search dlmzb
20350 instruction on the IBM 405, 440, 464 and 476 processors. This
20351 instruction is generated by default when targeting those
20352 processors.
20353
20354 -mno-bit-align
20355 -mbit-align
20356 On System V.4 and embedded PowerPC systems do not (do) force
20357 structures and unions that contain bit-fields to be aligned to the
20358 base type of the bit-field.
20359
20360 For example, by default a structure containing nothing but 8
20361 "unsigned" bit-fields of length 1 is aligned to a 4-byte boundary
20362 and has a size of 4 bytes. By using -mno-bit-align, the structure
20363 is aligned to a 1-byte boundary and is 1 byte in size.
20364
20365 -mno-strict-align
20366 -mstrict-align
20367 On System V.4 and embedded PowerPC systems do not (do) assume that
20368 unaligned memory references are handled by the system.
20369
20370 -mrelocatable
20371 -mno-relocatable
20372 Generate code that allows (does not allow) a static executable to
20373 be relocated to a different address at run time. A simple embedded
20374 PowerPC system loader should relocate the entire contents of
20375 ".got2" and 4-byte locations listed in the ".fixup" section, a
20376 table of 32-bit addresses generated by this option. For this to
20377 work, all objects linked together must be compiled with
20378 -mrelocatable or -mrelocatable-lib. -mrelocatable code aligns the
20379 stack to an 8-byte boundary.
20380
20381 -mrelocatable-lib
20382 -mno-relocatable-lib
20383 Like -mrelocatable, -mrelocatable-lib generates a ".fixup" section
20384 to allow static executables to be relocated at run time, but
20385 -mrelocatable-lib does not use the smaller stack alignment of
20386 -mrelocatable. Objects compiled with -mrelocatable-lib may be
20387 linked with objects compiled with any combination of the
20388 -mrelocatable options.
20389
20390 -mno-toc
20391 -mtoc
20392 On System V.4 and embedded PowerPC systems do not (do) assume that
20393 register 2 contains a pointer to a global area pointing to the
20394 addresses used in the program.
20395
20396 -mlittle
20397 -mlittle-endian
20398 On System V.4 and embedded PowerPC systems compile code for the
20399 processor in little-endian mode. The -mlittle-endian option is the
20400 same as -mlittle.
20401
20402 -mbig
20403 -mbig-endian
20404 On System V.4 and embedded PowerPC systems compile code for the
20405 processor in big-endian mode. The -mbig-endian option is the same
20406 as -mbig.
20407
20408 -mdynamic-no-pic
20409 On Darwin and Mac OS X systems, compile code so that it is not
20410 relocatable, but that its external references are relocatable. The
20411 resulting code is suitable for applications, but not shared
20412 libraries.
20413
20414 -msingle-pic-base
20415 Treat the register used for PIC addressing as read-only, rather
20416 than loading it in the prologue for each function. The runtime
20417 system is responsible for initializing this register with an
20418 appropriate value before execution begins.
20419
20420 -mprioritize-restricted-insns=priority
20421 This option controls the priority that is assigned to dispatch-slot
20422 restricted instructions during the second scheduling pass. The
20423 argument priority takes the value 0, 1, or 2 to assign no, highest,
20424 or second-highest (respectively) priority to dispatch-slot
20425 restricted instructions.
20426
20427 -msched-costly-dep=dependence_type
20428 This option controls which dependences are considered costly by the
20429 target during instruction scheduling. The argument dependence_type
20430 takes one of the following values:
20431
20432 no No dependence is costly.
20433
20434 all All dependences are costly.
20435
20436 true_store_to_load
20437 A true dependence from store to load is costly.
20438
20439 store_to_load
20440 Any dependence from store to load is costly.
20441
20442 number
20443 Any dependence for which the latency is greater than or equal
20444 to number is costly.
20445
20446 -minsert-sched-nops=scheme
20447 This option controls which NOP insertion scheme is used during the
20448 second scheduling pass. The argument scheme takes one of the
20449 following values:
20450
20451 no Don't insert NOPs.
20452
20453 pad Pad with NOPs any dispatch group that has vacant issue slots,
20454 according to the scheduler's grouping.
20455
20456 regroup_exact
20457 Insert NOPs to force costly dependent insns into separate
20458 groups. Insert exactly as many NOPs as needed to force an insn
20459 to a new group, according to the estimated processor grouping.
20460
20461 number
20462 Insert NOPs to force costly dependent insns into separate
20463 groups. Insert number NOPs to force an insn to a new group.
20464
20465 -mcall-sysv
20466 On System V.4 and embedded PowerPC systems compile code using
20467 calling conventions that adhere to the March 1995 draft of the
20468 System V Application Binary Interface, PowerPC processor
20469 supplement. This is the default unless you configured GCC using
20470 powerpc-*-eabiaix.
20471
20472 -mcall-sysv-eabi
20473 -mcall-eabi
20474 Specify both -mcall-sysv and -meabi options.
20475
20476 -mcall-sysv-noeabi
20477 Specify both -mcall-sysv and -mno-eabi options.
20478
20479 -mcall-aixdesc
20480 On System V.4 and embedded PowerPC systems compile code for the AIX
20481 operating system.
20482
20483 -mcall-linux
20484 On System V.4 and embedded PowerPC systems compile code for the
20485 Linux-based GNU system.
20486
20487 -mcall-freebsd
20488 On System V.4 and embedded PowerPC systems compile code for the
20489 FreeBSD operating system.
20490
20491 -mcall-netbsd
20492 On System V.4 and embedded PowerPC systems compile code for the
20493 NetBSD operating system.
20494
20495 -mcall-openbsd
20496 On System V.4 and embedded PowerPC systems compile code for the
20497 OpenBSD operating system.
20498
20499 -mtraceback=traceback_type
20500 Select the type of traceback table. Valid values for traceback_type
20501 are full, part, and no.
20502
20503 -maix-struct-return
20504 Return all structures in memory (as specified by the AIX ABI).
20505
20506 -msvr4-struct-return
20507 Return structures smaller than 8 bytes in registers (as specified
20508 by the SVR4 ABI).
20509
20510 -mabi=abi-type
20511 Extend the current ABI with a particular extension, or remove such
20512 extension. Valid values are altivec, no-altivec, spe, no-spe,
20513 ibmlongdouble, ieeelongdouble, elfv1, elfv2.
20514
20515 -mabi=ibmlongdouble
20516 Change the current ABI to use IBM extended-precision long double.
20517 This is not likely to work if your system defaults to using IEEE
20518 extended-precision long double. If you change the long double type
20519 from IEEE extended-precision, the compiler will issue a warning
20520 unless you use the -Wno-psabi option. Requires -mlong-double-128
20521 to be enabled.
20522
20523 -mabi=ieeelongdouble
20524 Change the current ABI to use IEEE extended-precision long double.
20525 This is not likely to work if your system defaults to using IBM
20526 extended-precision long double. If you change the long double type
20527 from IBM extended-precision, the compiler will issue a warning
20528 unless you use the -Wno-psabi option. Requires -mlong-double-128
20529 to be enabled.
20530
20531 -mabi=elfv1
20532 Change the current ABI to use the ELFv1 ABI. This is the default
20533 ABI for big-endian PowerPC 64-bit Linux. Overriding the default
20534 ABI requires special system support and is likely to fail in
20535 spectacular ways.
20536
20537 -mabi=elfv2
20538 Change the current ABI to use the ELFv2 ABI. This is the default
20539 ABI for little-endian PowerPC 64-bit Linux. Overriding the default
20540 ABI requires special system support and is likely to fail in
20541 spectacular ways.
20542
20543 -mgnu-attribute
20544 -mno-gnu-attribute
20545 Emit .gnu_attribute assembly directives to set tag/value pairs in a
20546 .gnu.attributes section that specify ABI variations in function
20547 parameters or return values.
20548
20549 -mprototype
20550 -mno-prototype
20551 On System V.4 and embedded PowerPC systems assume that all calls to
20552 variable argument functions are properly prototyped. Otherwise,
20553 the compiler must insert an instruction before every non-prototyped
20554 call to set or clear bit 6 of the condition code register ("CR") to
20555 indicate whether floating-point values are passed in the floating-
20556 point registers in case the function takes variable arguments.
20557 With -mprototype, only calls to prototyped variable argument
20558 functions set or clear the bit.
20559
20560 -msim
20561 On embedded PowerPC systems, assume that the startup module is
20562 called sim-crt0.o and that the standard C libraries are libsim.a
20563 and libc.a. This is the default for powerpc-*-eabisim
20564 configurations.
20565
20566 -mmvme
20567 On embedded PowerPC systems, assume that the startup module is
20568 called crt0.o and the standard C libraries are libmvme.a and
20569 libc.a.
20570
20571 -mads
20572 On embedded PowerPC systems, assume that the startup module is
20573 called crt0.o and the standard C libraries are libads.a and libc.a.
20574
20575 -myellowknife
20576 On embedded PowerPC systems, assume that the startup module is
20577 called crt0.o and the standard C libraries are libyk.a and libc.a.
20578
20579 -mvxworks
20580 On System V.4 and embedded PowerPC systems, specify that you are
20581 compiling for a VxWorks system.
20582
20583 -memb
20584 On embedded PowerPC systems, set the "PPC_EMB" bit in the ELF flags
20585 header to indicate that eabi extended relocations are used.
20586
20587 -meabi
20588 -mno-eabi
20589 On System V.4 and embedded PowerPC systems do (do not) adhere to
20590 the Embedded Applications Binary Interface (EABI), which is a set
20591 of modifications to the System V.4 specifications. Selecting
20592 -meabi means that the stack is aligned to an 8-byte boundary, a
20593 function "__eabi" is called from "main" to set up the EABI
20594 environment, and the -msdata option can use both "r2" and "r13" to
20595 point to two separate small data areas. Selecting -mno-eabi means
20596 that the stack is aligned to a 16-byte boundary, no EABI
20597 initialization function is called from "main", and the -msdata
20598 option only uses "r13" to point to a single small data area. The
20599 -meabi option is on by default if you configured GCC using one of
20600 the powerpc*-*-eabi* options.
20601
20602 -msdata=eabi
20603 On System V.4 and embedded PowerPC systems, put small initialized
20604 "const" global and static data in the ".sdata2" section, which is
20605 pointed to by register "r2". Put small initialized non-"const"
20606 global and static data in the ".sdata" section, which is pointed to
20607 by register "r13". Put small uninitialized global and static data
20608 in the ".sbss" section, which is adjacent to the ".sdata" section.
20609 The -msdata=eabi option is incompatible with the -mrelocatable
20610 option. The -msdata=eabi option also sets the -memb option.
20611
20612 -msdata=sysv
20613 On System V.4 and embedded PowerPC systems, put small global and
20614 static data in the ".sdata" section, which is pointed to by
20615 register "r13". Put small uninitialized global and static data in
20616 the ".sbss" section, which is adjacent to the ".sdata" section.
20617 The -msdata=sysv option is incompatible with the -mrelocatable
20618 option.
20619
20620 -msdata=default
20621 -msdata
20622 On System V.4 and embedded PowerPC systems, if -meabi is used,
20623 compile code the same as -msdata=eabi, otherwise compile code the
20624 same as -msdata=sysv.
20625
20626 -msdata=data
20627 On System V.4 and embedded PowerPC systems, put small global data
20628 in the ".sdata" section. Put small uninitialized global data in
20629 the ".sbss" section. Do not use register "r13" to address small
20630 data however. This is the default behavior unless other -msdata
20631 options are used.
20632
20633 -msdata=none
20634 -mno-sdata
20635 On embedded PowerPC systems, put all initialized global and static
20636 data in the ".data" section, and all uninitialized data in the
20637 ".bss" section.
20638
20639 -mreadonly-in-sdata
20640 -mreadonly-in-sdata
20641 Put read-only objects in the ".sdata" section as well. This is the
20642 default.
20643
20644 -mblock-move-inline-limit=num
20645 Inline all block moves (such as calls to "memcpy" or structure
20646 copies) less than or equal to num bytes. The minimum value for num
20647 is 32 bytes on 32-bit targets and 64 bytes on 64-bit targets. The
20648 default value is target-specific.
20649
20650 -mblock-compare-inline-limit=num
20651 Generate non-looping inline code for all block compares (such as
20652 calls to "memcmp" or structure compares) less than or equal to num
20653 bytes. If num is 0, all inline expansion (non-loop and loop) of
20654 block compare is disabled. The default value is target-specific.
20655
20656 -mblock-compare-inline-loop-limit=num
20657 Generate an inline expansion using loop code for all block compares
20658 that are less than or equal to num bytes, but greater than the
20659 limit for non-loop inline block compare expansion. If the block
20660 length is not constant, at most num bytes will be compared before
20661 "memcmp" is called to compare the remainder of the block. The
20662 default value is target-specific.
20663
20664 -mstring-compare-inline-limit=num
20665 Generate at most num pairs of load instructions to compare the
20666 string inline. If the difference or end of string is not found at
20667 the end of the inline compare a call to "strcmp" or "strncmp" will
20668 take care of the rest of the comparison. The default is 8 pairs of
20669 loads, which will compare 64 bytes on a 64-bit target and 32 bytes
20670 on a 32-bit target.
20671
20672 -G num
20673 On embedded PowerPC systems, put global and static items less than
20674 or equal to num bytes into the small data or BSS sections instead
20675 of the normal data or BSS section. By default, num is 8. The -G
20676 num switch is also passed to the linker. All modules should be
20677 compiled with the same -G num value.
20678
20679 -mregnames
20680 -mno-regnames
20681 On System V.4 and embedded PowerPC systems do (do not) emit
20682 register names in the assembly language output using symbolic
20683 forms.
20684
20685 -mlongcall
20686 -mno-longcall
20687 By default assume that all calls are far away so that a longer and
20688 more expensive calling sequence is required. This is required for
20689 calls farther than 32 megabytes (33,554,432 bytes) from the current
20690 location. A short call is generated if the compiler knows the call
20691 cannot be that far away. This setting can be overridden by the
20692 "shortcall" function attribute, or by "#pragma longcall(0)".
20693
20694 Some linkers are capable of detecting out-of-range calls and
20695 generating glue code on the fly. On these systems, long calls are
20696 unnecessary and generate slower code. As of this writing, the AIX
20697 linker can do this, as can the GNU linker for PowerPC/64. It is
20698 planned to add this feature to the GNU linker for 32-bit PowerPC
20699 systems as well.
20700
20701 On Darwin/PPC systems, "#pragma longcall" generates "jbsr callee,
20702 L42", plus a branch island (glue code). The two target addresses
20703 represent the callee and the branch island. The Darwin/PPC linker
20704 prefers the first address and generates a "bl callee" if the PPC
20705 "bl" instruction reaches the callee directly; otherwise, the linker
20706 generates "bl L42" to call the branch island. The branch island is
20707 appended to the body of the calling function; it computes the full
20708 32-bit address of the callee and jumps to it.
20709
20710 On Mach-O (Darwin) systems, this option directs the compiler emit
20711 to the glue for every direct call, and the Darwin linker decides
20712 whether to use or discard it.
20713
20714 In the future, GCC may ignore all longcall specifications when the
20715 linker is known to generate glue.
20716
20717 -mtls-markers
20718 -mno-tls-markers
20719 Mark (do not mark) calls to "__tls_get_addr" with a relocation
20720 specifying the function argument. The relocation allows the linker
20721 to reliably associate function call with argument setup
20722 instructions for TLS optimization, which in turn allows GCC to
20723 better schedule the sequence.
20724
20725 -mrecip
20726 -mno-recip
20727 This option enables use of the reciprocal estimate and reciprocal
20728 square root estimate instructions with additional Newton-Raphson
20729 steps to increase precision instead of doing a divide or square
20730 root and divide for floating-point arguments. You should use the
20731 -ffast-math option when using -mrecip (or at least
20732 -funsafe-math-optimizations, -ffinite-math-only, -freciprocal-math
20733 and -fno-trapping-math). Note that while the throughput of the
20734 sequence is generally higher than the throughput of the non-
20735 reciprocal instruction, the precision of the sequence can be
20736 decreased by up to 2 ulp (i.e. the inverse of 1.0 equals
20737 0.99999994) for reciprocal square roots.
20738
20739 -mrecip=opt
20740 This option controls which reciprocal estimate instructions may be
20741 used. opt is a comma-separated list of options, which may be
20742 preceded by a "!" to invert the option:
20743
20744 all Enable all estimate instructions.
20745
20746 default
20747 Enable the default instructions, equivalent to -mrecip.
20748
20749 none
20750 Disable all estimate instructions, equivalent to -mno-recip.
20751
20752 div Enable the reciprocal approximation instructions for both
20753 single and double precision.
20754
20755 divf
20756 Enable the single-precision reciprocal approximation
20757 instructions.
20758
20759 divd
20760 Enable the double-precision reciprocal approximation
20761 instructions.
20762
20763 rsqrt
20764 Enable the reciprocal square root approximation instructions
20765 for both single and double precision.
20766
20767 rsqrtf
20768 Enable the single-precision reciprocal square root
20769 approximation instructions.
20770
20771 rsqrtd
20772 Enable the double-precision reciprocal square root
20773 approximation instructions.
20774
20775 So, for example, -mrecip=all,!rsqrtd enables all of the reciprocal
20776 estimate instructions, except for the "FRSQRTE", "XSRSQRTEDP", and
20777 "XVRSQRTEDP" instructions which handle the double-precision
20778 reciprocal square root calculations.
20779
20780 -mrecip-precision
20781 -mno-recip-precision
20782 Assume (do not assume) that the reciprocal estimate instructions
20783 provide higher-precision estimates than is mandated by the PowerPC
20784 ABI. Selecting -mcpu=power6, -mcpu=power7 or -mcpu=power8
20785 automatically selects -mrecip-precision. The double-precision
20786 square root estimate instructions are not generated by default on
20787 low-precision machines, since they do not provide an estimate that
20788 converges after three steps.
20789
20790 -mveclibabi=type
20791 Specifies the ABI type to use for vectorizing intrinsics using an
20792 external library. The only type supported at present is mass,
20793 which specifies to use IBM's Mathematical Acceleration Subsystem
20794 (MASS) libraries for vectorizing intrinsics using external
20795 libraries. GCC currently emits calls to "acosd2", "acosf4",
20796 "acoshd2", "acoshf4", "asind2", "asinf4", "asinhd2", "asinhf4",
20797 "atan2d2", "atan2f4", "atand2", "atanf4", "atanhd2", "atanhf4",
20798 "cbrtd2", "cbrtf4", "cosd2", "cosf4", "coshd2", "coshf4", "erfcd2",
20799 "erfcf4", "erfd2", "erff4", "exp2d2", "exp2f4", "expd2", "expf4",
20800 "expm1d2", "expm1f4", "hypotd2", "hypotf4", "lgammad2", "lgammaf4",
20801 "log10d2", "log10f4", "log1pd2", "log1pf4", "log2d2", "log2f4",
20802 "logd2", "logf4", "powd2", "powf4", "sind2", "sinf4", "sinhd2",
20803 "sinhf4", "sqrtd2", "sqrtf4", "tand2", "tanf4", "tanhd2", and
20804 "tanhf4" when generating code for power7. Both -ftree-vectorize
20805 and -funsafe-math-optimizations must also be enabled. The MASS
20806 libraries must be specified at link time.
20807
20808 -mfriz
20809 -mno-friz
20810 Generate (do not generate) the "friz" instruction when the
20811 -funsafe-math-optimizations option is used to optimize rounding of
20812 floating-point values to 64-bit integer and back to floating point.
20813 The "friz" instruction does not return the same value if the
20814 floating-point number is too large to fit in an integer.
20815
20816 -mpointers-to-nested-functions
20817 -mno-pointers-to-nested-functions
20818 Generate (do not generate) code to load up the static chain
20819 register ("r11") when calling through a pointer on AIX and 64-bit
20820 Linux systems where a function pointer points to a 3-word
20821 descriptor giving the function address, TOC value to be loaded in
20822 register "r2", and static chain value to be loaded in register
20823 "r11". The -mpointers-to-nested-functions is on by default. You
20824 cannot call through pointers to nested functions or pointers to
20825 functions compiled in other languages that use the static chain if
20826 you use -mno-pointers-to-nested-functions.
20827
20828 -msave-toc-indirect
20829 -mno-save-toc-indirect
20830 Generate (do not generate) code to save the TOC value in the
20831 reserved stack location in the function prologue if the function
20832 calls through a pointer on AIX and 64-bit Linux systems. If the
20833 TOC value is not saved in the prologue, it is saved just before the
20834 call through the pointer. The -mno-save-toc-indirect option is the
20835 default.
20836
20837 -mcompat-align-parm
20838 -mno-compat-align-parm
20839 Generate (do not generate) code to pass structure parameters with a
20840 maximum alignment of 64 bits, for compatibility with older versions
20841 of GCC.
20842
20843 Older versions of GCC (prior to 4.9.0) incorrectly did not align a
20844 structure parameter on a 128-bit boundary when that structure
20845 contained a member requiring 128-bit alignment. This is corrected
20846 in more recent versions of GCC. This option may be used to
20847 generate code that is compatible with functions compiled with older
20848 versions of GCC.
20849
20850 The -mno-compat-align-parm option is the default.
20851
20852 -mstack-protector-guard=guard
20853 -mstack-protector-guard-reg=reg
20854 -mstack-protector-guard-offset=offset
20855 -mstack-protector-guard-symbol=symbol
20856 Generate stack protection code using canary at guard. Supported
20857 locations are global for global canary or tls for per-thread canary
20858 in the TLS block (the default with GNU libc version 2.4 or later).
20859
20860 With the latter choice the options -mstack-protector-guard-reg=reg
20861 and -mstack-protector-guard-offset=offset furthermore specify which
20862 register to use as base register for reading the canary, and from
20863 what offset from that base register. The default for those is as
20864 specified in the relevant ABI.
20865 -mstack-protector-guard-symbol=symbol overrides the offset with a
20866 symbol reference to a canary in the TLS block.
20867
20868 RX Options
20869
20870 These command-line options are defined for RX targets:
20871
20872 -m64bit-doubles
20873 -m32bit-doubles
20874 Make the "double" data type be 64 bits (-m64bit-doubles) or 32 bits
20875 (-m32bit-doubles) in size. The default is -m32bit-doubles. Note
20876 RX floating-point hardware only works on 32-bit values, which is
20877 why the default is -m32bit-doubles.
20878
20879 -fpu
20880 -nofpu
20881 Enables (-fpu) or disables (-nofpu) the use of RX floating-point
20882 hardware. The default is enabled for the RX600 series and disabled
20883 for the RX200 series.
20884
20885 Floating-point instructions are only generated for 32-bit floating-
20886 point values, however, so the FPU hardware is not used for doubles
20887 if the -m64bit-doubles option is used.
20888
20889 Note If the -fpu option is enabled then -funsafe-math-optimizations
20890 is also enabled automatically. This is because the RX FPU
20891 instructions are themselves unsafe.
20892
20893 -mcpu=name
20894 Selects the type of RX CPU to be targeted. Currently three types
20895 are supported, the generic RX600 and RX200 series hardware and the
20896 specific RX610 CPU. The default is RX600.
20897
20898 The only difference between RX600 and RX610 is that the RX610 does
20899 not support the "MVTIPL" instruction.
20900
20901 The RX200 series does not have a hardware floating-point unit and
20902 so -nofpu is enabled by default when this type is selected.
20903
20904 -mbig-endian-data
20905 -mlittle-endian-data
20906 Store data (but not code) in the big-endian format. The default is
20907 -mlittle-endian-data, i.e. to store data in the little-endian
20908 format.
20909
20910 -msmall-data-limit=N
20911 Specifies the maximum size in bytes of global and static variables
20912 which can be placed into the small data area. Using the small data
20913 area can lead to smaller and faster code, but the size of area is
20914 limited and it is up to the programmer to ensure that the area does
20915 not overflow. Also when the small data area is used one of the
20916 RX's registers (usually "r13") is reserved for use pointing to this
20917 area, so it is no longer available for use by the compiler. This
20918 could result in slower and/or larger code if variables are pushed
20919 onto the stack instead of being held in this register.
20920
20921 Note, common variables (variables that have not been initialized)
20922 and constants are not placed into the small data area as they are
20923 assigned to other sections in the output executable.
20924
20925 The default value is zero, which disables this feature. Note, this
20926 feature is not enabled by default with higher optimization levels
20927 (-O2 etc) because of the potentially detrimental effects of
20928 reserving a register. It is up to the programmer to experiment and
20929 discover whether this feature is of benefit to their program. See
20930 the description of the -mpid option for a description of how the
20931 actual register to hold the small data area pointer is chosen.
20932
20933 -msim
20934 -mno-sim
20935 Use the simulator runtime. The default is to use the libgloss
20936 board-specific runtime.
20937
20938 -mas100-syntax
20939 -mno-as100-syntax
20940 When generating assembler output use a syntax that is compatible
20941 with Renesas's AS100 assembler. This syntax can also be handled by
20942 the GAS assembler, but it has some restrictions so it is not
20943 generated by default.
20944
20945 -mmax-constant-size=N
20946 Specifies the maximum size, in bytes, of a constant that can be
20947 used as an operand in a RX instruction. Although the RX
20948 instruction set does allow constants of up to 4 bytes in length to
20949 be used in instructions, a longer value equates to a longer
20950 instruction. Thus in some circumstances it can be beneficial to
20951 restrict the size of constants that are used in instructions.
20952 Constants that are too big are instead placed into a constant pool
20953 and referenced via register indirection.
20954
20955 The value N can be between 0 and 4. A value of 0 (the default) or
20956 4 means that constants of any size are allowed.
20957
20958 -mrelax
20959 Enable linker relaxation. Linker relaxation is a process whereby
20960 the linker attempts to reduce the size of a program by finding
20961 shorter versions of various instructions. Disabled by default.
20962
20963 -mint-register=N
20964 Specify the number of registers to reserve for fast interrupt
20965 handler functions. The value N can be between 0 and 4. A value of
20966 1 means that register "r13" is reserved for the exclusive use of
20967 fast interrupt handlers. A value of 2 reserves "r13" and "r12". A
20968 value of 3 reserves "r13", "r12" and "r11", and a value of 4
20969 reserves "r13" through "r10". A value of 0, the default, does not
20970 reserve any registers.
20971
20972 -msave-acc-in-interrupts
20973 Specifies that interrupt handler functions should preserve the
20974 accumulator register. This is only necessary if normal code might
20975 use the accumulator register, for example because it performs
20976 64-bit multiplications. The default is to ignore the accumulator
20977 as this makes the interrupt handlers faster.
20978
20979 -mpid
20980 -mno-pid
20981 Enables the generation of position independent data. When enabled
20982 any access to constant data is done via an offset from a base
20983 address held in a register. This allows the location of constant
20984 data to be determined at run time without requiring the executable
20985 to be relocated, which is a benefit to embedded applications with
20986 tight memory constraints. Data that can be modified is not
20987 affected by this option.
20988
20989 Note, using this feature reserves a register, usually "r13", for
20990 the constant data base address. This can result in slower and/or
20991 larger code, especially in complicated functions.
20992
20993 The actual register chosen to hold the constant data base address
20994 depends upon whether the -msmall-data-limit and/or the
20995 -mint-register command-line options are enabled. Starting with
20996 register "r13" and proceeding downwards, registers are allocated
20997 first to satisfy the requirements of -mint-register, then -mpid and
20998 finally -msmall-data-limit. Thus it is possible for the small data
20999 area register to be "r8" if both -mint-register=4 and -mpid are
21000 specified on the command line.
21001
21002 By default this feature is not enabled. The default can be
21003 restored via the -mno-pid command-line option.
21004
21005 -mno-warn-multiple-fast-interrupts
21006 -mwarn-multiple-fast-interrupts
21007 Prevents GCC from issuing a warning message if it finds more than
21008 one fast interrupt handler when it is compiling a file. The
21009 default is to issue a warning for each extra fast interrupt handler
21010 found, as the RX only supports one such interrupt.
21011
21012 -mallow-string-insns
21013 -mno-allow-string-insns
21014 Enables or disables the use of the string manipulation instructions
21015 "SMOVF", "SCMPU", "SMOVB", "SMOVU", "SUNTIL" "SWHILE" and also the
21016 "RMPA" instruction. These instructions may prefetch data, which is
21017 not safe to do if accessing an I/O register. (See section 12.2.7
21018 of the RX62N Group User's Manual for more information).
21019
21020 The default is to allow these instructions, but it is not possible
21021 for GCC to reliably detect all circumstances where a string
21022 instruction might be used to access an I/O register, so their use
21023 cannot be disabled automatically. Instead it is reliant upon the
21024 programmer to use the -mno-allow-string-insns option if their
21025 program accesses I/O space.
21026
21027 When the instructions are enabled GCC defines the C preprocessor
21028 symbol "__RX_ALLOW_STRING_INSNS__", otherwise it defines the symbol
21029 "__RX_DISALLOW_STRING_INSNS__".
21030
21031 -mjsr
21032 -mno-jsr
21033 Use only (or not only) "JSR" instructions to access functions.
21034 This option can be used when code size exceeds the range of "BSR"
21035 instructions. Note that -mno-jsr does not mean to not use "JSR"
21036 but instead means that any type of branch may be used.
21037
21038 Note: The generic GCC command-line option -ffixed-reg has special
21039 significance to the RX port when used with the "interrupt" function
21040 attribute. This attribute indicates a function intended to process
21041 fast interrupts. GCC ensures that it only uses the registers "r10",
21042 "r11", "r12" and/or "r13" and only provided that the normal use of the
21043 corresponding registers have been restricted via the -ffixed-reg or
21044 -mint-register command-line options.
21045
21046 S/390 and zSeries Options
21047
21048 These are the -m options defined for the S/390 and zSeries
21049 architecture.
21050
21051 -mhard-float
21052 -msoft-float
21053 Use (do not use) the hardware floating-point instructions and
21054 registers for floating-point operations. When -msoft-float is
21055 specified, functions in libgcc.a are used to perform floating-point
21056 operations. When -mhard-float is specified, the compiler generates
21057 IEEE floating-point instructions. This is the default.
21058
21059 -mhard-dfp
21060 -mno-hard-dfp
21061 Use (do not use) the hardware decimal-floating-point instructions
21062 for decimal-floating-point operations. When -mno-hard-dfp is
21063 specified, functions in libgcc.a are used to perform decimal-
21064 floating-point operations. When -mhard-dfp is specified, the
21065 compiler generates decimal-floating-point hardware instructions.
21066 This is the default for -march=z9-ec or higher.
21067
21068 -mlong-double-64
21069 -mlong-double-128
21070 These switches control the size of "long double" type. A size of 64
21071 bits makes the "long double" type equivalent to the "double" type.
21072 This is the default.
21073
21074 -mbackchain
21075 -mno-backchain
21076 Store (do not store) the address of the caller's frame as backchain
21077 pointer into the callee's stack frame. A backchain may be needed
21078 to allow debugging using tools that do not understand DWARF call
21079 frame information. When -mno-packed-stack is in effect, the
21080 backchain pointer is stored at the bottom of the stack frame; when
21081 -mpacked-stack is in effect, the backchain is placed into the
21082 topmost word of the 96/160 byte register save area.
21083
21084 In general, code compiled with -mbackchain is call-compatible with
21085 code compiled with -mmo-backchain; however, use of the backchain
21086 for debugging purposes usually requires that the whole binary is
21087 built with -mbackchain. Note that the combination of -mbackchain,
21088 -mpacked-stack and -mhard-float is not supported. In order to
21089 build a linux kernel use -msoft-float.
21090
21091 The default is to not maintain the backchain.
21092
21093 -mpacked-stack
21094 -mno-packed-stack
21095 Use (do not use) the packed stack layout. When -mno-packed-stack
21096 is specified, the compiler uses the all fields of the 96/160 byte
21097 register save area only for their default purpose; unused fields
21098 still take up stack space. When -mpacked-stack is specified,
21099 register save slots are densely packed at the top of the register
21100 save area; unused space is reused for other purposes, allowing for
21101 more efficient use of the available stack space. However, when
21102 -mbackchain is also in effect, the topmost word of the save area is
21103 always used to store the backchain, and the return address register
21104 is always saved two words below the backchain.
21105
21106 As long as the stack frame backchain is not used, code generated
21107 with -mpacked-stack is call-compatible with code generated with
21108 -mno-packed-stack. Note that some non-FSF releases of GCC 2.95 for
21109 S/390 or zSeries generated code that uses the stack frame backchain
21110 at run time, not just for debugging purposes. Such code is not
21111 call-compatible with code compiled with -mpacked-stack. Also, note
21112 that the combination of -mbackchain, -mpacked-stack and
21113 -mhard-float is not supported. In order to build a linux kernel
21114 use -msoft-float.
21115
21116 The default is to not use the packed stack layout.
21117
21118 -msmall-exec
21119 -mno-small-exec
21120 Generate (or do not generate) code using the "bras" instruction to
21121 do subroutine calls. This only works reliably if the total
21122 executable size does not exceed 64k. The default is to use the
21123 "basr" instruction instead, which does not have this limitation.
21124
21125 -m64
21126 -m31
21127 When -m31 is specified, generate code compliant to the GNU/Linux
21128 for S/390 ABI. When -m64 is specified, generate code compliant to
21129 the GNU/Linux for zSeries ABI. This allows GCC in particular to
21130 generate 64-bit instructions. For the s390 targets, the default is
21131 -m31, while the s390x targets default to -m64.
21132
21133 -mzarch
21134 -mesa
21135 When -mzarch is specified, generate code using the instructions
21136 available on z/Architecture. When -mesa is specified, generate
21137 code using the instructions available on ESA/390. Note that -mesa
21138 is not possible with -m64. When generating code compliant to the
21139 GNU/Linux for S/390 ABI, the default is -mesa. When generating
21140 code compliant to the GNU/Linux for zSeries ABI, the default is
21141 -mzarch.
21142
21143 -mhtm
21144 -mno-htm
21145 The -mhtm option enables a set of builtins making use of
21146 instructions available with the transactional execution facility
21147 introduced with the IBM zEnterprise EC12 machine generation S/390
21148 System z Built-in Functions. -mhtm is enabled by default when
21149 using -march=zEC12.
21150
21151 -mvx
21152 -mno-vx
21153 When -mvx is specified, generate code using the instructions
21154 available with the vector extension facility introduced with the
21155 IBM z13 machine generation. This option changes the ABI for some
21156 vector type values with regard to alignment and calling
21157 conventions. In case vector type values are being used in an ABI-
21158 relevant context a GAS .gnu_attribute command will be added to mark
21159 the resulting binary with the ABI used. -mvx is enabled by default
21160 when using -march=z13.
21161
21162 -mzvector
21163 -mno-zvector
21164 The -mzvector option enables vector language extensions and
21165 builtins using instructions available with the vector extension
21166 facility introduced with the IBM z13 machine generation. This
21167 option adds support for vector to be used as a keyword to define
21168 vector type variables and arguments. vector is only available when
21169 GNU extensions are enabled. It will not be expanded when
21170 requesting strict standard compliance e.g. with -std=c99. In
21171 addition to the GCC low-level builtins -mzvector enables a set of
21172 builtins added for compatibility with AltiVec-style implementations
21173 like Power and Cell. In order to make use of these builtins the
21174 header file vecintrin.h needs to be included. -mzvector is
21175 disabled by default.
21176
21177 -mmvcle
21178 -mno-mvcle
21179 Generate (or do not generate) code using the "mvcle" instruction to
21180 perform block moves. When -mno-mvcle is specified, use a "mvc"
21181 loop instead. This is the default unless optimizing for size.
21182
21183 -mdebug
21184 -mno-debug
21185 Print (or do not print) additional debug information when
21186 compiling. The default is to not print debug information.
21187
21188 -march=cpu-type
21189 Generate code that runs on cpu-type, which is the name of a system
21190 representing a certain processor type. Possible values for cpu-
21191 type are z900/arch5, z990/arch6, z9-109, z9-ec/arch7, z10/arch8,
21192 z196/arch9, zEC12, z13/arch11, z14/arch12, and native.
21193
21194 The default is -march=z900. g5/arch3 and g6 are deprecated and
21195 will be removed with future releases.
21196
21197 Specifying native as cpu type can be used to select the best
21198 architecture option for the host processor. -march=native has no
21199 effect if GCC does not recognize the processor.
21200
21201 -mtune=cpu-type
21202 Tune to cpu-type everything applicable about the generated code,
21203 except for the ABI and the set of available instructions. The list
21204 of cpu-type values is the same as for -march. The default is the
21205 value used for -march.
21206
21207 -mtpf-trace
21208 -mno-tpf-trace
21209 Generate code that adds (does not add) in TPF OS specific branches
21210 to trace routines in the operating system. This option is off by
21211 default, even when compiling for the TPF OS.
21212
21213 -mfused-madd
21214 -mno-fused-madd
21215 Generate code that uses (does not use) the floating-point multiply
21216 and accumulate instructions. These instructions are generated by
21217 default if hardware floating point is used.
21218
21219 -mwarn-framesize=framesize
21220 Emit a warning if the current function exceeds the given frame
21221 size. Because this is a compile-time check it doesn't need to be a
21222 real problem when the program runs. It is intended to identify
21223 functions that most probably cause a stack overflow. It is useful
21224 to be used in an environment with limited stack size e.g. the linux
21225 kernel.
21226
21227 -mwarn-dynamicstack
21228 Emit a warning if the function calls "alloca" or uses dynamically-
21229 sized arrays. This is generally a bad idea with a limited stack
21230 size.
21231
21232 -mstack-guard=stack-guard
21233 -mstack-size=stack-size
21234 If these options are provided the S/390 back end emits additional
21235 instructions in the function prologue that trigger a trap if the
21236 stack size is stack-guard bytes above the stack-size (remember that
21237 the stack on S/390 grows downward). If the stack-guard option is
21238 omitted the smallest power of 2 larger than the frame size of the
21239 compiled function is chosen. These options are intended to be used
21240 to help debugging stack overflow problems. The additionally
21241 emitted code causes only little overhead and hence can also be used
21242 in production-like systems without greater performance degradation.
21243 The given values have to be exact powers of 2 and stack-size has to
21244 be greater than stack-guard without exceeding 64k. In order to be
21245 efficient the extra code makes the assumption that the stack starts
21246 at an address aligned to the value given by stack-size. The stack-
21247 guard option can only be used in conjunction with stack-size.
21248
21249 -mhotpatch=pre-halfwords,post-halfwords
21250 If the hotpatch option is enabled, a "hot-patching" function
21251 prologue is generated for all functions in the compilation unit.
21252 The funtion label is prepended with the given number of two-byte
21253 NOP instructions (pre-halfwords, maximum 1000000). After the
21254 label, 2 * post-halfwords bytes are appended, using the largest NOP
21255 like instructions the architecture allows (maximum 1000000).
21256
21257 If both arguments are zero, hotpatching is disabled.
21258
21259 This option can be overridden for individual functions with the
21260 "hotpatch" attribute.
21261
21262 Score Options
21263
21264 These options are defined for Score implementations:
21265
21266 -meb
21267 Compile code for big-endian mode. This is the default.
21268
21269 -mel
21270 Compile code for little-endian mode.
21271
21272 -mnhwloop
21273 Disable generation of "bcnz" instructions.
21274
21275 -muls
21276 Enable generation of unaligned load and store instructions.
21277
21278 -mmac
21279 Enable the use of multiply-accumulate instructions. Disabled by
21280 default.
21281
21282 -mscore5
21283 Specify the SCORE5 as the target architecture.
21284
21285 -mscore5u
21286 Specify the SCORE5U of the target architecture.
21287
21288 -mscore7
21289 Specify the SCORE7 as the target architecture. This is the default.
21290
21291 -mscore7d
21292 Specify the SCORE7D as the target architecture.
21293
21294 SH Options
21295
21296 These -m options are defined for the SH implementations:
21297
21298 -m1 Generate code for the SH1.
21299
21300 -m2 Generate code for the SH2.
21301
21302 -m2e
21303 Generate code for the SH2e.
21304
21305 -m2a-nofpu
21306 Generate code for the SH2a without FPU, or for a SH2a-FPU in such a
21307 way that the floating-point unit is not used.
21308
21309 -m2a-single-only
21310 Generate code for the SH2a-FPU, in such a way that no double-
21311 precision floating-point operations are used.
21312
21313 -m2a-single
21314 Generate code for the SH2a-FPU assuming the floating-point unit is
21315 in single-precision mode by default.
21316
21317 -m2a
21318 Generate code for the SH2a-FPU assuming the floating-point unit is
21319 in double-precision mode by default.
21320
21321 -m3 Generate code for the SH3.
21322
21323 -m3e
21324 Generate code for the SH3e.
21325
21326 -m4-nofpu
21327 Generate code for the SH4 without a floating-point unit.
21328
21329 -m4-single-only
21330 Generate code for the SH4 with a floating-point unit that only
21331 supports single-precision arithmetic.
21332
21333 -m4-single
21334 Generate code for the SH4 assuming the floating-point unit is in
21335 single-precision mode by default.
21336
21337 -m4 Generate code for the SH4.
21338
21339 -m4-100
21340 Generate code for SH4-100.
21341
21342 -m4-100-nofpu
21343 Generate code for SH4-100 in such a way that the floating-point
21344 unit is not used.
21345
21346 -m4-100-single
21347 Generate code for SH4-100 assuming the floating-point unit is in
21348 single-precision mode by default.
21349
21350 -m4-100-single-only
21351 Generate code for SH4-100 in such a way that no double-precision
21352 floating-point operations are used.
21353
21354 -m4-200
21355 Generate code for SH4-200.
21356
21357 -m4-200-nofpu
21358 Generate code for SH4-200 without in such a way that the floating-
21359 point unit is not used.
21360
21361 -m4-200-single
21362 Generate code for SH4-200 assuming the floating-point unit is in
21363 single-precision mode by default.
21364
21365 -m4-200-single-only
21366 Generate code for SH4-200 in such a way that no double-precision
21367 floating-point operations are used.
21368
21369 -m4-300
21370 Generate code for SH4-300.
21371
21372 -m4-300-nofpu
21373 Generate code for SH4-300 without in such a way that the floating-
21374 point unit is not used.
21375
21376 -m4-300-single
21377 Generate code for SH4-300 in such a way that no double-precision
21378 floating-point operations are used.
21379
21380 -m4-300-single-only
21381 Generate code for SH4-300 in such a way that no double-precision
21382 floating-point operations are used.
21383
21384 -m4-340
21385 Generate code for SH4-340 (no MMU, no FPU).
21386
21387 -m4-500
21388 Generate code for SH4-500 (no FPU). Passes -isa=sh4-nofpu to the
21389 assembler.
21390
21391 -m4a-nofpu
21392 Generate code for the SH4al-dsp, or for a SH4a in such a way that
21393 the floating-point unit is not used.
21394
21395 -m4a-single-only
21396 Generate code for the SH4a, in such a way that no double-precision
21397 floating-point operations are used.
21398
21399 -m4a-single
21400 Generate code for the SH4a assuming the floating-point unit is in
21401 single-precision mode by default.
21402
21403 -m4a
21404 Generate code for the SH4a.
21405
21406 -m4al
21407 Same as -m4a-nofpu, except that it implicitly passes -dsp to the
21408 assembler. GCC doesn't generate any DSP instructions at the
21409 moment.
21410
21411 -mb Compile code for the processor in big-endian mode.
21412
21413 -ml Compile code for the processor in little-endian mode.
21414
21415 -mdalign
21416 Align doubles at 64-bit boundaries. Note that this changes the
21417 calling conventions, and thus some functions from the standard C
21418 library do not work unless you recompile it first with -mdalign.
21419
21420 -mrelax
21421 Shorten some address references at link time, when possible; uses
21422 the linker option -relax.
21423
21424 -mbigtable
21425 Use 32-bit offsets in "switch" tables. The default is to use
21426 16-bit offsets.
21427
21428 -mbitops
21429 Enable the use of bit manipulation instructions on SH2A.
21430
21431 -mfmovd
21432 Enable the use of the instruction "fmovd". Check -mdalign for
21433 alignment constraints.
21434
21435 -mrenesas
21436 Comply with the calling conventions defined by Renesas.
21437
21438 -mno-renesas
21439 Comply with the calling conventions defined for GCC before the
21440 Renesas conventions were available. This option is the default for
21441 all targets of the SH toolchain.
21442
21443 -mnomacsave
21444 Mark the "MAC" register as call-clobbered, even if -mrenesas is
21445 given.
21446
21447 -mieee
21448 -mno-ieee
21449 Control the IEEE compliance of floating-point comparisons, which
21450 affects the handling of cases where the result of a comparison is
21451 unordered. By default -mieee is implicitly enabled. If
21452 -ffinite-math-only is enabled -mno-ieee is implicitly set, which
21453 results in faster floating-point greater-equal and less-equal
21454 comparisons. The implicit settings can be overridden by specifying
21455 either -mieee or -mno-ieee.
21456
21457 -minline-ic_invalidate
21458 Inline code to invalidate instruction cache entries after setting
21459 up nested function trampolines. This option has no effect if
21460 -musermode is in effect and the selected code generation option
21461 (e.g. -m4) does not allow the use of the "icbi" instruction. If
21462 the selected code generation option does not allow the use of the
21463 "icbi" instruction, and -musermode is not in effect, the inlined
21464 code manipulates the instruction cache address array directly with
21465 an associative write. This not only requires privileged mode at
21466 run time, but it also fails if the cache line had been mapped via
21467 the TLB and has become unmapped.
21468
21469 -misize
21470 Dump instruction size and location in the assembly code.
21471
21472 -mpadstruct
21473 This option is deprecated. It pads structures to multiple of 4
21474 bytes, which is incompatible with the SH ABI.
21475
21476 -matomic-model=model
21477 Sets the model of atomic operations and additional parameters as a
21478 comma separated list. For details on the atomic built-in functions
21479 see __atomic Builtins. The following models and parameters are
21480 supported:
21481
21482 none
21483 Disable compiler generated atomic sequences and emit library
21484 calls for atomic operations. This is the default if the target
21485 is not "sh*-*-linux*".
21486
21487 soft-gusa
21488 Generate GNU/Linux compatible gUSA software atomic sequences
21489 for the atomic built-in functions. The generated atomic
21490 sequences require additional support from the
21491 interrupt/exception handling code of the system and are only
21492 suitable for SH3* and SH4* single-core systems. This option is
21493 enabled by default when the target is "sh*-*-linux*" and SH3*
21494 or SH4*. When the target is SH4A, this option also partially
21495 utilizes the hardware atomic instructions "movli.l" and
21496 "movco.l" to create more efficient code, unless strict is
21497 specified.
21498
21499 soft-tcb
21500 Generate software atomic sequences that use a variable in the
21501 thread control block. This is a variation of the gUSA
21502 sequences which can also be used on SH1* and SH2* targets. The
21503 generated atomic sequences require additional support from the
21504 interrupt/exception handling code of the system and are only
21505 suitable for single-core systems. When using this model, the
21506 gbr-offset= parameter has to be specified as well.
21507
21508 soft-imask
21509 Generate software atomic sequences that temporarily disable
21510 interrupts by setting "SR.IMASK = 1111". This model works only
21511 when the program runs in privileged mode and is only suitable
21512 for single-core systems. Additional support from the
21513 interrupt/exception handling code of the system is not
21514 required. This model is enabled by default when the target is
21515 "sh*-*-linux*" and SH1* or SH2*.
21516
21517 hard-llcs
21518 Generate hardware atomic sequences using the "movli.l" and
21519 "movco.l" instructions only. This is only available on SH4A
21520 and is suitable for multi-core systems. Since the hardware
21521 instructions support only 32 bit atomic variables access to 8
21522 or 16 bit variables is emulated with 32 bit accesses. Code
21523 compiled with this option is also compatible with other
21524 software atomic model interrupt/exception handling systems if
21525 executed on an SH4A system. Additional support from the
21526 interrupt/exception handling code of the system is not required
21527 for this model.
21528
21529 gbr-offset=
21530 This parameter specifies the offset in bytes of the variable in
21531 the thread control block structure that should be used by the
21532 generated atomic sequences when the soft-tcb model has been
21533 selected. For other models this parameter is ignored. The
21534 specified value must be an integer multiple of four and in the
21535 range 0-1020.
21536
21537 strict
21538 This parameter prevents mixed usage of multiple atomic models,
21539 even if they are compatible, and makes the compiler generate
21540 atomic sequences of the specified model only.
21541
21542 -mtas
21543 Generate the "tas.b" opcode for "__atomic_test_and_set". Notice
21544 that depending on the particular hardware and software
21545 configuration this can degrade overall performance due to the
21546 operand cache line flushes that are implied by the "tas.b"
21547 instruction. On multi-core SH4A processors the "tas.b" instruction
21548 must be used with caution since it can result in data corruption
21549 for certain cache configurations.
21550
21551 -mprefergot
21552 When generating position-independent code, emit function calls
21553 using the Global Offset Table instead of the Procedure Linkage
21554 Table.
21555
21556 -musermode
21557 -mno-usermode
21558 Don't allow (allow) the compiler generating privileged mode code.
21559 Specifying -musermode also implies -mno-inline-ic_invalidate if the
21560 inlined code would not work in user mode. -musermode is the
21561 default when the target is "sh*-*-linux*". If the target is SH1*
21562 or SH2* -musermode has no effect, since there is no user mode.
21563
21564 -multcost=number
21565 Set the cost to assume for a multiply insn.
21566
21567 -mdiv=strategy
21568 Set the division strategy to be used for integer division
21569 operations. strategy can be one of:
21570
21571 call-div1
21572 Calls a library function that uses the single-step division
21573 instruction "div1" to perform the operation. Division by zero
21574 calculates an unspecified result and does not trap. This is
21575 the default except for SH4, SH2A and SHcompact.
21576
21577 call-fp
21578 Calls a library function that performs the operation in double
21579 precision floating point. Division by zero causes a floating-
21580 point exception. This is the default for SHcompact with FPU.
21581 Specifying this for targets that do not have a double precision
21582 FPU defaults to "call-div1".
21583
21584 call-table
21585 Calls a library function that uses a lookup table for small
21586 divisors and the "div1" instruction with case distinction for
21587 larger divisors. Division by zero calculates an unspecified
21588 result and does not trap. This is the default for SH4.
21589 Specifying this for targets that do not have dynamic shift
21590 instructions defaults to "call-div1".
21591
21592 When a division strategy has not been specified the default
21593 strategy is selected based on the current target. For SH2A the
21594 default strategy is to use the "divs" and "divu" instructions
21595 instead of library function calls.
21596
21597 -maccumulate-outgoing-args
21598 Reserve space once for outgoing arguments in the function prologue
21599 rather than around each call. Generally beneficial for performance
21600 and size. Also needed for unwinding to avoid changing the stack
21601 frame around conditional code.
21602
21603 -mdivsi3_libfunc=name
21604 Set the name of the library function used for 32-bit signed
21605 division to name. This only affects the name used in the call
21606 division strategies, and the compiler still expects the same sets
21607 of input/output/clobbered registers as if this option were not
21608 present.
21609
21610 -mfixed-range=register-range
21611 Generate code treating the given register range as fixed registers.
21612 A fixed register is one that the register allocator can not use.
21613 This is useful when compiling kernel code. A register range is
21614 specified as two registers separated by a dash. Multiple register
21615 ranges can be specified separated by a comma.
21616
21617 -mbranch-cost=num
21618 Assume num to be the cost for a branch instruction. Higher numbers
21619 make the compiler try to generate more branch-free code if
21620 possible. If not specified the value is selected depending on the
21621 processor type that is being compiled for.
21622
21623 -mzdcbranch
21624 -mno-zdcbranch
21625 Assume (do not assume) that zero displacement conditional branch
21626 instructions "bt" and "bf" are fast. If -mzdcbranch is specified,
21627 the compiler prefers zero displacement branch code sequences. This
21628 is enabled by default when generating code for SH4 and SH4A. It
21629 can be explicitly disabled by specifying -mno-zdcbranch.
21630
21631 -mcbranch-force-delay-slot
21632 Force the usage of delay slots for conditional branches, which
21633 stuffs the delay slot with a "nop" if a suitable instruction cannot
21634 be found. By default this option is disabled. It can be enabled
21635 to work around hardware bugs as found in the original SH7055.
21636
21637 -mfused-madd
21638 -mno-fused-madd
21639 Generate code that uses (does not use) the floating-point multiply
21640 and accumulate instructions. These instructions are generated by
21641 default if hardware floating point is used. The machine-dependent
21642 -mfused-madd option is now mapped to the machine-independent
21643 -ffp-contract=fast option, and -mno-fused-madd is mapped to
21644 -ffp-contract=off.
21645
21646 -mfsca
21647 -mno-fsca
21648 Allow or disallow the compiler to emit the "fsca" instruction for
21649 sine and cosine approximations. The option -mfsca must be used in
21650 combination with -funsafe-math-optimizations. It is enabled by
21651 default when generating code for SH4A. Using -mno-fsca disables
21652 sine and cosine approximations even if -funsafe-math-optimizations
21653 is in effect.
21654
21655 -mfsrra
21656 -mno-fsrra
21657 Allow or disallow the compiler to emit the "fsrra" instruction for
21658 reciprocal square root approximations. The option -mfsrra must be
21659 used in combination with -funsafe-math-optimizations and
21660 -ffinite-math-only. It is enabled by default when generating code
21661 for SH4A. Using -mno-fsrra disables reciprocal square root
21662 approximations even if -funsafe-math-optimizations and
21663 -ffinite-math-only are in effect.
21664
21665 -mpretend-cmove
21666 Prefer zero-displacement conditional branches for conditional move
21667 instruction patterns. This can result in faster code on the SH4
21668 processor.
21669
21670 -mfdpic
21671 Generate code using the FDPIC ABI.
21672
21673 Solaris 2 Options
21674
21675 These -m options are supported on Solaris 2:
21676
21677 -mclear-hwcap
21678 -mclear-hwcap tells the compiler to remove the hardware
21679 capabilities generated by the Solaris assembler. This is only
21680 necessary when object files use ISA extensions not supported by the
21681 current machine, but check at runtime whether or not to use them.
21682
21683 -mimpure-text
21684 -mimpure-text, used in addition to -shared, tells the compiler to
21685 not pass -z text to the linker when linking a shared object. Using
21686 this option, you can link position-dependent code into a shared
21687 object.
21688
21689 -mimpure-text suppresses the "relocations remain against
21690 allocatable but non-writable sections" linker error message.
21691 However, the necessary relocations trigger copy-on-write, and the
21692 shared object is not actually shared across processes. Instead of
21693 using -mimpure-text, you should compile all source code with -fpic
21694 or -fPIC.
21695
21696 These switches are supported in addition to the above on Solaris 2:
21697
21698 -pthreads
21699 This is a synonym for -pthread.
21700
21701 SPARC Options
21702
21703 These -m options are supported on the SPARC:
21704
21705 -mno-app-regs
21706 -mapp-regs
21707 Specify -mapp-regs to generate output using the global registers 2
21708 through 4, which the SPARC SVR4 ABI reserves for applications.
21709 Like the global register 1, each global register 2 through 4 is
21710 then treated as an allocable register that is clobbered by function
21711 calls. This is the default.
21712
21713 To be fully SVR4 ABI-compliant at the cost of some performance
21714 loss, specify -mno-app-regs. You should compile libraries and
21715 system software with this option.
21716
21717 -mflat
21718 -mno-flat
21719 With -mflat, the compiler does not generate save/restore
21720 instructions and uses a "flat" or single register window model.
21721 This model is compatible with the regular register window model.
21722 The local registers and the input registers (0--5) are still
21723 treated as "call-saved" registers and are saved on the stack as
21724 needed.
21725
21726 With -mno-flat (the default), the compiler generates save/restore
21727 instructions (except for leaf functions). This is the normal
21728 operating mode.
21729
21730 -mfpu
21731 -mhard-float
21732 Generate output containing floating-point instructions. This is
21733 the default.
21734
21735 -mno-fpu
21736 -msoft-float
21737 Generate output containing library calls for floating point.
21738 Warning: the requisite libraries are not available for all SPARC
21739 targets. Normally the facilities of the machine's usual C compiler
21740 are used, but this cannot be done directly in cross-compilation.
21741 You must make your own arrangements to provide suitable library
21742 functions for cross-compilation. The embedded targets sparc-*-aout
21743 and sparclite-*-* do provide software floating-point support.
21744
21745 -msoft-float changes the calling convention in the output file;
21746 therefore, it is only useful if you compile all of a program with
21747 this option. In particular, you need to compile libgcc.a, the
21748 library that comes with GCC, with -msoft-float in order for this to
21749 work.
21750
21751 -mhard-quad-float
21752 Generate output containing quad-word (long double) floating-point
21753 instructions.
21754
21755 -msoft-quad-float
21756 Generate output containing library calls for quad-word (long
21757 double) floating-point instructions. The functions called are
21758 those specified in the SPARC ABI. This is the default.
21759
21760 As of this writing, there are no SPARC implementations that have
21761 hardware support for the quad-word floating-point instructions.
21762 They all invoke a trap handler for one of these instructions, and
21763 then the trap handler emulates the effect of the instruction.
21764 Because of the trap handler overhead, this is much slower than
21765 calling the ABI library routines. Thus the -msoft-quad-float
21766 option is the default.
21767
21768 -mno-unaligned-doubles
21769 -munaligned-doubles
21770 Assume that doubles have 8-byte alignment. This is the default.
21771
21772 With -munaligned-doubles, GCC assumes that doubles have 8-byte
21773 alignment only if they are contained in another type, or if they
21774 have an absolute address. Otherwise, it assumes they have 4-byte
21775 alignment. Specifying this option avoids some rare compatibility
21776 problems with code generated by other compilers. It is not the
21777 default because it results in a performance loss, especially for
21778 floating-point code.
21779
21780 -muser-mode
21781 -mno-user-mode
21782 Do not generate code that can only run in supervisor mode. This is
21783 relevant only for the "casa" instruction emitted for the LEON3
21784 processor. This is the default.
21785
21786 -mfaster-structs
21787 -mno-faster-structs
21788 With -mfaster-structs, the compiler assumes that structures should
21789 have 8-byte alignment. This enables the use of pairs of "ldd" and
21790 "std" instructions for copies in structure assignment, in place of
21791 twice as many "ld" and "st" pairs. However, the use of this
21792 changed alignment directly violates the SPARC ABI. Thus, it's
21793 intended only for use on targets where the developer acknowledges
21794 that their resulting code is not directly in line with the rules of
21795 the ABI.
21796
21797 -mstd-struct-return
21798 -mno-std-struct-return
21799 With -mstd-struct-return, the compiler generates checking code in
21800 functions returning structures or unions to detect size mismatches
21801 between the two sides of function calls, as per the 32-bit ABI.
21802
21803 The default is -mno-std-struct-return. This option has no effect
21804 in 64-bit mode.
21805
21806 -mlra
21807 -mno-lra
21808 Enable Local Register Allocation. This is the default for SPARC
21809 since GCC 7 so -mno-lra needs to be passed to get old Reload.
21810
21811 -mcpu=cpu_type
21812 Set the instruction set, register set, and instruction scheduling
21813 parameters for machine type cpu_type. Supported values for
21814 cpu_type are v7, cypress, v8, supersparc, hypersparc, leon, leon3,
21815 leon3v7, sparclite, f930, f934, sparclite86x, sparclet, tsc701, v9,
21816 ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4,
21817 niagara7 and m8.
21818
21819 Native Solaris and GNU/Linux toolchains also support the value
21820 native, which selects the best architecture option for the host
21821 processor. -mcpu=native has no effect if GCC does not recognize
21822 the processor.
21823
21824 Default instruction scheduling parameters are used for values that
21825 select an architecture and not an implementation. These are v7,
21826 v8, sparclite, sparclet, v9.
21827
21828 Here is a list of each supported architecture and their supported
21829 implementations.
21830
21831 v7 cypress, leon3v7
21832
21833 v8 supersparc, hypersparc, leon, leon3
21834
21835 sparclite
21836 f930, f934, sparclite86x
21837
21838 sparclet
21839 tsc701
21840
21841 v9 ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4,
21842 niagara7, m8
21843
21844 By default (unless configured otherwise), GCC generates code for
21845 the V7 variant of the SPARC architecture. With -mcpu=cypress, the
21846 compiler additionally optimizes it for the Cypress CY7C602 chip, as
21847 used in the SPARCStation/SPARCServer 3xx series. This is also
21848 appropriate for the older SPARCStation 1, 2, IPX etc.
21849
21850 With -mcpu=v8, GCC generates code for the V8 variant of the SPARC
21851 architecture. The only difference from V7 code is that the
21852 compiler emits the integer multiply and integer divide instructions
21853 which exist in SPARC-V8 but not in SPARC-V7. With
21854 -mcpu=supersparc, the compiler additionally optimizes it for the
21855 SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000
21856 series.
21857
21858 With -mcpu=sparclite, GCC generates code for the SPARClite variant
21859 of the SPARC architecture. This adds the integer multiply, integer
21860 divide step and scan ("ffs") instructions which exist in SPARClite
21861 but not in SPARC-V7. With -mcpu=f930, the compiler additionally
21862 optimizes it for the Fujitsu MB86930 chip, which is the original
21863 SPARClite, with no FPU. With -mcpu=f934, the compiler additionally
21864 optimizes it for the Fujitsu MB86934 chip, which is the more recent
21865 SPARClite with FPU.
21866
21867 With -mcpu=sparclet, GCC generates code for the SPARClet variant of
21868 the SPARC architecture. This adds the integer multiply,
21869 multiply/accumulate, integer divide step and scan ("ffs")
21870 instructions which exist in SPARClet but not in SPARC-V7. With
21871 -mcpu=tsc701, the compiler additionally optimizes it for the TEMIC
21872 SPARClet chip.
21873
21874 With -mcpu=v9, GCC generates code for the V9 variant of the SPARC
21875 architecture. This adds 64-bit integer and floating-point move
21876 instructions, 3 additional floating-point condition code registers
21877 and conditional move instructions. With -mcpu=ultrasparc, the
21878 compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi
21879 chips. With -mcpu=ultrasparc3, the compiler additionally optimizes
21880 it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ chips. With
21881 -mcpu=niagara, the compiler additionally optimizes it for Sun
21882 UltraSPARC T1 chips. With -mcpu=niagara2, the compiler
21883 additionally optimizes it for Sun UltraSPARC T2 chips. With
21884 -mcpu=niagara3, the compiler additionally optimizes it for Sun
21885 UltraSPARC T3 chips. With -mcpu=niagara4, the compiler
21886 additionally optimizes it for Sun UltraSPARC T4 chips. With
21887 -mcpu=niagara7, the compiler additionally optimizes it for Oracle
21888 SPARC M7 chips. With -mcpu=m8, the compiler additionally optimizes
21889 it for Oracle M8 chips.
21890
21891 -mtune=cpu_type
21892 Set the instruction scheduling parameters for machine type
21893 cpu_type, but do not set the instruction set or register set that
21894 the option -mcpu=cpu_type does.
21895
21896 The same values for -mcpu=cpu_type can be used for -mtune=cpu_type,
21897 but the only useful values are those that select a particular CPU
21898 implementation. Those are cypress, supersparc, hypersparc, leon,
21899 leon3, leon3v7, f930, f934, sparclite86x, tsc701, ultrasparc,
21900 ultrasparc3, niagara, niagara2, niagara3, niagara4, niagara7 and
21901 m8. With native Solaris and GNU/Linux toolchains, native can also
21902 be used.
21903
21904 -mv8plus
21905 -mno-v8plus
21906 With -mv8plus, GCC generates code for the SPARC-V8+ ABI. The
21907 difference from the V8 ABI is that the global and out registers are
21908 considered 64 bits wide. This is enabled by default on Solaris in
21909 32-bit mode for all SPARC-V9 processors.
21910
21911 -mvis
21912 -mno-vis
21913 With -mvis, GCC generates code that takes advantage of the
21914 UltraSPARC Visual Instruction Set extensions. The default is
21915 -mno-vis.
21916
21917 -mvis2
21918 -mno-vis2
21919 With -mvis2, GCC generates code that takes advantage of version 2.0
21920 of the UltraSPARC Visual Instruction Set extensions. The default
21921 is -mvis2 when targeting a cpu that supports such instructions,
21922 such as UltraSPARC-III and later. Setting -mvis2 also sets -mvis.
21923
21924 -mvis3
21925 -mno-vis3
21926 With -mvis3, GCC generates code that takes advantage of version 3.0
21927 of the UltraSPARC Visual Instruction Set extensions. The default
21928 is -mvis3 when targeting a cpu that supports such instructions,
21929 such as niagara-3 and later. Setting -mvis3 also sets -mvis2 and
21930 -mvis.
21931
21932 -mvis4
21933 -mno-vis4
21934 With -mvis4, GCC generates code that takes advantage of version 4.0
21935 of the UltraSPARC Visual Instruction Set extensions. The default
21936 is -mvis4 when targeting a cpu that supports such instructions,
21937 such as niagara-7 and later. Setting -mvis4 also sets -mvis3,
21938 -mvis2 and -mvis.
21939
21940 -mvis4b
21941 -mno-vis4b
21942 With -mvis4b, GCC generates code that takes advantage of version
21943 4.0 of the UltraSPARC Visual Instruction Set extensions, plus the
21944 additional VIS instructions introduced in the Oracle SPARC
21945 Architecture 2017. The default is -mvis4b when targeting a cpu
21946 that supports such instructions, such as m8 and later. Setting
21947 -mvis4b also sets -mvis4, -mvis3, -mvis2 and -mvis.
21948
21949 -mcbcond
21950 -mno-cbcond
21951 With -mcbcond, GCC generates code that takes advantage of the
21952 UltraSPARC Compare-and-Branch-on-Condition instructions. The
21953 default is -mcbcond when targeting a CPU that supports such
21954 instructions, such as Niagara-4 and later.
21955
21956 -mfmaf
21957 -mno-fmaf
21958 With -mfmaf, GCC generates code that takes advantage of the
21959 UltraSPARC Fused Multiply-Add Floating-point instructions. The
21960 default is -mfmaf when targeting a CPU that supports such
21961 instructions, such as Niagara-3 and later.
21962
21963 -mfsmuld
21964 -mno-fsmuld
21965 With -mfsmuld, GCC generates code that takes advantage of the
21966 Floating-point Multiply Single to Double (FsMULd) instruction. The
21967 default is -mfsmuld when targeting a CPU supporting the
21968 architecture versions V8 or V9 with FPU except -mcpu=leon.
21969
21970 -mpopc
21971 -mno-popc
21972 With -mpopc, GCC generates code that takes advantage of the
21973 UltraSPARC Population Count instruction. The default is -mpopc
21974 when targeting a CPU that supports such an instruction, such as
21975 Niagara-2 and later.
21976
21977 -msubxc
21978 -mno-subxc
21979 With -msubxc, GCC generates code that takes advantage of the
21980 UltraSPARC Subtract-Extended-with-Carry instruction. The default
21981 is -msubxc when targeting a CPU that supports such an instruction,
21982 such as Niagara-7 and later.
21983
21984 -mfix-at697f
21985 Enable the documented workaround for the single erratum of the
21986 Atmel AT697F processor (which corresponds to erratum #13 of the
21987 AT697E processor).
21988
21989 -mfix-ut699
21990 Enable the documented workarounds for the floating-point errata and
21991 the data cache nullify errata of the UT699 processor.
21992
21993 -mfix-ut700
21994 Enable the documented workaround for the back-to-back store errata
21995 of the UT699E/UT700 processor.
21996
21997 -mfix-gr712rc
21998 Enable the documented workaround for the back-to-back store errata
21999 of the GR712RC processor.
22000
22001 These -m options are supported in addition to the above on SPARC-V9
22002 processors in 64-bit environments:
22003
22004 -m32
22005 -m64
22006 Generate code for a 32-bit or 64-bit environment. The 32-bit
22007 environment sets int, long and pointer to 32 bits. The 64-bit
22008 environment sets int to 32 bits and long and pointer to 64 bits.
22009
22010 -mcmodel=which
22011 Set the code model to one of
22012
22013 medlow
22014 The Medium/Low code model: 64-bit addresses, programs must be
22015 linked in the low 32 bits of memory. Programs can be
22016 statically or dynamically linked.
22017
22018 medmid
22019 The Medium/Middle code model: 64-bit addresses, programs must
22020 be linked in the low 44 bits of memory, the text and data
22021 segments must be less than 2GB in size and the data segment
22022 must be located within 2GB of the text segment.
22023
22024 medany
22025 The Medium/Anywhere code model: 64-bit addresses, programs may
22026 be linked anywhere in memory, the text and data segments must
22027 be less than 2GB in size and the data segment must be located
22028 within 2GB of the text segment.
22029
22030 embmedany
22031 The Medium/Anywhere code model for embedded systems: 64-bit
22032 addresses, the text and data segments must be less than 2GB in
22033 size, both starting anywhere in memory (determined at link
22034 time). The global register %g4 points to the base of the data
22035 segment. Programs are statically linked and PIC is not
22036 supported.
22037
22038 -mmemory-model=mem-model
22039 Set the memory model in force on the processor to one of
22040
22041 default
22042 The default memory model for the processor and operating
22043 system.
22044
22045 rmo Relaxed Memory Order
22046
22047 pso Partial Store Order
22048
22049 tso Total Store Order
22050
22051 sc Sequential Consistency
22052
22053 These memory models are formally defined in Appendix D of the
22054 SPARC-V9 architecture manual, as set in the processor's "PSTATE.MM"
22055 field.
22056
22057 -mstack-bias
22058 -mno-stack-bias
22059 With -mstack-bias, GCC assumes that the stack pointer, and frame
22060 pointer if present, are offset by -2047 which must be added back
22061 when making stack frame references. This is the default in 64-bit
22062 mode. Otherwise, assume no such offset is present.
22063
22064 SPU Options
22065
22066 These -m options are supported on the SPU:
22067
22068 -mwarn-reloc
22069 -merror-reloc
22070 The loader for SPU does not handle dynamic relocations. By
22071 default, GCC gives an error when it generates code that requires a
22072 dynamic relocation. -mno-error-reloc disables the error,
22073 -mwarn-reloc generates a warning instead.
22074
22075 -msafe-dma
22076 -munsafe-dma
22077 Instructions that initiate or test completion of DMA must not be
22078 reordered with respect to loads and stores of the memory that is
22079 being accessed. With -munsafe-dma you must use the "volatile"
22080 keyword to protect memory accesses, but that can lead to
22081 inefficient code in places where the memory is known to not change.
22082 Rather than mark the memory as volatile, you can use -msafe-dma to
22083 tell the compiler to treat the DMA instructions as potentially
22084 affecting all memory.
22085
22086 -mbranch-hints
22087 By default, GCC generates a branch hint instruction to avoid
22088 pipeline stalls for always-taken or probably-taken branches. A
22089 hint is not generated closer than 8 instructions away from its
22090 branch. There is little reason to disable them, except for
22091 debugging purposes, or to make an object a little bit smaller.
22092
22093 -msmall-mem
22094 -mlarge-mem
22095 By default, GCC generates code assuming that addresses are never
22096 larger than 18 bits. With -mlarge-mem code is generated that
22097 assumes a full 32-bit address.
22098
22099 -mstdmain
22100 By default, GCC links against startup code that assumes the SPU-
22101 style main function interface (which has an unconventional
22102 parameter list). With -mstdmain, GCC links your program against
22103 startup code that assumes a C99-style interface to "main",
22104 including a local copy of "argv" strings.
22105
22106 -mfixed-range=register-range
22107 Generate code treating the given register range as fixed registers.
22108 A fixed register is one that the register allocator cannot use.
22109 This is useful when compiling kernel code. A register range is
22110 specified as two registers separated by a dash. Multiple register
22111 ranges can be specified separated by a comma.
22112
22113 -mea32
22114 -mea64
22115 Compile code assuming that pointers to the PPU address space
22116 accessed via the "__ea" named address space qualifier are either 32
22117 or 64 bits wide. The default is 32 bits. As this is an ABI-
22118 changing option, all object code in an executable must be compiled
22119 with the same setting.
22120
22121 -maddress-space-conversion
22122 -mno-address-space-conversion
22123 Allow/disallow treating the "__ea" address space as superset of the
22124 generic address space. This enables explicit type casts between
22125 "__ea" and generic pointer as well as implicit conversions of
22126 generic pointers to "__ea" pointers. The default is to allow
22127 address space pointer conversions.
22128
22129 -mcache-size=cache-size
22130 This option controls the version of libgcc that the compiler links
22131 to an executable and selects a software-managed cache for accessing
22132 variables in the "__ea" address space with a particular cache size.
22133 Possible options for cache-size are 8, 16, 32, 64 and 128. The
22134 default cache size is 64KB.
22135
22136 -matomic-updates
22137 -mno-atomic-updates
22138 This option controls the version of libgcc that the compiler links
22139 to an executable and selects whether atomic updates to the
22140 software-managed cache of PPU-side variables are used. If you use
22141 atomic updates, changes to a PPU variable from SPU code using the
22142 "__ea" named address space qualifier do not interfere with changes
22143 to other PPU variables residing in the same cache line from PPU
22144 code. If you do not use atomic updates, such interference may
22145 occur; however, writing back cache lines is more efficient. The
22146 default behavior is to use atomic updates.
22147
22148 -mdual-nops
22149 -mdual-nops=n
22150 By default, GCC inserts NOPs to increase dual issue when it expects
22151 it to increase performance. n can be a value from 0 to 10. A
22152 smaller n inserts fewer NOPs. 10 is the default, 0 is the same as
22153 -mno-dual-nops. Disabled with -Os.
22154
22155 -mhint-max-nops=n
22156 Maximum number of NOPs to insert for a branch hint. A branch hint
22157 must be at least 8 instructions away from the branch it is
22158 affecting. GCC inserts up to n NOPs to enforce this, otherwise it
22159 does not generate the branch hint.
22160
22161 -mhint-max-distance=n
22162 The encoding of the branch hint instruction limits the hint to be
22163 within 256 instructions of the branch it is affecting. By default,
22164 GCC makes sure it is within 125.
22165
22166 -msafe-hints
22167 Work around a hardware bug that causes the SPU to stall
22168 indefinitely. By default, GCC inserts the "hbrp" instruction to
22169 make sure this stall won't happen.
22170
22171 Options for System V
22172
22173 These additional options are available on System V Release 4 for
22174 compatibility with other compilers on those systems:
22175
22176 -G Create a shared object. It is recommended that -symbolic or
22177 -shared be used instead.
22178
22179 -Qy Identify the versions of each tool used by the compiler, in a
22180 ".ident" assembler directive in the output.
22181
22182 -Qn Refrain from adding ".ident" directives to the output file (this is
22183 the default).
22184
22185 -YP,dirs
22186 Search the directories dirs, and no others, for libraries specified
22187 with -l.
22188
22189 -Ym,dir
22190 Look in the directory dir to find the M4 preprocessor. The
22191 assembler uses this option.
22192
22193 TILE-Gx Options
22194
22195 These -m options are supported on the TILE-Gx:
22196
22197 -mcmodel=small
22198 Generate code for the small model. The distance for direct calls
22199 is limited to 500M in either direction. PC-relative addresses are
22200 32 bits. Absolute addresses support the full address range.
22201
22202 -mcmodel=large
22203 Generate code for the large model. There is no limitation on call
22204 distance, pc-relative addresses, or absolute addresses.
22205
22206 -mcpu=name
22207 Selects the type of CPU to be targeted. Currently the only
22208 supported type is tilegx.
22209
22210 -m32
22211 -m64
22212 Generate code for a 32-bit or 64-bit environment. The 32-bit
22213 environment sets int, long, and pointer to 32 bits. The 64-bit
22214 environment sets int to 32 bits and long and pointer to 64 bits.
22215
22216 -mbig-endian
22217 -mlittle-endian
22218 Generate code in big/little endian mode, respectively.
22219
22220 TILEPro Options
22221
22222 These -m options are supported on the TILEPro:
22223
22224 -mcpu=name
22225 Selects the type of CPU to be targeted. Currently the only
22226 supported type is tilepro.
22227
22228 -m32
22229 Generate code for a 32-bit environment, which sets int, long, and
22230 pointer to 32 bits. This is the only supported behavior so the
22231 flag is essentially ignored.
22232
22233 V850 Options
22234
22235 These -m options are defined for V850 implementations:
22236
22237 -mlong-calls
22238 -mno-long-calls
22239 Treat all calls as being far away (near). If calls are assumed to
22240 be far away, the compiler always loads the function's address into
22241 a register, and calls indirect through the pointer.
22242
22243 -mno-ep
22244 -mep
22245 Do not optimize (do optimize) basic blocks that use the same index
22246 pointer 4 or more times to copy pointer into the "ep" register, and
22247 use the shorter "sld" and "sst" instructions. The -mep option is
22248 on by default if you optimize.
22249
22250 -mno-prolog-function
22251 -mprolog-function
22252 Do not use (do use) external functions to save and restore
22253 registers at the prologue and epilogue of a function. The external
22254 functions are slower, but use less code space if more than one
22255 function saves the same number of registers. The -mprolog-function
22256 option is on by default if you optimize.
22257
22258 -mspace
22259 Try to make the code as small as possible. At present, this just
22260 turns on the -mep and -mprolog-function options.
22261
22262 -mtda=n
22263 Put static or global variables whose size is n bytes or less into
22264 the tiny data area that register "ep" points to. The tiny data
22265 area can hold up to 256 bytes in total (128 bytes for byte
22266 references).
22267
22268 -msda=n
22269 Put static or global variables whose size is n bytes or less into
22270 the small data area that register "gp" points to. The small data
22271 area can hold up to 64 kilobytes.
22272
22273 -mzda=n
22274 Put static or global variables whose size is n bytes or less into
22275 the first 32 kilobytes of memory.
22276
22277 -mv850
22278 Specify that the target processor is the V850.
22279
22280 -mv850e3v5
22281 Specify that the target processor is the V850E3V5. The
22282 preprocessor constant "__v850e3v5__" is defined if this option is
22283 used.
22284
22285 -mv850e2v4
22286 Specify that the target processor is the V850E3V5. This is an
22287 alias for the -mv850e3v5 option.
22288
22289 -mv850e2v3
22290 Specify that the target processor is the V850E2V3. The
22291 preprocessor constant "__v850e2v3__" is defined if this option is
22292 used.
22293
22294 -mv850e2
22295 Specify that the target processor is the V850E2. The preprocessor
22296 constant "__v850e2__" is defined if this option is used.
22297
22298 -mv850e1
22299 Specify that the target processor is the V850E1. The preprocessor
22300 constants "__v850e1__" and "__v850e__" are defined if this option
22301 is used.
22302
22303 -mv850es
22304 Specify that the target processor is the V850ES. This is an alias
22305 for the -mv850e1 option.
22306
22307 -mv850e
22308 Specify that the target processor is the V850E. The preprocessor
22309 constant "__v850e__" is defined if this option is used.
22310
22311 If neither -mv850 nor -mv850e nor -mv850e1 nor -mv850e2 nor
22312 -mv850e2v3 nor -mv850e3v5 are defined then a default target
22313 processor is chosen and the relevant __v850*__ preprocessor
22314 constant is defined.
22315
22316 The preprocessor constants "__v850" and "__v851__" are always
22317 defined, regardless of which processor variant is the target.
22318
22319 -mdisable-callt
22320 -mno-disable-callt
22321 This option suppresses generation of the "CALLT" instruction for
22322 the v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the
22323 v850 architecture.
22324
22325 This option is enabled by default when the RH850 ABI is in use (see
22326 -mrh850-abi), and disabled by default when the GCC ABI is in use.
22327 If "CALLT" instructions are being generated then the C preprocessor
22328 symbol "__V850_CALLT__" is defined.
22329
22330 -mrelax
22331 -mno-relax
22332 Pass on (or do not pass on) the -mrelax command-line option to the
22333 assembler.
22334
22335 -mlong-jumps
22336 -mno-long-jumps
22337 Disable (or re-enable) the generation of PC-relative jump
22338 instructions.
22339
22340 -msoft-float
22341 -mhard-float
22342 Disable (or re-enable) the generation of hardware floating point
22343 instructions. This option is only significant when the target
22344 architecture is V850E2V3 or higher. If hardware floating point
22345 instructions are being generated then the C preprocessor symbol
22346 "__FPU_OK__" is defined, otherwise the symbol "__NO_FPU__" is
22347 defined.
22348
22349 -mloop
22350 Enables the use of the e3v5 LOOP instruction. The use of this
22351 instruction is not enabled by default when the e3v5 architecture is
22352 selected because its use is still experimental.
22353
22354 -mrh850-abi
22355 -mghs
22356 Enables support for the RH850 version of the V850 ABI. This is the
22357 default. With this version of the ABI the following rules apply:
22358
22359 * Integer sized structures and unions are returned via a memory
22360 pointer rather than a register.
22361
22362 * Large structures and unions (more than 8 bytes in size) are
22363 passed by value.
22364
22365 * Functions are aligned to 16-bit boundaries.
22366
22367 * The -m8byte-align command-line option is supported.
22368
22369 * The -mdisable-callt command-line option is enabled by default.
22370 The -mno-disable-callt command-line option is not supported.
22371
22372 When this version of the ABI is enabled the C preprocessor symbol
22373 "__V850_RH850_ABI__" is defined.
22374
22375 -mgcc-abi
22376 Enables support for the old GCC version of the V850 ABI. With this
22377 version of the ABI the following rules apply:
22378
22379 * Integer sized structures and unions are returned in register
22380 "r10".
22381
22382 * Large structures and unions (more than 8 bytes in size) are
22383 passed by reference.
22384
22385 * Functions are aligned to 32-bit boundaries, unless optimizing
22386 for size.
22387
22388 * The -m8byte-align command-line option is not supported.
22389
22390 * The -mdisable-callt command-line option is supported but not
22391 enabled by default.
22392
22393 When this version of the ABI is enabled the C preprocessor symbol
22394 "__V850_GCC_ABI__" is defined.
22395
22396 -m8byte-align
22397 -mno-8byte-align
22398 Enables support for "double" and "long long" types to be aligned on
22399 8-byte boundaries. The default is to restrict the alignment of all
22400 objects to at most 4-bytes. When -m8byte-align is in effect the C
22401 preprocessor symbol "__V850_8BYTE_ALIGN__" is defined.
22402
22403 -mbig-switch
22404 Generate code suitable for big switch tables. Use this option only
22405 if the assembler/linker complain about out of range branches within
22406 a switch table.
22407
22408 -mapp-regs
22409 This option causes r2 and r5 to be used in the code generated by
22410 the compiler. This setting is the default.
22411
22412 -mno-app-regs
22413 This option causes r2 and r5 to be treated as fixed registers.
22414
22415 VAX Options
22416
22417 These -m options are defined for the VAX:
22418
22419 -munix
22420 Do not output certain jump instructions ("aobleq" and so on) that
22421 the Unix assembler for the VAX cannot handle across long ranges.
22422
22423 -mgnu
22424 Do output those jump instructions, on the assumption that the GNU
22425 assembler is being used.
22426
22427 -mg Output code for G-format floating-point numbers instead of
22428 D-format.
22429
22430 Visium Options
22431
22432 -mdebug
22433 A program which performs file I/O and is destined to run on an MCM
22434 target should be linked with this option. It causes the libraries
22435 libc.a and libdebug.a to be linked. The program should be run on
22436 the target under the control of the GDB remote debugging stub.
22437
22438 -msim
22439 A program which performs file I/O and is destined to run on the
22440 simulator should be linked with option. This causes libraries
22441 libc.a and libsim.a to be linked.
22442
22443 -mfpu
22444 -mhard-float
22445 Generate code containing floating-point instructions. This is the
22446 default.
22447
22448 -mno-fpu
22449 -msoft-float
22450 Generate code containing library calls for floating-point.
22451
22452 -msoft-float changes the calling convention in the output file;
22453 therefore, it is only useful if you compile all of a program with
22454 this option. In particular, you need to compile libgcc.a, the
22455 library that comes with GCC, with -msoft-float in order for this to
22456 work.
22457
22458 -mcpu=cpu_type
22459 Set the instruction set, register set, and instruction scheduling
22460 parameters for machine type cpu_type. Supported values for
22461 cpu_type are mcm, gr5 and gr6.
22462
22463 mcm is a synonym of gr5 present for backward compatibility.
22464
22465 By default (unless configured otherwise), GCC generates code for
22466 the GR5 variant of the Visium architecture.
22467
22468 With -mcpu=gr6, GCC generates code for the GR6 variant of the
22469 Visium architecture. The only difference from GR5 code is that the
22470 compiler will generate block move instructions.
22471
22472 -mtune=cpu_type
22473 Set the instruction scheduling parameters for machine type
22474 cpu_type, but do not set the instruction set or register set that
22475 the option -mcpu=cpu_type would.
22476
22477 -msv-mode
22478 Generate code for the supervisor mode, where there are no
22479 restrictions on the access to general registers. This is the
22480 default.
22481
22482 -muser-mode
22483 Generate code for the user mode, where the access to some general
22484 registers is forbidden: on the GR5, registers r24 to r31 cannot be
22485 accessed in this mode; on the GR6, only registers r29 to r31 are
22486 affected.
22487
22488 VMS Options
22489
22490 These -m options are defined for the VMS implementations:
22491
22492 -mvms-return-codes
22493 Return VMS condition codes from "main". The default is to return
22494 POSIX-style condition (e.g. error) codes.
22495
22496 -mdebug-main=prefix
22497 Flag the first routine whose name starts with prefix as the main
22498 routine for the debugger.
22499
22500 -mmalloc64
22501 Default to 64-bit memory allocation routines.
22502
22503 -mpointer-size=size
22504 Set the default size of pointers. Possible options for size are 32
22505 or short for 32 bit pointers, 64 or long for 64 bit pointers, and
22506 no for supporting only 32 bit pointers. The later option disables
22507 "pragma pointer_size".
22508
22509 VxWorks Options
22510
22511 The options in this section are defined for all VxWorks targets.
22512 Options specific to the target hardware are listed with the other
22513 options for that target.
22514
22515 -mrtp
22516 GCC can generate code for both VxWorks kernels and real time
22517 processes (RTPs). This option switches from the former to the
22518 latter. It also defines the preprocessor macro "__RTP__".
22519
22520 -non-static
22521 Link an RTP executable against shared libraries rather than static
22522 libraries. The options -static and -shared can also be used for
22523 RTPs; -static is the default.
22524
22525 -Bstatic
22526 -Bdynamic
22527 These options are passed down to the linker. They are defined for
22528 compatibility with Diab.
22529
22530 -Xbind-lazy
22531 Enable lazy binding of function calls. This option is equivalent
22532 to -Wl,-z,now and is defined for compatibility with Diab.
22533
22534 -Xbind-now
22535 Disable lazy binding of function calls. This option is the default
22536 and is defined for compatibility with Diab.
22537
22538 x86 Options
22539
22540 These -m options are defined for the x86 family of computers.
22541
22542 -march=cpu-type
22543 Generate instructions for the machine type cpu-type. In contrast
22544 to -mtune=cpu-type, which merely tunes the generated code for the
22545 specified cpu-type, -march=cpu-type allows GCC to generate code
22546 that may not run at all on processors other than the one indicated.
22547 Specifying -march=cpu-type implies -mtune=cpu-type.
22548
22549 The choices for cpu-type are:
22550
22551 native
22552 This selects the CPU to generate code for at compilation time
22553 by determining the processor type of the compiling machine.
22554 Using -march=native enables all instruction subsets supported
22555 by the local machine (hence the result might not run on
22556 different machines). Using -mtune=native produces code
22557 optimized for the local machine under the constraints of the
22558 selected instruction set.
22559
22560 x86-64
22561 A generic CPU with 64-bit extensions.
22562
22563 i386
22564 Original Intel i386 CPU.
22565
22566 i486
22567 Intel i486 CPU. (No scheduling is implemented for this chip.)
22568
22569 i586
22570 pentium
22571 Intel Pentium CPU with no MMX support.
22572
22573 lakemont
22574 Intel Lakemont MCU, based on Intel Pentium CPU.
22575
22576 pentium-mmx
22577 Intel Pentium MMX CPU, based on Pentium core with MMX
22578 instruction set support.
22579
22580 pentiumpro
22581 Intel Pentium Pro CPU.
22582
22583 i686
22584 When used with -march, the Pentium Pro instruction set is used,
22585 so the code runs on all i686 family chips. When used with
22586 -mtune, it has the same meaning as generic.
22587
22588 pentium2
22589 Intel Pentium II CPU, based on Pentium Pro core with MMX
22590 instruction set support.
22591
22592 pentium3
22593 pentium3m
22594 Intel Pentium III CPU, based on Pentium Pro core with MMX and
22595 SSE instruction set support.
22596
22597 pentium-m
22598 Intel Pentium M; low-power version of Intel Pentium III CPU
22599 with MMX, SSE and SSE2 instruction set support. Used by
22600 Centrino notebooks.
22601
22602 pentium4
22603 pentium4m
22604 Intel Pentium 4 CPU with MMX, SSE and SSE2 instruction set
22605 support.
22606
22607 prescott
22608 Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2 and
22609 SSE3 instruction set support.
22610
22611 nocona
22612 Improved version of Intel Pentium 4 CPU with 64-bit extensions,
22613 MMX, SSE, SSE2 and SSE3 instruction set support.
22614
22615 core2
22616 Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3
22617 and SSSE3 instruction set support.
22618
22619 nehalem
22620 Intel Nehalem CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3,
22621 SSSE3, SSE4.1, SSE4.2 and POPCNT instruction set support.
22622
22623 westmere
22624 Intel Westmere CPU with 64-bit extensions, MMX, SSE, SSE2,
22625 SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES and PCLMUL instruction
22626 set support.
22627
22628 sandybridge
22629 Intel Sandy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2,
22630 SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AES and PCLMUL
22631 instruction set support.
22632
22633 ivybridge
22634 Intel Ivy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2,
22635 SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AES, PCLMUL,
22636 FSGSBASE, RDRND and F16C instruction set support.
22637
22638 haswell
22639 Intel Haswell CPU with 64-bit extensions, MOVBE, MMX, SSE,
22640 SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES,
22641 PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2 and F16C instruction
22642 set support.
22643
22644 broadwell
22645 Intel Broadwell CPU with 64-bit extensions, MOVBE, MMX, SSE,
22646 SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES,
22647 PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX and
22648 PREFETCHW instruction set support.
22649
22650 skylake
22651 Intel Skylake CPU with 64-bit extensions, MOVBE, MMX, SSE,
22652 SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES,
22653 PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX,
22654 PREFETCHW, CLFLUSHOPT, XSAVEC and XSAVES instruction set
22655 support.
22656
22657 bonnell
22658 Intel Bonnell CPU with 64-bit extensions, MOVBE, MMX, SSE,
22659 SSE2, SSE3 and SSSE3 instruction set support.
22660
22661 silvermont
22662 Intel Silvermont CPU with 64-bit extensions, MOVBE, MMX, SSE,
22663 SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PCLMUL and
22664 RDRND instruction set support.
22665
22666 knl Intel Knight's Landing CPU with 64-bit extensions, MOVBE, MMX,
22667 SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES,
22668 PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX,
22669 PREFETCHW, AVX512F, AVX512PF, AVX512ER and AVX512CD instruction
22670 set support.
22671
22672 knm Intel Knights Mill CPU with 64-bit extensions, MOVBE, MMX, SSE,
22673 SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES,
22674 PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX,
22675 PREFETCHW, AVX512F, AVX512PF, AVX512ER, AVX512CD, AVX5124VNNIW,
22676 AVX5124FMAPS and AVX512VPOPCNTDQ instruction set support.
22677
22678 skylake-avx512
22679 Intel Skylake Server CPU with 64-bit extensions, MOVBE, MMX,
22680 SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2,
22681 AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED,
22682 ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, CLWB,
22683 AVX512VL, AVX512BW, AVX512DQ and AVX512CD instruction set
22684 support.
22685
22686 cannonlake
22687 Intel Cannonlake Server CPU with 64-bit extensions, MOVBE, MMX,
22688 SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2,
22689 AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED,
22690 ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL,
22691 AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI, AVX512IFMA, SHA and
22692 UMIP instruction set support.
22693
22694 icelake-client
22695 Intel Icelake Client CPU with 64-bit extensions, MOVBE, MMX,
22696 SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2,
22697 AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED,
22698 ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL,
22699 AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI, AVX512IFMA, SHA,
22700 CLWB, UMIP, RDPID, GFNI, AVX512VBMI2, AVX512VPOPCNTDQ,
22701 AVX512BITALG, AVX512VNNI, VPCLMULQDQ, VAES instruction set
22702 support.
22703
22704 icelake-server
22705 Intel Icelake Server CPU with 64-bit extensions, MOVBE, MMX,
22706 SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2,
22707 AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED,
22708 ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL,
22709 AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI, AVX512IFMA, SHA,
22710 CLWB, UMIP, RDPID, GFNI, AVX512VBMI2, AVX512VPOPCNTDQ,
22711 AVX512BITALG, AVX512VNNI, VPCLMULQDQ, VAES, PCONFIG and
22712 WBNOINVD instruction set support.
22713
22714 k6 AMD K6 CPU with MMX instruction set support.
22715
22716 k6-2
22717 k6-3
22718 Improved versions of AMD K6 CPU with MMX and 3DNow! instruction
22719 set support.
22720
22721 athlon
22722 athlon-tbird
22723 AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow! and SSE
22724 prefetch instructions support.
22725
22726 athlon-4
22727 athlon-xp
22728 athlon-mp
22729 Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow! and
22730 full SSE instruction set support.
22731
22732 k8
22733 opteron
22734 athlon64
22735 athlon-fx
22736 Processors based on the AMD K8 core with x86-64 instruction set
22737 support, including the AMD Opteron, Athlon 64, and Athlon 64 FX
22738 processors. (This supersets MMX, SSE, SSE2, 3DNow!, enhanced
22739 3DNow! and 64-bit instruction set extensions.)
22740
22741 k8-sse3
22742 opteron-sse3
22743 athlon64-sse3
22744 Improved versions of AMD K8 cores with SSE3 instruction set
22745 support.
22746
22747 amdfam10
22748 barcelona
22749 CPUs based on AMD Family 10h cores with x86-64 instruction set
22750 support. (This supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!,
22751 enhanced 3DNow!, ABM and 64-bit instruction set extensions.)
22752
22753 bdver1
22754 CPUs based on AMD Family 15h cores with x86-64 instruction set
22755 support. (This supersets FMA4, AVX, XOP, LWP, AES, PCL_MUL,
22756 CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM
22757 and 64-bit instruction set extensions.)
22758
22759 bdver2
22760 AMD Family 15h core based CPUs with x86-64 instruction set
22761 support. (This supersets BMI, TBM, F16C, FMA, FMA4, AVX, XOP,
22762 LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
22763 SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions.)
22764
22765 bdver3
22766 AMD Family 15h core based CPUs with x86-64 instruction set
22767 support. (This supersets BMI, TBM, F16C, FMA, FMA4, FSGSBASE,
22768 AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
22769 SSSE3, SSE4.1, SSE4.2, ABM and 64-bit instruction set
22770 extensions.
22771
22772 bdver4
22773 AMD Family 15h core based CPUs with x86-64 instruction set
22774 support. (This supersets BMI, BMI2, TBM, F16C, FMA, FMA4,
22775 FSGSBASE, AVX, AVX2, XOP, LWP, AES, PCL_MUL, CX16, MOVBE, MMX,
22776 SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit
22777 instruction set extensions.
22778
22779 znver1
22780 AMD Family 17h core based CPUs with x86-64 instruction set
22781 support. (This supersets BMI, BMI2, F16C, FMA, FSGSBASE, AVX,
22782 AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES, PCL_MUL, CX16,
22783 MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM,
22784 XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, and 64-bit instruction set
22785 extensions.
22786
22787 btver1
22788 CPUs based on AMD Family 14h cores with x86-64 instruction set
22789 support. (This supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A,
22790 CX16, ABM and 64-bit instruction set extensions.)
22791
22792 btver2
22793 CPUs based on AMD Family 16h cores with x86-64 instruction set
22794 support. This includes MOVBE, F16C, BMI, AVX, PCL_MUL, AES,
22795 SSE4.2, SSE4.1, CX16, ABM, SSE4A, SSSE3, SSE3, SSE2, SSE, MMX
22796 and 64-bit instruction set extensions.
22797
22798 winchip-c6
22799 IDT WinChip C6 CPU, dealt in same way as i486 with additional
22800 MMX instruction set support.
22801
22802 winchip2
22803 IDT WinChip 2 CPU, dealt in same way as i486 with additional
22804 MMX and 3DNow! instruction set support.
22805
22806 c3 VIA C3 CPU with MMX and 3DNow! instruction set support. (No
22807 scheduling is implemented for this chip.)
22808
22809 c3-2
22810 VIA C3-2 (Nehemiah/C5XL) CPU with MMX and SSE instruction set
22811 support. (No scheduling is implemented for this chip.)
22812
22813 c7 VIA C7 (Esther) CPU with MMX, SSE, SSE2 and SSE3 instruction
22814 set support. (No scheduling is implemented for this chip.)
22815
22816 samuel-2
22817 VIA Eden Samuel 2 CPU with MMX and 3DNow! instruction set
22818 support. (No scheduling is implemented for this chip.)
22819
22820 nehemiah
22821 VIA Eden Nehemiah CPU with MMX and SSE instruction set support.
22822 (No scheduling is implemented for this chip.)
22823
22824 esther
22825 VIA Eden Esther CPU with MMX, SSE, SSE2 and SSE3 instruction
22826 set support. (No scheduling is implemented for this chip.)
22827
22828 eden-x2
22829 VIA Eden X2 CPU with x86-64, MMX, SSE, SSE2 and SSE3
22830 instruction set support. (No scheduling is implemented for
22831 this chip.)
22832
22833 eden-x4
22834 VIA Eden X4 CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3,
22835 SSE4.1, SSE4.2, AVX and AVX2 instruction set support. (No
22836 scheduling is implemented for this chip.)
22837
22838 nano
22839 Generic VIA Nano CPU with x86-64, MMX, SSE, SSE2, SSE3 and
22840 SSSE3 instruction set support. (No scheduling is implemented
22841 for this chip.)
22842
22843 nano-1000
22844 VIA Nano 1xxx CPU with x86-64, MMX, SSE, SSE2, SSE3 and SSSE3
22845 instruction set support. (No scheduling is implemented for
22846 this chip.)
22847
22848 nano-2000
22849 VIA Nano 2xxx CPU with x86-64, MMX, SSE, SSE2, SSE3 and SSSE3
22850 instruction set support. (No scheduling is implemented for
22851 this chip.)
22852
22853 nano-3000
22854 VIA Nano 3xxx CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3 and
22855 SSE4.1 instruction set support. (No scheduling is implemented
22856 for this chip.)
22857
22858 nano-x2
22859 VIA Nano Dual Core CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3
22860 and SSE4.1 instruction set support. (No scheduling is
22861 implemented for this chip.)
22862
22863 nano-x4
22864 VIA Nano Quad Core CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3
22865 and SSE4.1 instruction set support. (No scheduling is
22866 implemented for this chip.)
22867
22868 geode
22869 AMD Geode embedded processor with MMX and 3DNow! instruction
22870 set support.
22871
22872 -mtune=cpu-type
22873 Tune to cpu-type everything applicable about the generated code,
22874 except for the ABI and the set of available instructions. While
22875 picking a specific cpu-type schedules things appropriately for that
22876 particular chip, the compiler does not generate any code that
22877 cannot run on the default machine type unless you use a -march=cpu-
22878 type option. For example, if GCC is configured for
22879 i686-pc-linux-gnu then -mtune=pentium4 generates code that is tuned
22880 for Pentium 4 but still runs on i686 machines.
22881
22882 The choices for cpu-type are the same as for -march. In addition,
22883 -mtune supports 2 extra choices for cpu-type:
22884
22885 generic
22886 Produce code optimized for the most common IA32/AMD64/EM64T
22887 processors. If you know the CPU on which your code will run,
22888 then you should use the corresponding -mtune or -march option
22889 instead of -mtune=generic. But, if you do not know exactly
22890 what CPU users of your application will have, then you should
22891 use this option.
22892
22893 As new processors are deployed in the marketplace, the behavior
22894 of this option will change. Therefore, if you upgrade to a
22895 newer version of GCC, code generation controlled by this option
22896 will change to reflect the processors that are most common at
22897 the time that version of GCC is released.
22898
22899 There is no -march=generic option because -march indicates the
22900 instruction set the compiler can use, and there is no generic
22901 instruction set applicable to all processors. In contrast,
22902 -mtune indicates the processor (or, in this case, collection of
22903 processors) for which the code is optimized.
22904
22905 intel
22906 Produce code optimized for the most current Intel processors,
22907 which are Haswell and Silvermont for this version of GCC. If
22908 you know the CPU on which your code will run, then you should
22909 use the corresponding -mtune or -march option instead of
22910 -mtune=intel. But, if you want your application performs
22911 better on both Haswell and Silvermont, then you should use this
22912 option.
22913
22914 As new Intel processors are deployed in the marketplace, the
22915 behavior of this option will change. Therefore, if you upgrade
22916 to a newer version of GCC, code generation controlled by this
22917 option will change to reflect the most current Intel processors
22918 at the time that version of GCC is released.
22919
22920 There is no -march=intel option because -march indicates the
22921 instruction set the compiler can use, and there is no common
22922 instruction set applicable to all processors. In contrast,
22923 -mtune indicates the processor (or, in this case, collection of
22924 processors) for which the code is optimized.
22925
22926 -mcpu=cpu-type
22927 A deprecated synonym for -mtune.
22928
22929 -mfpmath=unit
22930 Generate floating-point arithmetic for selected unit unit. The
22931 choices for unit are:
22932
22933 387 Use the standard 387 floating-point coprocessor present on the
22934 majority of chips and emulated otherwise. Code compiled with
22935 this option runs almost everywhere. The temporary results are
22936 computed in 80-bit precision instead of the precision specified
22937 by the type, resulting in slightly different results compared
22938 to most of other chips. See -ffloat-store for more detailed
22939 description.
22940
22941 This is the default choice for non-Darwin x86-32 targets.
22942
22943 sse Use scalar floating-point instructions present in the SSE
22944 instruction set. This instruction set is supported by Pentium
22945 III and newer chips, and in the AMD line by Athlon-4, Athlon XP
22946 and Athlon MP chips. The earlier version of the SSE
22947 instruction set supports only single-precision arithmetic, thus
22948 the double and extended-precision arithmetic are still done
22949 using 387. A later version, present only in Pentium 4 and AMD
22950 x86-64 chips, supports double-precision arithmetic too.
22951
22952 For the x86-32 compiler, you must use -march=cpu-type, -msse or
22953 -msse2 switches to enable SSE extensions and make this option
22954 effective. For the x86-64 compiler, these extensions are
22955 enabled by default.
22956
22957 The resulting code should be considerably faster in the
22958 majority of cases and avoid the numerical instability problems
22959 of 387 code, but may break some existing code that expects
22960 temporaries to be 80 bits.
22961
22962 This is the default choice for the x86-64 compiler, Darwin
22963 x86-32 targets, and the default choice for x86-32 targets with
22964 the SSE2 instruction set when -ffast-math is enabled.
22965
22966 sse,387
22967 sse+387
22968 both
22969 Attempt to utilize both instruction sets at once. This
22970 effectively doubles the amount of available registers, and on
22971 chips with separate execution units for 387 and SSE the
22972 execution resources too. Use this option with care, as it is
22973 still experimental, because the GCC register allocator does not
22974 model separate functional units well, resulting in unstable
22975 performance.
22976
22977 -masm=dialect
22978 Output assembly instructions using selected dialect. Also affects
22979 which dialect is used for basic "asm" and extended "asm". Supported
22980 choices (in dialect order) are att or intel. The default is att.
22981 Darwin does not support intel.
22982
22983 -mieee-fp
22984 -mno-ieee-fp
22985 Control whether or not the compiler uses IEEE floating-point
22986 comparisons. These correctly handle the case where the result of a
22987 comparison is unordered.
22988
22989 -m80387
22990 -mhard-float
22991 Generate output containing 80387 instructions for floating point.
22992
22993 -mno-80387
22994 -msoft-float
22995 Generate output containing library calls for floating point.
22996
22997 Warning: the requisite libraries are not part of GCC. Normally the
22998 facilities of the machine's usual C compiler are used, but this
22999 cannot be done directly in cross-compilation. You must make your
23000 own arrangements to provide suitable library functions for cross-
23001 compilation.
23002
23003 On machines where a function returns floating-point results in the
23004 80387 register stack, some floating-point opcodes may be emitted
23005 even if -msoft-float is used.
23006
23007 -mno-fp-ret-in-387
23008 Do not use the FPU registers for return values of functions.
23009
23010 The usual calling convention has functions return values of types
23011 "float" and "double" in an FPU register, even if there is no FPU.
23012 The idea is that the operating system should emulate an FPU.
23013
23014 The option -mno-fp-ret-in-387 causes such values to be returned in
23015 ordinary CPU registers instead.
23016
23017 -mno-fancy-math-387
23018 Some 387 emulators do not support the "sin", "cos" and "sqrt"
23019 instructions for the 387. Specify this option to avoid generating
23020 those instructions. This option is the default on OpenBSD and
23021 NetBSD. This option is overridden when -march indicates that the
23022 target CPU always has an FPU and so the instruction does not need
23023 emulation. These instructions are not generated unless you also
23024 use the -funsafe-math-optimizations switch.
23025
23026 -malign-double
23027 -mno-align-double
23028 Control whether GCC aligns "double", "long double", and "long long"
23029 variables on a two-word boundary or a one-word boundary. Aligning
23030 "double" variables on a two-word boundary produces code that runs
23031 somewhat faster on a Pentium at the expense of more memory.
23032
23033 On x86-64, -malign-double is enabled by default.
23034
23035 Warning: if you use the -malign-double switch, structures
23036 containing the above types are aligned differently than the
23037 published application binary interface specifications for the
23038 x86-32 and are not binary compatible with structures in code
23039 compiled without that switch.
23040
23041 -m96bit-long-double
23042 -m128bit-long-double
23043 These switches control the size of "long double" type. The x86-32
23044 application binary interface specifies the size to be 96 bits, so
23045 -m96bit-long-double is the default in 32-bit mode.
23046
23047 Modern architectures (Pentium and newer) prefer "long double" to be
23048 aligned to an 8- or 16-byte boundary. In arrays or structures
23049 conforming to the ABI, this is not possible. So specifying
23050 -m128bit-long-double aligns "long double" to a 16-byte boundary by
23051 padding the "long double" with an additional 32-bit zero.
23052
23053 In the x86-64 compiler, -m128bit-long-double is the default choice
23054 as its ABI specifies that "long double" is aligned on 16-byte
23055 boundary.
23056
23057 Notice that neither of these options enable any extra precision
23058 over the x87 standard of 80 bits for a "long double".
23059
23060 Warning: if you override the default value for your target ABI,
23061 this changes the size of structures and arrays containing "long
23062 double" variables, as well as modifying the function calling
23063 convention for functions taking "long double". Hence they are not
23064 binary-compatible with code compiled without that switch.
23065
23066 -mlong-double-64
23067 -mlong-double-80
23068 -mlong-double-128
23069 These switches control the size of "long double" type. A size of 64
23070 bits makes the "long double" type equivalent to the "double" type.
23071 This is the default for 32-bit Bionic C library. A size of 128
23072 bits makes the "long double" type equivalent to the "__float128"
23073 type. This is the default for 64-bit Bionic C library.
23074
23075 Warning: if you override the default value for your target ABI,
23076 this changes the size of structures and arrays containing "long
23077 double" variables, as well as modifying the function calling
23078 convention for functions taking "long double". Hence they are not
23079 binary-compatible with code compiled without that switch.
23080
23081 -malign-data=type
23082 Control how GCC aligns variables. Supported values for type are
23083 compat uses increased alignment value compatible uses GCC 4.8 and
23084 earlier, abi uses alignment value as specified by the psABI, and
23085 cacheline uses increased alignment value to match the cache line
23086 size. compat is the default.
23087
23088 -mlarge-data-threshold=threshold
23089 When -mcmodel=medium is specified, data objects larger than
23090 threshold are placed in the large data section. This value must be
23091 the same across all objects linked into the binary, and defaults to
23092 65535.
23093
23094 -mrtd
23095 Use a different function-calling convention, in which functions
23096 that take a fixed number of arguments return with the "ret num"
23097 instruction, which pops their arguments while returning. This
23098 saves one instruction in the caller since there is no need to pop
23099 the arguments there.
23100
23101 You can specify that an individual function is called with this
23102 calling sequence with the function attribute "stdcall". You can
23103 also override the -mrtd option by using the function attribute
23104 "cdecl".
23105
23106 Warning: this calling convention is incompatible with the one
23107 normally used on Unix, so you cannot use it if you need to call
23108 libraries compiled with the Unix compiler.
23109
23110 Also, you must provide function prototypes for all functions that
23111 take variable numbers of arguments (including "printf"); otherwise
23112 incorrect code is generated for calls to those functions.
23113
23114 In addition, seriously incorrect code results if you call a
23115 function with too many arguments. (Normally, extra arguments are
23116 harmlessly ignored.)
23117
23118 -mregparm=num
23119 Control how many registers are used to pass integer arguments. By
23120 default, no registers are used to pass arguments, and at most 3
23121 registers can be used. You can control this behavior for a
23122 specific function by using the function attribute "regparm".
23123
23124 Warning: if you use this switch, and num is nonzero, then you must
23125 build all modules with the same value, including any libraries.
23126 This includes the system libraries and startup modules.
23127
23128 -msseregparm
23129 Use SSE register passing conventions for float and double arguments
23130 and return values. You can control this behavior for a specific
23131 function by using the function attribute "sseregparm".
23132
23133 Warning: if you use this switch then you must build all modules
23134 with the same value, including any libraries. This includes the
23135 system libraries and startup modules.
23136
23137 -mvect8-ret-in-mem
23138 Return 8-byte vectors in memory instead of MMX registers. This is
23139 the default on Solaris@tie{}8 and 9 and VxWorks to match the ABI of
23140 the Sun Studio compilers until version 12. Later compiler versions
23141 (starting with Studio 12 Update@tie{}1) follow the ABI used by
23142 other x86 targets, which is the default on Solaris@tie{}10 and
23143 later. Only use this option if you need to remain compatible with
23144 existing code produced by those previous compiler versions or older
23145 versions of GCC.
23146
23147 -mpc32
23148 -mpc64
23149 -mpc80
23150 Set 80387 floating-point precision to 32, 64 or 80 bits. When
23151 -mpc32 is specified, the significands of results of floating-point
23152 operations are rounded to 24 bits (single precision); -mpc64 rounds
23153 the significands of results of floating-point operations to 53 bits
23154 (double precision) and -mpc80 rounds the significands of results of
23155 floating-point operations to 64 bits (extended double precision),
23156 which is the default. When this option is used, floating-point
23157 operations in higher precisions are not available to the programmer
23158 without setting the FPU control word explicitly.
23159
23160 Setting the rounding of floating-point operations to less than the
23161 default 80 bits can speed some programs by 2% or more. Note that
23162 some mathematical libraries assume that extended-precision (80-bit)
23163 floating-point operations are enabled by default; routines in such
23164 libraries could suffer significant loss of accuracy, typically
23165 through so-called "catastrophic cancellation", when this option is
23166 used to set the precision to less than extended precision.
23167
23168 -mstackrealign
23169 Realign the stack at entry. On the x86, the -mstackrealign option
23170 generates an alternate prologue and epilogue that realigns the run-
23171 time stack if necessary. This supports mixing legacy codes that
23172 keep 4-byte stack alignment with modern codes that keep 16-byte
23173 stack alignment for SSE compatibility. See also the attribute
23174 "force_align_arg_pointer", applicable to individual functions.
23175
23176 -mpreferred-stack-boundary=num
23177 Attempt to keep the stack boundary aligned to a 2 raised to num
23178 byte boundary. If -mpreferred-stack-boundary is not specified, the
23179 default is 4 (16 bytes or 128 bits).
23180
23181 Warning: When generating code for the x86-64 architecture with SSE
23182 extensions disabled, -mpreferred-stack-boundary=3 can be used to
23183 keep the stack boundary aligned to 8 byte boundary. Since x86-64
23184 ABI require 16 byte stack alignment, this is ABI incompatible and
23185 intended to be used in controlled environment where stack space is
23186 important limitation. This option leads to wrong code when
23187 functions compiled with 16 byte stack alignment (such as functions
23188 from a standard library) are called with misaligned stack. In this
23189 case, SSE instructions may lead to misaligned memory access traps.
23190 In addition, variable arguments are handled incorrectly for 16 byte
23191 aligned objects (including x87 long double and __int128), leading
23192 to wrong results. You must build all modules with
23193 -mpreferred-stack-boundary=3, including any libraries. This
23194 includes the system libraries and startup modules.
23195
23196 -mincoming-stack-boundary=num
23197 Assume the incoming stack is aligned to a 2 raised to num byte
23198 boundary. If -mincoming-stack-boundary is not specified, the one
23199 specified by -mpreferred-stack-boundary is used.
23200
23201 On Pentium and Pentium Pro, "double" and "long double" values
23202 should be aligned to an 8-byte boundary (see -malign-double) or
23203 suffer significant run time performance penalties. On Pentium III,
23204 the Streaming SIMD Extension (SSE) data type "__m128" may not work
23205 properly if it is not 16-byte aligned.
23206
23207 To ensure proper alignment of this values on the stack, the stack
23208 boundary must be as aligned as that required by any value stored on
23209 the stack. Further, every function must be generated such that it
23210 keeps the stack aligned. Thus calling a function compiled with a
23211 higher preferred stack boundary from a function compiled with a
23212 lower preferred stack boundary most likely misaligns the stack. It
23213 is recommended that libraries that use callbacks always use the
23214 default setting.
23215
23216 This extra alignment does consume extra stack space, and generally
23217 increases code size. Code that is sensitive to stack space usage,
23218 such as embedded systems and operating system kernels, may want to
23219 reduce the preferred alignment to -mpreferred-stack-boundary=2.
23220
23221 -mmmx
23222 -msse
23223 -msse2
23224 -msse3
23225 -mssse3
23226 -msse4
23227 -msse4a
23228 -msse4.1
23229 -msse4.2
23230 -mavx
23231 -mavx2
23232 -mavx512f
23233 -mavx512pf
23234 -mavx512er
23235 -mavx512cd
23236 -mavx512vl
23237 -mavx512bw
23238 -mavx512dq
23239 -mavx512ifma
23240 -mavx512vbmi
23241 -msha
23242 -maes
23243 -mpclmul
23244 -mclflushopt
23245 -mclwb
23246 -mfsgsbase
23247 -mrdrnd
23248 -mf16c
23249 -mfma
23250 -mpconfig
23251 -mwbnoinvd
23252 -mfma4
23253 -mprfchw
23254 -mrdpid
23255 -mprefetchwt1
23256 -mrdseed
23257 -msgx
23258 -mxop
23259 -mlwp
23260 -m3dnow
23261 -m3dnowa
23262 -mpopcnt
23263 -mabm
23264 -madx
23265 -mbmi
23266 -mbmi2
23267 -mlzcnt
23268 -mfxsr
23269 -mxsave
23270 -mxsaveopt
23271 -mxsavec
23272 -mxsaves
23273 -mrtm
23274 -mhle
23275 -mtbm
23276 -mmpx
23277 -mmwaitx
23278 -mclzero
23279 -mpku
23280 -mavx512vbmi2
23281 -mgfni
23282 -mvaes
23283 -mvpclmulqdq
23284 -mavx512bitalg
23285 -mmovdiri
23286 -mmovdir64b
23287 -mavx512vpopcntdq
23288 -mavx5124fmaps
23289 -mavx512vnni
23290 -mavx5124vnniw
23291 These switches enable the use of instructions in the MMX, SSE,
23292 SSE2, SSE3, SSSE3, SSE4, SSE4A, SSE4.1, SSE4.2, AVX, AVX2, AVX512F,
23293 AVX512PF, AVX512ER, AVX512CD, AVX512VL, AVX512BW, AVX512DQ,
23294 AVX512IFMA, AVX512VBMI, SHA, AES, PCLMUL, CLFLUSHOPT, CLWB,
23295 FSGSBASE, RDRND, F16C, FMA, PCONFIG, WBNOINVD, FMA4, PREFETCHW,
23296 RDPID, PREFETCHWT1, RDSEED, SGX, XOP, LWP, 3DNow!, enhanced 3DNow!,
23297 POPCNT, ABM, ADX, BMI, BMI2, LZCNT, FXSR, XSAVE, XSAVEOPT, XSAVEC,
23298 XSAVES, RTM, HLE, TBM, MPX, MWAITX, CLZERO, PKU, AVX512VBMI2, GFNI,
23299 VAES, VPCLMULQDQ, AVX512BITALG, MOVDIRI, MOVDIR64B,
23300 AVX512VPOPCNTDQ, AVX5124FMAPS, AVX512VNNI, or AVX5124VNNIW extended
23301 instruction sets. Each has a corresponding -mno- option to disable
23302 use of these instructions.
23303
23304 These extensions are also available as built-in functions: see x86
23305 Built-in Functions, for details of the functions enabled and
23306 disabled by these switches.
23307
23308 To generate SSE/SSE2 instructions automatically from floating-point
23309 code (as opposed to 387 instructions), see -mfpmath=sse.
23310
23311 GCC depresses SSEx instructions when -mavx is used. Instead, it
23312 generates new AVX instructions or AVX equivalence for all SSEx
23313 instructions when needed.
23314
23315 These options enable GCC to use these extended instructions in
23316 generated code, even without -mfpmath=sse. Applications that
23317 perform run-time CPU detection must compile separate files for each
23318 supported architecture, using the appropriate flags. In
23319 particular, the file containing the CPU detection code should be
23320 compiled without these options.
23321
23322 -mdump-tune-features
23323 This option instructs GCC to dump the names of the x86 performance
23324 tuning features and default settings. The names can be used in
23325 -mtune-ctrl=feature-list.
23326
23327 -mtune-ctrl=feature-list
23328 This option is used to do fine grain control of x86 code generation
23329 features. feature-list is a comma separated list of feature names.
23330 See also -mdump-tune-features. When specified, the feature is
23331 turned on if it is not preceded with ^, otherwise, it is turned
23332 off. -mtune-ctrl=feature-list is intended to be used by GCC
23333 developers. Using it may lead to code paths not covered by testing
23334 and can potentially result in compiler ICEs or runtime errors.
23335
23336 -mno-default
23337 This option instructs GCC to turn off all tunable features. See
23338 also -mtune-ctrl=feature-list and -mdump-tune-features.
23339
23340 -mcld
23341 This option instructs GCC to emit a "cld" instruction in the
23342 prologue of functions that use string instructions. String
23343 instructions depend on the DF flag to select between autoincrement
23344 or autodecrement mode. While the ABI specifies the DF flag to be
23345 cleared on function entry, some operating systems violate this
23346 specification by not clearing the DF flag in their exception
23347 dispatchers. The exception handler can be invoked with the DF flag
23348 set, which leads to wrong direction mode when string instructions
23349 are used. This option can be enabled by default on 32-bit x86
23350 targets by configuring GCC with the --enable-cld configure option.
23351 Generation of "cld" instructions can be suppressed with the
23352 -mno-cld compiler option in this case.
23353
23354 -mvzeroupper
23355 This option instructs GCC to emit a "vzeroupper" instruction before
23356 a transfer of control flow out of the function to minimize the AVX
23357 to SSE transition penalty as well as remove unnecessary "zeroupper"
23358 intrinsics.
23359
23360 -mprefer-avx128
23361 This option instructs GCC to use 128-bit AVX instructions instead
23362 of 256-bit AVX instructions in the auto-vectorizer.
23363
23364 -mprefer-vector-width=opt
23365 This option instructs GCC to use opt-bit vector width in
23366 instructions instead of default on the selected platform.
23367
23368 none
23369 No extra limitations applied to GCC other than defined by the
23370 selected platform.
23371
23372 128 Prefer 128-bit vector width for instructions.
23373
23374 256 Prefer 256-bit vector width for instructions.
23375
23376 512 Prefer 512-bit vector width for instructions.
23377
23378 -mcx16
23379 This option enables GCC to generate "CMPXCHG16B" instructions in
23380 64-bit code to implement compare-and-exchange operations on 16-byte
23381 aligned 128-bit objects. This is useful for atomic updates of data
23382 structures exceeding one machine word in size. The compiler uses
23383 this instruction to implement __sync Builtins. However, for
23384 __atomic Builtins operating on 128-bit integers, a library call is
23385 always used.
23386
23387 -msahf
23388 This option enables generation of "SAHF" instructions in 64-bit
23389 code. Early Intel Pentium 4 CPUs with Intel 64 support, prior to
23390 the introduction of Pentium 4 G1 step in December 2005, lacked the
23391 "LAHF" and "SAHF" instructions which are supported by AMD64. These
23392 are load and store instructions, respectively, for certain status
23393 flags. In 64-bit mode, the "SAHF" instruction is used to optimize
23394 "fmod", "drem", and "remainder" built-in functions; see Other
23395 Builtins for details.
23396
23397 -mmovbe
23398 This option enables use of the "movbe" instruction to implement
23399 "__builtin_bswap32" and "__builtin_bswap64".
23400
23401 -mshstk
23402 The -mshstk option enables shadow stack built-in functions from x86
23403 Control-flow Enforcement Technology (CET).
23404
23405 -mcrc32
23406 This option enables built-in functions "__builtin_ia32_crc32qi",
23407 "__builtin_ia32_crc32hi", "__builtin_ia32_crc32si" and
23408 "__builtin_ia32_crc32di" to generate the "crc32" machine
23409 instruction.
23410
23411 -mrecip
23412 This option enables use of "RCPSS" and "RSQRTSS" instructions (and
23413 their vectorized variants "RCPPS" and "RSQRTPS") with an additional
23414 Newton-Raphson step to increase precision instead of "DIVSS" and
23415 "SQRTSS" (and their vectorized variants) for single-precision
23416 floating-point arguments. These instructions are generated only
23417 when -funsafe-math-optimizations is enabled together with
23418 -ffinite-math-only and -fno-trapping-math. Note that while the
23419 throughput of the sequence is higher than the throughput of the
23420 non-reciprocal instruction, the precision of the sequence can be
23421 decreased by up to 2 ulp (i.e. the inverse of 1.0 equals
23422 0.99999994).
23423
23424 Note that GCC implements "1.0f/sqrtf(x)" in terms of "RSQRTSS" (or
23425 "RSQRTPS") already with -ffast-math (or the above option
23426 combination), and doesn't need -mrecip.
23427
23428 Also note that GCC emits the above sequence with additional Newton-
23429 Raphson step for vectorized single-float division and vectorized
23430 "sqrtf(x)" already with -ffast-math (or the above option
23431 combination), and doesn't need -mrecip.
23432
23433 -mrecip=opt
23434 This option controls which reciprocal estimate instructions may be
23435 used. opt is a comma-separated list of options, which may be
23436 preceded by a ! to invert the option:
23437
23438 all Enable all estimate instructions.
23439
23440 default
23441 Enable the default instructions, equivalent to -mrecip.
23442
23443 none
23444 Disable all estimate instructions, equivalent to -mno-recip.
23445
23446 div Enable the approximation for scalar division.
23447
23448 vec-div
23449 Enable the approximation for vectorized division.
23450
23451 sqrt
23452 Enable the approximation for scalar square root.
23453
23454 vec-sqrt
23455 Enable the approximation for vectorized square root.
23456
23457 So, for example, -mrecip=all,!sqrt enables all of the reciprocal
23458 approximations, except for square root.
23459
23460 -mveclibabi=type
23461 Specifies the ABI type to use for vectorizing intrinsics using an
23462 external library. Supported values for type are svml for the Intel
23463 short vector math library and acml for the AMD math core library.
23464 To use this option, both -ftree-vectorize and
23465 -funsafe-math-optimizations have to be enabled, and an SVML or ACML
23466 ABI-compatible library must be specified at link time.
23467
23468 GCC currently emits calls to "vmldExp2", "vmldLn2", "vmldLog102",
23469 "vmldPow2", "vmldTanh2", "vmldTan2", "vmldAtan2", "vmldAtanh2",
23470 "vmldCbrt2", "vmldSinh2", "vmldSin2", "vmldAsinh2", "vmldAsin2",
23471 "vmldCosh2", "vmldCos2", "vmldAcosh2", "vmldAcos2", "vmlsExp4",
23472 "vmlsLn4", "vmlsLog104", "vmlsPow4", "vmlsTanh4", "vmlsTan4",
23473 "vmlsAtan4", "vmlsAtanh4", "vmlsCbrt4", "vmlsSinh4", "vmlsSin4",
23474 "vmlsAsinh4", "vmlsAsin4", "vmlsCosh4", "vmlsCos4", "vmlsAcosh4"
23475 and "vmlsAcos4" for corresponding function type when
23476 -mveclibabi=svml is used, and "__vrd2_sin", "__vrd2_cos",
23477 "__vrd2_exp", "__vrd2_log", "__vrd2_log2", "__vrd2_log10",
23478 "__vrs4_sinf", "__vrs4_cosf", "__vrs4_expf", "__vrs4_logf",
23479 "__vrs4_log2f", "__vrs4_log10f" and "__vrs4_powf" for the
23480 corresponding function type when -mveclibabi=acml is used.
23481
23482 -mabi=name
23483 Generate code for the specified calling convention. Permissible
23484 values are sysv for the ABI used on GNU/Linux and other systems,
23485 and ms for the Microsoft ABI. The default is to use the Microsoft
23486 ABI when targeting Microsoft Windows and the SysV ABI on all other
23487 systems. You can control this behavior for specific functions by
23488 using the function attributes "ms_abi" and "sysv_abi".
23489
23490 -mforce-indirect-call
23491 Force all calls to functions to be indirect. This is useful when
23492 using Intel Processor Trace where it generates more precise timing
23493 information for function calls.
23494
23495 -mcall-ms2sysv-xlogues
23496 Due to differences in 64-bit ABIs, any Microsoft ABI function that
23497 calls a System V ABI function must consider RSI, RDI and XMM6-15 as
23498 clobbered. By default, the code for saving and restoring these
23499 registers is emitted inline, resulting in fairly lengthy prologues
23500 and epilogues. Using -mcall-ms2sysv-xlogues emits prologues and
23501 epilogues that use stubs in the static portion of libgcc to perform
23502 these saves and restores, thus reducing function size at the cost
23503 of a few extra instructions.
23504
23505 -mtls-dialect=type
23506 Generate code to access thread-local storage using the gnu or gnu2
23507 conventions. gnu is the conservative default; gnu2 is more
23508 efficient, but it may add compile- and run-time requirements that
23509 cannot be satisfied on all systems.
23510
23511 -mpush-args
23512 -mno-push-args
23513 Use PUSH operations to store outgoing parameters. This method is
23514 shorter and usually equally fast as method using SUB/MOV operations
23515 and is enabled by default. In some cases disabling it may improve
23516 performance because of improved scheduling and reduced
23517 dependencies.
23518
23519 -maccumulate-outgoing-args
23520 If enabled, the maximum amount of space required for outgoing
23521 arguments is computed in the function prologue. This is faster on
23522 most modern CPUs because of reduced dependencies, improved
23523 scheduling and reduced stack usage when the preferred stack
23524 boundary is not equal to 2. The drawback is a notable increase in
23525 code size. This switch implies -mno-push-args.
23526
23527 -mthreads
23528 Support thread-safe exception handling on MinGW. Programs that
23529 rely on thread-safe exception handling must compile and link all
23530 code with the -mthreads option. When compiling, -mthreads defines
23531 -D_MT; when linking, it links in a special thread helper library
23532 -lmingwthrd which cleans up per-thread exception-handling data.
23533
23534 -mms-bitfields
23535 -mno-ms-bitfields
23536 Enable/disable bit-field layout compatible with the native
23537 Microsoft Windows compiler.
23538
23539 If "packed" is used on a structure, or if bit-fields are used, it
23540 may be that the Microsoft ABI lays out the structure differently
23541 than the way GCC normally does. Particularly when moving packed
23542 data between functions compiled with GCC and the native Microsoft
23543 compiler (either via function call or as data in a file), it may be
23544 necessary to access either format.
23545
23546 This option is enabled by default for Microsoft Windows targets.
23547 This behavior can also be controlled locally by use of variable or
23548 type attributes. For more information, see x86 Variable Attributes
23549 and x86 Type Attributes.
23550
23551 The Microsoft structure layout algorithm is fairly simple with the
23552 exception of the bit-field packing. The padding and alignment of
23553 members of structures and whether a bit-field can straddle a
23554 storage-unit boundary are determine by these rules:
23555
23556 1. Structure members are stored sequentially in the order in which
23557 they are
23558 declared: the first member has the lowest memory address and
23559 the last member the highest.
23560
23561 2. Every data object has an alignment requirement. The alignment
23562 requirement
23563 for all data except structures, unions, and arrays is either
23564 the size of the object or the current packing size (specified
23565 with either the "aligned" attribute or the "pack" pragma),
23566 whichever is less. For structures, unions, and arrays, the
23567 alignment requirement is the largest alignment requirement of
23568 its members. Every object is allocated an offset so that:
23569
23570 offset % alignment_requirement == 0
23571
23572 3. Adjacent bit-fields are packed into the same 1-, 2-, or 4-byte
23573 allocation
23574 unit if the integral types are the same size and if the next
23575 bit-field fits into the current allocation unit without
23576 crossing the boundary imposed by the common alignment
23577 requirements of the bit-fields.
23578
23579 MSVC interprets zero-length bit-fields in the following ways:
23580
23581 1. If a zero-length bit-field is inserted between two bit-fields
23582 that
23583 are normally coalesced, the bit-fields are not coalesced.
23584
23585 For example:
23586
23587 struct
23588 {
23589 unsigned long bf_1 : 12;
23590 unsigned long : 0;
23591 unsigned long bf_2 : 12;
23592 } t1;
23593
23594 The size of "t1" is 8 bytes with the zero-length bit-field. If
23595 the zero-length bit-field were removed, "t1"'s size would be 4
23596 bytes.
23597
23598 2. If a zero-length bit-field is inserted after a bit-field, "foo",
23599 and the
23600 alignment of the zero-length bit-field is greater than the
23601 member that follows it, "bar", "bar" is aligned as the type of
23602 the zero-length bit-field.
23603
23604 For example:
23605
23606 struct
23607 {
23608 char foo : 4;
23609 short : 0;
23610 char bar;
23611 } t2;
23612
23613 struct
23614 {
23615 char foo : 4;
23616 short : 0;
23617 double bar;
23618 } t3;
23619
23620 For "t2", "bar" is placed at offset 2, rather than offset 1.
23621 Accordingly, the size of "t2" is 4. For "t3", the zero-length
23622 bit-field does not affect the alignment of "bar" or, as a
23623 result, the size of the structure.
23624
23625 Taking this into account, it is important to note the
23626 following:
23627
23628 1. If a zero-length bit-field follows a normal bit-field, the
23629 type of the
23630 zero-length bit-field may affect the alignment of the
23631 structure as whole. For example, "t2" has a size of 4
23632 bytes, since the zero-length bit-field follows a normal
23633 bit-field, and is of type short.
23634
23635 2. Even if a zero-length bit-field is not followed by a normal
23636 bit-field, it may
23637 still affect the alignment of the structure:
23638
23639 struct
23640 {
23641 char foo : 6;
23642 long : 0;
23643 } t4;
23644
23645 Here, "t4" takes up 4 bytes.
23646
23647 3. Zero-length bit-fields following non-bit-field members are
23648 ignored:
23649 struct
23650 {
23651 char foo;
23652 long : 0;
23653 char bar;
23654 } t5;
23655
23656 Here, "t5" takes up 2 bytes.
23657
23658 -mno-align-stringops
23659 Do not align the destination of inlined string operations. This
23660 switch reduces code size and improves performance in case the
23661 destination is already aligned, but GCC doesn't know about it.
23662
23663 -minline-all-stringops
23664 By default GCC inlines string operations only when the destination
23665 is known to be aligned to least a 4-byte boundary. This enables
23666 more inlining and increases code size, but may improve performance
23667 of code that depends on fast "memcpy", "strlen", and "memset" for
23668 short lengths.
23669
23670 -minline-stringops-dynamically
23671 For string operations of unknown size, use run-time checks with
23672 inline code for small blocks and a library call for large blocks.
23673
23674 -mstringop-strategy=alg
23675 Override the internal decision heuristic for the particular
23676 algorithm to use for inlining string operations. The allowed
23677 values for alg are:
23678
23679 rep_byte
23680 rep_4byte
23681 rep_8byte
23682 Expand using i386 "rep" prefix of the specified size.
23683
23684 byte_loop
23685 loop
23686 unrolled_loop
23687 Expand into an inline loop.
23688
23689 libcall
23690 Always use a library call.
23691
23692 -mmemcpy-strategy=strategy
23693 Override the internal decision heuristic to decide if
23694 "__builtin_memcpy" should be inlined and what inline algorithm to
23695 use when the expected size of the copy operation is known. strategy
23696 is a comma-separated list of alg:max_size:dest_align triplets. alg
23697 is specified in -mstringop-strategy, max_size specifies the max
23698 byte size with which inline algorithm alg is allowed. For the last
23699 triplet, the max_size must be "-1". The max_size of the triplets in
23700 the list must be specified in increasing order. The minimal byte
23701 size for alg is 0 for the first triplet and "max_size + 1" of the
23702 preceding range.
23703
23704 -mmemset-strategy=strategy
23705 The option is similar to -mmemcpy-strategy= except that it is to
23706 control "__builtin_memset" expansion.
23707
23708 -momit-leaf-frame-pointer
23709 Don't keep the frame pointer in a register for leaf functions.
23710 This avoids the instructions to save, set up, and restore frame
23711 pointers and makes an extra register available in leaf functions.
23712 The option -fomit-leaf-frame-pointer removes the frame pointer for
23713 leaf functions, which might make debugging harder.
23714
23715 -mtls-direct-seg-refs
23716 -mno-tls-direct-seg-refs
23717 Controls whether TLS variables may be accessed with offsets from
23718 the TLS segment register (%gs for 32-bit, %fs for 64-bit), or
23719 whether the thread base pointer must be added. Whether or not this
23720 is valid depends on the operating system, and whether it maps the
23721 segment to cover the entire TLS area.
23722
23723 For systems that use the GNU C Library, the default is on.
23724
23725 -msse2avx
23726 -mno-sse2avx
23727 Specify that the assembler should encode SSE instructions with VEX
23728 prefix. The option -mavx turns this on by default.
23729
23730 -mfentry
23731 -mno-fentry
23732 If profiling is active (-pg), put the profiling counter call before
23733 the prologue. Note: On x86 architectures the attribute
23734 "ms_hook_prologue" isn't possible at the moment for -mfentry and
23735 -pg.
23736
23737 -mrecord-mcount
23738 -mno-record-mcount
23739 If profiling is active (-pg), generate a __mcount_loc section that
23740 contains pointers to each profiling call. This is useful for
23741 automatically patching and out calls.
23742
23743 -mnop-mcount
23744 -mno-nop-mcount
23745 If profiling is active (-pg), generate the calls to the profiling
23746 functions as NOPs. This is useful when they should be patched in
23747 later dynamically. This is likely only useful together with
23748 -mrecord-mcount.
23749
23750 -mskip-rax-setup
23751 -mno-skip-rax-setup
23752 When generating code for the x86-64 architecture with SSE
23753 extensions disabled, -mskip-rax-setup can be used to skip setting
23754 up RAX register when there are no variable arguments passed in
23755 vector registers.
23756
23757 Warning: Since RAX register is used to avoid unnecessarily saving
23758 vector registers on stack when passing variable arguments, the
23759 impacts of this option are callees may waste some stack space,
23760 misbehave or jump to a random location. GCC 4.4 or newer don't
23761 have those issues, regardless the RAX register value.
23762
23763 -m8bit-idiv
23764 -mno-8bit-idiv
23765 On some processors, like Intel Atom, 8-bit unsigned integer divide
23766 is much faster than 32-bit/64-bit integer divide. This option
23767 generates a run-time check. If both dividend and divisor are
23768 within range of 0 to 255, 8-bit unsigned integer divide is used
23769 instead of 32-bit/64-bit integer divide.
23770
23771 -mavx256-split-unaligned-load
23772 -mavx256-split-unaligned-store
23773 Split 32-byte AVX unaligned load and store.
23774
23775 -mstack-protector-guard=guard
23776 -mstack-protector-guard-reg=reg
23777 -mstack-protector-guard-offset=offset
23778 Generate stack protection code using canary at guard. Supported
23779 locations are global for global canary or tls for per-thread canary
23780 in the TLS block (the default). This option has effect only when
23781 -fstack-protector or -fstack-protector-all is specified.
23782
23783 With the latter choice the options -mstack-protector-guard-reg=reg
23784 and -mstack-protector-guard-offset=offset furthermore specify which
23785 segment register (%fs or %gs) to use as base register for reading
23786 the canary, and from what offset from that base register. The
23787 default for those is as specified in the relevant ABI.
23788
23789 -mmitigate-rop
23790 Try to avoid generating code sequences that contain unintended
23791 return opcodes, to mitigate against certain forms of attack. At the
23792 moment, this option is limited in what it can do and should not be
23793 relied on to provide serious protection.
23794
23795 -mgeneral-regs-only
23796 Generate code that uses only the general-purpose registers. This
23797 prevents the compiler from using floating-point, vector, mask and
23798 bound registers.
23799
23800 -mindirect-branch=choice
23801 Convert indirect call and jump with choice. The default is keep,
23802 which keeps indirect call and jump unmodified. thunk converts
23803 indirect call and jump to call and return thunk. thunk-inline
23804 converts indirect call and jump to inlined call and return thunk.
23805 thunk-extern converts indirect call and jump to external call and
23806 return thunk provided in a separate object file. You can control
23807 this behavior for a specific function by using the function
23808 attribute "indirect_branch".
23809
23810 Note that -mcmodel=large is incompatible with
23811 -mindirect-branch=thunk and -mindirect-branch=thunk-extern since
23812 the thunk function may not be reachable in the large code model.
23813
23814 Note that -mindirect-branch=thunk-extern is incompatible with
23815 -fcf-protection=branch and -fcheck-pointer-bounds since the
23816 external thunk can not be modified to disable control-flow check.
23817
23818 -mfunction-return=choice
23819 Convert function return with choice. The default is keep, which
23820 keeps function return unmodified. thunk converts function return
23821 to call and return thunk. thunk-inline converts function return to
23822 inlined call and return thunk. thunk-extern converts function
23823 return to external call and return thunk provided in a separate
23824 object file. You can control this behavior for a specific function
23825 by using the function attribute "function_return".
23826
23827 Note that -mcmodel=large is incompatible with
23828 -mfunction-return=thunk and -mfunction-return=thunk-extern since
23829 the thunk function may not be reachable in the large code model.
23830
23831 -mindirect-branch-register
23832 Force indirect call and jump via register.
23833
23834 These -m switches are supported in addition to the above on x86-64
23835 processors in 64-bit environments.
23836
23837 -m32
23838 -m64
23839 -mx32
23840 -m16
23841 -miamcu
23842 Generate code for a 16-bit, 32-bit or 64-bit environment. The -m32
23843 option sets "int", "long", and pointer types to 32 bits, and
23844 generates code that runs on any i386 system.
23845
23846 The -m64 option sets "int" to 32 bits and "long" and pointer types
23847 to 64 bits, and generates code for the x86-64 architecture. For
23848 Darwin only the -m64 option also turns off the -fno-pic and
23849 -mdynamic-no-pic options.
23850
23851 The -mx32 option sets "int", "long", and pointer types to 32 bits,
23852 and generates code for the x86-64 architecture.
23853
23854 The -m16 option is the same as -m32, except for that it outputs the
23855 ".code16gcc" assembly directive at the beginning of the assembly
23856 output so that the binary can run in 16-bit mode.
23857
23858 The -miamcu option generates code which conforms to Intel MCU
23859 psABI. It requires the -m32 option to be turned on.
23860
23861 -mno-red-zone
23862 Do not use a so-called "red zone" for x86-64 code. The red zone is
23863 mandated by the x86-64 ABI; it is a 128-byte area beyond the
23864 location of the stack pointer that is not modified by signal or
23865 interrupt handlers and therefore can be used for temporary data
23866 without adjusting the stack pointer. The flag -mno-red-zone
23867 disables this red zone.
23868
23869 -mcmodel=small
23870 Generate code for the small code model: the program and its symbols
23871 must be linked in the lower 2 GB of the address space. Pointers
23872 are 64 bits. Programs can be statically or dynamically linked.
23873 This is the default code model.
23874
23875 -mcmodel=kernel
23876 Generate code for the kernel code model. The kernel runs in the
23877 negative 2 GB of the address space. This model has to be used for
23878 Linux kernel code.
23879
23880 -mcmodel=medium
23881 Generate code for the medium model: the program is linked in the
23882 lower 2 GB of the address space. Small symbols are also placed
23883 there. Symbols with sizes larger than -mlarge-data-threshold are
23884 put into large data or BSS sections and can be located above 2GB.
23885 Programs can be statically or dynamically linked.
23886
23887 -mcmodel=large
23888 Generate code for the large model. This model makes no assumptions
23889 about addresses and sizes of sections.
23890
23891 -maddress-mode=long
23892 Generate code for long address mode. This is only supported for
23893 64-bit and x32 environments. It is the default address mode for
23894 64-bit environments.
23895
23896 -maddress-mode=short
23897 Generate code for short address mode. This is only supported for
23898 32-bit and x32 environments. It is the default address mode for
23899 32-bit and x32 environments.
23900
23901 x86 Windows Options
23902
23903 These additional options are available for Microsoft Windows targets:
23904
23905 -mconsole
23906 This option specifies that a console application is to be
23907 generated, by instructing the linker to set the PE header subsystem
23908 type required for console applications. This option is available
23909 for Cygwin and MinGW targets and is enabled by default on those
23910 targets.
23911
23912 -mdll
23913 This option is available for Cygwin and MinGW targets. It
23914 specifies that a DLL---a dynamic link library---is to be generated,
23915 enabling the selection of the required runtime startup object and
23916 entry point.
23917
23918 -mnop-fun-dllimport
23919 This option is available for Cygwin and MinGW targets. It
23920 specifies that the "dllimport" attribute should be ignored.
23921
23922 -mthread
23923 This option is available for MinGW targets. It specifies that
23924 MinGW-specific thread support is to be used.
23925
23926 -municode
23927 This option is available for MinGW-w64 targets. It causes the
23928 "UNICODE" preprocessor macro to be predefined, and chooses Unicode-
23929 capable runtime startup code.
23930
23931 -mwin32
23932 This option is available for Cygwin and MinGW targets. It
23933 specifies that the typical Microsoft Windows predefined macros are
23934 to be set in the pre-processor, but does not influence the choice
23935 of runtime library/startup code.
23936
23937 -mwindows
23938 This option is available for Cygwin and MinGW targets. It
23939 specifies that a GUI application is to be generated by instructing
23940 the linker to set the PE header subsystem type appropriately.
23941
23942 -fno-set-stack-executable
23943 This option is available for MinGW targets. It specifies that the
23944 executable flag for the stack used by nested functions isn't set.
23945 This is necessary for binaries running in kernel mode of Microsoft
23946 Windows, as there the User32 API, which is used to set executable
23947 privileges, isn't available.
23948
23949 -fwritable-relocated-rdata
23950 This option is available for MinGW and Cygwin targets. It
23951 specifies that relocated-data in read-only section is put into the
23952 ".data" section. This is a necessary for older runtimes not
23953 supporting modification of ".rdata" sections for pseudo-relocation.
23954
23955 -mpe-aligned-commons
23956 This option is available for Cygwin and MinGW targets. It
23957 specifies that the GNU extension to the PE file format that permits
23958 the correct alignment of COMMON variables should be used when
23959 generating code. It is enabled by default if GCC detects that the
23960 target assembler found during configuration supports the feature.
23961
23962 See also under x86 Options for standard options.
23963
23964 Xstormy16 Options
23965
23966 These options are defined for Xstormy16:
23967
23968 -msim
23969 Choose startup files and linker script suitable for the simulator.
23970
23971 Xtensa Options
23972
23973 These options are supported for Xtensa targets:
23974
23975 -mconst16
23976 -mno-const16
23977 Enable or disable use of "CONST16" instructions for loading
23978 constant values. The "CONST16" instruction is currently not a
23979 standard option from Tensilica. When enabled, "CONST16"
23980 instructions are always used in place of the standard "L32R"
23981 instructions. The use of "CONST16" is enabled by default only if
23982 the "L32R" instruction is not available.
23983
23984 -mfused-madd
23985 -mno-fused-madd
23986 Enable or disable use of fused multiply/add and multiply/subtract
23987 instructions in the floating-point option. This has no effect if
23988 the floating-point option is not also enabled. Disabling fused
23989 multiply/add and multiply/subtract instructions forces the compiler
23990 to use separate instructions for the multiply and add/subtract
23991 operations. This may be desirable in some cases where strict IEEE
23992 754-compliant results are required: the fused multiply add/subtract
23993 instructions do not round the intermediate result, thereby
23994 producing results with more bits of precision than specified by the
23995 IEEE standard. Disabling fused multiply add/subtract instructions
23996 also ensures that the program output is not sensitive to the
23997 compiler's ability to combine multiply and add/subtract operations.
23998
23999 -mserialize-volatile
24000 -mno-serialize-volatile
24001 When this option is enabled, GCC inserts "MEMW" instructions before
24002 "volatile" memory references to guarantee sequential consistency.
24003 The default is -mserialize-volatile. Use -mno-serialize-volatile
24004 to omit the "MEMW" instructions.
24005
24006 -mforce-no-pic
24007 For targets, like GNU/Linux, where all user-mode Xtensa code must
24008 be position-independent code (PIC), this option disables PIC for
24009 compiling kernel code.
24010
24011 -mtext-section-literals
24012 -mno-text-section-literals
24013 These options control the treatment of literal pools. The default
24014 is -mno-text-section-literals, which places literals in a separate
24015 section in the output file. This allows the literal pool to be
24016 placed in a data RAM/ROM, and it also allows the linker to combine
24017 literal pools from separate object files to remove redundant
24018 literals and improve code size. With -mtext-section-literals, the
24019 literals are interspersed in the text section in order to keep them
24020 as close as possible to their references. This may be necessary
24021 for large assembly files. Literals for each function are placed
24022 right before that function.
24023
24024 -mauto-litpools
24025 -mno-auto-litpools
24026 These options control the treatment of literal pools. The default
24027 is -mno-auto-litpools, which places literals in a separate section
24028 in the output file unless -mtext-section-literals is used. With
24029 -mauto-litpools the literals are interspersed in the text section
24030 by the assembler. Compiler does not produce explicit ".literal"
24031 directives and loads literals into registers with "MOVI"
24032 instructions instead of "L32R" to let the assembler do relaxation
24033 and place literals as necessary. This option allows assembler to
24034 create several literal pools per function and assemble very big
24035 functions, which may not be possible with -mtext-section-literals.
24036
24037 -mtarget-align
24038 -mno-target-align
24039 When this option is enabled, GCC instructs the assembler to
24040 automatically align instructions to reduce branch penalties at the
24041 expense of some code density. The assembler attempts to widen
24042 density instructions to align branch targets and the instructions
24043 following call instructions. If there are not enough preceding
24044 safe density instructions to align a target, no widening is
24045 performed. The default is -mtarget-align. These options do not
24046 affect the treatment of auto-aligned instructions like "LOOP",
24047 which the assembler always aligns, either by widening density
24048 instructions or by inserting NOP instructions.
24049
24050 -mlongcalls
24051 -mno-longcalls
24052 When this option is enabled, GCC instructs the assembler to
24053 translate direct calls to indirect calls unless it can determine
24054 that the target of a direct call is in the range allowed by the
24055 call instruction. This translation typically occurs for calls to
24056 functions in other source files. Specifically, the assembler
24057 translates a direct "CALL" instruction into an "L32R" followed by a
24058 "CALLX" instruction. The default is -mno-longcalls. This option
24059 should be used in programs where the call target can potentially be
24060 out of range. This option is implemented in the assembler, not the
24061 compiler, so the assembly code generated by GCC still shows direct
24062 call instructions---look at the disassembled object code to see the
24063 actual instructions. Note that the assembler uses an indirect call
24064 for every cross-file call, not just those that really are out of
24065 range.
24066
24067 zSeries Options
24068
24069 These are listed under
24070
24072 This section describes several environment variables that affect how
24073 GCC operates. Some of them work by specifying directories or prefixes
24074 to use when searching for various kinds of files. Some are used to
24075 specify other aspects of the compilation environment.
24076
24077 Note that you can also specify places to search using options such as
24078 -B, -I and -L. These take precedence over places specified using
24079 environment variables, which in turn take precedence over those
24080 specified by the configuration of GCC.
24081
24082 LANG
24083 LC_CTYPE
24084 LC_MESSAGES
24085 LC_ALL
24086 These environment variables control the way that GCC uses
24087 localization information which allows GCC to work with different
24088 national conventions. GCC inspects the locale categories LC_CTYPE
24089 and LC_MESSAGES if it has been configured to do so. These locale
24090 categories can be set to any value supported by your installation.
24091 A typical value is en_GB.UTF-8 for English in the United Kingdom
24092 encoded in UTF-8.
24093
24094 The LC_CTYPE environment variable specifies character
24095 classification. GCC uses it to determine the character boundaries
24096 in a string; this is needed for some multibyte encodings that
24097 contain quote and escape characters that are otherwise interpreted
24098 as a string end or escape.
24099
24100 The LC_MESSAGES environment variable specifies the language to use
24101 in diagnostic messages.
24102
24103 If the LC_ALL environment variable is set, it overrides the value
24104 of LC_CTYPE and LC_MESSAGES; otherwise, LC_CTYPE and LC_MESSAGES
24105 default to the value of the LANG environment variable. If none of
24106 these variables are set, GCC defaults to traditional C English
24107 behavior.
24108
24109 TMPDIR
24110 If TMPDIR is set, it specifies the directory to use for temporary
24111 files. GCC uses temporary files to hold the output of one stage of
24112 compilation which is to be used as input to the next stage: for
24113 example, the output of the preprocessor, which is the input to the
24114 compiler proper.
24115
24116 GCC_COMPARE_DEBUG
24117 Setting GCC_COMPARE_DEBUG is nearly equivalent to passing
24118 -fcompare-debug to the compiler driver. See the documentation of
24119 this option for more details.
24120
24121 GCC_EXEC_PREFIX
24122 If GCC_EXEC_PREFIX is set, it specifies a prefix to use in the
24123 names of the subprograms executed by the compiler. No slash is
24124 added when this prefix is combined with the name of a subprogram,
24125 but you can specify a prefix that ends with a slash if you wish.
24126
24127 If GCC_EXEC_PREFIX is not set, GCC attempts to figure out an
24128 appropriate prefix to use based on the pathname it is invoked with.
24129
24130 If GCC cannot find the subprogram using the specified prefix, it
24131 tries looking in the usual places for the subprogram.
24132
24133 The default value of GCC_EXEC_PREFIX is prefix/lib/gcc/ where
24134 prefix is the prefix to the installed compiler. In many cases
24135 prefix is the value of "prefix" when you ran the configure script.
24136
24137 Other prefixes specified with -B take precedence over this prefix.
24138
24139 This prefix is also used for finding files such as crt0.o that are
24140 used for linking.
24141
24142 In addition, the prefix is used in an unusual way in finding the
24143 directories to search for header files. For each of the standard
24144 directories whose name normally begins with /usr/local/lib/gcc
24145 (more precisely, with the value of GCC_INCLUDE_DIR), GCC tries
24146 replacing that beginning with the specified prefix to produce an
24147 alternate directory name. Thus, with -Bfoo/, GCC searches foo/bar
24148 just before it searches the standard directory /usr/local/lib/bar.
24149 If a standard directory begins with the configured prefix then the
24150 value of prefix is replaced by GCC_EXEC_PREFIX when looking for
24151 header files.
24152
24153 COMPILER_PATH
24154 The value of COMPILER_PATH is a colon-separated list of
24155 directories, much like PATH. GCC tries the directories thus
24156 specified when searching for subprograms, if it cannot find the
24157 subprograms using GCC_EXEC_PREFIX.
24158
24159 LIBRARY_PATH
24160 The value of LIBRARY_PATH is a colon-separated list of directories,
24161 much like PATH. When configured as a native compiler, GCC tries
24162 the directories thus specified when searching for special linker
24163 files, if it cannot find them using GCC_EXEC_PREFIX. Linking using
24164 GCC also uses these directories when searching for ordinary
24165 libraries for the -l option (but directories specified with -L come
24166 first).
24167
24168 LANG
24169 This variable is used to pass locale information to the compiler.
24170 One way in which this information is used is to determine the
24171 character set to be used when character literals, string literals
24172 and comments are parsed in C and C++. When the compiler is
24173 configured to allow multibyte characters, the following values for
24174 LANG are recognized:
24175
24176 C-JIS
24177 Recognize JIS characters.
24178
24179 C-SJIS
24180 Recognize SJIS characters.
24181
24182 C-EUCJP
24183 Recognize EUCJP characters.
24184
24185 If LANG is not defined, or if it has some other value, then the
24186 compiler uses "mblen" and "mbtowc" as defined by the default locale
24187 to recognize and translate multibyte characters.
24188
24189 Some additional environment variables affect the behavior of the
24190 preprocessor.
24191
24192 CPATH
24193 C_INCLUDE_PATH
24194 CPLUS_INCLUDE_PATH
24195 OBJC_INCLUDE_PATH
24196 Each variable's value is a list of directories separated by a
24197 special character, much like PATH, in which to look for header
24198 files. The special character, "PATH_SEPARATOR", is target-
24199 dependent and determined at GCC build time. For Microsoft Windows-
24200 based targets it is a semicolon, and for almost all other targets
24201 it is a colon.
24202
24203 CPATH specifies a list of directories to be searched as if
24204 specified with -I, but after any paths given with -I options on the
24205 command line. This environment variable is used regardless of
24206 which language is being preprocessed.
24207
24208 The remaining environment variables apply only when preprocessing
24209 the particular language indicated. Each specifies a list of
24210 directories to be searched as if specified with -isystem, but after
24211 any paths given with -isystem options on the command line.
24212
24213 In all these variables, an empty element instructs the compiler to
24214 search its current working directory. Empty elements can appear at
24215 the beginning or end of a path. For instance, if the value of
24216 CPATH is ":/special/include", that has the same effect as
24217 -I. -I/special/include.
24218
24219 DEPENDENCIES_OUTPUT
24220 If this variable is set, its value specifies how to output
24221 dependencies for Make based on the non-system header files
24222 processed by the compiler. System header files are ignored in the
24223 dependency output.
24224
24225 The value of DEPENDENCIES_OUTPUT can be just a file name, in which
24226 case the Make rules are written to that file, guessing the target
24227 name from the source file name. Or the value can have the form
24228 file target, in which case the rules are written to file file using
24229 target as the target name.
24230
24231 In other words, this environment variable is equivalent to
24232 combining the options -MM and -MF, with an optional -MT switch too.
24233
24234 SUNPRO_DEPENDENCIES
24235 This variable is the same as DEPENDENCIES_OUTPUT (see above),
24236 except that system header files are not ignored, so it implies -M
24237 rather than -MM. However, the dependence on the main input file is
24238 omitted.
24239
24240 SOURCE_DATE_EPOCH
24241 If this variable is set, its value specifies a UNIX timestamp to be
24242 used in replacement of the current date and time in the "__DATE__"
24243 and "__TIME__" macros, so that the embedded timestamps become
24244 reproducible.
24245
24246 The value of SOURCE_DATE_EPOCH must be a UNIX timestamp, defined as
24247 the number of seconds (excluding leap seconds) since 01 Jan 1970
24248 00:00:00 represented in ASCII; identical to the output of
24249 @command{date +%s} on GNU/Linux and other systems that support the
24250 %s extension in the "date" command.
24251
24252 The value should be a known timestamp such as the last modification
24253 time of the source or package and it should be set by the build
24254 process.
24255
24257 For instructions on reporting bugs, see
24258 <http://bugzilla.redhat.com/bugzilla>.
24259
24261 1. On some systems, gcc -shared needs to build supplementary stub code
24262 for constructors to work. On multi-libbed systems, gcc -shared
24263 must select the correct support libraries to link against. Failing
24264 to supply the correct flags may lead to subtle defects. Supplying
24265 them in cases where they are not necessary is innocuous.
24266
24268 gpl(7), gfdl(7), fsf-funding(7), cpp(1), gcov(1), as(1), ld(1), gdb(1),
24269 dbx(1) and the Info entries for gcc, cpp, as, ld, binutils and gdb.
24270
24272 See the Info entry for gcc, or
24273 <http://gcc.gnu.org/onlinedocs/gcc/Contributors.html>, for contributors
24274 to GCC.
24275
24277 Copyright (c) 1988-2018 Free Software Foundation, Inc.
24278
24279 Permission is granted to copy, distribute and/or modify this document
24280 under the terms of the GNU Free Documentation License, Version 1.3 or
24281 any later version published by the Free Software Foundation; with the
24282 Invariant Sections being "GNU General Public License" and "Funding Free
24283 Software", the Front-Cover texts being (a) (see below), and with the
24284 Back-Cover Texts being (b) (see below). A copy of the license is
24285 included in the gfdl(7) man page.
24286
24287 (a) The FSF's Front-Cover Text is:
24288
24289 A GNU Manual
24290
24291 (b) The FSF's Back-Cover Text is:
24292
24293 You have freedom to copy and modify this GNU Manual, like GNU
24294 software. Copies published by the Free Software Foundation raise
24295 funds for GNU development.
24296
24297
24298
24299gcc-8.3.0 2019-02-22 GCC(1)