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 These options are defined for AArch64 implementations:
12735
12736 -mabi=name
12737 Generate code for the specified data model. Permissible values are
12738 ilp32 for SysV-like data model where int, long int and pointers are
12739 32 bits, and lp64 for SysV-like data model where int is 32 bits,
12740 but long int and pointers are 64 bits.
12741
12742 The default depends on the specific target configuration. Note
12743 that the LP64 and ILP32 ABIs are not link-compatible; you must
12744 compile your entire program with the same ABI, and link with a
12745 compatible set of libraries.
12746
12747 -mbig-endian
12748 Generate big-endian code. This is the default when GCC is
12749 configured for an aarch64_be-*-* target.
12750
12751 -mgeneral-regs-only
12752 Generate code which uses only the general-purpose registers. This
12753 will prevent the compiler from using floating-point and Advanced
12754 SIMD registers but will not impose any restrictions on the
12755 assembler.
12756
12757 -mlittle-endian
12758 Generate little-endian code. This is the default when GCC is
12759 configured for an aarch64-*-* but not an aarch64_be-*-* target.
12760
12761 -mcmodel=tiny
12762 Generate code for the tiny code model. The program and its
12763 statically defined symbols must be within 1MB of each other.
12764 Programs can be statically or dynamically linked.
12765
12766 -mcmodel=small
12767 Generate code for the small code model. The program and its
12768 statically defined symbols must be within 4GB of each other.
12769 Programs can be statically or dynamically linked. This is the
12770 default code model.
12771
12772 -mcmodel=large
12773 Generate code for the large code model. This makes no assumptions
12774 about addresses and sizes of sections. Programs can be statically
12775 linked only.
12776
12777 -mstrict-align
12778 Avoid generating memory accesses that may not be aligned on a
12779 natural object boundary as described in the architecture
12780 specification.
12781
12782 -momit-leaf-frame-pointer
12783 -mno-omit-leaf-frame-pointer
12784 Omit or keep the frame pointer in leaf functions. The former
12785 behavior is the default.
12786
12787 -mtls-dialect=desc
12788 Use TLS descriptors as the thread-local storage mechanism for
12789 dynamic accesses of TLS variables. This is the default.
12790
12791 -mtls-dialect=traditional
12792 Use traditional TLS as the thread-local storage mechanism for
12793 dynamic accesses of TLS variables.
12794
12795 -mtls-size=size
12796 Specify bit size of immediate TLS offsets. Valid values are 12,
12797 24, 32, 48. This option requires binutils 2.26 or newer.
12798
12799 -mfix-cortex-a53-835769
12800 -mno-fix-cortex-a53-835769
12801 Enable or disable the workaround for the ARM Cortex-A53 erratum
12802 number 835769. This involves inserting a NOP instruction between
12803 memory instructions and 64-bit integer multiply-accumulate
12804 instructions.
12805
12806 -mfix-cortex-a53-843419
12807 -mno-fix-cortex-a53-843419
12808 Enable or disable the workaround for the ARM Cortex-A53 erratum
12809 number 843419. This erratum workaround is made at link time and
12810 this will only pass the corresponding flag to the linker.
12811
12812 -mlow-precision-recip-sqrt
12813 -mno-low-precision-recip-sqrt
12814 Enable or disable the reciprocal square root approximation. This
12815 option only has an effect if -ffast-math or
12816 -funsafe-math-optimizations is used as well. Enabling this reduces
12817 precision of reciprocal square root results to about 16 bits for
12818 single precision and to 32 bits for double precision.
12819
12820 -mlow-precision-sqrt
12821 -mno-low-precision-sqrt
12822 Enable or disable the square root approximation. This option only
12823 has an effect if -ffast-math or -funsafe-math-optimizations is used
12824 as well. Enabling this reduces precision of square root results to
12825 about 16 bits for single precision and to 32 bits for double
12826 precision. If enabled, it implies -mlow-precision-recip-sqrt.
12827
12828 -mlow-precision-div
12829 -mno-low-precision-div
12830 Enable or disable the division approximation. This option only has
12831 an effect if -ffast-math or -funsafe-math-optimizations is used as
12832 well. Enabling this reduces precision of division results to about
12833 16 bits for single precision and to 32 bits for double precision.
12834
12835 -march=name
12836 Specify the name of the target architecture and, optionally, one or
12837 more feature modifiers. This option has the form
12838 -march=arch{+[no]feature}*.
12839
12840 The permissible values for arch are armv8-a, armv8.1-a, armv8.2-a,
12841 armv8.3-a or armv8.4-a or native.
12842
12843 The value armv8.4-a implies armv8.3-a and enables compiler support
12844 for the ARMv8.4-A architecture extensions.
12845
12846 The value armv8.3-a implies armv8.2-a and enables compiler support
12847 for the ARMv8.3-A architecture extensions.
12848
12849 The value armv8.2-a implies armv8.1-a and enables compiler support
12850 for the ARMv8.2-A architecture extensions.
12851
12852 The value armv8.1-a implies armv8-a and enables compiler support
12853 for the ARMv8.1-A architecture extension. In particular, it
12854 enables the +crc, +lse, and +rdma features.
12855
12856 The value native is available on native AArch64 GNU/Linux and
12857 causes the compiler to pick the architecture of the host system.
12858 This option has no effect if the compiler is unable to recognize
12859 the architecture of the host system,
12860
12861 The permissible values for feature are listed in the sub-section on
12862 aarch64-feature-modifiers,,-march and -mcpu Feature Modifiers.
12863 Where conflicting feature modifiers are specified, the right-most
12864 feature is used.
12865
12866 GCC uses name to determine what kind of instructions it can emit
12867 when generating assembly code. If -march is specified without
12868 either of -mtune or -mcpu also being specified, the code is tuned
12869 to perform well across a range of target processors implementing
12870 the target architecture.
12871
12872 -mtune=name
12873 Specify the name of the target processor for which GCC should tune
12874 the performance of the code. Permissible values for this option
12875 are: generic, cortex-a35, cortex-a53, cortex-a55, cortex-a57,
12876 cortex-a72, cortex-a73, cortex-a75, exynos-m1, falkor, qdf24xx,
12877 saphira, xgene1, vulcan, thunderx, thunderxt88, thunderxt88p1,
12878 thunderxt81, thunderxt83, thunderx2t99, cortex-a57.cortex-a53,
12879 cortex-a72.cortex-a53, cortex-a73.cortex-a35,
12880 cortex-a73.cortex-a53, cortex-a75.cortex-a55, native.
12881
12882 The values cortex-a57.cortex-a53, cortex-a72.cortex-a53,
12883 cortex-a73.cortex-a35, cortex-a73.cortex-a53, cortex-a75.cortex-a55
12884 specify that GCC should tune for a big.LITTLE system.
12885
12886 Additionally on native AArch64 GNU/Linux systems the value native
12887 tunes performance to the host system. This option has no effect if
12888 the compiler is unable to recognize the processor of the host
12889 system.
12890
12891 Where none of -mtune=, -mcpu= or -march= are specified, the code is
12892 tuned to perform well across a range of target processors.
12893
12894 This option cannot be suffixed by feature modifiers.
12895
12896 -mcpu=name
12897 Specify the name of the target processor, optionally suffixed by
12898 one or more feature modifiers. This option has the form
12899 -mcpu=cpu{+[no]feature}*, where the permissible values for cpu are
12900 the same as those available for -mtune. The permissible values for
12901 feature are documented in the sub-section on
12902 aarch64-feature-modifiers,,-march and -mcpu Feature Modifiers.
12903 Where conflicting feature modifiers are specified, the right-most
12904 feature is used.
12905
12906 GCC uses name to determine what kind of instructions it can emit
12907 when generating assembly code (as if by -march) and to determine
12908 the target processor for which to tune for performance (as if by
12909 -mtune). Where this option is used in conjunction with -march or
12910 -mtune, those options take precedence over the appropriate part of
12911 this option.
12912
12913 -moverride=string
12914 Override tuning decisions made by the back-end in response to a
12915 -mtune= switch. The syntax, semantics, and accepted values for
12916 string in this option are not guaranteed to be consistent across
12917 releases.
12918
12919 This option is only intended to be useful when developing GCC.
12920
12921 -mverbose-cost-dump
12922 Enable verbose cost model dumping in the debug dump files. This
12923 option is provided for use in debugging the compiler.
12924
12925 -mpc-relative-literal-loads
12926 -mno-pc-relative-literal-loads
12927 Enable or disable PC-relative literal loads. With this option
12928 literal pools are accessed using a single instruction and emitted
12929 after each function. This limits the maximum size of functions to
12930 1MB. This is enabled by default for -mcmodel=tiny.
12931
12932 -msign-return-address=scope
12933 Select the function scope on which return address signing will be
12934 applied. Permissible values are none, which disables return
12935 address signing, non-leaf, which enables pointer signing for
12936 functions which are not leaf functions, and all, which enables
12937 pointer signing for all functions. The default value is none.
12938
12939 -msve-vector-bits=bits
12940 Specify the number of bits in an SVE vector register. This option
12941 only has an effect when SVE is enabled.
12942
12943 GCC supports two forms of SVE code generation: "vector-length
12944 agnostic" output that works with any size of vector register and
12945 "vector-length specific" output that allows GCC to make assumptions
12946 about the vector length when it is useful for optimization reasons.
12947 The possible values of bits are: scalable, 128, 256, 512, 1024 and
12948 2048. Specifying scalable selects vector-length agnostic output.
12949 At present -msve-vector-bits=128 also generates vector-length
12950 agnostic output. All other values generate vector-length specific
12951 code. The behavior of these values may change in future releases
12952 and no value except scalable should be relied on for producing code
12953 that is portable across different hardware SVE vector lengths.
12954
12955 The default is -msve-vector-bits=scalable, which produces vector-
12956 length agnostic code.
12957
12958 -march and -mcpu Feature Modifiers
12959
12960 Feature modifiers used with -march and -mcpu can be any of the
12961 following and their inverses nofeature:
12962
12963 crc Enable CRC extension. This is on by default for -march=armv8.1-a.
12964
12965 crypto
12966 Enable Crypto extension. This also enables Advanced SIMD and
12967 floating-point instructions.
12968
12969 fp Enable floating-point instructions. This is on by default for all
12970 possible values for options -march and -mcpu.
12971
12972 simd
12973 Enable Advanced SIMD instructions. This also enables floating-
12974 point instructions. This is on by default for all possible values
12975 for options -march and -mcpu.
12976
12977 sve Enable Scalable Vector Extension instructions. This also enables
12978 Advanced SIMD and floating-point instructions.
12979
12980 lse Enable Large System Extension instructions. This is on by default
12981 for -march=armv8.1-a.
12982
12983 rdma
12984 Enable Round Double Multiply Accumulate instructions. This is on
12985 by default for -march=armv8.1-a.
12986
12987 fp16
12988 Enable FP16 extension. This also enables floating-point
12989 instructions.
12990
12991 fp16fml
12992 Enable FP16 fmla extension. This also enables FP16 extensions and
12993 floating-point instructions. This option is enabled by default for
12994 -march=armv8.4-a. Use of this option with architectures prior to
12995 Armv8.2-A is not supported.
12996
12997 rcpc
12998 Enable the RcPc extension. This does not change code generation
12999 from GCC, but is passed on to the assembler, enabling inline asm
13000 statements to use instructions from the RcPc extension.
13001
13002 dotprod
13003 Enable the Dot Product extension. This also enables Advanced SIMD
13004 instructions.
13005
13006 aes Enable the Armv8-a aes and pmull crypto extension. This also
13007 enables Advanced SIMD instructions.
13008
13009 sha2
13010 Enable the Armv8-a sha2 crypto extension. This also enables
13011 Advanced SIMD instructions.
13012
13013 sha3
13014 Enable the sha512 and sha3 crypto extension. This also enables
13015 Advanced SIMD instructions. Use of this option with architectures
13016 prior to Armv8.2-A is not supported.
13017
13018 sm4 Enable the sm3 and sm4 crypto extension. This also enables
13019 Advanced SIMD instructions. Use of this option with architectures
13020 prior to Armv8.2-A is not supported.
13021
13022 Feature crypto implies aes, sha2, and simd, which implies fp.
13023 Conversely, nofp implies nosimd, which implies nocrypto, noaes and
13024 nosha2.
13025
13026 Adapteva Epiphany Options
13027 These -m options are defined for Adapteva Epiphany:
13028
13029 -mhalf-reg-file
13030 Don't allocate any register in the range "r32"..."r63". That
13031 allows code to run on hardware variants that lack these registers.
13032
13033 -mprefer-short-insn-regs
13034 Preferentially allocate registers that allow short instruction
13035 generation. This can result in increased instruction count, so
13036 this may either reduce or increase overall code size.
13037
13038 -mbranch-cost=num
13039 Set the cost of branches to roughly num "simple" instructions.
13040 This cost is only a heuristic and is not guaranteed to produce
13041 consistent results across releases.
13042
13043 -mcmove
13044 Enable the generation of conditional moves.
13045
13046 -mnops=num
13047 Emit num NOPs before every other generated instruction.
13048
13049 -mno-soft-cmpsf
13050 For single-precision floating-point comparisons, emit an "fsub"
13051 instruction and test the flags. This is faster than a software
13052 comparison, but can get incorrect results in the presence of NaNs,
13053 or when two different small numbers are compared such that their
13054 difference is calculated as zero. The default is -msoft-cmpsf,
13055 which uses slower, but IEEE-compliant, software comparisons.
13056
13057 -mstack-offset=num
13058 Set the offset between the top of the stack and the stack pointer.
13059 E.g., a value of 8 means that the eight bytes in the range
13060 "sp+0...sp+7" can be used by leaf functions without stack
13061 allocation. Values other than 8 or 16 are untested and unlikely to
13062 work. Note also that this option changes the ABI; compiling a
13063 program with a different stack offset than the libraries have been
13064 compiled with generally does not work. This option can be useful
13065 if you want to evaluate if a different stack offset would give you
13066 better code, but to actually use a different stack offset to build
13067 working programs, it is recommended to configure the toolchain with
13068 the appropriate --with-stack-offset=num option.
13069
13070 -mno-round-nearest
13071 Make the scheduler assume that the rounding mode has been set to
13072 truncating. The default is -mround-nearest.
13073
13074 -mlong-calls
13075 If not otherwise specified by an attribute, assume all calls might
13076 be beyond the offset range of the "b" / "bl" instructions, and
13077 therefore load the function address into a register before
13078 performing a (otherwise direct) call. This is the default.
13079
13080 -mshort-calls
13081 If not otherwise specified by an attribute, assume all direct calls
13082 are in the range of the "b" / "bl" instructions, so use these
13083 instructions for direct calls. The default is -mlong-calls.
13084
13085 -msmall16
13086 Assume addresses can be loaded as 16-bit unsigned values. This
13087 does not apply to function addresses for which -mlong-calls
13088 semantics are in effect.
13089
13090 -mfp-mode=mode
13091 Set the prevailing mode of the floating-point unit. This
13092 determines the floating-point mode that is provided and expected at
13093 function call and return time. Making this mode match the mode you
13094 predominantly need at function start can make your programs smaller
13095 and faster by avoiding unnecessary mode switches.
13096
13097 mode can be set to one the following values:
13098
13099 caller
13100 Any mode at function entry is valid, and retained or restored
13101 when the function returns, and when it calls other functions.
13102 This mode is useful for compiling libraries or other
13103 compilation units you might want to incorporate into different
13104 programs with different prevailing FPU modes, and the
13105 convenience of being able to use a single object file outweighs
13106 the size and speed overhead for any extra mode switching that
13107 might be needed, compared with what would be needed with a more
13108 specific choice of prevailing FPU mode.
13109
13110 truncate
13111 This is the mode used for floating-point calculations with
13112 truncating (i.e. round towards zero) rounding mode. That
13113 includes conversion from floating point to integer.
13114
13115 round-nearest
13116 This is the mode used for floating-point calculations with
13117 round-to-nearest-or-even rounding mode.
13118
13119 int This is the mode used to perform integer calculations in the
13120 FPU, e.g. integer multiply, or integer multiply-and-
13121 accumulate.
13122
13123 The default is -mfp-mode=caller
13124
13125 -mnosplit-lohi
13126 -mno-postinc
13127 -mno-postmodify
13128 Code generation tweaks that disable, respectively, splitting of
13129 32-bit loads, generation of post-increment addresses, and
13130 generation of post-modify addresses. The defaults are msplit-lohi,
13131 -mpost-inc, and -mpost-modify.
13132
13133 -mnovect-double
13134 Change the preferred SIMD mode to SImode. The default is
13135 -mvect-double, which uses DImode as preferred SIMD mode.
13136
13137 -max-vect-align=num
13138 The maximum alignment for SIMD vector mode types. num may be 4 or
13139 8. The default is 8. Note that this is an ABI change, even though
13140 many library function interfaces are unaffected if they don't use
13141 SIMD vector modes in places that affect size and/or alignment of
13142 relevant types.
13143
13144 -msplit-vecmove-early
13145 Split vector moves into single word moves before reload. In theory
13146 this can give better register allocation, but so far the reverse
13147 seems to be generally the case.
13148
13149 -m1reg-reg
13150 Specify a register to hold the constant -1, which makes loading
13151 small negative constants and certain bitmasks faster. Allowable
13152 values for reg are r43 and r63, which specify use of that register
13153 as a fixed register, and none, which means that no register is used
13154 for this purpose. The default is -m1reg-none.
13155
13156 ARC Options
13157 The following options control the architecture variant for which code
13158 is being compiled:
13159
13160 -mbarrel-shifter
13161 Generate instructions supported by barrel shifter. This is the
13162 default unless -mcpu=ARC601 or -mcpu=ARCEM is in effect.
13163
13164 -mjli-always
13165 Force to call a function using jli_s instruction. This option is
13166 valid only for ARCv2 architecture.
13167
13168 -mcpu=cpu
13169 Set architecture type, register usage, and instruction scheduling
13170 parameters for cpu. There are also shortcut alias options
13171 available for backward compatibility and convenience. Supported
13172 values for cpu are
13173
13174 arc600
13175 Compile for ARC600. Aliases: -mA6, -mARC600.
13176
13177 arc601
13178 Compile for ARC601. Alias: -mARC601.
13179
13180 arc700
13181 Compile for ARC700. Aliases: -mA7, -mARC700. This is the
13182 default when configured with --with-cpu=arc700.
13183
13184 arcem
13185 Compile for ARC EM.
13186
13187 archs
13188 Compile for ARC HS.
13189
13190 em Compile for ARC EM CPU with no hardware extensions.
13191
13192 em4 Compile for ARC EM4 CPU.
13193
13194 em4_dmips
13195 Compile for ARC EM4 DMIPS CPU.
13196
13197 em4_fpus
13198 Compile for ARC EM4 DMIPS CPU with the single-precision
13199 floating-point extension.
13200
13201 em4_fpuda
13202 Compile for ARC EM4 DMIPS CPU with single-precision floating-
13203 point and double assist instructions.
13204
13205 hs Compile for ARC HS CPU with no hardware extensions except the
13206 atomic instructions.
13207
13208 hs34
13209 Compile for ARC HS34 CPU.
13210
13211 hs38
13212 Compile for ARC HS38 CPU.
13213
13214 hs38_linux
13215 Compile for ARC HS38 CPU with all hardware extensions on.
13216
13217 arc600_norm
13218 Compile for ARC 600 CPU with "norm" instructions enabled.
13219
13220 arc600_mul32x16
13221 Compile for ARC 600 CPU with "norm" and 32x16-bit multiply
13222 instructions enabled.
13223
13224 arc600_mul64
13225 Compile for ARC 600 CPU with "norm" and "mul64"-family
13226 instructions enabled.
13227
13228 arc601_norm
13229 Compile for ARC 601 CPU with "norm" instructions enabled.
13230
13231 arc601_mul32x16
13232 Compile for ARC 601 CPU with "norm" and 32x16-bit multiply
13233 instructions enabled.
13234
13235 arc601_mul64
13236 Compile for ARC 601 CPU with "norm" and "mul64"-family
13237 instructions enabled.
13238
13239 nps400
13240 Compile for ARC 700 on NPS400 chip.
13241
13242 em_mini
13243 Compile for ARC EM minimalist configuration featuring reduced
13244 register set.
13245
13246 -mdpfp
13247 -mdpfp-compact
13248 Generate double-precision FPX instructions, tuned for the compact
13249 implementation.
13250
13251 -mdpfp-fast
13252 Generate double-precision FPX instructions, tuned for the fast
13253 implementation.
13254
13255 -mno-dpfp-lrsr
13256 Disable "lr" and "sr" instructions from using FPX extension aux
13257 registers.
13258
13259 -mea
13260 Generate extended arithmetic instructions. Currently only "divaw",
13261 "adds", "subs", and "sat16" are supported. This is always enabled
13262 for -mcpu=ARC700.
13263
13264 -mno-mpy
13265 Do not generate "mpy"-family instructions for ARC700. This option
13266 is deprecated.
13267
13268 -mmul32x16
13269 Generate 32x16-bit multiply and multiply-accumulate instructions.
13270
13271 -mmul64
13272 Generate "mul64" and "mulu64" instructions. Only valid for
13273 -mcpu=ARC600.
13274
13275 -mnorm
13276 Generate "norm" instructions. This is the default if -mcpu=ARC700
13277 is in effect.
13278
13279 -mspfp
13280 -mspfp-compact
13281 Generate single-precision FPX instructions, tuned for the compact
13282 implementation.
13283
13284 -mspfp-fast
13285 Generate single-precision FPX instructions, tuned for the fast
13286 implementation.
13287
13288 -msimd
13289 Enable generation of ARC SIMD instructions via target-specific
13290 builtins. Only valid for -mcpu=ARC700.
13291
13292 -msoft-float
13293 This option ignored; it is provided for compatibility purposes
13294 only. Software floating-point code is emitted by default, and this
13295 default can overridden by FPX options; -mspfp, -mspfp-compact, or
13296 -mspfp-fast for single precision, and -mdpfp, -mdpfp-compact, or
13297 -mdpfp-fast for double precision.
13298
13299 -mswap
13300 Generate "swap" instructions.
13301
13302 -matomic
13303 This enables use of the locked load/store conditional extension to
13304 implement atomic memory built-in functions. Not available for ARC
13305 6xx or ARC EM cores.
13306
13307 -mdiv-rem
13308 Enable "div" and "rem" instructions for ARCv2 cores.
13309
13310 -mcode-density
13311 Enable code density instructions for ARC EM. This option is on by
13312 default for ARC HS.
13313
13314 -mll64
13315 Enable double load/store operations for ARC HS cores.
13316
13317 -mtp-regno=regno
13318 Specify thread pointer register number.
13319
13320 -mmpy-option=multo
13321 Compile ARCv2 code with a multiplier design option. You can
13322 specify the option using either a string or numeric value for
13323 multo. wlh1 is the default value. The recognized values are:
13324
13325 0
13326 none
13327 No multiplier available.
13328
13329 1
13330 w 16x16 multiplier, fully pipelined. The following instructions
13331 are enabled: "mpyw" and "mpyuw".
13332
13333 2
13334 wlh1
13335 32x32 multiplier, fully pipelined (1 stage). The following
13336 instructions are additionally enabled: "mpy", "mpyu", "mpym",
13337 "mpymu", and "mpy_s".
13338
13339 3
13340 wlh2
13341 32x32 multiplier, fully pipelined (2 stages). The following
13342 instructions are additionally enabled: "mpy", "mpyu", "mpym",
13343 "mpymu", and "mpy_s".
13344
13345 4
13346 wlh3
13347 Two 16x16 multipliers, blocking, sequential. The following
13348 instructions are additionally enabled: "mpy", "mpyu", "mpym",
13349 "mpymu", and "mpy_s".
13350
13351 5
13352 wlh4
13353 One 16x16 multiplier, blocking, sequential. The following
13354 instructions are additionally enabled: "mpy", "mpyu", "mpym",
13355 "mpymu", and "mpy_s".
13356
13357 6
13358 wlh5
13359 One 32x4 multiplier, blocking, sequential. The following
13360 instructions are additionally enabled: "mpy", "mpyu", "mpym",
13361 "mpymu", and "mpy_s".
13362
13363 7
13364 plus_dmpy
13365 ARC HS SIMD support.
13366
13367 8
13368 plus_macd
13369 ARC HS SIMD support.
13370
13371 9
13372 plus_qmacw
13373 ARC HS SIMD support.
13374
13375 This option is only available for ARCv2 cores.
13376
13377 -mfpu=fpu
13378 Enables support for specific floating-point hardware extensions for
13379 ARCv2 cores. Supported values for fpu are:
13380
13381 fpus
13382 Enables support for single-precision floating-point hardware
13383 extensions.
13384
13385 fpud
13386 Enables support for double-precision floating-point hardware
13387 extensions. The single-precision floating-point extension is
13388 also enabled. Not available for ARC EM.
13389
13390 fpuda
13391 Enables support for double-precision floating-point hardware
13392 extensions using double-precision assist instructions. The
13393 single-precision floating-point extension is also enabled.
13394 This option is only available for ARC EM.
13395
13396 fpuda_div
13397 Enables support for double-precision floating-point hardware
13398 extensions using double-precision assist instructions. The
13399 single-precision floating-point, square-root, and divide
13400 extensions are also enabled. This option is only available for
13401 ARC EM.
13402
13403 fpuda_fma
13404 Enables support for double-precision floating-point hardware
13405 extensions using double-precision assist instructions. The
13406 single-precision floating-point and fused multiply and add
13407 hardware extensions are also enabled. This option is only
13408 available for ARC EM.
13409
13410 fpuda_all
13411 Enables support for double-precision floating-point hardware
13412 extensions using double-precision assist instructions. All
13413 single-precision floating-point hardware extensions are also
13414 enabled. This option is only available for ARC EM.
13415
13416 fpus_div
13417 Enables support for single-precision floating-point, square-
13418 root and divide hardware extensions.
13419
13420 fpud_div
13421 Enables support for double-precision floating-point, square-
13422 root and divide hardware extensions. This option includes
13423 option fpus_div. Not available for ARC EM.
13424
13425 fpus_fma
13426 Enables support for single-precision floating-point and fused
13427 multiply and add hardware extensions.
13428
13429 fpud_fma
13430 Enables support for double-precision floating-point and fused
13431 multiply and add hardware extensions. This option includes
13432 option fpus_fma. Not available for ARC EM.
13433
13434 fpus_all
13435 Enables support for all single-precision floating-point
13436 hardware extensions.
13437
13438 fpud_all
13439 Enables support for all single- and double-precision floating-
13440 point hardware extensions. Not available for ARC EM.
13441
13442 -mirq-ctrl-saved=register-range, blink, lp_count
13443 Specifies general-purposes registers that the processor
13444 automatically saves/restores on interrupt entry and exit.
13445 register-range is specified as two registers separated by a dash.
13446 The register range always starts with "r0", the upper limit is "fp"
13447 register. blink and lp_count are optional. This option is only
13448 valid for ARC EM and ARC HS cores.
13449
13450 -mrgf-banked-regs=number
13451 Specifies the number of registers replicated in second register
13452 bank on entry to fast interrupt. Fast interrupts are interrupts
13453 with the highest priority level P0. These interrupts save only PC
13454 and STATUS32 registers to avoid memory transactions during
13455 interrupt entry and exit sequences. Use this option when you are
13456 using fast interrupts in an ARC V2 family processor. Permitted
13457 values are 4, 8, 16, and 32.
13458
13459 -mlpc-width=width
13460 Specify the width of the "lp_count" register. Valid values for
13461 width are 8, 16, 20, 24, 28 and 32 bits. The default width is
13462 fixed to 32 bits. If the width is less than 32, the compiler does
13463 not attempt to transform loops in your program to use the zero-
13464 delay loop mechanism unless it is known that the "lp_count"
13465 register can hold the required loop-counter value. Depending on
13466 the width specified, the compiler and run-time library might
13467 continue to use the loop mechanism for various needs. This option
13468 defines macro "__ARC_LPC_WIDTH__" with the value of width.
13469
13470 -mrf16
13471 This option instructs the compiler to generate code for a 16-entry
13472 register file. This option defines the "__ARC_RF16__" preprocessor
13473 macro.
13474
13475 The following options are passed through to the assembler, and also
13476 define preprocessor macro symbols.
13477
13478 -mdsp-packa
13479 Passed down to the assembler to enable the DSP Pack A extensions.
13480 Also sets the preprocessor symbol "__Xdsp_packa". This option is
13481 deprecated.
13482
13483 -mdvbf
13484 Passed down to the assembler to enable the dual Viterbi butterfly
13485 extension. Also sets the preprocessor symbol "__Xdvbf". This
13486 option is deprecated.
13487
13488 -mlock
13489 Passed down to the assembler to enable the locked load/store
13490 conditional extension. Also sets the preprocessor symbol
13491 "__Xlock".
13492
13493 -mmac-d16
13494 Passed down to the assembler. Also sets the preprocessor symbol
13495 "__Xxmac_d16". This option is deprecated.
13496
13497 -mmac-24
13498 Passed down to the assembler. Also sets the preprocessor symbol
13499 "__Xxmac_24". This option is deprecated.
13500
13501 -mrtsc
13502 Passed down to the assembler to enable the 64-bit time-stamp
13503 counter extension instruction. Also sets the preprocessor symbol
13504 "__Xrtsc". This option is deprecated.
13505
13506 -mswape
13507 Passed down to the assembler to enable the swap byte ordering
13508 extension instruction. Also sets the preprocessor symbol
13509 "__Xswape".
13510
13511 -mtelephony
13512 Passed down to the assembler to enable dual- and single-operand
13513 instructions for telephony. Also sets the preprocessor symbol
13514 "__Xtelephony". This option is deprecated.
13515
13516 -mxy
13517 Passed down to the assembler to enable the XY memory extension.
13518 Also sets the preprocessor symbol "__Xxy".
13519
13520 The following options control how the assembly code is annotated:
13521
13522 -misize
13523 Annotate assembler instructions with estimated addresses.
13524
13525 -mannotate-align
13526 Explain what alignment considerations lead to the decision to make
13527 an instruction short or long.
13528
13529 The following options are passed through to the linker:
13530
13531 -marclinux
13532 Passed through to the linker, to specify use of the "arclinux"
13533 emulation. This option is enabled by default in tool chains built
13534 for "arc-linux-uclibc" and "arceb-linux-uclibc" targets when
13535 profiling is not requested.
13536
13537 -marclinux_prof
13538 Passed through to the linker, to specify use of the "arclinux_prof"
13539 emulation. This option is enabled by default in tool chains built
13540 for "arc-linux-uclibc" and "arceb-linux-uclibc" targets when
13541 profiling is requested.
13542
13543 The following options control the semantics of generated code:
13544
13545 -mlong-calls
13546 Generate calls as register indirect calls, thus providing access to
13547 the full 32-bit address range.
13548
13549 -mmedium-calls
13550 Don't use less than 25-bit addressing range for calls, which is the
13551 offset available for an unconditional branch-and-link instruction.
13552 Conditional execution of function calls is suppressed, to allow use
13553 of the 25-bit range, rather than the 21-bit range with conditional
13554 branch-and-link. This is the default for tool chains built for
13555 "arc-linux-uclibc" and "arceb-linux-uclibc" targets.
13556
13557 -G num
13558 Put definitions of externally-visible data in a small data section
13559 if that data is no bigger than num bytes. The default value of num
13560 is 4 for any ARC configuration, or 8 when we have double load/store
13561 operations.
13562
13563 -mno-sdata
13564 Do not generate sdata references. This is the default for tool
13565 chains built for "arc-linux-uclibc" and "arceb-linux-uclibc"
13566 targets.
13567
13568 -mvolatile-cache
13569 Use ordinarily cached memory accesses for volatile references.
13570 This is the default.
13571
13572 -mno-volatile-cache
13573 Enable cache bypass for volatile references.
13574
13575 The following options fine tune code generation:
13576
13577 -malign-call
13578 Do alignment optimizations for call instructions.
13579
13580 -mauto-modify-reg
13581 Enable the use of pre/post modify with register displacement.
13582
13583 -mbbit-peephole
13584 Enable bbit peephole2.
13585
13586 -mno-brcc
13587 This option disables a target-specific pass in arc_reorg to
13588 generate compare-and-branch ("brcc") instructions. It has no
13589 effect on generation of these instructions driven by the combiner
13590 pass.
13591
13592 -mcase-vector-pcrel
13593 Use PC-relative switch case tables to enable case table shortening.
13594 This is the default for -Os.
13595
13596 -mcompact-casesi
13597 Enable compact "casesi" pattern. This is the default for -Os, and
13598 only available for ARCv1 cores.
13599
13600 -mno-cond-exec
13601 Disable the ARCompact-specific pass to generate conditional
13602 execution instructions.
13603
13604 Due to delay slot scheduling and interactions between operand
13605 numbers, literal sizes, instruction lengths, and the support for
13606 conditional execution, the target-independent pass to generate
13607 conditional execution is often lacking, so the ARC port has kept a
13608 special pass around that tries to find more conditional execution
13609 generation opportunities after register allocation, branch
13610 shortening, and delay slot scheduling have been done. This pass
13611 generally, but not always, improves performance and code size, at
13612 the cost of extra compilation time, which is why there is an option
13613 to switch it off. If you have a problem with call instructions
13614 exceeding their allowable offset range because they are
13615 conditionalized, you should consider using -mmedium-calls instead.
13616
13617 -mearly-cbranchsi
13618 Enable pre-reload use of the "cbranchsi" pattern.
13619
13620 -mexpand-adddi
13621 Expand "adddi3" and "subdi3" at RTL generation time into "add.f",
13622 "adc" etc. This option is deprecated.
13623
13624 -mindexed-loads
13625 Enable the use of indexed loads. This can be problematic because
13626 some optimizers then assume that indexed stores exist, which is not
13627 the case.
13628
13629 -mlra
13630 Enable Local Register Allocation. This is still experimental for
13631 ARC, so by default the compiler uses standard reload (i.e.
13632 -mno-lra).
13633
13634 -mlra-priority-none
13635 Don't indicate any priority for target registers.
13636
13637 -mlra-priority-compact
13638 Indicate target register priority for r0..r3 / r12..r15.
13639
13640 -mlra-priority-noncompact
13641 Reduce target register priority for r0..r3 / r12..r15.
13642
13643 -mno-millicode
13644 When optimizing for size (using -Os), prologues and epilogues that
13645 have to save or restore a large number of registers are often
13646 shortened by using call to a special function in libgcc; this is
13647 referred to as a millicode call. As these calls can pose
13648 performance issues, and/or cause linking issues when linking in a
13649 nonstandard way, this option is provided to turn off millicode call
13650 generation.
13651
13652 -mmixed-code
13653 Tweak register allocation to help 16-bit instruction generation.
13654 This generally has the effect of decreasing the average instruction
13655 size while increasing the instruction count.
13656
13657 -mq-class
13658 Enable q instruction alternatives. This is the default for -Os.
13659
13660 -mRcq
13661 Enable Rcq constraint handling. Most short code generation depends
13662 on this. This is the default.
13663
13664 -mRcw
13665 Enable Rcw constraint handling. Most ccfsm condexec mostly depends
13666 on this. This is the default.
13667
13668 -msize-level=level
13669 Fine-tune size optimization with regards to instruction lengths and
13670 alignment. The recognized values for level are:
13671
13672 0 No size optimization. This level is deprecated and treated
13673 like 1.
13674
13675 1 Short instructions are used opportunistically.
13676
13677 2 In addition, alignment of loops and of code after barriers are
13678 dropped.
13679
13680 3 In addition, optional data alignment is dropped, and the option
13681 Os is enabled.
13682
13683 This defaults to 3 when -Os is in effect. Otherwise, the behavior
13684 when this is not set is equivalent to level 1.
13685
13686 -mtune=cpu
13687 Set instruction scheduling parameters for cpu, overriding any
13688 implied by -mcpu=.
13689
13690 Supported values for cpu are
13691
13692 ARC600
13693 Tune for ARC600 CPU.
13694
13695 ARC601
13696 Tune for ARC601 CPU.
13697
13698 ARC700
13699 Tune for ARC700 CPU with standard multiplier block.
13700
13701 ARC700-xmac
13702 Tune for ARC700 CPU with XMAC block.
13703
13704 ARC725D
13705 Tune for ARC725D CPU.
13706
13707 ARC750D
13708 Tune for ARC750D CPU.
13709
13710 -mmultcost=num
13711 Cost to assume for a multiply instruction, with 4 being equal to a
13712 normal instruction.
13713
13714 -munalign-prob-threshold=probability
13715 Set probability threshold for unaligning branches. When tuning for
13716 ARC700 and optimizing for speed, branches without filled delay slot
13717 are preferably emitted unaligned and long, unless profiling
13718 indicates that the probability for the branch to be taken is below
13719 probability. The default is (REG_BR_PROB_BASE/2), i.e. 5000.
13720
13721 The following options are maintained for backward compatibility, but
13722 are now deprecated and will be removed in a future release:
13723
13724 -margonaut
13725 Obsolete FPX.
13726
13727 -mbig-endian
13728 -EB Compile code for big-endian targets. Use of these options is now
13729 deprecated. Big-endian code is supported by configuring GCC to
13730 build "arceb-elf32" and "arceb-linux-uclibc" targets, for which big
13731 endian is the default.
13732
13733 -mlittle-endian
13734 -EL Compile code for little-endian targets. Use of these options is
13735 now deprecated. Little-endian code is supported by configuring GCC
13736 to build "arc-elf32" and "arc-linux-uclibc" targets, for which
13737 little endian is the default.
13738
13739 -mbarrel_shifter
13740 Replaced by -mbarrel-shifter.
13741
13742 -mdpfp_compact
13743 Replaced by -mdpfp-compact.
13744
13745 -mdpfp_fast
13746 Replaced by -mdpfp-fast.
13747
13748 -mdsp_packa
13749 Replaced by -mdsp-packa.
13750
13751 -mEA
13752 Replaced by -mea.
13753
13754 -mmac_24
13755 Replaced by -mmac-24.
13756
13757 -mmac_d16
13758 Replaced by -mmac-d16.
13759
13760 -mspfp_compact
13761 Replaced by -mspfp-compact.
13762
13763 -mspfp_fast
13764 Replaced by -mspfp-fast.
13765
13766 -mtune=cpu
13767 Values arc600, arc601, arc700 and arc700-xmac for cpu are replaced
13768 by ARC600, ARC601, ARC700 and ARC700-xmac respectively.
13769
13770 -multcost=num
13771 Replaced by -mmultcost.
13772
13773 ARM Options
13774 These -m options are defined for the ARM port:
13775
13776 -mabi=name
13777 Generate code for the specified ABI. Permissible values are: apcs-
13778 gnu, atpcs, aapcs, aapcs-linux and iwmmxt.
13779
13780 -mapcs-frame
13781 Generate a stack frame that is compliant with the ARM Procedure
13782 Call Standard for all functions, even if this is not strictly
13783 necessary for correct execution of the code. Specifying
13784 -fomit-frame-pointer with this option causes the stack frames not
13785 to be generated for leaf functions. The default is
13786 -mno-apcs-frame. This option is deprecated.
13787
13788 -mapcs
13789 This is a synonym for -mapcs-frame and is deprecated.
13790
13791 -mthumb-interwork
13792 Generate code that supports calling between the ARM and Thumb
13793 instruction sets. Without this option, on pre-v5 architectures,
13794 the two instruction sets cannot be reliably used inside one
13795 program. The default is -mno-thumb-interwork, since slightly
13796 larger code is generated when -mthumb-interwork is specified. In
13797 AAPCS configurations this option is meaningless.
13798
13799 -mno-sched-prolog
13800 Prevent the reordering of instructions in the function prologue, or
13801 the merging of those instruction with the instructions in the
13802 function's body. This means that all functions start with a
13803 recognizable set of instructions (or in fact one of a choice from a
13804 small set of different function prologues), and this information
13805 can be used to locate the start of functions inside an executable
13806 piece of code. The default is -msched-prolog.
13807
13808 -mfloat-abi=name
13809 Specifies which floating-point ABI to use. Permissible values are:
13810 soft, softfp and hard.
13811
13812 Specifying soft causes GCC to generate output containing library
13813 calls for floating-point operations. softfp allows the generation
13814 of code using hardware floating-point instructions, but still uses
13815 the soft-float calling conventions. hard allows generation of
13816 floating-point instructions and uses FPU-specific calling
13817 conventions.
13818
13819 The default depends on the specific target configuration. Note
13820 that the hard-float and soft-float ABIs are not link-compatible;
13821 you must compile your entire program with the same ABI, and link
13822 with a compatible set of libraries.
13823
13824 -mlittle-endian
13825 Generate code for a processor running in little-endian mode. This
13826 is the default for all standard configurations.
13827
13828 -mbig-endian
13829 Generate code for a processor running in big-endian mode; the
13830 default is to compile code for a little-endian processor.
13831
13832 -mbe8
13833 -mbe32
13834 When linking a big-endian image select between BE8 and BE32
13835 formats. The option has no effect for little-endian images and is
13836 ignored. The default is dependent on the selected target
13837 architecture. For ARMv6 and later architectures the default is
13838 BE8, for older architectures the default is BE32. BE32 format has
13839 been deprecated by ARM.
13840
13841 -march=name[+extension...]
13842 This specifies the name of the target ARM architecture. GCC uses
13843 this name to determine what kind of instructions it can emit when
13844 generating assembly code. This option can be used in conjunction
13845 with or instead of the -mcpu= option.
13846
13847 Permissible names are: armv4t, armv5t, armv5te, armv6, armv6j,
13848 armv6k, armv6kz, armv6t2, armv6z, armv6zk, armv7, armv7-a, armv7ve,
13849 armv8-a, armv8.1-a, armv8.2-a, armv8.3-a, armv8.4-a, armv7-r,
13850 armv8-r, armv6-m, armv6s-m, armv7-m, armv7e-m, armv8-m.base,
13851 armv8-m.main, iwmmxt and iwmmxt2.
13852
13853 Additionally, the following architectures, which lack support for
13854 the Thumb execution state, are recognized but support is
13855 deprecated: armv2, armv2a, armv3, armv3m, armv4, armv5 and armv5e.
13856
13857 Many of the architectures support extensions. These can be added
13858 by appending +extension to the architecture name. Extension
13859 options are processed in order and capabilities accumulate. An
13860 extension will also enable any necessary base extensions upon which
13861 it depends. For example, the +crypto extension will always enable
13862 the +simd extension. The exception to the additive construction is
13863 for extensions that are prefixed with +no...: these extensions
13864 disable the specified option and any other extensions that may
13865 depend on the presence of that extension.
13866
13867 For example, -march=armv7-a+simd+nofp+vfpv4 is equivalent to
13868 writing -march=armv7-a+vfpv4 since the +simd option is entirely
13869 disabled by the +nofp option that follows it.
13870
13871 Most extension names are generically named, but have an effect that
13872 is dependent upon the architecture to which it is applied. For
13873 example, the +simd option can be applied to both armv7-a and
13874 armv8-a architectures, but will enable the original ARMv7-A
13875 Advanced SIMD (Neon) extensions for armv7-a and the ARMv8-A variant
13876 for armv8-a.
13877
13878 The table below lists the supported extensions for each
13879 architecture. Architectures not mentioned do not support any
13880 extensions.
13881
13882 armv5e
13883 armv5te
13884 armv6
13885 armv6j
13886 armv6k
13887 armv6kz
13888 armv6t2
13889 armv6z
13890 armv6zk
13891 +fp The VFPv2 floating-point instructions. The extension
13892 +vfpv2 can be used as an alias for this extension.
13893
13894 +nofp
13895 Disable the floating-point instructions.
13896
13897 armv7
13898 The common subset of the ARMv7-A, ARMv7-R and ARMv7-M
13899 architectures.
13900
13901 +fp The VFPv3 floating-point instructions, with 16 double-
13902 precision registers. The extension +vfpv3-d16 can be used
13903 as an alias for this extension. Note that floating-point
13904 is not supported by the base ARMv7-M architecture, but is
13905 compatible with both the ARMv7-A and ARMv7-R architectures.
13906
13907 +nofp
13908 Disable the floating-point instructions.
13909
13910 armv7-a
13911 +mp The multiprocessing extension.
13912
13913 +sec
13914 The security extension.
13915
13916 +fp The VFPv3 floating-point instructions, with 16 double-
13917 precision registers. The extension +vfpv3-d16 can be used
13918 as an alias for this extension.
13919
13920 +simd
13921 The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
13922 instructions. The extensions +neon and +neon-vfpv3 can be
13923 used as aliases for this extension.
13924
13925 +vfpv3
13926 The VFPv3 floating-point instructions, with 32 double-
13927 precision registers.
13928
13929 +vfpv3-d16-fp16
13930 The VFPv3 floating-point instructions, with 16 double-
13931 precision registers and the half-precision floating-point
13932 conversion operations.
13933
13934 +vfpv3-fp16
13935 The VFPv3 floating-point instructions, with 32 double-
13936 precision registers and the half-precision floating-point
13937 conversion operations.
13938
13939 +vfpv4-d16
13940 The VFPv4 floating-point instructions, with 16 double-
13941 precision registers.
13942
13943 +vfpv4
13944 The VFPv4 floating-point instructions, with 32 double-
13945 precision registers.
13946
13947 +neon-fp16
13948 The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
13949 instructions, with the half-precision floating-point
13950 conversion operations.
13951
13952 +neon-vfpv4
13953 The Advanced SIMD (Neon) v2 and the VFPv4 floating-point
13954 instructions.
13955
13956 +nosimd
13957 Disable the Advanced SIMD instructions (does not disable
13958 floating point).
13959
13960 +nofp
13961 Disable the floating-point and Advanced SIMD instructions.
13962
13963 armv7ve
13964 The extended version of the ARMv7-A architecture with support
13965 for virtualization.
13966
13967 +fp The VFPv4 floating-point instructions, with 16 double-
13968 precision registers. The extension +vfpv4-d16 can be used
13969 as an alias for this extension.
13970
13971 +simd
13972 The Advanced SIMD (Neon) v2 and the VFPv4 floating-point
13973 instructions. The extension +neon-vfpv4 can be used as an
13974 alias for this extension.
13975
13976 +vfpv3-d16
13977 The VFPv3 floating-point instructions, with 16 double-
13978 precision registers.
13979
13980 +vfpv3
13981 The VFPv3 floating-point instructions, with 32 double-
13982 precision registers.
13983
13984 +vfpv3-d16-fp16
13985 The VFPv3 floating-point instructions, with 16 double-
13986 precision registers and the half-precision floating-point
13987 conversion operations.
13988
13989 +vfpv3-fp16
13990 The VFPv3 floating-point instructions, with 32 double-
13991 precision registers and the half-precision floating-point
13992 conversion operations.
13993
13994 +vfpv4-d16
13995 The VFPv4 floating-point instructions, with 16 double-
13996 precision registers.
13997
13998 +vfpv4
13999 The VFPv4 floating-point instructions, with 32 double-
14000 precision registers.
14001
14002 +neon
14003 The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
14004 instructions. The extension +neon-vfpv3 can be used as an
14005 alias for this extension.
14006
14007 +neon-fp16
14008 The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
14009 instructions, with the half-precision floating-point
14010 conversion operations.
14011
14012 +nosimd
14013 Disable the Advanced SIMD instructions (does not disable
14014 floating point).
14015
14016 +nofp
14017 Disable the floating-point and Advanced SIMD instructions.
14018
14019 armv8-a
14020 +crc
14021 The Cyclic Redundancy Check (CRC) instructions.
14022
14023 +simd
14024 The ARMv8-A Advanced SIMD and floating-point instructions.
14025
14026 +crypto
14027 The cryptographic instructions.
14028
14029 +nocrypto
14030 Disable the cryptographic instructions.
14031
14032 +nofp
14033 Disable the floating-point, Advanced SIMD and cryptographic
14034 instructions.
14035
14036 armv8.1-a
14037 +simd
14038 The ARMv8.1-A Advanced SIMD and floating-point
14039 instructions.
14040
14041 +crypto
14042 The cryptographic instructions. This also enables the
14043 Advanced SIMD and floating-point instructions.
14044
14045 +nocrypto
14046 Disable the cryptographic instructions.
14047
14048 +nofp
14049 Disable the floating-point, Advanced SIMD and cryptographic
14050 instructions.
14051
14052 armv8.2-a
14053 armv8.3-a
14054 +fp16
14055 The half-precision floating-point data processing
14056 instructions. This also enables the Advanced SIMD and
14057 floating-point instructions.
14058
14059 +fp16fml
14060 The half-precision floating-point fmla extension. This
14061 also enables the half-precision floating-point extension
14062 and Advanced SIMD and floating-point instructions.
14063
14064 +simd
14065 The ARMv8.1-A Advanced SIMD and floating-point
14066 instructions.
14067
14068 +crypto
14069 The cryptographic instructions. This also enables the
14070 Advanced SIMD and floating-point instructions.
14071
14072 +dotprod
14073 Enable the Dot Product extension. This also enables
14074 Advanced SIMD instructions.
14075
14076 +nocrypto
14077 Disable the cryptographic extension.
14078
14079 +nofp
14080 Disable the floating-point, Advanced SIMD and cryptographic
14081 instructions.
14082
14083 armv8.4-a
14084 +fp16
14085 The half-precision floating-point data processing
14086 instructions. This also enables the Advanced SIMD and
14087 floating-point instructions as well as the Dot Product
14088 extension and the half-precision floating-point fmla
14089 extension.
14090
14091 +simd
14092 The ARMv8.3-A Advanced SIMD and floating-point instructions
14093 as well as the Dot Product extension.
14094
14095 +crypto
14096 The cryptographic instructions. This also enables the
14097 Advanced SIMD and floating-point instructions as well as
14098 the Dot Product extension.
14099
14100 +nocrypto
14101 Disable the cryptographic extension.
14102
14103 +nofp
14104 Disable the floating-point, Advanced SIMD and cryptographic
14105 instructions.
14106
14107 armv7-r
14108 +fp.sp
14109 The single-precision VFPv3 floating-point instructions.
14110 The extension +vfpv3xd can be used as an alias for this
14111 extension.
14112
14113 +fp The VFPv3 floating-point instructions with 16 double-
14114 precision registers. The extension +vfpv3-d16 can be used
14115 as an alias for this extension.
14116
14117 +vfpv3xd-d16-fp16
14118 The single-precision VFPv3 floating-point instructions with
14119 16 double-precision registers and the half-precision
14120 floating-point conversion operations.
14121
14122 +vfpv3-d16-fp16
14123 The VFPv3 floating-point instructions, with 16 double-
14124 precision registers and the half-precision floating-point
14125 conversion operations.
14126
14127 +nofp
14128 Disable the floating-point extension.
14129
14130 +idiv
14131 The ARM-state integer division instructions.
14132
14133 +noidiv
14134 Disable the ARM-state integer division extension.
14135
14136 armv7e-m
14137 +fp The single-precision VFPv4 floating-point instructions.
14138
14139 +fpv5
14140 The single-precision FPv5 floating-point instructions.
14141
14142 +fp.dp
14143 The single- and double-precision FPv5 floating-point
14144 instructions.
14145
14146 +nofp
14147 Disable the floating-point extensions.
14148
14149 armv8-m.main
14150 +dsp
14151 The DSP instructions.
14152
14153 +nodsp
14154 Disable the DSP extension.
14155
14156 +fp The single-precision floating-point instructions.
14157
14158 +fp.dp
14159 The single- and double-precision floating-point
14160 instructions.
14161
14162 +nofp
14163 Disable the floating-point extension.
14164
14165 armv8-r
14166 +crc
14167 The Cyclic Redundancy Check (CRC) instructions.
14168
14169 +fp.sp
14170 The single-precision FPv5 floating-point instructions.
14171
14172 +simd
14173 The ARMv8-A Advanced SIMD and floating-point instructions.
14174
14175 +crypto
14176 The cryptographic instructions.
14177
14178 +nocrypto
14179 Disable the cryptographic instructions.
14180
14181 +nofp
14182 Disable the floating-point, Advanced SIMD and cryptographic
14183 instructions.
14184
14185 -march=native causes the compiler to auto-detect the architecture
14186 of the build computer. At present, this feature is only supported
14187 on GNU/Linux, and not all architectures are recognized. If the
14188 auto-detect is unsuccessful the option has no effect.
14189
14190 -mtune=name
14191 This option specifies the name of the target ARM processor for
14192 which GCC should tune the performance of the code. For some ARM
14193 implementations better performance can be obtained by using this
14194 option. Permissible names are: arm2, arm250, arm3, arm6, arm60,
14195 arm600, arm610, arm620, arm7, arm7m, arm7d, arm7dm, arm7di,
14196 arm7dmi, arm70, arm700, arm700i, arm710, arm710c, arm7100, arm720,
14197 arm7500, arm7500fe, arm7tdmi, arm7tdmi-s, arm710t, arm720t,
14198 arm740t, strongarm, strongarm110, strongarm1100, strongarm1110,
14199 arm8, arm810, arm9, arm9e, arm920, arm920t, arm922t, arm946e-s,
14200 arm966e-s, arm968e-s, arm926ej-s, arm940t, arm9tdmi, arm10tdmi,
14201 arm1020t, arm1026ej-s, arm10e, arm1020e, arm1022e, arm1136j-s,
14202 arm1136jf-s, mpcore, mpcorenovfp, arm1156t2-s, arm1156t2f-s,
14203 arm1176jz-s, arm1176jzf-s, generic-armv7-a, cortex-a5, cortex-a7,
14204 cortex-a8, cortex-a9, cortex-a12, cortex-a15, cortex-a17,
14205 cortex-a32, cortex-a35, cortex-a53, cortex-a55, cortex-a57,
14206 cortex-a72, cortex-a73, cortex-a75, cortex-r4, cortex-r4f,
14207 cortex-r5, cortex-r7, cortex-r8, cortex-r52, cortex-m33,
14208 cortex-m23, cortex-m7, cortex-m4, cortex-m3, cortex-m1, cortex-m0,
14209 cortex-m0plus, cortex-m1.small-multiply, cortex-m0.small-multiply,
14210 cortex-m0plus.small-multiply, exynos-m1, marvell-pj4, xscale,
14211 iwmmxt, iwmmxt2, ep9312, fa526, fa626, fa606te, fa626te, fmp626,
14212 fa726te, xgene1.
14213
14214 Additionally, this option can specify that GCC should tune the
14215 performance of the code for a big.LITTLE system. Permissible names
14216 are: cortex-a15.cortex-a7, cortex-a17.cortex-a7,
14217 cortex-a57.cortex-a53, cortex-a72.cortex-a53,
14218 cortex-a72.cortex-a35, cortex-a73.cortex-a53,
14219 cortex-a75.cortex-a55.
14220
14221 -mtune=generic-arch specifies that GCC should tune the performance
14222 for a blend of processors within architecture arch. The aim is to
14223 generate code that run well on the current most popular processors,
14224 balancing between optimizations that benefit some CPUs in the
14225 range, and avoiding performance pitfalls of other CPUs. The
14226 effects of this option may change in future GCC versions as CPU
14227 models come and go.
14228
14229 -mtune permits the same extension options as -mcpu, but the
14230 extension options do not affect the tuning of the generated code.
14231
14232 -mtune=native causes the compiler to auto-detect the CPU of the
14233 build computer. At present, this feature is only supported on
14234 GNU/Linux, and not all architectures are recognized. If the auto-
14235 detect is unsuccessful the option has no effect.
14236
14237 -mcpu=name[+extension...]
14238 This specifies the name of the target ARM processor. GCC uses this
14239 name to derive the name of the target ARM architecture (as if
14240 specified by -march) and the ARM processor type for which to tune
14241 for performance (as if specified by -mtune). Where this option is
14242 used in conjunction with -march or -mtune, those options take
14243 precedence over the appropriate part of this option.
14244
14245 Many of the supported CPUs implement optional architectural
14246 extensions. Where this is so the architectural extensions are
14247 normally enabled by default. If implementations that lack the
14248 extension exist, then the extension syntax can be used to disable
14249 those extensions that have been omitted. For floating-point and
14250 Advanced SIMD (Neon) instructions, the settings of the options
14251 -mfloat-abi and -mfpu must also be considered: floating-point and
14252 Advanced SIMD instructions will only be used if -mfloat-abi is not
14253 set to soft; and any setting of -mfpu other than auto will override
14254 the available floating-point and SIMD extension instructions.
14255
14256 For example, cortex-a9 can be found in three major configurations:
14257 integer only, with just a floating-point unit or with floating-
14258 point and Advanced SIMD. The default is to enable all the
14259 instructions, but the extensions +nosimd and +nofp can be used to
14260 disable just the SIMD or both the SIMD and floating-point
14261 instructions respectively.
14262
14263 Permissible names for this option are the same as those for -mtune.
14264
14265 The following extension options are common to the listed CPUs:
14266
14267 +nodsp
14268 Disable the DSP instructions on cortex-m33.
14269
14270 +nofp
14271 Disables the floating-point instructions on arm9e, arm946e-s,
14272 arm966e-s, arm968e-s, arm10e, arm1020e, arm1022e, arm926ej-s,
14273 arm1026ej-s, cortex-r5, cortex-r7, cortex-r8, cortex-m4,
14274 cortex-m7 and cortex-m33. Disables the floating-point and SIMD
14275 instructions on generic-armv7-a, cortex-a5, cortex-a7,
14276 cortex-a8, cortex-a9, cortex-a12, cortex-a15, cortex-a17,
14277 cortex-a15.cortex-a7, cortex-a17.cortex-a7, cortex-a32,
14278 cortex-a35, cortex-a53 and cortex-a55.
14279
14280 +nofp.dp
14281 Disables the double-precision component of the floating-point
14282 instructions on cortex-r5, cortex-r7, cortex-r8, cortex-r52 and
14283 cortex-m7.
14284
14285 +nosimd
14286 Disables the SIMD (but not floating-point) instructions on
14287 generic-armv7-a, cortex-a5, cortex-a7 and cortex-a9.
14288
14289 +crypto
14290 Enables the cryptographic instructions on cortex-a32,
14291 cortex-a35, cortex-a53, cortex-a55, cortex-a57, cortex-a72,
14292 cortex-a73, cortex-a75, exynos-m1, xgene1,
14293 cortex-a57.cortex-a53, cortex-a72.cortex-a53,
14294 cortex-a73.cortex-a35, cortex-a73.cortex-a53 and
14295 cortex-a75.cortex-a55.
14296
14297 Additionally the generic-armv7-a pseudo target defaults to VFPv3
14298 with 16 double-precision registers. It supports the following
14299 extension options: mp, sec, vfpv3-d16, vfpv3, vfpv3-d16-fp16,
14300 vfpv3-fp16, vfpv4-d16, vfpv4, neon, neon-vfpv3, neon-fp16,
14301 neon-vfpv4. The meanings are the same as for the extensions to
14302 -march=armv7-a.
14303
14304 -mcpu=generic-arch is also permissible, and is equivalent to
14305 -march=arch -mtune=generic-arch. See -mtune for more information.
14306
14307 -mcpu=native causes the compiler to auto-detect the CPU of the
14308 build computer. At present, this feature is only supported on
14309 GNU/Linux, and not all architectures are recognized. If the auto-
14310 detect is unsuccessful the option has no effect.
14311
14312 -mfpu=name
14313 This specifies what floating-point hardware (or hardware emulation)
14314 is available on the target. Permissible names are: auto, vfpv2,
14315 vfpv3, vfpv3-fp16, vfpv3-d16, vfpv3-d16-fp16, vfpv3xd,
14316 vfpv3xd-fp16, neon-vfpv3, neon-fp16, vfpv4, vfpv4-d16, fpv4-sp-d16,
14317 neon-vfpv4, fpv5-d16, fpv5-sp-d16, fp-armv8, neon-fp-armv8 and
14318 crypto-neon-fp-armv8. Note that neon is an alias for neon-vfpv3
14319 and vfp is an alias for vfpv2.
14320
14321 The setting auto is the default and is special. It causes the
14322 compiler to select the floating-point and Advanced SIMD
14323 instructions based on the settings of -mcpu and -march.
14324
14325 If the selected floating-point hardware includes the NEON extension
14326 (e.g. -mfpu=neon), note that floating-point operations are not
14327 generated by GCC's auto-vectorization pass unless
14328 -funsafe-math-optimizations is also specified. This is because
14329 NEON hardware does not fully implement the IEEE 754 standard for
14330 floating-point arithmetic (in particular denormal values are
14331 treated as zero), so the use of NEON instructions may lead to a
14332 loss of precision.
14333
14334 You can also set the fpu name at function level by using the
14335 "target("fpu=")" function attributes or pragmas.
14336
14337 -mfp16-format=name
14338 Specify the format of the "__fp16" half-precision floating-point
14339 type. Permissible names are none, ieee, and alternative; the
14340 default is none, in which case the "__fp16" type is not defined.
14341
14342 -mstructure-size-boundary=n
14343 The sizes of all structures and unions are rounded up to a multiple
14344 of the number of bits set by this option. Permissible values are
14345 8, 32 and 64. The default value varies for different toolchains.
14346 For the COFF targeted toolchain the default value is 8. A value of
14347 64 is only allowed if the underlying ABI supports it.
14348
14349 Specifying a larger number can produce faster, more efficient code,
14350 but can also increase the size of the program. Different values
14351 are potentially incompatible. Code compiled with one value cannot
14352 necessarily expect to work with code or libraries compiled with
14353 another value, if they exchange information using structures or
14354 unions.
14355
14356 This option is deprecated.
14357
14358 -mabort-on-noreturn
14359 Generate a call to the function "abort" at the end of a "noreturn"
14360 function. It is executed if the function tries to return.
14361
14362 -mlong-calls
14363 -mno-long-calls
14364 Tells the compiler to perform function calls by first loading the
14365 address of the function into a register and then performing a
14366 subroutine call on this register. This switch is needed if the
14367 target function lies outside of the 64-megabyte addressing range of
14368 the offset-based version of subroutine call instruction.
14369
14370 Even if this switch is enabled, not all function calls are turned
14371 into long calls. The heuristic is that static functions, functions
14372 that have the "short_call" attribute, functions that are inside the
14373 scope of a "#pragma no_long_calls" directive, and functions whose
14374 definitions have already been compiled within the current
14375 compilation unit are not turned into long calls. The exceptions to
14376 this rule are that weak function definitions, functions with the
14377 "long_call" attribute or the "section" attribute, and functions
14378 that are within the scope of a "#pragma long_calls" directive are
14379 always turned into long calls.
14380
14381 This feature is not enabled by default. Specifying -mno-long-calls
14382 restores the default behavior, as does placing the function calls
14383 within the scope of a "#pragma long_calls_off" directive. Note
14384 these switches have no effect on how the compiler generates code to
14385 handle function calls via function pointers.
14386
14387 -msingle-pic-base
14388 Treat the register used for PIC addressing as read-only, rather
14389 than loading it in the prologue for each function. The runtime
14390 system is responsible for initializing this register with an
14391 appropriate value before execution begins.
14392
14393 -mpic-register=reg
14394 Specify the register to be used for PIC addressing. For standard
14395 PIC base case, the default is any suitable register determined by
14396 compiler. For single PIC base case, the default is R9 if target is
14397 EABI based or stack-checking is enabled, otherwise the default is
14398 R10.
14399
14400 -mpic-data-is-text-relative
14401 Assume that the displacement between the text and data segments is
14402 fixed at static link time. This permits using PC-relative
14403 addressing operations to access data known to be in the data
14404 segment. For non-VxWorks RTP targets, this option is enabled by
14405 default. When disabled on such targets, it will enable
14406 -msingle-pic-base by default.
14407
14408 -mpoke-function-name
14409 Write the name of each function into the text section, directly
14410 preceding the function prologue. The generated code is similar to
14411 this:
14412
14413 t0
14414 .ascii "arm_poke_function_name", 0
14415 .align
14416 t1
14417 .word 0xff000000 + (t1 - t0)
14418 arm_poke_function_name
14419 mov ip, sp
14420 stmfd sp!, {fp, ip, lr, pc}
14421 sub fp, ip, #4
14422
14423 When performing a stack backtrace, code can inspect the value of
14424 "pc" stored at "fp + 0". If the trace function then looks at
14425 location "pc - 12" and the top 8 bits are set, then we know that
14426 there is a function name embedded immediately preceding this
14427 location and has length "((pc[-3]) & 0xff000000)".
14428
14429 -mthumb
14430 -marm
14431 Select between generating code that executes in ARM and Thumb
14432 states. The default for most configurations is to generate code
14433 that executes in ARM state, but the default can be changed by
14434 configuring GCC with the --with-mode=state configure option.
14435
14436 You can also override the ARM and Thumb mode for each function by
14437 using the "target("thumb")" and "target("arm")" function attributes
14438 or pragmas.
14439
14440 -mflip-thumb
14441 Switch ARM/Thumb modes on alternating functions. This option is
14442 provided for regression testing of mixed Thumb/ARM code generation,
14443 and is not intended for ordinary use in compiling code.
14444
14445 -mtpcs-frame
14446 Generate a stack frame that is compliant with the Thumb Procedure
14447 Call Standard for all non-leaf functions. (A leaf function is one
14448 that does not call any other functions.) The default is
14449 -mno-tpcs-frame.
14450
14451 -mtpcs-leaf-frame
14452 Generate a stack frame that is compliant with the Thumb Procedure
14453 Call Standard for all leaf functions. (A leaf function is one that
14454 does not call any other functions.) The default is
14455 -mno-apcs-leaf-frame.
14456
14457 -mcallee-super-interworking
14458 Gives all externally visible functions in the file being compiled
14459 an ARM instruction set header which switches to Thumb mode before
14460 executing the rest of the function. This allows these functions to
14461 be called from non-interworking code. This option is not valid in
14462 AAPCS configurations because interworking is enabled by default.
14463
14464 -mcaller-super-interworking
14465 Allows calls via function pointers (including virtual functions) to
14466 execute correctly regardless of whether the target code has been
14467 compiled for interworking or not. There is a small overhead in the
14468 cost of executing a function pointer if this option is enabled.
14469 This option is not valid in AAPCS configurations because
14470 interworking is enabled by default.
14471
14472 -mtp=name
14473 Specify the access model for the thread local storage pointer. The
14474 valid models are soft, which generates calls to "__aeabi_read_tp",
14475 cp15, which fetches the thread pointer from "cp15" directly
14476 (supported in the arm6k architecture), and auto, which uses the
14477 best available method for the selected processor. The default
14478 setting is auto.
14479
14480 -mtls-dialect=dialect
14481 Specify the dialect to use for accessing thread local storage. Two
14482 dialects are supported---gnu and gnu2. The gnu dialect selects the
14483 original GNU scheme for supporting local and global dynamic TLS
14484 models. The gnu2 dialect selects the GNU descriptor scheme, which
14485 provides better performance for shared libraries. The GNU
14486 descriptor scheme is compatible with the original scheme, but does
14487 require new assembler, linker and library support. Initial and
14488 local exec TLS models are unaffected by this option and always use
14489 the original scheme.
14490
14491 -mword-relocations
14492 Only generate absolute relocations on word-sized values (i.e.
14493 R_ARM_ABS32). This is enabled by default on targets (uClinux,
14494 SymbianOS) where the runtime loader imposes this restriction, and
14495 when -fpic or -fPIC is specified.
14496
14497 -mfix-cortex-m3-ldrd
14498 Some Cortex-M3 cores can cause data corruption when "ldrd"
14499 instructions with overlapping destination and base registers are
14500 used. This option avoids generating these instructions. This
14501 option is enabled by default when -mcpu=cortex-m3 is specified.
14502
14503 -munaligned-access
14504 -mno-unaligned-access
14505 Enables (or disables) reading and writing of 16- and 32- bit values
14506 from addresses that are not 16- or 32- bit aligned. By default
14507 unaligned access is disabled for all pre-ARMv6, all ARMv6-M and for
14508 ARMv8-M Baseline architectures, and enabled for all other
14509 architectures. If unaligned access is not enabled then words in
14510 packed data structures are accessed a byte at a time.
14511
14512 The ARM attribute "Tag_CPU_unaligned_access" is set in the
14513 generated object file to either true or false, depending upon the
14514 setting of this option. If unaligned access is enabled then the
14515 preprocessor symbol "__ARM_FEATURE_UNALIGNED" is also defined.
14516
14517 -mneon-for-64bits
14518 Enables using Neon to handle scalar 64-bits operations. This is
14519 disabled by default since the cost of moving data from core
14520 registers to Neon is high.
14521
14522 -mslow-flash-data
14523 Assume loading data from flash is slower than fetching instruction.
14524 Therefore literal load is minimized for better performance. This
14525 option is only supported when compiling for ARMv7 M-profile and off
14526 by default.
14527
14528 -masm-syntax-unified
14529 Assume inline assembler is using unified asm syntax. The default
14530 is currently off which implies divided syntax. This option has no
14531 impact on Thumb2. However, this may change in future releases of
14532 GCC. Divided syntax should be considered deprecated.
14533
14534 -mrestrict-it
14535 Restricts generation of IT blocks to conform to the rules of
14536 ARMv8-A. IT blocks can only contain a single 16-bit instruction
14537 from a select set of instructions. This option is on by default for
14538 ARMv8-A Thumb mode.
14539
14540 -mprint-tune-info
14541 Print CPU tuning information as comment in assembler file. This is
14542 an option used only for regression testing of the compiler and not
14543 intended for ordinary use in compiling code. This option is
14544 disabled by default.
14545
14546 -mverbose-cost-dump
14547 Enable verbose cost model dumping in the debug dump files. This
14548 option is provided for use in debugging the compiler.
14549
14550 -mpure-code
14551 Do not allow constant data to be placed in code sections.
14552 Additionally, when compiling for ELF object format give all text
14553 sections the ELF processor-specific section attribute
14554 "SHF_ARM_PURECODE". This option is only available when generating
14555 non-pic code for M-profile targets with the MOVT instruction.
14556
14557 -mcmse
14558 Generate secure code as per the "ARMv8-M Security Extensions:
14559 Requirements on Development Tools Engineering Specification", which
14560 can be found on
14561 <http://infocenter.arm.com/help/topic/com.arm.doc.ecm0359818/ECM0359818_armv8m_security_extensions_reqs_on_dev_tools_1_0.pdf>.
14562
14563 AVR Options
14564 These options are defined for AVR implementations:
14565
14566 -mmcu=mcu
14567 Specify Atmel AVR instruction set architectures (ISA) or MCU type.
14568
14569 The default for this option is@tie{}avr2.
14570
14571 GCC supports the following AVR devices and ISAs:
14572
14573 "avr2"
14574 "Classic" devices with up to 8@tie{}KiB of program memory.
14575 mcu@tie{}= "attiny22", "attiny26", "at90c8534", "at90s2313",
14576 "at90s2323", "at90s2333", "at90s2343", "at90s4414",
14577 "at90s4433", "at90s4434", "at90s8515", "at90s8535".
14578
14579 "avr25"
14580 "Classic" devices with up to 8@tie{}KiB of program memory and
14581 with the "MOVW" instruction. mcu@tie{}= "ata5272", "ata6616c",
14582 "attiny13", "attiny13a", "attiny2313", "attiny2313a",
14583 "attiny24", "attiny24a", "attiny25", "attiny261", "attiny261a",
14584 "attiny43u", "attiny4313", "attiny44", "attiny44a",
14585 "attiny441", "attiny45", "attiny461", "attiny461a", "attiny48",
14586 "attiny828", "attiny84", "attiny84a", "attiny841", "attiny85",
14587 "attiny861", "attiny861a", "attiny87", "attiny88", "at86rf401".
14588
14589 "avr3"
14590 "Classic" devices with 16@tie{}KiB up to 64@tie{}KiB of
14591 program memory. mcu@tie{}= "at43usb355", "at76c711".
14592
14593 "avr31"
14594 "Classic" devices with 128@tie{}KiB of program memory.
14595 mcu@tie{}= "atmega103", "at43usb320".
14596
14597 "avr35"
14598 "Classic" devices with 16@tie{}KiB up to 64@tie{}KiB of program
14599 memory and with the "MOVW" instruction. mcu@tie{}= "ata5505",
14600 "ata6617c", "ata664251", "atmega16u2", "atmega32u2",
14601 "atmega8u2", "attiny1634", "attiny167", "at90usb162",
14602 "at90usb82".
14603
14604 "avr4"
14605 "Enhanced" devices with up to 8@tie{}KiB of program memory.
14606 mcu@tie{}= "ata6285", "ata6286", "ata6289", "ata6612c",
14607 "atmega48", "atmega48a", "atmega48p", "atmega48pa",
14608 "atmega48pb", "atmega8", "atmega8a", "atmega8hva",
14609 "atmega8515", "atmega8535", "atmega88", "atmega88a",
14610 "atmega88p", "atmega88pa", "atmega88pb", "at90pwm1",
14611 "at90pwm2", "at90pwm2b", "at90pwm3", "at90pwm3b", "at90pwm81".
14612
14613 "avr5"
14614 "Enhanced" devices with 16@tie{}KiB up to 64@tie{}KiB of
14615 program memory. mcu@tie{}= "ata5702m322", "ata5782",
14616 "ata5790", "ata5790n", "ata5791", "ata5795", "ata5831",
14617 "ata6613c", "ata6614q", "ata8210", "ata8510", "atmega16",
14618 "atmega16a", "atmega16hva", "atmega16hva2", "atmega16hvb",
14619 "atmega16hvbrevb", "atmega16m1", "atmega16u4", "atmega161",
14620 "atmega162", "atmega163", "atmega164a", "atmega164p",
14621 "atmega164pa", "atmega165", "atmega165a", "atmega165p",
14622 "atmega165pa", "atmega168", "atmega168a", "atmega168p",
14623 "atmega168pa", "atmega168pb", "atmega169", "atmega169a",
14624 "atmega169p", "atmega169pa", "atmega32", "atmega32a",
14625 "atmega32c1", "atmega32hvb", "atmega32hvbrevb", "atmega32m1",
14626 "atmega32u4", "atmega32u6", "atmega323", "atmega324a",
14627 "atmega324p", "atmega324pa", "atmega325", "atmega325a",
14628 "atmega325p", "atmega325pa", "atmega3250", "atmega3250a",
14629 "atmega3250p", "atmega3250pa", "atmega328", "atmega328p",
14630 "atmega328pb", "atmega329", "atmega329a", "atmega329p",
14631 "atmega329pa", "atmega3290", "atmega3290a", "atmega3290p",
14632 "atmega3290pa", "atmega406", "atmega64", "atmega64a",
14633 "atmega64c1", "atmega64hve", "atmega64hve2", "atmega64m1",
14634 "atmega64rfr2", "atmega640", "atmega644", "atmega644a",
14635 "atmega644p", "atmega644pa", "atmega644rfr2", "atmega645",
14636 "atmega645a", "atmega645p", "atmega6450", "atmega6450a",
14637 "atmega6450p", "atmega649", "atmega649a", "atmega649p",
14638 "atmega6490", "atmega6490a", "atmega6490p", "at90can32",
14639 "at90can64", "at90pwm161", "at90pwm216", "at90pwm316",
14640 "at90scr100", "at90usb646", "at90usb647", "at94k", "m3000".
14641
14642 "avr51"
14643 "Enhanced" devices with 128@tie{}KiB of program memory.
14644 mcu@tie{}= "atmega128", "atmega128a", "atmega128rfa1",
14645 "atmega128rfr2", "atmega1280", "atmega1281", "atmega1284",
14646 "atmega1284p", "atmega1284rfr2", "at90can128", "at90usb1286",
14647 "at90usb1287".
14648
14649 "avr6"
14650 "Enhanced" devices with 3-byte PC, i.e. with more than
14651 128@tie{}KiB of program memory. mcu@tie{}= "atmega256rfr2",
14652 "atmega2560", "atmega2561", "atmega2564rfr2".
14653
14654 "avrxmega2"
14655 "XMEGA" devices with more than 8@tie{}KiB and up to 64@tie{}KiB
14656 of program memory. mcu@tie{}= "atxmega16a4", "atxmega16a4u",
14657 "atxmega16c4", "atxmega16d4", "atxmega16e5", "atxmega32a4",
14658 "atxmega32a4u", "atxmega32c3", "atxmega32c4", "atxmega32d3",
14659 "atxmega32d4", "atxmega32e5", "atxmega8e5".
14660
14661 "avrxmega3"
14662 "XMEGA" devices with up to 64@tie{}KiB of combined program
14663 memory and RAM, and with program memory visible in the RAM
14664 address space. mcu@tie{}= "attiny1614", "attiny1616",
14665 "attiny1617", "attiny212", "attiny214", "attiny3214",
14666 "attiny3216", "attiny3217", "attiny412", "attiny414",
14667 "attiny416", "attiny417", "attiny814", "attiny816",
14668 "attiny817".
14669
14670 "avrxmega4"
14671 "XMEGA" devices with more than 64@tie{}KiB and up to
14672 128@tie{}KiB of program memory. mcu@tie{}= "atxmega64a3",
14673 "atxmega64a3u", "atxmega64a4u", "atxmega64b1", "atxmega64b3",
14674 "atxmega64c3", "atxmega64d3", "atxmega64d4".
14675
14676 "avrxmega5"
14677 "XMEGA" devices with more than 64@tie{}KiB and up to
14678 128@tie{}KiB of program memory and more than 64@tie{}KiB of
14679 RAM. mcu@tie{}= "atxmega64a1", "atxmega64a1u".
14680
14681 "avrxmega6"
14682 "XMEGA" devices with more than 128@tie{}KiB of program memory.
14683 mcu@tie{}= "atxmega128a3", "atxmega128a3u", "atxmega128b1",
14684 "atxmega128b3", "atxmega128c3", "atxmega128d3", "atxmega128d4",
14685 "atxmega192a3", "atxmega192a3u", "atxmega192c3",
14686 "atxmega192d3", "atxmega256a3", "atxmega256a3b",
14687 "atxmega256a3bu", "atxmega256a3u", "atxmega256c3",
14688 "atxmega256d3", "atxmega384c3", "atxmega384d3".
14689
14690 "avrxmega7"
14691 "XMEGA" devices with more than 128@tie{}KiB of program memory
14692 and more than 64@tie{}KiB of RAM. mcu@tie{}= "atxmega128a1",
14693 "atxmega128a1u", "atxmega128a4u".
14694
14695 "avrtiny"
14696 "TINY" Tiny core devices with 512@tie{}B up to 4@tie{}KiB of
14697 program memory. mcu@tie{}= "attiny10", "attiny20", "attiny4",
14698 "attiny40", "attiny5", "attiny9".
14699
14700 "avr1"
14701 This ISA is implemented by the minimal AVR core and supported
14702 for assembler only. mcu@tie{}= "attiny11", "attiny12",
14703 "attiny15", "attiny28", "at90s1200".
14704
14705 -mabsdata
14706 Assume that all data in static storage can be accessed by LDS / STS
14707 instructions. This option has only an effect on reduced Tiny
14708 devices like ATtiny40. See also the "absdata" AVR Variable
14709 Attributes,variable attribute.
14710
14711 -maccumulate-args
14712 Accumulate outgoing function arguments and acquire/release the
14713 needed stack space for outgoing function arguments once in function
14714 prologue/epilogue. Without this option, outgoing arguments are
14715 pushed before calling a function and popped afterwards.
14716
14717 Popping the arguments after the function call can be expensive on
14718 AVR so that accumulating the stack space might lead to smaller
14719 executables because arguments need not be removed from the stack
14720 after such a function call.
14721
14722 This option can lead to reduced code size for functions that
14723 perform several calls to functions that get their arguments on the
14724 stack like calls to printf-like functions.
14725
14726 -mbranch-cost=cost
14727 Set the branch costs for conditional branch instructions to cost.
14728 Reasonable values for cost are small, non-negative integers. The
14729 default branch cost is 0.
14730
14731 -mcall-prologues
14732 Functions prologues/epilogues are expanded as calls to appropriate
14733 subroutines. Code size is smaller.
14734
14735 -mgas-isr-prologues
14736 Interrupt service routines (ISRs) may use the "__gcc_isr" pseudo
14737 instruction supported by GNU Binutils. If this option is on, the
14738 feature can still be disabled for individual ISRs by means of the
14739 AVR Function Attributes,,"no_gccisr" function attribute. This
14740 feature is activated per default if optimization is on (but not
14741 with -Og, @pxref{Optimize Options}), and if GNU Binutils support
14742 PR21683 ("https://sourceware.org/PR21683").
14743
14744 -mint8
14745 Assume "int" to be 8-bit integer. This affects the sizes of all
14746 types: a "char" is 1 byte, an "int" is 1 byte, a "long" is 2 bytes,
14747 and "long long" is 4 bytes. Please note that this option does not
14748 conform to the C standards, but it results in smaller code size.
14749
14750 -mmain-is-OS_task
14751 Do not save registers in "main". The effect is the same like
14752 attaching attribute AVR Function Attributes,,"OS_task" to "main".
14753 It is activated per default if optimization is on.
14754
14755 -mn-flash=num
14756 Assume that the flash memory has a size of num times 64@tie{}KiB.
14757
14758 -mno-interrupts
14759 Generated code is not compatible with hardware interrupts. Code
14760 size is smaller.
14761
14762 -mrelax
14763 Try to replace "CALL" resp. "JMP" instruction by the shorter
14764 "RCALL" resp. "RJMP" instruction if applicable. Setting -mrelax
14765 just adds the --mlink-relax option to the assembler's command line
14766 and the --relax option to the linker's command line.
14767
14768 Jump relaxing is performed by the linker because jump offsets are
14769 not known before code is located. Therefore, the assembler code
14770 generated by the compiler is the same, but the instructions in the
14771 executable may differ from instructions in the assembler code.
14772
14773 Relaxing must be turned on if linker stubs are needed, see the
14774 section on "EIND" and linker stubs below.
14775
14776 -mrmw
14777 Assume that the device supports the Read-Modify-Write instructions
14778 "XCH", "LAC", "LAS" and "LAT".
14779
14780 -mshort-calls
14781 Assume that "RJMP" and "RCALL" can target the whole program memory.
14782
14783 This option is used internally for multilib selection. It is not
14784 an optimization option, and you don't need to set it by hand.
14785
14786 -msp8
14787 Treat the stack pointer register as an 8-bit register, i.e. assume
14788 the high byte of the stack pointer is zero. In general, you don't
14789 need to set this option by hand.
14790
14791 This option is used internally by the compiler to select and build
14792 multilibs for architectures "avr2" and "avr25". These
14793 architectures mix devices with and without "SPH". For any setting
14794 other than -mmcu=avr2 or -mmcu=avr25 the compiler driver adds or
14795 removes this option from the compiler proper's command line,
14796 because the compiler then knows if the device or architecture has
14797 an 8-bit stack pointer and thus no "SPH" register or not.
14798
14799 -mstrict-X
14800 Use address register "X" in a way proposed by the hardware. This
14801 means that "X" is only used in indirect, post-increment or pre-
14802 decrement addressing.
14803
14804 Without this option, the "X" register may be used in the same way
14805 as "Y" or "Z" which then is emulated by additional instructions.
14806 For example, loading a value with "X+const" addressing with a small
14807 non-negative "const < 64" to a register Rn is performed as
14808
14809 adiw r26, const ; X += const
14810 ld <Rn>, X ; <Rn> = *X
14811 sbiw r26, const ; X -= const
14812
14813 -mtiny-stack
14814 Only change the lower 8@tie{}bits of the stack pointer.
14815
14816 -mfract-convert-truncate
14817 Allow to use truncation instead of rounding towards zero for
14818 fractional fixed-point types.
14819
14820 -nodevicelib
14821 Don't link against AVR-LibC's device specific library "lib<mcu>.a".
14822
14823 -Waddr-space-convert
14824 Warn about conversions between address spaces in the case where the
14825 resulting address space is not contained in the incoming address
14826 space.
14827
14828 -Wmisspelled-isr
14829 Warn if the ISR is misspelled, i.e. without __vector prefix.
14830 Enabled by default.
14831
14832 "EIND" and Devices with More Than 128 Ki Bytes of Flash
14833
14834 Pointers in the implementation are 16@tie{}bits wide. The address of a
14835 function or label is represented as word address so that indirect jumps
14836 and calls can target any code address in the range of 64@tie{}Ki words.
14837
14838 In order to facilitate indirect jump on devices with more than
14839 128@tie{}Ki bytes of program memory space, there is a special function
14840 register called "EIND" that serves as most significant part of the
14841 target address when "EICALL" or "EIJMP" instructions are used.
14842
14843 Indirect jumps and calls on these devices are handled as follows by the
14844 compiler and are subject to some limitations:
14845
14846 * The compiler never sets "EIND".
14847
14848 * The compiler uses "EIND" implicitly in "EICALL"/"EIJMP"
14849 instructions or might read "EIND" directly in order to emulate an
14850 indirect call/jump by means of a "RET" instruction.
14851
14852 * The compiler assumes that "EIND" never changes during the startup
14853 code or during the application. In particular, "EIND" is not
14854 saved/restored in function or interrupt service routine
14855 prologue/epilogue.
14856
14857 * For indirect calls to functions and computed goto, the linker
14858 generates stubs. Stubs are jump pads sometimes also called
14859 trampolines. Thus, the indirect call/jump jumps to such a stub.
14860 The stub contains a direct jump to the desired address.
14861
14862 * Linker relaxation must be turned on so that the linker generates
14863 the stubs correctly in all situations. See the compiler option
14864 -mrelax and the linker option --relax. There are corner cases
14865 where the linker is supposed to generate stubs but aborts without
14866 relaxation and without a helpful error message.
14867
14868 * The default linker script is arranged for code with "EIND = 0". If
14869 code is supposed to work for a setup with "EIND != 0", a custom
14870 linker script has to be used in order to place the sections whose
14871 name start with ".trampolines" into the segment where "EIND" points
14872 to.
14873
14874 * The startup code from libgcc never sets "EIND". Notice that
14875 startup code is a blend of code from libgcc and AVR-LibC. For the
14876 impact of AVR-LibC on "EIND", see the AVR-LibC user manual
14877 ("http://nongnu.org/avr-libc/user-manual/").
14878
14879 * It is legitimate for user-specific startup code to set up "EIND"
14880 early, for example by means of initialization code located in
14881 section ".init3". Such code runs prior to general startup code that
14882 initializes RAM and calls constructors, but after the bit of
14883 startup code from AVR-LibC that sets "EIND" to the segment where
14884 the vector table is located.
14885
14886 #include <avr/io.h>
14887
14888 static void
14889 __attribute__((section(".init3"),naked,used,no_instrument_function))
14890 init3_set_eind (void)
14891 {
14892 __asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t"
14893 "out %i0,r24" :: "n" (&EIND) : "r24","memory");
14894 }
14895
14896 The "__trampolines_start" symbol is defined in the linker script.
14897
14898 * Stubs are generated automatically by the linker if the following
14899 two conditions are met:
14900
14901 -<The address of a label is taken by means of the "gs" modifier>
14902 (short for generate stubs) like so:
14903
14904 LDI r24, lo8(gs(<func>))
14905 LDI r25, hi8(gs(<func>))
14906
14907 -<The final location of that label is in a code segment>
14908 outside the segment where the stubs are located.
14909
14910 * The compiler emits such "gs" modifiers for code labels in the
14911 following situations:
14912
14913 -<Taking address of a function or code label.>
14914 -<Computed goto.>
14915 -<If prologue-save function is used, see -mcall-prologues>
14916 command-line option.
14917
14918 -<Switch/case dispatch tables. If you do not want such dispatch>
14919 tables you can specify the -fno-jump-tables command-line
14920 option.
14921
14922 -<C and C++ constructors/destructors called during
14923 startup/shutdown.>
14924 -<If the tools hit a "gs()" modifier explained above.>
14925 * Jumping to non-symbolic addresses like so is not supported:
14926
14927 int main (void)
14928 {
14929 /* Call function at word address 0x2 */
14930 return ((int(*)(void)) 0x2)();
14931 }
14932
14933 Instead, a stub has to be set up, i.e. the function has to be
14934 called through a symbol ("func_4" in the example):
14935
14936 int main (void)
14937 {
14938 extern int func_4 (void);
14939
14940 /* Call function at byte address 0x4 */
14941 return func_4();
14942 }
14943
14944 and the application be linked with -Wl,--defsym,func_4=0x4.
14945 Alternatively, "func_4" can be defined in the linker script.
14946
14947 Handling of the "RAMPD", "RAMPX", "RAMPY" and "RAMPZ" Special Function
14948 Registers
14949
14950 Some AVR devices support memories larger than the 64@tie{}KiB range
14951 that can be accessed with 16-bit pointers. To access memory locations
14952 outside this 64@tie{}KiB range, the content of a "RAMP" register is
14953 used as high part of the address: The "X", "Y", "Z" address register is
14954 concatenated with the "RAMPX", "RAMPY", "RAMPZ" special function
14955 register, respectively, to get a wide address. Similarly, "RAMPD" is
14956 used together with direct addressing.
14957
14958 * The startup code initializes the "RAMP" special function registers
14959 with zero.
14960
14961 * If a AVR Named Address Spaces,named address space other than
14962 generic or "__flash" is used, then "RAMPZ" is set as needed before
14963 the operation.
14964
14965 * If the device supports RAM larger than 64@tie{}KiB and the compiler
14966 needs to change "RAMPZ" to accomplish an operation, "RAMPZ" is
14967 reset to zero after the operation.
14968
14969 * If the device comes with a specific "RAMP" register, the ISR
14970 prologue/epilogue saves/restores that SFR and initializes it with
14971 zero in case the ISR code might (implicitly) use it.
14972
14973 * RAM larger than 64@tie{}KiB is not supported by GCC for AVR
14974 targets. If you use inline assembler to read from locations
14975 outside the 16-bit address range and change one of the "RAMP"
14976 registers, you must reset it to zero after the access.
14977
14978 AVR Built-in Macros
14979
14980 GCC defines several built-in macros so that the user code can test for
14981 the presence or absence of features. Almost any of the following
14982 built-in macros are deduced from device capabilities and thus triggered
14983 by the -mmcu= command-line option.
14984
14985 For even more AVR-specific built-in macros see AVR Named Address Spaces
14986 and AVR Built-in Functions.
14987
14988 "__AVR_ARCH__"
14989 Build-in macro that resolves to a decimal number that identifies
14990 the architecture and depends on the -mmcu=mcu option. Possible
14991 values are:
14992
14993 2, 25, 3, 31, 35, 4, 5, 51, 6
14994
14995 for mcu="avr2", "avr25", "avr3", "avr31", "avr35", "avr4", "avr5",
14996 "avr51", "avr6",
14997
14998 respectively and
14999
15000 100, 102, 103, 104, 105, 106, 107
15001
15002 for mcu="avrtiny", "avrxmega2", "avrxmega3", "avrxmega4",
15003 "avrxmega5", "avrxmega6", "avrxmega7", respectively. If mcu
15004 specifies a device, this built-in macro is set accordingly. For
15005 example, with -mmcu=atmega8 the macro is defined to 4.
15006
15007 "__AVR_Device__"
15008 Setting -mmcu=device defines this built-in macro which reflects the
15009 device's name. For example, -mmcu=atmega8 defines the built-in
15010 macro "__AVR_ATmega8__", -mmcu=attiny261a defines
15011 "__AVR_ATtiny261A__", etc.
15012
15013 The built-in macros' names follow the scheme "__AVR_Device__" where
15014 Device is the device name as from the AVR user manual. The
15015 difference between Device in the built-in macro and device in
15016 -mmcu=device is that the latter is always lowercase.
15017
15018 If device is not a device but only a core architecture like avr51,
15019 this macro is not defined.
15020
15021 "__AVR_DEVICE_NAME__"
15022 Setting -mmcu=device defines this built-in macro to the device's
15023 name. For example, with -mmcu=atmega8 the macro is defined to
15024 "atmega8".
15025
15026 If device is not a device but only a core architecture like avr51,
15027 this macro is not defined.
15028
15029 "__AVR_XMEGA__"
15030 The device / architecture belongs to the XMEGA family of devices.
15031
15032 "__AVR_HAVE_ELPM__"
15033 The device has the "ELPM" instruction.
15034
15035 "__AVR_HAVE_ELPMX__"
15036 The device has the "ELPM Rn,Z" and "ELPM Rn,Z+" instructions.
15037
15038 "__AVR_HAVE_MOVW__"
15039 The device has the "MOVW" instruction to perform 16-bit register-
15040 register moves.
15041
15042 "__AVR_HAVE_LPMX__"
15043 The device has the "LPM Rn,Z" and "LPM Rn,Z+" instructions.
15044
15045 "__AVR_HAVE_MUL__"
15046 The device has a hardware multiplier.
15047
15048 "__AVR_HAVE_JMP_CALL__"
15049 The device has the "JMP" and "CALL" instructions. This is the case
15050 for devices with more than 8@tie{}KiB of program memory.
15051
15052 "__AVR_HAVE_EIJMP_EICALL__"
15053 "__AVR_3_BYTE_PC__"
15054 The device has the "EIJMP" and "EICALL" instructions. This is the
15055 case for devices with more than 128@tie{}KiB of program memory.
15056 This also means that the program counter (PC) is 3@tie{}bytes wide.
15057
15058 "__AVR_2_BYTE_PC__"
15059 The program counter (PC) is 2@tie{}bytes wide. This is the case for
15060 devices with up to 128@tie{}KiB of program memory.
15061
15062 "__AVR_HAVE_8BIT_SP__"
15063 "__AVR_HAVE_16BIT_SP__"
15064 The stack pointer (SP) register is treated as 8-bit respectively
15065 16-bit register by the compiler. The definition of these macros is
15066 affected by -mtiny-stack.
15067
15068 "__AVR_HAVE_SPH__"
15069 "__AVR_SP8__"
15070 The device has the SPH (high part of stack pointer) special
15071 function register or has an 8-bit stack pointer, respectively. The
15072 definition of these macros is affected by -mmcu= and in the cases
15073 of -mmcu=avr2 and -mmcu=avr25 also by -msp8.
15074
15075 "__AVR_HAVE_RAMPD__"
15076 "__AVR_HAVE_RAMPX__"
15077 "__AVR_HAVE_RAMPY__"
15078 "__AVR_HAVE_RAMPZ__"
15079 The device has the "RAMPD", "RAMPX", "RAMPY", "RAMPZ" special
15080 function register, respectively.
15081
15082 "__NO_INTERRUPTS__"
15083 This macro reflects the -mno-interrupts command-line option.
15084
15085 "__AVR_ERRATA_SKIP__"
15086 "__AVR_ERRATA_SKIP_JMP_CALL__"
15087 Some AVR devices (AT90S8515, ATmega103) must not skip 32-bit
15088 instructions because of a hardware erratum. Skip instructions are
15089 "SBRS", "SBRC", "SBIS", "SBIC" and "CPSE". The second macro is
15090 only defined if "__AVR_HAVE_JMP_CALL__" is also set.
15091
15092 "__AVR_ISA_RMW__"
15093 The device has Read-Modify-Write instructions (XCH, LAC, LAS and
15094 LAT).
15095
15096 "__AVR_SFR_OFFSET__=offset"
15097 Instructions that can address I/O special function registers
15098 directly like "IN", "OUT", "SBI", etc. may use a different address
15099 as if addressed by an instruction to access RAM like "LD" or "STS".
15100 This offset depends on the device architecture and has to be
15101 subtracted from the RAM address in order to get the respective
15102 I/O@tie{}address.
15103
15104 "__AVR_SHORT_CALLS__"
15105 The -mshort-calls command line option is set.
15106
15107 "__AVR_PM_BASE_ADDRESS__=addr"
15108 Some devices support reading from flash memory by means of "LD*"
15109 instructions. The flash memory is seen in the data address space
15110 at an offset of "__AVR_PM_BASE_ADDRESS__". If this macro is not
15111 defined, this feature is not available. If defined, the address
15112 space is linear and there is no need to put ".rodata" into RAM.
15113 This is handled by the default linker description file, and is
15114 currently available for "avrtiny" and "avrxmega3". Even more
15115 convenient, there is no need to use address spaces like "__flash"
15116 or features like attribute "progmem" and "pgm_read_*".
15117
15118 "__WITH_AVRLIBC__"
15119 The compiler is configured to be used together with AVR-Libc. See
15120 the --with-avrlibc configure option.
15121
15122 Blackfin Options
15123 -mcpu=cpu[-sirevision]
15124 Specifies the name of the target Blackfin processor. Currently,
15125 cpu can be one of bf512, bf514, bf516, bf518, bf522, bf523, bf524,
15126 bf525, bf526, bf527, bf531, bf532, bf533, bf534, bf536, bf537,
15127 bf538, bf539, bf542, bf544, bf547, bf548, bf549, bf542m, bf544m,
15128 bf547m, bf548m, bf549m, bf561, bf592.
15129
15130 The optional sirevision specifies the silicon revision of the
15131 target Blackfin processor. Any workarounds available for the
15132 targeted silicon revision are enabled. If sirevision is none, no
15133 workarounds are enabled. If sirevision is any, all workarounds for
15134 the targeted processor are enabled. The "__SILICON_REVISION__"
15135 macro is defined to two hexadecimal digits representing the major
15136 and minor numbers in the silicon revision. If sirevision is none,
15137 the "__SILICON_REVISION__" is not defined. If sirevision is any,
15138 the "__SILICON_REVISION__" is defined to be 0xffff. If this
15139 optional sirevision is not used, GCC assumes the latest known
15140 silicon revision of the targeted Blackfin processor.
15141
15142 GCC defines a preprocessor macro for the specified cpu. For the
15143 bfin-elf toolchain, this option causes the hardware BSP provided by
15144 libgloss to be linked in if -msim is not given.
15145
15146 Without this option, bf532 is used as the processor by default.
15147
15148 Note that support for bf561 is incomplete. For bf561, only the
15149 preprocessor macro is defined.
15150
15151 -msim
15152 Specifies that the program will be run on the simulator. This
15153 causes the simulator BSP provided by libgloss to be linked in.
15154 This option has effect only for bfin-elf toolchain. Certain other
15155 options, such as -mid-shared-library and -mfdpic, imply -msim.
15156
15157 -momit-leaf-frame-pointer
15158 Don't keep the frame pointer in a register for leaf functions.
15159 This avoids the instructions to save, set up and restore frame
15160 pointers and makes an extra register available in leaf functions.
15161
15162 -mspecld-anomaly
15163 When enabled, the compiler ensures that the generated code does not
15164 contain speculative loads after jump instructions. If this option
15165 is used, "__WORKAROUND_SPECULATIVE_LOADS" is defined.
15166
15167 -mno-specld-anomaly
15168 Don't generate extra code to prevent speculative loads from
15169 occurring.
15170
15171 -mcsync-anomaly
15172 When enabled, the compiler ensures that the generated code does not
15173 contain CSYNC or SSYNC instructions too soon after conditional
15174 branches. If this option is used, "__WORKAROUND_SPECULATIVE_SYNCS"
15175 is defined.
15176
15177 -mno-csync-anomaly
15178 Don't generate extra code to prevent CSYNC or SSYNC instructions
15179 from occurring too soon after a conditional branch.
15180
15181 -mlow-64k
15182 When enabled, the compiler is free to take advantage of the
15183 knowledge that the entire program fits into the low 64k of memory.
15184
15185 -mno-low-64k
15186 Assume that the program is arbitrarily large. This is the default.
15187
15188 -mstack-check-l1
15189 Do stack checking using information placed into L1 scratchpad
15190 memory by the uClinux kernel.
15191
15192 -mid-shared-library
15193 Generate code that supports shared libraries via the library ID
15194 method. This allows for execute in place and shared libraries in
15195 an environment without virtual memory management. This option
15196 implies -fPIC. With a bfin-elf target, this option implies -msim.
15197
15198 -mno-id-shared-library
15199 Generate code that doesn't assume ID-based shared libraries are
15200 being used. This is the default.
15201
15202 -mleaf-id-shared-library
15203 Generate code that supports shared libraries via the library ID
15204 method, but assumes that this library or executable won't link
15205 against any other ID shared libraries. That allows the compiler to
15206 use faster code for jumps and calls.
15207
15208 -mno-leaf-id-shared-library
15209 Do not assume that the code being compiled won't link against any
15210 ID shared libraries. Slower code is generated for jump and call
15211 insns.
15212
15213 -mshared-library-id=n
15214 Specifies the identification number of the ID-based shared library
15215 being compiled. Specifying a value of 0 generates more compact
15216 code; specifying other values forces the allocation of that number
15217 to the current library but is no more space- or time-efficient than
15218 omitting this option.
15219
15220 -msep-data
15221 Generate code that allows the data segment to be located in a
15222 different area of memory from the text segment. This allows for
15223 execute in place in an environment without virtual memory
15224 management by eliminating relocations against the text section.
15225
15226 -mno-sep-data
15227 Generate code that assumes that the data segment follows the text
15228 segment. This is the default.
15229
15230 -mlong-calls
15231 -mno-long-calls
15232 Tells the compiler to perform function calls by first loading the
15233 address of the function into a register and then performing a
15234 subroutine call on this register. This switch is needed if the
15235 target function lies outside of the 24-bit addressing range of the
15236 offset-based version of subroutine call instruction.
15237
15238 This feature is not enabled by default. Specifying -mno-long-calls
15239 restores the default behavior. Note these switches have no effect
15240 on how the compiler generates code to handle function calls via
15241 function pointers.
15242
15243 -mfast-fp
15244 Link with the fast floating-point library. This library relaxes
15245 some of the IEEE floating-point standard's rules for checking
15246 inputs against Not-a-Number (NAN), in the interest of performance.
15247
15248 -minline-plt
15249 Enable inlining of PLT entries in function calls to functions that
15250 are not known to bind locally. It has no effect without -mfdpic.
15251
15252 -mmulticore
15253 Build a standalone application for multicore Blackfin processors.
15254 This option causes proper start files and link scripts supporting
15255 multicore to be used, and defines the macro "__BFIN_MULTICORE". It
15256 can only be used with -mcpu=bf561[-sirevision].
15257
15258 This option can be used with -mcorea or -mcoreb, which selects the
15259 one-application-per-core programming model. Without -mcorea or
15260 -mcoreb, the single-application/dual-core programming model is
15261 used. In this model, the main function of Core B should be named as
15262 "coreb_main".
15263
15264 If this option is not used, the single-core application programming
15265 model is used.
15266
15267 -mcorea
15268 Build a standalone application for Core A of BF561 when using the
15269 one-application-per-core programming model. Proper start files and
15270 link scripts are used to support Core A, and the macro
15271 "__BFIN_COREA" is defined. This option can only be used in
15272 conjunction with -mmulticore.
15273
15274 -mcoreb
15275 Build a standalone application for Core B of BF561 when using the
15276 one-application-per-core programming model. Proper start files and
15277 link scripts are used to support Core B, and the macro
15278 "__BFIN_COREB" is defined. When this option is used, "coreb_main"
15279 should be used instead of "main". This option can only be used in
15280 conjunction with -mmulticore.
15281
15282 -msdram
15283 Build a standalone application for SDRAM. Proper start files and
15284 link scripts are used to put the application into SDRAM, and the
15285 macro "__BFIN_SDRAM" is defined. The loader should initialize
15286 SDRAM before loading the application.
15287
15288 -micplb
15289 Assume that ICPLBs are enabled at run time. This has an effect on
15290 certain anomaly workarounds. For Linux targets, the default is to
15291 assume ICPLBs are enabled; for standalone applications the default
15292 is off.
15293
15294 C6X Options
15295 -march=name
15296 This specifies the name of the target architecture. GCC uses this
15297 name to determine what kind of instructions it can emit when
15298 generating assembly code. Permissible names are: c62x, c64x,
15299 c64x+, c67x, c67x+, c674x.
15300
15301 -mbig-endian
15302 Generate code for a big-endian target.
15303
15304 -mlittle-endian
15305 Generate code for a little-endian target. This is the default.
15306
15307 -msim
15308 Choose startup files and linker script suitable for the simulator.
15309
15310 -msdata=default
15311 Put small global and static data in the ".neardata" section, which
15312 is pointed to by register "B14". Put small uninitialized global
15313 and static data in the ".bss" section, which is adjacent to the
15314 ".neardata" section. Put small read-only data into the ".rodata"
15315 section. The corresponding sections used for large pieces of data
15316 are ".fardata", ".far" and ".const".
15317
15318 -msdata=all
15319 Put all data, not just small objects, into the sections reserved
15320 for small data, and use addressing relative to the "B14" register
15321 to access them.
15322
15323 -msdata=none
15324 Make no use of the sections reserved for small data, and use
15325 absolute addresses to access all data. Put all initialized global
15326 and static data in the ".fardata" section, and all uninitialized
15327 data in the ".far" section. Put all constant data into the
15328 ".const" section.
15329
15330 CRIS Options
15331 These options are defined specifically for the CRIS ports.
15332
15333 -march=architecture-type
15334 -mcpu=architecture-type
15335 Generate code for the specified architecture. The choices for
15336 architecture-type are v3, v8 and v10 for respectively ETRAX 4,
15337 ETRAX 100, and ETRAX 100 LX. Default is v0 except for cris-axis-
15338 linux-gnu, where the default is v10.
15339
15340 -mtune=architecture-type
15341 Tune to architecture-type everything applicable about the generated
15342 code, except for the ABI and the set of available instructions.
15343 The choices for architecture-type are the same as for
15344 -march=architecture-type.
15345
15346 -mmax-stack-frame=n
15347 Warn when the stack frame of a function exceeds n bytes.
15348
15349 -metrax4
15350 -metrax100
15351 The options -metrax4 and -metrax100 are synonyms for -march=v3 and
15352 -march=v8 respectively.
15353
15354 -mmul-bug-workaround
15355 -mno-mul-bug-workaround
15356 Work around a bug in the "muls" and "mulu" instructions for CPU
15357 models where it applies. This option is active by default.
15358
15359 -mpdebug
15360 Enable CRIS-specific verbose debug-related information in the
15361 assembly code. This option also has the effect of turning off the
15362 #NO_APP formatted-code indicator to the assembler at the beginning
15363 of the assembly file.
15364
15365 -mcc-init
15366 Do not use condition-code results from previous instruction; always
15367 emit compare and test instructions before use of condition codes.
15368
15369 -mno-side-effects
15370 Do not emit instructions with side effects in addressing modes
15371 other than post-increment.
15372
15373 -mstack-align
15374 -mno-stack-align
15375 -mdata-align
15376 -mno-data-align
15377 -mconst-align
15378 -mno-const-align
15379 These options (no- options) arrange (eliminate arrangements) for
15380 the stack frame, individual data and constants to be aligned for
15381 the maximum single data access size for the chosen CPU model. The
15382 default is to arrange for 32-bit alignment. ABI details such as
15383 structure layout are not affected by these options.
15384
15385 -m32-bit
15386 -m16-bit
15387 -m8-bit
15388 Similar to the stack- data- and const-align options above, these
15389 options arrange for stack frame, writable data and constants to all
15390 be 32-bit, 16-bit or 8-bit aligned. The default is 32-bit
15391 alignment.
15392
15393 -mno-prologue-epilogue
15394 -mprologue-epilogue
15395 With -mno-prologue-epilogue, the normal function prologue and
15396 epilogue which set up the stack frame are omitted and no return
15397 instructions or return sequences are generated in the code. Use
15398 this option only together with visual inspection of the compiled
15399 code: no warnings or errors are generated when call-saved registers
15400 must be saved, or storage for local variables needs to be
15401 allocated.
15402
15403 -mno-gotplt
15404 -mgotplt
15405 With -fpic and -fPIC, don't generate (do generate) instruction
15406 sequences that load addresses for functions from the PLT part of
15407 the GOT rather than (traditional on other architectures) calls to
15408 the PLT. The default is -mgotplt.
15409
15410 -melf
15411 Legacy no-op option only recognized with the cris-axis-elf and
15412 cris-axis-linux-gnu targets.
15413
15414 -mlinux
15415 Legacy no-op option only recognized with the cris-axis-linux-gnu
15416 target.
15417
15418 -sim
15419 This option, recognized for the cris-axis-elf, arranges to link
15420 with input-output functions from a simulator library. Code,
15421 initialized data and zero-initialized data are allocated
15422 consecutively.
15423
15424 -sim2
15425 Like -sim, but pass linker options to locate initialized data at
15426 0x40000000 and zero-initialized data at 0x80000000.
15427
15428 CR16 Options
15429 These options are defined specifically for the CR16 ports.
15430
15431 -mmac
15432 Enable the use of multiply-accumulate instructions. Disabled by
15433 default.
15434
15435 -mcr16cplus
15436 -mcr16c
15437 Generate code for CR16C or CR16C+ architecture. CR16C+ architecture
15438 is default.
15439
15440 -msim
15441 Links the library libsim.a which is in compatible with simulator.
15442 Applicable to ELF compiler only.
15443
15444 -mint32
15445 Choose integer type as 32-bit wide.
15446
15447 -mbit-ops
15448 Generates "sbit"/"cbit" instructions for bit manipulations.
15449
15450 -mdata-model=model
15451 Choose a data model. The choices for model are near, far or medium.
15452 medium is default. However, far is not valid with -mcr16c, as the
15453 CR16C architecture does not support the far data model.
15454
15455 Darwin Options
15456 These options are defined for all architectures running the Darwin
15457 operating system.
15458
15459 FSF GCC on Darwin does not create "fat" object files; it creates an
15460 object file for the single architecture that GCC was built to target.
15461 Apple's GCC on Darwin does create "fat" files if multiple -arch options
15462 are used; it does so by running the compiler or linker multiple times
15463 and joining the results together with lipo.
15464
15465 The subtype of the file created (like ppc7400 or ppc970 or i686) is
15466 determined by the flags that specify the ISA that GCC is targeting,
15467 like -mcpu or -march. The -force_cpusubtype_ALL option can be used to
15468 override this.
15469
15470 The Darwin tools vary in their behavior when presented with an ISA
15471 mismatch. The assembler, as, only permits instructions to be used that
15472 are valid for the subtype of the file it is generating, so you cannot
15473 put 64-bit instructions in a ppc750 object file. The linker for shared
15474 libraries, /usr/bin/libtool, fails and prints an error if asked to
15475 create a shared library with a less restrictive subtype than its input
15476 files (for instance, trying to put a ppc970 object file in a ppc7400
15477 library). The linker for executables, ld, quietly gives the executable
15478 the most restrictive subtype of any of its input files.
15479
15480 -Fdir
15481 Add the framework directory dir to the head of the list of
15482 directories to be searched for header files. These directories are
15483 interleaved with those specified by -I options and are scanned in a
15484 left-to-right order.
15485
15486 A framework directory is a directory with frameworks in it. A
15487 framework is a directory with a Headers and/or PrivateHeaders
15488 directory contained directly in it that ends in .framework. The
15489 name of a framework is the name of this directory excluding the
15490 .framework. Headers associated with the framework are found in one
15491 of those two directories, with Headers being searched first. A
15492 subframework is a framework directory that is in a framework's
15493 Frameworks directory. Includes of subframework headers can only
15494 appear in a header of a framework that contains the subframework,
15495 or in a sibling subframework header. Two subframeworks are
15496 siblings if they occur in the same framework. A subframework
15497 should not have the same name as a framework; a warning is issued
15498 if this is violated. Currently a subframework cannot have
15499 subframeworks; in the future, the mechanism may be extended to
15500 support this. The standard frameworks can be found in
15501 /System/Library/Frameworks and /Library/Frameworks. An example
15502 include looks like "#include <Framework/header.h>", where Framework
15503 denotes the name of the framework and header.h is found in the
15504 PrivateHeaders or Headers directory.
15505
15506 -iframeworkdir
15507 Like -F except the directory is a treated as a system directory.
15508 The main difference between this -iframework and -F is that with
15509 -iframework the compiler does not warn about constructs contained
15510 within header files found via dir. This option is valid only for
15511 the C family of languages.
15512
15513 -gused
15514 Emit debugging information for symbols that are used. For stabs
15515 debugging format, this enables -feliminate-unused-debug-symbols.
15516 This is by default ON.
15517
15518 -gfull
15519 Emit debugging information for all symbols and types.
15520
15521 -mmacosx-version-min=version
15522 The earliest version of MacOS X that this executable will run on is
15523 version. Typical values of version include 10.1, 10.2, and 10.3.9.
15524
15525 If the compiler was built to use the system's headers by default,
15526 then the default for this option is the system version on which the
15527 compiler is running, otherwise the default is to make choices that
15528 are compatible with as many systems and code bases as possible.
15529
15530 -mkernel
15531 Enable kernel development mode. The -mkernel option sets -static,
15532 -fno-common, -fno-use-cxa-atexit, -fno-exceptions,
15533 -fno-non-call-exceptions, -fapple-kext, -fno-weak and -fno-rtti
15534 where applicable. This mode also sets -mno-altivec, -msoft-float,
15535 -fno-builtin and -mlong-branch for PowerPC targets.
15536
15537 -mone-byte-bool
15538 Override the defaults for "bool" so that "sizeof(bool)==1". By
15539 default "sizeof(bool)" is 4 when compiling for Darwin/PowerPC and 1
15540 when compiling for Darwin/x86, so this option has no effect on x86.
15541
15542 Warning: The -mone-byte-bool switch causes GCC to generate code
15543 that is not binary compatible with code generated without that
15544 switch. Using this switch may require recompiling all other
15545 modules in a program, including system libraries. Use this switch
15546 to conform to a non-default data model.
15547
15548 -mfix-and-continue
15549 -ffix-and-continue
15550 -findirect-data
15551 Generate code suitable for fast turnaround development, such as to
15552 allow GDB to dynamically load .o files into already-running
15553 programs. -findirect-data and -ffix-and-continue are provided for
15554 backwards compatibility.
15555
15556 -all_load
15557 Loads all members of static archive libraries. See man ld(1) for
15558 more information.
15559
15560 -arch_errors_fatal
15561 Cause the errors having to do with files that have the wrong
15562 architecture to be fatal.
15563
15564 -bind_at_load
15565 Causes the output file to be marked such that the dynamic linker
15566 will bind all undefined references when the file is loaded or
15567 launched.
15568
15569 -bundle
15570 Produce a Mach-o bundle format file. See man ld(1) for more
15571 information.
15572
15573 -bundle_loader executable
15574 This option specifies the executable that will load the build
15575 output file being linked. See man ld(1) for more information.
15576
15577 -dynamiclib
15578 When passed this option, GCC produces a dynamic library instead of
15579 an executable when linking, using the Darwin libtool command.
15580
15581 -force_cpusubtype_ALL
15582 This causes GCC's output file to have the ALL subtype, instead of
15583 one controlled by the -mcpu or -march option.
15584
15585 -allowable_client client_name
15586 -client_name
15587 -compatibility_version
15588 -current_version
15589 -dead_strip
15590 -dependency-file
15591 -dylib_file
15592 -dylinker_install_name
15593 -dynamic
15594 -exported_symbols_list
15595 -filelist
15596 -flat_namespace
15597 -force_flat_namespace
15598 -headerpad_max_install_names
15599 -image_base
15600 -init
15601 -install_name
15602 -keep_private_externs
15603 -multi_module
15604 -multiply_defined
15605 -multiply_defined_unused
15606 -noall_load
15607 -no_dead_strip_inits_and_terms
15608 -nofixprebinding
15609 -nomultidefs
15610 -noprebind
15611 -noseglinkedit
15612 -pagezero_size
15613 -prebind
15614 -prebind_all_twolevel_modules
15615 -private_bundle
15616 -read_only_relocs
15617 -sectalign
15618 -sectobjectsymbols
15619 -whyload
15620 -seg1addr
15621 -sectcreate
15622 -sectobjectsymbols
15623 -sectorder
15624 -segaddr
15625 -segs_read_only_addr
15626 -segs_read_write_addr
15627 -seg_addr_table
15628 -seg_addr_table_filename
15629 -seglinkedit
15630 -segprot
15631 -segs_read_only_addr
15632 -segs_read_write_addr
15633 -single_module
15634 -static
15635 -sub_library
15636 -sub_umbrella
15637 -twolevel_namespace
15638 -umbrella
15639 -undefined
15640 -unexported_symbols_list
15641 -weak_reference_mismatches
15642 -whatsloaded
15643 These options are passed to the Darwin linker. The Darwin linker
15644 man page describes them in detail.
15645
15646 DEC Alpha Options
15647 These -m options are defined for the DEC Alpha implementations:
15648
15649 -mno-soft-float
15650 -msoft-float
15651 Use (do not use) the hardware floating-point instructions for
15652 floating-point operations. When -msoft-float is specified,
15653 functions in libgcc.a are used to perform floating-point
15654 operations. Unless they are replaced by routines that emulate the
15655 floating-point operations, or compiled in such a way as to call
15656 such emulations routines, these routines issue floating-point
15657 operations. If you are compiling for an Alpha without floating-
15658 point operations, you must ensure that the library is built so as
15659 not to call them.
15660
15661 Note that Alpha implementations without floating-point operations
15662 are required to have floating-point registers.
15663
15664 -mfp-reg
15665 -mno-fp-regs
15666 Generate code that uses (does not use) the floating-point register
15667 set. -mno-fp-regs implies -msoft-float. If the floating-point
15668 register set is not used, floating-point operands are passed in
15669 integer registers as if they were integers and floating-point
15670 results are passed in $0 instead of $f0. This is a non-standard
15671 calling sequence, so any function with a floating-point argument or
15672 return value called by code compiled with -mno-fp-regs must also be
15673 compiled with that option.
15674
15675 A typical use of this option is building a kernel that does not
15676 use, and hence need not save and restore, any floating-point
15677 registers.
15678
15679 -mieee
15680 The Alpha architecture implements floating-point hardware optimized
15681 for maximum performance. It is mostly compliant with the IEEE
15682 floating-point standard. However, for full compliance, software
15683 assistance is required. This option generates code fully IEEE-
15684 compliant code except that the inexact-flag is not maintained (see
15685 below). If this option is turned on, the preprocessor macro
15686 "_IEEE_FP" is defined during compilation. The resulting code is
15687 less efficient but is able to correctly support denormalized
15688 numbers and exceptional IEEE values such as not-a-number and
15689 plus/minus infinity. Other Alpha compilers call this option
15690 -ieee_with_no_inexact.
15691
15692 -mieee-with-inexact
15693 This is like -mieee except the generated code also maintains the
15694 IEEE inexact-flag. Turning on this option causes the generated
15695 code to implement fully-compliant IEEE math. In addition to
15696 "_IEEE_FP", "_IEEE_FP_EXACT" is defined as a preprocessor macro.
15697 On some Alpha implementations the resulting code may execute
15698 significantly slower than the code generated by default. Since
15699 there is very little code that depends on the inexact-flag, you
15700 should normally not specify this option. Other Alpha compilers
15701 call this option -ieee_with_inexact.
15702
15703 -mfp-trap-mode=trap-mode
15704 This option controls what floating-point related traps are enabled.
15705 Other Alpha compilers call this option -fptm trap-mode. The trap
15706 mode can be set to one of four values:
15707
15708 n This is the default (normal) setting. The only traps that are
15709 enabled are the ones that cannot be disabled in software (e.g.,
15710 division by zero trap).
15711
15712 u In addition to the traps enabled by n, underflow traps are
15713 enabled as well.
15714
15715 su Like u, but the instructions are marked to be safe for software
15716 completion (see Alpha architecture manual for details).
15717
15718 sui Like su, but inexact traps are enabled as well.
15719
15720 -mfp-rounding-mode=rounding-mode
15721 Selects the IEEE rounding mode. Other Alpha compilers call this
15722 option -fprm rounding-mode. The rounding-mode can be one of:
15723
15724 n Normal IEEE rounding mode. Floating-point numbers are rounded
15725 towards the nearest machine number or towards the even machine
15726 number in case of a tie.
15727
15728 m Round towards minus infinity.
15729
15730 c Chopped rounding mode. Floating-point numbers are rounded
15731 towards zero.
15732
15733 d Dynamic rounding mode. A field in the floating-point control
15734 register (fpcr, see Alpha architecture reference manual)
15735 controls the rounding mode in effect. The C library
15736 initializes this register for rounding towards plus infinity.
15737 Thus, unless your program modifies the fpcr, d corresponds to
15738 round towards plus infinity.
15739
15740 -mtrap-precision=trap-precision
15741 In the Alpha architecture, floating-point traps are imprecise.
15742 This means without software assistance it is impossible to recover
15743 from a floating trap and program execution normally needs to be
15744 terminated. GCC can generate code that can assist operating system
15745 trap handlers in determining the exact location that caused a
15746 floating-point trap. Depending on the requirements of an
15747 application, different levels of precisions can be selected:
15748
15749 p Program precision. This option is the default and means a trap
15750 handler can only identify which program caused a floating-point
15751 exception.
15752
15753 f Function precision. The trap handler can determine the
15754 function that caused a floating-point exception.
15755
15756 i Instruction precision. The trap handler can determine the
15757 exact instruction that caused a floating-point exception.
15758
15759 Other Alpha compilers provide the equivalent options called
15760 -scope_safe and -resumption_safe.
15761
15762 -mieee-conformant
15763 This option marks the generated code as IEEE conformant. You must
15764 not use this option unless you also specify -mtrap-precision=i and
15765 either -mfp-trap-mode=su or -mfp-trap-mode=sui. Its only effect is
15766 to emit the line .eflag 48 in the function prologue of the
15767 generated assembly file.
15768
15769 -mbuild-constants
15770 Normally GCC examines a 32- or 64-bit integer constant to see if it
15771 can construct it from smaller constants in two or three
15772 instructions. If it cannot, it outputs the constant as a literal
15773 and generates code to load it from the data segment at run time.
15774
15775 Use this option to require GCC to construct all integer constants
15776 using code, even if it takes more instructions (the maximum is
15777 six).
15778
15779 You typically use this option to build a shared library dynamic
15780 loader. Itself a shared library, it must relocate itself in memory
15781 before it can find the variables and constants in its own data
15782 segment.
15783
15784 -mbwx
15785 -mno-bwx
15786 -mcix
15787 -mno-cix
15788 -mfix
15789 -mno-fix
15790 -mmax
15791 -mno-max
15792 Indicate whether GCC should generate code to use the optional BWX,
15793 CIX, FIX and MAX instruction sets. The default is to use the
15794 instruction sets supported by the CPU type specified via -mcpu=
15795 option or that of the CPU on which GCC was built if none is
15796 specified.
15797
15798 -mfloat-vax
15799 -mfloat-ieee
15800 Generate code that uses (does not use) VAX F and G floating-point
15801 arithmetic instead of IEEE single and double precision.
15802
15803 -mexplicit-relocs
15804 -mno-explicit-relocs
15805 Older Alpha assemblers provided no way to generate symbol
15806 relocations except via assembler macros. Use of these macros does
15807 not allow optimal instruction scheduling. GNU binutils as of
15808 version 2.12 supports a new syntax that allows the compiler to
15809 explicitly mark which relocations should apply to which
15810 instructions. This option is mostly useful for debugging, as GCC
15811 detects the capabilities of the assembler when it is built and sets
15812 the default accordingly.
15813
15814 -msmall-data
15815 -mlarge-data
15816 When -mexplicit-relocs is in effect, static data is accessed via
15817 gp-relative relocations. When -msmall-data is used, objects 8
15818 bytes long or smaller are placed in a small data area (the ".sdata"
15819 and ".sbss" sections) and are accessed via 16-bit relocations off
15820 of the $gp register. This limits the size of the small data area
15821 to 64KB, but allows the variables to be directly accessed via a
15822 single instruction.
15823
15824 The default is -mlarge-data. With this option the data area is
15825 limited to just below 2GB. Programs that require more than 2GB of
15826 data must use "malloc" or "mmap" to allocate the data in the heap
15827 instead of in the program's data segment.
15828
15829 When generating code for shared libraries, -fpic implies
15830 -msmall-data and -fPIC implies -mlarge-data.
15831
15832 -msmall-text
15833 -mlarge-text
15834 When -msmall-text is used, the compiler assumes that the code of
15835 the entire program (or shared library) fits in 4MB, and is thus
15836 reachable with a branch instruction. When -msmall-data is used,
15837 the compiler can assume that all local symbols share the same $gp
15838 value, and thus reduce the number of instructions required for a
15839 function call from 4 to 1.
15840
15841 The default is -mlarge-text.
15842
15843 -mcpu=cpu_type
15844 Set the instruction set and instruction scheduling parameters for
15845 machine type cpu_type. You can specify either the EV style name or
15846 the corresponding chip number. GCC supports scheduling parameters
15847 for the EV4, EV5 and EV6 family of processors and chooses the
15848 default values for the instruction set from the processor you
15849 specify. If you do not specify a processor type, GCC defaults to
15850 the processor on which the compiler was built.
15851
15852 Supported values for cpu_type are
15853
15854 ev4
15855 ev45
15856 21064
15857 Schedules as an EV4 and has no instruction set extensions.
15858
15859 ev5
15860 21164
15861 Schedules as an EV5 and has no instruction set extensions.
15862
15863 ev56
15864 21164a
15865 Schedules as an EV5 and supports the BWX extension.
15866
15867 pca56
15868 21164pc
15869 21164PC
15870 Schedules as an EV5 and supports the BWX and MAX extensions.
15871
15872 ev6
15873 21264
15874 Schedules as an EV6 and supports the BWX, FIX, and MAX
15875 extensions.
15876
15877 ev67
15878 21264a
15879 Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX
15880 extensions.
15881
15882 Native toolchains also support the value native, which selects the
15883 best architecture option for the host processor. -mcpu=native has
15884 no effect if GCC does not recognize the processor.
15885
15886 -mtune=cpu_type
15887 Set only the instruction scheduling parameters for machine type
15888 cpu_type. The instruction set is not changed.
15889
15890 Native toolchains also support the value native, which selects the
15891 best architecture option for the host processor. -mtune=native has
15892 no effect if GCC does not recognize the processor.
15893
15894 -mmemory-latency=time
15895 Sets the latency the scheduler should assume for typical memory
15896 references as seen by the application. This number is highly
15897 dependent on the memory access patterns used by the application and
15898 the size of the external cache on the machine.
15899
15900 Valid options for time are
15901
15902 number
15903 A decimal number representing clock cycles.
15904
15905 L1
15906 L2
15907 L3
15908 main
15909 The compiler contains estimates of the number of clock cycles
15910 for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches
15911 (also called Dcache, Scache, and Bcache), as well as to main
15912 memory. Note that L3 is only valid for EV5.
15913
15914 FR30 Options
15915 These options are defined specifically for the FR30 port.
15916
15917 -msmall-model
15918 Use the small address space model. This can produce smaller code,
15919 but it does assume that all symbolic values and addresses fit into
15920 a 20-bit range.
15921
15922 -mno-lsim
15923 Assume that runtime support has been provided and so there is no
15924 need to include the simulator library (libsim.a) on the linker
15925 command line.
15926
15927 FT32 Options
15928 These options are defined specifically for the FT32 port.
15929
15930 -msim
15931 Specifies that the program will be run on the simulator. This
15932 causes an alternate runtime startup and library to be linked. You
15933 must not use this option when generating programs that will run on
15934 real hardware; you must provide your own runtime library for
15935 whatever I/O functions are needed.
15936
15937 -mlra
15938 Enable Local Register Allocation. This is still experimental for
15939 FT32, so by default the compiler uses standard reload.
15940
15941 -mnodiv
15942 Do not use div and mod instructions.
15943
15944 -mft32b
15945 Enable use of the extended instructions of the FT32B processor.
15946
15947 -mcompress
15948 Compress all code using the Ft32B code compression scheme.
15949
15950 -mnopm
15951 Do not generate code that reads program memory.
15952
15953 FRV Options
15954 -mgpr-32
15955 Only use the first 32 general-purpose registers.
15956
15957 -mgpr-64
15958 Use all 64 general-purpose registers.
15959
15960 -mfpr-32
15961 Use only the first 32 floating-point registers.
15962
15963 -mfpr-64
15964 Use all 64 floating-point registers.
15965
15966 -mhard-float
15967 Use hardware instructions for floating-point operations.
15968
15969 -msoft-float
15970 Use library routines for floating-point operations.
15971
15972 -malloc-cc
15973 Dynamically allocate condition code registers.
15974
15975 -mfixed-cc
15976 Do not try to dynamically allocate condition code registers, only
15977 use "icc0" and "fcc0".
15978
15979 -mdword
15980 Change ABI to use double word insns.
15981
15982 -mno-dword
15983 Do not use double word instructions.
15984
15985 -mdouble
15986 Use floating-point double instructions.
15987
15988 -mno-double
15989 Do not use floating-point double instructions.
15990
15991 -mmedia
15992 Use media instructions.
15993
15994 -mno-media
15995 Do not use media instructions.
15996
15997 -mmuladd
15998 Use multiply and add/subtract instructions.
15999
16000 -mno-muladd
16001 Do not use multiply and add/subtract instructions.
16002
16003 -mfdpic
16004 Select the FDPIC ABI, which uses function descriptors to represent
16005 pointers to functions. Without any PIC/PIE-related options, it
16006 implies -fPIE. With -fpic or -fpie, it assumes GOT entries and
16007 small data are within a 12-bit range from the GOT base address;
16008 with -fPIC or -fPIE, GOT offsets are computed with 32 bits. With a
16009 bfin-elf target, this option implies -msim.
16010
16011 -minline-plt
16012 Enable inlining of PLT entries in function calls to functions that
16013 are not known to bind locally. It has no effect without -mfdpic.
16014 It's enabled by default if optimizing for speed and compiling for
16015 shared libraries (i.e., -fPIC or -fpic), or when an optimization
16016 option such as -O3 or above is present in the command line.
16017
16018 -mTLS
16019 Assume a large TLS segment when generating thread-local code.
16020
16021 -mtls
16022 Do not assume a large TLS segment when generating thread-local
16023 code.
16024
16025 -mgprel-ro
16026 Enable the use of "GPREL" relocations in the FDPIC ABI for data
16027 that is known to be in read-only sections. It's enabled by
16028 default, except for -fpic or -fpie: even though it may help make
16029 the global offset table smaller, it trades 1 instruction for 4.
16030 With -fPIC or -fPIE, it trades 3 instructions for 4, one of which
16031 may be shared by multiple symbols, and it avoids the need for a GOT
16032 entry for the referenced symbol, so it's more likely to be a win.
16033 If it is not, -mno-gprel-ro can be used to disable it.
16034
16035 -multilib-library-pic
16036 Link with the (library, not FD) pic libraries. It's implied by
16037 -mlibrary-pic, as well as by -fPIC and -fpic without -mfdpic. You
16038 should never have to use it explicitly.
16039
16040 -mlinked-fp
16041 Follow the EABI requirement of always creating a frame pointer
16042 whenever a stack frame is allocated. This option is enabled by
16043 default and can be disabled with -mno-linked-fp.
16044
16045 -mlong-calls
16046 Use indirect addressing to call functions outside the current
16047 compilation unit. This allows the functions to be placed anywhere
16048 within the 32-bit address space.
16049
16050 -malign-labels
16051 Try to align labels to an 8-byte boundary by inserting NOPs into
16052 the previous packet. This option only has an effect when VLIW
16053 packing is enabled. It doesn't create new packets; it merely adds
16054 NOPs to existing ones.
16055
16056 -mlibrary-pic
16057 Generate position-independent EABI code.
16058
16059 -macc-4
16060 Use only the first four media accumulator registers.
16061
16062 -macc-8
16063 Use all eight media accumulator registers.
16064
16065 -mpack
16066 Pack VLIW instructions.
16067
16068 -mno-pack
16069 Do not pack VLIW instructions.
16070
16071 -mno-eflags
16072 Do not mark ABI switches in e_flags.
16073
16074 -mcond-move
16075 Enable the use of conditional-move instructions (default).
16076
16077 This switch is mainly for debugging the compiler and will likely be
16078 removed in a future version.
16079
16080 -mno-cond-move
16081 Disable the use of conditional-move instructions.
16082
16083 This switch is mainly for debugging the compiler and will likely be
16084 removed in a future version.
16085
16086 -mscc
16087 Enable the use of conditional set instructions (default).
16088
16089 This switch is mainly for debugging the compiler and will likely be
16090 removed in a future version.
16091
16092 -mno-scc
16093 Disable the use of conditional set instructions.
16094
16095 This switch is mainly for debugging the compiler and will likely be
16096 removed in a future version.
16097
16098 -mcond-exec
16099 Enable the use of conditional execution (default).
16100
16101 This switch is mainly for debugging the compiler and will likely be
16102 removed in a future version.
16103
16104 -mno-cond-exec
16105 Disable the use of conditional execution.
16106
16107 This switch is mainly for debugging the compiler and will likely be
16108 removed in a future version.
16109
16110 -mvliw-branch
16111 Run a pass to pack branches into VLIW instructions (default).
16112
16113 This switch is mainly for debugging the compiler and will likely be
16114 removed in a future version.
16115
16116 -mno-vliw-branch
16117 Do not run a pass to pack branches into VLIW instructions.
16118
16119 This switch is mainly for debugging the compiler and will likely be
16120 removed in a future version.
16121
16122 -mmulti-cond-exec
16123 Enable optimization of "&&" and "||" in conditional execution
16124 (default).
16125
16126 This switch is mainly for debugging the compiler and will likely be
16127 removed in a future version.
16128
16129 -mno-multi-cond-exec
16130 Disable optimization of "&&" and "||" in conditional execution.
16131
16132 This switch is mainly for debugging the compiler and will likely be
16133 removed in a future version.
16134
16135 -mnested-cond-exec
16136 Enable nested conditional execution optimizations (default).
16137
16138 This switch is mainly for debugging the compiler and will likely be
16139 removed in a future version.
16140
16141 -mno-nested-cond-exec
16142 Disable nested conditional execution optimizations.
16143
16144 This switch is mainly for debugging the compiler and will likely be
16145 removed in a future version.
16146
16147 -moptimize-membar
16148 This switch removes redundant "membar" instructions from the
16149 compiler-generated code. It is enabled by default.
16150
16151 -mno-optimize-membar
16152 This switch disables the automatic removal of redundant "membar"
16153 instructions from the generated code.
16154
16155 -mtomcat-stats
16156 Cause gas to print out tomcat statistics.
16157
16158 -mcpu=cpu
16159 Select the processor type for which to generate code. Possible
16160 values are frv, fr550, tomcat, fr500, fr450, fr405, fr400, fr300
16161 and simple.
16162
16163 GNU/Linux Options
16164 These -m options are defined for GNU/Linux targets:
16165
16166 -mglibc
16167 Use the GNU C library. This is the default except on
16168 *-*-linux-*uclibc*, *-*-linux-*musl* and *-*-linux-*android*
16169 targets.
16170
16171 -muclibc
16172 Use uClibc C library. This is the default on *-*-linux-*uclibc*
16173 targets.
16174
16175 -mmusl
16176 Use the musl C library. This is the default on *-*-linux-*musl*
16177 targets.
16178
16179 -mbionic
16180 Use Bionic C library. This is the default on *-*-linux-*android*
16181 targets.
16182
16183 -mandroid
16184 Compile code compatible with Android platform. This is the default
16185 on *-*-linux-*android* targets.
16186
16187 When compiling, this option enables -mbionic, -fPIC,
16188 -fno-exceptions and -fno-rtti by default. When linking, this
16189 option makes the GCC driver pass Android-specific options to the
16190 linker. Finally, this option causes the preprocessor macro
16191 "__ANDROID__" to be defined.
16192
16193 -tno-android-cc
16194 Disable compilation effects of -mandroid, i.e., do not enable
16195 -mbionic, -fPIC, -fno-exceptions and -fno-rtti by default.
16196
16197 -tno-android-ld
16198 Disable linking effects of -mandroid, i.e., pass standard Linux
16199 linking options to the linker.
16200
16201 H8/300 Options
16202 These -m options are defined for the H8/300 implementations:
16203
16204 -mrelax
16205 Shorten some address references at link time, when possible; uses
16206 the linker option -relax.
16207
16208 -mh Generate code for the H8/300H.
16209
16210 -ms Generate code for the H8S.
16211
16212 -mn Generate code for the H8S and H8/300H in the normal mode. This
16213 switch must be used either with -mh or -ms.
16214
16215 -ms2600
16216 Generate code for the H8S/2600. This switch must be used with -ms.
16217
16218 -mexr
16219 Extended registers are stored on stack before execution of function
16220 with monitor attribute. Default option is -mexr. This option is
16221 valid only for H8S targets.
16222
16223 -mno-exr
16224 Extended registers are not stored on stack before execution of
16225 function with monitor attribute. Default option is -mno-exr. This
16226 option is valid only for H8S targets.
16227
16228 -mint32
16229 Make "int" data 32 bits by default.
16230
16231 -malign-300
16232 On the H8/300H and H8S, use the same alignment rules as for the
16233 H8/300. The default for the H8/300H and H8S is to align longs and
16234 floats on 4-byte boundaries. -malign-300 causes them to be aligned
16235 on 2-byte boundaries. This option has no effect on the H8/300.
16236
16237 HPPA Options
16238 These -m options are defined for the HPPA family of computers:
16239
16240 -march=architecture-type
16241 Generate code for the specified architecture. The choices for
16242 architecture-type are 1.0 for PA 1.0, 1.1 for PA 1.1, and 2.0 for
16243 PA 2.0 processors. Refer to /usr/lib/sched.models on an HP-UX
16244 system to determine the proper architecture option for your
16245 machine. Code compiled for lower numbered architectures runs on
16246 higher numbered architectures, but not the other way around.
16247
16248 -mpa-risc-1-0
16249 -mpa-risc-1-1
16250 -mpa-risc-2-0
16251 Synonyms for -march=1.0, -march=1.1, and -march=2.0 respectively.
16252
16253 -mcaller-copies
16254 The caller copies function arguments passed by hidden reference.
16255 This option should be used with care as it is not compatible with
16256 the default 32-bit runtime. However, only aggregates larger than
16257 eight bytes are passed by hidden reference and the option provides
16258 better compatibility with OpenMP.
16259
16260 -mjump-in-delay
16261 This option is ignored and provided for compatibility purposes
16262 only.
16263
16264 -mdisable-fpregs
16265 Prevent floating-point registers from being used in any manner.
16266 This is necessary for compiling kernels that perform lazy context
16267 switching of floating-point registers. If you use this option and
16268 attempt to perform floating-point operations, the compiler aborts.
16269
16270 -mdisable-indexing
16271 Prevent the compiler from using indexing address modes. This
16272 avoids some rather obscure problems when compiling MIG generated
16273 code under MACH.
16274
16275 -mno-space-regs
16276 Generate code that assumes the target has no space registers. This
16277 allows GCC to generate faster indirect calls and use unscaled index
16278 address modes.
16279
16280 Such code is suitable for level 0 PA systems and kernels.
16281
16282 -mfast-indirect-calls
16283 Generate code that assumes calls never cross space boundaries.
16284 This allows GCC to emit code that performs faster indirect calls.
16285
16286 This option does not work in the presence of shared libraries or
16287 nested functions.
16288
16289 -mfixed-range=register-range
16290 Generate code treating the given register range as fixed registers.
16291 A fixed register is one that the register allocator cannot use.
16292 This is useful when compiling kernel code. A register range is
16293 specified as two registers separated by a dash. Multiple register
16294 ranges can be specified separated by a comma.
16295
16296 -mlong-load-store
16297 Generate 3-instruction load and store sequences as sometimes
16298 required by the HP-UX 10 linker. This is equivalent to the +k
16299 option to the HP compilers.
16300
16301 -mportable-runtime
16302 Use the portable calling conventions proposed by HP for ELF
16303 systems.
16304
16305 -mgas
16306 Enable the use of assembler directives only GAS understands.
16307
16308 -mschedule=cpu-type
16309 Schedule code according to the constraints for the machine type
16310 cpu-type. The choices for cpu-type are 700 7100, 7100LC, 7200,
16311 7300 and 8000. Refer to /usr/lib/sched.models on an HP-UX system
16312 to determine the proper scheduling option for your machine. The
16313 default scheduling is 8000.
16314
16315 -mlinker-opt
16316 Enable the optimization pass in the HP-UX linker. Note this makes
16317 symbolic debugging impossible. It also triggers a bug in the HP-UX
16318 8 and HP-UX 9 linkers in which they give bogus error messages when
16319 linking some programs.
16320
16321 -msoft-float
16322 Generate output containing library calls for floating point.
16323 Warning: the requisite libraries are not available for all HPPA
16324 targets. Normally the facilities of the machine's usual C compiler
16325 are used, but this cannot be done directly in cross-compilation.
16326 You must make your own arrangements to provide suitable library
16327 functions for cross-compilation.
16328
16329 -msoft-float changes the calling convention in the output file;
16330 therefore, it is only useful if you compile all of a program with
16331 this option. In particular, you need to compile libgcc.a, the
16332 library that comes with GCC, with -msoft-float in order for this to
16333 work.
16334
16335 -msio
16336 Generate the predefine, "_SIO", for server IO. The default is
16337 -mwsio. This generates the predefines, "__hp9000s700",
16338 "__hp9000s700__" and "_WSIO", for workstation IO. These options
16339 are available under HP-UX and HI-UX.
16340
16341 -mgnu-ld
16342 Use options specific to GNU ld. This passes -shared to ld when
16343 building a shared library. It is the default when GCC is
16344 configured, explicitly or implicitly, with the GNU linker. This
16345 option does not affect which ld is called; it only changes what
16346 parameters are passed to that ld. The ld that is called is
16347 determined by the --with-ld configure option, GCC's program search
16348 path, and finally by the user's PATH. The linker used by GCC can
16349 be printed using which `gcc -print-prog-name=ld`. This option is
16350 only available on the 64-bit HP-UX GCC, i.e. configured with
16351 hppa*64*-*-hpux*.
16352
16353 -mhp-ld
16354 Use options specific to HP ld. This passes -b to ld when building
16355 a shared library and passes +Accept TypeMismatch to ld on all
16356 links. It is the default when GCC is configured, explicitly or
16357 implicitly, with the HP linker. This option does not affect which
16358 ld is called; it only changes what parameters are passed to that
16359 ld. The ld that is called is determined by the --with-ld configure
16360 option, GCC's program search path, and finally by the user's PATH.
16361 The linker used by GCC can be printed using which `gcc
16362 -print-prog-name=ld`. This option is only available on the 64-bit
16363 HP-UX GCC, i.e. configured with hppa*64*-*-hpux*.
16364
16365 -mlong-calls
16366 Generate code that uses long call sequences. This ensures that a
16367 call is always able to reach linker generated stubs. The default
16368 is to generate long calls only when the distance from the call site
16369 to the beginning of the function or translation unit, as the case
16370 may be, exceeds a predefined limit set by the branch type being
16371 used. The limits for normal calls are 7,600,000 and 240,000 bytes,
16372 respectively for the PA 2.0 and PA 1.X architectures. Sibcalls are
16373 always limited at 240,000 bytes.
16374
16375 Distances are measured from the beginning of functions when using
16376 the -ffunction-sections option, or when using the -mgas and
16377 -mno-portable-runtime options together under HP-UX with the SOM
16378 linker.
16379
16380 It is normally not desirable to use this option as it degrades
16381 performance. However, it may be useful in large applications,
16382 particularly when partial linking is used to build the application.
16383
16384 The types of long calls used depends on the capabilities of the
16385 assembler and linker, and the type of code being generated. The
16386 impact on systems that support long absolute calls, and long pic
16387 symbol-difference or pc-relative calls should be relatively small.
16388 However, an indirect call is used on 32-bit ELF systems in pic code
16389 and it is quite long.
16390
16391 -munix=unix-std
16392 Generate compiler predefines and select a startfile for the
16393 specified UNIX standard. The choices for unix-std are 93, 95 and
16394 98. 93 is supported on all HP-UX versions. 95 is available on HP-
16395 UX 10.10 and later. 98 is available on HP-UX 11.11 and later. The
16396 default values are 93 for HP-UX 10.00, 95 for HP-UX 10.10 though to
16397 11.00, and 98 for HP-UX 11.11 and later.
16398
16399 -munix=93 provides the same predefines as GCC 3.3 and 3.4.
16400 -munix=95 provides additional predefines for "XOPEN_UNIX" and
16401 "_XOPEN_SOURCE_EXTENDED", and the startfile unix95.o. -munix=98
16402 provides additional predefines for "_XOPEN_UNIX",
16403 "_XOPEN_SOURCE_EXTENDED", "_INCLUDE__STDC_A1_SOURCE" and
16404 "_INCLUDE_XOPEN_SOURCE_500", and the startfile unix98.o.
16405
16406 It is important to note that this option changes the interfaces for
16407 various library routines. It also affects the operational behavior
16408 of the C library. Thus, extreme care is needed in using this
16409 option.
16410
16411 Library code that is intended to operate with more than one UNIX
16412 standard must test, set and restore the variable
16413 "__xpg4_extended_mask" as appropriate. Most GNU software doesn't
16414 provide this capability.
16415
16416 -nolibdld
16417 Suppress the generation of link options to search libdld.sl when
16418 the -static option is specified on HP-UX 10 and later.
16419
16420 -static
16421 The HP-UX implementation of setlocale in libc has a dependency on
16422 libdld.sl. There isn't an archive version of libdld.sl. Thus,
16423 when the -static option is specified, special link options are
16424 needed to resolve this dependency.
16425
16426 On HP-UX 10 and later, the GCC driver adds the necessary options to
16427 link with libdld.sl when the -static option is specified. This
16428 causes the resulting binary to be dynamic. On the 64-bit port, the
16429 linkers generate dynamic binaries by default in any case. The
16430 -nolibdld option can be used to prevent the GCC driver from adding
16431 these link options.
16432
16433 -threads
16434 Add support for multithreading with the dce thread library under
16435 HP-UX. This option sets flags for both the preprocessor and
16436 linker.
16437
16438 IA-64 Options
16439 These are the -m options defined for the Intel IA-64 architecture.
16440
16441 -mbig-endian
16442 Generate code for a big-endian target. This is the default for HP-
16443 UX.
16444
16445 -mlittle-endian
16446 Generate code for a little-endian target. This is the default for
16447 AIX5 and GNU/Linux.
16448
16449 -mgnu-as
16450 -mno-gnu-as
16451 Generate (or don't) code for the GNU assembler. This is the
16452 default.
16453
16454 -mgnu-ld
16455 -mno-gnu-ld
16456 Generate (or don't) code for the GNU linker. This is the default.
16457
16458 -mno-pic
16459 Generate code that does not use a global pointer register. The
16460 result is not position independent code, and violates the IA-64
16461 ABI.
16462
16463 -mvolatile-asm-stop
16464 -mno-volatile-asm-stop
16465 Generate (or don't) a stop bit immediately before and after
16466 volatile asm statements.
16467
16468 -mregister-names
16469 -mno-register-names
16470 Generate (or don't) in, loc, and out register names for the stacked
16471 registers. This may make assembler output more readable.
16472
16473 -mno-sdata
16474 -msdata
16475 Disable (or enable) optimizations that use the small data section.
16476 This may be useful for working around optimizer bugs.
16477
16478 -mconstant-gp
16479 Generate code that uses a single constant global pointer value.
16480 This is useful when compiling kernel code.
16481
16482 -mauto-pic
16483 Generate code that is self-relocatable. This implies
16484 -mconstant-gp. This is useful when compiling firmware code.
16485
16486 -minline-float-divide-min-latency
16487 Generate code for inline divides of floating-point values using the
16488 minimum latency algorithm.
16489
16490 -minline-float-divide-max-throughput
16491 Generate code for inline divides of floating-point values using the
16492 maximum throughput algorithm.
16493
16494 -mno-inline-float-divide
16495 Do not generate inline code for divides of floating-point values.
16496
16497 -minline-int-divide-min-latency
16498 Generate code for inline divides of integer values using the
16499 minimum latency algorithm.
16500
16501 -minline-int-divide-max-throughput
16502 Generate code for inline divides of integer values using the
16503 maximum throughput algorithm.
16504
16505 -mno-inline-int-divide
16506 Do not generate inline code for divides of integer values.
16507
16508 -minline-sqrt-min-latency
16509 Generate code for inline square roots using the minimum latency
16510 algorithm.
16511
16512 -minline-sqrt-max-throughput
16513 Generate code for inline square roots using the maximum throughput
16514 algorithm.
16515
16516 -mno-inline-sqrt
16517 Do not generate inline code for "sqrt".
16518
16519 -mfused-madd
16520 -mno-fused-madd
16521 Do (don't) generate code that uses the fused multiply/add or
16522 multiply/subtract instructions. The default is to use these
16523 instructions.
16524
16525 -mno-dwarf2-asm
16526 -mdwarf2-asm
16527 Don't (or do) generate assembler code for the DWARF line number
16528 debugging info. This may be useful when not using the GNU
16529 assembler.
16530
16531 -mearly-stop-bits
16532 -mno-early-stop-bits
16533 Allow stop bits to be placed earlier than immediately preceding the
16534 instruction that triggered the stop bit. This can improve
16535 instruction scheduling, but does not always do so.
16536
16537 -mfixed-range=register-range
16538 Generate code treating the given register range as fixed registers.
16539 A fixed register is one that the register allocator cannot use.
16540 This is useful when compiling kernel code. A register range is
16541 specified as two registers separated by a dash. Multiple register
16542 ranges can be specified separated by a comma.
16543
16544 -mtls-size=tls-size
16545 Specify bit size of immediate TLS offsets. Valid values are 14,
16546 22, and 64.
16547
16548 -mtune=cpu-type
16549 Tune the instruction scheduling for a particular CPU, Valid values
16550 are itanium, itanium1, merced, itanium2, and mckinley.
16551
16552 -milp32
16553 -mlp64
16554 Generate code for a 32-bit or 64-bit environment. The 32-bit
16555 environment sets int, long and pointer to 32 bits. The 64-bit
16556 environment sets int to 32 bits and long and pointer to 64 bits.
16557 These are HP-UX specific flags.
16558
16559 -mno-sched-br-data-spec
16560 -msched-br-data-spec
16561 (Dis/En)able data speculative scheduling before reload. This
16562 results in generation of "ld.a" instructions and the corresponding
16563 check instructions ("ld.c" / "chk.a"). The default setting is
16564 disabled.
16565
16566 -msched-ar-data-spec
16567 -mno-sched-ar-data-spec
16568 (En/Dis)able data speculative scheduling after reload. This
16569 results in generation of "ld.a" instructions and the corresponding
16570 check instructions ("ld.c" / "chk.a"). The default setting is
16571 enabled.
16572
16573 -mno-sched-control-spec
16574 -msched-control-spec
16575 (Dis/En)able control speculative scheduling. This feature is
16576 available only during region scheduling (i.e. before reload). This
16577 results in generation of the "ld.s" instructions and the
16578 corresponding check instructions "chk.s". The default setting is
16579 disabled.
16580
16581 -msched-br-in-data-spec
16582 -mno-sched-br-in-data-spec
16583 (En/Dis)able speculative scheduling of the instructions that are
16584 dependent on the data speculative loads before reload. This is
16585 effective only with -msched-br-data-spec enabled. The default
16586 setting is enabled.
16587
16588 -msched-ar-in-data-spec
16589 -mno-sched-ar-in-data-spec
16590 (En/Dis)able speculative scheduling of the instructions that are
16591 dependent on the data speculative loads after reload. This is
16592 effective only with -msched-ar-data-spec enabled. The default
16593 setting is enabled.
16594
16595 -msched-in-control-spec
16596 -mno-sched-in-control-spec
16597 (En/Dis)able speculative scheduling of the instructions that are
16598 dependent on the control speculative loads. This is effective only
16599 with -msched-control-spec enabled. The default setting is enabled.
16600
16601 -mno-sched-prefer-non-data-spec-insns
16602 -msched-prefer-non-data-spec-insns
16603 If enabled, data-speculative instructions are chosen for schedule
16604 only if there are no other choices at the moment. This makes the
16605 use of the data speculation much more conservative. The default
16606 setting is disabled.
16607
16608 -mno-sched-prefer-non-control-spec-insns
16609 -msched-prefer-non-control-spec-insns
16610 If enabled, control-speculative instructions are chosen for
16611 schedule only if there are no other choices at the moment. This
16612 makes the use of the control speculation much more conservative.
16613 The default setting is disabled.
16614
16615 -mno-sched-count-spec-in-critical-path
16616 -msched-count-spec-in-critical-path
16617 If enabled, speculative dependencies are considered during
16618 computation of the instructions priorities. This makes the use of
16619 the speculation a bit more conservative. The default setting is
16620 disabled.
16621
16622 -msched-spec-ldc
16623 Use a simple data speculation check. This option is on by default.
16624
16625 -msched-control-spec-ldc
16626 Use a simple check for control speculation. This option is on by
16627 default.
16628
16629 -msched-stop-bits-after-every-cycle
16630 Place a stop bit after every cycle when scheduling. This option is
16631 on by default.
16632
16633 -msched-fp-mem-deps-zero-cost
16634 Assume that floating-point stores and loads are not likely to cause
16635 a conflict when placed into the same instruction group. This
16636 option is disabled by default.
16637
16638 -msel-sched-dont-check-control-spec
16639 Generate checks for control speculation in selective scheduling.
16640 This flag is disabled by default.
16641
16642 -msched-max-memory-insns=max-insns
16643 Limit on the number of memory insns per instruction group, giving
16644 lower priority to subsequent memory insns attempting to schedule in
16645 the same instruction group. Frequently useful to prevent cache bank
16646 conflicts. The default value is 1.
16647
16648 -msched-max-memory-insns-hard-limit
16649 Makes the limit specified by msched-max-memory-insns a hard limit,
16650 disallowing more than that number in an instruction group.
16651 Otherwise, the limit is "soft", meaning that non-memory operations
16652 are preferred when the limit is reached, but memory operations may
16653 still be scheduled.
16654
16655 LM32 Options
16656 These -m options are defined for the LatticeMico32 architecture:
16657
16658 -mbarrel-shift-enabled
16659 Enable barrel-shift instructions.
16660
16661 -mdivide-enabled
16662 Enable divide and modulus instructions.
16663
16664 -mmultiply-enabled
16665 Enable multiply instructions.
16666
16667 -msign-extend-enabled
16668 Enable sign extend instructions.
16669
16670 -muser-enabled
16671 Enable user-defined instructions.
16672
16673 M32C Options
16674 -mcpu=name
16675 Select the CPU for which code is generated. name may be one of r8c
16676 for the R8C/Tiny series, m16c for the M16C (up to /60) series,
16677 m32cm for the M16C/80 series, or m32c for the M32C/80 series.
16678
16679 -msim
16680 Specifies that the program will be run on the simulator. This
16681 causes an alternate runtime library to be linked in which supports,
16682 for example, file I/O. You must not use this option when
16683 generating programs that will run on real hardware; you must
16684 provide your own runtime library for whatever I/O functions are
16685 needed.
16686
16687 -memregs=number
16688 Specifies the number of memory-based pseudo-registers GCC uses
16689 during code generation. These pseudo-registers are used like real
16690 registers, so there is a tradeoff between GCC's ability to fit the
16691 code into available registers, and the performance penalty of using
16692 memory instead of registers. Note that all modules in a program
16693 must be compiled with the same value for this option. Because of
16694 that, you must not use this option with GCC's default runtime
16695 libraries.
16696
16697 M32R/D Options
16698 These -m options are defined for Renesas M32R/D architectures:
16699
16700 -m32r2
16701 Generate code for the M32R/2.
16702
16703 -m32rx
16704 Generate code for the M32R/X.
16705
16706 -m32r
16707 Generate code for the M32R. This is the default.
16708
16709 -mmodel=small
16710 Assume all objects live in the lower 16MB of memory (so that their
16711 addresses can be loaded with the "ld24" instruction), and assume
16712 all subroutines are reachable with the "bl" instruction. This is
16713 the default.
16714
16715 The addressability of a particular object can be set with the
16716 "model" attribute.
16717
16718 -mmodel=medium
16719 Assume objects may be anywhere in the 32-bit address space (the
16720 compiler generates "seth/add3" instructions to load their
16721 addresses), and assume all subroutines are reachable with the "bl"
16722 instruction.
16723
16724 -mmodel=large
16725 Assume objects may be anywhere in the 32-bit address space (the
16726 compiler generates "seth/add3" instructions to load their
16727 addresses), and assume subroutines may not be reachable with the
16728 "bl" instruction (the compiler generates the much slower
16729 "seth/add3/jl" instruction sequence).
16730
16731 -msdata=none
16732 Disable use of the small data area. Variables are put into one of
16733 ".data", ".bss", or ".rodata" (unless the "section" attribute has
16734 been specified). This is the default.
16735
16736 The small data area consists of sections ".sdata" and ".sbss".
16737 Objects may be explicitly put in the small data area with the
16738 "section" attribute using one of these sections.
16739
16740 -msdata=sdata
16741 Put small global and static data in the small data area, but do not
16742 generate special code to reference them.
16743
16744 -msdata=use
16745 Put small global and static data in the small data area, and
16746 generate special instructions to reference them.
16747
16748 -G num
16749 Put global and static objects less than or equal to num bytes into
16750 the small data or BSS sections instead of the normal data or BSS
16751 sections. The default value of num is 8. The -msdata option must
16752 be set to one of sdata or use for this option to have any effect.
16753
16754 All modules should be compiled with the same -G num value.
16755 Compiling with different values of num may or may not work; if it
16756 doesn't the linker gives an error message---incorrect code is not
16757 generated.
16758
16759 -mdebug
16760 Makes the M32R-specific code in the compiler display some
16761 statistics that might help in debugging programs.
16762
16763 -malign-loops
16764 Align all loops to a 32-byte boundary.
16765
16766 -mno-align-loops
16767 Do not enforce a 32-byte alignment for loops. This is the default.
16768
16769 -missue-rate=number
16770 Issue number instructions per cycle. number can only be 1 or 2.
16771
16772 -mbranch-cost=number
16773 number can only be 1 or 2. If it is 1 then branches are preferred
16774 over conditional code, if it is 2, then the opposite applies.
16775
16776 -mflush-trap=number
16777 Specifies the trap number to use to flush the cache. The default
16778 is 12. Valid numbers are between 0 and 15 inclusive.
16779
16780 -mno-flush-trap
16781 Specifies that the cache cannot be flushed by using a trap.
16782
16783 -mflush-func=name
16784 Specifies the name of the operating system function to call to
16785 flush the cache. The default is _flush_cache, but a function call
16786 is only used if a trap is not available.
16787
16788 -mno-flush-func
16789 Indicates that there is no OS function for flushing the cache.
16790
16791 M680x0 Options
16792 These are the -m options defined for M680x0 and ColdFire processors.
16793 The default settings depend on which architecture was selected when the
16794 compiler was configured; the defaults for the most common choices are
16795 given below.
16796
16797 -march=arch
16798 Generate code for a specific M680x0 or ColdFire instruction set
16799 architecture. Permissible values of arch for M680x0 architectures
16800 are: 68000, 68010, 68020, 68030, 68040, 68060 and cpu32. ColdFire
16801 architectures are selected according to Freescale's ISA
16802 classification and the permissible values are: isaa, isaaplus, isab
16803 and isac.
16804
16805 GCC defines a macro "__mcfarch__" whenever it is generating code
16806 for a ColdFire target. The arch in this macro is one of the -march
16807 arguments given above.
16808
16809 When used together, -march and -mtune select code that runs on a
16810 family of similar processors but that is optimized for a particular
16811 microarchitecture.
16812
16813 -mcpu=cpu
16814 Generate code for a specific M680x0 or ColdFire processor. The
16815 M680x0 cpus are: 68000, 68010, 68020, 68030, 68040, 68060, 68302,
16816 68332 and cpu32. The ColdFire cpus are given by the table below,
16817 which also classifies the CPUs into families:
16818
16819 Family : -mcpu arguments
16820 51 : 51 51ac 51ag 51cn 51em 51je 51jf 51jg 51jm 51mm 51qe 51qm
16821 5206 : 5202 5204 5206
16822 5206e : 5206e
16823 5208 : 5207 5208
16824 5211a : 5210a 5211a
16825 5213 : 5211 5212 5213
16826 5216 : 5214 5216
16827 52235 : 52230 52231 52232 52233 52234 52235
16828 5225 : 5224 5225
16829 52259 : 52252 52254 52255 52256 52258 52259
16830 5235 : 5232 5233 5234 5235 523x
16831 5249 : 5249
16832 5250 : 5250
16833 5271 : 5270 5271
16834 5272 : 5272
16835 5275 : 5274 5275
16836 5282 : 5280 5281 5282 528x
16837 53017 : 53011 53012 53013 53014 53015 53016 53017
16838 5307 : 5307
16839 5329 : 5327 5328 5329 532x
16840 5373 : 5372 5373 537x
16841 5407 : 5407
16842 5475 : 5470 5471 5472 5473 5474 5475 547x 5480 5481 5482 5483 5484
16843 5485
16844
16845 -mcpu=cpu overrides -march=arch if arch is compatible with cpu.
16846 Other combinations of -mcpu and -march are rejected.
16847
16848 GCC defines the macro "__mcf_cpu_cpu" when ColdFire target cpu is
16849 selected. It also defines "__mcf_family_family", where the value
16850 of family is given by the table above.
16851
16852 -mtune=tune
16853 Tune the code for a particular microarchitecture within the
16854 constraints set by -march and -mcpu. The M680x0 microarchitectures
16855 are: 68000, 68010, 68020, 68030, 68040, 68060 and cpu32. The
16856 ColdFire microarchitectures are: cfv1, cfv2, cfv3, cfv4 and cfv4e.
16857
16858 You can also use -mtune=68020-40 for code that needs to run
16859 relatively well on 68020, 68030 and 68040 targets. -mtune=68020-60
16860 is similar but includes 68060 targets as well. These two options
16861 select the same tuning decisions as -m68020-40 and -m68020-60
16862 respectively.
16863
16864 GCC defines the macros "__mcarch" and "__mcarch__" when tuning for
16865 680x0 architecture arch. It also defines "mcarch" unless either
16866 -ansi or a non-GNU -std option is used. If GCC is tuning for a
16867 range of architectures, as selected by -mtune=68020-40 or
16868 -mtune=68020-60, it defines the macros for every architecture in
16869 the range.
16870
16871 GCC also defines the macro "__muarch__" when tuning for ColdFire
16872 microarchitecture uarch, where uarch is one of the arguments given
16873 above.
16874
16875 -m68000
16876 -mc68000
16877 Generate output for a 68000. This is the default when the compiler
16878 is configured for 68000-based systems. It is equivalent to
16879 -march=68000.
16880
16881 Use this option for microcontrollers with a 68000 or EC000 core,
16882 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
16883
16884 -m68010
16885 Generate output for a 68010. This is the default when the compiler
16886 is configured for 68010-based systems. It is equivalent to
16887 -march=68010.
16888
16889 -m68020
16890 -mc68020
16891 Generate output for a 68020. This is the default when the compiler
16892 is configured for 68020-based systems. It is equivalent to
16893 -march=68020.
16894
16895 -m68030
16896 Generate output for a 68030. This is the default when the compiler
16897 is configured for 68030-based systems. It is equivalent to
16898 -march=68030.
16899
16900 -m68040
16901 Generate output for a 68040. This is the default when the compiler
16902 is configured for 68040-based systems. It is equivalent to
16903 -march=68040.
16904
16905 This option inhibits the use of 68881/68882 instructions that have
16906 to be emulated by software on the 68040. Use this option if your
16907 68040 does not have code to emulate those instructions.
16908
16909 -m68060
16910 Generate output for a 68060. This is the default when the compiler
16911 is configured for 68060-based systems. It is equivalent to
16912 -march=68060.
16913
16914 This option inhibits the use of 68020 and 68881/68882 instructions
16915 that have to be emulated by software on the 68060. Use this option
16916 if your 68060 does not have code to emulate those instructions.
16917
16918 -mcpu32
16919 Generate output for a CPU32. This is the default when the compiler
16920 is configured for CPU32-based systems. It is equivalent to
16921 -march=cpu32.
16922
16923 Use this option for microcontrollers with a CPU32 or CPU32+ core,
16924 including the 68330, 68331, 68332, 68333, 68334, 68336, 68340,
16925 68341, 68349 and 68360.
16926
16927 -m5200
16928 Generate output for a 520X ColdFire CPU. This is the default when
16929 the compiler is configured for 520X-based systems. It is
16930 equivalent to -mcpu=5206, and is now deprecated in favor of that
16931 option.
16932
16933 Use this option for microcontroller with a 5200 core, including the
16934 MCF5202, MCF5203, MCF5204 and MCF5206.
16935
16936 -m5206e
16937 Generate output for a 5206e ColdFire CPU. The option is now
16938 deprecated in favor of the equivalent -mcpu=5206e.
16939
16940 -m528x
16941 Generate output for a member of the ColdFire 528X family. The
16942 option is now deprecated in favor of the equivalent -mcpu=528x.
16943
16944 -m5307
16945 Generate output for a ColdFire 5307 CPU. The option is now
16946 deprecated in favor of the equivalent -mcpu=5307.
16947
16948 -m5407
16949 Generate output for a ColdFire 5407 CPU. The option is now
16950 deprecated in favor of the equivalent -mcpu=5407.
16951
16952 -mcfv4e
16953 Generate output for a ColdFire V4e family CPU (e.g. 547x/548x).
16954 This includes use of hardware floating-point instructions. The
16955 option is equivalent to -mcpu=547x, and is now deprecated in favor
16956 of that option.
16957
16958 -m68020-40
16959 Generate output for a 68040, without using any of the new
16960 instructions. This results in code that can run relatively
16961 efficiently on either a 68020/68881 or a 68030 or a 68040. The
16962 generated code does use the 68881 instructions that are emulated on
16963 the 68040.
16964
16965 The option is equivalent to -march=68020 -mtune=68020-40.
16966
16967 -m68020-60
16968 Generate output for a 68060, without using any of the new
16969 instructions. This results in code that can run relatively
16970 efficiently on either a 68020/68881 or a 68030 or a 68040. The
16971 generated code does use the 68881 instructions that are emulated on
16972 the 68060.
16973
16974 The option is equivalent to -march=68020 -mtune=68020-60.
16975
16976 -mhard-float
16977 -m68881
16978 Generate floating-point instructions. This is the default for
16979 68020 and above, and for ColdFire devices that have an FPU. It
16980 defines the macro "__HAVE_68881__" on M680x0 targets and
16981 "__mcffpu__" on ColdFire targets.
16982
16983 -msoft-float
16984 Do not generate floating-point instructions; use library calls
16985 instead. This is the default for 68000, 68010, and 68832 targets.
16986 It is also the default for ColdFire devices that have no FPU.
16987
16988 -mdiv
16989 -mno-div
16990 Generate (do not generate) ColdFire hardware divide and remainder
16991 instructions. If -march is used without -mcpu, the default is "on"
16992 for ColdFire architectures and "off" for M680x0 architectures.
16993 Otherwise, the default is taken from the target CPU (either the
16994 default CPU, or the one specified by -mcpu). For example, the
16995 default is "off" for -mcpu=5206 and "on" for -mcpu=5206e.
16996
16997 GCC defines the macro "__mcfhwdiv__" when this option is enabled.
16998
16999 -mshort
17000 Consider type "int" to be 16 bits wide, like "short int".
17001 Additionally, parameters passed on the stack are also aligned to a
17002 16-bit boundary even on targets whose API mandates promotion to
17003 32-bit.
17004
17005 -mno-short
17006 Do not consider type "int" to be 16 bits wide. This is the
17007 default.
17008
17009 -mnobitfield
17010 -mno-bitfield
17011 Do not use the bit-field instructions. The -m68000, -mcpu32 and
17012 -m5200 options imply -mnobitfield.
17013
17014 -mbitfield
17015 Do use the bit-field instructions. The -m68020 option implies
17016 -mbitfield. This is the default if you use a configuration
17017 designed for a 68020.
17018
17019 -mrtd
17020 Use a different function-calling convention, in which functions
17021 that take a fixed number of arguments return with the "rtd"
17022 instruction, which pops their arguments while returning. This
17023 saves one instruction in the caller since there is no need to pop
17024 the arguments there.
17025
17026 This calling convention is incompatible with the one normally used
17027 on Unix, so you cannot use it if you need to call libraries
17028 compiled with the Unix compiler.
17029
17030 Also, you must provide function prototypes for all functions that
17031 take variable numbers of arguments (including "printf"); otherwise
17032 incorrect code is generated for calls to those functions.
17033
17034 In addition, seriously incorrect code results if you call a
17035 function with too many arguments. (Normally, extra arguments are
17036 harmlessly ignored.)
17037
17038 The "rtd" instruction is supported by the 68010, 68020, 68030,
17039 68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
17040
17041 -mno-rtd
17042 Do not use the calling conventions selected by -mrtd. This is the
17043 default.
17044
17045 -malign-int
17046 -mno-align-int
17047 Control whether GCC aligns "int", "long", "long long", "float",
17048 "double", and "long double" variables on a 32-bit boundary
17049 (-malign-int) or a 16-bit boundary (-mno-align-int). Aligning
17050 variables on 32-bit boundaries produces code that runs somewhat
17051 faster on processors with 32-bit busses at the expense of more
17052 memory.
17053
17054 Warning: if you use the -malign-int switch, GCC aligns structures
17055 containing the above types differently than most published
17056 application binary interface specifications for the m68k.
17057
17058 -mpcrel
17059 Use the pc-relative addressing mode of the 68000 directly, instead
17060 of using a global offset table. At present, this option implies
17061 -fpic, allowing at most a 16-bit offset for pc-relative addressing.
17062 -fPIC is not presently supported with -mpcrel, though this could be
17063 supported for 68020 and higher processors.
17064
17065 -mno-strict-align
17066 -mstrict-align
17067 Do not (do) assume that unaligned memory references are handled by
17068 the system.
17069
17070 -msep-data
17071 Generate code that allows the data segment to be located in a
17072 different area of memory from the text segment. This allows for
17073 execute-in-place in an environment without virtual memory
17074 management. This option implies -fPIC.
17075
17076 -mno-sep-data
17077 Generate code that assumes that the data segment follows the text
17078 segment. This is the default.
17079
17080 -mid-shared-library
17081 Generate code that supports shared libraries via the library ID
17082 method. This allows for execute-in-place and shared libraries in
17083 an environment without virtual memory management. This option
17084 implies -fPIC.
17085
17086 -mno-id-shared-library
17087 Generate code that doesn't assume ID-based shared libraries are
17088 being used. This is the default.
17089
17090 -mshared-library-id=n
17091 Specifies the identification number of the ID-based shared library
17092 being compiled. Specifying a value of 0 generates more compact
17093 code; specifying other values forces the allocation of that number
17094 to the current library, but is no more space- or time-efficient
17095 than omitting this option.
17096
17097 -mxgot
17098 -mno-xgot
17099 When generating position-independent code for ColdFire, generate
17100 code that works if the GOT has more than 8192 entries. This code
17101 is larger and slower than code generated without this option. On
17102 M680x0 processors, this option is not needed; -fPIC suffices.
17103
17104 GCC normally uses a single instruction to load values from the GOT.
17105 While this is relatively efficient, it only works if the GOT is
17106 smaller than about 64k. Anything larger causes the linker to
17107 report an error such as:
17108
17109 relocation truncated to fit: R_68K_GOT16O foobar
17110
17111 If this happens, you should recompile your code with -mxgot. It
17112 should then work with very large GOTs. However, code generated
17113 with -mxgot is less efficient, since it takes 4 instructions to
17114 fetch the value of a global symbol.
17115
17116 Note that some linkers, including newer versions of the GNU linker,
17117 can create multiple GOTs and sort GOT entries. If you have such a
17118 linker, you should only need to use -mxgot when compiling a single
17119 object file that accesses more than 8192 GOT entries. Very few do.
17120
17121 These options have no effect unless GCC is generating position-
17122 independent code.
17123
17124 -mlong-jump-table-offsets
17125 Use 32-bit offsets in "switch" tables. The default is to use
17126 16-bit offsets.
17127
17128 MCore Options
17129 These are the -m options defined for the Motorola M*Core processors.
17130
17131 -mhardlit
17132 -mno-hardlit
17133 Inline constants into the code stream if it can be done in two
17134 instructions or less.
17135
17136 -mdiv
17137 -mno-div
17138 Use the divide instruction. (Enabled by default).
17139
17140 -mrelax-immediate
17141 -mno-relax-immediate
17142 Allow arbitrary-sized immediates in bit operations.
17143
17144 -mwide-bitfields
17145 -mno-wide-bitfields
17146 Always treat bit-fields as "int"-sized.
17147
17148 -m4byte-functions
17149 -mno-4byte-functions
17150 Force all functions to be aligned to a 4-byte boundary.
17151
17152 -mcallgraph-data
17153 -mno-callgraph-data
17154 Emit callgraph information.
17155
17156 -mslow-bytes
17157 -mno-slow-bytes
17158 Prefer word access when reading byte quantities.
17159
17160 -mlittle-endian
17161 -mbig-endian
17162 Generate code for a little-endian target.
17163
17164 -m210
17165 -m340
17166 Generate code for the 210 processor.
17167
17168 -mno-lsim
17169 Assume that runtime support has been provided and so omit the
17170 simulator library (libsim.a) from the linker command line.
17171
17172 -mstack-increment=size
17173 Set the maximum amount for a single stack increment operation.
17174 Large values can increase the speed of programs that contain
17175 functions that need a large amount of stack space, but they can
17176 also trigger a segmentation fault if the stack is extended too
17177 much. The default value is 0x1000.
17178
17179 MeP Options
17180 -mabsdiff
17181 Enables the "abs" instruction, which is the absolute difference
17182 between two registers.
17183
17184 -mall-opts
17185 Enables all the optional instructions---average, multiply, divide,
17186 bit operations, leading zero, absolute difference, min/max, clip,
17187 and saturation.
17188
17189 -maverage
17190 Enables the "ave" instruction, which computes the average of two
17191 registers.
17192
17193 -mbased=n
17194 Variables of size n bytes or smaller are placed in the ".based"
17195 section by default. Based variables use the $tp register as a base
17196 register, and there is a 128-byte limit to the ".based" section.
17197
17198 -mbitops
17199 Enables the bit operation instructions---bit test ("btstm"), set
17200 ("bsetm"), clear ("bclrm"), invert ("bnotm"), and test-and-set
17201 ("tas").
17202
17203 -mc=name
17204 Selects which section constant data is placed in. name may be
17205 tiny, near, or far.
17206
17207 -mclip
17208 Enables the "clip" instruction. Note that -mclip is not useful
17209 unless you also provide -mminmax.
17210
17211 -mconfig=name
17212 Selects one of the built-in core configurations. Each MeP chip has
17213 one or more modules in it; each module has a core CPU and a variety
17214 of coprocessors, optional instructions, and peripherals. The
17215 "MeP-Integrator" tool, not part of GCC, provides these
17216 configurations through this option; using this option is the same
17217 as using all the corresponding command-line options. The default
17218 configuration is default.
17219
17220 -mcop
17221 Enables the coprocessor instructions. By default, this is a 32-bit
17222 coprocessor. Note that the coprocessor is normally enabled via the
17223 -mconfig= option.
17224
17225 -mcop32
17226 Enables the 32-bit coprocessor's instructions.
17227
17228 -mcop64
17229 Enables the 64-bit coprocessor's instructions.
17230
17231 -mivc2
17232 Enables IVC2 scheduling. IVC2 is a 64-bit VLIW coprocessor.
17233
17234 -mdc
17235 Causes constant variables to be placed in the ".near" section.
17236
17237 -mdiv
17238 Enables the "div" and "divu" instructions.
17239
17240 -meb
17241 Generate big-endian code.
17242
17243 -mel
17244 Generate little-endian code.
17245
17246 -mio-volatile
17247 Tells the compiler that any variable marked with the "io" attribute
17248 is to be considered volatile.
17249
17250 -ml Causes variables to be assigned to the ".far" section by default.
17251
17252 -mleadz
17253 Enables the "leadz" (leading zero) instruction.
17254
17255 -mm Causes variables to be assigned to the ".near" section by default.
17256
17257 -mminmax
17258 Enables the "min" and "max" instructions.
17259
17260 -mmult
17261 Enables the multiplication and multiply-accumulate instructions.
17262
17263 -mno-opts
17264 Disables all the optional instructions enabled by -mall-opts.
17265
17266 -mrepeat
17267 Enables the "repeat" and "erepeat" instructions, used for low-
17268 overhead looping.
17269
17270 -ms Causes all variables to default to the ".tiny" section. Note that
17271 there is a 65536-byte limit to this section. Accesses to these
17272 variables use the %gp base register.
17273
17274 -msatur
17275 Enables the saturation instructions. Note that the compiler does
17276 not currently generate these itself, but this option is included
17277 for compatibility with other tools, like "as".
17278
17279 -msdram
17280 Link the SDRAM-based runtime instead of the default ROM-based
17281 runtime.
17282
17283 -msim
17284 Link the simulator run-time libraries.
17285
17286 -msimnovec
17287 Link the simulator runtime libraries, excluding built-in support
17288 for reset and exception vectors and tables.
17289
17290 -mtf
17291 Causes all functions to default to the ".far" section. Without
17292 this option, functions default to the ".near" section.
17293
17294 -mtiny=n
17295 Variables that are n bytes or smaller are allocated to the ".tiny"
17296 section. These variables use the $gp base register. The default
17297 for this option is 4, but note that there's a 65536-byte limit to
17298 the ".tiny" section.
17299
17300 MicroBlaze Options
17301 -msoft-float
17302 Use software emulation for floating point (default).
17303
17304 -mhard-float
17305 Use hardware floating-point instructions.
17306
17307 -mmemcpy
17308 Do not optimize block moves, use "memcpy".
17309
17310 -mno-clearbss
17311 This option is deprecated. Use -fno-zero-initialized-in-bss
17312 instead.
17313
17314 -mcpu=cpu-type
17315 Use features of, and schedule code for, the given CPU. Supported
17316 values are in the format vX.YY.Z, where X is a major version, YY is
17317 the minor version, and Z is compatibility code. Example values are
17318 v3.00.a, v4.00.b, v5.00.a, v5.00.b, v6.00.a.
17319
17320 -mxl-soft-mul
17321 Use software multiply emulation (default).
17322
17323 -mxl-soft-div
17324 Use software emulation for divides (default).
17325
17326 -mxl-barrel-shift
17327 Use the hardware barrel shifter.
17328
17329 -mxl-pattern-compare
17330 Use pattern compare instructions.
17331
17332 -msmall-divides
17333 Use table lookup optimization for small signed integer divisions.
17334
17335 -mxl-stack-check
17336 This option is deprecated. Use -fstack-check instead.
17337
17338 -mxl-gp-opt
17339 Use GP-relative ".sdata"/".sbss" sections.
17340
17341 -mxl-multiply-high
17342 Use multiply high instructions for high part of 32x32 multiply.
17343
17344 -mxl-float-convert
17345 Use hardware floating-point conversion instructions.
17346
17347 -mxl-float-sqrt
17348 Use hardware floating-point square root instruction.
17349
17350 -mbig-endian
17351 Generate code for a big-endian target.
17352
17353 -mlittle-endian
17354 Generate code for a little-endian target.
17355
17356 -mxl-reorder
17357 Use reorder instructions (swap and byte reversed load/store).
17358
17359 -mxl-mode-app-model
17360 Select application model app-model. Valid models are
17361
17362 executable
17363 normal executable (default), uses startup code crt0.o.
17364
17365 xmdstub
17366 for use with Xilinx Microprocessor Debugger (XMD) based
17367 software intrusive debug agent called xmdstub. This uses
17368 startup file crt1.o and sets the start address of the program
17369 to 0x800.
17370
17371 bootstrap
17372 for applications that are loaded using a bootloader. This
17373 model uses startup file crt2.o which does not contain a
17374 processor reset vector handler. This is suitable for
17375 transferring control on a processor reset to the bootloader
17376 rather than the application.
17377
17378 novectors
17379 for applications that do not require any of the MicroBlaze
17380 vectors. This option may be useful for applications running
17381 within a monitoring application. This model uses crt3.o as a
17382 startup file.
17383
17384 Option -xl-mode-app-model is a deprecated alias for -mxl-mode-app-
17385 model.
17386
17387 MIPS Options
17388 -EB Generate big-endian code.
17389
17390 -EL Generate little-endian code. This is the default for mips*el-*-*
17391 configurations.
17392
17393 -march=arch
17394 Generate code that runs on arch, which can be the name of a generic
17395 MIPS ISA, or the name of a particular processor. The ISA names
17396 are: mips1, mips2, mips3, mips4, mips32, mips32r2, mips32r3,
17397 mips32r5, mips32r6, mips64, mips64r2, mips64r3, mips64r5 and
17398 mips64r6. The processor names are: 4kc, 4km, 4kp, 4ksc, 4kec,
17399 4kem, 4kep, 4ksd, 5kc, 5kf, 20kc, 24kc, 24kf2_1, 24kf1_1, 24kec,
17400 24kef2_1, 24kef1_1, 34kc, 34kf2_1, 34kf1_1, 34kn, 74kc, 74kf2_1,
17401 74kf1_1, 74kf3_2, 1004kc, 1004kf2_1, 1004kf1_1, i6400, interaptiv,
17402 loongson2e, loongson2f, loongson3a, m4k, m14k, m14kc, m14ke,
17403 m14kec, m5100, m5101, octeon, octeon+, octeon2, octeon3, orion,
17404 p5600, r2000, r3000, r3900, r4000, r4400, r4600, r4650, r4700,
17405 r6000, r8000, rm7000, rm9000, r10000, r12000, r14000, r16000, sb1,
17406 sr71000, vr4100, vr4111, vr4120, vr4130, vr4300, vr5000, vr5400,
17407 vr5500, xlr and xlp. The special value from-abi selects the most
17408 compatible architecture for the selected ABI (that is, mips1 for
17409 32-bit ABIs and mips3 for 64-bit ABIs).
17410
17411 The native Linux/GNU toolchain also supports the value native,
17412 which selects the best architecture option for the host processor.
17413 -march=native has no effect if GCC does not recognize the
17414 processor.
17415
17416 In processor names, a final 000 can be abbreviated as k (for
17417 example, -march=r2k). Prefixes are optional, and vr may be written
17418 r.
17419
17420 Names of the form nf2_1 refer to processors with FPUs clocked at
17421 half the rate of the core, names of the form nf1_1 refer to
17422 processors with FPUs clocked at the same rate as the core, and
17423 names of the form nf3_2 refer to processors with FPUs clocked a
17424 ratio of 3:2 with respect to the core. For compatibility reasons,
17425 nf is accepted as a synonym for nf2_1 while nx and bfx are accepted
17426 as synonyms for nf1_1.
17427
17428 GCC defines two macros based on the value of this option. The
17429 first is "_MIPS_ARCH", which gives the name of target architecture,
17430 as a string. The second has the form "_MIPS_ARCH_foo", where foo
17431 is the capitalized value of "_MIPS_ARCH". For example,
17432 -march=r2000 sets "_MIPS_ARCH" to "r2000" and defines the macro
17433 "_MIPS_ARCH_R2000".
17434
17435 Note that the "_MIPS_ARCH" macro uses the processor names given
17436 above. In other words, it has the full prefix and does not
17437 abbreviate 000 as k. In the case of from-abi, the macro names the
17438 resolved architecture (either "mips1" or "mips3"). It names the
17439 default architecture when no -march option is given.
17440
17441 -mtune=arch
17442 Optimize for arch. Among other things, this option controls the
17443 way instructions are scheduled, and the perceived cost of
17444 arithmetic operations. The list of arch values is the same as for
17445 -march.
17446
17447 When this option is not used, GCC optimizes for the processor
17448 specified by -march. By using -march and -mtune together, it is
17449 possible to generate code that runs on a family of processors, but
17450 optimize the code for one particular member of that family.
17451
17452 -mtune defines the macros "_MIPS_TUNE" and "_MIPS_TUNE_foo", which
17453 work in the same way as the -march ones described above.
17454
17455 -mips1
17456 Equivalent to -march=mips1.
17457
17458 -mips2
17459 Equivalent to -march=mips2.
17460
17461 -mips3
17462 Equivalent to -march=mips3.
17463
17464 -mips4
17465 Equivalent to -march=mips4.
17466
17467 -mips32
17468 Equivalent to -march=mips32.
17469
17470 -mips32r3
17471 Equivalent to -march=mips32r3.
17472
17473 -mips32r5
17474 Equivalent to -march=mips32r5.
17475
17476 -mips32r6
17477 Equivalent to -march=mips32r6.
17478
17479 -mips64
17480 Equivalent to -march=mips64.
17481
17482 -mips64r2
17483 Equivalent to -march=mips64r2.
17484
17485 -mips64r3
17486 Equivalent to -march=mips64r3.
17487
17488 -mips64r5
17489 Equivalent to -march=mips64r5.
17490
17491 -mips64r6
17492 Equivalent to -march=mips64r6.
17493
17494 -mips16
17495 -mno-mips16
17496 Generate (do not generate) MIPS16 code. If GCC is targeting a
17497 MIPS32 or MIPS64 architecture, it makes use of the MIPS16e ASE.
17498
17499 MIPS16 code generation can also be controlled on a per-function
17500 basis by means of "mips16" and "nomips16" attributes.
17501
17502 -mflip-mips16
17503 Generate MIPS16 code on alternating functions. This option is
17504 provided for regression testing of mixed MIPS16/non-MIPS16 code
17505 generation, and is not intended for ordinary use in compiling user
17506 code.
17507
17508 -minterlink-compressed
17509 -mno-interlink-compressed
17510 Require (do not require) that code using the standard
17511 (uncompressed) MIPS ISA be link-compatible with MIPS16 and
17512 microMIPS code, and vice versa.
17513
17514 For example, code using the standard ISA encoding cannot jump
17515 directly to MIPS16 or microMIPS code; it must either use a call or
17516 an indirect jump. -minterlink-compressed therefore disables direct
17517 jumps unless GCC knows that the target of the jump is not
17518 compressed.
17519
17520 -minterlink-mips16
17521 -mno-interlink-mips16
17522 Aliases of -minterlink-compressed and -mno-interlink-compressed.
17523 These options predate the microMIPS ASE and are retained for
17524 backwards compatibility.
17525
17526 -mabi=32
17527 -mabi=o64
17528 -mabi=n32
17529 -mabi=64
17530 -mabi=eabi
17531 Generate code for the given ABI.
17532
17533 Note that the EABI has a 32-bit and a 64-bit variant. GCC normally
17534 generates 64-bit code when you select a 64-bit architecture, but
17535 you can use -mgp32 to get 32-bit code instead.
17536
17537 For information about the O64 ABI, see
17538 <http://gcc.gnu.org/projects/mipso64-abi.html>.
17539
17540 GCC supports a variant of the o32 ABI in which floating-point
17541 registers are 64 rather than 32 bits wide. You can select this
17542 combination with -mabi=32 -mfp64. This ABI relies on the "mthc1"
17543 and "mfhc1" instructions and is therefore only supported for
17544 MIPS32R2, MIPS32R3 and MIPS32R5 processors.
17545
17546 The register assignments for arguments and return values remain the
17547 same, but each scalar value is passed in a single 64-bit register
17548 rather than a pair of 32-bit registers. For example, scalar
17549 floating-point values are returned in $f0 only, not a $f0/$f1 pair.
17550 The set of call-saved registers also remains the same in that the
17551 even-numbered double-precision registers are saved.
17552
17553 Two additional variants of the o32 ABI are supported to enable a
17554 transition from 32-bit to 64-bit registers. These are FPXX
17555 (-mfpxx) and FP64A (-mfp64 -mno-odd-spreg). The FPXX extension
17556 mandates that all code must execute correctly when run using 32-bit
17557 or 64-bit registers. The code can be interlinked with either FP32
17558 or FP64, but not both. The FP64A extension is similar to the FP64
17559 extension but forbids the use of odd-numbered single-precision
17560 registers. This can be used in conjunction with the "FRE" mode of
17561 FPUs in MIPS32R5 processors and allows both FP32 and FP64A code to
17562 interlink and run in the same process without changing FPU modes.
17563
17564 -mabicalls
17565 -mno-abicalls
17566 Generate (do not generate) code that is suitable for SVR4-style
17567 dynamic objects. -mabicalls is the default for SVR4-based systems.
17568
17569 -mshared
17570 -mno-shared
17571 Generate (do not generate) code that is fully position-independent,
17572 and that can therefore be linked into shared libraries. This
17573 option only affects -mabicalls.
17574
17575 All -mabicalls code has traditionally been position-independent,
17576 regardless of options like -fPIC and -fpic. However, as an
17577 extension, the GNU toolchain allows executables to use absolute
17578 accesses for locally-binding symbols. It can also use shorter GP
17579 initialization sequences and generate direct calls to locally-
17580 defined functions. This mode is selected by -mno-shared.
17581
17582 -mno-shared depends on binutils 2.16 or higher and generates
17583 objects that can only be linked by the GNU linker. However, the
17584 option does not affect the ABI of the final executable; it only
17585 affects the ABI of relocatable objects. Using -mno-shared
17586 generally makes executables both smaller and quicker.
17587
17588 -mshared is the default.
17589
17590 -mplt
17591 -mno-plt
17592 Assume (do not assume) that the static and dynamic linkers support
17593 PLTs and copy relocations. This option only affects -mno-shared
17594 -mabicalls. For the n64 ABI, this option has no effect without
17595 -msym32.
17596
17597 You can make -mplt the default by configuring GCC with
17598 --with-mips-plt. The default is -mno-plt otherwise.
17599
17600 -mxgot
17601 -mno-xgot
17602 Lift (do not lift) the usual restrictions on the size of the global
17603 offset table.
17604
17605 GCC normally uses a single instruction to load values from the GOT.
17606 While this is relatively efficient, it only works if the GOT is
17607 smaller than about 64k. Anything larger causes the linker to
17608 report an error such as:
17609
17610 relocation truncated to fit: R_MIPS_GOT16 foobar
17611
17612 If this happens, you should recompile your code with -mxgot. This
17613 works with very large GOTs, although the code is also less
17614 efficient, since it takes three instructions to fetch the value of
17615 a global symbol.
17616
17617 Note that some linkers can create multiple GOTs. If you have such
17618 a linker, you should only need to use -mxgot when a single object
17619 file accesses more than 64k's worth of GOT entries. Very few do.
17620
17621 These options have no effect unless GCC is generating position
17622 independent code.
17623
17624 -mgp32
17625 Assume that general-purpose registers are 32 bits wide.
17626
17627 -mgp64
17628 Assume that general-purpose registers are 64 bits wide.
17629
17630 -mfp32
17631 Assume that floating-point registers are 32 bits wide.
17632
17633 -mfp64
17634 Assume that floating-point registers are 64 bits wide.
17635
17636 -mfpxx
17637 Do not assume the width of floating-point registers.
17638
17639 -mhard-float
17640 Use floating-point coprocessor instructions.
17641
17642 -msoft-float
17643 Do not use floating-point coprocessor instructions. Implement
17644 floating-point calculations using library calls instead.
17645
17646 -mno-float
17647 Equivalent to -msoft-float, but additionally asserts that the
17648 program being compiled does not perform any floating-point
17649 operations. This option is presently supported only by some bare-
17650 metal MIPS configurations, where it may select a special set of
17651 libraries that lack all floating-point support (including, for
17652 example, the floating-point "printf" formats). If code compiled
17653 with -mno-float accidentally contains floating-point operations, it
17654 is likely to suffer a link-time or run-time failure.
17655
17656 -msingle-float
17657 Assume that the floating-point coprocessor only supports single-
17658 precision operations.
17659
17660 -mdouble-float
17661 Assume that the floating-point coprocessor supports double-
17662 precision operations. This is the default.
17663
17664 -modd-spreg
17665 -mno-odd-spreg
17666 Enable the use of odd-numbered single-precision floating-point
17667 registers for the o32 ABI. This is the default for processors that
17668 are known to support these registers. When using the o32 FPXX ABI,
17669 -mno-odd-spreg is set by default.
17670
17671 -mabs=2008
17672 -mabs=legacy
17673 These options control the treatment of the special not-a-number
17674 (NaN) IEEE 754 floating-point data with the "abs.fmt" and "neg.fmt"
17675 machine instructions.
17676
17677 By default or when -mabs=legacy is used the legacy treatment is
17678 selected. In this case these instructions are considered
17679 arithmetic and avoided where correct operation is required and the
17680 input operand might be a NaN. A longer sequence of instructions
17681 that manipulate the sign bit of floating-point datum manually is
17682 used instead unless the -ffinite-math-only option has also been
17683 specified.
17684
17685 The -mabs=2008 option selects the IEEE 754-2008 treatment. In this
17686 case these instructions are considered non-arithmetic and therefore
17687 operating correctly in all cases, including in particular where the
17688 input operand is a NaN. These instructions are therefore always
17689 used for the respective operations.
17690
17691 -mnan=2008
17692 -mnan=legacy
17693 These options control the encoding of the special not-a-number
17694 (NaN) IEEE 754 floating-point data.
17695
17696 The -mnan=legacy option selects the legacy encoding. In this case
17697 quiet NaNs (qNaNs) are denoted by the first bit of their trailing
17698 significand field being 0, whereas signaling NaNs (sNaNs) are
17699 denoted by the first bit of their trailing significand field being
17700 1.
17701
17702 The -mnan=2008 option selects the IEEE 754-2008 encoding. In this
17703 case qNaNs are denoted by the first bit of their trailing
17704 significand field being 1, whereas sNaNs are denoted by the first
17705 bit of their trailing significand field being 0.
17706
17707 The default is -mnan=legacy unless GCC has been configured with
17708 --with-nan=2008.
17709
17710 -mllsc
17711 -mno-llsc
17712 Use (do not use) ll, sc, and sync instructions to implement atomic
17713 memory built-in functions. When neither option is specified, GCC
17714 uses the instructions if the target architecture supports them.
17715
17716 -mllsc is useful if the runtime environment can emulate the
17717 instructions and -mno-llsc can be useful when compiling for
17718 nonstandard ISAs. You can make either option the default by
17719 configuring GCC with --with-llsc and --without-llsc respectively.
17720 --with-llsc is the default for some configurations; see the
17721 installation documentation for details.
17722
17723 -mdsp
17724 -mno-dsp
17725 Use (do not use) revision 1 of the MIPS DSP ASE.
17726 This option defines the preprocessor macro "__mips_dsp". It also
17727 defines "__mips_dsp_rev" to 1.
17728
17729 -mdspr2
17730 -mno-dspr2
17731 Use (do not use) revision 2 of the MIPS DSP ASE.
17732 This option defines the preprocessor macros "__mips_dsp" and
17733 "__mips_dspr2". It also defines "__mips_dsp_rev" to 2.
17734
17735 -msmartmips
17736 -mno-smartmips
17737 Use (do not use) the MIPS SmartMIPS ASE.
17738
17739 -mpaired-single
17740 -mno-paired-single
17741 Use (do not use) paired-single floating-point instructions.
17742 This option requires hardware floating-point support to be
17743 enabled.
17744
17745 -mdmx
17746 -mno-mdmx
17747 Use (do not use) MIPS Digital Media Extension instructions. This
17748 option can only be used when generating 64-bit code and requires
17749 hardware floating-point support to be enabled.
17750
17751 -mips3d
17752 -mno-mips3d
17753 Use (do not use) the MIPS-3D ASE. The option -mips3d implies
17754 -mpaired-single.
17755
17756 -mmicromips
17757 -mno-micromips
17758 Generate (do not generate) microMIPS code.
17759
17760 MicroMIPS code generation can also be controlled on a per-function
17761 basis by means of "micromips" and "nomicromips" attributes.
17762
17763 -mmt
17764 -mno-mt
17765 Use (do not use) MT Multithreading instructions.
17766
17767 -mmcu
17768 -mno-mcu
17769 Use (do not use) the MIPS MCU ASE instructions.
17770
17771 -meva
17772 -mno-eva
17773 Use (do not use) the MIPS Enhanced Virtual Addressing instructions.
17774
17775 -mvirt
17776 -mno-virt
17777 Use (do not use) the MIPS Virtualization (VZ) instructions.
17778
17779 -mxpa
17780 -mno-xpa
17781 Use (do not use) the MIPS eXtended Physical Address (XPA)
17782 instructions.
17783
17784 -mlong64
17785 Force "long" types to be 64 bits wide. See -mlong32 for an
17786 explanation of the default and the way that the pointer size is
17787 determined.
17788
17789 -mlong32
17790 Force "long", "int", and pointer types to be 32 bits wide.
17791
17792 The default size of "int"s, "long"s and pointers depends on the
17793 ABI. All the supported ABIs use 32-bit "int"s. The n64 ABI uses
17794 64-bit "long"s, as does the 64-bit EABI; the others use 32-bit
17795 "long"s. Pointers are the same size as "long"s, or the same size
17796 as integer registers, whichever is smaller.
17797
17798 -msym32
17799 -mno-sym32
17800 Assume (do not assume) that all symbols have 32-bit values,
17801 regardless of the selected ABI. This option is useful in
17802 combination with -mabi=64 and -mno-abicalls because it allows GCC
17803 to generate shorter and faster references to symbolic addresses.
17804
17805 -G num
17806 Put definitions of externally-visible data in a small data section
17807 if that data is no bigger than num bytes. GCC can then generate
17808 more efficient accesses to the data; see -mgpopt for details.
17809
17810 The default -G option depends on the configuration.
17811
17812 -mlocal-sdata
17813 -mno-local-sdata
17814 Extend (do not extend) the -G behavior to local data too, such as
17815 to static variables in C. -mlocal-sdata is the default for all
17816 configurations.
17817
17818 If the linker complains that an application is using too much small
17819 data, you might want to try rebuilding the less performance-
17820 critical parts with -mno-local-sdata. You might also want to build
17821 large libraries with -mno-local-sdata, so that the libraries leave
17822 more room for the main program.
17823
17824 -mextern-sdata
17825 -mno-extern-sdata
17826 Assume (do not assume) that externally-defined data is in a small
17827 data section if the size of that data is within the -G limit.
17828 -mextern-sdata is the default for all configurations.
17829
17830 If you compile a module Mod with -mextern-sdata -G num -mgpopt, and
17831 Mod references a variable Var that is no bigger than num bytes, you
17832 must make sure that Var is placed in a small data section. If Var
17833 is defined by another module, you must either compile that module
17834 with a high-enough -G setting or attach a "section" attribute to
17835 Var's definition. If Var is common, you must link the application
17836 with a high-enough -G setting.
17837
17838 The easiest way of satisfying these restrictions is to compile and
17839 link every module with the same -G option. However, you may wish
17840 to build a library that supports several different small data
17841 limits. You can do this by compiling the library with the highest
17842 supported -G setting and additionally using -mno-extern-sdata to
17843 stop the library from making assumptions about externally-defined
17844 data.
17845
17846 -mgpopt
17847 -mno-gpopt
17848 Use (do not use) GP-relative accesses for symbols that are known to
17849 be in a small data section; see -G, -mlocal-sdata and
17850 -mextern-sdata. -mgpopt is the default for all configurations.
17851
17852 -mno-gpopt is useful for cases where the $gp register might not
17853 hold the value of "_gp". For example, if the code is part of a
17854 library that might be used in a boot monitor, programs that call
17855 boot monitor routines pass an unknown value in $gp. (In such
17856 situations, the boot monitor itself is usually compiled with -G0.)
17857
17858 -mno-gpopt implies -mno-local-sdata and -mno-extern-sdata.
17859
17860 -membedded-data
17861 -mno-embedded-data
17862 Allocate variables to the read-only data section first if possible,
17863 then next in the small data section if possible, otherwise in data.
17864 This gives slightly slower code than the default, but reduces the
17865 amount of RAM required when executing, and thus may be preferred
17866 for some embedded systems.
17867
17868 -muninit-const-in-rodata
17869 -mno-uninit-const-in-rodata
17870 Put uninitialized "const" variables in the read-only data section.
17871 This option is only meaningful in conjunction with -membedded-data.
17872
17873 -mcode-readable=setting
17874 Specify whether GCC may generate code that reads from executable
17875 sections. There are three possible settings:
17876
17877 -mcode-readable=yes
17878 Instructions may freely access executable sections. This is
17879 the default setting.
17880
17881 -mcode-readable=pcrel
17882 MIPS16 PC-relative load instructions can access executable
17883 sections, but other instructions must not do so. This option
17884 is useful on 4KSc and 4KSd processors when the code TLBs have
17885 the Read Inhibit bit set. It is also useful on processors that
17886 can be configured to have a dual instruction/data SRAM
17887 interface and that, like the M4K, automatically redirect PC-
17888 relative loads to the instruction RAM.
17889
17890 -mcode-readable=no
17891 Instructions must not access executable sections. This option
17892 can be useful on targets that are configured to have a dual
17893 instruction/data SRAM interface but that (unlike the M4K) do
17894 not automatically redirect PC-relative loads to the instruction
17895 RAM.
17896
17897 -msplit-addresses
17898 -mno-split-addresses
17899 Enable (disable) use of the "%hi()" and "%lo()" assembler
17900 relocation operators. This option has been superseded by
17901 -mexplicit-relocs but is retained for backwards compatibility.
17902
17903 -mexplicit-relocs
17904 -mno-explicit-relocs
17905 Use (do not use) assembler relocation operators when dealing with
17906 symbolic addresses. The alternative, selected by
17907 -mno-explicit-relocs, is to use assembler macros instead.
17908
17909 -mexplicit-relocs is the default if GCC was configured to use an
17910 assembler that supports relocation operators.
17911
17912 -mcheck-zero-division
17913 -mno-check-zero-division
17914 Trap (do not trap) on integer division by zero.
17915
17916 The default is -mcheck-zero-division.
17917
17918 -mdivide-traps
17919 -mdivide-breaks
17920 MIPS systems check for division by zero by generating either a
17921 conditional trap or a break instruction. Using traps results in
17922 smaller code, but is only supported on MIPS II and later. Also,
17923 some versions of the Linux kernel have a bug that prevents trap
17924 from generating the proper signal ("SIGFPE"). Use -mdivide-traps
17925 to allow conditional traps on architectures that support them and
17926 -mdivide-breaks to force the use of breaks.
17927
17928 The default is usually -mdivide-traps, but this can be overridden
17929 at configure time using --with-divide=breaks. Divide-by-zero
17930 checks can be completely disabled using -mno-check-zero-division.
17931
17932 -mload-store-pairs
17933 -mno-load-store-pairs
17934 Enable (disable) an optimization that pairs consecutive load or
17935 store instructions to enable load/store bonding. This option is
17936 enabled by default but only takes effect when the selected
17937 architecture is known to support bonding.
17938
17939 -mmemcpy
17940 -mno-memcpy
17941 Force (do not force) the use of "memcpy" for non-trivial block
17942 moves. The default is -mno-memcpy, which allows GCC to inline most
17943 constant-sized copies.
17944
17945 -mlong-calls
17946 -mno-long-calls
17947 Disable (do not disable) use of the "jal" instruction. Calling
17948 functions using "jal" is more efficient but requires the caller and
17949 callee to be in the same 256 megabyte segment.
17950
17951 This option has no effect on abicalls code. The default is
17952 -mno-long-calls.
17953
17954 -mmad
17955 -mno-mad
17956 Enable (disable) use of the "mad", "madu" and "mul" instructions,
17957 as provided by the R4650 ISA.
17958
17959 -mimadd
17960 -mno-imadd
17961 Enable (disable) use of the "madd" and "msub" integer instructions.
17962 The default is -mimadd on architectures that support "madd" and
17963 "msub" except for the 74k architecture where it was found to
17964 generate slower code.
17965
17966 -mfused-madd
17967 -mno-fused-madd
17968 Enable (disable) use of the floating-point multiply-accumulate
17969 instructions, when they are available. The default is
17970 -mfused-madd.
17971
17972 On the R8000 CPU when multiply-accumulate instructions are used,
17973 the intermediate product is calculated to infinite precision and is
17974 not subject to the FCSR Flush to Zero bit. This may be undesirable
17975 in some circumstances. On other processors the result is
17976 numerically identical to the equivalent computation using separate
17977 multiply, add, subtract and negate instructions.
17978
17979 -nocpp
17980 Tell the MIPS assembler to not run its preprocessor over user
17981 assembler files (with a .s suffix) when assembling them.
17982
17983 -mfix-24k
17984 -mno-fix-24k
17985 Work around the 24K E48 (lost data on stores during refill) errata.
17986 The workarounds are implemented by the assembler rather than by
17987 GCC.
17988
17989 -mfix-r4000
17990 -mno-fix-r4000
17991 Work around certain R4000 CPU errata:
17992
17993 - A double-word or a variable shift may give an incorrect result
17994 if executed immediately after starting an integer division.
17995
17996 - A double-word or a variable shift may give an incorrect result
17997 if executed while an integer multiplication is in progress.
17998
17999 - An integer division may give an incorrect result if started in
18000 a delay slot of a taken branch or a jump.
18001
18002 -mfix-r4400
18003 -mno-fix-r4400
18004 Work around certain R4400 CPU errata:
18005
18006 - A double-word or a variable shift may give an incorrect result
18007 if executed immediately after starting an integer division.
18008
18009 -mfix-r10000
18010 -mno-fix-r10000
18011 Work around certain R10000 errata:
18012
18013 - "ll"/"sc" sequences may not behave atomically on revisions
18014 prior to 3.0. They may deadlock on revisions 2.6 and earlier.
18015
18016 This option can only be used if the target architecture supports
18017 branch-likely instructions. -mfix-r10000 is the default when
18018 -march=r10000 is used; -mno-fix-r10000 is the default otherwise.
18019
18020 -mfix-rm7000
18021 -mno-fix-rm7000
18022 Work around the RM7000 "dmult"/"dmultu" errata. The workarounds
18023 are implemented by the assembler rather than by GCC.
18024
18025 -mfix-vr4120
18026 -mno-fix-vr4120
18027 Work around certain VR4120 errata:
18028
18029 - "dmultu" does not always produce the correct result.
18030
18031 - "div" and "ddiv" do not always produce the correct result if
18032 one of the operands is negative.
18033
18034 The workarounds for the division errata rely on special functions
18035 in libgcc.a. At present, these functions are only provided by the
18036 "mips64vr*-elf" configurations.
18037
18038 Other VR4120 errata require a NOP to be inserted between certain
18039 pairs of instructions. These errata are handled by the assembler,
18040 not by GCC itself.
18041
18042 -mfix-vr4130
18043 Work around the VR4130 "mflo"/"mfhi" errata. The workarounds are
18044 implemented by the assembler rather than by GCC, although GCC
18045 avoids using "mflo" and "mfhi" if the VR4130 "macc", "macchi",
18046 "dmacc" and "dmacchi" instructions are available instead.
18047
18048 -mfix-sb1
18049 -mno-fix-sb1
18050 Work around certain SB-1 CPU core errata. (This flag currently
18051 works around the SB-1 revision 2 "F1" and "F2" floating-point
18052 errata.)
18053
18054 -mr10k-cache-barrier=setting
18055 Specify whether GCC should insert cache barriers to avoid the side
18056 effects of speculation on R10K processors.
18057
18058 In common with many processors, the R10K tries to predict the
18059 outcome of a conditional branch and speculatively executes
18060 instructions from the "taken" branch. It later aborts these
18061 instructions if the predicted outcome is wrong. However, on the
18062 R10K, even aborted instructions can have side effects.
18063
18064 This problem only affects kernel stores and, depending on the
18065 system, kernel loads. As an example, a speculatively-executed
18066 store may load the target memory into cache and mark the cache line
18067 as dirty, even if the store itself is later aborted. If a DMA
18068 operation writes to the same area of memory before the "dirty" line
18069 is flushed, the cached data overwrites the DMA-ed data. See the
18070 R10K processor manual for a full description, including other
18071 potential problems.
18072
18073 One workaround is to insert cache barrier instructions before every
18074 memory access that might be speculatively executed and that might
18075 have side effects even if aborted. -mr10k-cache-barrier=setting
18076 controls GCC's implementation of this workaround. It assumes that
18077 aborted accesses to any byte in the following regions does not have
18078 side effects:
18079
18080 1. the memory occupied by the current function's stack frame;
18081
18082 2. the memory occupied by an incoming stack argument;
18083
18084 3. the memory occupied by an object with a link-time-constant
18085 address.
18086
18087 It is the kernel's responsibility to ensure that speculative
18088 accesses to these regions are indeed safe.
18089
18090 If the input program contains a function declaration such as:
18091
18092 void foo (void);
18093
18094 then the implementation of "foo" must allow "j foo" and "jal foo"
18095 to be executed speculatively. GCC honors this restriction for
18096 functions it compiles itself. It expects non-GCC functions (such
18097 as hand-written assembly code) to do the same.
18098
18099 The option has three forms:
18100
18101 -mr10k-cache-barrier=load-store
18102 Insert a cache barrier before a load or store that might be
18103 speculatively executed and that might have side effects even if
18104 aborted.
18105
18106 -mr10k-cache-barrier=store
18107 Insert a cache barrier before a store that might be
18108 speculatively executed and that might have side effects even if
18109 aborted.
18110
18111 -mr10k-cache-barrier=none
18112 Disable the insertion of cache barriers. This is the default
18113 setting.
18114
18115 -mflush-func=func
18116 -mno-flush-func
18117 Specifies the function to call to flush the I and D caches, or to
18118 not call any such function. If called, the function must take the
18119 same arguments as the common "_flush_func", that is, the address of
18120 the memory range for which the cache is being flushed, the size of
18121 the memory range, and the number 3 (to flush both caches). The
18122 default depends on the target GCC was configured for, but commonly
18123 is either "_flush_func" or "__cpu_flush".
18124
18125 mbranch-cost=num
18126 Set the cost of branches to roughly num "simple" instructions.
18127 This cost is only a heuristic and is not guaranteed to produce
18128 consistent results across releases. A zero cost redundantly
18129 selects the default, which is based on the -mtune setting.
18130
18131 -mbranch-likely
18132 -mno-branch-likely
18133 Enable or disable use of Branch Likely instructions, regardless of
18134 the default for the selected architecture. By default, Branch
18135 Likely instructions may be generated if they are supported by the
18136 selected architecture. An exception is for the MIPS32 and MIPS64
18137 architectures and processors that implement those architectures;
18138 for those, Branch Likely instructions are not be generated by
18139 default because the MIPS32 and MIPS64 architectures specifically
18140 deprecate their use.
18141
18142 -mcompact-branches=never
18143 -mcompact-branches=optimal
18144 -mcompact-branches=always
18145 These options control which form of branches will be generated.
18146 The default is -mcompact-branches=optimal.
18147
18148 The -mcompact-branches=never option ensures that compact branch
18149 instructions will never be generated.
18150
18151 The -mcompact-branches=always option ensures that a compact branch
18152 instruction will be generated if available. If a compact branch
18153 instruction is not available, a delay slot form of the branch will
18154 be used instead.
18155
18156 This option is supported from MIPS Release 6 onwards.
18157
18158 The -mcompact-branches=optimal option will cause a delay slot
18159 branch to be used if one is available in the current ISA and the
18160 delay slot is successfully filled. If the delay slot is not
18161 filled, a compact branch will be chosen if one is available.
18162
18163 -mfp-exceptions
18164 -mno-fp-exceptions
18165 Specifies whether FP exceptions are enabled. This affects how FP
18166 instructions are scheduled for some processors. The default is
18167 that FP exceptions are enabled.
18168
18169 For instance, on the SB-1, if FP exceptions are disabled, and we
18170 are emitting 64-bit code, then we can use both FP pipes.
18171 Otherwise, we can only use one FP pipe.
18172
18173 -mvr4130-align
18174 -mno-vr4130-align
18175 The VR4130 pipeline is two-way superscalar, but can only issue two
18176 instructions together if the first one is 8-byte aligned. When
18177 this option is enabled, GCC aligns pairs of instructions that it
18178 thinks should execute in parallel.
18179
18180 This option only has an effect when optimizing for the VR4130. It
18181 normally makes code faster, but at the expense of making it bigger.
18182 It is enabled by default at optimization level -O3.
18183
18184 -msynci
18185 -mno-synci
18186 Enable (disable) generation of "synci" instructions on
18187 architectures that support it. The "synci" instructions (if
18188 enabled) are generated when "__builtin___clear_cache" is compiled.
18189
18190 This option defaults to -mno-synci, but the default can be
18191 overridden by configuring GCC with --with-synci.
18192
18193 When compiling code for single processor systems, it is generally
18194 safe to use "synci". However, on many multi-core (SMP) systems, it
18195 does not invalidate the instruction caches on all cores and may
18196 lead to undefined behavior.
18197
18198 -mrelax-pic-calls
18199 -mno-relax-pic-calls
18200 Try to turn PIC calls that are normally dispatched via register $25
18201 into direct calls. This is only possible if the linker can resolve
18202 the destination at link time and if the destination is within range
18203 for a direct call.
18204
18205 -mrelax-pic-calls is the default if GCC was configured to use an
18206 assembler and a linker that support the ".reloc" assembly directive
18207 and -mexplicit-relocs is in effect. With -mno-explicit-relocs,
18208 this optimization can be performed by the assembler and the linker
18209 alone without help from the compiler.
18210
18211 -mmcount-ra-address
18212 -mno-mcount-ra-address
18213 Emit (do not emit) code that allows "_mcount" to modify the calling
18214 function's return address. When enabled, this option extends the
18215 usual "_mcount" interface with a new ra-address parameter, which
18216 has type "intptr_t *" and is passed in register $12. "_mcount" can
18217 then modify the return address by doing both of the following:
18218
18219 * Returning the new address in register $31.
18220
18221 * Storing the new address in "*ra-address", if ra-address is
18222 nonnull.
18223
18224 The default is -mno-mcount-ra-address.
18225
18226 -mframe-header-opt
18227 -mno-frame-header-opt
18228 Enable (disable) frame header optimization in the o32 ABI. When
18229 using the o32 ABI, calling functions will allocate 16 bytes on the
18230 stack for the called function to write out register arguments.
18231 When enabled, this optimization will suppress the allocation of the
18232 frame header if it can be determined that it is unused.
18233
18234 This optimization is off by default at all optimization levels.
18235
18236 -mlxc1-sxc1
18237 -mno-lxc1-sxc1
18238 When applicable, enable (disable) the generation of "lwxc1",
18239 "swxc1", "ldxc1", "sdxc1" instructions. Enabled by default.
18240
18241 -mmadd4
18242 -mno-madd4
18243 When applicable, enable (disable) the generation of 4-operand
18244 "madd.s", "madd.d" and related instructions. Enabled by default.
18245
18246 MMIX Options
18247 These options are defined for the MMIX:
18248
18249 -mlibfuncs
18250 -mno-libfuncs
18251 Specify that intrinsic library functions are being compiled,
18252 passing all values in registers, no matter the size.
18253
18254 -mepsilon
18255 -mno-epsilon
18256 Generate floating-point comparison instructions that compare with
18257 respect to the "rE" epsilon register.
18258
18259 -mabi=mmixware
18260 -mabi=gnu
18261 Generate code that passes function parameters and return values
18262 that (in the called function) are seen as registers $0 and up, as
18263 opposed to the GNU ABI which uses global registers $231 and up.
18264
18265 -mzero-extend
18266 -mno-zero-extend
18267 When reading data from memory in sizes shorter than 64 bits, use
18268 (do not use) zero-extending load instructions by default, rather
18269 than sign-extending ones.
18270
18271 -mknuthdiv
18272 -mno-knuthdiv
18273 Make the result of a division yielding a remainder have the same
18274 sign as the divisor. With the default, -mno-knuthdiv, the sign of
18275 the remainder follows the sign of the dividend. Both methods are
18276 arithmetically valid, the latter being almost exclusively used.
18277
18278 -mtoplevel-symbols
18279 -mno-toplevel-symbols
18280 Prepend (do not prepend) a : to all global symbols, so the assembly
18281 code can be used with the "PREFIX" assembly directive.
18282
18283 -melf
18284 Generate an executable in the ELF format, rather than the default
18285 mmo format used by the mmix simulator.
18286
18287 -mbranch-predict
18288 -mno-branch-predict
18289 Use (do not use) the probable-branch instructions, when static
18290 branch prediction indicates a probable branch.
18291
18292 -mbase-addresses
18293 -mno-base-addresses
18294 Generate (do not generate) code that uses base addresses. Using a
18295 base address automatically generates a request (handled by the
18296 assembler and the linker) for a constant to be set up in a global
18297 register. The register is used for one or more base address
18298 requests within the range 0 to 255 from the value held in the
18299 register. The generally leads to short and fast code, but the
18300 number of different data items that can be addressed is limited.
18301 This means that a program that uses lots of static data may require
18302 -mno-base-addresses.
18303
18304 -msingle-exit
18305 -mno-single-exit
18306 Force (do not force) generated code to have a single exit point in
18307 each function.
18308
18309 MN10300 Options
18310 These -m options are defined for Matsushita MN10300 architectures:
18311
18312 -mmult-bug
18313 Generate code to avoid bugs in the multiply instructions for the
18314 MN10300 processors. This is the default.
18315
18316 -mno-mult-bug
18317 Do not generate code to avoid bugs in the multiply instructions for
18318 the MN10300 processors.
18319
18320 -mam33
18321 Generate code using features specific to the AM33 processor.
18322
18323 -mno-am33
18324 Do not generate code using features specific to the AM33 processor.
18325 This is the default.
18326
18327 -mam33-2
18328 Generate code using features specific to the AM33/2.0 processor.
18329
18330 -mam34
18331 Generate code using features specific to the AM34 processor.
18332
18333 -mtune=cpu-type
18334 Use the timing characteristics of the indicated CPU type when
18335 scheduling instructions. This does not change the targeted
18336 processor type. The CPU type must be one of mn10300, am33, am33-2
18337 or am34.
18338
18339 -mreturn-pointer-on-d0
18340 When generating a function that returns a pointer, return the
18341 pointer in both "a0" and "d0". Otherwise, the pointer is returned
18342 only in "a0", and attempts to call such functions without a
18343 prototype result in errors. Note that this option is on by
18344 default; use -mno-return-pointer-on-d0 to disable it.
18345
18346 -mno-crt0
18347 Do not link in the C run-time initialization object file.
18348
18349 -mrelax
18350 Indicate to the linker that it should perform a relaxation
18351 optimization pass to shorten branches, calls and absolute memory
18352 addresses. This option only has an effect when used on the command
18353 line for the final link step.
18354
18355 This option makes symbolic debugging impossible.
18356
18357 -mliw
18358 Allow the compiler to generate Long Instruction Word instructions
18359 if the target is the AM33 or later. This is the default. This
18360 option defines the preprocessor macro "__LIW__".
18361
18362 -mnoliw
18363 Do not allow the compiler to generate Long Instruction Word
18364 instructions. This option defines the preprocessor macro
18365 "__NO_LIW__".
18366
18367 -msetlb
18368 Allow the compiler to generate the SETLB and Lcc instructions if
18369 the target is the AM33 or later. This is the default. This option
18370 defines the preprocessor macro "__SETLB__".
18371
18372 -mnosetlb
18373 Do not allow the compiler to generate SETLB or Lcc instructions.
18374 This option defines the preprocessor macro "__NO_SETLB__".
18375
18376 Moxie Options
18377 -meb
18378 Generate big-endian code. This is the default for moxie-*-*
18379 configurations.
18380
18381 -mel
18382 Generate little-endian code.
18383
18384 -mmul.x
18385 Generate mul.x and umul.x instructions. This is the default for
18386 moxiebox-*-* configurations.
18387
18388 -mno-crt0
18389 Do not link in the C run-time initialization object file.
18390
18391 MSP430 Options
18392 These options are defined for the MSP430:
18393
18394 -masm-hex
18395 Force assembly output to always use hex constants. Normally such
18396 constants are signed decimals, but this option is available for
18397 testsuite and/or aesthetic purposes.
18398
18399 -mmcu=
18400 Select the MCU to target. This is used to create a C preprocessor
18401 symbol based upon the MCU name, converted to upper case and pre-
18402 and post-fixed with __. This in turn is used by the msp430.h
18403 header file to select an MCU-specific supplementary header file.
18404
18405 The option also sets the ISA to use. If the MCU name is one that
18406 is known to only support the 430 ISA then that is selected,
18407 otherwise the 430X ISA is selected. A generic MCU name of msp430
18408 can also be used to select the 430 ISA. Similarly the generic
18409 msp430x MCU name selects the 430X ISA.
18410
18411 In addition an MCU-specific linker script is added to the linker
18412 command line. The script's name is the name of the MCU with .ld
18413 appended. Thus specifying -mmcu=xxx on the gcc command line
18414 defines the C preprocessor symbol "__XXX__" and cause the linker to
18415 search for a script called xxx.ld.
18416
18417 This option is also passed on to the assembler.
18418
18419 -mwarn-mcu
18420 -mno-warn-mcu
18421 This option enables or disables warnings about conflicts between
18422 the MCU name specified by the -mmcu option and the ISA set by the
18423 -mcpu option and/or the hardware multiply support set by the
18424 -mhwmult option. It also toggles warnings about unrecognized MCU
18425 names. This option is on by default.
18426
18427 -mcpu=
18428 Specifies the ISA to use. Accepted values are msp430, msp430x and
18429 msp430xv2. This option is deprecated. The -mmcu= option should be
18430 used to select the ISA.
18431
18432 -msim
18433 Link to the simulator runtime libraries and linker script.
18434 Overrides any scripts that would be selected by the -mmcu= option.
18435
18436 -mlarge
18437 Use large-model addressing (20-bit pointers, 32-bit "size_t").
18438
18439 -msmall
18440 Use small-model addressing (16-bit pointers, 16-bit "size_t").
18441
18442 -mrelax
18443 This option is passed to the assembler and linker, and allows the
18444 linker to perform certain optimizations that cannot be done until
18445 the final link.
18446
18447 mhwmult=
18448 Describes the type of hardware multiply supported by the target.
18449 Accepted values are none for no hardware multiply, 16bit for the
18450 original 16-bit-only multiply supported by early MCUs. 32bit for
18451 the 16/32-bit multiply supported by later MCUs and f5series for the
18452 16/32-bit multiply supported by F5-series MCUs. A value of auto
18453 can also be given. This tells GCC to deduce the hardware multiply
18454 support based upon the MCU name provided by the -mmcu option. If
18455 no -mmcu option is specified or if the MCU name is not recognized
18456 then no hardware multiply support is assumed. "auto" is the
18457 default setting.
18458
18459 Hardware multiplies are normally performed by calling a library
18460 routine. This saves space in the generated code. When compiling
18461 at -O3 or higher however the hardware multiplier is invoked inline.
18462 This makes for bigger, but faster code.
18463
18464 The hardware multiply routines disable interrupts whilst running
18465 and restore the previous interrupt state when they finish. This
18466 makes them safe to use inside interrupt handlers as well as in
18467 normal code.
18468
18469 -minrt
18470 Enable the use of a minimum runtime environment - no static
18471 initializers or constructors. This is intended for memory-
18472 constrained devices. The compiler includes special symbols in some
18473 objects that tell the linker and runtime which code fragments are
18474 required.
18475
18476 -mcode-region=
18477 -mdata-region=
18478 These options tell the compiler where to place functions and data
18479 that do not have one of the "lower", "upper", "either" or "section"
18480 attributes. Possible values are "lower", "upper", "either" or
18481 "any". The first three behave like the corresponding attribute.
18482 The fourth possible value - "any" - is the default. It leaves
18483 placement entirely up to the linker script and how it assigns the
18484 standard sections (".text", ".data", etc) to the memory regions.
18485
18486 -msilicon-errata=
18487 This option passes on a request to assembler to enable the fixes
18488 for the named silicon errata.
18489
18490 -msilicon-errata-warn=
18491 This option passes on a request to the assembler to enable warning
18492 messages when a silicon errata might need to be applied.
18493
18494 NDS32 Options
18495 These options are defined for NDS32 implementations:
18496
18497 -mbig-endian
18498 Generate code in big-endian mode.
18499
18500 -mlittle-endian
18501 Generate code in little-endian mode.
18502
18503 -mreduced-regs
18504 Use reduced-set registers for register allocation.
18505
18506 -mfull-regs
18507 Use full-set registers for register allocation.
18508
18509 -mcmov
18510 Generate conditional move instructions.
18511
18512 -mno-cmov
18513 Do not generate conditional move instructions.
18514
18515 -mext-perf
18516 Generate performance extension instructions.
18517
18518 -mno-ext-perf
18519 Do not generate performance extension instructions.
18520
18521 -mext-perf2
18522 Generate performance extension 2 instructions.
18523
18524 -mno-ext-perf2
18525 Do not generate performance extension 2 instructions.
18526
18527 -mext-string
18528 Generate string extension instructions.
18529
18530 -mno-ext-string
18531 Do not generate string extension instructions.
18532
18533 -mv3push
18534 Generate v3 push25/pop25 instructions.
18535
18536 -mno-v3push
18537 Do not generate v3 push25/pop25 instructions.
18538
18539 -m16-bit
18540 Generate 16-bit instructions.
18541
18542 -mno-16-bit
18543 Do not generate 16-bit instructions.
18544
18545 -misr-vector-size=num
18546 Specify the size of each interrupt vector, which must be 4 or 16.
18547
18548 -mcache-block-size=num
18549 Specify the size of each cache block, which must be a power of 2
18550 between 4 and 512.
18551
18552 -march=arch
18553 Specify the name of the target architecture.
18554
18555 -mcmodel=code-model
18556 Set the code model to one of
18557
18558 small
18559 All the data and read-only data segments must be within 512KB
18560 addressing space. The text segment must be within 16MB
18561 addressing space.
18562
18563 medium
18564 The data segment must be within 512KB while the read-only data
18565 segment can be within 4GB addressing space. The text segment
18566 should be still within 16MB addressing space.
18567
18568 large
18569 All the text and data segments can be within 4GB addressing
18570 space.
18571
18572 -mctor-dtor
18573 Enable constructor/destructor feature.
18574
18575 -mrelax
18576 Guide linker to relax instructions.
18577
18578 Nios II Options
18579 These are the options defined for the Altera Nios II processor.
18580
18581 -G num
18582 Put global and static objects less than or equal to num bytes into
18583 the small data or BSS sections instead of the normal data or BSS
18584 sections. The default value of num is 8.
18585
18586 -mgpopt=option
18587 -mgpopt
18588 -mno-gpopt
18589 Generate (do not generate) GP-relative accesses. The following
18590 option names are recognized:
18591
18592 none
18593 Do not generate GP-relative accesses.
18594
18595 local
18596 Generate GP-relative accesses for small data objects that are
18597 not external, weak, or uninitialized common symbols. Also use
18598 GP-relative addressing for objects that have been explicitly
18599 placed in a small data section via a "section" attribute.
18600
18601 global
18602 As for local, but also generate GP-relative accesses for small
18603 data objects that are external, weak, or common. If you use
18604 this option, you must ensure that all parts of your program
18605 (including libraries) are compiled with the same -G setting.
18606
18607 data
18608 Generate GP-relative accesses for all data objects in the
18609 program. If you use this option, the entire data and BSS
18610 segments of your program must fit in 64K of memory and you must
18611 use an appropriate linker script to allocate them within the
18612 addressable range of the global pointer.
18613
18614 all Generate GP-relative addresses for function pointers as well as
18615 data pointers. If you use this option, the entire text, data,
18616 and BSS segments of your program must fit in 64K of memory and
18617 you must use an appropriate linker script to allocate them
18618 within the addressable range of the global pointer.
18619
18620 -mgpopt is equivalent to -mgpopt=local, and -mno-gpopt is
18621 equivalent to -mgpopt=none.
18622
18623 The default is -mgpopt except when -fpic or -fPIC is specified to
18624 generate position-independent code. Note that the Nios II ABI does
18625 not permit GP-relative accesses from shared libraries.
18626
18627 You may need to specify -mno-gpopt explicitly when building
18628 programs that include large amounts of small data, including large
18629 GOT data sections. In this case, the 16-bit offset for GP-relative
18630 addressing may not be large enough to allow access to the entire
18631 small data section.
18632
18633 -mgprel-sec=regexp
18634 This option specifies additional section names that can be accessed
18635 via GP-relative addressing. It is most useful in conjunction with
18636 "section" attributes on variable declarations and a custom linker
18637 script. The regexp is a POSIX Extended Regular Expression.
18638
18639 This option does not affect the behavior of the -G option, and the
18640 specified sections are in addition to the standard ".sdata" and
18641 ".sbss" small-data sections that are recognized by -mgpopt.
18642
18643 -mr0rel-sec=regexp
18644 This option specifies names of sections that can be accessed via a
18645 16-bit offset from "r0"; that is, in the low 32K or high 32K of the
18646 32-bit address space. It is most useful in conjunction with
18647 "section" attributes on variable declarations and a custom linker
18648 script. The regexp is a POSIX Extended Regular Expression.
18649
18650 In contrast to the use of GP-relative addressing for small data,
18651 zero-based addressing is never generated by default and there are
18652 no conventional section names used in standard linker scripts for
18653 sections in the low or high areas of memory.
18654
18655 -mel
18656 -meb
18657 Generate little-endian (default) or big-endian (experimental) code,
18658 respectively.
18659
18660 -march=arch
18661 This specifies the name of the target Nios II architecture. GCC
18662 uses this name to determine what kind of instructions it can emit
18663 when generating assembly code. Permissible names are: r1, r2.
18664
18665 The preprocessor macro "__nios2_arch__" is available to programs,
18666 with value 1 or 2, indicating the targeted ISA level.
18667
18668 -mbypass-cache
18669 -mno-bypass-cache
18670 Force all load and store instructions to always bypass cache by
18671 using I/O variants of the instructions. The default is not to
18672 bypass the cache.
18673
18674 -mno-cache-volatile
18675 -mcache-volatile
18676 Volatile memory access bypass the cache using the I/O variants of
18677 the load and store instructions. The default is not to bypass the
18678 cache.
18679
18680 -mno-fast-sw-div
18681 -mfast-sw-div
18682 Do not use table-based fast divide for small numbers. The default
18683 is to use the fast divide at -O3 and above.
18684
18685 -mno-hw-mul
18686 -mhw-mul
18687 -mno-hw-mulx
18688 -mhw-mulx
18689 -mno-hw-div
18690 -mhw-div
18691 Enable or disable emitting "mul", "mulx" and "div" family of
18692 instructions by the compiler. The default is to emit "mul" and not
18693 emit "div" and "mulx".
18694
18695 -mbmx
18696 -mno-bmx
18697 -mcdx
18698 -mno-cdx
18699 Enable or disable generation of Nios II R2 BMX (bit manipulation)
18700 and CDX (code density) instructions. Enabling these instructions
18701 also requires -march=r2. Since these instructions are optional
18702 extensions to the R2 architecture, the default is not to emit them.
18703
18704 -mcustom-insn=N
18705 -mno-custom-insn
18706 Each -mcustom-insn=N option enables use of a custom instruction
18707 with encoding N when generating code that uses insn. For example,
18708 -mcustom-fadds=253 generates custom instruction 253 for single-
18709 precision floating-point add operations instead of the default
18710 behavior of using a library call.
18711
18712 The following values of insn are supported. Except as otherwise
18713 noted, floating-point operations are expected to be implemented
18714 with normal IEEE 754 semantics and correspond directly to the C
18715 operators or the equivalent GCC built-in functions.
18716
18717 Single-precision floating point:
18718
18719 fadds, fsubs, fdivs, fmuls
18720 Binary arithmetic operations.
18721
18722 fnegs
18723 Unary negation.
18724
18725 fabss
18726 Unary absolute value.
18727
18728 fcmpeqs, fcmpges, fcmpgts, fcmples, fcmplts, fcmpnes
18729 Comparison operations.
18730
18731 fmins, fmaxs
18732 Floating-point minimum and maximum. These instructions are
18733 only generated if -ffinite-math-only is specified.
18734
18735 fsqrts
18736 Unary square root operation.
18737
18738 fcoss, fsins, ftans, fatans, fexps, flogs
18739 Floating-point trigonometric and exponential functions. These
18740 instructions are only generated if -funsafe-math-optimizations
18741 is also specified.
18742
18743 Double-precision floating point:
18744
18745 faddd, fsubd, fdivd, fmuld
18746 Binary arithmetic operations.
18747
18748 fnegd
18749 Unary negation.
18750
18751 fabsd
18752 Unary absolute value.
18753
18754 fcmpeqd, fcmpged, fcmpgtd, fcmpled, fcmpltd, fcmpned
18755 Comparison operations.
18756
18757 fmind, fmaxd
18758 Double-precision minimum and maximum. These instructions are
18759 only generated if -ffinite-math-only is specified.
18760
18761 fsqrtd
18762 Unary square root operation.
18763
18764 fcosd, fsind, ftand, fatand, fexpd, flogd
18765 Double-precision trigonometric and exponential functions.
18766 These instructions are only generated if
18767 -funsafe-math-optimizations is also specified.
18768
18769 Conversions:
18770
18771 fextsd
18772 Conversion from single precision to double precision.
18773
18774 ftruncds
18775 Conversion from double precision to single precision.
18776
18777 fixsi, fixsu, fixdi, fixdu
18778 Conversion from floating point to signed or unsigned integer
18779 types, with truncation towards zero.
18780
18781 round
18782 Conversion from single-precision floating point to signed
18783 integer, rounding to the nearest integer and ties away from
18784 zero. This corresponds to the "__builtin_lroundf" function
18785 when -fno-math-errno is used.
18786
18787 floatis, floatus, floatid, floatud
18788 Conversion from signed or unsigned integer types to floating-
18789 point types.
18790
18791 In addition, all of the following transfer instructions for
18792 internal registers X and Y must be provided to use any of the
18793 double-precision floating-point instructions. Custom instructions
18794 taking two double-precision source operands expect the first
18795 operand in the 64-bit register X. The other operand (or only
18796 operand of a unary operation) is given to the custom arithmetic
18797 instruction with the least significant half in source register src1
18798 and the most significant half in src2. A custom instruction that
18799 returns a double-precision result returns the most significant 32
18800 bits in the destination register and the other half in 32-bit
18801 register Y. GCC automatically generates the necessary code
18802 sequences to write register X and/or read register Y when double-
18803 precision floating-point instructions are used.
18804
18805 fwrx
18806 Write src1 into the least significant half of X and src2 into
18807 the most significant half of X.
18808
18809 fwry
18810 Write src1 into Y.
18811
18812 frdxhi, frdxlo
18813 Read the most or least (respectively) significant half of X and
18814 store it in dest.
18815
18816 frdy
18817 Read the value of Y and store it into dest.
18818
18819 Note that you can gain more local control over generation of Nios
18820 II custom instructions by using the "target("custom-insn=N")" and
18821 "target("no-custom-insn")" function attributes or pragmas.
18822
18823 -mcustom-fpu-cfg=name
18824 This option enables a predefined, named set of custom instruction
18825 encodings (see -mcustom-insn above). Currently, the following sets
18826 are defined:
18827
18828 -mcustom-fpu-cfg=60-1 is equivalent to: -mcustom-fmuls=252
18829 -mcustom-fadds=253 -mcustom-fsubs=254 -fsingle-precision-constant
18830
18831 -mcustom-fpu-cfg=60-2 is equivalent to: -mcustom-fmuls=252
18832 -mcustom-fadds=253 -mcustom-fsubs=254 -mcustom-fdivs=255
18833 -fsingle-precision-constant
18834
18835 -mcustom-fpu-cfg=72-3 is equivalent to: -mcustom-floatus=243
18836 -mcustom-fixsi=244 -mcustom-floatis=245 -mcustom-fcmpgts=246
18837 -mcustom-fcmples=249 -mcustom-fcmpeqs=250 -mcustom-fcmpnes=251
18838 -mcustom-fmuls=252 -mcustom-fadds=253 -mcustom-fsubs=254
18839 -mcustom-fdivs=255 -fsingle-precision-constant
18840
18841 Custom instruction assignments given by individual -mcustom-insn=
18842 options override those given by -mcustom-fpu-cfg=, regardless of
18843 the order of the options on the command line.
18844
18845 Note that you can gain more local control over selection of a FPU
18846 configuration by using the "target("custom-fpu-cfg=name")" function
18847 attribute or pragma.
18848
18849 These additional -m options are available for the Altera Nios II ELF
18850 (bare-metal) target:
18851
18852 -mhal
18853 Link with HAL BSP. This suppresses linking with the GCC-provided C
18854 runtime startup and termination code, and is typically used in
18855 conjunction with -msys-crt0= to specify the location of the
18856 alternate startup code provided by the HAL BSP.
18857
18858 -msmallc
18859 Link with a limited version of the C library, -lsmallc, rather than
18860 Newlib.
18861
18862 -msys-crt0=startfile
18863 startfile is the file name of the startfile (crt0) to use when
18864 linking. This option is only useful in conjunction with -mhal.
18865
18866 -msys-lib=systemlib
18867 systemlib is the library name of the library that provides low-
18868 level system calls required by the C library, e.g. "read" and
18869 "write". This option is typically used to link with a library
18870 provided by a HAL BSP.
18871
18872 Nvidia PTX Options
18873 These options are defined for Nvidia PTX:
18874
18875 -m32
18876 -m64
18877 Generate code for 32-bit or 64-bit ABI.
18878
18879 -mmainkernel
18880 Link in code for a __main kernel. This is for stand-alone instead
18881 of offloading execution.
18882
18883 -moptimize
18884 Apply partitioned execution optimizations. This is the default
18885 when any level of optimization is selected.
18886
18887 -msoft-stack
18888 Generate code that does not use ".local" memory directly for stack
18889 storage. Instead, a per-warp stack pointer is maintained
18890 explicitly. This enables variable-length stack allocation (with
18891 variable-length arrays or "alloca"), and when global memory is used
18892 for underlying storage, makes it possible to access automatic
18893 variables from other threads, or with atomic instructions. This
18894 code generation variant is used for OpenMP offloading, but the
18895 option is exposed on its own for the purpose of testing the
18896 compiler; to generate code suitable for linking into programs using
18897 OpenMP offloading, use option -mgomp.
18898
18899 -muniform-simt
18900 Switch to code generation variant that allows to execute all
18901 threads in each warp, while maintaining memory state and side
18902 effects as if only one thread in each warp was active outside of
18903 OpenMP SIMD regions. All atomic operations and calls to runtime
18904 (malloc, free, vprintf) are conditionally executed (iff current
18905 lane index equals the master lane index), and the register being
18906 assigned is copied via a shuffle instruction from the master lane.
18907 Outside of SIMD regions lane 0 is the master; inside, each thread
18908 sees itself as the master. Shared memory array "int __nvptx_uni[]"
18909 stores all-zeros or all-ones bitmasks for each warp, indicating
18910 current mode (0 outside of SIMD regions). Each thread can bitwise-
18911 and the bitmask at position "tid.y" with current lane index to
18912 compute the master lane index.
18913
18914 -mgomp
18915 Generate code for use in OpenMP offloading: enables -msoft-stack
18916 and -muniform-simt options, and selects corresponding multilib
18917 variant.
18918
18919 PDP-11 Options
18920 These options are defined for the PDP-11:
18921
18922 -mfpu
18923 Use hardware FPP floating point. This is the default. (FIS
18924 floating point on the PDP-11/40 is not supported.)
18925
18926 -msoft-float
18927 Do not use hardware floating point.
18928
18929 -mac0
18930 Return floating-point results in ac0 (fr0 in Unix assembler
18931 syntax).
18932
18933 -mno-ac0
18934 Return floating-point results in memory. This is the default.
18935
18936 -m40
18937 Generate code for a PDP-11/40.
18938
18939 -m45
18940 Generate code for a PDP-11/45. This is the default.
18941
18942 -m10
18943 Generate code for a PDP-11/10.
18944
18945 -mbcopy-builtin
18946 Use inline "movmemhi" patterns for copying memory. This is the
18947 default.
18948
18949 -mbcopy
18950 Do not use inline "movmemhi" patterns for copying memory.
18951
18952 -mint16
18953 -mno-int32
18954 Use 16-bit "int". This is the default.
18955
18956 -mint32
18957 -mno-int16
18958 Use 32-bit "int".
18959
18960 -mfloat64
18961 -mno-float32
18962 Use 64-bit "float". This is the default.
18963
18964 -mfloat32
18965 -mno-float64
18966 Use 32-bit "float".
18967
18968 -mabshi
18969 Use "abshi2" pattern. This is the default.
18970
18971 -mno-abshi
18972 Do not use "abshi2" pattern.
18973
18974 -mbranch-expensive
18975 Pretend that branches are expensive. This is for experimenting
18976 with code generation only.
18977
18978 -mbranch-cheap
18979 Do not pretend that branches are expensive. This is the default.
18980
18981 -munix-asm
18982 Use Unix assembler syntax. This is the default when configured for
18983 pdp11-*-bsd.
18984
18985 -mdec-asm
18986 Use DEC assembler syntax. This is the default when configured for
18987 any PDP-11 target other than pdp11-*-bsd.
18988
18989 picoChip Options
18990 These -m options are defined for picoChip implementations:
18991
18992 -mae=ae_type
18993 Set the instruction set, register set, and instruction scheduling
18994 parameters for array element type ae_type. Supported values for
18995 ae_type are ANY, MUL, and MAC.
18996
18997 -mae=ANY selects a completely generic AE type. Code generated with
18998 this option runs on any of the other AE types. The code is not as
18999 efficient as it would be if compiled for a specific AE type, and
19000 some types of operation (e.g., multiplication) do not work properly
19001 on all types of AE.
19002
19003 -mae=MUL selects a MUL AE type. This is the most useful AE type
19004 for compiled code, and is the default.
19005
19006 -mae=MAC selects a DSP-style MAC AE. Code compiled with this
19007 option may suffer from poor performance of byte (char)
19008 manipulation, since the DSP AE does not provide hardware support
19009 for byte load/stores.
19010
19011 -msymbol-as-address
19012 Enable the compiler to directly use a symbol name as an address in
19013 a load/store instruction, without first loading it into a register.
19014 Typically, the use of this option generates larger programs, which
19015 run faster than when the option isn't used. However, the results
19016 vary from program to program, so it is left as a user option,
19017 rather than being permanently enabled.
19018
19019 -mno-inefficient-warnings
19020 Disables warnings about the generation of inefficient code. These
19021 warnings can be generated, for example, when compiling code that
19022 performs byte-level memory operations on the MAC AE type. The MAC
19023 AE has no hardware support for byte-level memory operations, so all
19024 byte load/stores must be synthesized from word load/store
19025 operations. This is inefficient and a warning is generated to
19026 indicate that you should rewrite the code to avoid byte operations,
19027 or to target an AE type that has the necessary hardware support.
19028 This option disables these warnings.
19029
19030 PowerPC Options
19031 These are listed under
19032
19033 PowerPC SPE Options
19034 These -m options are defined for PowerPC SPE:
19035
19036 -mmfcrf
19037 -mno-mfcrf
19038 -mpopcntb
19039 -mno-popcntb
19040 You use these options to specify which instructions are available
19041 on the processor you are using. The default value of these options
19042 is determined when configuring GCC. Specifying the -mcpu=cpu_type
19043 overrides the specification of these options. We recommend you use
19044 the -mcpu=cpu_type option rather than the options listed above.
19045
19046 The -mmfcrf option allows GCC to generate the move from condition
19047 register field instruction implemented on the POWER4 processor and
19048 other processors that support the PowerPC V2.01 architecture. The
19049 -mpopcntb option allows GCC to generate the popcount and double-
19050 precision FP reciprocal estimate instruction implemented on the
19051 POWER5 processor and other processors that support the PowerPC
19052 V2.02 architecture.
19053
19054 -mcpu=cpu_type
19055 Set architecture type, register usage, and instruction scheduling
19056 parameters for machine type cpu_type. Supported values for
19057 cpu_type are 8540, 8548, and native.
19058
19059 -mcpu=powerpc specifies pure 32-bit PowerPC (either endian), with
19060 an appropriate, generic processor model assumed for scheduling
19061 purposes.
19062
19063 Specifying native as cpu type detects and selects the architecture
19064 option that corresponds to the host processor of the system
19065 performing the compilation. -mcpu=native has no effect if GCC does
19066 not recognize the processor.
19067
19068 The other options specify a specific processor. Code generated
19069 under those options runs best on that processor, and may not run at
19070 all on others.
19071
19072 The -mcpu options automatically enable or disable the following
19073 options:
19074
19075 -mhard-float -mmfcrf -mmultiple -mpopcntb -mpopcntd
19076 -msingle-float -mdouble-float -mfloat128
19077
19078 The particular options set for any particular CPU varies between
19079 compiler versions, depending on what setting seems to produce
19080 optimal code for that CPU; it doesn't necessarily reflect the
19081 actual hardware's capabilities. If you wish to set an individual
19082 option to a particular value, you may specify it after the -mcpu
19083 option, like -mcpu=8548.
19084
19085 -mtune=cpu_type
19086 Set the instruction scheduling parameters for machine type
19087 cpu_type, but do not set the architecture type or register usage,
19088 as -mcpu=cpu_type does. The same values for cpu_type are used for
19089 -mtune as for -mcpu. If both are specified, the code generated
19090 uses the architecture and registers set by -mcpu, but the
19091 scheduling parameters set by -mtune.
19092
19093 -msecure-plt
19094 Generate code that allows ld and ld.so to build executables and
19095 shared libraries with non-executable ".plt" and ".got" sections.
19096 This is a PowerPC 32-bit SYSV ABI option.
19097
19098 -mbss-plt
19099 Generate code that uses a BSS ".plt" section that ld.so fills in,
19100 and requires ".plt" and ".got" sections that are both writable and
19101 executable. This is a PowerPC 32-bit SYSV ABI option.
19102
19103 -misel
19104 -mno-isel
19105 This switch enables or disables the generation of ISEL
19106 instructions.
19107
19108 -misel=yes/no
19109 This switch has been deprecated. Use -misel and -mno-isel instead.
19110
19111 -mspe
19112 -mno-spe
19113 This switch enables or disables the generation of SPE simd
19114 instructions.
19115
19116 -mspe=yes/no
19117 This option has been deprecated. Use -mspe and -mno-spe instead.
19118
19119 -mfloat128
19120 -mno-float128
19121 Enable/disable the __float128 keyword for IEEE 128-bit floating
19122 point and use either software emulation for IEEE 128-bit floating
19123 point or hardware instructions.
19124
19125 -mfloat-gprs=yes/single/double/no
19126 -mfloat-gprs
19127 This switch enables or disables the generation of floating-point
19128 operations on the general-purpose registers for architectures that
19129 support it.
19130
19131 The argument yes or single enables the use of single-precision
19132 floating-point operations.
19133
19134 The argument double enables the use of single and double-precision
19135 floating-point operations.
19136
19137 The argument no disables floating-point operations on the general-
19138 purpose registers.
19139
19140 This option is currently only available on the MPC854x.
19141
19142 -mfull-toc
19143 -mno-fp-in-toc
19144 -mno-sum-in-toc
19145 -mminimal-toc
19146 Modify generation of the TOC (Table Of Contents), which is created
19147 for every executable file. The -mfull-toc option is selected by
19148 default. In that case, GCC allocates at least one TOC entry for
19149 each unique non-automatic variable reference in your program. GCC
19150 also places floating-point constants in the TOC. However, only
19151 16,384 entries are available in the TOC.
19152
19153 If you receive a linker error message that saying you have
19154 overflowed the available TOC space, you can reduce the amount of
19155 TOC space used with the -mno-fp-in-toc and -mno-sum-in-toc options.
19156 -mno-fp-in-toc prevents GCC from putting floating-point constants
19157 in the TOC and -mno-sum-in-toc forces GCC to generate code to
19158 calculate the sum of an address and a constant at run time instead
19159 of putting that sum into the TOC. You may specify one or both of
19160 these options. Each causes GCC to produce very slightly slower and
19161 larger code at the expense of conserving TOC space.
19162
19163 If you still run out of space in the TOC even when you specify both
19164 of these options, specify -mminimal-toc instead. This option
19165 causes GCC to make only one TOC entry for every file. When you
19166 specify this option, GCC produces code that is slower and larger
19167 but which uses extremely little TOC space. You may wish to use
19168 this option only on files that contain less frequently-executed
19169 code.
19170
19171 -maix32
19172 Disables the 64-bit ABI. GCC defaults to -maix32.
19173
19174 -mxl-compat
19175 -mno-xl-compat
19176 Produce code that conforms more closely to IBM XL compiler
19177 semantics when using AIX-compatible ABI. Pass floating-point
19178 arguments to prototyped functions beyond the register save area
19179 (RSA) on the stack in addition to argument FPRs. Do not assume
19180 that most significant double in 128-bit long double value is
19181 properly rounded when comparing values and converting to double.
19182 Use XL symbol names for long double support routines.
19183
19184 The AIX calling convention was extended but not initially
19185 documented to handle an obscure K&R C case of calling a function
19186 that takes the address of its arguments with fewer arguments than
19187 declared. IBM XL compilers access floating-point arguments that do
19188 not fit in the RSA from the stack when a subroutine is compiled
19189 without optimization. Because always storing floating-point
19190 arguments on the stack is inefficient and rarely needed, this
19191 option is not enabled by default and only is necessary when calling
19192 subroutines compiled by IBM XL compilers without optimization.
19193
19194 -malign-natural
19195 -malign-power
19196 On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
19197 -malign-natural overrides the ABI-defined alignment of larger
19198 types, such as floating-point doubles, on their natural size-based
19199 boundary. The option -malign-power instructs GCC to follow the
19200 ABI-specified alignment rules. GCC defaults to the standard
19201 alignment defined in the ABI.
19202
19203 On 64-bit Darwin, natural alignment is the default, and
19204 -malign-power is not supported.
19205
19206 -msoft-float
19207 -mhard-float
19208 Generate code that does not use (uses) the floating-point register
19209 set. Software floating-point emulation is provided if you use the
19210 -msoft-float option, and pass the option to GCC when linking.
19211
19212 -msingle-float
19213 -mdouble-float
19214 Generate code for single- or double-precision floating-point
19215 operations. -mdouble-float implies -msingle-float.
19216
19217 -mmultiple
19218 -mno-multiple
19219 Generate code that uses (does not use) the load multiple word
19220 instructions and the store multiple word instructions. These
19221 instructions are generated by default on POWER systems, and not
19222 generated on PowerPC systems. Do not use -mmultiple on little-
19223 endian PowerPC systems, since those instructions do not work when
19224 the processor is in little-endian mode. The exceptions are PPC740
19225 and PPC750 which permit these instructions in little-endian mode.
19226
19227 -mupdate
19228 -mno-update
19229 Generate code that uses (does not use) the load or store
19230 instructions that update the base register to the address of the
19231 calculated memory location. These instructions are generated by
19232 default. If you use -mno-update, there is a small window between
19233 the time that the stack pointer is updated and the address of the
19234 previous frame is stored, which means code that walks the stack
19235 frame across interrupts or signals may get corrupted data.
19236
19237 -mavoid-indexed-addresses
19238 -mno-avoid-indexed-addresses
19239 Generate code that tries to avoid (not avoid) the use of indexed
19240 load or store instructions. These instructions can incur a
19241 performance penalty on Power6 processors in certain situations,
19242 such as when stepping through large arrays that cross a 16M
19243 boundary. This option is enabled by default when targeting Power6
19244 and disabled otherwise.
19245
19246 -mfused-madd
19247 -mno-fused-madd
19248 Generate code that uses (does not use) the floating-point multiply
19249 and accumulate instructions. These instructions are generated by
19250 default if hardware floating point is used. The machine-dependent
19251 -mfused-madd option is now mapped to the machine-independent
19252 -ffp-contract=fast option, and -mno-fused-madd is mapped to
19253 -ffp-contract=off.
19254
19255 -mno-strict-align
19256 -mstrict-align
19257 On System V.4 and embedded PowerPC systems do not (do) assume that
19258 unaligned memory references are handled by the system.
19259
19260 -mrelocatable
19261 -mno-relocatable
19262 Generate code that allows (does not allow) a static executable to
19263 be relocated to a different address at run time. A simple embedded
19264 PowerPC system loader should relocate the entire contents of
19265 ".got2" and 4-byte locations listed in the ".fixup" section, a
19266 table of 32-bit addresses generated by this option. For this to
19267 work, all objects linked together must be compiled with
19268 -mrelocatable or -mrelocatable-lib. -mrelocatable code aligns the
19269 stack to an 8-byte boundary.
19270
19271 -mrelocatable-lib
19272 -mno-relocatable-lib
19273 Like -mrelocatable, -mrelocatable-lib generates a ".fixup" section
19274 to allow static executables to be relocated at run time, but
19275 -mrelocatable-lib does not use the smaller stack alignment of
19276 -mrelocatable. Objects compiled with -mrelocatable-lib may be
19277 linked with objects compiled with any combination of the
19278 -mrelocatable options.
19279
19280 -mno-toc
19281 -mtoc
19282 On System V.4 and embedded PowerPC systems do not (do) assume that
19283 register 2 contains a pointer to a global area pointing to the
19284 addresses used in the program.
19285
19286 -mlittle
19287 -mlittle-endian
19288 On System V.4 and embedded PowerPC systems compile code for the
19289 processor in little-endian mode. The -mlittle-endian option is the
19290 same as -mlittle.
19291
19292 -mbig
19293 -mbig-endian
19294 On System V.4 and embedded PowerPC systems compile code for the
19295 processor in big-endian mode. The -mbig-endian option is the same
19296 as -mbig.
19297
19298 -mdynamic-no-pic
19299 On Darwin and Mac OS X systems, compile code so that it is not
19300 relocatable, but that its external references are relocatable. The
19301 resulting code is suitable for applications, but not shared
19302 libraries.
19303
19304 -msingle-pic-base
19305 Treat the register used for PIC addressing as read-only, rather
19306 than loading it in the prologue for each function. The runtime
19307 system is responsible for initializing this register with an
19308 appropriate value before execution begins.
19309
19310 -mprioritize-restricted-insns=priority
19311 This option controls the priority that is assigned to dispatch-slot
19312 restricted instructions during the second scheduling pass. The
19313 argument priority takes the value 0, 1, or 2 to assign no, highest,
19314 or second-highest (respectively) priority to dispatch-slot
19315 restricted instructions.
19316
19317 -msched-costly-dep=dependence_type
19318 This option controls which dependences are considered costly by the
19319 target during instruction scheduling. The argument dependence_type
19320 takes one of the following values:
19321
19322 no No dependence is costly.
19323
19324 all All dependences are costly.
19325
19326 true_store_to_load
19327 A true dependence from store to load is costly.
19328
19329 store_to_load
19330 Any dependence from store to load is costly.
19331
19332 number
19333 Any dependence for which the latency is greater than or equal
19334 to number is costly.
19335
19336 -minsert-sched-nops=scheme
19337 This option controls which NOP insertion scheme is used during the
19338 second scheduling pass. The argument scheme takes one of the
19339 following values:
19340
19341 no Don't insert NOPs.
19342
19343 pad Pad with NOPs any dispatch group that has vacant issue slots,
19344 according to the scheduler's grouping.
19345
19346 regroup_exact
19347 Insert NOPs to force costly dependent insns into separate
19348 groups. Insert exactly as many NOPs as needed to force an insn
19349 to a new group, according to the estimated processor grouping.
19350
19351 number
19352 Insert NOPs to force costly dependent insns into separate
19353 groups. Insert number NOPs to force an insn to a new group.
19354
19355 -mcall-sysv
19356 On System V.4 and embedded PowerPC systems compile code using
19357 calling conventions that adhere to the March 1995 draft of the
19358 System V Application Binary Interface, PowerPC processor
19359 supplement. This is the default unless you configured GCC using
19360 powerpc-*-eabiaix.
19361
19362 -mcall-sysv-eabi
19363 -mcall-eabi
19364 Specify both -mcall-sysv and -meabi options.
19365
19366 -mcall-sysv-noeabi
19367 Specify both -mcall-sysv and -mno-eabi options.
19368
19369 -mcall-aixdesc
19370 On System V.4 and embedded PowerPC systems compile code for the AIX
19371 operating system.
19372
19373 -mcall-linux
19374 On System V.4 and embedded PowerPC systems compile code for the
19375 Linux-based GNU system.
19376
19377 -mcall-freebsd
19378 On System V.4 and embedded PowerPC systems compile code for the
19379 FreeBSD operating system.
19380
19381 -mcall-netbsd
19382 On System V.4 and embedded PowerPC systems compile code for the
19383 NetBSD operating system.
19384
19385 -mcall-openbsd
19386 On System V.4 and embedded PowerPC systems compile code for the
19387 OpenBSD operating system.
19388
19389 -maix-struct-return
19390 Return all structures in memory (as specified by the AIX ABI).
19391
19392 -msvr4-struct-return
19393 Return structures smaller than 8 bytes in registers (as specified
19394 by the SVR4 ABI).
19395
19396 -mabi=abi-type
19397 Extend the current ABI with a particular extension, or remove such
19398 extension. Valid values are altivec, no-altivec, spe, no-spe,
19399 ibmlongdouble, ieeelongdouble, elfv1, elfv2.
19400
19401 -mabi=spe
19402 Extend the current ABI with SPE ABI extensions. This does not
19403 change the default ABI, instead it adds the SPE ABI extensions to
19404 the current ABI.
19405
19406 -mabi=no-spe
19407 Disable Book-E SPE ABI extensions for the current ABI.
19408
19409 -mabi=ibmlongdouble
19410 Change the current ABI to use IBM extended-precision long double.
19411 This is not likely to work if your system defaults to using IEEE
19412 extended-precision long double. If you change the long double type
19413 from IEEE extended-precision, the compiler will issue a warning
19414 unless you use the -Wno-psabi option. Requires -mlong-double-128
19415 to be enabled.
19416
19417 -mabi=ieeelongdouble
19418 Change the current ABI to use IEEE extended-precision long double.
19419 This is not likely to work if your system defaults to using IBM
19420 extended-precision long double. If you change the long double type
19421 from IBM extended-precision, the compiler will issue a warning
19422 unless you use the -Wno-psabi option. Requires -mlong-double-128
19423 to be enabled.
19424
19425 -mabi=elfv1
19426 Change the current ABI to use the ELFv1 ABI. This is the default
19427 ABI for big-endian PowerPC 64-bit Linux. Overriding the default
19428 ABI requires special system support and is likely to fail in
19429 spectacular ways.
19430
19431 -mabi=elfv2
19432 Change the current ABI to use the ELFv2 ABI. This is the default
19433 ABI for little-endian PowerPC 64-bit Linux. Overriding the default
19434 ABI requires special system support and is likely to fail in
19435 spectacular ways.
19436
19437 -mgnu-attribute
19438 -mno-gnu-attribute
19439 Emit .gnu_attribute assembly directives to set tag/value pairs in a
19440 .gnu.attributes section that specify ABI variations in function
19441 parameters or return values.
19442
19443 -mprototype
19444 -mno-prototype
19445 On System V.4 and embedded PowerPC systems assume that all calls to
19446 variable argument functions are properly prototyped. Otherwise,
19447 the compiler must insert an instruction before every non-prototyped
19448 call to set or clear bit 6 of the condition code register ("CR") to
19449 indicate whether floating-point values are passed in the floating-
19450 point registers in case the function takes variable arguments.
19451 With -mprototype, only calls to prototyped variable argument
19452 functions set or clear the bit.
19453
19454 -msim
19455 On embedded PowerPC systems, assume that the startup module is
19456 called sim-crt0.o and that the standard C libraries are libsim.a
19457 and libc.a. This is the default for powerpc-*-eabisim
19458 configurations.
19459
19460 -mmvme
19461 On embedded PowerPC systems, assume that the startup module is
19462 called crt0.o and the standard C libraries are libmvme.a and
19463 libc.a.
19464
19465 -mads
19466 On embedded PowerPC systems, assume that the startup module is
19467 called crt0.o and the standard C libraries are libads.a and libc.a.
19468
19469 -myellowknife
19470 On embedded PowerPC systems, assume that the startup module is
19471 called crt0.o and the standard C libraries are libyk.a and libc.a.
19472
19473 -mvxworks
19474 On System V.4 and embedded PowerPC systems, specify that you are
19475 compiling for a VxWorks system.
19476
19477 -memb
19478 On embedded PowerPC systems, set the "PPC_EMB" bit in the ELF flags
19479 header to indicate that eabi extended relocations are used.
19480
19481 -meabi
19482 -mno-eabi
19483 On System V.4 and embedded PowerPC systems do (do not) adhere to
19484 the Embedded Applications Binary Interface (EABI), which is a set
19485 of modifications to the System V.4 specifications. Selecting
19486 -meabi means that the stack is aligned to an 8-byte boundary, a
19487 function "__eabi" is called from "main" to set up the EABI
19488 environment, and the -msdata option can use both "r2" and "r13" to
19489 point to two separate small data areas. Selecting -mno-eabi means
19490 that the stack is aligned to a 16-byte boundary, no EABI
19491 initialization function is called from "main", and the -msdata
19492 option only uses "r13" to point to a single small data area. The
19493 -meabi option is on by default if you configured GCC using one of
19494 the powerpc*-*-eabi* options.
19495
19496 -msdata=eabi
19497 On System V.4 and embedded PowerPC systems, put small initialized
19498 "const" global and static data in the ".sdata2" section, which is
19499 pointed to by register "r2". Put small initialized non-"const"
19500 global and static data in the ".sdata" section, which is pointed to
19501 by register "r13". Put small uninitialized global and static data
19502 in the ".sbss" section, which is adjacent to the ".sdata" section.
19503 The -msdata=eabi option is incompatible with the -mrelocatable
19504 option. The -msdata=eabi option also sets the -memb option.
19505
19506 -msdata=sysv
19507 On System V.4 and embedded PowerPC systems, put small global and
19508 static data in the ".sdata" section, which is pointed to by
19509 register "r13". Put small uninitialized global and static data in
19510 the ".sbss" section, which is adjacent to the ".sdata" section.
19511 The -msdata=sysv option is incompatible with the -mrelocatable
19512 option.
19513
19514 -msdata=default
19515 -msdata
19516 On System V.4 and embedded PowerPC systems, if -meabi is used,
19517 compile code the same as -msdata=eabi, otherwise compile code the
19518 same as -msdata=sysv.
19519
19520 -msdata=data
19521 On System V.4 and embedded PowerPC systems, put small global data
19522 in the ".sdata" section. Put small uninitialized global data in
19523 the ".sbss" section. Do not use register "r13" to address small
19524 data however. This is the default behavior unless other -msdata
19525 options are used.
19526
19527 -msdata=none
19528 -mno-sdata
19529 On embedded PowerPC systems, put all initialized global and static
19530 data in the ".data" section, and all uninitialized data in the
19531 ".bss" section.
19532
19533 -mblock-move-inline-limit=num
19534 Inline all block moves (such as calls to "memcpy" or structure
19535 copies) less than or equal to num bytes. The minimum value for num
19536 is 32 bytes on 32-bit targets and 64 bytes on 64-bit targets. The
19537 default value is target-specific.
19538
19539 -G num
19540 On embedded PowerPC systems, put global and static items less than
19541 or equal to num bytes into the small data or BSS sections instead
19542 of the normal data or BSS section. By default, num is 8. The -G
19543 num switch is also passed to the linker. All modules should be
19544 compiled with the same -G num value.
19545
19546 -mregnames
19547 -mno-regnames
19548 On System V.4 and embedded PowerPC systems do (do not) emit
19549 register names in the assembly language output using symbolic
19550 forms.
19551
19552 -mlongcall
19553 -mno-longcall
19554 By default assume that all calls are far away so that a longer and
19555 more expensive calling sequence is required. This is required for
19556 calls farther than 32 megabytes (33,554,432 bytes) from the current
19557 location. A short call is generated if the compiler knows the call
19558 cannot be that far away. This setting can be overridden by the
19559 "shortcall" function attribute, or by "#pragma longcall(0)".
19560
19561 Some linkers are capable of detecting out-of-range calls and
19562 generating glue code on the fly. On these systems, long calls are
19563 unnecessary and generate slower code. As of this writing, the AIX
19564 linker can do this, as can the GNU linker for PowerPC/64. It is
19565 planned to add this feature to the GNU linker for 32-bit PowerPC
19566 systems as well.
19567
19568 In the future, GCC may ignore all longcall specifications when the
19569 linker is known to generate glue.
19570
19571 -mtls-markers
19572 -mno-tls-markers
19573 Mark (do not mark) calls to "__tls_get_addr" with a relocation
19574 specifying the function argument. The relocation allows the linker
19575 to reliably associate function call with argument setup
19576 instructions for TLS optimization, which in turn allows GCC to
19577 better schedule the sequence.
19578
19579 -mrecip
19580 -mno-recip
19581 This option enables use of the reciprocal estimate and reciprocal
19582 square root estimate instructions with additional Newton-Raphson
19583 steps to increase precision instead of doing a divide or square
19584 root and divide for floating-point arguments. You should use the
19585 -ffast-math option when using -mrecip (or at least
19586 -funsafe-math-optimizations, -ffinite-math-only, -freciprocal-math
19587 and -fno-trapping-math). Note that while the throughput of the
19588 sequence is generally higher than the throughput of the non-
19589 reciprocal instruction, the precision of the sequence can be
19590 decreased by up to 2 ulp (i.e. the inverse of 1.0 equals
19591 0.99999994) for reciprocal square roots.
19592
19593 -mrecip=opt
19594 This option controls which reciprocal estimate instructions may be
19595 used. opt is a comma-separated list of options, which may be
19596 preceded by a "!" to invert the option:
19597
19598 all Enable all estimate instructions.
19599
19600 default
19601 Enable the default instructions, equivalent to -mrecip.
19602
19603 none
19604 Disable all estimate instructions, equivalent to -mno-recip.
19605
19606 div Enable the reciprocal approximation instructions for both
19607 single and double precision.
19608
19609 divf
19610 Enable the single-precision reciprocal approximation
19611 instructions.
19612
19613 divd
19614 Enable the double-precision reciprocal approximation
19615 instructions.
19616
19617 rsqrt
19618 Enable the reciprocal square root approximation instructions
19619 for both single and double precision.
19620
19621 rsqrtf
19622 Enable the single-precision reciprocal square root
19623 approximation instructions.
19624
19625 rsqrtd
19626 Enable the double-precision reciprocal square root
19627 approximation instructions.
19628
19629 So, for example, -mrecip=all,!rsqrtd enables all of the reciprocal
19630 estimate instructions, except for the "FRSQRTE", "XSRSQRTEDP", and
19631 "XVRSQRTEDP" instructions which handle the double-precision
19632 reciprocal square root calculations.
19633
19634 -mrecip-precision
19635 -mno-recip-precision
19636 Assume (do not assume) that the reciprocal estimate instructions
19637 provide higher-precision estimates than is mandated by the PowerPC
19638 ABI. Selecting -mcpu=power6, -mcpu=power7 or -mcpu=power8
19639 automatically selects -mrecip-precision. The double-precision
19640 square root estimate instructions are not generated by default on
19641 low-precision machines, since they do not provide an estimate that
19642 converges after three steps.
19643
19644 -mpointers-to-nested-functions
19645 -mno-pointers-to-nested-functions
19646 Generate (do not generate) code to load up the static chain
19647 register ("r11") when calling through a pointer on AIX and 64-bit
19648 Linux systems where a function pointer points to a 3-word
19649 descriptor giving the function address, TOC value to be loaded in
19650 register "r2", and static chain value to be loaded in register
19651 "r11". The -mpointers-to-nested-functions is on by default. You
19652 cannot call through pointers to nested functions or pointers to
19653 functions compiled in other languages that use the static chain if
19654 you use -mno-pointers-to-nested-functions.
19655
19656 -msave-toc-indirect
19657 -mno-save-toc-indirect
19658 Generate (do not generate) code to save the TOC value in the
19659 reserved stack location in the function prologue if the function
19660 calls through a pointer on AIX and 64-bit Linux systems. If the
19661 TOC value is not saved in the prologue, it is saved just before the
19662 call through the pointer. The -mno-save-toc-indirect option is the
19663 default.
19664
19665 -mcompat-align-parm
19666 -mno-compat-align-parm
19667 Generate (do not generate) code to pass structure parameters with a
19668 maximum alignment of 64 bits, for compatibility with older versions
19669 of GCC.
19670
19671 Older versions of GCC (prior to 4.9.0) incorrectly did not align a
19672 structure parameter on a 128-bit boundary when that structure
19673 contained a member requiring 128-bit alignment. This is corrected
19674 in more recent versions of GCC. This option may be used to
19675 generate code that is compatible with functions compiled with older
19676 versions of GCC.
19677
19678 The -mno-compat-align-parm option is the default.
19679
19680 -mstack-protector-guard=guard
19681 -mstack-protector-guard-reg=reg
19682 -mstack-protector-guard-offset=offset
19683 -mstack-protector-guard-symbol=symbol
19684 Generate stack protection code using canary at guard. Supported
19685 locations are global for global canary or tls for per-thread canary
19686 in the TLS block (the default with GNU libc version 2.4 or later).
19687
19688 With the latter choice the options -mstack-protector-guard-reg=reg
19689 and -mstack-protector-guard-offset=offset furthermore specify which
19690 register to use as base register for reading the canary, and from
19691 what offset from that base register. The default for those is as
19692 specified in the relevant ABI.
19693 -mstack-protector-guard-symbol=symbol overrides the offset with a
19694 symbol reference to a canary in the TLS block.
19695
19696 RISC-V Options
19697 These command-line options are defined for RISC-V targets:
19698
19699 -mbranch-cost=n
19700 Set the cost of branches to roughly n instructions.
19701
19702 -mplt
19703 -mno-plt
19704 When generating PIC code, do or don't allow the use of PLTs.
19705 Ignored for non-PIC. The default is -mplt.
19706
19707 -mabi=ABI-string
19708 Specify integer and floating-point calling convention. ABI-string
19709 contains two parts: the size of integer types and the registers
19710 used for floating-point types. For example -march=rv64ifd
19711 -mabi=lp64d means that long and pointers are 64-bit (implicitly
19712 defining int to be 32-bit), and that floating-point values up to 64
19713 bits wide are passed in F registers. Contrast this with
19714 -march=rv64ifd -mabi=lp64f, which still allows the compiler to
19715 generate code that uses the F and D extensions but only allows
19716 floating-point values up to 32 bits long to be passed in registers;
19717 or -march=rv64ifd -mabi=lp64, in which no floating-point arguments
19718 will be passed in registers.
19719
19720 The default for this argument is system dependent, users who want a
19721 specific calling convention should specify one explicitly. The
19722 valid calling conventions are: ilp32, ilp32f, ilp32d, lp64, lp64f,
19723 and lp64d. Some calling conventions are impossible to implement on
19724 some ISAs: for example, -march=rv32if -mabi=ilp32d is invalid
19725 because the ABI requires 64-bit values be passed in F registers,
19726 but F registers are only 32 bits wide.
19727
19728 -mfdiv
19729 -mno-fdiv
19730 Do or don't use hardware floating-point divide and square root
19731 instructions. This requires the F or D extensions for floating-
19732 point registers. The default is to use them if the specified
19733 architecture has these instructions.
19734
19735 -mdiv
19736 -mno-div
19737 Do or don't use hardware instructions for integer division. This
19738 requires the M extension. The default is to use them if the
19739 specified architecture has these instructions.
19740
19741 -march=ISA-string
19742 Generate code for given RISC-V ISA (e.g. rv64im). ISA strings must
19743 be lower-case. Examples include rv64i, rv32g, and rv32imaf.
19744
19745 -mtune=processor-string
19746 Optimize the output for the given processor, specified by
19747 microarchitecture name.
19748
19749 -mpreferred-stack-boundary=num
19750 Attempt to keep the stack boundary aligned to a 2 raised to num
19751 byte boundary. If -mpreferred-stack-boundary is not specified, the
19752 default is 4 (16 bytes or 128-bits).
19753
19754 Warning: If you use this switch, then you must build all modules
19755 with the same value, including any libraries. This includes the
19756 system libraries and startup modules.
19757
19758 -msmall-data-limit=n
19759 Put global and static data smaller than n bytes into a special
19760 section (on some targets).
19761
19762 -msave-restore
19763 -mno-save-restore
19764 Do or don't use smaller but slower prologue and epilogue code that
19765 uses library function calls. The default is to use fast inline
19766 prologues and epilogues.
19767
19768 -mstrict-align
19769 -mno-strict-align
19770 Do not or do generate unaligned memory accesses. The default is
19771 set depending on whether the processor we are optimizing for
19772 supports fast unaligned access or not.
19773
19774 -mcmodel=medlow
19775 Generate code for the medium-low code model. The program and its
19776 statically defined symbols must lie within a single 2 GiB address
19777 range and must lie between absolute addresses -2 GiB and +2 GiB.
19778 Programs can be statically or dynamically linked. This is the
19779 default code model.
19780
19781 -mcmodel=medany
19782 Generate code for the medium-any code model. The program and its
19783 statically defined symbols must be within any single 2 GiB address
19784 range. Programs can be statically or dynamically linked.
19785
19786 -mexplicit-relocs
19787 -mno-exlicit-relocs
19788 Use or do not use assembler relocation operators when dealing with
19789 symbolic addresses. The alternative is to use assembler macros
19790 instead, which may limit optimization.
19791
19792 -mrelax
19793 -mno-relax
19794 Take advantage of linker relaxations to reduce the number of
19795 instructions required to materialize symbol addresses. The default
19796 is to take advantage of linker relaxations.
19797
19798 RL78 Options
19799 -msim
19800 Links in additional target libraries to support operation within a
19801 simulator.
19802
19803 -mmul=none
19804 -mmul=g10
19805 -mmul=g13
19806 -mmul=g14
19807 -mmul=rl78
19808 Specifies the type of hardware multiplication and division support
19809 to be used. The simplest is "none", which uses software for both
19810 multiplication and division. This is the default. The "g13" value
19811 is for the hardware multiply/divide peripheral found on the
19812 RL78/G13 (S2 core) targets. The "g14" value selects the use of the
19813 multiplication and division instructions supported by the RL78/G14
19814 (S3 core) parts. The value "rl78" is an alias for "g14" and the
19815 value "mg10" is an alias for "none".
19816
19817 In addition a C preprocessor macro is defined, based upon the
19818 setting of this option. Possible values are: "__RL78_MUL_NONE__",
19819 "__RL78_MUL_G13__" or "__RL78_MUL_G14__".
19820
19821 -mcpu=g10
19822 -mcpu=g13
19823 -mcpu=g14
19824 -mcpu=rl78
19825 Specifies the RL78 core to target. The default is the G14 core,
19826 also known as an S3 core or just RL78. The G13 or S2 core does not
19827 have multiply or divide instructions, instead it uses a hardware
19828 peripheral for these operations. The G10 or S1 core does not have
19829 register banks, so it uses a different calling convention.
19830
19831 If this option is set it also selects the type of hardware multiply
19832 support to use, unless this is overridden by an explicit -mmul=none
19833 option on the command line. Thus specifying -mcpu=g13 enables the
19834 use of the G13 hardware multiply peripheral and specifying
19835 -mcpu=g10 disables the use of hardware multiplications altogether.
19836
19837 Note, although the RL78/G14 core is the default target, specifying
19838 -mcpu=g14 or -mcpu=rl78 on the command line does change the
19839 behavior of the toolchain since it also enables G14 hardware
19840 multiply support. If these options are not specified on the
19841 command line then software multiplication routines will be used
19842 even though the code targets the RL78 core. This is for backwards
19843 compatibility with older toolchains which did not have hardware
19844 multiply and divide support.
19845
19846 In addition a C preprocessor macro is defined, based upon the
19847 setting of this option. Possible values are: "__RL78_G10__",
19848 "__RL78_G13__" or "__RL78_G14__".
19849
19850 -mg10
19851 -mg13
19852 -mg14
19853 -mrl78
19854 These are aliases for the corresponding -mcpu= option. They are
19855 provided for backwards compatibility.
19856
19857 -mallregs
19858 Allow the compiler to use all of the available registers. By
19859 default registers "r24..r31" are reserved for use in interrupt
19860 handlers. With this option enabled these registers can be used in
19861 ordinary functions as well.
19862
19863 -m64bit-doubles
19864 -m32bit-doubles
19865 Make the "double" data type be 64 bits (-m64bit-doubles) or 32 bits
19866 (-m32bit-doubles) in size. The default is -m32bit-doubles.
19867
19868 -msave-mduc-in-interrupts
19869 -mno-save-mduc-in-interrupts
19870 Specifies that interrupt handler functions should preserve the MDUC
19871 registers. This is only necessary if normal code might use the
19872 MDUC registers, for example because it performs multiplication and
19873 division operations. The default is to ignore the MDUC registers
19874 as this makes the interrupt handlers faster. The target option
19875 -mg13 needs to be passed for this to work as this feature is only
19876 available on the G13 target (S2 core). The MDUC registers will
19877 only be saved if the interrupt handler performs a multiplication or
19878 division operation or it calls another function.
19879
19880 IBM RS/6000 and PowerPC Options
19881 These -m options are defined for the IBM RS/6000 and PowerPC:
19882
19883 -mpowerpc-gpopt
19884 -mno-powerpc-gpopt
19885 -mpowerpc-gfxopt
19886 -mno-powerpc-gfxopt
19887 -mpowerpc64
19888 -mno-powerpc64
19889 -mmfcrf
19890 -mno-mfcrf
19891 -mpopcntb
19892 -mno-popcntb
19893 -mpopcntd
19894 -mno-popcntd
19895 -mfprnd
19896 -mno-fprnd
19897 -mcmpb
19898 -mno-cmpb
19899 -mmfpgpr
19900 -mno-mfpgpr
19901 -mhard-dfp
19902 -mno-hard-dfp
19903 You use these options to specify which instructions are available
19904 on the processor you are using. The default value of these options
19905 is determined when configuring GCC. Specifying the -mcpu=cpu_type
19906 overrides the specification of these options. We recommend you use
19907 the -mcpu=cpu_type option rather than the options listed above.
19908
19909 Specifying -mpowerpc-gpopt allows GCC to use the optional PowerPC
19910 architecture instructions in the General Purpose group, including
19911 floating-point square root. Specifying -mpowerpc-gfxopt allows GCC
19912 to use the optional PowerPC architecture instructions in the
19913 Graphics group, including floating-point select.
19914
19915 The -mmfcrf option allows GCC to generate the move from condition
19916 register field instruction implemented on the POWER4 processor and
19917 other processors that support the PowerPC V2.01 architecture. The
19918 -mpopcntb option allows GCC to generate the popcount and double-
19919 precision FP reciprocal estimate instruction implemented on the
19920 POWER5 processor and other processors that support the PowerPC
19921 V2.02 architecture. The -mpopcntd option allows GCC to generate
19922 the popcount instruction implemented on the POWER7 processor and
19923 other processors that support the PowerPC V2.06 architecture. The
19924 -mfprnd option allows GCC to generate the FP round to integer
19925 instructions implemented on the POWER5+ processor and other
19926 processors that support the PowerPC V2.03 architecture. The -mcmpb
19927 option allows GCC to generate the compare bytes instruction
19928 implemented on the POWER6 processor and other processors that
19929 support the PowerPC V2.05 architecture. The -mmfpgpr option allows
19930 GCC to generate the FP move to/from general-purpose register
19931 instructions implemented on the POWER6X processor and other
19932 processors that support the extended PowerPC V2.05 architecture.
19933 The -mhard-dfp option allows GCC to generate the decimal floating-
19934 point instructions implemented on some POWER processors.
19935
19936 The -mpowerpc64 option allows GCC to generate the additional 64-bit
19937 instructions that are found in the full PowerPC64 architecture and
19938 to treat GPRs as 64-bit, doubleword quantities. GCC defaults to
19939 -mno-powerpc64.
19940
19941 -mcpu=cpu_type
19942 Set architecture type, register usage, and instruction scheduling
19943 parameters for machine type cpu_type. Supported values for
19944 cpu_type are 401, 403, 405, 405fp, 440, 440fp, 464, 464fp, 476,
19945 476fp, 505, 601, 602, 603, 603e, 604, 604e, 620, 630, 740, 7400,
19946 7450, 750, 801, 821, 823, 860, 970, 8540, a2, e300c2, e300c3,
19947 e500mc, e500mc64, e5500, e6500, ec603e, G3, G4, G5, titan, power3,
19948 power4, power5, power5+, power6, power6x, power7, power8, power9,
19949 powerpc, powerpc64, powerpc64le, rs64, and native.
19950
19951 -mcpu=powerpc, -mcpu=powerpc64, and -mcpu=powerpc64le specify pure
19952 32-bit PowerPC (either endian), 64-bit big endian PowerPC and
19953 64-bit little endian PowerPC architecture machine types, with an
19954 appropriate, generic processor model assumed for scheduling
19955 purposes.
19956
19957 Specifying native as cpu type detects and selects the architecture
19958 option that corresponds to the host processor of the system
19959 performing the compilation. -mcpu=native has no effect if GCC does
19960 not recognize the processor.
19961
19962 The other options specify a specific processor. Code generated
19963 under those options runs best on that processor, and may not run at
19964 all on others.
19965
19966 The -mcpu options automatically enable or disable the following
19967 options:
19968
19969 -maltivec -mfprnd -mhard-float -mmfcrf -mmultiple -mpopcntb
19970 -mpopcntd -mpowerpc64 -mpowerpc-gpopt -mpowerpc-gfxopt
19971 -msingle-float -mdouble-float -msimple-fpu -mmulhw -mdlmzb
19972 -mmfpgpr -mvsx -mcrypto -mhtm -mpower8-fusion -mpower8-vector
19973 -mquad-memory -mquad-memory-atomic -mfloat128 -mfloat128-hardware
19974
19975 The particular options set for any particular CPU varies between
19976 compiler versions, depending on what setting seems to produce
19977 optimal code for that CPU; it doesn't necessarily reflect the
19978 actual hardware's capabilities. If you wish to set an individual
19979 option to a particular value, you may specify it after the -mcpu
19980 option, like -mcpu=970 -mno-altivec.
19981
19982 On AIX, the -maltivec and -mpowerpc64 options are not enabled or
19983 disabled by the -mcpu option at present because AIX does not have
19984 full support for these options. You may still enable or disable
19985 them individually if you're sure it'll work in your environment.
19986
19987 -mtune=cpu_type
19988 Set the instruction scheduling parameters for machine type
19989 cpu_type, but do not set the architecture type or register usage,
19990 as -mcpu=cpu_type does. The same values for cpu_type are used for
19991 -mtune as for -mcpu. If both are specified, the code generated
19992 uses the architecture and registers set by -mcpu, but the
19993 scheduling parameters set by -mtune.
19994
19995 -mcmodel=small
19996 Generate PowerPC64 code for the small model: The TOC is limited to
19997 64k.
19998
19999 -mcmodel=medium
20000 Generate PowerPC64 code for the medium model: The TOC and other
20001 static data may be up to a total of 4G in size. This is the
20002 default for 64-bit Linux.
20003
20004 -mcmodel=large
20005 Generate PowerPC64 code for the large model: The TOC may be up to
20006 4G in size. Other data and code is only limited by the 64-bit
20007 address space.
20008
20009 -maltivec
20010 -mno-altivec
20011 Generate code that uses (does not use) AltiVec instructions, and
20012 also enable the use of built-in functions that allow more direct
20013 access to the AltiVec instruction set. You may also need to set
20014 -mabi=altivec to adjust the current ABI with AltiVec ABI
20015 enhancements.
20016
20017 When -maltivec is used, rather than -maltivec=le or -maltivec=be,
20018 the element order for AltiVec intrinsics such as "vec_splat",
20019 "vec_extract", and "vec_insert" match array element order
20020 corresponding to the endianness of the target. That is, element
20021 zero identifies the leftmost element in a vector register when
20022 targeting a big-endian platform, and identifies the rightmost
20023 element in a vector register when targeting a little-endian
20024 platform.
20025
20026 -maltivec=be
20027 Generate AltiVec instructions using big-endian element order,
20028 regardless of whether the target is big- or little-endian. This is
20029 the default when targeting a big-endian platform. Using this
20030 option is currently deprecated. Support for this feature will be
20031 removed in GCC 9.
20032
20033 The element order is used to interpret element numbers in AltiVec
20034 intrinsics such as "vec_splat", "vec_extract", and "vec_insert".
20035 By default, these match array element order corresponding to the
20036 endianness for the target.
20037
20038 -maltivec=le
20039 Generate AltiVec instructions using little-endian element order,
20040 regardless of whether the target is big- or little-endian. This is
20041 the default when targeting a little-endian platform. This option
20042 is currently ignored when targeting a big-endian platform.
20043
20044 The element order is used to interpret element numbers in AltiVec
20045 intrinsics such as "vec_splat", "vec_extract", and "vec_insert".
20046 By default, these match array element order corresponding to the
20047 endianness for the target.
20048
20049 -mvrsave
20050 -mno-vrsave
20051 Generate VRSAVE instructions when generating AltiVec code.
20052
20053 -msecure-plt
20054 Generate code that allows ld and ld.so to build executables and
20055 shared libraries with non-executable ".plt" and ".got" sections.
20056 This is a PowerPC 32-bit SYSV ABI option.
20057
20058 -mbss-plt
20059 Generate code that uses a BSS ".plt" section that ld.so fills in,
20060 and requires ".plt" and ".got" sections that are both writable and
20061 executable. This is a PowerPC 32-bit SYSV ABI option.
20062
20063 -misel
20064 -mno-isel
20065 This switch enables or disables the generation of ISEL
20066 instructions.
20067
20068 -misel=yes/no
20069 This switch has been deprecated. Use -misel and -mno-isel instead.
20070
20071 -mpaired
20072 -mno-paired
20073 This switch enables or disables the generation of PAIRED simd
20074 instructions.
20075
20076 -mvsx
20077 -mno-vsx
20078 Generate code that uses (does not use) vector/scalar (VSX)
20079 instructions, and also enable the use of built-in functions that
20080 allow more direct access to the VSX instruction set.
20081
20082 -mcrypto
20083 -mno-crypto
20084 Enable the use (disable) of the built-in functions that allow
20085 direct access to the cryptographic instructions that were added in
20086 version 2.07 of the PowerPC ISA.
20087
20088 -mhtm
20089 -mno-htm
20090 Enable (disable) the use of the built-in functions that allow
20091 direct access to the Hardware Transactional Memory (HTM)
20092 instructions that were added in version 2.07 of the PowerPC ISA.
20093
20094 -mpower8-fusion
20095 -mno-power8-fusion
20096 Generate code that keeps (does not keeps) some integer operations
20097 adjacent so that the instructions can be fused together on power8
20098 and later processors.
20099
20100 -mpower8-vector
20101 -mno-power8-vector
20102 Generate code that uses (does not use) the vector and scalar
20103 instructions that were added in version 2.07 of the PowerPC ISA.
20104 Also enable the use of built-in functions that allow more direct
20105 access to the vector instructions.
20106
20107 -mquad-memory
20108 -mno-quad-memory
20109 Generate code that uses (does not use) the non-atomic quad word
20110 memory instructions. The -mquad-memory option requires use of
20111 64-bit mode.
20112
20113 -mquad-memory-atomic
20114 -mno-quad-memory-atomic
20115 Generate code that uses (does not use) the atomic quad word memory
20116 instructions. The -mquad-memory-atomic option requires use of
20117 64-bit mode.
20118
20119 -mfloat128
20120 -mno-float128
20121 Enable/disable the __float128 keyword for IEEE 128-bit floating
20122 point and use either software emulation for IEEE 128-bit floating
20123 point or hardware instructions.
20124
20125 The VSX instruction set (-mvsx, -mcpu=power7, -mcpu=power8), or
20126 -mcpu=power9 must be enabled to use the IEEE 128-bit floating point
20127 support. The IEEE 128-bit floating point support only works on
20128 PowerPC Linux systems.
20129
20130 The default for -mfloat128 is enabled on PowerPC Linux systems
20131 using the VSX instruction set, and disabled on other systems.
20132
20133 If you use the ISA 3.0 instruction set (-mpower9-vector or
20134 -mcpu=power9) on a 64-bit system, the IEEE 128-bit floating point
20135 support will also enable the generation of ISA 3.0 IEEE 128-bit
20136 floating point instructions. Otherwise, if you do not specify to
20137 generate ISA 3.0 instructions or you are targeting a 32-bit big
20138 endian system, IEEE 128-bit floating point will be done with
20139 software emulation.
20140
20141 -mfloat128-hardware
20142 -mno-float128-hardware
20143 Enable/disable using ISA 3.0 hardware instructions to support the
20144 __float128 data type.
20145
20146 The default for -mfloat128-hardware is enabled on PowerPC Linux
20147 systems using the ISA 3.0 instruction set, and disabled on other
20148 systems.
20149
20150 -m32
20151 -m64
20152 Generate code for 32-bit or 64-bit environments of Darwin and SVR4
20153 targets (including GNU/Linux). The 32-bit environment sets int,
20154 long and pointer to 32 bits and generates code that runs on any
20155 PowerPC variant. The 64-bit environment sets int to 32 bits and
20156 long and pointer to 64 bits, and generates code for PowerPC64, as
20157 for -mpowerpc64.
20158
20159 -mfull-toc
20160 -mno-fp-in-toc
20161 -mno-sum-in-toc
20162 -mminimal-toc
20163 Modify generation of the TOC (Table Of Contents), which is created
20164 for every executable file. The -mfull-toc option is selected by
20165 default. In that case, GCC allocates at least one TOC entry for
20166 each unique non-automatic variable reference in your program. GCC
20167 also places floating-point constants in the TOC. However, only
20168 16,384 entries are available in the TOC.
20169
20170 If you receive a linker error message that saying you have
20171 overflowed the available TOC space, you can reduce the amount of
20172 TOC space used with the -mno-fp-in-toc and -mno-sum-in-toc options.
20173 -mno-fp-in-toc prevents GCC from putting floating-point constants
20174 in the TOC and -mno-sum-in-toc forces GCC to generate code to
20175 calculate the sum of an address and a constant at run time instead
20176 of putting that sum into the TOC. You may specify one or both of
20177 these options. Each causes GCC to produce very slightly slower and
20178 larger code at the expense of conserving TOC space.
20179
20180 If you still run out of space in the TOC even when you specify both
20181 of these options, specify -mminimal-toc instead. This option
20182 causes GCC to make only one TOC entry for every file. When you
20183 specify this option, GCC produces code that is slower and larger
20184 but which uses extremely little TOC space. You may wish to use
20185 this option only on files that contain less frequently-executed
20186 code.
20187
20188 -maix64
20189 -maix32
20190 Enable 64-bit AIX ABI and calling convention: 64-bit pointers,
20191 64-bit "long" type, and the infrastructure needed to support them.
20192 Specifying -maix64 implies -mpowerpc64, while -maix32 disables the
20193 64-bit ABI and implies -mno-powerpc64. GCC defaults to -maix32.
20194
20195 -mxl-compat
20196 -mno-xl-compat
20197 Produce code that conforms more closely to IBM XL compiler
20198 semantics when using AIX-compatible ABI. Pass floating-point
20199 arguments to prototyped functions beyond the register save area
20200 (RSA) on the stack in addition to argument FPRs. Do not assume
20201 that most significant double in 128-bit long double value is
20202 properly rounded when comparing values and converting to double.
20203 Use XL symbol names for long double support routines.
20204
20205 The AIX calling convention was extended but not initially
20206 documented to handle an obscure K&R C case of calling a function
20207 that takes the address of its arguments with fewer arguments than
20208 declared. IBM XL compilers access floating-point arguments that do
20209 not fit in the RSA from the stack when a subroutine is compiled
20210 without optimization. Because always storing floating-point
20211 arguments on the stack is inefficient and rarely needed, this
20212 option is not enabled by default and only is necessary when calling
20213 subroutines compiled by IBM XL compilers without optimization.
20214
20215 -mpe
20216 Support IBM RS/6000 SP Parallel Environment (PE). Link an
20217 application written to use message passing with special startup
20218 code to enable the application to run. The system must have PE
20219 installed in the standard location (/usr/lpp/ppe.poe/), or the
20220 specs file must be overridden with the -specs= option to specify
20221 the appropriate directory location. The Parallel Environment does
20222 not support threads, so the -mpe option and the -pthread option are
20223 incompatible.
20224
20225 -malign-natural
20226 -malign-power
20227 On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
20228 -malign-natural overrides the ABI-defined alignment of larger
20229 types, such as floating-point doubles, on their natural size-based
20230 boundary. The option -malign-power instructs GCC to follow the
20231 ABI-specified alignment rules. GCC defaults to the standard
20232 alignment defined in the ABI.
20233
20234 On 64-bit Darwin, natural alignment is the default, and
20235 -malign-power is not supported.
20236
20237 -msoft-float
20238 -mhard-float
20239 Generate code that does not use (uses) the floating-point register
20240 set. Software floating-point emulation is provided if you use the
20241 -msoft-float option, and pass the option to GCC when linking.
20242
20243 -msingle-float
20244 -mdouble-float
20245 Generate code for single- or double-precision floating-point
20246 operations. -mdouble-float implies -msingle-float.
20247
20248 -msimple-fpu
20249 Do not generate "sqrt" and "div" instructions for hardware
20250 floating-point unit.
20251
20252 -mfpu=name
20253 Specify type of floating-point unit. Valid values for name are
20254 sp_lite (equivalent to -msingle-float -msimple-fpu), dp_lite
20255 (equivalent to -mdouble-float -msimple-fpu), sp_full (equivalent to
20256 -msingle-float), and dp_full (equivalent to -mdouble-float).
20257
20258 -mxilinx-fpu
20259 Perform optimizations for the floating-point unit on Xilinx PPC
20260 405/440.
20261
20262 -mmultiple
20263 -mno-multiple
20264 Generate code that uses (does not use) the load multiple word
20265 instructions and the store multiple word instructions. These
20266 instructions are generated by default on POWER systems, and not
20267 generated on PowerPC systems. Do not use -mmultiple on little-
20268 endian PowerPC systems, since those instructions do not work when
20269 the processor is in little-endian mode. The exceptions are PPC740
20270 and PPC750 which permit these instructions in little-endian mode.
20271
20272 -mupdate
20273 -mno-update
20274 Generate code that uses (does not use) the load or store
20275 instructions that update the base register to the address of the
20276 calculated memory location. These instructions are generated by
20277 default. If you use -mno-update, there is a small window between
20278 the time that the stack pointer is updated and the address of the
20279 previous frame is stored, which means code that walks the stack
20280 frame across interrupts or signals may get corrupted data.
20281
20282 -mavoid-indexed-addresses
20283 -mno-avoid-indexed-addresses
20284 Generate code that tries to avoid (not avoid) the use of indexed
20285 load or store instructions. These instructions can incur a
20286 performance penalty on Power6 processors in certain situations,
20287 such as when stepping through large arrays that cross a 16M
20288 boundary. This option is enabled by default when targeting Power6
20289 and disabled otherwise.
20290
20291 -mfused-madd
20292 -mno-fused-madd
20293 Generate code that uses (does not use) the floating-point multiply
20294 and accumulate instructions. These instructions are generated by
20295 default if hardware floating point is used. The machine-dependent
20296 -mfused-madd option is now mapped to the machine-independent
20297 -ffp-contract=fast option, and -mno-fused-madd is mapped to
20298 -ffp-contract=off.
20299
20300 -mmulhw
20301 -mno-mulhw
20302 Generate code that uses (does not use) the half-word multiply and
20303 multiply-accumulate instructions on the IBM 405, 440, 464 and 476
20304 processors. These instructions are generated by default when
20305 targeting those processors.
20306
20307 -mdlmzb
20308 -mno-dlmzb
20309 Generate code that uses (does not use) the string-search dlmzb
20310 instruction on the IBM 405, 440, 464 and 476 processors. This
20311 instruction is generated by default when targeting those
20312 processors.
20313
20314 -mno-bit-align
20315 -mbit-align
20316 On System V.4 and embedded PowerPC systems do not (do) force
20317 structures and unions that contain bit-fields to be aligned to the
20318 base type of the bit-field.
20319
20320 For example, by default a structure containing nothing but 8
20321 "unsigned" bit-fields of length 1 is aligned to a 4-byte boundary
20322 and has a size of 4 bytes. By using -mno-bit-align, the structure
20323 is aligned to a 1-byte boundary and is 1 byte in size.
20324
20325 -mno-strict-align
20326 -mstrict-align
20327 On System V.4 and embedded PowerPC systems do not (do) assume that
20328 unaligned memory references are handled by the system.
20329
20330 -mrelocatable
20331 -mno-relocatable
20332 Generate code that allows (does not allow) a static executable to
20333 be relocated to a different address at run time. A simple embedded
20334 PowerPC system loader should relocate the entire contents of
20335 ".got2" and 4-byte locations listed in the ".fixup" section, a
20336 table of 32-bit addresses generated by this option. For this to
20337 work, all objects linked together must be compiled with
20338 -mrelocatable or -mrelocatable-lib. -mrelocatable code aligns the
20339 stack to an 8-byte boundary.
20340
20341 -mrelocatable-lib
20342 -mno-relocatable-lib
20343 Like -mrelocatable, -mrelocatable-lib generates a ".fixup" section
20344 to allow static executables to be relocated at run time, but
20345 -mrelocatable-lib does not use the smaller stack alignment of
20346 -mrelocatable. Objects compiled with -mrelocatable-lib may be
20347 linked with objects compiled with any combination of the
20348 -mrelocatable options.
20349
20350 -mno-toc
20351 -mtoc
20352 On System V.4 and embedded PowerPC systems do not (do) assume that
20353 register 2 contains a pointer to a global area pointing to the
20354 addresses used in the program.
20355
20356 -mlittle
20357 -mlittle-endian
20358 On System V.4 and embedded PowerPC systems compile code for the
20359 processor in little-endian mode. The -mlittle-endian option is the
20360 same as -mlittle.
20361
20362 -mbig
20363 -mbig-endian
20364 On System V.4 and embedded PowerPC systems compile code for the
20365 processor in big-endian mode. The -mbig-endian option is the same
20366 as -mbig.
20367
20368 -mdynamic-no-pic
20369 On Darwin and Mac OS X systems, compile code so that it is not
20370 relocatable, but that its external references are relocatable. The
20371 resulting code is suitable for applications, but not shared
20372 libraries.
20373
20374 -msingle-pic-base
20375 Treat the register used for PIC addressing as read-only, rather
20376 than loading it in the prologue for each function. The runtime
20377 system is responsible for initializing this register with an
20378 appropriate value before execution begins.
20379
20380 -mprioritize-restricted-insns=priority
20381 This option controls the priority that is assigned to dispatch-slot
20382 restricted instructions during the second scheduling pass. The
20383 argument priority takes the value 0, 1, or 2 to assign no, highest,
20384 or second-highest (respectively) priority to dispatch-slot
20385 restricted instructions.
20386
20387 -msched-costly-dep=dependence_type
20388 This option controls which dependences are considered costly by the
20389 target during instruction scheduling. The argument dependence_type
20390 takes one of the following values:
20391
20392 no No dependence is costly.
20393
20394 all All dependences are costly.
20395
20396 true_store_to_load
20397 A true dependence from store to load is costly.
20398
20399 store_to_load
20400 Any dependence from store to load is costly.
20401
20402 number
20403 Any dependence for which the latency is greater than or equal
20404 to number is costly.
20405
20406 -minsert-sched-nops=scheme
20407 This option controls which NOP insertion scheme is used during the
20408 second scheduling pass. The argument scheme takes one of the
20409 following values:
20410
20411 no Don't insert NOPs.
20412
20413 pad Pad with NOPs any dispatch group that has vacant issue slots,
20414 according to the scheduler's grouping.
20415
20416 regroup_exact
20417 Insert NOPs to force costly dependent insns into separate
20418 groups. Insert exactly as many NOPs as needed to force an insn
20419 to a new group, according to the estimated processor grouping.
20420
20421 number
20422 Insert NOPs to force costly dependent insns into separate
20423 groups. Insert number NOPs to force an insn to a new group.
20424
20425 -mcall-sysv
20426 On System V.4 and embedded PowerPC systems compile code using
20427 calling conventions that adhere to the March 1995 draft of the
20428 System V Application Binary Interface, PowerPC processor
20429 supplement. This is the default unless you configured GCC using
20430 powerpc-*-eabiaix.
20431
20432 -mcall-sysv-eabi
20433 -mcall-eabi
20434 Specify both -mcall-sysv and -meabi options.
20435
20436 -mcall-sysv-noeabi
20437 Specify both -mcall-sysv and -mno-eabi options.
20438
20439 -mcall-aixdesc
20440 On System V.4 and embedded PowerPC systems compile code for the AIX
20441 operating system.
20442
20443 -mcall-linux
20444 On System V.4 and embedded PowerPC systems compile code for the
20445 Linux-based GNU system.
20446
20447 -mcall-freebsd
20448 On System V.4 and embedded PowerPC systems compile code for the
20449 FreeBSD operating system.
20450
20451 -mcall-netbsd
20452 On System V.4 and embedded PowerPC systems compile code for the
20453 NetBSD operating system.
20454
20455 -mcall-openbsd
20456 On System V.4 and embedded PowerPC systems compile code for the
20457 OpenBSD operating system.
20458
20459 -mtraceback=traceback_type
20460 Select the type of traceback table. Valid values for traceback_type
20461 are full, part, and no.
20462
20463 -maix-struct-return
20464 Return all structures in memory (as specified by the AIX ABI).
20465
20466 -msvr4-struct-return
20467 Return structures smaller than 8 bytes in registers (as specified
20468 by the SVR4 ABI).
20469
20470 -mabi=abi-type
20471 Extend the current ABI with a particular extension, or remove such
20472 extension. Valid values are altivec, no-altivec, spe, no-spe,
20473 ibmlongdouble, ieeelongdouble, elfv1, elfv2.
20474
20475 -mabi=ibmlongdouble
20476 Change the current ABI to use IBM extended-precision long double.
20477 This is not likely to work if your system defaults to using IEEE
20478 extended-precision long double. If you change the long double type
20479 from IEEE extended-precision, the compiler will issue a warning
20480 unless you use the -Wno-psabi option. Requires -mlong-double-128
20481 to be enabled.
20482
20483 -mabi=ieeelongdouble
20484 Change the current ABI to use IEEE extended-precision long double.
20485 This is not likely to work if your system defaults to using IBM
20486 extended-precision long double. If you change the long double type
20487 from IBM extended-precision, the compiler will issue a warning
20488 unless you use the -Wno-psabi option. Requires -mlong-double-128
20489 to be enabled.
20490
20491 -mabi=elfv1
20492 Change the current ABI to use the ELFv1 ABI. This is the default
20493 ABI for big-endian PowerPC 64-bit Linux. Overriding the default
20494 ABI requires special system support and is likely to fail in
20495 spectacular ways.
20496
20497 -mabi=elfv2
20498 Change the current ABI to use the ELFv2 ABI. This is the default
20499 ABI for little-endian PowerPC 64-bit Linux. Overriding the default
20500 ABI requires special system support and is likely to fail in
20501 spectacular ways.
20502
20503 -mgnu-attribute
20504 -mno-gnu-attribute
20505 Emit .gnu_attribute assembly directives to set tag/value pairs in a
20506 .gnu.attributes section that specify ABI variations in function
20507 parameters or return values.
20508
20509 -mprototype
20510 -mno-prototype
20511 On System V.4 and embedded PowerPC systems assume that all calls to
20512 variable argument functions are properly prototyped. Otherwise,
20513 the compiler must insert an instruction before every non-prototyped
20514 call to set or clear bit 6 of the condition code register ("CR") to
20515 indicate whether floating-point values are passed in the floating-
20516 point registers in case the function takes variable arguments.
20517 With -mprototype, only calls to prototyped variable argument
20518 functions set or clear the bit.
20519
20520 -msim
20521 On embedded PowerPC systems, assume that the startup module is
20522 called sim-crt0.o and that the standard C libraries are libsim.a
20523 and libc.a. This is the default for powerpc-*-eabisim
20524 configurations.
20525
20526 -mmvme
20527 On embedded PowerPC systems, assume that the startup module is
20528 called crt0.o and the standard C libraries are libmvme.a and
20529 libc.a.
20530
20531 -mads
20532 On embedded PowerPC systems, assume that the startup module is
20533 called crt0.o and the standard C libraries are libads.a and libc.a.
20534
20535 -myellowknife
20536 On embedded PowerPC systems, assume that the startup module is
20537 called crt0.o and the standard C libraries are libyk.a and libc.a.
20538
20539 -mvxworks
20540 On System V.4 and embedded PowerPC systems, specify that you are
20541 compiling for a VxWorks system.
20542
20543 -memb
20544 On embedded PowerPC systems, set the "PPC_EMB" bit in the ELF flags
20545 header to indicate that eabi extended relocations are used.
20546
20547 -meabi
20548 -mno-eabi
20549 On System V.4 and embedded PowerPC systems do (do not) adhere to
20550 the Embedded Applications Binary Interface (EABI), which is a set
20551 of modifications to the System V.4 specifications. Selecting
20552 -meabi means that the stack is aligned to an 8-byte boundary, a
20553 function "__eabi" is called from "main" to set up the EABI
20554 environment, and the -msdata option can use both "r2" and "r13" to
20555 point to two separate small data areas. Selecting -mno-eabi means
20556 that the stack is aligned to a 16-byte boundary, no EABI
20557 initialization function is called from "main", and the -msdata
20558 option only uses "r13" to point to a single small data area. The
20559 -meabi option is on by default if you configured GCC using one of
20560 the powerpc*-*-eabi* options.
20561
20562 -msdata=eabi
20563 On System V.4 and embedded PowerPC systems, put small initialized
20564 "const" global and static data in the ".sdata2" section, which is
20565 pointed to by register "r2". Put small initialized non-"const"
20566 global and static data in the ".sdata" section, which is pointed to
20567 by register "r13". Put small uninitialized global and static data
20568 in the ".sbss" section, which is adjacent to the ".sdata" section.
20569 The -msdata=eabi option is incompatible with the -mrelocatable
20570 option. The -msdata=eabi option also sets the -memb option.
20571
20572 -msdata=sysv
20573 On System V.4 and embedded PowerPC systems, put small global and
20574 static data in the ".sdata" section, which is pointed to by
20575 register "r13". Put small uninitialized global and static data in
20576 the ".sbss" section, which is adjacent to the ".sdata" section.
20577 The -msdata=sysv option is incompatible with the -mrelocatable
20578 option.
20579
20580 -msdata=default
20581 -msdata
20582 On System V.4 and embedded PowerPC systems, if -meabi is used,
20583 compile code the same as -msdata=eabi, otherwise compile code the
20584 same as -msdata=sysv.
20585
20586 -msdata=data
20587 On System V.4 and embedded PowerPC systems, put small global data
20588 in the ".sdata" section. Put small uninitialized global data in
20589 the ".sbss" section. Do not use register "r13" to address small
20590 data however. This is the default behavior unless other -msdata
20591 options are used.
20592
20593 -msdata=none
20594 -mno-sdata
20595 On embedded PowerPC systems, put all initialized global and static
20596 data in the ".data" section, and all uninitialized data in the
20597 ".bss" section.
20598
20599 -mreadonly-in-sdata
20600 -mreadonly-in-sdata
20601 Put read-only objects in the ".sdata" section as well. This is the
20602 default.
20603
20604 -mblock-move-inline-limit=num
20605 Inline all block moves (such as calls to "memcpy" or structure
20606 copies) less than or equal to num bytes. The minimum value for num
20607 is 32 bytes on 32-bit targets and 64 bytes on 64-bit targets. The
20608 default value is target-specific.
20609
20610 -mblock-compare-inline-limit=num
20611 Generate non-looping inline code for all block compares (such as
20612 calls to "memcmp" or structure compares) less than or equal to num
20613 bytes. If num is 0, all inline expansion (non-loop and loop) of
20614 block compare is disabled. The default value is target-specific.
20615
20616 -mblock-compare-inline-loop-limit=num
20617 Generate an inline expansion using loop code for all block compares
20618 that are less than or equal to num bytes, but greater than the
20619 limit for non-loop inline block compare expansion. If the block
20620 length is not constant, at most num bytes will be compared before
20621 "memcmp" is called to compare the remainder of the block. The
20622 default value is target-specific.
20623
20624 -mstring-compare-inline-limit=num
20625 Generate at most num pairs of load instructions to compare the
20626 string inline. If the difference or end of string is not found at
20627 the end of the inline compare a call to "strcmp" or "strncmp" will
20628 take care of the rest of the comparison. The default is 8 pairs of
20629 loads, which will compare 64 bytes on a 64-bit target and 32 bytes
20630 on a 32-bit target.
20631
20632 -G num
20633 On embedded PowerPC systems, put global and static items less than
20634 or equal to num bytes into the small data or BSS sections instead
20635 of the normal data or BSS section. By default, num is 8. The -G
20636 num switch is also passed to the linker. All modules should be
20637 compiled with the same -G num value.
20638
20639 -mregnames
20640 -mno-regnames
20641 On System V.4 and embedded PowerPC systems do (do not) emit
20642 register names in the assembly language output using symbolic
20643 forms.
20644
20645 -mlongcall
20646 -mno-longcall
20647 By default assume that all calls are far away so that a longer and
20648 more expensive calling sequence is required. This is required for
20649 calls farther than 32 megabytes (33,554,432 bytes) from the current
20650 location. A short call is generated if the compiler knows the call
20651 cannot be that far away. This setting can be overridden by the
20652 "shortcall" function attribute, or by "#pragma longcall(0)".
20653
20654 Some linkers are capable of detecting out-of-range calls and
20655 generating glue code on the fly. On these systems, long calls are
20656 unnecessary and generate slower code. As of this writing, the AIX
20657 linker can do this, as can the GNU linker for PowerPC/64. It is
20658 planned to add this feature to the GNU linker for 32-bit PowerPC
20659 systems as well.
20660
20661 On Darwin/PPC systems, "#pragma longcall" generates "jbsr callee,
20662 L42", plus a branch island (glue code). The two target addresses
20663 represent the callee and the branch island. The Darwin/PPC linker
20664 prefers the first address and generates a "bl callee" if the PPC
20665 "bl" instruction reaches the callee directly; otherwise, the linker
20666 generates "bl L42" to call the branch island. The branch island is
20667 appended to the body of the calling function; it computes the full
20668 32-bit address of the callee and jumps to it.
20669
20670 On Mach-O (Darwin) systems, this option directs the compiler emit
20671 to the glue for every direct call, and the Darwin linker decides
20672 whether to use or discard it.
20673
20674 In the future, GCC may ignore all longcall specifications when the
20675 linker is known to generate glue.
20676
20677 -mtls-markers
20678 -mno-tls-markers
20679 Mark (do not mark) calls to "__tls_get_addr" with a relocation
20680 specifying the function argument. The relocation allows the linker
20681 to reliably associate function call with argument setup
20682 instructions for TLS optimization, which in turn allows GCC to
20683 better schedule the sequence.
20684
20685 -mrecip
20686 -mno-recip
20687 This option enables use of the reciprocal estimate and reciprocal
20688 square root estimate instructions with additional Newton-Raphson
20689 steps to increase precision instead of doing a divide or square
20690 root and divide for floating-point arguments. You should use the
20691 -ffast-math option when using -mrecip (or at least
20692 -funsafe-math-optimizations, -ffinite-math-only, -freciprocal-math
20693 and -fno-trapping-math). Note that while the throughput of the
20694 sequence is generally higher than the throughput of the non-
20695 reciprocal instruction, the precision of the sequence can be
20696 decreased by up to 2 ulp (i.e. the inverse of 1.0 equals
20697 0.99999994) for reciprocal square roots.
20698
20699 -mrecip=opt
20700 This option controls which reciprocal estimate instructions may be
20701 used. opt is a comma-separated list of options, which may be
20702 preceded by a "!" to invert the option:
20703
20704 all Enable all estimate instructions.
20705
20706 default
20707 Enable the default instructions, equivalent to -mrecip.
20708
20709 none
20710 Disable all estimate instructions, equivalent to -mno-recip.
20711
20712 div Enable the reciprocal approximation instructions for both
20713 single and double precision.
20714
20715 divf
20716 Enable the single-precision reciprocal approximation
20717 instructions.
20718
20719 divd
20720 Enable the double-precision reciprocal approximation
20721 instructions.
20722
20723 rsqrt
20724 Enable the reciprocal square root approximation instructions
20725 for both single and double precision.
20726
20727 rsqrtf
20728 Enable the single-precision reciprocal square root
20729 approximation instructions.
20730
20731 rsqrtd
20732 Enable the double-precision reciprocal square root
20733 approximation instructions.
20734
20735 So, for example, -mrecip=all,!rsqrtd enables all of the reciprocal
20736 estimate instructions, except for the "FRSQRTE", "XSRSQRTEDP", and
20737 "XVRSQRTEDP" instructions which handle the double-precision
20738 reciprocal square root calculations.
20739
20740 -mrecip-precision
20741 -mno-recip-precision
20742 Assume (do not assume) that the reciprocal estimate instructions
20743 provide higher-precision estimates than is mandated by the PowerPC
20744 ABI. Selecting -mcpu=power6, -mcpu=power7 or -mcpu=power8
20745 automatically selects -mrecip-precision. The double-precision
20746 square root estimate instructions are not generated by default on
20747 low-precision machines, since they do not provide an estimate that
20748 converges after three steps.
20749
20750 -mveclibabi=type
20751 Specifies the ABI type to use for vectorizing intrinsics using an
20752 external library. The only type supported at present is mass,
20753 which specifies to use IBM's Mathematical Acceleration Subsystem
20754 (MASS) libraries for vectorizing intrinsics using external
20755 libraries. GCC currently emits calls to "acosd2", "acosf4",
20756 "acoshd2", "acoshf4", "asind2", "asinf4", "asinhd2", "asinhf4",
20757 "atan2d2", "atan2f4", "atand2", "atanf4", "atanhd2", "atanhf4",
20758 "cbrtd2", "cbrtf4", "cosd2", "cosf4", "coshd2", "coshf4", "erfcd2",
20759 "erfcf4", "erfd2", "erff4", "exp2d2", "exp2f4", "expd2", "expf4",
20760 "expm1d2", "expm1f4", "hypotd2", "hypotf4", "lgammad2", "lgammaf4",
20761 "log10d2", "log10f4", "log1pd2", "log1pf4", "log2d2", "log2f4",
20762 "logd2", "logf4", "powd2", "powf4", "sind2", "sinf4", "sinhd2",
20763 "sinhf4", "sqrtd2", "sqrtf4", "tand2", "tanf4", "tanhd2", and
20764 "tanhf4" when generating code for power7. Both -ftree-vectorize
20765 and -funsafe-math-optimizations must also be enabled. The MASS
20766 libraries must be specified at link time.
20767
20768 -mfriz
20769 -mno-friz
20770 Generate (do not generate) the "friz" instruction when the
20771 -funsafe-math-optimizations option is used to optimize rounding of
20772 floating-point values to 64-bit integer and back to floating point.
20773 The "friz" instruction does not return the same value if the
20774 floating-point number is too large to fit in an integer.
20775
20776 -mpointers-to-nested-functions
20777 -mno-pointers-to-nested-functions
20778 Generate (do not generate) code to load up the static chain
20779 register ("r11") when calling through a pointer on AIX and 64-bit
20780 Linux systems where a function pointer points to a 3-word
20781 descriptor giving the function address, TOC value to be loaded in
20782 register "r2", and static chain value to be loaded in register
20783 "r11". The -mpointers-to-nested-functions is on by default. You
20784 cannot call through pointers to nested functions or pointers to
20785 functions compiled in other languages that use the static chain if
20786 you use -mno-pointers-to-nested-functions.
20787
20788 -msave-toc-indirect
20789 -mno-save-toc-indirect
20790 Generate (do not generate) code to save the TOC value in the
20791 reserved stack location in the function prologue if the function
20792 calls through a pointer on AIX and 64-bit Linux systems. If the
20793 TOC value is not saved in the prologue, it is saved just before the
20794 call through the pointer. The -mno-save-toc-indirect option is the
20795 default.
20796
20797 -mcompat-align-parm
20798 -mno-compat-align-parm
20799 Generate (do not generate) code to pass structure parameters with a
20800 maximum alignment of 64 bits, for compatibility with older versions
20801 of GCC.
20802
20803 Older versions of GCC (prior to 4.9.0) incorrectly did not align a
20804 structure parameter on a 128-bit boundary when that structure
20805 contained a member requiring 128-bit alignment. This is corrected
20806 in more recent versions of GCC. This option may be used to
20807 generate code that is compatible with functions compiled with older
20808 versions of GCC.
20809
20810 The -mno-compat-align-parm option is the default.
20811
20812 -mstack-protector-guard=guard
20813 -mstack-protector-guard-reg=reg
20814 -mstack-protector-guard-offset=offset
20815 -mstack-protector-guard-symbol=symbol
20816 Generate stack protection code using canary at guard. Supported
20817 locations are global for global canary or tls for per-thread canary
20818 in the TLS block (the default with GNU libc version 2.4 or later).
20819
20820 With the latter choice the options -mstack-protector-guard-reg=reg
20821 and -mstack-protector-guard-offset=offset furthermore specify which
20822 register to use as base register for reading the canary, and from
20823 what offset from that base register. The default for those is as
20824 specified in the relevant ABI.
20825 -mstack-protector-guard-symbol=symbol overrides the offset with a
20826 symbol reference to a canary in the TLS block.
20827
20828 RX Options
20829 These command-line options are defined for RX targets:
20830
20831 -m64bit-doubles
20832 -m32bit-doubles
20833 Make the "double" data type be 64 bits (-m64bit-doubles) or 32 bits
20834 (-m32bit-doubles) in size. The default is -m32bit-doubles. Note
20835 RX floating-point hardware only works on 32-bit values, which is
20836 why the default is -m32bit-doubles.
20837
20838 -fpu
20839 -nofpu
20840 Enables (-fpu) or disables (-nofpu) the use of RX floating-point
20841 hardware. The default is enabled for the RX600 series and disabled
20842 for the RX200 series.
20843
20844 Floating-point instructions are only generated for 32-bit floating-
20845 point values, however, so the FPU hardware is not used for doubles
20846 if the -m64bit-doubles option is used.
20847
20848 Note If the -fpu option is enabled then -funsafe-math-optimizations
20849 is also enabled automatically. This is because the RX FPU
20850 instructions are themselves unsafe.
20851
20852 -mcpu=name
20853 Selects the type of RX CPU to be targeted. Currently three types
20854 are supported, the generic RX600 and RX200 series hardware and the
20855 specific RX610 CPU. The default is RX600.
20856
20857 The only difference between RX600 and RX610 is that the RX610 does
20858 not support the "MVTIPL" instruction.
20859
20860 The RX200 series does not have a hardware floating-point unit and
20861 so -nofpu is enabled by default when this type is selected.
20862
20863 -mbig-endian-data
20864 -mlittle-endian-data
20865 Store data (but not code) in the big-endian format. The default is
20866 -mlittle-endian-data, i.e. to store data in the little-endian
20867 format.
20868
20869 -msmall-data-limit=N
20870 Specifies the maximum size in bytes of global and static variables
20871 which can be placed into the small data area. Using the small data
20872 area can lead to smaller and faster code, but the size of area is
20873 limited and it is up to the programmer to ensure that the area does
20874 not overflow. Also when the small data area is used one of the
20875 RX's registers (usually "r13") is reserved for use pointing to this
20876 area, so it is no longer available for use by the compiler. This
20877 could result in slower and/or larger code if variables are pushed
20878 onto the stack instead of being held in this register.
20879
20880 Note, common variables (variables that have not been initialized)
20881 and constants are not placed into the small data area as they are
20882 assigned to other sections in the output executable.
20883
20884 The default value is zero, which disables this feature. Note, this
20885 feature is not enabled by default with higher optimization levels
20886 (-O2 etc) because of the potentially detrimental effects of
20887 reserving a register. It is up to the programmer to experiment and
20888 discover whether this feature is of benefit to their program. See
20889 the description of the -mpid option for a description of how the
20890 actual register to hold the small data area pointer is chosen.
20891
20892 -msim
20893 -mno-sim
20894 Use the simulator runtime. The default is to use the libgloss
20895 board-specific runtime.
20896
20897 -mas100-syntax
20898 -mno-as100-syntax
20899 When generating assembler output use a syntax that is compatible
20900 with Renesas's AS100 assembler. This syntax can also be handled by
20901 the GAS assembler, but it has some restrictions so it is not
20902 generated by default.
20903
20904 -mmax-constant-size=N
20905 Specifies the maximum size, in bytes, of a constant that can be
20906 used as an operand in a RX instruction. Although the RX
20907 instruction set does allow constants of up to 4 bytes in length to
20908 be used in instructions, a longer value equates to a longer
20909 instruction. Thus in some circumstances it can be beneficial to
20910 restrict the size of constants that are used in instructions.
20911 Constants that are too big are instead placed into a constant pool
20912 and referenced via register indirection.
20913
20914 The value N can be between 0 and 4. A value of 0 (the default) or
20915 4 means that constants of any size are allowed.
20916
20917 -mrelax
20918 Enable linker relaxation. Linker relaxation is a process whereby
20919 the linker attempts to reduce the size of a program by finding
20920 shorter versions of various instructions. Disabled by default.
20921
20922 -mint-register=N
20923 Specify the number of registers to reserve for fast interrupt
20924 handler functions. The value N can be between 0 and 4. A value of
20925 1 means that register "r13" is reserved for the exclusive use of
20926 fast interrupt handlers. A value of 2 reserves "r13" and "r12". A
20927 value of 3 reserves "r13", "r12" and "r11", and a value of 4
20928 reserves "r13" through "r10". A value of 0, the default, does not
20929 reserve any registers.
20930
20931 -msave-acc-in-interrupts
20932 Specifies that interrupt handler functions should preserve the
20933 accumulator register. This is only necessary if normal code might
20934 use the accumulator register, for example because it performs
20935 64-bit multiplications. The default is to ignore the accumulator
20936 as this makes the interrupt handlers faster.
20937
20938 -mpid
20939 -mno-pid
20940 Enables the generation of position independent data. When enabled
20941 any access to constant data is done via an offset from a base
20942 address held in a register. This allows the location of constant
20943 data to be determined at run time without requiring the executable
20944 to be relocated, which is a benefit to embedded applications with
20945 tight memory constraints. Data that can be modified is not
20946 affected by this option.
20947
20948 Note, using this feature reserves a register, usually "r13", for
20949 the constant data base address. This can result in slower and/or
20950 larger code, especially in complicated functions.
20951
20952 The actual register chosen to hold the constant data base address
20953 depends upon whether the -msmall-data-limit and/or the
20954 -mint-register command-line options are enabled. Starting with
20955 register "r13" and proceeding downwards, registers are allocated
20956 first to satisfy the requirements of -mint-register, then -mpid and
20957 finally -msmall-data-limit. Thus it is possible for the small data
20958 area register to be "r8" if both -mint-register=4 and -mpid are
20959 specified on the command line.
20960
20961 By default this feature is not enabled. The default can be
20962 restored via the -mno-pid command-line option.
20963
20964 -mno-warn-multiple-fast-interrupts
20965 -mwarn-multiple-fast-interrupts
20966 Prevents GCC from issuing a warning message if it finds more than
20967 one fast interrupt handler when it is compiling a file. The
20968 default is to issue a warning for each extra fast interrupt handler
20969 found, as the RX only supports one such interrupt.
20970
20971 -mallow-string-insns
20972 -mno-allow-string-insns
20973 Enables or disables the use of the string manipulation instructions
20974 "SMOVF", "SCMPU", "SMOVB", "SMOVU", "SUNTIL" "SWHILE" and also the
20975 "RMPA" instruction. These instructions may prefetch data, which is
20976 not safe to do if accessing an I/O register. (See section 12.2.7
20977 of the RX62N Group User's Manual for more information).
20978
20979 The default is to allow these instructions, but it is not possible
20980 for GCC to reliably detect all circumstances where a string
20981 instruction might be used to access an I/O register, so their use
20982 cannot be disabled automatically. Instead it is reliant upon the
20983 programmer to use the -mno-allow-string-insns option if their
20984 program accesses I/O space.
20985
20986 When the instructions are enabled GCC defines the C preprocessor
20987 symbol "__RX_ALLOW_STRING_INSNS__", otherwise it defines the symbol
20988 "__RX_DISALLOW_STRING_INSNS__".
20989
20990 -mjsr
20991 -mno-jsr
20992 Use only (or not only) "JSR" instructions to access functions.
20993 This option can be used when code size exceeds the range of "BSR"
20994 instructions. Note that -mno-jsr does not mean to not use "JSR"
20995 but instead means that any type of branch may be used.
20996
20997 Note: The generic GCC command-line option -ffixed-reg has special
20998 significance to the RX port when used with the "interrupt" function
20999 attribute. This attribute indicates a function intended to process
21000 fast interrupts. GCC ensures that it only uses the registers "r10",
21001 "r11", "r12" and/or "r13" and only provided that the normal use of the
21002 corresponding registers have been restricted via the -ffixed-reg or
21003 -mint-register command-line options.
21004
21005 S/390 and zSeries Options
21006 These are the -m options defined for the S/390 and zSeries
21007 architecture.
21008
21009 -mhard-float
21010 -msoft-float
21011 Use (do not use) the hardware floating-point instructions and
21012 registers for floating-point operations. When -msoft-float is
21013 specified, functions in libgcc.a are used to perform floating-point
21014 operations. When -mhard-float is specified, the compiler generates
21015 IEEE floating-point instructions. This is the default.
21016
21017 -mhard-dfp
21018 -mno-hard-dfp
21019 Use (do not use) the hardware decimal-floating-point instructions
21020 for decimal-floating-point operations. When -mno-hard-dfp is
21021 specified, functions in libgcc.a are used to perform decimal-
21022 floating-point operations. When -mhard-dfp is specified, the
21023 compiler generates decimal-floating-point hardware instructions.
21024 This is the default for -march=z9-ec or higher.
21025
21026 -mlong-double-64
21027 -mlong-double-128
21028 These switches control the size of "long double" type. A size of 64
21029 bits makes the "long double" type equivalent to the "double" type.
21030 This is the default.
21031
21032 -mbackchain
21033 -mno-backchain
21034 Store (do not store) the address of the caller's frame as backchain
21035 pointer into the callee's stack frame. A backchain may be needed
21036 to allow debugging using tools that do not understand DWARF call
21037 frame information. When -mno-packed-stack is in effect, the
21038 backchain pointer is stored at the bottom of the stack frame; when
21039 -mpacked-stack is in effect, the backchain is placed into the
21040 topmost word of the 96/160 byte register save area.
21041
21042 In general, code compiled with -mbackchain is call-compatible with
21043 code compiled with -mmo-backchain; however, use of the backchain
21044 for debugging purposes usually requires that the whole binary is
21045 built with -mbackchain. Note that the combination of -mbackchain,
21046 -mpacked-stack and -mhard-float is not supported. In order to
21047 build a linux kernel use -msoft-float.
21048
21049 The default is to not maintain the backchain.
21050
21051 -mpacked-stack
21052 -mno-packed-stack
21053 Use (do not use) the packed stack layout. When -mno-packed-stack
21054 is specified, the compiler uses the all fields of the 96/160 byte
21055 register save area only for their default purpose; unused fields
21056 still take up stack space. When -mpacked-stack is specified,
21057 register save slots are densely packed at the top of the register
21058 save area; unused space is reused for other purposes, allowing for
21059 more efficient use of the available stack space. However, when
21060 -mbackchain is also in effect, the topmost word of the save area is
21061 always used to store the backchain, and the return address register
21062 is always saved two words below the backchain.
21063
21064 As long as the stack frame backchain is not used, code generated
21065 with -mpacked-stack is call-compatible with code generated with
21066 -mno-packed-stack. Note that some non-FSF releases of GCC 2.95 for
21067 S/390 or zSeries generated code that uses the stack frame backchain
21068 at run time, not just for debugging purposes. Such code is not
21069 call-compatible with code compiled with -mpacked-stack. Also, note
21070 that the combination of -mbackchain, -mpacked-stack and
21071 -mhard-float is not supported. In order to build a linux kernel
21072 use -msoft-float.
21073
21074 The default is to not use the packed stack layout.
21075
21076 -msmall-exec
21077 -mno-small-exec
21078 Generate (or do not generate) code using the "bras" instruction to
21079 do subroutine calls. This only works reliably if the total
21080 executable size does not exceed 64k. The default is to use the
21081 "basr" instruction instead, which does not have this limitation.
21082
21083 -m64
21084 -m31
21085 When -m31 is specified, generate code compliant to the GNU/Linux
21086 for S/390 ABI. When -m64 is specified, generate code compliant to
21087 the GNU/Linux for zSeries ABI. This allows GCC in particular to
21088 generate 64-bit instructions. For the s390 targets, the default is
21089 -m31, while the s390x targets default to -m64.
21090
21091 -mzarch
21092 -mesa
21093 When -mzarch is specified, generate code using the instructions
21094 available on z/Architecture. When -mesa is specified, generate
21095 code using the instructions available on ESA/390. Note that -mesa
21096 is not possible with -m64. When generating code compliant to the
21097 GNU/Linux for S/390 ABI, the default is -mesa. When generating
21098 code compliant to the GNU/Linux for zSeries ABI, the default is
21099 -mzarch.
21100
21101 -mhtm
21102 -mno-htm
21103 The -mhtm option enables a set of builtins making use of
21104 instructions available with the transactional execution facility
21105 introduced with the IBM zEnterprise EC12 machine generation S/390
21106 System z Built-in Functions. -mhtm is enabled by default when
21107 using -march=zEC12.
21108
21109 -mvx
21110 -mno-vx
21111 When -mvx is specified, generate code using the instructions
21112 available with the vector extension facility introduced with the
21113 IBM z13 machine generation. This option changes the ABI for some
21114 vector type values with regard to alignment and calling
21115 conventions. In case vector type values are being used in an ABI-
21116 relevant context a GAS .gnu_attribute command will be added to mark
21117 the resulting binary with the ABI used. -mvx is enabled by default
21118 when using -march=z13.
21119
21120 -mzvector
21121 -mno-zvector
21122 The -mzvector option enables vector language extensions and
21123 builtins using instructions available with the vector extension
21124 facility introduced with the IBM z13 machine generation. This
21125 option adds support for vector to be used as a keyword to define
21126 vector type variables and arguments. vector is only available when
21127 GNU extensions are enabled. It will not be expanded when
21128 requesting strict standard compliance e.g. with -std=c99. In
21129 addition to the GCC low-level builtins -mzvector enables a set of
21130 builtins added for compatibility with AltiVec-style implementations
21131 like Power and Cell. In order to make use of these builtins the
21132 header file vecintrin.h needs to be included. -mzvector is
21133 disabled by default.
21134
21135 -mmvcle
21136 -mno-mvcle
21137 Generate (or do not generate) code using the "mvcle" instruction to
21138 perform block moves. When -mno-mvcle is specified, use a "mvc"
21139 loop instead. This is the default unless optimizing for size.
21140
21141 -mdebug
21142 -mno-debug
21143 Print (or do not print) additional debug information when
21144 compiling. The default is to not print debug information.
21145
21146 -march=cpu-type
21147 Generate code that runs on cpu-type, which is the name of a system
21148 representing a certain processor type. Possible values for cpu-
21149 type are z900/arch5, z990/arch6, z9-109, z9-ec/arch7, z10/arch8,
21150 z196/arch9, zEC12, z13/arch11, z14/arch12, and native.
21151
21152 The default is -march=z900. g5/arch3 and g6 are deprecated and
21153 will be removed with future releases.
21154
21155 Specifying native as cpu type can be used to select the best
21156 architecture option for the host processor. -march=native has no
21157 effect if GCC does not recognize the processor.
21158
21159 -mtune=cpu-type
21160 Tune to cpu-type everything applicable about the generated code,
21161 except for the ABI and the set of available instructions. The list
21162 of cpu-type values is the same as for -march. The default is the
21163 value used for -march.
21164
21165 -mtpf-trace
21166 -mno-tpf-trace
21167 Generate code that adds (does not add) in TPF OS specific branches
21168 to trace routines in the operating system. This option is off by
21169 default, even when compiling for the TPF OS.
21170
21171 -mfused-madd
21172 -mno-fused-madd
21173 Generate code that uses (does not use) the floating-point multiply
21174 and accumulate instructions. These instructions are generated by
21175 default if hardware floating point is used.
21176
21177 -mwarn-framesize=framesize
21178 Emit a warning if the current function exceeds the given frame
21179 size. Because this is a compile-time check it doesn't need to be a
21180 real problem when the program runs. It is intended to identify
21181 functions that most probably cause a stack overflow. It is useful
21182 to be used in an environment with limited stack size e.g. the linux
21183 kernel.
21184
21185 -mwarn-dynamicstack
21186 Emit a warning if the function calls "alloca" or uses dynamically-
21187 sized arrays. This is generally a bad idea with a limited stack
21188 size.
21189
21190 -mstack-guard=stack-guard
21191 -mstack-size=stack-size
21192 If these options are provided the S/390 back end emits additional
21193 instructions in the function prologue that trigger a trap if the
21194 stack size is stack-guard bytes above the stack-size (remember that
21195 the stack on S/390 grows downward). If the stack-guard option is
21196 omitted the smallest power of 2 larger than the frame size of the
21197 compiled function is chosen. These options are intended to be used
21198 to help debugging stack overflow problems. The additionally
21199 emitted code causes only little overhead and hence can also be used
21200 in production-like systems without greater performance degradation.
21201 The given values have to be exact powers of 2 and stack-size has to
21202 be greater than stack-guard without exceeding 64k. In order to be
21203 efficient the extra code makes the assumption that the stack starts
21204 at an address aligned to the value given by stack-size. The stack-
21205 guard option can only be used in conjunction with stack-size.
21206
21207 -mhotpatch=pre-halfwords,post-halfwords
21208 If the hotpatch option is enabled, a "hot-patching" function
21209 prologue is generated for all functions in the compilation unit.
21210 The funtion label is prepended with the given number of two-byte
21211 NOP instructions (pre-halfwords, maximum 1000000). After the
21212 label, 2 * post-halfwords bytes are appended, using the largest NOP
21213 like instructions the architecture allows (maximum 1000000).
21214
21215 If both arguments are zero, hotpatching is disabled.
21216
21217 This option can be overridden for individual functions with the
21218 "hotpatch" attribute.
21219
21220 Score Options
21221 These options are defined for Score implementations:
21222
21223 -meb
21224 Compile code for big-endian mode. This is the default.
21225
21226 -mel
21227 Compile code for little-endian mode.
21228
21229 -mnhwloop
21230 Disable generation of "bcnz" instructions.
21231
21232 -muls
21233 Enable generation of unaligned load and store instructions.
21234
21235 -mmac
21236 Enable the use of multiply-accumulate instructions. Disabled by
21237 default.
21238
21239 -mscore5
21240 Specify the SCORE5 as the target architecture.
21241
21242 -mscore5u
21243 Specify the SCORE5U of the target architecture.
21244
21245 -mscore7
21246 Specify the SCORE7 as the target architecture. This is the default.
21247
21248 -mscore7d
21249 Specify the SCORE7D as the target architecture.
21250
21251 SH Options
21252 These -m options are defined for the SH implementations:
21253
21254 -m1 Generate code for the SH1.
21255
21256 -m2 Generate code for the SH2.
21257
21258 -m2e
21259 Generate code for the SH2e.
21260
21261 -m2a-nofpu
21262 Generate code for the SH2a without FPU, or for a SH2a-FPU in such a
21263 way that the floating-point unit is not used.
21264
21265 -m2a-single-only
21266 Generate code for the SH2a-FPU, in such a way that no double-
21267 precision floating-point operations are used.
21268
21269 -m2a-single
21270 Generate code for the SH2a-FPU assuming the floating-point unit is
21271 in single-precision mode by default.
21272
21273 -m2a
21274 Generate code for the SH2a-FPU assuming the floating-point unit is
21275 in double-precision mode by default.
21276
21277 -m3 Generate code for the SH3.
21278
21279 -m3e
21280 Generate code for the SH3e.
21281
21282 -m4-nofpu
21283 Generate code for the SH4 without a floating-point unit.
21284
21285 -m4-single-only
21286 Generate code for the SH4 with a floating-point unit that only
21287 supports single-precision arithmetic.
21288
21289 -m4-single
21290 Generate code for the SH4 assuming the floating-point unit is in
21291 single-precision mode by default.
21292
21293 -m4 Generate code for the SH4.
21294
21295 -m4-100
21296 Generate code for SH4-100.
21297
21298 -m4-100-nofpu
21299 Generate code for SH4-100 in such a way that the floating-point
21300 unit is not used.
21301
21302 -m4-100-single
21303 Generate code for SH4-100 assuming the floating-point unit is in
21304 single-precision mode by default.
21305
21306 -m4-100-single-only
21307 Generate code for SH4-100 in such a way that no double-precision
21308 floating-point operations are used.
21309
21310 -m4-200
21311 Generate code for SH4-200.
21312
21313 -m4-200-nofpu
21314 Generate code for SH4-200 without in such a way that the floating-
21315 point unit is not used.
21316
21317 -m4-200-single
21318 Generate code for SH4-200 assuming the floating-point unit is in
21319 single-precision mode by default.
21320
21321 -m4-200-single-only
21322 Generate code for SH4-200 in such a way that no double-precision
21323 floating-point operations are used.
21324
21325 -m4-300
21326 Generate code for SH4-300.
21327
21328 -m4-300-nofpu
21329 Generate code for SH4-300 without in such a way that the floating-
21330 point unit is not used.
21331
21332 -m4-300-single
21333 Generate code for SH4-300 in such a way that no double-precision
21334 floating-point operations are used.
21335
21336 -m4-300-single-only
21337 Generate code for SH4-300 in such a way that no double-precision
21338 floating-point operations are used.
21339
21340 -m4-340
21341 Generate code for SH4-340 (no MMU, no FPU).
21342
21343 -m4-500
21344 Generate code for SH4-500 (no FPU). Passes -isa=sh4-nofpu to the
21345 assembler.
21346
21347 -m4a-nofpu
21348 Generate code for the SH4al-dsp, or for a SH4a in such a way that
21349 the floating-point unit is not used.
21350
21351 -m4a-single-only
21352 Generate code for the SH4a, in such a way that no double-precision
21353 floating-point operations are used.
21354
21355 -m4a-single
21356 Generate code for the SH4a assuming the floating-point unit is in
21357 single-precision mode by default.
21358
21359 -m4a
21360 Generate code for the SH4a.
21361
21362 -m4al
21363 Same as -m4a-nofpu, except that it implicitly passes -dsp to the
21364 assembler. GCC doesn't generate any DSP instructions at the
21365 moment.
21366
21367 -mb Compile code for the processor in big-endian mode.
21368
21369 -ml Compile code for the processor in little-endian mode.
21370
21371 -mdalign
21372 Align doubles at 64-bit boundaries. Note that this changes the
21373 calling conventions, and thus some functions from the standard C
21374 library do not work unless you recompile it first with -mdalign.
21375
21376 -mrelax
21377 Shorten some address references at link time, when possible; uses
21378 the linker option -relax.
21379
21380 -mbigtable
21381 Use 32-bit offsets in "switch" tables. The default is to use
21382 16-bit offsets.
21383
21384 -mbitops
21385 Enable the use of bit manipulation instructions on SH2A.
21386
21387 -mfmovd
21388 Enable the use of the instruction "fmovd". Check -mdalign for
21389 alignment constraints.
21390
21391 -mrenesas
21392 Comply with the calling conventions defined by Renesas.
21393
21394 -mno-renesas
21395 Comply with the calling conventions defined for GCC before the
21396 Renesas conventions were available. This option is the default for
21397 all targets of the SH toolchain.
21398
21399 -mnomacsave
21400 Mark the "MAC" register as call-clobbered, even if -mrenesas is
21401 given.
21402
21403 -mieee
21404 -mno-ieee
21405 Control the IEEE compliance of floating-point comparisons, which
21406 affects the handling of cases where the result of a comparison is
21407 unordered. By default -mieee is implicitly enabled. If
21408 -ffinite-math-only is enabled -mno-ieee is implicitly set, which
21409 results in faster floating-point greater-equal and less-equal
21410 comparisons. The implicit settings can be overridden by specifying
21411 either -mieee or -mno-ieee.
21412
21413 -minline-ic_invalidate
21414 Inline code to invalidate instruction cache entries after setting
21415 up nested function trampolines. This option has no effect if
21416 -musermode is in effect and the selected code generation option
21417 (e.g. -m4) does not allow the use of the "icbi" instruction. If
21418 the selected code generation option does not allow the use of the
21419 "icbi" instruction, and -musermode is not in effect, the inlined
21420 code manipulates the instruction cache address array directly with
21421 an associative write. This not only requires privileged mode at
21422 run time, but it also fails if the cache line had been mapped via
21423 the TLB and has become unmapped.
21424
21425 -misize
21426 Dump instruction size and location in the assembly code.
21427
21428 -mpadstruct
21429 This option is deprecated. It pads structures to multiple of 4
21430 bytes, which is incompatible with the SH ABI.
21431
21432 -matomic-model=model
21433 Sets the model of atomic operations and additional parameters as a
21434 comma separated list. For details on the atomic built-in functions
21435 see __atomic Builtins. The following models and parameters are
21436 supported:
21437
21438 none
21439 Disable compiler generated atomic sequences and emit library
21440 calls for atomic operations. This is the default if the target
21441 is not "sh*-*-linux*".
21442
21443 soft-gusa
21444 Generate GNU/Linux compatible gUSA software atomic sequences
21445 for the atomic built-in functions. The generated atomic
21446 sequences require additional support from the
21447 interrupt/exception handling code of the system and are only
21448 suitable for SH3* and SH4* single-core systems. This option is
21449 enabled by default when the target is "sh*-*-linux*" and SH3*
21450 or SH4*. When the target is SH4A, this option also partially
21451 utilizes the hardware atomic instructions "movli.l" and
21452 "movco.l" to create more efficient code, unless strict is
21453 specified.
21454
21455 soft-tcb
21456 Generate software atomic sequences that use a variable in the
21457 thread control block. This is a variation of the gUSA
21458 sequences which can also be used on SH1* and SH2* targets. The
21459 generated atomic sequences require additional support from the
21460 interrupt/exception handling code of the system and are only
21461 suitable for single-core systems. When using this model, the
21462 gbr-offset= parameter has to be specified as well.
21463
21464 soft-imask
21465 Generate software atomic sequences that temporarily disable
21466 interrupts by setting "SR.IMASK = 1111". This model works only
21467 when the program runs in privileged mode and is only suitable
21468 for single-core systems. Additional support from the
21469 interrupt/exception handling code of the system is not
21470 required. This model is enabled by default when the target is
21471 "sh*-*-linux*" and SH1* or SH2*.
21472
21473 hard-llcs
21474 Generate hardware atomic sequences using the "movli.l" and
21475 "movco.l" instructions only. This is only available on SH4A
21476 and is suitable for multi-core systems. Since the hardware
21477 instructions support only 32 bit atomic variables access to 8
21478 or 16 bit variables is emulated with 32 bit accesses. Code
21479 compiled with this option is also compatible with other
21480 software atomic model interrupt/exception handling systems if
21481 executed on an SH4A system. Additional support from the
21482 interrupt/exception handling code of the system is not required
21483 for this model.
21484
21485 gbr-offset=
21486 This parameter specifies the offset in bytes of the variable in
21487 the thread control block structure that should be used by the
21488 generated atomic sequences when the soft-tcb model has been
21489 selected. For other models this parameter is ignored. The
21490 specified value must be an integer multiple of four and in the
21491 range 0-1020.
21492
21493 strict
21494 This parameter prevents mixed usage of multiple atomic models,
21495 even if they are compatible, and makes the compiler generate
21496 atomic sequences of the specified model only.
21497
21498 -mtas
21499 Generate the "tas.b" opcode for "__atomic_test_and_set". Notice
21500 that depending on the particular hardware and software
21501 configuration this can degrade overall performance due to the
21502 operand cache line flushes that are implied by the "tas.b"
21503 instruction. On multi-core SH4A processors the "tas.b" instruction
21504 must be used with caution since it can result in data corruption
21505 for certain cache configurations.
21506
21507 -mprefergot
21508 When generating position-independent code, emit function calls
21509 using the Global Offset Table instead of the Procedure Linkage
21510 Table.
21511
21512 -musermode
21513 -mno-usermode
21514 Don't allow (allow) the compiler generating privileged mode code.
21515 Specifying -musermode also implies -mno-inline-ic_invalidate if the
21516 inlined code would not work in user mode. -musermode is the
21517 default when the target is "sh*-*-linux*". If the target is SH1*
21518 or SH2* -musermode has no effect, since there is no user mode.
21519
21520 -multcost=number
21521 Set the cost to assume for a multiply insn.
21522
21523 -mdiv=strategy
21524 Set the division strategy to be used for integer division
21525 operations. strategy can be one of:
21526
21527 call-div1
21528 Calls a library function that uses the single-step division
21529 instruction "div1" to perform the operation. Division by zero
21530 calculates an unspecified result and does not trap. This is
21531 the default except for SH4, SH2A and SHcompact.
21532
21533 call-fp
21534 Calls a library function that performs the operation in double
21535 precision floating point. Division by zero causes a floating-
21536 point exception. This is the default for SHcompact with FPU.
21537 Specifying this for targets that do not have a double precision
21538 FPU defaults to "call-div1".
21539
21540 call-table
21541 Calls a library function that uses a lookup table for small
21542 divisors and the "div1" instruction with case distinction for
21543 larger divisors. Division by zero calculates an unspecified
21544 result and does not trap. This is the default for SH4.
21545 Specifying this for targets that do not have dynamic shift
21546 instructions defaults to "call-div1".
21547
21548 When a division strategy has not been specified the default
21549 strategy is selected based on the current target. For SH2A the
21550 default strategy is to use the "divs" and "divu" instructions
21551 instead of library function calls.
21552
21553 -maccumulate-outgoing-args
21554 Reserve space once for outgoing arguments in the function prologue
21555 rather than around each call. Generally beneficial for performance
21556 and size. Also needed for unwinding to avoid changing the stack
21557 frame around conditional code.
21558
21559 -mdivsi3_libfunc=name
21560 Set the name of the library function used for 32-bit signed
21561 division to name. This only affects the name used in the call
21562 division strategies, and the compiler still expects the same sets
21563 of input/output/clobbered registers as if this option were not
21564 present.
21565
21566 -mfixed-range=register-range
21567 Generate code treating the given register range as fixed registers.
21568 A fixed register is one that the register allocator can not use.
21569 This is useful when compiling kernel code. A register range is
21570 specified as two registers separated by a dash. Multiple register
21571 ranges can be specified separated by a comma.
21572
21573 -mbranch-cost=num
21574 Assume num to be the cost for a branch instruction. Higher numbers
21575 make the compiler try to generate more branch-free code if
21576 possible. If not specified the value is selected depending on the
21577 processor type that is being compiled for.
21578
21579 -mzdcbranch
21580 -mno-zdcbranch
21581 Assume (do not assume) that zero displacement conditional branch
21582 instructions "bt" and "bf" are fast. If -mzdcbranch is specified,
21583 the compiler prefers zero displacement branch code sequences. This
21584 is enabled by default when generating code for SH4 and SH4A. It
21585 can be explicitly disabled by specifying -mno-zdcbranch.
21586
21587 -mcbranch-force-delay-slot
21588 Force the usage of delay slots for conditional branches, which
21589 stuffs the delay slot with a "nop" if a suitable instruction cannot
21590 be found. By default this option is disabled. It can be enabled
21591 to work around hardware bugs as found in the original SH7055.
21592
21593 -mfused-madd
21594 -mno-fused-madd
21595 Generate code that uses (does not use) the floating-point multiply
21596 and accumulate instructions. These instructions are generated by
21597 default if hardware floating point is used. The machine-dependent
21598 -mfused-madd option is now mapped to the machine-independent
21599 -ffp-contract=fast option, and -mno-fused-madd is mapped to
21600 -ffp-contract=off.
21601
21602 -mfsca
21603 -mno-fsca
21604 Allow or disallow the compiler to emit the "fsca" instruction for
21605 sine and cosine approximations. The option -mfsca must be used in
21606 combination with -funsafe-math-optimizations. It is enabled by
21607 default when generating code for SH4A. Using -mno-fsca disables
21608 sine and cosine approximations even if -funsafe-math-optimizations
21609 is in effect.
21610
21611 -mfsrra
21612 -mno-fsrra
21613 Allow or disallow the compiler to emit the "fsrra" instruction for
21614 reciprocal square root approximations. The option -mfsrra must be
21615 used in combination with -funsafe-math-optimizations and
21616 -ffinite-math-only. It is enabled by default when generating code
21617 for SH4A. Using -mno-fsrra disables reciprocal square root
21618 approximations even if -funsafe-math-optimizations and
21619 -ffinite-math-only are in effect.
21620
21621 -mpretend-cmove
21622 Prefer zero-displacement conditional branches for conditional move
21623 instruction patterns. This can result in faster code on the SH4
21624 processor.
21625
21626 -mfdpic
21627 Generate code using the FDPIC ABI.
21628
21629 Solaris 2 Options
21630 These -m options are supported on Solaris 2:
21631
21632 -mclear-hwcap
21633 -mclear-hwcap tells the compiler to remove the hardware
21634 capabilities generated by the Solaris assembler. This is only
21635 necessary when object files use ISA extensions not supported by the
21636 current machine, but check at runtime whether or not to use them.
21637
21638 -mimpure-text
21639 -mimpure-text, used in addition to -shared, tells the compiler to
21640 not pass -z text to the linker when linking a shared object. Using
21641 this option, you can link position-dependent code into a shared
21642 object.
21643
21644 -mimpure-text suppresses the "relocations remain against
21645 allocatable but non-writable sections" linker error message.
21646 However, the necessary relocations trigger copy-on-write, and the
21647 shared object is not actually shared across processes. Instead of
21648 using -mimpure-text, you should compile all source code with -fpic
21649 or -fPIC.
21650
21651 These switches are supported in addition to the above on Solaris 2:
21652
21653 -pthreads
21654 This is a synonym for -pthread.
21655
21656 SPARC Options
21657 These -m options are supported on the SPARC:
21658
21659 -mno-app-regs
21660 -mapp-regs
21661 Specify -mapp-regs to generate output using the global registers 2
21662 through 4, which the SPARC SVR4 ABI reserves for applications.
21663 Like the global register 1, each global register 2 through 4 is
21664 then treated as an allocable register that is clobbered by function
21665 calls. This is the default.
21666
21667 To be fully SVR4 ABI-compliant at the cost of some performance
21668 loss, specify -mno-app-regs. You should compile libraries and
21669 system software with this option.
21670
21671 -mflat
21672 -mno-flat
21673 With -mflat, the compiler does not generate save/restore
21674 instructions and uses a "flat" or single register window model.
21675 This model is compatible with the regular register window model.
21676 The local registers and the input registers (0--5) are still
21677 treated as "call-saved" registers and are saved on the stack as
21678 needed.
21679
21680 With -mno-flat (the default), the compiler generates save/restore
21681 instructions (except for leaf functions). This is the normal
21682 operating mode.
21683
21684 -mfpu
21685 -mhard-float
21686 Generate output containing floating-point instructions. This is
21687 the default.
21688
21689 -mno-fpu
21690 -msoft-float
21691 Generate output containing library calls for floating point.
21692 Warning: the requisite libraries are not available for all SPARC
21693 targets. Normally the facilities of the machine's usual C compiler
21694 are used, but this cannot be done directly in cross-compilation.
21695 You must make your own arrangements to provide suitable library
21696 functions for cross-compilation. The embedded targets sparc-*-aout
21697 and sparclite-*-* do provide software floating-point support.
21698
21699 -msoft-float changes the calling convention in the output file;
21700 therefore, it is only useful if you compile all of a program with
21701 this option. In particular, you need to compile libgcc.a, the
21702 library that comes with GCC, with -msoft-float in order for this to
21703 work.
21704
21705 -mhard-quad-float
21706 Generate output containing quad-word (long double) floating-point
21707 instructions.
21708
21709 -msoft-quad-float
21710 Generate output containing library calls for quad-word (long
21711 double) floating-point instructions. The functions called are
21712 those specified in the SPARC ABI. This is the default.
21713
21714 As of this writing, there are no SPARC implementations that have
21715 hardware support for the quad-word floating-point instructions.
21716 They all invoke a trap handler for one of these instructions, and
21717 then the trap handler emulates the effect of the instruction.
21718 Because of the trap handler overhead, this is much slower than
21719 calling the ABI library routines. Thus the -msoft-quad-float
21720 option is the default.
21721
21722 -mno-unaligned-doubles
21723 -munaligned-doubles
21724 Assume that doubles have 8-byte alignment. This is the default.
21725
21726 With -munaligned-doubles, GCC assumes that doubles have 8-byte
21727 alignment only if they are contained in another type, or if they
21728 have an absolute address. Otherwise, it assumes they have 4-byte
21729 alignment. Specifying this option avoids some rare compatibility
21730 problems with code generated by other compilers. It is not the
21731 default because it results in a performance loss, especially for
21732 floating-point code.
21733
21734 -muser-mode
21735 -mno-user-mode
21736 Do not generate code that can only run in supervisor mode. This is
21737 relevant only for the "casa" instruction emitted for the LEON3
21738 processor. This is the default.
21739
21740 -mfaster-structs
21741 -mno-faster-structs
21742 With -mfaster-structs, the compiler assumes that structures should
21743 have 8-byte alignment. This enables the use of pairs of "ldd" and
21744 "std" instructions for copies in structure assignment, in place of
21745 twice as many "ld" and "st" pairs. However, the use of this
21746 changed alignment directly violates the SPARC ABI. Thus, it's
21747 intended only for use on targets where the developer acknowledges
21748 that their resulting code is not directly in line with the rules of
21749 the ABI.
21750
21751 -mstd-struct-return
21752 -mno-std-struct-return
21753 With -mstd-struct-return, the compiler generates checking code in
21754 functions returning structures or unions to detect size mismatches
21755 between the two sides of function calls, as per the 32-bit ABI.
21756
21757 The default is -mno-std-struct-return. This option has no effect
21758 in 64-bit mode.
21759
21760 -mlra
21761 -mno-lra
21762 Enable Local Register Allocation. This is the default for SPARC
21763 since GCC 7 so -mno-lra needs to be passed to get old Reload.
21764
21765 -mcpu=cpu_type
21766 Set the instruction set, register set, and instruction scheduling
21767 parameters for machine type cpu_type. Supported values for
21768 cpu_type are v7, cypress, v8, supersparc, hypersparc, leon, leon3,
21769 leon3v7, sparclite, f930, f934, sparclite86x, sparclet, tsc701, v9,
21770 ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4,
21771 niagara7 and m8.
21772
21773 Native Solaris and GNU/Linux toolchains also support the value
21774 native, which selects the best architecture option for the host
21775 processor. -mcpu=native has no effect if GCC does not recognize
21776 the processor.
21777
21778 Default instruction scheduling parameters are used for values that
21779 select an architecture and not an implementation. These are v7,
21780 v8, sparclite, sparclet, v9.
21781
21782 Here is a list of each supported architecture and their supported
21783 implementations.
21784
21785 v7 cypress, leon3v7
21786
21787 v8 supersparc, hypersparc, leon, leon3
21788
21789 sparclite
21790 f930, f934, sparclite86x
21791
21792 sparclet
21793 tsc701
21794
21795 v9 ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4,
21796 niagara7, m8
21797
21798 By default (unless configured otherwise), GCC generates code for
21799 the V7 variant of the SPARC architecture. With -mcpu=cypress, the
21800 compiler additionally optimizes it for the Cypress CY7C602 chip, as
21801 used in the SPARCStation/SPARCServer 3xx series. This is also
21802 appropriate for the older SPARCStation 1, 2, IPX etc.
21803
21804 With -mcpu=v8, GCC generates code for the V8 variant of the SPARC
21805 architecture. The only difference from V7 code is that the
21806 compiler emits the integer multiply and integer divide instructions
21807 which exist in SPARC-V8 but not in SPARC-V7. With
21808 -mcpu=supersparc, the compiler additionally optimizes it for the
21809 SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000
21810 series.
21811
21812 With -mcpu=sparclite, GCC generates code for the SPARClite variant
21813 of the SPARC architecture. This adds the integer multiply, integer
21814 divide step and scan ("ffs") instructions which exist in SPARClite
21815 but not in SPARC-V7. With -mcpu=f930, the compiler additionally
21816 optimizes it for the Fujitsu MB86930 chip, which is the original
21817 SPARClite, with no FPU. With -mcpu=f934, the compiler additionally
21818 optimizes it for the Fujitsu MB86934 chip, which is the more recent
21819 SPARClite with FPU.
21820
21821 With -mcpu=sparclet, GCC generates code for the SPARClet variant of
21822 the SPARC architecture. This adds the integer multiply,
21823 multiply/accumulate, integer divide step and scan ("ffs")
21824 instructions which exist in SPARClet but not in SPARC-V7. With
21825 -mcpu=tsc701, the compiler additionally optimizes it for the TEMIC
21826 SPARClet chip.
21827
21828 With -mcpu=v9, GCC generates code for the V9 variant of the SPARC
21829 architecture. This adds 64-bit integer and floating-point move
21830 instructions, 3 additional floating-point condition code registers
21831 and conditional move instructions. With -mcpu=ultrasparc, the
21832 compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi
21833 chips. With -mcpu=ultrasparc3, the compiler additionally optimizes
21834 it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ chips. With
21835 -mcpu=niagara, the compiler additionally optimizes it for Sun
21836 UltraSPARC T1 chips. With -mcpu=niagara2, the compiler
21837 additionally optimizes it for Sun UltraSPARC T2 chips. With
21838 -mcpu=niagara3, the compiler additionally optimizes it for Sun
21839 UltraSPARC T3 chips. With -mcpu=niagara4, the compiler
21840 additionally optimizes it for Sun UltraSPARC T4 chips. With
21841 -mcpu=niagara7, the compiler additionally optimizes it for Oracle
21842 SPARC M7 chips. With -mcpu=m8, the compiler additionally optimizes
21843 it for Oracle M8 chips.
21844
21845 -mtune=cpu_type
21846 Set the instruction scheduling parameters for machine type
21847 cpu_type, but do not set the instruction set or register set that
21848 the option -mcpu=cpu_type does.
21849
21850 The same values for -mcpu=cpu_type can be used for -mtune=cpu_type,
21851 but the only useful values are those that select a particular CPU
21852 implementation. Those are cypress, supersparc, hypersparc, leon,
21853 leon3, leon3v7, f930, f934, sparclite86x, tsc701, ultrasparc,
21854 ultrasparc3, niagara, niagara2, niagara3, niagara4, niagara7 and
21855 m8. With native Solaris and GNU/Linux toolchains, native can also
21856 be used.
21857
21858 -mv8plus
21859 -mno-v8plus
21860 With -mv8plus, GCC generates code for the SPARC-V8+ ABI. The
21861 difference from the V8 ABI is that the global and out registers are
21862 considered 64 bits wide. This is enabled by default on Solaris in
21863 32-bit mode for all SPARC-V9 processors.
21864
21865 -mvis
21866 -mno-vis
21867 With -mvis, GCC generates code that takes advantage of the
21868 UltraSPARC Visual Instruction Set extensions. The default is
21869 -mno-vis.
21870
21871 -mvis2
21872 -mno-vis2
21873 With -mvis2, GCC generates code that takes advantage of version 2.0
21874 of the UltraSPARC Visual Instruction Set extensions. The default
21875 is -mvis2 when targeting a cpu that supports such instructions,
21876 such as UltraSPARC-III and later. Setting -mvis2 also sets -mvis.
21877
21878 -mvis3
21879 -mno-vis3
21880 With -mvis3, GCC generates code that takes advantage of version 3.0
21881 of the UltraSPARC Visual Instruction Set extensions. The default
21882 is -mvis3 when targeting a cpu that supports such instructions,
21883 such as niagara-3 and later. Setting -mvis3 also sets -mvis2 and
21884 -mvis.
21885
21886 -mvis4
21887 -mno-vis4
21888 With -mvis4, GCC generates code that takes advantage of version 4.0
21889 of the UltraSPARC Visual Instruction Set extensions. The default
21890 is -mvis4 when targeting a cpu that supports such instructions,
21891 such as niagara-7 and later. Setting -mvis4 also sets -mvis3,
21892 -mvis2 and -mvis.
21893
21894 -mvis4b
21895 -mno-vis4b
21896 With -mvis4b, GCC generates code that takes advantage of version
21897 4.0 of the UltraSPARC Visual Instruction Set extensions, plus the
21898 additional VIS instructions introduced in the Oracle SPARC
21899 Architecture 2017. The default is -mvis4b when targeting a cpu
21900 that supports such instructions, such as m8 and later. Setting
21901 -mvis4b also sets -mvis4, -mvis3, -mvis2 and -mvis.
21902
21903 -mcbcond
21904 -mno-cbcond
21905 With -mcbcond, GCC generates code that takes advantage of the
21906 UltraSPARC Compare-and-Branch-on-Condition instructions. The
21907 default is -mcbcond when targeting a CPU that supports such
21908 instructions, such as Niagara-4 and later.
21909
21910 -mfmaf
21911 -mno-fmaf
21912 With -mfmaf, GCC generates code that takes advantage of the
21913 UltraSPARC Fused Multiply-Add Floating-point instructions. The
21914 default is -mfmaf when targeting a CPU that supports such
21915 instructions, such as Niagara-3 and later.
21916
21917 -mfsmuld
21918 -mno-fsmuld
21919 With -mfsmuld, GCC generates code that takes advantage of the
21920 Floating-point Multiply Single to Double (FsMULd) instruction. The
21921 default is -mfsmuld when targeting a CPU supporting the
21922 architecture versions V8 or V9 with FPU except -mcpu=leon.
21923
21924 -mpopc
21925 -mno-popc
21926 With -mpopc, GCC generates code that takes advantage of the
21927 UltraSPARC Population Count instruction. The default is -mpopc
21928 when targeting a CPU that supports such an instruction, such as
21929 Niagara-2 and later.
21930
21931 -msubxc
21932 -mno-subxc
21933 With -msubxc, GCC generates code that takes advantage of the
21934 UltraSPARC Subtract-Extended-with-Carry instruction. The default
21935 is -msubxc when targeting a CPU that supports such an instruction,
21936 such as Niagara-7 and later.
21937
21938 -mfix-at697f
21939 Enable the documented workaround for the single erratum of the
21940 Atmel AT697F processor (which corresponds to erratum #13 of the
21941 AT697E processor).
21942
21943 -mfix-ut699
21944 Enable the documented workarounds for the floating-point errata and
21945 the data cache nullify errata of the UT699 processor.
21946
21947 -mfix-ut700
21948 Enable the documented workaround for the back-to-back store errata
21949 of the UT699E/UT700 processor.
21950
21951 -mfix-gr712rc
21952 Enable the documented workaround for the back-to-back store errata
21953 of the GR712RC processor.
21954
21955 These -m options are supported in addition to the above on SPARC-V9
21956 processors in 64-bit environments:
21957
21958 -m32
21959 -m64
21960 Generate code for a 32-bit or 64-bit environment. The 32-bit
21961 environment sets int, long and pointer to 32 bits. The 64-bit
21962 environment sets int to 32 bits and long and pointer to 64 bits.
21963
21964 -mcmodel=which
21965 Set the code model to one of
21966
21967 medlow
21968 The Medium/Low code model: 64-bit addresses, programs must be
21969 linked in the low 32 bits of memory. Programs can be
21970 statically or dynamically linked.
21971
21972 medmid
21973 The Medium/Middle code model: 64-bit addresses, programs must
21974 be linked in the low 44 bits of memory, the text and data
21975 segments must be less than 2GB in size and the data segment
21976 must be located within 2GB of the text segment.
21977
21978 medany
21979 The Medium/Anywhere code model: 64-bit addresses, programs may
21980 be linked anywhere in memory, the text and data segments must
21981 be less than 2GB in size and the data segment must be located
21982 within 2GB of the text segment.
21983
21984 embmedany
21985 The Medium/Anywhere code model for embedded systems: 64-bit
21986 addresses, the text and data segments must be less than 2GB in
21987 size, both starting anywhere in memory (determined at link
21988 time). The global register %g4 points to the base of the data
21989 segment. Programs are statically linked and PIC is not
21990 supported.
21991
21992 -mmemory-model=mem-model
21993 Set the memory model in force on the processor to one of
21994
21995 default
21996 The default memory model for the processor and operating
21997 system.
21998
21999 rmo Relaxed Memory Order
22000
22001 pso Partial Store Order
22002
22003 tso Total Store Order
22004
22005 sc Sequential Consistency
22006
22007 These memory models are formally defined in Appendix D of the
22008 SPARC-V9 architecture manual, as set in the processor's "PSTATE.MM"
22009 field.
22010
22011 -mstack-bias
22012 -mno-stack-bias
22013 With -mstack-bias, GCC assumes that the stack pointer, and frame
22014 pointer if present, are offset by -2047 which must be added back
22015 when making stack frame references. This is the default in 64-bit
22016 mode. Otherwise, assume no such offset is present.
22017
22018 SPU Options
22019 These -m options are supported on the SPU:
22020
22021 -mwarn-reloc
22022 -merror-reloc
22023 The loader for SPU does not handle dynamic relocations. By
22024 default, GCC gives an error when it generates code that requires a
22025 dynamic relocation. -mno-error-reloc disables the error,
22026 -mwarn-reloc generates a warning instead.
22027
22028 -msafe-dma
22029 -munsafe-dma
22030 Instructions that initiate or test completion of DMA must not be
22031 reordered with respect to loads and stores of the memory that is
22032 being accessed. With -munsafe-dma you must use the "volatile"
22033 keyword to protect memory accesses, but that can lead to
22034 inefficient code in places where the memory is known to not change.
22035 Rather than mark the memory as volatile, you can use -msafe-dma to
22036 tell the compiler to treat the DMA instructions as potentially
22037 affecting all memory.
22038
22039 -mbranch-hints
22040 By default, GCC generates a branch hint instruction to avoid
22041 pipeline stalls for always-taken or probably-taken branches. A
22042 hint is not generated closer than 8 instructions away from its
22043 branch. There is little reason to disable them, except for
22044 debugging purposes, or to make an object a little bit smaller.
22045
22046 -msmall-mem
22047 -mlarge-mem
22048 By default, GCC generates code assuming that addresses are never
22049 larger than 18 bits. With -mlarge-mem code is generated that
22050 assumes a full 32-bit address.
22051
22052 -mstdmain
22053 By default, GCC links against startup code that assumes the SPU-
22054 style main function interface (which has an unconventional
22055 parameter list). With -mstdmain, GCC links your program against
22056 startup code that assumes a C99-style interface to "main",
22057 including a local copy of "argv" strings.
22058
22059 -mfixed-range=register-range
22060 Generate code treating the given register range as fixed registers.
22061 A fixed register is one that the register allocator cannot use.
22062 This is useful when compiling kernel code. A register range is
22063 specified as two registers separated by a dash. Multiple register
22064 ranges can be specified separated by a comma.
22065
22066 -mea32
22067 -mea64
22068 Compile code assuming that pointers to the PPU address space
22069 accessed via the "__ea" named address space qualifier are either 32
22070 or 64 bits wide. The default is 32 bits. As this is an ABI-
22071 changing option, all object code in an executable must be compiled
22072 with the same setting.
22073
22074 -maddress-space-conversion
22075 -mno-address-space-conversion
22076 Allow/disallow treating the "__ea" address space as superset of the
22077 generic address space. This enables explicit type casts between
22078 "__ea" and generic pointer as well as implicit conversions of
22079 generic pointers to "__ea" pointers. The default is to allow
22080 address space pointer conversions.
22081
22082 -mcache-size=cache-size
22083 This option controls the version of libgcc that the compiler links
22084 to an executable and selects a software-managed cache for accessing
22085 variables in the "__ea" address space with a particular cache size.
22086 Possible options for cache-size are 8, 16, 32, 64 and 128. The
22087 default cache size is 64KB.
22088
22089 -matomic-updates
22090 -mno-atomic-updates
22091 This option controls the version of libgcc that the compiler links
22092 to an executable and selects whether atomic updates to the
22093 software-managed cache of PPU-side variables are used. If you use
22094 atomic updates, changes to a PPU variable from SPU code using the
22095 "__ea" named address space qualifier do not interfere with changes
22096 to other PPU variables residing in the same cache line from PPU
22097 code. If you do not use atomic updates, such interference may
22098 occur; however, writing back cache lines is more efficient. The
22099 default behavior is to use atomic updates.
22100
22101 -mdual-nops
22102 -mdual-nops=n
22103 By default, GCC inserts NOPs to increase dual issue when it expects
22104 it to increase performance. n can be a value from 0 to 10. A
22105 smaller n inserts fewer NOPs. 10 is the default, 0 is the same as
22106 -mno-dual-nops. Disabled with -Os.
22107
22108 -mhint-max-nops=n
22109 Maximum number of NOPs to insert for a branch hint. A branch hint
22110 must be at least 8 instructions away from the branch it is
22111 affecting. GCC inserts up to n NOPs to enforce this, otherwise it
22112 does not generate the branch hint.
22113
22114 -mhint-max-distance=n
22115 The encoding of the branch hint instruction limits the hint to be
22116 within 256 instructions of the branch it is affecting. By default,
22117 GCC makes sure it is within 125.
22118
22119 -msafe-hints
22120 Work around a hardware bug that causes the SPU to stall
22121 indefinitely. By default, GCC inserts the "hbrp" instruction to
22122 make sure this stall won't happen.
22123
22124 Options for System V
22125 These additional options are available on System V Release 4 for
22126 compatibility with other compilers on those systems:
22127
22128 -G Create a shared object. It is recommended that -symbolic or
22129 -shared be used instead.
22130
22131 -Qy Identify the versions of each tool used by the compiler, in a
22132 ".ident" assembler directive in the output.
22133
22134 -Qn Refrain from adding ".ident" directives to the output file (this is
22135 the default).
22136
22137 -YP,dirs
22138 Search the directories dirs, and no others, for libraries specified
22139 with -l.
22140
22141 -Ym,dir
22142 Look in the directory dir to find the M4 preprocessor. The
22143 assembler uses this option.
22144
22145 TILE-Gx Options
22146 These -m options are supported on the TILE-Gx:
22147
22148 -mcmodel=small
22149 Generate code for the small model. The distance for direct calls
22150 is limited to 500M in either direction. PC-relative addresses are
22151 32 bits. Absolute addresses support the full address range.
22152
22153 -mcmodel=large
22154 Generate code for the large model. There is no limitation on call
22155 distance, pc-relative addresses, or absolute addresses.
22156
22157 -mcpu=name
22158 Selects the type of CPU to be targeted. Currently the only
22159 supported type is tilegx.
22160
22161 -m32
22162 -m64
22163 Generate code for a 32-bit or 64-bit environment. The 32-bit
22164 environment sets int, long, and pointer to 32 bits. The 64-bit
22165 environment sets int to 32 bits and long and pointer to 64 bits.
22166
22167 -mbig-endian
22168 -mlittle-endian
22169 Generate code in big/little endian mode, respectively.
22170
22171 TILEPro Options
22172 These -m options are supported on the TILEPro:
22173
22174 -mcpu=name
22175 Selects the type of CPU to be targeted. Currently the only
22176 supported type is tilepro.
22177
22178 -m32
22179 Generate code for a 32-bit environment, which sets int, long, and
22180 pointer to 32 bits. This is the only supported behavior so the
22181 flag is essentially ignored.
22182
22183 V850 Options
22184 These -m options are defined for V850 implementations:
22185
22186 -mlong-calls
22187 -mno-long-calls
22188 Treat all calls as being far away (near). If calls are assumed to
22189 be far away, the compiler always loads the function's address into
22190 a register, and calls indirect through the pointer.
22191
22192 -mno-ep
22193 -mep
22194 Do not optimize (do optimize) basic blocks that use the same index
22195 pointer 4 or more times to copy pointer into the "ep" register, and
22196 use the shorter "sld" and "sst" instructions. The -mep option is
22197 on by default if you optimize.
22198
22199 -mno-prolog-function
22200 -mprolog-function
22201 Do not use (do use) external functions to save and restore
22202 registers at the prologue and epilogue of a function. The external
22203 functions are slower, but use less code space if more than one
22204 function saves the same number of registers. The -mprolog-function
22205 option is on by default if you optimize.
22206
22207 -mspace
22208 Try to make the code as small as possible. At present, this just
22209 turns on the -mep and -mprolog-function options.
22210
22211 -mtda=n
22212 Put static or global variables whose size is n bytes or less into
22213 the tiny data area that register "ep" points to. The tiny data
22214 area can hold up to 256 bytes in total (128 bytes for byte
22215 references).
22216
22217 -msda=n
22218 Put static or global variables whose size is n bytes or less into
22219 the small data area that register "gp" points to. The small data
22220 area can hold up to 64 kilobytes.
22221
22222 -mzda=n
22223 Put static or global variables whose size is n bytes or less into
22224 the first 32 kilobytes of memory.
22225
22226 -mv850
22227 Specify that the target processor is the V850.
22228
22229 -mv850e3v5
22230 Specify that the target processor is the V850E3V5. The
22231 preprocessor constant "__v850e3v5__" is defined if this option is
22232 used.
22233
22234 -mv850e2v4
22235 Specify that the target processor is the V850E3V5. This is an
22236 alias for the -mv850e3v5 option.
22237
22238 -mv850e2v3
22239 Specify that the target processor is the V850E2V3. The
22240 preprocessor constant "__v850e2v3__" is defined if this option is
22241 used.
22242
22243 -mv850e2
22244 Specify that the target processor is the V850E2. The preprocessor
22245 constant "__v850e2__" is defined if this option is used.
22246
22247 -mv850e1
22248 Specify that the target processor is the V850E1. The preprocessor
22249 constants "__v850e1__" and "__v850e__" are defined if this option
22250 is used.
22251
22252 -mv850es
22253 Specify that the target processor is the V850ES. This is an alias
22254 for the -mv850e1 option.
22255
22256 -mv850e
22257 Specify that the target processor is the V850E. The preprocessor
22258 constant "__v850e__" is defined if this option is used.
22259
22260 If neither -mv850 nor -mv850e nor -mv850e1 nor -mv850e2 nor
22261 -mv850e2v3 nor -mv850e3v5 are defined then a default target
22262 processor is chosen and the relevant __v850*__ preprocessor
22263 constant is defined.
22264
22265 The preprocessor constants "__v850" and "__v851__" are always
22266 defined, regardless of which processor variant is the target.
22267
22268 -mdisable-callt
22269 -mno-disable-callt
22270 This option suppresses generation of the "CALLT" instruction for
22271 the v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the
22272 v850 architecture.
22273
22274 This option is enabled by default when the RH850 ABI is in use (see
22275 -mrh850-abi), and disabled by default when the GCC ABI is in use.
22276 If "CALLT" instructions are being generated then the C preprocessor
22277 symbol "__V850_CALLT__" is defined.
22278
22279 -mrelax
22280 -mno-relax
22281 Pass on (or do not pass on) the -mrelax command-line option to the
22282 assembler.
22283
22284 -mlong-jumps
22285 -mno-long-jumps
22286 Disable (or re-enable) the generation of PC-relative jump
22287 instructions.
22288
22289 -msoft-float
22290 -mhard-float
22291 Disable (or re-enable) the generation of hardware floating point
22292 instructions. This option is only significant when the target
22293 architecture is V850E2V3 or higher. If hardware floating point
22294 instructions are being generated then the C preprocessor symbol
22295 "__FPU_OK__" is defined, otherwise the symbol "__NO_FPU__" is
22296 defined.
22297
22298 -mloop
22299 Enables the use of the e3v5 LOOP instruction. The use of this
22300 instruction is not enabled by default when the e3v5 architecture is
22301 selected because its use is still experimental.
22302
22303 -mrh850-abi
22304 -mghs
22305 Enables support for the RH850 version of the V850 ABI. This is the
22306 default. With this version of the ABI the following rules apply:
22307
22308 * Integer sized structures and unions are returned via a memory
22309 pointer rather than a register.
22310
22311 * Large structures and unions (more than 8 bytes in size) are
22312 passed by value.
22313
22314 * Functions are aligned to 16-bit boundaries.
22315
22316 * The -m8byte-align command-line option is supported.
22317
22318 * The -mdisable-callt command-line option is enabled by default.
22319 The -mno-disable-callt command-line option is not supported.
22320
22321 When this version of the ABI is enabled the C preprocessor symbol
22322 "__V850_RH850_ABI__" is defined.
22323
22324 -mgcc-abi
22325 Enables support for the old GCC version of the V850 ABI. With this
22326 version of the ABI the following rules apply:
22327
22328 * Integer sized structures and unions are returned in register
22329 "r10".
22330
22331 * Large structures and unions (more than 8 bytes in size) are
22332 passed by reference.
22333
22334 * Functions are aligned to 32-bit boundaries, unless optimizing
22335 for size.
22336
22337 * The -m8byte-align command-line option is not supported.
22338
22339 * The -mdisable-callt command-line option is supported but not
22340 enabled by default.
22341
22342 When this version of the ABI is enabled the C preprocessor symbol
22343 "__V850_GCC_ABI__" is defined.
22344
22345 -m8byte-align
22346 -mno-8byte-align
22347 Enables support for "double" and "long long" types to be aligned on
22348 8-byte boundaries. The default is to restrict the alignment of all
22349 objects to at most 4-bytes. When -m8byte-align is in effect the C
22350 preprocessor symbol "__V850_8BYTE_ALIGN__" is defined.
22351
22352 -mbig-switch
22353 Generate code suitable for big switch tables. Use this option only
22354 if the assembler/linker complain about out of range branches within
22355 a switch table.
22356
22357 -mapp-regs
22358 This option causes r2 and r5 to be used in the code generated by
22359 the compiler. This setting is the default.
22360
22361 -mno-app-regs
22362 This option causes r2 and r5 to be treated as fixed registers.
22363
22364 VAX Options
22365 These -m options are defined for the VAX:
22366
22367 -munix
22368 Do not output certain jump instructions ("aobleq" and so on) that
22369 the Unix assembler for the VAX cannot handle across long ranges.
22370
22371 -mgnu
22372 Do output those jump instructions, on the assumption that the GNU
22373 assembler is being used.
22374
22375 -mg Output code for G-format floating-point numbers instead of
22376 D-format.
22377
22378 Visium Options
22379 -mdebug
22380 A program which performs file I/O and is destined to run on an MCM
22381 target should be linked with this option. It causes the libraries
22382 libc.a and libdebug.a to be linked. The program should be run on
22383 the target under the control of the GDB remote debugging stub.
22384
22385 -msim
22386 A program which performs file I/O and is destined to run on the
22387 simulator should be linked with option. This causes libraries
22388 libc.a and libsim.a to be linked.
22389
22390 -mfpu
22391 -mhard-float
22392 Generate code containing floating-point instructions. This is the
22393 default.
22394
22395 -mno-fpu
22396 -msoft-float
22397 Generate code containing library calls for floating-point.
22398
22399 -msoft-float changes the calling convention in the output file;
22400 therefore, it is only useful if you compile all of a program with
22401 this option. In particular, you need to compile libgcc.a, the
22402 library that comes with GCC, with -msoft-float in order for this to
22403 work.
22404
22405 -mcpu=cpu_type
22406 Set the instruction set, register set, and instruction scheduling
22407 parameters for machine type cpu_type. Supported values for
22408 cpu_type are mcm, gr5 and gr6.
22409
22410 mcm is a synonym of gr5 present for backward compatibility.
22411
22412 By default (unless configured otherwise), GCC generates code for
22413 the GR5 variant of the Visium architecture.
22414
22415 With -mcpu=gr6, GCC generates code for the GR6 variant of the
22416 Visium architecture. The only difference from GR5 code is that the
22417 compiler will generate block move instructions.
22418
22419 -mtune=cpu_type
22420 Set the instruction scheduling parameters for machine type
22421 cpu_type, but do not set the instruction set or register set that
22422 the option -mcpu=cpu_type would.
22423
22424 -msv-mode
22425 Generate code for the supervisor mode, where there are no
22426 restrictions on the access to general registers. This is the
22427 default.
22428
22429 -muser-mode
22430 Generate code for the user mode, where the access to some general
22431 registers is forbidden: on the GR5, registers r24 to r31 cannot be
22432 accessed in this mode; on the GR6, only registers r29 to r31 are
22433 affected.
22434
22435 VMS Options
22436 These -m options are defined for the VMS implementations:
22437
22438 -mvms-return-codes
22439 Return VMS condition codes from "main". The default is to return
22440 POSIX-style condition (e.g. error) codes.
22441
22442 -mdebug-main=prefix
22443 Flag the first routine whose name starts with prefix as the main
22444 routine for the debugger.
22445
22446 -mmalloc64
22447 Default to 64-bit memory allocation routines.
22448
22449 -mpointer-size=size
22450 Set the default size of pointers. Possible options for size are 32
22451 or short for 32 bit pointers, 64 or long for 64 bit pointers, and
22452 no for supporting only 32 bit pointers. The later option disables
22453 "pragma pointer_size".
22454
22455 VxWorks Options
22456 The options in this section are defined for all VxWorks targets.
22457 Options specific to the target hardware are listed with the other
22458 options for that target.
22459
22460 -mrtp
22461 GCC can generate code for both VxWorks kernels and real time
22462 processes (RTPs). This option switches from the former to the
22463 latter. It also defines the preprocessor macro "__RTP__".
22464
22465 -non-static
22466 Link an RTP executable against shared libraries rather than static
22467 libraries. The options -static and -shared can also be used for
22468 RTPs; -static is the default.
22469
22470 -Bstatic
22471 -Bdynamic
22472 These options are passed down to the linker. They are defined for
22473 compatibility with Diab.
22474
22475 -Xbind-lazy
22476 Enable lazy binding of function calls. This option is equivalent
22477 to -Wl,-z,now and is defined for compatibility with Diab.
22478
22479 -Xbind-now
22480 Disable lazy binding of function calls. This option is the default
22481 and is defined for compatibility with Diab.
22482
22483 x86 Options
22484 These -m options are defined for the x86 family of computers.
22485
22486 -march=cpu-type
22487 Generate instructions for the machine type cpu-type. In contrast
22488 to -mtune=cpu-type, which merely tunes the generated code for the
22489 specified cpu-type, -march=cpu-type allows GCC to generate code
22490 that may not run at all on processors other than the one indicated.
22491 Specifying -march=cpu-type implies -mtune=cpu-type.
22492
22493 The choices for cpu-type are:
22494
22495 native
22496 This selects the CPU to generate code for at compilation time
22497 by determining the processor type of the compiling machine.
22498 Using -march=native enables all instruction subsets supported
22499 by the local machine (hence the result might not run on
22500 different machines). Using -mtune=native produces code
22501 optimized for the local machine under the constraints of the
22502 selected instruction set.
22503
22504 x86-64
22505 A generic CPU with 64-bit extensions.
22506
22507 i386
22508 Original Intel i386 CPU.
22509
22510 i486
22511 Intel i486 CPU. (No scheduling is implemented for this chip.)
22512
22513 i586
22514 pentium
22515 Intel Pentium CPU with no MMX support.
22516
22517 lakemont
22518 Intel Lakemont MCU, based on Intel Pentium CPU.
22519
22520 pentium-mmx
22521 Intel Pentium MMX CPU, based on Pentium core with MMX
22522 instruction set support.
22523
22524 pentiumpro
22525 Intel Pentium Pro CPU.
22526
22527 i686
22528 When used with -march, the Pentium Pro instruction set is used,
22529 so the code runs on all i686 family chips. When used with
22530 -mtune, it has the same meaning as generic.
22531
22532 pentium2
22533 Intel Pentium II CPU, based on Pentium Pro core with MMX
22534 instruction set support.
22535
22536 pentium3
22537 pentium3m
22538 Intel Pentium III CPU, based on Pentium Pro core with MMX and
22539 SSE instruction set support.
22540
22541 pentium-m
22542 Intel Pentium M; low-power version of Intel Pentium III CPU
22543 with MMX, SSE and SSE2 instruction set support. Used by
22544 Centrino notebooks.
22545
22546 pentium4
22547 pentium4m
22548 Intel Pentium 4 CPU with MMX, SSE and SSE2 instruction set
22549 support.
22550
22551 prescott
22552 Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2 and
22553 SSE3 instruction set support.
22554
22555 nocona
22556 Improved version of Intel Pentium 4 CPU with 64-bit extensions,
22557 MMX, SSE, SSE2 and SSE3 instruction set support.
22558
22559 core2
22560 Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3
22561 and SSSE3 instruction set support.
22562
22563 nehalem
22564 Intel Nehalem CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3,
22565 SSSE3, SSE4.1, SSE4.2 and POPCNT instruction set support.
22566
22567 westmere
22568 Intel Westmere CPU with 64-bit extensions, MMX, SSE, SSE2,
22569 SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES and PCLMUL instruction
22570 set support.
22571
22572 sandybridge
22573 Intel Sandy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2,
22574 SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AES and PCLMUL
22575 instruction set support.
22576
22577 ivybridge
22578 Intel Ivy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2,
22579 SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AES, PCLMUL,
22580 FSGSBASE, RDRND and F16C instruction set support.
22581
22582 haswell
22583 Intel Haswell CPU with 64-bit extensions, MOVBE, MMX, SSE,
22584 SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES,
22585 PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2 and F16C instruction
22586 set support.
22587
22588 broadwell
22589 Intel Broadwell CPU with 64-bit extensions, MOVBE, MMX, SSE,
22590 SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES,
22591 PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX and
22592 PREFETCHW instruction set support.
22593
22594 skylake
22595 Intel Skylake CPU with 64-bit extensions, MOVBE, MMX, SSE,
22596 SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES,
22597 PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX,
22598 PREFETCHW, CLFLUSHOPT, XSAVEC and XSAVES instruction set
22599 support.
22600
22601 bonnell
22602 Intel Bonnell CPU with 64-bit extensions, MOVBE, MMX, SSE,
22603 SSE2, SSE3 and SSSE3 instruction set support.
22604
22605 silvermont
22606 Intel Silvermont CPU with 64-bit extensions, MOVBE, MMX, SSE,
22607 SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PCLMUL and
22608 RDRND instruction set support.
22609
22610 knl Intel Knight's Landing CPU with 64-bit extensions, MOVBE, MMX,
22611 SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES,
22612 PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX,
22613 PREFETCHW, AVX512F, AVX512PF, AVX512ER and AVX512CD instruction
22614 set support.
22615
22616 knm Intel Knights Mill CPU with 64-bit extensions, MOVBE, MMX, SSE,
22617 SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES,
22618 PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX,
22619 PREFETCHW, AVX512F, AVX512PF, AVX512ER, AVX512CD, AVX5124VNNIW,
22620 AVX5124FMAPS and AVX512VPOPCNTDQ instruction set support.
22621
22622 skylake-avx512
22623 Intel Skylake Server CPU with 64-bit extensions, MOVBE, MMX,
22624 SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2,
22625 AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED,
22626 ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, CLWB,
22627 AVX512VL, AVX512BW, AVX512DQ and AVX512CD instruction set
22628 support.
22629
22630 cannonlake
22631 Intel Cannonlake Server CPU with 64-bit extensions, MOVBE, MMX,
22632 SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2,
22633 AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED,
22634 ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL,
22635 AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI, AVX512IFMA, SHA and
22636 UMIP instruction set support.
22637
22638 icelake-client
22639 Intel Icelake Client CPU with 64-bit extensions, MOVBE, MMX,
22640 SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2,
22641 AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED,
22642 ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL,
22643 AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI, AVX512IFMA, SHA,
22644 CLWB, UMIP, RDPID, GFNI, AVX512VBMI2, AVX512VPOPCNTDQ,
22645 AVX512BITALG, AVX512VNNI, VPCLMULQDQ, VAES instruction set
22646 support.
22647
22648 icelake-server
22649 Intel Icelake Server CPU with 64-bit extensions, MOVBE, MMX,
22650 SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2,
22651 AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED,
22652 ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL,
22653 AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI, AVX512IFMA, SHA,
22654 CLWB, UMIP, RDPID, GFNI, AVX512VBMI2, AVX512VPOPCNTDQ,
22655 AVX512BITALG, AVX512VNNI, VPCLMULQDQ, VAES, PCONFIG and
22656 WBNOINVD instruction set support.
22657
22658 k6 AMD K6 CPU with MMX instruction set support.
22659
22660 k6-2
22661 k6-3
22662 Improved versions of AMD K6 CPU with MMX and 3DNow! instruction
22663 set support.
22664
22665 athlon
22666 athlon-tbird
22667 AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow! and SSE
22668 prefetch instructions support.
22669
22670 athlon-4
22671 athlon-xp
22672 athlon-mp
22673 Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow! and
22674 full SSE instruction set support.
22675
22676 k8
22677 opteron
22678 athlon64
22679 athlon-fx
22680 Processors based on the AMD K8 core with x86-64 instruction set
22681 support, including the AMD Opteron, Athlon 64, and Athlon 64 FX
22682 processors. (This supersets MMX, SSE, SSE2, 3DNow!, enhanced
22683 3DNow! and 64-bit instruction set extensions.)
22684
22685 k8-sse3
22686 opteron-sse3
22687 athlon64-sse3
22688 Improved versions of AMD K8 cores with SSE3 instruction set
22689 support.
22690
22691 amdfam10
22692 barcelona
22693 CPUs based on AMD Family 10h cores with x86-64 instruction set
22694 support. (This supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!,
22695 enhanced 3DNow!, ABM and 64-bit instruction set extensions.)
22696
22697 bdver1
22698 CPUs based on AMD Family 15h cores with x86-64 instruction set
22699 support. (This supersets FMA4, AVX, XOP, LWP, AES, PCL_MUL,
22700 CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM
22701 and 64-bit instruction set extensions.)
22702
22703 bdver2
22704 AMD Family 15h core based CPUs with x86-64 instruction set
22705 support. (This supersets BMI, TBM, F16C, FMA, FMA4, AVX, XOP,
22706 LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
22707 SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions.)
22708
22709 bdver3
22710 AMD Family 15h core based CPUs with x86-64 instruction set
22711 support. (This supersets BMI, TBM, F16C, FMA, FMA4, FSGSBASE,
22712 AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
22713 SSSE3, SSE4.1, SSE4.2, ABM and 64-bit instruction set
22714 extensions.
22715
22716 bdver4
22717 AMD Family 15h core based CPUs with x86-64 instruction set
22718 support. (This supersets BMI, BMI2, TBM, F16C, FMA, FMA4,
22719 FSGSBASE, AVX, AVX2, XOP, LWP, AES, PCL_MUL, CX16, MOVBE, MMX,
22720 SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit
22721 instruction set extensions.
22722
22723 znver1
22724 AMD Family 17h core based CPUs with x86-64 instruction set
22725 support. (This supersets BMI, BMI2, F16C, FMA, FSGSBASE, AVX,
22726 AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES, PCL_MUL, CX16,
22727 MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM,
22728 XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, and 64-bit instruction set
22729 extensions.
22730
22731 btver1
22732 CPUs based on AMD Family 14h cores with x86-64 instruction set
22733 support. (This supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A,
22734 CX16, ABM and 64-bit instruction set extensions.)
22735
22736 btver2
22737 CPUs based on AMD Family 16h cores with x86-64 instruction set
22738 support. This includes MOVBE, F16C, BMI, AVX, PCL_MUL, AES,
22739 SSE4.2, SSE4.1, CX16, ABM, SSE4A, SSSE3, SSE3, SSE2, SSE, MMX
22740 and 64-bit instruction set extensions.
22741
22742 winchip-c6
22743 IDT WinChip C6 CPU, dealt in same way as i486 with additional
22744 MMX instruction set support.
22745
22746 winchip2
22747 IDT WinChip 2 CPU, dealt in same way as i486 with additional
22748 MMX and 3DNow! instruction set support.
22749
22750 c3 VIA C3 CPU with MMX and 3DNow! instruction set support. (No
22751 scheduling is implemented for this chip.)
22752
22753 c3-2
22754 VIA C3-2 (Nehemiah/C5XL) CPU with MMX and SSE instruction set
22755 support. (No scheduling is implemented for this chip.)
22756
22757 c7 VIA C7 (Esther) CPU with MMX, SSE, SSE2 and SSE3 instruction
22758 set support. (No scheduling is implemented for this chip.)
22759
22760 samuel-2
22761 VIA Eden Samuel 2 CPU with MMX and 3DNow! instruction set
22762 support. (No scheduling is implemented for this chip.)
22763
22764 nehemiah
22765 VIA Eden Nehemiah CPU with MMX and SSE instruction set support.
22766 (No scheduling is implemented for this chip.)
22767
22768 esther
22769 VIA Eden Esther CPU with MMX, SSE, SSE2 and SSE3 instruction
22770 set support. (No scheduling is implemented for this chip.)
22771
22772 eden-x2
22773 VIA Eden X2 CPU with x86-64, MMX, SSE, SSE2 and SSE3
22774 instruction set support. (No scheduling is implemented for
22775 this chip.)
22776
22777 eden-x4
22778 VIA Eden X4 CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3,
22779 SSE4.1, SSE4.2, AVX and AVX2 instruction set support. (No
22780 scheduling is implemented for this chip.)
22781
22782 nano
22783 Generic VIA Nano CPU with x86-64, MMX, SSE, SSE2, SSE3 and
22784 SSSE3 instruction set support. (No scheduling is implemented
22785 for this chip.)
22786
22787 nano-1000
22788 VIA Nano 1xxx CPU with x86-64, MMX, SSE, SSE2, SSE3 and SSSE3
22789 instruction set support. (No scheduling is implemented for
22790 this chip.)
22791
22792 nano-2000
22793 VIA Nano 2xxx CPU with x86-64, MMX, SSE, SSE2, SSE3 and SSSE3
22794 instruction set support. (No scheduling is implemented for
22795 this chip.)
22796
22797 nano-3000
22798 VIA Nano 3xxx CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3 and
22799 SSE4.1 instruction set support. (No scheduling is implemented
22800 for this chip.)
22801
22802 nano-x2
22803 VIA Nano Dual Core CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3
22804 and SSE4.1 instruction set support. (No scheduling is
22805 implemented for this chip.)
22806
22807 nano-x4
22808 VIA Nano Quad Core CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3
22809 and SSE4.1 instruction set support. (No scheduling is
22810 implemented for this chip.)
22811
22812 geode
22813 AMD Geode embedded processor with MMX and 3DNow! instruction
22814 set support.
22815
22816 -mtune=cpu-type
22817 Tune to cpu-type everything applicable about the generated code,
22818 except for the ABI and the set of available instructions. While
22819 picking a specific cpu-type schedules things appropriately for that
22820 particular chip, the compiler does not generate any code that
22821 cannot run on the default machine type unless you use a -march=cpu-
22822 type option. For example, if GCC is configured for
22823 i686-pc-linux-gnu then -mtune=pentium4 generates code that is tuned
22824 for Pentium 4 but still runs on i686 machines.
22825
22826 The choices for cpu-type are the same as for -march. In addition,
22827 -mtune supports 2 extra choices for cpu-type:
22828
22829 generic
22830 Produce code optimized for the most common IA32/AMD64/EM64T
22831 processors. If you know the CPU on which your code will run,
22832 then you should use the corresponding -mtune or -march option
22833 instead of -mtune=generic. But, if you do not know exactly
22834 what CPU users of your application will have, then you should
22835 use this option.
22836
22837 As new processors are deployed in the marketplace, the behavior
22838 of this option will change. Therefore, if you upgrade to a
22839 newer version of GCC, code generation controlled by this option
22840 will change to reflect the processors that are most common at
22841 the time that version of GCC is released.
22842
22843 There is no -march=generic option because -march indicates the
22844 instruction set the compiler can use, and there is no generic
22845 instruction set applicable to all processors. In contrast,
22846 -mtune indicates the processor (or, in this case, collection of
22847 processors) for which the code is optimized.
22848
22849 intel
22850 Produce code optimized for the most current Intel processors,
22851 which are Haswell and Silvermont for this version of GCC. If
22852 you know the CPU on which your code will run, then you should
22853 use the corresponding -mtune or -march option instead of
22854 -mtune=intel. But, if you want your application performs
22855 better on both Haswell and Silvermont, then you should use this
22856 option.
22857
22858 As new Intel processors are deployed in the marketplace, the
22859 behavior of this option will change. Therefore, if you upgrade
22860 to a newer version of GCC, code generation controlled by this
22861 option will change to reflect the most current Intel processors
22862 at the time that version of GCC is released.
22863
22864 There is no -march=intel option because -march indicates the
22865 instruction set the compiler can use, and there is no common
22866 instruction set applicable to all processors. In contrast,
22867 -mtune indicates the processor (or, in this case, collection of
22868 processors) for which the code is optimized.
22869
22870 -mcpu=cpu-type
22871 A deprecated synonym for -mtune.
22872
22873 -mfpmath=unit
22874 Generate floating-point arithmetic for selected unit unit. The
22875 choices for unit are:
22876
22877 387 Use the standard 387 floating-point coprocessor present on the
22878 majority of chips and emulated otherwise. Code compiled with
22879 this option runs almost everywhere. The temporary results are
22880 computed in 80-bit precision instead of the precision specified
22881 by the type, resulting in slightly different results compared
22882 to most of other chips. See -ffloat-store for more detailed
22883 description.
22884
22885 This is the default choice for non-Darwin x86-32 targets.
22886
22887 sse Use scalar floating-point instructions present in the SSE
22888 instruction set. This instruction set is supported by Pentium
22889 III and newer chips, and in the AMD line by Athlon-4, Athlon XP
22890 and Athlon MP chips. The earlier version of the SSE
22891 instruction set supports only single-precision arithmetic, thus
22892 the double and extended-precision arithmetic are still done
22893 using 387. A later version, present only in Pentium 4 and AMD
22894 x86-64 chips, supports double-precision arithmetic too.
22895
22896 For the x86-32 compiler, you must use -march=cpu-type, -msse or
22897 -msse2 switches to enable SSE extensions and make this option
22898 effective. For the x86-64 compiler, these extensions are
22899 enabled by default.
22900
22901 The resulting code should be considerably faster in the
22902 majority of cases and avoid the numerical instability problems
22903 of 387 code, but may break some existing code that expects
22904 temporaries to be 80 bits.
22905
22906 This is the default choice for the x86-64 compiler, Darwin
22907 x86-32 targets, and the default choice for x86-32 targets with
22908 the SSE2 instruction set when -ffast-math is enabled.
22909
22910 sse,387
22911 sse+387
22912 both
22913 Attempt to utilize both instruction sets at once. This
22914 effectively doubles the amount of available registers, and on
22915 chips with separate execution units for 387 and SSE the
22916 execution resources too. Use this option with care, as it is
22917 still experimental, because the GCC register allocator does not
22918 model separate functional units well, resulting in unstable
22919 performance.
22920
22921 -masm=dialect
22922 Output assembly instructions using selected dialect. Also affects
22923 which dialect is used for basic "asm" and extended "asm". Supported
22924 choices (in dialect order) are att or intel. The default is att.
22925 Darwin does not support intel.
22926
22927 -mieee-fp
22928 -mno-ieee-fp
22929 Control whether or not the compiler uses IEEE floating-point
22930 comparisons. These correctly handle the case where the result of a
22931 comparison is unordered.
22932
22933 -m80387
22934 -mhard-float
22935 Generate output containing 80387 instructions for floating point.
22936
22937 -mno-80387
22938 -msoft-float
22939 Generate output containing library calls for floating point.
22940
22941 Warning: the requisite libraries are not part of GCC. Normally the
22942 facilities of the machine's usual C compiler are used, but this
22943 cannot be done directly in cross-compilation. You must make your
22944 own arrangements to provide suitable library functions for cross-
22945 compilation.
22946
22947 On machines where a function returns floating-point results in the
22948 80387 register stack, some floating-point opcodes may be emitted
22949 even if -msoft-float is used.
22950
22951 -mno-fp-ret-in-387
22952 Do not use the FPU registers for return values of functions.
22953
22954 The usual calling convention has functions return values of types
22955 "float" and "double" in an FPU register, even if there is no FPU.
22956 The idea is that the operating system should emulate an FPU.
22957
22958 The option -mno-fp-ret-in-387 causes such values to be returned in
22959 ordinary CPU registers instead.
22960
22961 -mno-fancy-math-387
22962 Some 387 emulators do not support the "sin", "cos" and "sqrt"
22963 instructions for the 387. Specify this option to avoid generating
22964 those instructions. This option is the default on OpenBSD and
22965 NetBSD. This option is overridden when -march indicates that the
22966 target CPU always has an FPU and so the instruction does not need
22967 emulation. These instructions are not generated unless you also
22968 use the -funsafe-math-optimizations switch.
22969
22970 -malign-double
22971 -mno-align-double
22972 Control whether GCC aligns "double", "long double", and "long long"
22973 variables on a two-word boundary or a one-word boundary. Aligning
22974 "double" variables on a two-word boundary produces code that runs
22975 somewhat faster on a Pentium at the expense of more memory.
22976
22977 On x86-64, -malign-double is enabled by default.
22978
22979 Warning: if you use the -malign-double switch, structures
22980 containing the above types are aligned differently than the
22981 published application binary interface specifications for the
22982 x86-32 and are not binary compatible with structures in code
22983 compiled without that switch.
22984
22985 -m96bit-long-double
22986 -m128bit-long-double
22987 These switches control the size of "long double" type. The x86-32
22988 application binary interface specifies the size to be 96 bits, so
22989 -m96bit-long-double is the default in 32-bit mode.
22990
22991 Modern architectures (Pentium and newer) prefer "long double" to be
22992 aligned to an 8- or 16-byte boundary. In arrays or structures
22993 conforming to the ABI, this is not possible. So specifying
22994 -m128bit-long-double aligns "long double" to a 16-byte boundary by
22995 padding the "long double" with an additional 32-bit zero.
22996
22997 In the x86-64 compiler, -m128bit-long-double is the default choice
22998 as its ABI specifies that "long double" is aligned on 16-byte
22999 boundary.
23000
23001 Notice that neither of these options enable any extra precision
23002 over the x87 standard of 80 bits for a "long double".
23003
23004 Warning: if you override the default value for your target ABI,
23005 this changes the size of structures and arrays containing "long
23006 double" variables, as well as modifying the function calling
23007 convention for functions taking "long double". Hence they are not
23008 binary-compatible with code compiled without that switch.
23009
23010 -mlong-double-64
23011 -mlong-double-80
23012 -mlong-double-128
23013 These switches control the size of "long double" type. A size of 64
23014 bits makes the "long double" type equivalent to the "double" type.
23015 This is the default for 32-bit Bionic C library. A size of 128
23016 bits makes the "long double" type equivalent to the "__float128"
23017 type. This is the default for 64-bit Bionic C library.
23018
23019 Warning: if you override the default value for your target ABI,
23020 this changes the size of structures and arrays containing "long
23021 double" variables, as well as modifying the function calling
23022 convention for functions taking "long double". Hence they are not
23023 binary-compatible with code compiled without that switch.
23024
23025 -malign-data=type
23026 Control how GCC aligns variables. Supported values for type are
23027 compat uses increased alignment value compatible uses GCC 4.8 and
23028 earlier, abi uses alignment value as specified by the psABI, and
23029 cacheline uses increased alignment value to match the cache line
23030 size. compat is the default.
23031
23032 -mlarge-data-threshold=threshold
23033 When -mcmodel=medium is specified, data objects larger than
23034 threshold are placed in the large data section. This value must be
23035 the same across all objects linked into the binary, and defaults to
23036 65535.
23037
23038 -mrtd
23039 Use a different function-calling convention, in which functions
23040 that take a fixed number of arguments return with the "ret num"
23041 instruction, which pops their arguments while returning. This
23042 saves one instruction in the caller since there is no need to pop
23043 the arguments there.
23044
23045 You can specify that an individual function is called with this
23046 calling sequence with the function attribute "stdcall". You can
23047 also override the -mrtd option by using the function attribute
23048 "cdecl".
23049
23050 Warning: this calling convention is incompatible with the one
23051 normally used on Unix, so you cannot use it if you need to call
23052 libraries compiled with the Unix compiler.
23053
23054 Also, you must provide function prototypes for all functions that
23055 take variable numbers of arguments (including "printf"); otherwise
23056 incorrect code is generated for calls to those functions.
23057
23058 In addition, seriously incorrect code results if you call a
23059 function with too many arguments. (Normally, extra arguments are
23060 harmlessly ignored.)
23061
23062 -mregparm=num
23063 Control how many registers are used to pass integer arguments. By
23064 default, no registers are used to pass arguments, and at most 3
23065 registers can be used. You can control this behavior for a
23066 specific function by using the function attribute "regparm".
23067
23068 Warning: if you use this switch, and num is nonzero, then you must
23069 build all modules with the same value, including any libraries.
23070 This includes the system libraries and startup modules.
23071
23072 -msseregparm
23073 Use SSE register passing conventions for float and double arguments
23074 and return values. You can control this behavior for a specific
23075 function by using the function attribute "sseregparm".
23076
23077 Warning: if you use this switch then you must build all modules
23078 with the same value, including any libraries. This includes the
23079 system libraries and startup modules.
23080
23081 -mvect8-ret-in-mem
23082 Return 8-byte vectors in memory instead of MMX registers. This is
23083 the default on Solaris@tie{}8 and 9 and VxWorks to match the ABI of
23084 the Sun Studio compilers until version 12. Later compiler versions
23085 (starting with Studio 12 Update@tie{}1) follow the ABI used by
23086 other x86 targets, which is the default on Solaris@tie{}10 and
23087 later. Only use this option if you need to remain compatible with
23088 existing code produced by those previous compiler versions or older
23089 versions of GCC.
23090
23091 -mpc32
23092 -mpc64
23093 -mpc80
23094 Set 80387 floating-point precision to 32, 64 or 80 bits. When
23095 -mpc32 is specified, the significands of results of floating-point
23096 operations are rounded to 24 bits (single precision); -mpc64 rounds
23097 the significands of results of floating-point operations to 53 bits
23098 (double precision) and -mpc80 rounds the significands of results of
23099 floating-point operations to 64 bits (extended double precision),
23100 which is the default. When this option is used, floating-point
23101 operations in higher precisions are not available to the programmer
23102 without setting the FPU control word explicitly.
23103
23104 Setting the rounding of floating-point operations to less than the
23105 default 80 bits can speed some programs by 2% or more. Note that
23106 some mathematical libraries assume that extended-precision (80-bit)
23107 floating-point operations are enabled by default; routines in such
23108 libraries could suffer significant loss of accuracy, typically
23109 through so-called "catastrophic cancellation", when this option is
23110 used to set the precision to less than extended precision.
23111
23112 -mstackrealign
23113 Realign the stack at entry. On the x86, the -mstackrealign option
23114 generates an alternate prologue and epilogue that realigns the run-
23115 time stack if necessary. This supports mixing legacy codes that
23116 keep 4-byte stack alignment with modern codes that keep 16-byte
23117 stack alignment for SSE compatibility. See also the attribute
23118 "force_align_arg_pointer", applicable to individual functions.
23119
23120 -mpreferred-stack-boundary=num
23121 Attempt to keep the stack boundary aligned to a 2 raised to num
23122 byte boundary. If -mpreferred-stack-boundary is not specified, the
23123 default is 4 (16 bytes or 128 bits).
23124
23125 Warning: When generating code for the x86-64 architecture with SSE
23126 extensions disabled, -mpreferred-stack-boundary=3 can be used to
23127 keep the stack boundary aligned to 8 byte boundary. Since x86-64
23128 ABI require 16 byte stack alignment, this is ABI incompatible and
23129 intended to be used in controlled environment where stack space is
23130 important limitation. This option leads to wrong code when
23131 functions compiled with 16 byte stack alignment (such as functions
23132 from a standard library) are called with misaligned stack. In this
23133 case, SSE instructions may lead to misaligned memory access traps.
23134 In addition, variable arguments are handled incorrectly for 16 byte
23135 aligned objects (including x87 long double and __int128), leading
23136 to wrong results. You must build all modules with
23137 -mpreferred-stack-boundary=3, including any libraries. This
23138 includes the system libraries and startup modules.
23139
23140 -mincoming-stack-boundary=num
23141 Assume the incoming stack is aligned to a 2 raised to num byte
23142 boundary. If -mincoming-stack-boundary is not specified, the one
23143 specified by -mpreferred-stack-boundary is used.
23144
23145 On Pentium and Pentium Pro, "double" and "long double" values
23146 should be aligned to an 8-byte boundary (see -malign-double) or
23147 suffer significant run time performance penalties. On Pentium III,
23148 the Streaming SIMD Extension (SSE) data type "__m128" may not work
23149 properly if it is not 16-byte aligned.
23150
23151 To ensure proper alignment of this values on the stack, the stack
23152 boundary must be as aligned as that required by any value stored on
23153 the stack. Further, every function must be generated such that it
23154 keeps the stack aligned. Thus calling a function compiled with a
23155 higher preferred stack boundary from a function compiled with a
23156 lower preferred stack boundary most likely misaligns the stack. It
23157 is recommended that libraries that use callbacks always use the
23158 default setting.
23159
23160 This extra alignment does consume extra stack space, and generally
23161 increases code size. Code that is sensitive to stack space usage,
23162 such as embedded systems and operating system kernels, may want to
23163 reduce the preferred alignment to -mpreferred-stack-boundary=2.
23164
23165 -mmmx
23166 -msse
23167 -msse2
23168 -msse3
23169 -mssse3
23170 -msse4
23171 -msse4a
23172 -msse4.1
23173 -msse4.2
23174 -mavx
23175 -mavx2
23176 -mavx512f
23177 -mavx512pf
23178 -mavx512er
23179 -mavx512cd
23180 -mavx512vl
23181 -mavx512bw
23182 -mavx512dq
23183 -mavx512ifma
23184 -mavx512vbmi
23185 -msha
23186 -maes
23187 -mpclmul
23188 -mclflushopt
23189 -mclwb
23190 -mfsgsbase
23191 -mrdrnd
23192 -mf16c
23193 -mfma
23194 -mpconfig
23195 -mwbnoinvd
23196 -mfma4
23197 -mprfchw
23198 -mrdpid
23199 -mprefetchwt1
23200 -mrdseed
23201 -msgx
23202 -mxop
23203 -mlwp
23204 -m3dnow
23205 -m3dnowa
23206 -mpopcnt
23207 -mabm
23208 -madx
23209 -mbmi
23210 -mbmi2
23211 -mlzcnt
23212 -mfxsr
23213 -mxsave
23214 -mxsaveopt
23215 -mxsavec
23216 -mxsaves
23217 -mrtm
23218 -mhle
23219 -mtbm
23220 -mmpx
23221 -mmwaitx
23222 -mclzero
23223 -mpku
23224 -mavx512vbmi2
23225 -mgfni
23226 -mvaes
23227 -mvpclmulqdq
23228 -mavx512bitalg
23229 -mmovdiri
23230 -mmovdir64b
23231 -mavx512vpopcntdq
23232 -mavx5124fmaps
23233 -mavx512vnni
23234 -mavx5124vnniw
23235 These switches enable the use of instructions in the MMX, SSE,
23236 SSE2, SSE3, SSSE3, SSE4, SSE4A, SSE4.1, SSE4.2, AVX, AVX2, AVX512F,
23237 AVX512PF, AVX512ER, AVX512CD, AVX512VL, AVX512BW, AVX512DQ,
23238 AVX512IFMA, AVX512VBMI, SHA, AES, PCLMUL, CLFLUSHOPT, CLWB,
23239 FSGSBASE, RDRND, F16C, FMA, PCONFIG, WBNOINVD, FMA4, PREFETCHW,
23240 RDPID, PREFETCHWT1, RDSEED, SGX, XOP, LWP, 3DNow!, enhanced 3DNow!,
23241 POPCNT, ABM, ADX, BMI, BMI2, LZCNT, FXSR, XSAVE, XSAVEOPT, XSAVEC,
23242 XSAVES, RTM, HLE, TBM, MPX, MWAITX, CLZERO, PKU, AVX512VBMI2, GFNI,
23243 VAES, VPCLMULQDQ, AVX512BITALG, MOVDIRI, MOVDIR64B,
23244 AVX512VPOPCNTDQ, AVX5124FMAPS, AVX512VNNI, or AVX5124VNNIW extended
23245 instruction sets. Each has a corresponding -mno- option to disable
23246 use of these instructions.
23247
23248 These extensions are also available as built-in functions: see x86
23249 Built-in Functions, for details of the functions enabled and
23250 disabled by these switches.
23251
23252 To generate SSE/SSE2 instructions automatically from floating-point
23253 code (as opposed to 387 instructions), see -mfpmath=sse.
23254
23255 GCC depresses SSEx instructions when -mavx is used. Instead, it
23256 generates new AVX instructions or AVX equivalence for all SSEx
23257 instructions when needed.
23258
23259 These options enable GCC to use these extended instructions in
23260 generated code, even without -mfpmath=sse. Applications that
23261 perform run-time CPU detection must compile separate files for each
23262 supported architecture, using the appropriate flags. In
23263 particular, the file containing the CPU detection code should be
23264 compiled without these options.
23265
23266 -mdump-tune-features
23267 This option instructs GCC to dump the names of the x86 performance
23268 tuning features and default settings. The names can be used in
23269 -mtune-ctrl=feature-list.
23270
23271 -mtune-ctrl=feature-list
23272 This option is used to do fine grain control of x86 code generation
23273 features. feature-list is a comma separated list of feature names.
23274 See also -mdump-tune-features. When specified, the feature is
23275 turned on if it is not preceded with ^, otherwise, it is turned
23276 off. -mtune-ctrl=feature-list is intended to be used by GCC
23277 developers. Using it may lead to code paths not covered by testing
23278 and can potentially result in compiler ICEs or runtime errors.
23279
23280 -mno-default
23281 This option instructs GCC to turn off all tunable features. See
23282 also -mtune-ctrl=feature-list and -mdump-tune-features.
23283
23284 -mcld
23285 This option instructs GCC to emit a "cld" instruction in the
23286 prologue of functions that use string instructions. String
23287 instructions depend on the DF flag to select between autoincrement
23288 or autodecrement mode. While the ABI specifies the DF flag to be
23289 cleared on function entry, some operating systems violate this
23290 specification by not clearing the DF flag in their exception
23291 dispatchers. The exception handler can be invoked with the DF flag
23292 set, which leads to wrong direction mode when string instructions
23293 are used. This option can be enabled by default on 32-bit x86
23294 targets by configuring GCC with the --enable-cld configure option.
23295 Generation of "cld" instructions can be suppressed with the
23296 -mno-cld compiler option in this case.
23297
23298 -mvzeroupper
23299 This option instructs GCC to emit a "vzeroupper" instruction before
23300 a transfer of control flow out of the function to minimize the AVX
23301 to SSE transition penalty as well as remove unnecessary "zeroupper"
23302 intrinsics.
23303
23304 -mprefer-avx128
23305 This option instructs GCC to use 128-bit AVX instructions instead
23306 of 256-bit AVX instructions in the auto-vectorizer.
23307
23308 -mprefer-vector-width=opt
23309 This option instructs GCC to use opt-bit vector width in
23310 instructions instead of default on the selected platform.
23311
23312 none
23313 No extra limitations applied to GCC other than defined by the
23314 selected platform.
23315
23316 128 Prefer 128-bit vector width for instructions.
23317
23318 256 Prefer 256-bit vector width for instructions.
23319
23320 512 Prefer 512-bit vector width for instructions.
23321
23322 -mcx16
23323 This option enables GCC to generate "CMPXCHG16B" instructions in
23324 64-bit code to implement compare-and-exchange operations on 16-byte
23325 aligned 128-bit objects. This is useful for atomic updates of data
23326 structures exceeding one machine word in size. The compiler uses
23327 this instruction to implement __sync Builtins. However, for
23328 __atomic Builtins operating on 128-bit integers, a library call is
23329 always used.
23330
23331 -msahf
23332 This option enables generation of "SAHF" instructions in 64-bit
23333 code. Early Intel Pentium 4 CPUs with Intel 64 support, prior to
23334 the introduction of Pentium 4 G1 step in December 2005, lacked the
23335 "LAHF" and "SAHF" instructions which are supported by AMD64. These
23336 are load and store instructions, respectively, for certain status
23337 flags. In 64-bit mode, the "SAHF" instruction is used to optimize
23338 "fmod", "drem", and "remainder" built-in functions; see Other
23339 Builtins for details.
23340
23341 -mmovbe
23342 This option enables use of the "movbe" instruction to implement
23343 "__builtin_bswap32" and "__builtin_bswap64".
23344
23345 -mshstk
23346 The -mshstk option enables shadow stack built-in functions from x86
23347 Control-flow Enforcement Technology (CET).
23348
23349 -mcrc32
23350 This option enables built-in functions "__builtin_ia32_crc32qi",
23351 "__builtin_ia32_crc32hi", "__builtin_ia32_crc32si" and
23352 "__builtin_ia32_crc32di" to generate the "crc32" machine
23353 instruction.
23354
23355 -mrecip
23356 This option enables use of "RCPSS" and "RSQRTSS" instructions (and
23357 their vectorized variants "RCPPS" and "RSQRTPS") with an additional
23358 Newton-Raphson step to increase precision instead of "DIVSS" and
23359 "SQRTSS" (and their vectorized variants) for single-precision
23360 floating-point arguments. These instructions are generated only
23361 when -funsafe-math-optimizations is enabled together with
23362 -ffinite-math-only and -fno-trapping-math. Note that while the
23363 throughput of the sequence is higher than the throughput of the
23364 non-reciprocal instruction, the precision of the sequence can be
23365 decreased by up to 2 ulp (i.e. the inverse of 1.0 equals
23366 0.99999994).
23367
23368 Note that GCC implements "1.0f/sqrtf(x)" in terms of "RSQRTSS" (or
23369 "RSQRTPS") already with -ffast-math (or the above option
23370 combination), and doesn't need -mrecip.
23371
23372 Also note that GCC emits the above sequence with additional Newton-
23373 Raphson step for vectorized single-float division and vectorized
23374 "sqrtf(x)" already with -ffast-math (or the above option
23375 combination), and doesn't need -mrecip.
23376
23377 -mrecip=opt
23378 This option controls which reciprocal estimate instructions may be
23379 used. opt is a comma-separated list of options, which may be
23380 preceded by a ! to invert the option:
23381
23382 all Enable all estimate instructions.
23383
23384 default
23385 Enable the default instructions, equivalent to -mrecip.
23386
23387 none
23388 Disable all estimate instructions, equivalent to -mno-recip.
23389
23390 div Enable the approximation for scalar division.
23391
23392 vec-div
23393 Enable the approximation for vectorized division.
23394
23395 sqrt
23396 Enable the approximation for scalar square root.
23397
23398 vec-sqrt
23399 Enable the approximation for vectorized square root.
23400
23401 So, for example, -mrecip=all,!sqrt enables all of the reciprocal
23402 approximations, except for square root.
23403
23404 -mveclibabi=type
23405 Specifies the ABI type to use for vectorizing intrinsics using an
23406 external library. Supported values for type are svml for the Intel
23407 short vector math library and acml for the AMD math core library.
23408 To use this option, both -ftree-vectorize and
23409 -funsafe-math-optimizations have to be enabled, and an SVML or ACML
23410 ABI-compatible library must be specified at link time.
23411
23412 GCC currently emits calls to "vmldExp2", "vmldLn2", "vmldLog102",
23413 "vmldPow2", "vmldTanh2", "vmldTan2", "vmldAtan2", "vmldAtanh2",
23414 "vmldCbrt2", "vmldSinh2", "vmldSin2", "vmldAsinh2", "vmldAsin2",
23415 "vmldCosh2", "vmldCos2", "vmldAcosh2", "vmldAcos2", "vmlsExp4",
23416 "vmlsLn4", "vmlsLog104", "vmlsPow4", "vmlsTanh4", "vmlsTan4",
23417 "vmlsAtan4", "vmlsAtanh4", "vmlsCbrt4", "vmlsSinh4", "vmlsSin4",
23418 "vmlsAsinh4", "vmlsAsin4", "vmlsCosh4", "vmlsCos4", "vmlsAcosh4"
23419 and "vmlsAcos4" for corresponding function type when
23420 -mveclibabi=svml is used, and "__vrd2_sin", "__vrd2_cos",
23421 "__vrd2_exp", "__vrd2_log", "__vrd2_log2", "__vrd2_log10",
23422 "__vrs4_sinf", "__vrs4_cosf", "__vrs4_expf", "__vrs4_logf",
23423 "__vrs4_log2f", "__vrs4_log10f" and "__vrs4_powf" for the
23424 corresponding function type when -mveclibabi=acml is used.
23425
23426 -mabi=name
23427 Generate code for the specified calling convention. Permissible
23428 values are sysv for the ABI used on GNU/Linux and other systems,
23429 and ms for the Microsoft ABI. The default is to use the Microsoft
23430 ABI when targeting Microsoft Windows and the SysV ABI on all other
23431 systems. You can control this behavior for specific functions by
23432 using the function attributes "ms_abi" and "sysv_abi".
23433
23434 -mforce-indirect-call
23435 Force all calls to functions to be indirect. This is useful when
23436 using Intel Processor Trace where it generates more precise timing
23437 information for function calls.
23438
23439 -mcall-ms2sysv-xlogues
23440 Due to differences in 64-bit ABIs, any Microsoft ABI function that
23441 calls a System V ABI function must consider RSI, RDI and XMM6-15 as
23442 clobbered. By default, the code for saving and restoring these
23443 registers is emitted inline, resulting in fairly lengthy prologues
23444 and epilogues. Using -mcall-ms2sysv-xlogues emits prologues and
23445 epilogues that use stubs in the static portion of libgcc to perform
23446 these saves and restores, thus reducing function size at the cost
23447 of a few extra instructions.
23448
23449 -mtls-dialect=type
23450 Generate code to access thread-local storage using the gnu or gnu2
23451 conventions. gnu is the conservative default; gnu2 is more
23452 efficient, but it may add compile- and run-time requirements that
23453 cannot be satisfied on all systems.
23454
23455 -mpush-args
23456 -mno-push-args
23457 Use PUSH operations to store outgoing parameters. This method is
23458 shorter and usually equally fast as method using SUB/MOV operations
23459 and is enabled by default. In some cases disabling it may improve
23460 performance because of improved scheduling and reduced
23461 dependencies.
23462
23463 -maccumulate-outgoing-args
23464 If enabled, the maximum amount of space required for outgoing
23465 arguments is computed in the function prologue. This is faster on
23466 most modern CPUs because of reduced dependencies, improved
23467 scheduling and reduced stack usage when the preferred stack
23468 boundary is not equal to 2. The drawback is a notable increase in
23469 code size. This switch implies -mno-push-args.
23470
23471 -mthreads
23472 Support thread-safe exception handling on MinGW. Programs that
23473 rely on thread-safe exception handling must compile and link all
23474 code with the -mthreads option. When compiling, -mthreads defines
23475 -D_MT; when linking, it links in a special thread helper library
23476 -lmingwthrd which cleans up per-thread exception-handling data.
23477
23478 -mms-bitfields
23479 -mno-ms-bitfields
23480 Enable/disable bit-field layout compatible with the native
23481 Microsoft Windows compiler.
23482
23483 If "packed" is used on a structure, or if bit-fields are used, it
23484 may be that the Microsoft ABI lays out the structure differently
23485 than the way GCC normally does. Particularly when moving packed
23486 data between functions compiled with GCC and the native Microsoft
23487 compiler (either via function call or as data in a file), it may be
23488 necessary to access either format.
23489
23490 This option is enabled by default for Microsoft Windows targets.
23491 This behavior can also be controlled locally by use of variable or
23492 type attributes. For more information, see x86 Variable Attributes
23493 and x86 Type Attributes.
23494
23495 The Microsoft structure layout algorithm is fairly simple with the
23496 exception of the bit-field packing. The padding and alignment of
23497 members of structures and whether a bit-field can straddle a
23498 storage-unit boundary are determine by these rules:
23499
23500 1. Structure members are stored sequentially in the order in which
23501 they are
23502 declared: the first member has the lowest memory address and
23503 the last member the highest.
23504
23505 2. Every data object has an alignment requirement. The alignment
23506 requirement
23507 for all data except structures, unions, and arrays is either
23508 the size of the object or the current packing size (specified
23509 with either the "aligned" attribute or the "pack" pragma),
23510 whichever is less. For structures, unions, and arrays, the
23511 alignment requirement is the largest alignment requirement of
23512 its members. Every object is allocated an offset so that:
23513
23514 offset % alignment_requirement == 0
23515
23516 3. Adjacent bit-fields are packed into the same 1-, 2-, or 4-byte
23517 allocation
23518 unit if the integral types are the same size and if the next
23519 bit-field fits into the current allocation unit without
23520 crossing the boundary imposed by the common alignment
23521 requirements of the bit-fields.
23522
23523 MSVC interprets zero-length bit-fields in the following ways:
23524
23525 1. If a zero-length bit-field is inserted between two bit-fields
23526 that
23527 are normally coalesced, the bit-fields are not coalesced.
23528
23529 For example:
23530
23531 struct
23532 {
23533 unsigned long bf_1 : 12;
23534 unsigned long : 0;
23535 unsigned long bf_2 : 12;
23536 } t1;
23537
23538 The size of "t1" is 8 bytes with the zero-length bit-field. If
23539 the zero-length bit-field were removed, "t1"'s size would be 4
23540 bytes.
23541
23542 2. If a zero-length bit-field is inserted after a bit-field, "foo",
23543 and the
23544 alignment of the zero-length bit-field is greater than the
23545 member that follows it, "bar", "bar" is aligned as the type of
23546 the zero-length bit-field.
23547
23548 For example:
23549
23550 struct
23551 {
23552 char foo : 4;
23553 short : 0;
23554 char bar;
23555 } t2;
23556
23557 struct
23558 {
23559 char foo : 4;
23560 short : 0;
23561 double bar;
23562 } t3;
23563
23564 For "t2", "bar" is placed at offset 2, rather than offset 1.
23565 Accordingly, the size of "t2" is 4. For "t3", the zero-length
23566 bit-field does not affect the alignment of "bar" or, as a
23567 result, the size of the structure.
23568
23569 Taking this into account, it is important to note the
23570 following:
23571
23572 1. If a zero-length bit-field follows a normal bit-field, the
23573 type of the
23574 zero-length bit-field may affect the alignment of the
23575 structure as whole. For example, "t2" has a size of 4
23576 bytes, since the zero-length bit-field follows a normal
23577 bit-field, and is of type short.
23578
23579 2. Even if a zero-length bit-field is not followed by a normal
23580 bit-field, it may
23581 still affect the alignment of the structure:
23582
23583 struct
23584 {
23585 char foo : 6;
23586 long : 0;
23587 } t4;
23588
23589 Here, "t4" takes up 4 bytes.
23590
23591 3. Zero-length bit-fields following non-bit-field members are
23592 ignored:
23593 struct
23594 {
23595 char foo;
23596 long : 0;
23597 char bar;
23598 } t5;
23599
23600 Here, "t5" takes up 2 bytes.
23601
23602 -mno-align-stringops
23603 Do not align the destination of inlined string operations. This
23604 switch reduces code size and improves performance in case the
23605 destination is already aligned, but GCC doesn't know about it.
23606
23607 -minline-all-stringops
23608 By default GCC inlines string operations only when the destination
23609 is known to be aligned to least a 4-byte boundary. This enables
23610 more inlining and increases code size, but may improve performance
23611 of code that depends on fast "memcpy", "strlen", and "memset" for
23612 short lengths.
23613
23614 -minline-stringops-dynamically
23615 For string operations of unknown size, use run-time checks with
23616 inline code for small blocks and a library call for large blocks.
23617
23618 -mstringop-strategy=alg
23619 Override the internal decision heuristic for the particular
23620 algorithm to use for inlining string operations. The allowed
23621 values for alg are:
23622
23623 rep_byte
23624 rep_4byte
23625 rep_8byte
23626 Expand using i386 "rep" prefix of the specified size.
23627
23628 byte_loop
23629 loop
23630 unrolled_loop
23631 Expand into an inline loop.
23632
23633 libcall
23634 Always use a library call.
23635
23636 -mmemcpy-strategy=strategy
23637 Override the internal decision heuristic to decide if
23638 "__builtin_memcpy" should be inlined and what inline algorithm to
23639 use when the expected size of the copy operation is known. strategy
23640 is a comma-separated list of alg:max_size:dest_align triplets. alg
23641 is specified in -mstringop-strategy, max_size specifies the max
23642 byte size with which inline algorithm alg is allowed. For the last
23643 triplet, the max_size must be "-1". The max_size of the triplets in
23644 the list must be specified in increasing order. The minimal byte
23645 size for alg is 0 for the first triplet and "max_size + 1" of the
23646 preceding range.
23647
23648 -mmemset-strategy=strategy
23649 The option is similar to -mmemcpy-strategy= except that it is to
23650 control "__builtin_memset" expansion.
23651
23652 -momit-leaf-frame-pointer
23653 Don't keep the frame pointer in a register for leaf functions.
23654 This avoids the instructions to save, set up, and restore frame
23655 pointers and makes an extra register available in leaf functions.
23656 The option -fomit-leaf-frame-pointer removes the frame pointer for
23657 leaf functions, which might make debugging harder.
23658
23659 -mtls-direct-seg-refs
23660 -mno-tls-direct-seg-refs
23661 Controls whether TLS variables may be accessed with offsets from
23662 the TLS segment register (%gs for 32-bit, %fs for 64-bit), or
23663 whether the thread base pointer must be added. Whether or not this
23664 is valid depends on the operating system, and whether it maps the
23665 segment to cover the entire TLS area.
23666
23667 For systems that use the GNU C Library, the default is on.
23668
23669 -msse2avx
23670 -mno-sse2avx
23671 Specify that the assembler should encode SSE instructions with VEX
23672 prefix. The option -mavx turns this on by default.
23673
23674 -mfentry
23675 -mno-fentry
23676 If profiling is active (-pg), put the profiling counter call before
23677 the prologue. Note: On x86 architectures the attribute
23678 "ms_hook_prologue" isn't possible at the moment for -mfentry and
23679 -pg.
23680
23681 -mrecord-mcount
23682 -mno-record-mcount
23683 If profiling is active (-pg), generate a __mcount_loc section that
23684 contains pointers to each profiling call. This is useful for
23685 automatically patching and out calls.
23686
23687 -mnop-mcount
23688 -mno-nop-mcount
23689 If profiling is active (-pg), generate the calls to the profiling
23690 functions as NOPs. This is useful when they should be patched in
23691 later dynamically. This is likely only useful together with
23692 -mrecord-mcount.
23693
23694 -mskip-rax-setup
23695 -mno-skip-rax-setup
23696 When generating code for the x86-64 architecture with SSE
23697 extensions disabled, -mskip-rax-setup can be used to skip setting
23698 up RAX register when there are no variable arguments passed in
23699 vector registers.
23700
23701 Warning: Since RAX register is used to avoid unnecessarily saving
23702 vector registers on stack when passing variable arguments, the
23703 impacts of this option are callees may waste some stack space,
23704 misbehave or jump to a random location. GCC 4.4 or newer don't
23705 have those issues, regardless the RAX register value.
23706
23707 -m8bit-idiv
23708 -mno-8bit-idiv
23709 On some processors, like Intel Atom, 8-bit unsigned integer divide
23710 is much faster than 32-bit/64-bit integer divide. This option
23711 generates a run-time check. If both dividend and divisor are
23712 within range of 0 to 255, 8-bit unsigned integer divide is used
23713 instead of 32-bit/64-bit integer divide.
23714
23715 -mavx256-split-unaligned-load
23716 -mavx256-split-unaligned-store
23717 Split 32-byte AVX unaligned load and store.
23718
23719 -mstack-protector-guard=guard
23720 -mstack-protector-guard-reg=reg
23721 -mstack-protector-guard-offset=offset
23722 Generate stack protection code using canary at guard. Supported
23723 locations are global for global canary or tls for per-thread canary
23724 in the TLS block (the default). This option has effect only when
23725 -fstack-protector or -fstack-protector-all is specified.
23726
23727 With the latter choice the options -mstack-protector-guard-reg=reg
23728 and -mstack-protector-guard-offset=offset furthermore specify which
23729 segment register (%fs or %gs) to use as base register for reading
23730 the canary, and from what offset from that base register. The
23731 default for those is as specified in the relevant ABI.
23732
23733 -mmitigate-rop
23734 Try to avoid generating code sequences that contain unintended
23735 return opcodes, to mitigate against certain forms of attack. At the
23736 moment, this option is limited in what it can do and should not be
23737 relied on to provide serious protection.
23738
23739 -mgeneral-regs-only
23740 Generate code that uses only the general-purpose registers. This
23741 prevents the compiler from using floating-point, vector, mask and
23742 bound registers.
23743
23744 -mindirect-branch=choice
23745 Convert indirect call and jump with choice. The default is keep,
23746 which keeps indirect call and jump unmodified. thunk converts
23747 indirect call and jump to call and return thunk. thunk-inline
23748 converts indirect call and jump to inlined call and return thunk.
23749 thunk-extern converts indirect call and jump to external call and
23750 return thunk provided in a separate object file. You can control
23751 this behavior for a specific function by using the function
23752 attribute "indirect_branch".
23753
23754 Note that -mcmodel=large is incompatible with
23755 -mindirect-branch=thunk and -mindirect-branch=thunk-extern since
23756 the thunk function may not be reachable in the large code model.
23757
23758 Note that -mindirect-branch=thunk-extern is incompatible with
23759 -fcf-protection=branch and -fcheck-pointer-bounds since the
23760 external thunk can not be modified to disable control-flow check.
23761
23762 -mfunction-return=choice
23763 Convert function return with choice. The default is keep, which
23764 keeps function return unmodified. thunk converts function return
23765 to call and return thunk. thunk-inline converts function return to
23766 inlined call and return thunk. thunk-extern converts function
23767 return to external call and return thunk provided in a separate
23768 object file. You can control this behavior for a specific function
23769 by using the function attribute "function_return".
23770
23771 Note that -mcmodel=large is incompatible with
23772 -mfunction-return=thunk and -mfunction-return=thunk-extern since
23773 the thunk function may not be reachable in the large code model.
23774
23775 -mindirect-branch-register
23776 Force indirect call and jump via register.
23777
23778 These -m switches are supported in addition to the above on x86-64
23779 processors in 64-bit environments.
23780
23781 -m32
23782 -m64
23783 -mx32
23784 -m16
23785 -miamcu
23786 Generate code for a 16-bit, 32-bit or 64-bit environment. The -m32
23787 option sets "int", "long", and pointer types to 32 bits, and
23788 generates code that runs on any i386 system.
23789
23790 The -m64 option sets "int" to 32 bits and "long" and pointer types
23791 to 64 bits, and generates code for the x86-64 architecture. For
23792 Darwin only the -m64 option also turns off the -fno-pic and
23793 -mdynamic-no-pic options.
23794
23795 The -mx32 option sets "int", "long", and pointer types to 32 bits,
23796 and generates code for the x86-64 architecture.
23797
23798 The -m16 option is the same as -m32, except for that it outputs the
23799 ".code16gcc" assembly directive at the beginning of the assembly
23800 output so that the binary can run in 16-bit mode.
23801
23802 The -miamcu option generates code which conforms to Intel MCU
23803 psABI. It requires the -m32 option to be turned on.
23804
23805 -mno-red-zone
23806 Do not use a so-called "red zone" for x86-64 code. The red zone is
23807 mandated by the x86-64 ABI; it is a 128-byte area beyond the
23808 location of the stack pointer that is not modified by signal or
23809 interrupt handlers and therefore can be used for temporary data
23810 without adjusting the stack pointer. The flag -mno-red-zone
23811 disables this red zone.
23812
23813 -mcmodel=small
23814 Generate code for the small code model: the program and its symbols
23815 must be linked in the lower 2 GB of the address space. Pointers
23816 are 64 bits. Programs can be statically or dynamically linked.
23817 This is the default code model.
23818
23819 -mcmodel=kernel
23820 Generate code for the kernel code model. The kernel runs in the
23821 negative 2 GB of the address space. This model has to be used for
23822 Linux kernel code.
23823
23824 -mcmodel=medium
23825 Generate code for the medium model: the program is linked in the
23826 lower 2 GB of the address space. Small symbols are also placed
23827 there. Symbols with sizes larger than -mlarge-data-threshold are
23828 put into large data or BSS sections and can be located above 2GB.
23829 Programs can be statically or dynamically linked.
23830
23831 -mcmodel=large
23832 Generate code for the large model. This model makes no assumptions
23833 about addresses and sizes of sections.
23834
23835 -maddress-mode=long
23836 Generate code for long address mode. This is only supported for
23837 64-bit and x32 environments. It is the default address mode for
23838 64-bit environments.
23839
23840 -maddress-mode=short
23841 Generate code for short address mode. This is only supported for
23842 32-bit and x32 environments. It is the default address mode for
23843 32-bit and x32 environments.
23844
23845 x86 Windows Options
23846 These additional options are available for Microsoft Windows targets:
23847
23848 -mconsole
23849 This option specifies that a console application is to be
23850 generated, by instructing the linker to set the PE header subsystem
23851 type required for console applications. This option is available
23852 for Cygwin and MinGW targets and is enabled by default on those
23853 targets.
23854
23855 -mdll
23856 This option is available for Cygwin and MinGW targets. It
23857 specifies that a DLL---a dynamic link library---is to be generated,
23858 enabling the selection of the required runtime startup object and
23859 entry point.
23860
23861 -mnop-fun-dllimport
23862 This option is available for Cygwin and MinGW targets. It
23863 specifies that the "dllimport" attribute should be ignored.
23864
23865 -mthread
23866 This option is available for MinGW targets. It specifies that
23867 MinGW-specific thread support is to be used.
23868
23869 -municode
23870 This option is available for MinGW-w64 targets. It causes the
23871 "UNICODE" preprocessor macro to be predefined, and chooses Unicode-
23872 capable runtime startup code.
23873
23874 -mwin32
23875 This option is available for Cygwin and MinGW targets. It
23876 specifies that the typical Microsoft Windows predefined macros are
23877 to be set in the pre-processor, but does not influence the choice
23878 of runtime library/startup code.
23879
23880 -mwindows
23881 This option is available for Cygwin and MinGW targets. It
23882 specifies that a GUI application is to be generated by instructing
23883 the linker to set the PE header subsystem type appropriately.
23884
23885 -fno-set-stack-executable
23886 This option is available for MinGW targets. It specifies that the
23887 executable flag for the stack used by nested functions isn't set.
23888 This is necessary for binaries running in kernel mode of Microsoft
23889 Windows, as there the User32 API, which is used to set executable
23890 privileges, isn't available.
23891
23892 -fwritable-relocated-rdata
23893 This option is available for MinGW and Cygwin targets. It
23894 specifies that relocated-data in read-only section is put into the
23895 ".data" section. This is a necessary for older runtimes not
23896 supporting modification of ".rdata" sections for pseudo-relocation.
23897
23898 -mpe-aligned-commons
23899 This option is available for Cygwin and MinGW targets. It
23900 specifies that the GNU extension to the PE file format that permits
23901 the correct alignment of COMMON variables should be used when
23902 generating code. It is enabled by default if GCC detects that the
23903 target assembler found during configuration supports the feature.
23904
23905 See also under x86 Options for standard options.
23906
23907 Xstormy16 Options
23908 These options are defined for Xstormy16:
23909
23910 -msim
23911 Choose startup files and linker script suitable for the simulator.
23912
23913 Xtensa Options
23914 These options are supported for Xtensa targets:
23915
23916 -mconst16
23917 -mno-const16
23918 Enable or disable use of "CONST16" instructions for loading
23919 constant values. The "CONST16" instruction is currently not a
23920 standard option from Tensilica. When enabled, "CONST16"
23921 instructions are always used in place of the standard "L32R"
23922 instructions. The use of "CONST16" is enabled by default only if
23923 the "L32R" instruction is not available.
23924
23925 -mfused-madd
23926 -mno-fused-madd
23927 Enable or disable use of fused multiply/add and multiply/subtract
23928 instructions in the floating-point option. This has no effect if
23929 the floating-point option is not also enabled. Disabling fused
23930 multiply/add and multiply/subtract instructions forces the compiler
23931 to use separate instructions for the multiply and add/subtract
23932 operations. This may be desirable in some cases where strict IEEE
23933 754-compliant results are required: the fused multiply add/subtract
23934 instructions do not round the intermediate result, thereby
23935 producing results with more bits of precision than specified by the
23936 IEEE standard. Disabling fused multiply add/subtract instructions
23937 also ensures that the program output is not sensitive to the
23938 compiler's ability to combine multiply and add/subtract operations.
23939
23940 -mserialize-volatile
23941 -mno-serialize-volatile
23942 When this option is enabled, GCC inserts "MEMW" instructions before
23943 "volatile" memory references to guarantee sequential consistency.
23944 The default is -mserialize-volatile. Use -mno-serialize-volatile
23945 to omit the "MEMW" instructions.
23946
23947 -mforce-no-pic
23948 For targets, like GNU/Linux, where all user-mode Xtensa code must
23949 be position-independent code (PIC), this option disables PIC for
23950 compiling kernel code.
23951
23952 -mtext-section-literals
23953 -mno-text-section-literals
23954 These options control the treatment of literal pools. The default
23955 is -mno-text-section-literals, which places literals in a separate
23956 section in the output file. This allows the literal pool to be
23957 placed in a data RAM/ROM, and it also allows the linker to combine
23958 literal pools from separate object files to remove redundant
23959 literals and improve code size. With -mtext-section-literals, the
23960 literals are interspersed in the text section in order to keep them
23961 as close as possible to their references. This may be necessary
23962 for large assembly files. Literals for each function are placed
23963 right before that function.
23964
23965 -mauto-litpools
23966 -mno-auto-litpools
23967 These options control the treatment of literal pools. The default
23968 is -mno-auto-litpools, which places literals in a separate section
23969 in the output file unless -mtext-section-literals is used. With
23970 -mauto-litpools the literals are interspersed in the text section
23971 by the assembler. Compiler does not produce explicit ".literal"
23972 directives and loads literals into registers with "MOVI"
23973 instructions instead of "L32R" to let the assembler do relaxation
23974 and place literals as necessary. This option allows assembler to
23975 create several literal pools per function and assemble very big
23976 functions, which may not be possible with -mtext-section-literals.
23977
23978 -mtarget-align
23979 -mno-target-align
23980 When this option is enabled, GCC instructs the assembler to
23981 automatically align instructions to reduce branch penalties at the
23982 expense of some code density. The assembler attempts to widen
23983 density instructions to align branch targets and the instructions
23984 following call instructions. If there are not enough preceding
23985 safe density instructions to align a target, no widening is
23986 performed. The default is -mtarget-align. These options do not
23987 affect the treatment of auto-aligned instructions like "LOOP",
23988 which the assembler always aligns, either by widening density
23989 instructions or by inserting NOP instructions.
23990
23991 -mlongcalls
23992 -mno-longcalls
23993 When this option is enabled, GCC instructs the assembler to
23994 translate direct calls to indirect calls unless it can determine
23995 that the target of a direct call is in the range allowed by the
23996 call instruction. This translation typically occurs for calls to
23997 functions in other source files. Specifically, the assembler
23998 translates a direct "CALL" instruction into an "L32R" followed by a
23999 "CALLX" instruction. The default is -mno-longcalls. This option
24000 should be used in programs where the call target can potentially be
24001 out of range. This option is implemented in the assembler, not the
24002 compiler, so the assembly code generated by GCC still shows direct
24003 call instructions---look at the disassembled object code to see the
24004 actual instructions. Note that the assembler uses an indirect call
24005 for every cross-file call, not just those that really are out of
24006 range.
24007
24008 zSeries Options
24009 These are listed under
24010
24012 This section describes several environment variables that affect how
24013 GCC operates. Some of them work by specifying directories or prefixes
24014 to use when searching for various kinds of files. Some are used to
24015 specify other aspects of the compilation environment.
24016
24017 Note that you can also specify places to search using options such as
24018 -B, -I and -L. These take precedence over places specified using
24019 environment variables, which in turn take precedence over those
24020 specified by the configuration of GCC.
24021
24022 LANG
24023 LC_CTYPE
24024 LC_MESSAGES
24025 LC_ALL
24026 These environment variables control the way that GCC uses
24027 localization information which allows GCC to work with different
24028 national conventions. GCC inspects the locale categories LC_CTYPE
24029 and LC_MESSAGES if it has been configured to do so. These locale
24030 categories can be set to any value supported by your installation.
24031 A typical value is en_GB.UTF-8 for English in the United Kingdom
24032 encoded in UTF-8.
24033
24034 The LC_CTYPE environment variable specifies character
24035 classification. GCC uses it to determine the character boundaries
24036 in a string; this is needed for some multibyte encodings that
24037 contain quote and escape characters that are otherwise interpreted
24038 as a string end or escape.
24039
24040 The LC_MESSAGES environment variable specifies the language to use
24041 in diagnostic messages.
24042
24043 If the LC_ALL environment variable is set, it overrides the value
24044 of LC_CTYPE and LC_MESSAGES; otherwise, LC_CTYPE and LC_MESSAGES
24045 default to the value of the LANG environment variable. If none of
24046 these variables are set, GCC defaults to traditional C English
24047 behavior.
24048
24049 TMPDIR
24050 If TMPDIR is set, it specifies the directory to use for temporary
24051 files. GCC uses temporary files to hold the output of one stage of
24052 compilation which is to be used as input to the next stage: for
24053 example, the output of the preprocessor, which is the input to the
24054 compiler proper.
24055
24056 GCC_COMPARE_DEBUG
24057 Setting GCC_COMPARE_DEBUG is nearly equivalent to passing
24058 -fcompare-debug to the compiler driver. See the documentation of
24059 this option for more details.
24060
24061 GCC_EXEC_PREFIX
24062 If GCC_EXEC_PREFIX is set, it specifies a prefix to use in the
24063 names of the subprograms executed by the compiler. No slash is
24064 added when this prefix is combined with the name of a subprogram,
24065 but you can specify a prefix that ends with a slash if you wish.
24066
24067 If GCC_EXEC_PREFIX is not set, GCC attempts to figure out an
24068 appropriate prefix to use based on the pathname it is invoked with.
24069
24070 If GCC cannot find the subprogram using the specified prefix, it
24071 tries looking in the usual places for the subprogram.
24072
24073 The default value of GCC_EXEC_PREFIX is prefix/lib/gcc/ where
24074 prefix is the prefix to the installed compiler. In many cases
24075 prefix is the value of "prefix" when you ran the configure script.
24076
24077 Other prefixes specified with -B take precedence over this prefix.
24078
24079 This prefix is also used for finding files such as crt0.o that are
24080 used for linking.
24081
24082 In addition, the prefix is used in an unusual way in finding the
24083 directories to search for header files. For each of the standard
24084 directories whose name normally begins with /usr/local/lib/gcc
24085 (more precisely, with the value of GCC_INCLUDE_DIR), GCC tries
24086 replacing that beginning with the specified prefix to produce an
24087 alternate directory name. Thus, with -Bfoo/, GCC searches foo/bar
24088 just before it searches the standard directory /usr/local/lib/bar.
24089 If a standard directory begins with the configured prefix then the
24090 value of prefix is replaced by GCC_EXEC_PREFIX when looking for
24091 header files.
24092
24093 COMPILER_PATH
24094 The value of COMPILER_PATH is a colon-separated list of
24095 directories, much like PATH. GCC tries the directories thus
24096 specified when searching for subprograms, if it cannot find the
24097 subprograms using GCC_EXEC_PREFIX.
24098
24099 LIBRARY_PATH
24100 The value of LIBRARY_PATH is a colon-separated list of directories,
24101 much like PATH. When configured as a native compiler, GCC tries
24102 the directories thus specified when searching for special linker
24103 files, if it cannot find them using GCC_EXEC_PREFIX. Linking using
24104 GCC also uses these directories when searching for ordinary
24105 libraries for the -l option (but directories specified with -L come
24106 first).
24107
24108 LANG
24109 This variable is used to pass locale information to the compiler.
24110 One way in which this information is used is to determine the
24111 character set to be used when character literals, string literals
24112 and comments are parsed in C and C++. When the compiler is
24113 configured to allow multibyte characters, the following values for
24114 LANG are recognized:
24115
24116 C-JIS
24117 Recognize JIS characters.
24118
24119 C-SJIS
24120 Recognize SJIS characters.
24121
24122 C-EUCJP
24123 Recognize EUCJP characters.
24124
24125 If LANG is not defined, or if it has some other value, then the
24126 compiler uses "mblen" and "mbtowc" as defined by the default locale
24127 to recognize and translate multibyte characters.
24128
24129 Some additional environment variables affect the behavior of the
24130 preprocessor.
24131
24132 CPATH
24133 C_INCLUDE_PATH
24134 CPLUS_INCLUDE_PATH
24135 OBJC_INCLUDE_PATH
24136 Each variable's value is a list of directories separated by a
24137 special character, much like PATH, in which to look for header
24138 files. The special character, "PATH_SEPARATOR", is target-
24139 dependent and determined at GCC build time. For Microsoft Windows-
24140 based targets it is a semicolon, and for almost all other targets
24141 it is a colon.
24142
24143 CPATH specifies a list of directories to be searched as if
24144 specified with -I, but after any paths given with -I options on the
24145 command line. This environment variable is used regardless of
24146 which language is being preprocessed.
24147
24148 The remaining environment variables apply only when preprocessing
24149 the particular language indicated. Each specifies a list of
24150 directories to be searched as if specified with -isystem, but after
24151 any paths given with -isystem options on the command line.
24152
24153 In all these variables, an empty element instructs the compiler to
24154 search its current working directory. Empty elements can appear at
24155 the beginning or end of a path. For instance, if the value of
24156 CPATH is ":/special/include", that has the same effect as
24157 -I. -I/special/include.
24158
24159 DEPENDENCIES_OUTPUT
24160 If this variable is set, its value specifies how to output
24161 dependencies for Make based on the non-system header files
24162 processed by the compiler. System header files are ignored in the
24163 dependency output.
24164
24165 The value of DEPENDENCIES_OUTPUT can be just a file name, in which
24166 case the Make rules are written to that file, guessing the target
24167 name from the source file name. Or the value can have the form
24168 file target, in which case the rules are written to file file using
24169 target as the target name.
24170
24171 In other words, this environment variable is equivalent to
24172 combining the options -MM and -MF, with an optional -MT switch too.
24173
24174 SUNPRO_DEPENDENCIES
24175 This variable is the same as DEPENDENCIES_OUTPUT (see above),
24176 except that system header files are not ignored, so it implies -M
24177 rather than -MM. However, the dependence on the main input file is
24178 omitted.
24179
24180 SOURCE_DATE_EPOCH
24181 If this variable is set, its value specifies a UNIX timestamp to be
24182 used in replacement of the current date and time in the "__DATE__"
24183 and "__TIME__" macros, so that the embedded timestamps become
24184 reproducible.
24185
24186 The value of SOURCE_DATE_EPOCH must be a UNIX timestamp, defined as
24187 the number of seconds (excluding leap seconds) since 01 Jan 1970
24188 00:00:00 represented in ASCII; identical to the output of
24189 @command{date +%s} on GNU/Linux and other systems that support the
24190 %s extension in the "date" command.
24191
24192 The value should be a known timestamp such as the last modification
24193 time of the source or package and it should be set by the build
24194 process.
24195
24197 For instructions on reporting bugs, see
24198 <http://bugzilla.redhat.com/bugzilla>.
24199
24201 1. On some systems, gcc -shared needs to build supplementary stub code
24202 for constructors to work. On multi-libbed systems, gcc -shared
24203 must select the correct support libraries to link against. Failing
24204 to supply the correct flags may lead to subtle defects. Supplying
24205 them in cases where they are not necessary is innocuous.
24206
24208 gpl(7), gfdl(7), fsf-funding(7), cpp(1), gcov(1), as(1), ld(1), gdb(1),
24209 dbx(1) and the Info entries for gcc, cpp, as, ld, binutils and gdb.
24210
24212 See the Info entry for gcc, or
24213 <http://gcc.gnu.org/onlinedocs/gcc/Contributors.html>, for contributors
24214 to GCC.
24215
24217 Copyright (c) 1988-2018 Free Software Foundation, Inc.
24218
24219 Permission is granted to copy, distribute and/or modify this document
24220 under the terms of the GNU Free Documentation License, Version 1.3 or
24221 any later version published by the Free Software Foundation; with the
24222 Invariant Sections being "GNU General Public License" and "Funding Free
24223 Software", the Front-Cover texts being (a) (see below), and with the
24224 Back-Cover Texts being (b) (see below). A copy of the license is
24225 included in the gfdl(7) man page.
24226
24227 (a) The FSF's Front-Cover Text is:
24228
24229 A GNU Manual
24230
24231 (b) The FSF's Back-Cover Text is:
24232
24233 You have freedom to copy and modify this GNU Manual, like GNU
24234 software. Copies published by the Free Software Foundation raise
24235 funds for GNU development.
24236
24237
24238
24239gcc-8 2019-02-23 GCC(1)