1@c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2@c 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. 3@c This is part of the GCC manual. 4@c For copying conditions, see the file gcc.texi. 5 6@ignore 7@c man begin INCLUDE 8@include gcc-vers.texi 9@c man end 10 11@c man begin COPYRIGHT 12Copyright @copyright{} 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 131999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. 14 15Permission is granted to copy, distribute and/or modify this document 16under the terms of the GNU Free Documentation License, Version 1.2 or 17any later version published by the Free Software Foundation; with the 18Invariant Sections being ``GNU General Public License'' and ``Funding 19Free Software'', the Front-Cover texts being (a) (see below), and with 20the Back-Cover Texts being (b) (see below). A copy of the license is 21included in the gfdl(7) man page. 22 23(a) The FSF's Front-Cover Text is: 24 25 A GNU Manual 26 27(b) The FSF's Back-Cover Text is: 28 29 You have freedom to copy and modify this GNU Manual, like GNU 30 software. Copies published by the Free Software Foundation raise 31 funds for GNU development. 32@c man end 33@c Set file name and title for the man page. 34@setfilename gcc 35@settitle GNU project C and C++ compiler 36@c man begin SYNOPSIS 37gcc [@option{-c}|@option{-S}|@option{-E}] [@option{-std=}@var{standard}] 38 [@option{-g}] [@option{-pg}] [@option{-O}@var{level}] 39 [@option{-W}@var{warn}@dots{}] [@option{-pedantic}] 40 [@option{-I}@var{dir}@dots{}] [@option{-L}@var{dir}@dots{}] 41 [@option{-D}@var{macro}[=@var{defn}]@dots{}] [@option{-U}@var{macro}] 42 [@option{-f}@var{option}@dots{}] [@option{-m}@var{machine-option}@dots{}] 43 [@option{-o} @var{outfile}] [@@@var{file}] @var{infile}@dots{} 44 45Only the most useful options are listed here; see below for the 46remainder. @samp{g++} accepts mostly the same options as @samp{gcc}. 47@c man end 48@c man begin SEEALSO 49gpl(7), gfdl(7), fsf-funding(7), 50cpp(1), gcov(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1) 51and the Info entries for @file{gcc}, @file{cpp}, @file{as}, 52@file{ld}, @file{binutils} and @file{gdb}. 53@c man end 54@c man begin BUGS 55For instructions on reporting bugs, see 56@w{@uref{http://gcc.gnu.org/bugs.html}}. 57@c man end 58@c man begin AUTHOR 59See the Info entry for @command{gcc}, or 60@w{@uref{http://gcc.gnu.org/onlinedocs/gcc/Contributors.html}}, 61for contributors to GCC@. 62@c man end 63@end ignore 64 65@node Invoking GCC 66@chapter GCC Command Options 67@cindex GCC command options 68@cindex command options 69@cindex options, GCC command 70 71@c man begin DESCRIPTION 72When you invoke GCC, it normally does preprocessing, compilation, 73assembly and linking. The ``overall options'' allow you to stop this 74process at an intermediate stage. For example, the @option{-c} option 75says not to run the linker. Then the output consists of object files 76output by the assembler. 77 78Other options are passed on to one stage of processing. Some options 79control the preprocessor and others the compiler itself. Yet other 80options control the assembler and linker; most of these are not 81documented here, since you rarely need to use any of them. 82 83@cindex C compilation options 84Most of the command line options that you can use with GCC are useful 85for C programs; when an option is only useful with another language 86(usually C++), the explanation says so explicitly. If the description 87for a particular option does not mention a source language, you can use 88that option with all supported languages. 89 90@cindex C++ compilation options 91@xref{Invoking G++,,Compiling C++ Programs}, for a summary of special 92options for compiling C++ programs. 93 94@cindex grouping options 95@cindex options, grouping 96The @command{gcc} program accepts options and file names as operands. Many 97options have multi-letter names; therefore multiple single-letter options 98may @emph{not} be grouped: @option{-dr} is very different from @w{@samp{-d 99-r}}. 100 101@cindex order of options 102@cindex options, order 103You can mix options and other arguments. For the most part, the order 104you use doesn't matter. Order does matter when you use several options 105of the same kind; for example, if you specify @option{-L} more than once, 106the directories are searched in the order specified. 107 108Many options have long names starting with @samp{-f} or with 109@samp{-W}---for example, 110@option{-fmove-loop-invariants}, @option{-Wformat} and so on. Most of 111these have both positive and negative forms; the negative form of 112@option{-ffoo} would be @option{-fno-foo}. This manual documents 113only one of these two forms, whichever one is not the default. 114 115@c man end 116 117@xref{Option Index}, for an index to GCC's options. 118 119@menu 120* Option Summary:: Brief list of all options, without explanations. 121* Overall Options:: Controlling the kind of output: 122 an executable, object files, assembler files, 123 or preprocessed source. 124* Invoking G++:: Compiling C++ programs. 125* C Dialect Options:: Controlling the variant of C language compiled. 126* C++ Dialect Options:: Variations on C++. 127* Language Independent Options:: Controlling how diagnostics should be 128 formatted. 129* Warning Options:: How picky should the compiler be? 130* Debugging Options:: Symbol tables, measurements, and debugging dumps. 131* Optimize Options:: How much optimization? 132* Preprocessor Options:: Controlling header files and macro definitions. 133 Also, getting dependency information for Make. 134* Assembler Options:: Passing options to the assembler. 135* Link Options:: Specifying libraries and so on. 136* Directory Options:: Where to find header files and libraries. 137 Where to find the compiler executable files. 138* Spec Files:: How to pass switches to sub-processes. 139* Target Options:: Running a cross-compiler, or an old version of GCC. 140* Submodel Options:: Specifying minor hardware or convention variations, 141 such as 68010 vs 68020. 142* Code Gen Options:: Specifying conventions for function calls, data layout 143 and register usage. 144* Environment Variables:: Env vars that affect GCC. 145* Precompiled Headers:: Compiling a header once, and using it many times. 146* Running Protoize:: Automatically adding or removing function prototypes. 147@end menu 148 149@c man begin OPTIONS 150 151@node Option Summary 152@section Option Summary 153 154Here is a summary of all the options, grouped by type. Explanations are 155in the following sections. 156 157@table @emph 158@item Overall Options 159@xref{Overall Options,,Options Controlling the Kind of Output}. 160@gccoptlist{-c -S -E -o @var{file} -combine -pipe -pass-exit-codes @gol 161-x @var{language} -v -### --help --target-help --version @@@var{file}} 162 163@item C Language Options 164@xref{C Dialect Options,,Options Controlling C Dialect}. 165@gccoptlist{-ansi -std=@var{standard} -fgnu89-inline @gol 166-aux-info @var{filename} @gol 167-fno-asm -fno-builtin -fno-builtin-@var{function} @gol 168-fhosted -ffreestanding -fopenmp -fms-extensions @gol 169-trigraphs -no-integrated-cpp -traditional -traditional-cpp @gol 170-fallow-single-precision -fcond-mismatch -flax-vector-conversions @gol 171-fsigned-bitfields -fsigned-char @gol 172@c APPLE LOCAL -Wnewline-eof 2001-08-23 --sts ** 173-Wnewline-eof (Apple compatible) @gol 174-funsigned-bitfields -funsigned-char} 175 176@item C++ Language Options 177@xref{C++ Dialect Options,,Options Controlling C++ Dialect}. 178@gccoptlist{-fabi-version=@var{n} -fno-access-control -fcheck-new @gol 179-fconserve-space -ffriend-injection @gol 180-fno-elide-constructors @gol 181-fno-enforce-eh-specs @gol 182-ffor-scope -fno-for-scope -fno-gnu-keywords @gol 183-fno-implicit-templates @gol 184-fno-implicit-inline-templates @gol 185-fno-implement-inlines -fms-extensions @gol 186-fno-nonansi-builtins -fno-operator-names @gol 187-fno-optional-diags -fpermissive @gol 188-frepo -fno-rtti -fstats -ftemplate-depth-@var{n} @gol 189-fno-threadsafe-statics -fuse-cxa-atexit -fno-weak -nostdinc++ @gol 190-fno-default-inline -fvisibility-inlines-hidden @gol 191-fvisibility-ms-compat @gol 192-Wabi -Wctor-dtor-privacy @gol 193-Wnon-virtual-dtor -Wreorder @gol 194-Weffc++ -Wno-deprecated -Wstrict-null-sentinel @gol 195-Wno-non-template-friend -Wold-style-cast @gol 196-Woverloaded-virtual -Wno-pmf-conversions @gol 197-Wsign-promo} 198 199@item Language Independent Options 200@xref{Language Independent Options,,Options to Control Diagnostic Messages Formatting}. 201@gccoptlist{-fmessage-length=@var{n} @gol 202-fdiagnostics-show-location=@r{[}once@r{|}every-line@r{]} @gol 203-fdiagnostics-show-option} 204 205@item Warning Options 206@xref{Warning Options,,Options to Request or Suppress Warnings}. 207@gccoptlist{-fsyntax-only -pedantic -pedantic-errors @gol 208-w -Wextra -Wall -Waddress -Waggregate-return -Wno-attributes @gol 209-Wc++-compat -Wcast-align -Wcast-qual -Wchar-subscripts -Wcomment @gol 210-Wconversion -Wno-deprecated-declarations @gol 211-Wdisabled-optimization -Wno-div-by-zero -Wno-endif-labels @gol 212-Werror -Werror=* -Werror-implicit-function-declaration @gol 213-Wfatal-errors -Wfloat-equal -Wformat -Wformat=2 @gol 214-Wno-format-extra-args -Wformat-nonliteral @gol 215-Wformat-security -Wformat-y2k @gol 216-Wimplicit -Wimplicit-function-declaration -Wimplicit-int @gol 217-Wimport -Wno-import -Winit-self -Winline @gol 218-Wno-int-to-pointer-cast @gol 219-Wno-invalid-offsetof -Winvalid-pch @gol 220-Wlarger-than-@var{len} -Wframe-larger-than-@var{len} @gol 221-Wunsafe-loop-optimizations -Wlong-long @gol 222-Wmain -Wmissing-braces -Wmissing-field-initializers @gol 223-Wmissing-format-attribute -Wmissing-include-dirs @gol 224-Wmissing-noreturn @gol 225@c APPLE LOCAL -Wmost 226-Wmost (APPLE ONLY) @gol 227-Wno-multichar -Wnonnull -Wno-overflow @gol 228-Woverlength-strings -Wpacked -Wpadded @gol 229-Wparentheses -Wpointer-arith -Wno-pointer-to-int-cast @gol 230-Wredundant-decls @gol 231-Wreturn-type -Wsequence-point -Wshadow @gol 232-Wsign-compare -Wstack-protector @gol 233-Wstrict-aliasing -Wstrict-aliasing=2 @gol 234-Wstrict-overflow -Wstrict-overflow=@var{n} @gol 235-Wswitch -Wswitch-default -Wswitch-enum @gol 236-Wsystem-headers -Wtrigraphs -Wundef -Wuninitialized @gol 237-Wunknown-pragmas -Wno-pragmas -Wunreachable-code @gol 238-Wunused -Wunused-function -Wunused-label -Wunused-parameter @gol 239-Wunused-value -Wunused-variable @gol 240-Wvariadic-macros -Wvla @gol 241-Wvolatile-register-var -Wwrite-strings} 242 243@item C-only Warning Options 244@gccoptlist{-Wbad-function-cast -Wmissing-declarations @gol 245-Wmissing-prototypes -Wnested-externs -Wold-style-definition @gol 246-Wstrict-prototypes -Wtraditional @gol 247-Wdeclaration-after-statement -Wpointer-sign} 248 249@item Debugging Options 250@xref{Debugging Options,,Options for Debugging Your Program or GCC}. 251@gccoptlist{-d@var{letters} -dumpspecs -dumpmachine -dumpversion @gol 252-fdump-noaddr -fdump-unnumbered -fdump-translation-unit@r{[}-@var{n}@r{]} @gol 253-fdump-class-hierarchy@r{[}-@var{n}@r{]} @gol 254-fdump-ipa-all -fdump-ipa-cgraph @gol 255-fdump-tree-all @gol 256-fdump-tree-original@r{[}-@var{n}@r{]} @gol 257-fdump-tree-optimized@r{[}-@var{n}@r{]} @gol 258-fdump-tree-inlined@r{[}-@var{n}@r{]} @gol 259-fdump-tree-cfg -fdump-tree-vcg -fdump-tree-alias @gol 260-fdump-tree-ch @gol 261-fdump-tree-ssa@r{[}-@var{n}@r{]} -fdump-tree-pre@r{[}-@var{n}@r{]} @gol 262-fdump-tree-ccp@r{[}-@var{n}@r{]} -fdump-tree-dce@r{[}-@var{n}@r{]} @gol 263-fdump-tree-gimple@r{[}-raw@r{]} -fdump-tree-mudflap@r{[}-@var{n}@r{]} @gol 264-fdump-tree-dom@r{[}-@var{n}@r{]} @gol 265-fdump-tree-dse@r{[}-@var{n}@r{]} @gol 266-fdump-tree-phiopt@r{[}-@var{n}@r{]} @gol 267-fdump-tree-forwprop@r{[}-@var{n}@r{]} @gol 268-fdump-tree-copyrename@r{[}-@var{n}@r{]} @gol 269-fdump-tree-nrv -fdump-tree-vect @gol 270-fdump-tree-sink @gol 271-fdump-tree-sra@r{[}-@var{n}@r{]} @gol 272-fdump-tree-salias @gol 273-fdump-tree-fre@r{[}-@var{n}@r{]} @gol 274-fdump-tree-vrp@r{[}-@var{n}@r{]} @gol 275-ftree-vectorizer-verbose=@var{n} @gol 276-fdump-tree-storeccp@r{[}-@var{n}@r{]} @gol 277-feliminate-dwarf2-dups -feliminate-unused-debug-types @gol 278-feliminate-unused-debug-symbols -femit-class-debug-always @gol 279-fmem-report -fprofile-arcs @gol 280-frandom-seed=@var{string} -fsched-verbose=@var{n} @gol 281-ftest-coverage -ftime-report -fvar-tracking @gol 282-g -g@var{level} -gcoff -gdwarf-2 @gol 283-ggdb -gstabs -gstabs+ -gvms -gxcoff -gxcoff+ @gol 284-femit-struct-debug-baseonly -femit-struct-debug-reduced @gol 285-femit-struct-debug-detailed@r{[}=@var{spec-list}@r{]} @gol 286-p -pg -print-file-name=@var{library} -print-libgcc-file-name @gol 287-print-multi-directory -print-multi-lib @gol 288-print-prog-name=@var{program} -print-search-dirs -Q @gol 289-save-temps -time} 290 291@item Optimization Options 292@xref{Optimize Options,,Options that Control Optimization}. 293@gccoptlist{-falign-functions=@var{n} -falign-jumps=@var{n} @gol 294-falign-labels=@var{n} -falign-loops=@var{n} @gol 295-fbounds-check -fmudflap -fmudflapth -fmudflapir @gol 296-fbranch-probabilities -fprofile-values -fvpt -fbranch-target-load-optimize @gol 297-fbranch-target-load-optimize2 -fbtr-bb-exclusive @gol 298-fcaller-saves -fcprop-registers -fcse-follow-jumps @gol 299-fcse-skip-blocks -fcx-limited-range -fdata-sections @gol 300-fdelayed-branch -fdelete-null-pointer-checks -fearly-inlining @gol 301-fexpensive-optimizations -ffast-math -ffloat-store @gol 302-fforce-addr -ffunction-sections @gol 303-fgcse -fgcse-lm -fgcse-sm -fgcse-las -fgcse-after-reload @gol 304-fcrossjumping -fif-conversion -fif-conversion2 @gol 305-finline-functions -finline-functions-called-once @gol 306-finline-limit=@var{n} -fkeep-inline-functions @gol 307-fkeep-static-consts -fmerge-constants -fmerge-all-constants @gol 308-fmodulo-sched -fno-branch-count-reg @gol 309-fno-default-inline -fno-defer-pop -fmove-loop-invariants @gol 310-fno-function-cse -fno-guess-branch-probability @gol 311-fno-inline -fno-math-errno -fno-peephole -fno-peephole2 @gol 312-funsafe-math-optimizations -funsafe-loop-optimizations -ffinite-math-only @gol 313-fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss @gol 314-fomit-frame-pointer -foptimize-register-move @gol 315-foptimize-sibling-calls -fprefetch-loop-arrays @gol 316-fprofile-generate -fprofile-use @gol 317-fregmove -frename-registers @gol 318-freorder-blocks -freorder-blocks-and-partition -freorder-functions @gol 319-frerun-cse-after-loop @gol 320-frounding-math -frtl-abstract-sequences @gol 321-fschedule-insns -fschedule-insns2 @gol 322-fno-sched-interblock -fno-sched-spec -fsched-spec-load @gol 323-fsched-spec-load-dangerous @gol 324-fsched-stalled-insns=@var{n} -fsched-stalled-insns-dep=@var{n} @gol 325-fsched2-use-superblocks @gol 326-fsched2-use-traces -fsee -freschedule-modulo-scheduled-loops @gol 327-fsection-anchors -fsignaling-nans -fsingle-precision-constant @gol 328-fstack-protector -fstack-protector-all @gol 329-fstrict-aliasing -fstrict-overflow -ftracer -fthread-jumps @gol 330-funroll-all-loops -funroll-loops -fpeel-loops @gol 331-fsplit-ivs-in-unroller -funswitch-loops @gol 332-fvariable-expansion-in-unroller @gol 333-ftree-pre -ftree-ccp -ftree-dce -ftree-loop-optimize @gol 334-ftree-loop-linear -ftree-loop-im -ftree-loop-ivcanon -fivopts @gol 335-ftree-dominator-opts -ftree-dse -ftree-copyrename -ftree-sink @gol 336-ftree-ch -ftree-sra -ftree-ter -ftree-lrs -ftree-fre -ftree-vectorize @gol 337-ftree-vect-loop-version -ftree-salias -fipa-pta -fweb @gol 338-ftree-copy-prop -ftree-store-ccp -ftree-store-copy-prop -fwhole-program @gol 339--param @var{name}=@var{value} 340-O -O0 -O1 -O2 -O3 -Os} 341 342@item Preprocessor Options 343@xref{Preprocessor Options,,Options Controlling the Preprocessor}. 344@gccoptlist{-A@var{question}=@var{answer} @gol 345-A-@var{question}@r{[}=@var{answer}@r{]} @gol 346-C -dD -dI -dM -dN @gol 347-D@var{macro}@r{[}=@var{defn}@r{]} -E -H @gol 348-idirafter @var{dir} @gol 349-include @var{file} -imacros @var{file} @gol 350-iprefix @var{file} -iwithprefix @var{dir} @gol 351-iwithprefixbefore @var{dir} -isystem @var{dir} @gol 352-imultilib @var{dir} -isysroot @var{dir} @gol 353-M -MM -MF -MG -MP -MQ -MT -nostdinc @gol 354-P -fworking-directory -remap @gol 355-trigraphs -undef -U@var{macro} -Wp,@var{option} @gol 356-Xpreprocessor @var{option}} 357 358@item Assembler Option 359@xref{Assembler Options,,Passing Options to the Assembler}. 360@gccoptlist{-Wa,@var{option} -Xassembler @var{option}} 361 362@item Linker Options 363@xref{Link Options,,Options for Linking}. 364@gccoptlist{@var{object-file-name} -l@var{library} @gol 365-nostartfiles -nodefaultlibs -nostdlib -pie -rdynamic @gol 366-s -static -static-libgcc -shared -shared-libgcc -symbolic @gol 367-Wl,@var{option} -Xlinker @var{option} @gol 368-u @var{symbol}} 369 370@item Directory Options 371@xref{Directory Options,,Options for Directory Search}. 372@gccoptlist{-B@var{prefix} -I@var{dir} -iquote@var{dir} -L@var{dir} 373-specs=@var{file} -I- --sysroot=@var{dir}} 374 375@item Target Options 376@c I wrote this xref this way to avoid overfull hbox. -- rms 377@xref{Target Options}. 378@gccoptlist{-V @var{version} -b @var{machine}} 379 380@item Machine Dependent Options 381@xref{Submodel Options,,Hardware Models and Configurations}. 382@c This list is ordered alphanumerically by subsection name. 383@c Try and put the significant identifier (CPU or system) first, 384@c so users have a clue at guessing where the ones they want will be. 385 386@emph{ARC Options} 387@gccoptlist{-EB -EL @gol 388-mmangle-cpu -mcpu=@var{cpu} -mtext=@var{text-section} @gol 389-mdata=@var{data-section} -mrodata=@var{readonly-data-section}} 390 391@emph{ARM Options} 392@gccoptlist{-mapcs-frame -mno-apcs-frame @gol 393-mabi=@var{name} @gol 394-mapcs-stack-check -mno-apcs-stack-check @gol 395-mapcs-float -mno-apcs-float @gol 396-mapcs-reentrant -mno-apcs-reentrant @gol 397-msched-prolog -mno-sched-prolog @gol 398-mlittle-endian -mbig-endian -mwords-little-endian @gol 399-mfloat-abi=@var{name} -msoft-float -mhard-float -mfpe @gol 400-mthumb-interwork -mno-thumb-interwork @gol 401-mcpu=@var{name} -march=@var{name} -mfpu=@var{name} @gol 402-mstructure-size-boundary=@var{n} @gol 403-mabort-on-noreturn @gol 404-mlong-calls -mno-long-calls @gol 405-msingle-pic-base -mno-single-pic-base @gol 406-mpic-register=@var{reg} @gol 407-mnop-fun-dllimport @gol 408-mcirrus-fix-invalid-insns -mno-cirrus-fix-invalid-insns @gol 409-mpoke-function-name @gol 410-mthumb -marm @gol 411-mtpcs-frame -mtpcs-leaf-frame @gol 412-mcaller-super-interworking -mcallee-super-interworking @gol 413-mtp=@var{name}} 414 415@emph{AVR Options} 416@gccoptlist{-mmcu=@var{mcu} -msize -minit-stack=@var{n} -mno-interrupts @gol 417-mcall-prologues -mno-tablejump -mtiny-stack -mint8} 418 419@emph{Blackfin Options} 420@gccoptlist{-momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer @gol 421-mspecld-anomaly -mno-specld-anomaly -mcsync-anomaly -mno-csync-anomaly @gol 422-mlow-64k -mno-low64k -mid-shared-library @gol 423-mno-id-shared-library -mshared-library-id=@var{n} @gol 424-mlong-calls -mno-long-calls} 425 426@emph{CRIS Options} 427@gccoptlist{-mcpu=@var{cpu} -march=@var{cpu} -mtune=@var{cpu} @gol 428-mmax-stack-frame=@var{n} -melinux-stacksize=@var{n} @gol 429-metrax4 -metrax100 -mpdebug -mcc-init -mno-side-effects @gol 430-mstack-align -mdata-align -mconst-align @gol 431-m32-bit -m16-bit -m8-bit -mno-prologue-epilogue -mno-gotplt @gol 432-melf -maout -melinux -mlinux -sim -sim2 @gol 433-mmul-bug-workaround -mno-mul-bug-workaround} 434 435@emph{CRX Options} 436@gccoptlist{-mmac -mpush-args} 437 438@emph{Darwin Options} 439@gccoptlist{-all_load -allowable_client -arch -arch_errors_fatal @gol 440-arch_only -bind_at_load -bundle -bundle_loader @gol 441-client_name -compatibility_version -current_version @gol 442-dead_strip @gol 443-dependency-file -dylib_file -dylinker_install_name @gol 444-dynamic -dynamiclib -exported_symbols_list @gol 445-filelist -flat_namespace -force_cpusubtype_ALL @gol 446-force_flat_namespace -headerpad_max_install_names @gol 447-image_base -init -install_name -keep_private_externs @gol 448-multi_module -multiply_defined -multiply_defined_unused @gol 449-noall_load -no_dead_strip_inits_and_terms @gol 450-nofixprebinding -nomultidefs -noprebind -noseglinkedit @gol 451-pagezero_size -prebind -prebind_all_twolevel_modules @gol 452-private_bundle -read_only_relocs -sectalign @gol 453-sectobjectsymbols -whyload -seg1addr @gol 454-sectcreate -sectobjectsymbols -sectorder @gol 455-segaddr -segs_read_only_addr -segs_read_write_addr @gol 456-seg_addr_table -seg_addr_table_filename -seglinkedit @gol 457-segprot -segs_read_only_addr -segs_read_write_addr @gol 458-single_module -static -sub_library -sub_umbrella @gol 459-twolevel_namespace -umbrella -undefined @gol 460-unexported_symbols_list -weak_reference_mismatches @gol 461-whatsloaded -F -gused -gfull -mmacosx-version-min=@var{version} @gol 462-mkernel -mone-byte-bool} 463 464@emph{DEC Alpha Options} 465@gccoptlist{-mno-fp-regs -msoft-float -malpha-as -mgas @gol 466-mieee -mieee-with-inexact -mieee-conformant @gol 467-mfp-trap-mode=@var{mode} -mfp-rounding-mode=@var{mode} @gol 468-mtrap-precision=@var{mode} -mbuild-constants @gol 469-mcpu=@var{cpu-type} -mtune=@var{cpu-type} @gol 470-mbwx -mmax -mfix -mcix @gol 471-mfloat-vax -mfloat-ieee @gol 472-mexplicit-relocs -msmall-data -mlarge-data @gol 473-msmall-text -mlarge-text @gol 474-mmemory-latency=@var{time}} 475 476@emph{DEC Alpha/VMS Options} 477@gccoptlist{-mvms-return-codes} 478 479@emph{FRV Options} 480@gccoptlist{-mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 @gol 481-mhard-float -msoft-float @gol 482-malloc-cc -mfixed-cc -mdword -mno-dword @gol 483-mdouble -mno-double @gol 484-mmedia -mno-media -mmuladd -mno-muladd @gol 485-mfdpic -minline-plt -mgprel-ro -multilib-library-pic @gol 486-mlinked-fp -mlong-calls -malign-labels @gol 487-mlibrary-pic -macc-4 -macc-8 @gol 488-mpack -mno-pack -mno-eflags -mcond-move -mno-cond-move @gol 489-moptimize-membar -mno-optimize-membar @gol 490-mscc -mno-scc -mcond-exec -mno-cond-exec @gol 491-mvliw-branch -mno-vliw-branch @gol 492-mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec @gol 493-mno-nested-cond-exec -mtomcat-stats @gol 494-mTLS -mtls @gol 495-mcpu=@var{cpu}} 496 497@emph{GNU/Linux Options} 498@gccoptlist{-muclibc} 499 500@emph{H8/300 Options} 501@gccoptlist{-mrelax -mh -ms -mn -mint32 -malign-300} 502 503@emph{HPPA Options} 504@gccoptlist{-march=@var{architecture-type} @gol 505-mbig-switch -mdisable-fpregs -mdisable-indexing @gol 506-mfast-indirect-calls -mgas -mgnu-ld -mhp-ld @gol 507-mfixed-range=@var{register-range} @gol 508-mjump-in-delay -mlinker-opt -mlong-calls @gol 509-mlong-load-store -mno-big-switch -mno-disable-fpregs @gol 510-mno-disable-indexing -mno-fast-indirect-calls -mno-gas @gol 511-mno-jump-in-delay -mno-long-load-store @gol 512-mno-portable-runtime -mno-soft-float @gol 513-mno-space-regs -msoft-float -mpa-risc-1-0 @gol 514-mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime @gol 515-mschedule=@var{cpu-type} -mspace-regs -msio -mwsio @gol 516-munix=@var{unix-std} -nolibdld -static -threads} 517 518@emph{i386 and x86-64 Options} 519@gccoptlist{-mtune=@var{cpu-type} -march=@var{cpu-type} @gol 520-mfpmath=@var{unit} @gol 521-masm=@var{dialect} -mno-fancy-math-387 @gol 522-mno-fp-ret-in-387 -msoft-float -msvr3-shlib @gol 523-mno-wide-multiply -mrtd -malign-double @gol 524-mpreferred-stack-boundary=@var{num} @gol 525-mmmx -msse -msse2 -msse3 -mssse3 -msse4a -m3dnow -mpopcnt -mabm @gol 526-mthreads -mno-align-stringops -minline-all-stringops @gol 527-mpush-args -maccumulate-outgoing-args -m128bit-long-double @gol 528-m96bit-long-double -mregparm=@var{num} -msseregparm @gol 529-mstackrealign @gol 530-momit-leaf-frame-pointer -mno-red-zone -mno-tls-direct-seg-refs @gol 531-mcmodel=@var{code-model} @gol 532-m32 -m64 -mlarge-data-threshold=@var{num}} 533 534@emph{IA-64 Options} 535@gccoptlist{-mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic @gol 536-mvolatile-asm-stop -mregister-names -mno-sdata @gol 537-mconstant-gp -mauto-pic -minline-float-divide-min-latency @gol 538-minline-float-divide-max-throughput @gol 539-minline-int-divide-min-latency @gol 540-minline-int-divide-max-throughput @gol 541-minline-sqrt-min-latency -minline-sqrt-max-throughput @gol 542-mno-dwarf2-asm -mearly-stop-bits @gol 543-mfixed-range=@var{register-range} -mtls-size=@var{tls-size} @gol 544-mtune=@var{cpu-type} -mt -pthread -milp32 -mlp64 @gol 545-mno-sched-br-data-spec -msched-ar-data-spec -mno-sched-control-spec @gol 546-msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec @gol 547-msched-ldc -mno-sched-control-ldc -mno-sched-spec-verbose @gol 548-mno-sched-prefer-non-data-spec-insns @gol 549-mno-sched-prefer-non-control-spec-insns @gol 550-mno-sched-count-spec-in-critical-path} 551 552@emph{M32R/D Options} 553@gccoptlist{-m32r2 -m32rx -m32r @gol 554-mdebug @gol 555-malign-loops -mno-align-loops @gol 556-missue-rate=@var{number} @gol 557-mbranch-cost=@var{number} @gol 558-mmodel=@var{code-size-model-type} @gol 559-msdata=@var{sdata-type} @gol 560-mno-flush-func -mflush-func=@var{name} @gol 561-mno-flush-trap -mflush-trap=@var{number} @gol 562-G @var{num}} 563 564@emph{M32C Options} 565@gccoptlist{-mcpu=@var{cpu} -msim -memregs=@var{number}} 566 567@emph{M680x0 Options} 568@gccoptlist{-m68000 -m68020 -m68020-40 -m68020-60 -m68030 -m68040 @gol 569-m68060 -mcpu32 -m5200 -mcfv4e -m68881 -mbitfield @gol 570-mc68000 -mc68020 @gol 571-mnobitfield -mrtd -mshort -msoft-float -mpcrel @gol 572-malign-int -mstrict-align -msep-data -mno-sep-data @gol 573-mshared-library-id=n -mid-shared-library -mno-id-shared-library} 574 575@emph{M68hc1x Options} 576@gccoptlist{-m6811 -m6812 -m68hc11 -m68hc12 -m68hcs12 @gol 577-mauto-incdec -minmax -mlong-calls -mshort @gol 578-msoft-reg-count=@var{count}} 579 580@emph{MCore Options} 581@gccoptlist{-mhardlit -mno-hardlit -mdiv -mno-div -mrelax-immediates @gol 582-mno-relax-immediates -mwide-bitfields -mno-wide-bitfields @gol 583-m4byte-functions -mno-4byte-functions -mcallgraph-data @gol 584-mno-callgraph-data -mslow-bytes -mno-slow-bytes -mno-lsim @gol 585-mlittle-endian -mbig-endian -m210 -m340 -mstack-increment} 586 587@emph{MIPS Options} 588@gccoptlist{-EL -EB -march=@var{arch} -mtune=@var{arch} @gol 589-mips1 -mips2 -mips3 -mips4 -mips32 -mips32r2 -mips64 @gol 590-mips16 -mno-mips16 -mabi=@var{abi} -mabicalls -mno-abicalls @gol 591-mshared -mno-shared -mxgot -mno-xgot -mgp32 -mgp64 @gol 592-mfp32 -mfp64 -mhard-float -msoft-float @gol 593-msingle-float -mdouble-float -mdsp -mpaired-single -mips3d @gol 594-mlong64 -mlong32 -msym32 -mno-sym32 @gol 595-G@var{num} -membedded-data -mno-embedded-data @gol 596-muninit-const-in-rodata -mno-uninit-const-in-rodata @gol 597-msplit-addresses -mno-split-addresses @gol 598-mexplicit-relocs -mno-explicit-relocs @gol 599-mcheck-zero-division -mno-check-zero-division @gol 600-mdivide-traps -mdivide-breaks @gol 601-mmemcpy -mno-memcpy -mlong-calls -mno-long-calls @gol 602-mmad -mno-mad -mfused-madd -mno-fused-madd -nocpp @gol 603-mfix-r4000 -mno-fix-r4000 -mfix-r4400 -mno-fix-r4400 @gol 604-mfix-vr4120 -mno-fix-vr4120 -mfix-vr4130 @gol 605-mfix-sb1 -mno-fix-sb1 @gol 606-mflush-func=@var{func} -mno-flush-func @gol 607-mbranch-likely -mno-branch-likely @gol 608-mfp-exceptions -mno-fp-exceptions @gol 609-mvr4130-align -mno-vr4130-align} 610 611@emph{MMIX Options} 612@gccoptlist{-mlibfuncs -mno-libfuncs -mepsilon -mno-epsilon -mabi=gnu @gol 613-mabi=mmixware -mzero-extend -mknuthdiv -mtoplevel-symbols @gol 614-melf -mbranch-predict -mno-branch-predict -mbase-addresses @gol 615-mno-base-addresses -msingle-exit -mno-single-exit} 616 617@emph{MN10300 Options} 618@gccoptlist{-mmult-bug -mno-mult-bug @gol 619-mam33 -mno-am33 @gol 620-mam33-2 -mno-am33-2 @gol 621-mreturn-pointer-on-d0 @gol 622-mno-crt0 -mrelax} 623 624@emph{MT Options} 625@gccoptlist{-mno-crt0 -mbacc -msim @gol 626-march=@var{cpu-type} } 627 628@emph{PDP-11 Options} 629@gccoptlist{-mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 @gol 630-mbcopy -mbcopy-builtin -mint32 -mno-int16 @gol 631-mint16 -mno-int32 -mfloat32 -mno-float64 @gol 632-mfloat64 -mno-float32 -mabshi -mno-abshi @gol 633-mbranch-expensive -mbranch-cheap @gol 634-msplit -mno-split -munix-asm -mdec-asm} 635 636@emph{PowerPC Options} 637See RS/6000 and PowerPC Options. 638 639@emph{RS/6000 and PowerPC Options} 640@gccoptlist{-mcpu=@var{cpu-type} @gol 641-mtune=@var{cpu-type} @gol 642-mpower -mno-power -mpower2 -mno-power2 @gol 643-mpowerpc -mpowerpc64 -mno-powerpc @gol 644-maltivec -mno-altivec @gol 645-mpowerpc-gpopt -mno-powerpc-gpopt @gol 646-mpowerpc-gfxopt -mno-powerpc-gfxopt @gol 647-mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb -mfprnd -mno-fprnd @gol 648-mnew-mnemonics -mold-mnemonics @gol 649-mfull-toc -mminimal-toc -mno-fp-in-toc -mno-sum-in-toc @gol 650-m64 -m32 -mxl-compat -mno-xl-compat -mpe @gol 651-malign-power -malign-natural @gol 652-msoft-float -mhard-float -mmultiple -mno-multiple @gol 653-mstring -mno-string -mupdate -mno-update @gol 654-mfused-madd -mno-fused-madd -mbit-align -mno-bit-align @gol 655-mstrict-align -mno-strict-align -mrelocatable @gol 656-mno-relocatable -mrelocatable-lib -mno-relocatable-lib @gol 657-mtoc -mno-toc -mlittle -mlittle-endian -mbig -mbig-endian @gol 658-mdynamic-no-pic -maltivec -mswdiv @gol 659-mprioritize-restricted-insns=@var{priority} @gol 660-msched-costly-dep=@var{dependence_type} @gol 661-minsert-sched-nops=@var{scheme} @gol 662-mcall-sysv -mcall-netbsd @gol 663-maix-struct-return -msvr4-struct-return @gol 664-mabi=@var{abi-type} -msecure-plt -mbss-plt @gol 665-misel -mno-isel @gol 666-misel=yes -misel=no @gol 667-mspe -mno-spe @gol 668-mspe=yes -mspe=no @gol 669-mvrsave -mno-vrsave @gol 670-mmulhw -mno-mulhw @gol 671-mdlmzb -mno-dlmzb @gol 672-mfloat-gprs=yes -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double @gol 673-mprototype -mno-prototype @gol 674-msim -mmvme -mads -myellowknife -memb -msdata @gol 675-msdata=@var{opt} -mvxworks -mwindiss -G @var{num} -pthread} 676 677@emph{S/390 and zSeries Options} 678@gccoptlist{-mtune=@var{cpu-type} -march=@var{cpu-type} @gol 679-mhard-float -msoft-float -mlong-double-64 -mlong-double-128 @gol 680-mbackchain -mno-backchain -mpacked-stack -mno-packed-stack @gol 681-msmall-exec -mno-small-exec -mmvcle -mno-mvcle @gol 682-m64 -m31 -mdebug -mno-debug -mesa -mzarch @gol 683-mtpf-trace -mno-tpf-trace -mfused-madd -mno-fused-madd @gol 684-mwarn-framesize -mwarn-dynamicstack -mstack-size -mstack-guard} 685 686@emph{Score Options} 687@gccoptlist{-meb -mel @gol 688-mnhwloop @gol 689-muls @gol 690-mmac @gol 691-mscore5 -mscore5u -mscore7 -mscore7d} 692 693@emph{SH Options} 694@gccoptlist{-m1 -m2 -m2e -m3 -m3e @gol 695-m4-nofpu -m4-single-only -m4-single -m4 @gol 696-m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al @gol 697-m5-64media -m5-64media-nofpu @gol 698-m5-32media -m5-32media-nofpu @gol 699-m5-compact -m5-compact-nofpu @gol 700-mb -ml -mdalign -mrelax @gol 701-mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave @gol 702-mieee -misize -mpadstruct -mspace @gol 703-mprefergot -musermode -multcost=@var{number} -mdiv=@var{strategy} @gol 704-mdivsi3_libfunc=@var{name} @gol 705-madjust-unroll -mindexed-addressing -mgettrcost=@var{number} -mpt-fixed @gol 706 -minvalid-symbols} 707 708@emph{SPARC Options} 709@gccoptlist{-mcpu=@var{cpu-type} @gol 710-mtune=@var{cpu-type} @gol 711-mcmodel=@var{code-model} @gol 712-m32 -m64 -mapp-regs -mno-app-regs @gol 713-mfaster-structs -mno-faster-structs @gol 714-mfpu -mno-fpu -mhard-float -msoft-float @gol 715-mhard-quad-float -msoft-quad-float @gol 716-mimpure-text -mno-impure-text -mlittle-endian @gol 717-mstack-bias -mno-stack-bias @gol 718-munaligned-doubles -mno-unaligned-doubles @gol 719-mv8plus -mno-v8plus -mvis -mno-vis 720-threads -pthreads -pthread} 721 722@emph{System V Options} 723@gccoptlist{-Qy -Qn -YP,@var{paths} -Ym,@var{dir}} 724 725@emph{TMS320C3x/C4x Options} 726@gccoptlist{-mcpu=@var{cpu} -mbig -msmall -mregparm -mmemparm @gol 727-mfast-fix -mmpyi -mbk -mti -mdp-isr-reload @gol 728-mrpts=@var{count} -mrptb -mdb -mloop-unsigned @gol 729-mparallel-insns -mparallel-mpy -mpreserve-float} 730 731@emph{V850 Options} 732@gccoptlist{-mlong-calls -mno-long-calls -mep -mno-ep @gol 733-mprolog-function -mno-prolog-function -mspace @gol 734-mtda=@var{n} -msda=@var{n} -mzda=@var{n} @gol 735-mapp-regs -mno-app-regs @gol 736-mdisable-callt -mno-disable-callt @gol 737-mv850e1 @gol 738-mv850e @gol 739-mv850 -mbig-switch} 740 741@emph{VAX Options} 742@gccoptlist{-mg -mgnu -munix} 743 744@emph{x86-64 Options} 745See i386 and x86-64 Options. 746 747@emph{Xstormy16 Options} 748@gccoptlist{-msim} 749 750@emph{Xtensa Options} 751@gccoptlist{-mconst16 -mno-const16 @gol 752-mfused-madd -mno-fused-madd @gol 753-mtext-section-literals -mno-text-section-literals @gol 754-mtarget-align -mno-target-align @gol 755-mlongcalls -mno-longcalls} 756 757@emph{zSeries Options} 758See S/390 and zSeries Options. 759 760@item Code Generation Options 761@xref{Code Gen Options,,Options for Code Generation Conventions}. 762@gccoptlist{-fcall-saved-@var{reg} -fcall-used-@var{reg} @gol 763-ffixed-@var{reg} -fexceptions @gol 764-fnon-call-exceptions -funwind-tables @gol 765-fasynchronous-unwind-tables @gol 766-finhibit-size-directive -finstrument-functions @gol 767-finstrument-functions-exclude-function-list=@var{sym},@var{sym},@dots{} @gol 768-finstrument-functions-exclude-file-list=@var{file},@var{file},@dots{} @gol 769-fno-common -fno-ident @gol 770-fpcc-struct-return -fpic -fPIC -fpie -fPIE @gol 771-fno-jump-tables @gol 772-freg-struct-return -fshort-enums @gol 773-fshort-double -fshort-wchar @gol 774-fverbose-asm -fpack-struct[=@var{n}] -fstack-check @gol 775-fstack-limit-register=@var{reg} -fstack-limit-symbol=@var{sym} @gol 776-fargument-alias -fargument-noalias @gol 777-fargument-noalias-global -fargument-noalias-anything 778-fleading-underscore -ftls-model=@var{model} @gol 779-ftrapv -fwrapv -fbounds-check @gol 780-fvisibility} 781@end table 782 783@menu 784* Overall Options:: Controlling the kind of output: 785 an executable, object files, assembler files, 786 or preprocessed source. 787* C Dialect Options:: Controlling the variant of C language compiled. 788* C++ Dialect Options:: Variations on C++. 789* Language Independent Options:: Controlling how diagnostics should be 790 formatted. 791* Warning Options:: How picky should the compiler be? 792* Debugging Options:: Symbol tables, measurements, and debugging dumps. 793* Optimize Options:: How much optimization? 794* Preprocessor Options:: Controlling header files and macro definitions. 795 Also, getting dependency information for Make. 796* Assembler Options:: Passing options to the assembler. 797* Link Options:: Specifying libraries and so on. 798* Directory Options:: Where to find header files and libraries. 799 Where to find the compiler executable files. 800* Spec Files:: How to pass switches to sub-processes. 801* Target Options:: Running a cross-compiler, or an old version of GCC. 802@end menu 803 804@node Overall Options 805@section Options Controlling the Kind of Output 806 807Compilation can involve up to four stages: preprocessing, compilation 808proper, assembly and linking, always in that order. GCC is capable of 809preprocessing and compiling several files either into several 810assembler input files, or into one assembler input file; then each 811assembler input file produces an object file, and linking combines all 812the object files (those newly compiled, and those specified as input) 813into an executable file. 814 815@cindex file name suffix 816For any given input file, the file name suffix determines what kind of 817compilation is done: 818 819@table @gcctabopt 820@item @var{file}.c 821C source code which must be preprocessed. 822 823@item @var{file}.i 824C source code which should not be preprocessed. 825 826@item @var{file}.ii 827C++ source code which should not be preprocessed. 828 829@item @var{file}.h 830C, or C++ header file to be turned into a precompiled header. 831 832@item @var{file}.cc 833@itemx @var{file}.cp 834@itemx @var{file}.cxx 835@itemx @var{file}.cpp 836@itemx @var{file}.CPP 837@itemx @var{file}.c++ 838@itemx @var{file}.C 839C++ source code which must be preprocessed. Note that in @samp{.cxx}, 840the last two letters must both be literally @samp{x}. Likewise, 841@samp{.C} refers to a literal capital C@. 842 843@item @var{file}.hh 844@itemx @var{file}.H 845C++ header file to be turned into a precompiled header. 846 847@item @var{file}.f 848@itemx @var{file}.for 849@itemx @var{file}.FOR 850Fixed form Fortran source code which should not be preprocessed. 851 852@item @var{file}.F 853@itemx @var{file}.fpp 854@itemx @var{file}.FPP 855Fixed form Fortran source code which must be preprocessed (with the traditional 856preprocessor). 857 858@item @var{file}.f90 859@itemx @var{file}.f95 860Free form Fortran source code which should not be preprocessed. 861 862@item @var{file}.F90 863@itemx @var{file}.F95 864Free form Fortran source code which must be preprocessed (with the 865traditional preprocessor). 866 867@c FIXME: Descriptions of Java file types. 868@c @var{file}.java 869@c @var{file}.class 870@c @var{file}.zip 871@c @var{file}.jar 872 873@item @var{file}.ads 874Ada source code file which contains a library unit declaration (a 875declaration of a package, subprogram, or generic, or a generic 876instantiation), or a library unit renaming declaration (a package, 877generic, or subprogram renaming declaration). Such files are also 878called @dfn{specs}. 879 880@itemx @var{file}.adb 881Ada source code file containing a library unit body (a subprogram or 882package body). Such files are also called @dfn{bodies}. 883 884@c GCC also knows about some suffixes for languages not yet included: 885@c Pascal: 886@c @var{file}.p 887@c @var{file}.pas 888@c Ratfor: 889@c @var{file}.r 890 891@item @var{file}.s 892Assembler code. 893 894@item @var{file}.S 895Assembler code which must be preprocessed. 896 897@item @var{other} 898An object file to be fed straight into linking. 899Any file name with no recognized suffix is treated this way. 900@end table 901 902@opindex x 903You can specify the input language explicitly with the @option{-x} option: 904 905@table @gcctabopt 906@item -x @var{language} 907Specify explicitly the @var{language} for the following input files 908(rather than letting the compiler choose a default based on the file 909name suffix). This option applies to all following input files until 910the next @option{-x} option. Possible values for @var{language} are: 911@smallexample 912c c-header c-cpp-output 913c++ c++-header c++-cpp-output 914assembler assembler-with-cpp 915ada 916f95 f95-cpp-input 917java 918treelang 919@end smallexample 920 921@item -x none 922Turn off any specification of a language, so that subsequent files are 923handled according to their file name suffixes (as they are if @option{-x} 924has not been used at all). 925 926@item -pass-exit-codes 927@opindex pass-exit-codes 928Normally the @command{gcc} program will exit with the code of 1 if any 929phase of the compiler returns a non-success return code. If you specify 930@option{-pass-exit-codes}, the @command{gcc} program will instead return with 931numerically highest error produced by any phase that returned an error 932indication. The C, C++, and Fortran frontends return 4, if an internal 933compiler error is encountered. 934@end table 935 936If you only want some of the stages of compilation, you can use 937@option{-x} (or filename suffixes) to tell @command{gcc} where to start, and 938one of the options @option{-c}, @option{-S}, or @option{-E} to say where 939@command{gcc} is to stop. Note that some combinations (for example, 940@samp{-x cpp-output -E}) instruct @command{gcc} to do nothing at all. 941 942@table @gcctabopt 943@item -c 944@opindex c 945Compile or assemble the source files, but do not link. The linking 946stage simply is not done. The ultimate output is in the form of an 947object file for each source file. 948 949By default, the object file name for a source file is made by replacing 950the suffix @samp{.c}, @samp{.i}, @samp{.s}, etc., with @samp{.o}. 951 952Unrecognized input files, not requiring compilation or assembly, are 953ignored. 954 955@item -S 956@opindex S 957Stop after the stage of compilation proper; do not assemble. The output 958is in the form of an assembler code file for each non-assembler input 959file specified. 960 961By default, the assembler file name for a source file is made by 962replacing the suffix @samp{.c}, @samp{.i}, etc., with @samp{.s}. 963 964Input files that don't require compilation are ignored. 965 966@item -E 967@opindex E 968Stop after the preprocessing stage; do not run the compiler proper. The 969output is in the form of preprocessed source code, which is sent to the 970standard output. 971 972Input files which don't require preprocessing are ignored. 973 974@cindex output file option 975@item -o @var{file} 976@opindex o 977Place output in file @var{file}. This applies regardless to whatever 978sort of output is being produced, whether it be an executable file, 979an object file, an assembler file or preprocessed C code. 980 981If @option{-o} is not specified, the default is to put an executable 982file in @file{a.out}, the object file for 983@file{@var{source}.@var{suffix}} in @file{@var{source}.o}, its 984assembler file in @file{@var{source}.s}, a precompiled header file in 985@file{@var{source}.@var{suffix}.gch}, and all preprocessed C source on 986standard output. 987 988@item -v 989@opindex v 990Print (on standard error output) the commands executed to run the stages 991of compilation. Also print the version number of the compiler driver 992program and of the preprocessor and the compiler proper. 993 994@item -### 995@opindex ### 996Like @option{-v} except the commands are not executed and all command 997arguments are quoted. This is useful for shell scripts to capture the 998driver-generated command lines. 999 1000@item -pipe 1001@opindex pipe 1002Use pipes rather than temporary files for communication between the 1003various stages of compilation. This fails to work on some systems where 1004the assembler is unable to read from a pipe; but the GNU assembler has 1005no trouble. 1006 1007@item -combine 1008@opindex combine 1009If you are compiling multiple source files, this option tells the driver 1010to pass all the source files to the compiler at once (for those 1011languages for which the compiler can handle this). This will allow 1012intermodule analysis (IMA) to be performed by the compiler. Currently the only 1013language for which this is supported is C@. If you pass source files for 1014multiple languages to the driver, using this option, the driver will invoke 1015the compiler(s) that support IMA once each, passing each compiler all the 1016source files appropriate for it. For those languages that do not support 1017IMA this option will be ignored, and the compiler will be invoked once for 1018each source file in that language. If you use this option in conjunction 1019with @option{-save-temps}, the compiler will generate multiple 1020pre-processed files 1021(one for each source file), but only one (combined) @file{.o} or 1022@file{.s} file. 1023 1024@item --help 1025@opindex help 1026Print (on the standard output) a description of the command line options 1027understood by @command{gcc}. If the @option{-v} option is also specified 1028then @option{--help} will also be passed on to the various processes 1029invoked by @command{gcc}, so that they can display the command line options 1030they accept. If the @option{-Wextra} option is also specified then command 1031line options which have no documentation associated with them will also 1032be displayed. 1033 1034@item --target-help 1035@opindex target-help 1036Print (on the standard output) a description of target specific command 1037line options for each tool. 1038 1039@item --version 1040@opindex version 1041Display the version number and copyrights of the invoked GCC@. 1042 1043@include @value{srcdir}/../libiberty/at-file.texi 1044@end table 1045 1046@node Invoking G++ 1047@section Compiling C++ Programs 1048 1049@cindex suffixes for C++ source 1050@cindex C++ source file suffixes 1051C++ source files conventionally use one of the suffixes @samp{.C}, 1052@samp{.cc}, @samp{.cpp}, @samp{.CPP}, @samp{.c++}, @samp{.cp}, or 1053@samp{.cxx}; C++ header files often use @samp{.hh} or @samp{.H}; and 1054preprocessed C++ files use the suffix @samp{.ii}. GCC recognizes 1055files with these names and compiles them as C++ programs even if you 1056call the compiler the same way as for compiling C programs (usually 1057with the name @command{gcc}). 1058 1059@findex g++ 1060@findex c++ 1061However, the use of @command{gcc} does not add the C++ library. 1062@command{g++} is a program that calls GCC and treats @samp{.c}, 1063@samp{.h} and @samp{.i} files as C++ source files instead of C source 1064files unless @option{-x} is used, and automatically specifies linking 1065against the C++ library. This program is also useful when 1066precompiling a C header file with a @samp{.h} extension for use in C++ 1067compilations. On many systems, @command{g++} is also installed with 1068the name @command{c++}. 1069 1070@cindex invoking @command{g++} 1071When you compile C++ programs, you may specify many of the same 1072command-line options that you use for compiling programs in any 1073language; or command-line options meaningful for C and related 1074languages; or options that are meaningful only for C++ programs. 1075@xref{C Dialect Options,,Options Controlling C Dialect}, for 1076explanations of options for languages related to C@. 1077@xref{C++ Dialect Options,,Options Controlling C++ Dialect}, for 1078explanations of options that are meaningful only for C++ programs. 1079 1080@node C Dialect Options 1081@section Options Controlling C Dialect 1082@cindex dialect options 1083@cindex language dialect options 1084@cindex options, dialect 1085 1086The following options control the dialect of C (or languages derived 1087from C, such as C++) that the compiler accepts: 1088 1089@table @gcctabopt 1090@cindex ANSI support 1091@cindex ISO support 1092@item -ansi 1093@opindex ansi 1094In C mode, support all ISO C90 programs. In C++ mode, 1095remove GNU extensions that conflict with ISO C++. 1096 1097This turns off certain features of GCC that are incompatible with ISO 1098C90 (when compiling C code), or of standard C++ (when compiling C++ code), 1099such as the @code{asm} and @code{typeof} keywords, and 1100predefined macros such as @code{unix} and @code{vax} that identify the 1101type of system you are using. It also enables the undesirable and 1102rarely used ISO trigraph feature. For the C compiler, 1103it disables recognition of C++ style @samp{//} comments as well as 1104the @code{inline} keyword. 1105 1106The alternate keywords @code{__asm__}, @code{__extension__}, 1107@code{__inline__} and @code{__typeof__} continue to work despite 1108@option{-ansi}. You would not want to use them in an ISO C program, of 1109course, but it is useful to put them in header files that might be included 1110in compilations done with @option{-ansi}. Alternate predefined macros 1111such as @code{__unix__} and @code{__vax__} are also available, with or 1112without @option{-ansi}. 1113 1114The @option{-ansi} option does not cause non-ISO programs to be 1115rejected gratuitously. For that, @option{-pedantic} is required in 1116addition to @option{-ansi}. @xref{Warning Options}. 1117 1118The macro @code{__STRICT_ANSI__} is predefined when the @option{-ansi} 1119option is used. Some header files may notice this macro and refrain 1120from declaring certain functions or defining certain macros that the 1121ISO standard doesn't call for; this is to avoid interfering with any 1122programs that might use these names for other things. 1123 1124Functions which would normally be built in but do not have semantics 1125defined by ISO C (such as @code{alloca} and @code{ffs}) are not built-in 1126functions with @option{-ansi} is used. @xref{Other Builtins,,Other 1127built-in functions provided by GCC}, for details of the functions 1128affected. 1129 1130@item -std= 1131@opindex std 1132Determine the language standard. This option is currently only 1133supported when compiling C or C++. A value for this option must be 1134provided; possible values are 1135 1136@table @samp 1137@item c89 1138@itemx iso9899:1990 1139ISO C90 (same as @option{-ansi}). 1140 1141@item iso9899:199409 1142ISO C90 as modified in amendment 1. 1143 1144@item c99 1145@itemx c9x 1146@itemx iso9899:1999 1147@itemx iso9899:199x 1148ISO C99. Note that this standard is not yet fully supported; see 1149@w{@uref{http://gcc.gnu.org/gcc-4.2/c99status.html}} for more information. The 1150names @samp{c9x} and @samp{iso9899:199x} are deprecated. 1151 1152@item gnu89 1153Default, ISO C90 plus GNU extensions (including some C99 features). 1154 1155@item gnu99 1156@itemx gnu9x 1157ISO C99 plus GNU extensions. When ISO C99 is fully implemented in GCC, 1158this will become the default. The name @samp{gnu9x} is deprecated. 1159 1160@item c++98 1161The 1998 ISO C++ standard plus amendments. 1162 1163@item gnu++98 1164The same as @option{-std=c++98} plus GNU extensions. This is the 1165default for C++ code. 1166@end table 1167 1168Even when this option is not specified, you can still use some of the 1169features of newer standards in so far as they do not conflict with 1170previous C standards. For example, you may use @code{__restrict__} even 1171when @option{-std=c99} is not specified. 1172 1173The @option{-std} options specifying some version of ISO C have the same 1174effects as @option{-ansi}, except that features that were not in ISO C90 1175but are in the specified version (for example, @samp{//} comments and 1176the @code{inline} keyword in ISO C99) are not disabled. 1177 1178@xref{Standards,,Language Standards Supported by GCC}, for details of 1179these standard versions. 1180 1181@item -fgnu89-inline 1182@opindex fgnu89-inline 1183The option @option{-fgnu89-inline} tells GCC to use the traditional 1184GNU semantics for @code{inline} functions when in C99 mode. 1185@xref{Inline,,An Inline Function is As Fast As a Macro}. Using this 1186option is roughly equivalent to adding the @code{gnu_inline} function 1187attribute to all inline functions (@pxref{Function Attributes}). 1188 1189This option is accepted by GCC versions 4.1.3 and up. In GCC versions 1190prior to 4.3, C99 inline semantics are not supported, and thus this 1191option is effectively assumed to be present regardless of whether or not 1192it is specified; the only effect of specifying it explicitly is to 1193disable warnings about using inline functions in C99 mode. Likewise, 1194the option @option{-fno-gnu89-inline} is not supported in versions of 1195GCC before 4.3. It will be supported only in C99 or gnu99 mode, not in 1196C89 or gnu89 mode. 1197 1198The preprocesor macros @code{__GNUC_GNU_INLINE__} and 1199@code{__GNUC_STDC_INLINE__} may be used to check which semantics are 1200in effect for @code{inline} functions. @xref{Common Predefined 1201Macros,,,cpp,The C Preprocessor}. 1202 1203@item -aux-info @var{filename} 1204@opindex aux-info 1205Output to the given filename prototyped declarations for all functions 1206declared and/or defined in a translation unit, including those in header 1207files. This option is silently ignored in any language other than C@. 1208 1209Besides declarations, the file indicates, in comments, the origin of 1210each declaration (source file and line), whether the declaration was 1211implicit, prototyped or unprototyped (@samp{I}, @samp{N} for new or 1212@samp{O} for old, respectively, in the first character after the line 1213number and the colon), and whether it came from a declaration or a 1214definition (@samp{C} or @samp{F}, respectively, in the following 1215character). In the case of function definitions, a K&R-style list of 1216arguments followed by their declarations is also provided, inside 1217comments, after the declaration. 1218 1219@item -fno-asm 1220@opindex fno-asm 1221Do not recognize @code{asm}, @code{inline} or @code{typeof} as a 1222keyword, so that code can use these words as identifiers. You can use 1223the keywords @code{__asm__}, @code{__inline__} and @code{__typeof__} 1224instead. @option{-ansi} implies @option{-fno-asm}. 1225 1226In C++, this switch only affects the @code{typeof} keyword, since 1227@code{asm} and @code{inline} are standard keywords. You may want to 1228use the @option{-fno-gnu-keywords} flag instead, which has the same 1229effect. In C99 mode (@option{-std=c99} or @option{-std=gnu99}), this 1230switch only affects the @code{asm} and @code{typeof} keywords, since 1231@code{inline} is a standard keyword in ISO C99. 1232 1233@item -fno-builtin 1234@itemx -fno-builtin-@var{function} 1235@opindex fno-builtin 1236@cindex built-in functions 1237Don't recognize built-in functions that do not begin with 1238@samp{__builtin_} as prefix. @xref{Other Builtins,,Other built-in 1239functions provided by GCC}, for details of the functions affected, 1240including those which are not built-in functions when @option{-ansi} or 1241@option{-std} options for strict ISO C conformance are used because they 1242do not have an ISO standard meaning. 1243 1244GCC normally generates special code to handle certain built-in functions 1245more efficiently; for instance, calls to @code{alloca} may become single 1246instructions that adjust the stack directly, and calls to @code{memcpy} 1247may become inline copy loops. The resulting code is often both smaller 1248and faster, but since the function calls no longer appear as such, you 1249cannot set a breakpoint on those calls, nor can you change the behavior 1250of the functions by linking with a different library. In addition, 1251when a function is recognized as a built-in function, GCC may use 1252information about that function to warn about problems with calls to 1253that function, or to generate more efficient code, even if the 1254resulting code still contains calls to that function. For example, 1255warnings are given with @option{-Wformat} for bad calls to 1256@code{printf}, when @code{printf} is built in, and @code{strlen} is 1257known not to modify global memory. 1258 1259With the @option{-fno-builtin-@var{function}} option 1260only the built-in function @var{function} is 1261disabled. @var{function} must not begin with @samp{__builtin_}. If a 1262function is named this is not built-in in this version of GCC, this 1263option is ignored. There is no corresponding 1264@option{-fbuiltin-@var{function}} option; if you wish to enable 1265built-in functions selectively when using @option{-fno-builtin} or 1266@option{-ffreestanding}, you may define macros such as: 1267 1268@smallexample 1269#define abs(n) __builtin_abs ((n)) 1270#define strcpy(d, s) __builtin_strcpy ((d), (s)) 1271@end smallexample 1272 1273@item -fhosted 1274@opindex fhosted 1275@cindex hosted environment 1276 1277Assert that compilation takes place in a hosted environment. This implies 1278@option{-fbuiltin}. A hosted environment is one in which the 1279entire standard library is available, and in which @code{main} has a return 1280type of @code{int}. Examples are nearly everything except a kernel. 1281This is equivalent to @option{-fno-freestanding}. 1282 1283@item -ffreestanding 1284@opindex ffreestanding 1285@cindex hosted environment 1286 1287Assert that compilation takes place in a freestanding environment. This 1288implies @option{-fno-builtin}. A freestanding environment 1289is one in which the standard library may not exist, and program startup may 1290not necessarily be at @code{main}. The most obvious example is an OS kernel. 1291This is equivalent to @option{-fno-hosted}. 1292 1293@xref{Standards,,Language Standards Supported by GCC}, for details of 1294freestanding and hosted environments. 1295 1296@item -fopenmp 1297@opindex fopenmp 1298@cindex openmp parallel 1299Enable handling of OpenMP directives @code{#pragma omp} in C/C++ and 1300@code{!$omp} in Fortran. When @option{-fopenmp} is specified, the 1301compiler generates parallel code according to the OpenMP Application 1302Program Interface v2.5 @w{@uref{http://www.openmp.org/}}. 1303 1304@item -fms-extensions 1305@opindex fms-extensions 1306Accept some non-standard constructs used in Microsoft header files. 1307 1308Some cases of unnamed fields in structures and unions are only 1309accepted with this option. @xref{Unnamed Fields,,Unnamed struct/union 1310fields within structs/unions}, for details. 1311 1312@item -trigraphs 1313@opindex trigraphs 1314Support ISO C trigraphs. The @option{-ansi} option (and @option{-std} 1315options for strict ISO C conformance) implies @option{-trigraphs}. 1316 1317@item -no-integrated-cpp 1318@opindex no-integrated-cpp 1319Performs a compilation in two passes: preprocessing and compiling. This 1320option allows a user supplied "cc1", "cc1plus", or "cc1obj" via the 1321@option{-B} option. The user supplied compilation step can then add in 1322an additional preprocessing step after normal preprocessing but before 1323compiling. The default is to use the integrated cpp (internal cpp) 1324 1325The semantics of this option will change if "cc1", "cc1plus", and 1326"cc1obj" are merged. 1327 1328@cindex traditional C language 1329@cindex C language, traditional 1330@item -traditional 1331@itemx -traditional-cpp 1332@opindex traditional-cpp 1333@opindex traditional 1334Formerly, these options caused GCC to attempt to emulate a pre-standard 1335C compiler. They are now only supported with the @option{-E} switch. 1336The preprocessor continues to support a pre-standard mode. See the GNU 1337CPP manual for details. 1338 1339@item -fcond-mismatch 1340@opindex fcond-mismatch 1341Allow conditional expressions with mismatched types in the second and 1342third arguments. The value of such an expression is void. This option 1343is not supported for C++. 1344 1345@item -flax-vector-conversions 1346@opindex flax-vector-conversions 1347Allow implicit conversions between vectors with differing numbers of 1348elements and/or incompatible element types. This option should not be 1349used for new code. 1350 1351@item -funsigned-char 1352@opindex funsigned-char 1353Let the type @code{char} be unsigned, like @code{unsigned char}. 1354 1355Each kind of machine has a default for what @code{char} should 1356be. It is either like @code{unsigned char} by default or like 1357@code{signed char} by default. 1358 1359Ideally, a portable program should always use @code{signed char} or 1360@code{unsigned char} when it depends on the signedness of an object. 1361But many programs have been written to use plain @code{char} and 1362expect it to be signed, or expect it to be unsigned, depending on the 1363machines they were written for. This option, and its inverse, let you 1364make such a program work with the opposite default. 1365 1366The type @code{char} is always a distinct type from each of 1367@code{signed char} or @code{unsigned char}, even though its behavior 1368is always just like one of those two. 1369 1370@item -fsigned-char 1371@opindex fsigned-char 1372Let the type @code{char} be signed, like @code{signed char}. 1373 1374Note that this is equivalent to @option{-fno-unsigned-char}, which is 1375the negative form of @option{-funsigned-char}. Likewise, the option 1376@option{-fno-signed-char} is equivalent to @option{-funsigned-char}. 1377 1378@item -fsigned-bitfields 1379@itemx -funsigned-bitfields 1380@itemx -fno-signed-bitfields 1381@itemx -fno-unsigned-bitfields 1382@opindex fsigned-bitfields 1383@opindex funsigned-bitfields 1384@opindex fno-signed-bitfields 1385@opindex fno-unsigned-bitfields 1386These options control whether a bit-field is signed or unsigned, when the 1387declaration does not use either @code{signed} or @code{unsigned}. By 1388default, such a bit-field is signed, because this is consistent: the 1389basic integer types such as @code{int} are signed types. 1390@end table 1391 1392@node C++ Dialect Options 1393@section Options Controlling C++ Dialect 1394 1395@cindex compiler options, C++ 1396@cindex C++ options, command line 1397@cindex options, C++ 1398This section describes the command-line options that are only meaningful 1399for C++ programs; but you can also use most of the GNU compiler options 1400regardless of what language your program is in. For example, you 1401might compile a file @code{firstClass.C} like this: 1402 1403@smallexample 1404g++ -g -frepo -O -c firstClass.C 1405@end smallexample 1406 1407@noindent 1408In this example, only @option{-frepo} is an option meant 1409only for C++ programs; you can use the other options with any 1410language supported by GCC@. 1411 1412Here is a list of options that are @emph{only} for compiling C++ programs: 1413 1414@table @gcctabopt 1415 1416@item -fabi-version=@var{n} 1417@opindex fabi-version 1418Use version @var{n} of the C++ ABI@. Version 2 is the version of the 1419C++ ABI that first appeared in G++ 3.4. Version 1 is the version of 1420the C++ ABI that first appeared in G++ 3.2. Version 0 will always be 1421the version that conforms most closely to the C++ ABI specification. 1422Therefore, the ABI obtained using version 0 will change as ABI bugs 1423are fixed. 1424 1425The default is version 2. 1426 1427@item -fno-access-control 1428@opindex fno-access-control 1429Turn off all access checking. This switch is mainly useful for working 1430around bugs in the access control code. 1431 1432@item -fcheck-new 1433@opindex fcheck-new 1434Check that the pointer returned by @code{operator new} is non-null 1435before attempting to modify the storage allocated. This check is 1436normally unnecessary because the C++ standard specifies that 1437@code{operator new} will only return @code{0} if it is declared 1438@samp{throw()}, in which case the compiler will always check the 1439return value even without this option. In all other cases, when 1440@code{operator new} has a non-empty exception specification, memory 1441exhaustion is signalled by throwing @code{std::bad_alloc}. See also 1442@samp{new (nothrow)}. 1443 1444@item -fconserve-space 1445@opindex fconserve-space 1446Put uninitialized or runtime-initialized global variables into the 1447common segment, as C does. This saves space in the executable at the 1448cost of not diagnosing duplicate definitions. If you compile with this 1449flag and your program mysteriously crashes after @code{main()} has 1450completed, you may have an object that is being destroyed twice because 1451two definitions were merged. 1452 1453This option is no longer useful on most targets, now that support has 1454been added for putting variables into BSS without making them common. 1455 1456@item -ffriend-injection 1457@opindex ffriend-injection 1458Inject friend functions into the enclosing namespace, so that they are 1459visible outside the scope of the class in which they are declared. 1460Friend functions were documented to work this way in the old Annotated 1461C++ Reference Manual, and versions of G++ before 4.1 always worked 1462that way. However, in ISO C++ a friend function which is not declared 1463in an enclosing scope can only be found using argument dependent 1464lookup. This option causes friends to be injected as they were in 1465earlier releases. 1466 1467This option is for compatibility, and may be removed in a future 1468release of G++. 1469 1470@item -fno-elide-constructors 1471@opindex fno-elide-constructors 1472The C++ standard allows an implementation to omit creating a temporary 1473which is only used to initialize another object of the same type. 1474Specifying this option disables that optimization, and forces G++ to 1475call the copy constructor in all cases. 1476 1477@item -fno-enforce-eh-specs 1478@opindex fno-enforce-eh-specs 1479Don't generate code to check for violation of exception specifications 1480at runtime. This option violates the C++ standard, but may be useful 1481for reducing code size in production builds, much like defining 1482@samp{NDEBUG}. This does not give user code permission to throw 1483exceptions in violation of the exception specifications; the compiler 1484will still optimize based on the specifications, so throwing an 1485unexpected exception will result in undefined behavior. 1486 1487@item -ffor-scope 1488@itemx -fno-for-scope 1489@opindex ffor-scope 1490@opindex fno-for-scope 1491If @option{-ffor-scope} is specified, the scope of variables declared in 1492a @i{for-init-statement} is limited to the @samp{for} loop itself, 1493as specified by the C++ standard. 1494If @option{-fno-for-scope} is specified, the scope of variables declared in 1495a @i{for-init-statement} extends to the end of the enclosing scope, 1496as was the case in old versions of G++, and other (traditional) 1497implementations of C++. 1498 1499The default if neither flag is given to follow the standard, 1500but to allow and give a warning for old-style code that would 1501otherwise be invalid, or have different behavior. 1502 1503@item -fno-gnu-keywords 1504@opindex fno-gnu-keywords 1505Do not recognize @code{typeof} as a keyword, so that code can use this 1506word as an identifier. You can use the keyword @code{__typeof__} instead. 1507@option{-ansi} implies @option{-fno-gnu-keywords}. 1508 1509@item -fno-implicit-templates 1510@opindex fno-implicit-templates 1511Never emit code for non-inline templates which are instantiated 1512implicitly (i.e.@: by use); only emit code for explicit instantiations. 1513@xref{Template Instantiation}, for more information. 1514 1515@item -fno-implicit-inline-templates 1516@opindex fno-implicit-inline-templates 1517Don't emit code for implicit instantiations of inline templates, either. 1518The default is to handle inlines differently so that compiles with and 1519without optimization will need the same set of explicit instantiations. 1520 1521@item -fno-implement-inlines 1522@opindex fno-implement-inlines 1523To save space, do not emit out-of-line copies of inline functions 1524controlled by @samp{#pragma implementation}. This will cause linker 1525errors if these functions are not inlined everywhere they are called. 1526 1527@item -fms-extensions 1528@opindex fms-extensions 1529Disable pedantic warnings about constructs used in MFC, such as implicit 1530int and getting a pointer to member function via non-standard syntax. 1531 1532@item -fno-nonansi-builtins 1533@opindex fno-nonansi-builtins 1534Disable built-in declarations of functions that are not mandated by 1535ANSI/ISO C@. These include @code{ffs}, @code{alloca}, @code{_exit}, 1536@code{index}, @code{bzero}, @code{conjf}, and other related functions. 1537 1538@item -fno-operator-names 1539@opindex fno-operator-names 1540Do not treat the operator name keywords @code{and}, @code{bitand}, 1541@code{bitor}, @code{compl}, @code{not}, @code{or} and @code{xor} as 1542synonyms as keywords. 1543 1544@item -fno-optional-diags 1545@opindex fno-optional-diags 1546Disable diagnostics that the standard says a compiler does not need to 1547issue. Currently, the only such diagnostic issued by G++ is the one for 1548a name having multiple meanings within a class. 1549 1550@item -fpermissive 1551@opindex fpermissive 1552Downgrade some diagnostics about nonconformant code from errors to 1553warnings. Thus, using @option{-fpermissive} will allow some 1554nonconforming code to compile. 1555 1556@item -frepo 1557@opindex frepo 1558Enable automatic template instantiation at link time. This option also 1559implies @option{-fno-implicit-templates}. @xref{Template 1560Instantiation}, for more information. 1561 1562@item -fno-rtti 1563@opindex fno-rtti 1564Disable generation of information about every class with virtual 1565functions for use by the C++ runtime type identification features 1566(@samp{dynamic_cast} and @samp{typeid}). If you don't use those parts 1567of the language, you can save some space by using this flag. Note that 1568exception handling uses the same information, but it will generate it as 1569needed. The @samp{dynamic_cast} operator can still be used for casts that 1570do not require runtime type information, i.e. casts to @code{void *} or to 1571unambiguous base classes. 1572 1573@item -fstats 1574@opindex fstats 1575Emit statistics about front-end processing at the end of the compilation. 1576This information is generally only useful to the G++ development team. 1577 1578@item -ftemplate-depth-@var{n} 1579@opindex ftemplate-depth 1580Set the maximum instantiation depth for template classes to @var{n}. 1581A limit on the template instantiation depth is needed to detect 1582endless recursions during template class instantiation. ANSI/ISO C++ 1583conforming programs must not rely on a maximum depth greater than 17. 1584 1585@item -fno-threadsafe-statics 1586@opindex fno-threadsafe-statics 1587Do not emit the extra code to use the routines specified in the C++ 1588ABI for thread-safe initialization of local statics. You can use this 1589option to reduce code size slightly in code that doesn't need to be 1590thread-safe. 1591 1592@item -fuse-cxa-atexit 1593@opindex fuse-cxa-atexit 1594Register destructors for objects with static storage duration with the 1595@code{__cxa_atexit} function rather than the @code{atexit} function. 1596This option is required for fully standards-compliant handling of static 1597destructors, but will only work if your C library supports 1598@code{__cxa_atexit}. 1599 1600@item -fno-use-cxa-get-exception-ptr 1601@opindex fno-use-cxa-get-exception-ptr 1602Don't use the @code{__cxa_get_exception_ptr} runtime routine. This 1603will cause @code{std::uncaught_exception} to be incorrect, but is necessary 1604if the runtime routine is not available. 1605 1606@item -fvisibility-inlines-hidden 1607@opindex fvisibility-inlines-hidden 1608This switch declares that the user does not attempt to compare 1609pointers to inline methods where the addresses of the two functions 1610were taken in different shared objects. 1611 1612The effect of this is that GCC may, effectively, mark inline methods with 1613@code{__attribute__ ((visibility ("hidden")))} so that they do not 1614appear in the export table of a DSO and do not require a PLT indirection 1615when used within the DSO@. Enabling this option can have a dramatic effect 1616on load and link times of a DSO as it massively reduces the size of the 1617dynamic export table when the library makes heavy use of templates. 1618 1619The behaviour of this switch is not quite the same as marking the 1620methods as hidden directly, because it does not affect static variables 1621local to the function or cause the compiler to deduce that 1622the function is defined in only one shared object. 1623 1624You may mark a method as having a visibility explicitly to negate the 1625effect of the switch for that method. For example, if you do want to 1626compare pointers to a particular inline method, you might mark it as 1627having default visibility. Marking the enclosing class with explicit 1628visibility will have no effect. 1629 1630Explicitly instantiated inline methods are unaffected by this option 1631as their linkage might otherwise cross a shared library boundary. 1632@xref{Template Instantiation}. 1633 1634@item -fvisibility-ms-compat 1635@opindex fvisibility-ms-compat 1636This flag attempts to use visibility settings to make GCC's C++ 1637linkage model compatible with that of Microsoft Visual Studio. 1638 1639The flag makes these changes to GCC's linkage model: 1640 1641@enumerate 1642@item 1643It sets the default visibility to @code{hidden}, like 1644@option{-fvisibility=hidden}. 1645 1646@item 1647Types, but not their members, are not hidden by default. 1648 1649@item 1650The One Definition Rule is relaxed for types without explicit 1651visibility specifications which are defined in more than one different 1652shared object: those declarations are permitted if they would have 1653been permitted when this option was not used. 1654@end enumerate 1655 1656In new code it is better to use @option{-fvisibility=hidden} and 1657export those classes which are intended to be externally visible. 1658Unfortunately it is possible for code to rely, perhaps accidentally, 1659on the Visual Studio behaviour. 1660 1661Among the consequences of these changes are that static data members 1662of the same type with the same name but defined in different shared 1663objects will be different, so changing one will not change the other; 1664and that pointers to function members defined in different shared 1665objects may not compare equal. When this flag is given, it is a 1666violation of the ODR to define types with the same name differently. 1667 1668@item -fno-weak 1669@opindex fno-weak 1670Do not use weak symbol support, even if it is provided by the linker. 1671By default, G++ will use weak symbols if they are available. This 1672option exists only for testing, and should not be used by end-users; 1673it will result in inferior code and has no benefits. This option may 1674be removed in a future release of G++. 1675 1676@item -nostdinc++ 1677@opindex nostdinc++ 1678Do not search for header files in the standard directories specific to 1679C++, but do still search the other standard directories. (This option 1680is used when building the C++ library.) 1681@end table 1682 1683In addition, these optimization, warning, and code generation options 1684have meanings only for C++ programs: 1685 1686@table @gcctabopt 1687@item -fno-default-inline 1688@opindex fno-default-inline 1689Do not assume @samp{inline} for functions defined inside a class scope. 1690@xref{Optimize Options,,Options That Control Optimization}. Note that these 1691functions will have linkage like inline functions; they just won't be 1692inlined by default. 1693 1694@item -Wabi @r{(C++ only)} 1695@opindex Wabi 1696Warn when G++ generates code that is probably not compatible with the 1697vendor-neutral C++ ABI@. Although an effort has been made to warn about 1698all such cases, there are probably some cases that are not warned about, 1699even though G++ is generating incompatible code. There may also be 1700cases where warnings are emitted even though the code that is generated 1701will be compatible. 1702 1703You should rewrite your code to avoid these warnings if you are 1704concerned about the fact that code generated by G++ may not be binary 1705compatible with code generated by other compilers. 1706 1707The known incompatibilities at this point include: 1708 1709@itemize @bullet 1710 1711@item 1712Incorrect handling of tail-padding for bit-fields. G++ may attempt to 1713pack data into the same byte as a base class. For example: 1714 1715@smallexample 1716struct A @{ virtual void f(); int f1 : 1; @}; 1717struct B : public A @{ int f2 : 1; @}; 1718@end smallexample 1719 1720@noindent 1721In this case, G++ will place @code{B::f2} into the same byte 1722as@code{A::f1}; other compilers will not. You can avoid this problem 1723by explicitly padding @code{A} so that its size is a multiple of the 1724byte size on your platform; that will cause G++ and other compilers to 1725layout @code{B} identically. 1726 1727@item 1728Incorrect handling of tail-padding for virtual bases. G++ does not use 1729tail padding when laying out virtual bases. For example: 1730 1731@smallexample 1732struct A @{ virtual void f(); char c1; @}; 1733struct B @{ B(); char c2; @}; 1734struct C : public A, public virtual B @{@}; 1735@end smallexample 1736 1737@noindent 1738In this case, G++ will not place @code{B} into the tail-padding for 1739@code{A}; other compilers will. You can avoid this problem by 1740explicitly padding @code{A} so that its size is a multiple of its 1741alignment (ignoring virtual base classes); that will cause G++ and other 1742compilers to layout @code{C} identically. 1743 1744@item 1745Incorrect handling of bit-fields with declared widths greater than that 1746of their underlying types, when the bit-fields appear in a union. For 1747example: 1748 1749@smallexample 1750union U @{ int i : 4096; @}; 1751@end smallexample 1752 1753@noindent 1754Assuming that an @code{int} does not have 4096 bits, G++ will make the 1755union too small by the number of bits in an @code{int}. 1756 1757@item 1758Empty classes can be placed at incorrect offsets. For example: 1759 1760@smallexample 1761struct A @{@}; 1762 1763struct B @{ 1764 A a; 1765 virtual void f (); 1766@}; 1767 1768struct C : public B, public A @{@}; 1769@end smallexample 1770 1771@noindent 1772G++ will place the @code{A} base class of @code{C} at a nonzero offset; 1773it should be placed at offset zero. G++ mistakenly believes that the 1774@code{A} data member of @code{B} is already at offset zero. 1775 1776@item 1777Names of template functions whose types involve @code{typename} or 1778template template parameters can be mangled incorrectly. 1779 1780@smallexample 1781template <typename Q> 1782void f(typename Q::X) @{@} 1783 1784template <template <typename> class Q> 1785void f(typename Q<int>::X) @{@} 1786@end smallexample 1787 1788@noindent 1789Instantiations of these templates may be mangled incorrectly. 1790 1791@end itemize 1792 1793@item -Wctor-dtor-privacy @r{(C++ only)} 1794@opindex Wctor-dtor-privacy 1795Warn when a class seems unusable because all the constructors or 1796destructors in that class are private, and it has neither friends nor 1797public static member functions. 1798 1799@item -Wnon-virtual-dtor @r{(C++ only)} 1800@opindex Wnon-virtual-dtor 1801Warn when a class appears to be polymorphic, thereby requiring a virtual 1802destructor, yet it declares a non-virtual one. This warning is also 1803enabled if -Weffc++ is specified. 1804 1805@item -Wreorder @r{(C++ only)} 1806@opindex Wreorder 1807@cindex reordering, warning 1808@cindex warning for reordering of member initializers 1809Warn when the order of member initializers given in the code does not 1810match the order in which they must be executed. For instance: 1811 1812@smallexample 1813struct A @{ 1814 int i; 1815 int j; 1816 A(): j (0), i (1) @{ @} 1817@}; 1818@end smallexample 1819 1820The compiler will rearrange the member initializers for @samp{i} 1821and @samp{j} to match the declaration order of the members, emitting 1822a warning to that effect. This warning is enabled by @option{-Wall}. 1823@end table 1824 1825The following @option{-W@dots{}} options are not affected by @option{-Wall}. 1826 1827@table @gcctabopt 1828@item -Weffc++ @r{(C++ only)} 1829@opindex Weffc++ 1830Warn about violations of the following style guidelines from Scott Meyers' 1831@cite{Effective C++} book: 1832 1833@itemize @bullet 1834@item 1835Item 11: Define a copy constructor and an assignment operator for classes 1836with dynamically allocated memory. 1837 1838@item 1839Item 12: Prefer initialization to assignment in constructors. 1840 1841@item 1842Item 14: Make destructors virtual in base classes. 1843 1844@item 1845Item 15: Have @code{operator=} return a reference to @code{*this}. 1846 1847@item 1848Item 23: Don't try to return a reference when you must return an object. 1849 1850@end itemize 1851 1852Also warn about violations of the following style guidelines from 1853Scott Meyers' @cite{More Effective C++} book: 1854 1855@itemize @bullet 1856@item 1857Item 6: Distinguish between prefix and postfix forms of increment and 1858decrement operators. 1859 1860@item 1861Item 7: Never overload @code{&&}, @code{||}, or @code{,}. 1862 1863@end itemize 1864 1865When selecting this option, be aware that the standard library 1866headers do not obey all of these guidelines; use @samp{grep -v} 1867to filter out those warnings. 1868 1869@item -Wno-deprecated @r{(C++ only)} 1870@opindex Wno-deprecated 1871Do not warn about usage of deprecated features. @xref{Deprecated Features}. 1872 1873@item -Wstrict-null-sentinel @r{(C++ only)} 1874@opindex Wstrict-null-sentinel 1875Warn also about the use of an uncasted @code{NULL} as sentinel. When 1876compiling only with GCC this is a valid sentinel, as @code{NULL} is defined 1877to @code{__null}. Although it is a null pointer constant not a null pointer, 1878it is guaranteed to of the same size as a pointer. But this use is 1879not portable across different compilers. 1880 1881@item -Wno-non-template-friend @r{(C++ only)} 1882@opindex Wno-non-template-friend 1883Disable warnings when non-templatized friend functions are declared 1884within a template. Since the advent of explicit template specification 1885support in G++, if the name of the friend is an unqualified-id (i.e., 1886@samp{friend foo(int)}), the C++ language specification demands that the 1887friend declare or define an ordinary, nontemplate function. (Section 188814.5.3). Before G++ implemented explicit specification, unqualified-ids 1889could be interpreted as a particular specialization of a templatized 1890function. Because this non-conforming behavior is no longer the default 1891behavior for G++, @option{-Wnon-template-friend} allows the compiler to 1892check existing code for potential trouble spots and is on by default. 1893This new compiler behavior can be turned off with 1894@option{-Wno-non-template-friend} which keeps the conformant compiler code 1895but disables the helpful warning. 1896 1897@item -Wold-style-cast @r{(C++ only)} 1898@opindex Wold-style-cast 1899Warn if an old-style (C-style) cast to a non-void type is used within 1900a C++ program. The new-style casts (@samp{dynamic_cast}, 1901@samp{static_cast}, @samp{reinterpret_cast}, and @samp{const_cast}) are 1902less vulnerable to unintended effects and much easier to search for. 1903 1904@item -Woverloaded-virtual @r{(C++ only)} 1905@opindex Woverloaded-virtual 1906@cindex overloaded virtual fn, warning 1907@cindex warning for overloaded virtual fn 1908Warn when a function declaration hides virtual functions from a 1909base class. For example, in: 1910 1911@smallexample 1912struct A @{ 1913 virtual void f(); 1914@}; 1915 1916struct B: public A @{ 1917 void f(int); 1918@}; 1919@end smallexample 1920 1921the @code{A} class version of @code{f} is hidden in @code{B}, and code 1922like: 1923 1924@smallexample 1925B* b; 1926b->f(); 1927@end smallexample 1928 1929will fail to compile. 1930 1931@item -Wno-pmf-conversions @r{(C++ only)} 1932@opindex Wno-pmf-conversions 1933Disable the diagnostic for converting a bound pointer to member function 1934to a plain pointer. 1935 1936@item -Wsign-promo @r{(C++ only)} 1937@opindex Wsign-promo 1938Warn when overload resolution chooses a promotion from unsigned or 1939enumerated type to a signed type, over a conversion to an unsigned type of 1940the same size. Previous versions of G++ would try to preserve 1941unsignedness, but the standard mandates the current behavior. 1942 1943@smallexample 1944struct A @{ 1945 operator int (); 1946 A& operator = (int); 1947@}; 1948 1949main () 1950@{ 1951 A a,b; 1952 a = b; 1953@} 1954@end smallexample 1955 1956In this example, G++ will synthesize a default @samp{A& operator = 1957(const A&);}, while cfront will use the user-defined @samp{operator =}. 1958@end table 1959 1960@node Language Independent Options 1961@section Options to Control Diagnostic Messages Formatting 1962@cindex options to control diagnostics formatting 1963@cindex diagnostic messages 1964@cindex message formatting 1965 1966Traditionally, diagnostic messages have been formatted irrespective of 1967the output device's aspect (e.g.@: its width, @dots{}). The options described 1968below can be used to control the diagnostic messages formatting 1969algorithm, e.g.@: how many characters per line, how often source location 1970information should be reported. Right now, only the C++ front end can 1971honor these options. However it is expected, in the near future, that 1972the remaining front ends would be able to digest them correctly. 1973 1974@table @gcctabopt 1975@item -fmessage-length=@var{n} 1976@opindex fmessage-length 1977Try to format error messages so that they fit on lines of about @var{n} 1978characters. The default is 72 characters for @command{g++} and 0 for the rest of 1979the front ends supported by GCC@. If @var{n} is zero, then no 1980line-wrapping will be done; each error message will appear on a single 1981line. 1982 1983@opindex fdiagnostics-show-location 1984@item -fdiagnostics-show-location=once 1985Only meaningful in line-wrapping mode. Instructs the diagnostic messages 1986reporter to emit @emph{once} source location information; that is, in 1987case the message is too long to fit on a single physical line and has to 1988be wrapped, the source location won't be emitted (as prefix) again, 1989over and over, in subsequent continuation lines. This is the default 1990behavior. 1991 1992@item -fdiagnostics-show-location=every-line 1993Only meaningful in line-wrapping mode. Instructs the diagnostic 1994messages reporter to emit the same source location information (as 1995prefix) for physical lines that result from the process of breaking 1996a message which is too long to fit on a single line. 1997 1998@item -fdiagnostics-show-option 1999@opindex fdiagnostics-show-option 2000This option instructs the diagnostic machinery to add text to each 2001diagnostic emitted, which indicates which command line option directly 2002controls that diagnostic, when such an option is known to the 2003diagnostic machinery. 2004 2005@end table 2006 2007@node Warning Options 2008@section Options to Request or Suppress Warnings 2009@cindex options to control warnings 2010@cindex warning messages 2011@cindex messages, warning 2012@cindex suppressing warnings 2013 2014Warnings are diagnostic messages that report constructions which 2015are not inherently erroneous but which are risky or suggest there 2016may have been an error. 2017 2018You can request many specific warnings with options beginning @samp{-W}, 2019for example @option{-Wimplicit} to request warnings on implicit 2020declarations. Each of these specific warning options also has a 2021negative form beginning @samp{-Wno-} to turn off warnings; 2022for example, @option{-Wno-implicit}. This manual lists only one of the 2023two forms, whichever is not the default. 2024 2025The following options control the amount and kinds of warnings produced 2026by GCC; for further, language-specific options also refer to 2027@ref{C++ Dialect Options}. 2028 2029@table @gcctabopt 2030@cindex syntax checking 2031@item -fsyntax-only 2032@opindex fsyntax-only 2033Check the code for syntax errors, but don't do anything beyond that. 2034 2035@item -pedantic 2036@opindex pedantic 2037Issue all the warnings demanded by strict ISO C and ISO C++; 2038reject all programs that use forbidden extensions, and some other 2039programs that do not follow ISO C and ISO C++. For ISO C, follows the 2040version of the ISO C standard specified by any @option{-std} option used. 2041 2042Valid ISO C and ISO C++ programs should compile properly with or without 2043this option (though a rare few will require @option{-ansi} or a 2044@option{-std} option specifying the required version of ISO C)@. However, 2045without this option, certain GNU extensions and traditional C and C++ 2046features are supported as well. With this option, they are rejected. 2047 2048@option{-pedantic} does not cause warning messages for use of the 2049alternate keywords whose names begin and end with @samp{__}. Pedantic 2050warnings are also disabled in the expression that follows 2051@code{__extension__}. However, only system header files should use 2052these escape routes; application programs should avoid them. 2053@xref{Alternate Keywords}. 2054 2055Some users try to use @option{-pedantic} to check programs for strict ISO 2056C conformance. They soon find that it does not do quite what they want: 2057it finds some non-ISO practices, but not all---only those for which 2058ISO C @emph{requires} a diagnostic, and some others for which 2059diagnostics have been added. 2060 2061A feature to report any failure to conform to ISO C might be useful in 2062some instances, but would require considerable additional work and would 2063be quite different from @option{-pedantic}. We don't have plans to 2064support such a feature in the near future. 2065 2066Where the standard specified with @option{-std} represents a GNU 2067extended dialect of C, such as @samp{gnu89} or @samp{gnu99}, there is a 2068corresponding @dfn{base standard}, the version of ISO C on which the GNU 2069extended dialect is based. Warnings from @option{-pedantic} are given 2070where they are required by the base standard. (It would not make sense 2071for such warnings to be given only for features not in the specified GNU 2072C dialect, since by definition the GNU dialects of C include all 2073features the compiler supports with the given option, and there would be 2074nothing to warn about.) 2075 2076@item -pedantic-errors 2077@opindex pedantic-errors 2078Like @option{-pedantic}, except that errors are produced rather than 2079warnings. 2080 2081@item -w 2082@opindex w 2083Inhibit all warning messages. 2084 2085@item -Wno-import 2086@opindex Wno-import 2087Inhibit warning messages about the use of @samp{#import}. 2088 2089@c APPLE LOCAL begin -Wnewline-eof 2001-08-23 --sts ** 2090@item -Wnewline-eof 2091@opindex Wnewline-eof 2092Warn about files missing a newline at the end of the file. (Apple compatible) 2093@c APPLE LOCAL end -Wnewline-eof 2001-08-23 --sts ** 2094 2095@item -Wchar-subscripts 2096@opindex Wchar-subscripts 2097Warn if an array subscript has type @code{char}. This is a common cause 2098of error, as programmers often forget that this type is signed on some 2099machines. 2100This warning is enabled by @option{-Wall}. 2101 2102@item -Wcomment 2103@opindex Wcomment 2104Warn whenever a comment-start sequence @samp{/*} appears in a @samp{/*} 2105comment, or whenever a Backslash-Newline appears in a @samp{//} comment. 2106This warning is enabled by @option{-Wall}. 2107 2108@item -Wfatal-errors 2109@opindex Wfatal-errors 2110This option causes the compiler to abort compilation on the first error 2111occurred rather than trying to keep going and printing further error 2112messages. 2113 2114@item -Wformat 2115@opindex Wformat 2116@opindex ffreestanding 2117@opindex fno-builtin 2118Check calls to @code{printf} and @code{scanf}, etc., to make sure that 2119the arguments supplied have types appropriate to the format string 2120specified, and that the conversions specified in the format string make 2121sense. This includes standard functions, and others specified by format 2122attributes (@pxref{Function Attributes}), in the @code{printf}, 2123@code{scanf}, @code{strftime} and @code{strfmon} (an X/Open extension, 2124not in the C standard) families (or other target-specific families). 2125Which functions are checked without format attributes having been 2126specified depends on the standard version selected, and such checks of 2127functions without the attribute specified are disabled by 2128@option{-ffreestanding} or @option{-fno-builtin}. 2129 2130The formats are checked against the format features supported by GNU 2131libc version 2.2. These include all ISO C90 and C99 features, as well 2132as features from the Single Unix Specification and some BSD and GNU 2133extensions. Other library implementations may not support all these 2134features; GCC does not support warning about features that go beyond a 2135particular library's limitations. However, if @option{-pedantic} is used 2136with @option{-Wformat}, warnings will be given about format features not 2137in the selected standard version (but not for @code{strfmon} formats, 2138since those are not in any version of the C standard). @xref{C Dialect 2139Options,,Options Controlling C Dialect}. 2140 2141Since @option{-Wformat} also checks for null format arguments for 2142several functions, @option{-Wformat} also implies @option{-Wnonnull}. 2143 2144@option{-Wformat} is included in @option{-Wall}. For more control over some 2145aspects of format checking, the options @option{-Wformat-y2k}, 2146@option{-Wno-format-extra-args}, @option{-Wno-format-zero-length}, 2147@option{-Wformat-nonliteral}, @option{-Wformat-security}, and 2148@option{-Wformat=2} are available, but are not included in @option{-Wall}. 2149 2150@item -Wformat-y2k 2151@opindex Wformat-y2k 2152If @option{-Wformat} is specified, also warn about @code{strftime} 2153formats which may yield only a two-digit year. 2154 2155@item -Wno-format-extra-args 2156@opindex Wno-format-extra-args 2157If @option{-Wformat} is specified, do not warn about excess arguments to a 2158@code{printf} or @code{scanf} format function. The C standard specifies 2159that such arguments are ignored. 2160 2161Where the unused arguments lie between used arguments that are 2162specified with @samp{$} operand number specifications, normally 2163warnings are still given, since the implementation could not know what 2164type to pass to @code{va_arg} to skip the unused arguments. However, 2165in the case of @code{scanf} formats, this option will suppress the 2166warning if the unused arguments are all pointers, since the Single 2167Unix Specification says that such unused arguments are allowed. 2168 2169@item -Wno-format-zero-length 2170@opindex Wno-format-zero-length 2171If @option{-Wformat} is specified, do not warn about zero-length formats. 2172The C standard specifies that zero-length formats are allowed. 2173 2174@item -Wformat-nonliteral 2175@opindex Wformat-nonliteral 2176If @option{-Wformat} is specified, also warn if the format string is not a 2177string literal and so cannot be checked, unless the format function 2178takes its format arguments as a @code{va_list}. 2179 2180@item -Wformat-security 2181@opindex Wformat-security 2182If @option{-Wformat} is specified, also warn about uses of format 2183functions that represent possible security problems. At present, this 2184warns about calls to @code{printf} and @code{scanf} functions where the 2185format string is not a string literal and there are no format arguments, 2186as in @code{printf (foo);}. This may be a security hole if the format 2187string came from untrusted input and contains @samp{%n}. (This is 2188currently a subset of what @option{-Wformat-nonliteral} warns about, but 2189in future warnings may be added to @option{-Wformat-security} that are not 2190included in @option{-Wformat-nonliteral}.) 2191 2192@item -Wformat=2 2193@opindex Wformat=2 2194Enable @option{-Wformat} plus format checks not included in 2195@option{-Wformat}. Currently equivalent to @samp{-Wformat 2196-Wformat-nonliteral -Wformat-security -Wformat-y2k}. 2197 2198@item -Wnonnull 2199@opindex Wnonnull 2200Warn about passing a null pointer for arguments marked as 2201requiring a non-null value by the @code{nonnull} function attribute. 2202 2203@option{-Wnonnull} is included in @option{-Wall} and @option{-Wformat}. It 2204can be disabled with the @option{-Wno-nonnull} option. 2205 2206@item -Winit-self @r{(C and C++ only)} 2207@opindex Winit-self 2208Warn about uninitialized variables which are initialized with themselves. 2209Note this option can only be used with the @option{-Wuninitialized} option, 2210which in turn only works with @option{-O1} and above. 2211 2212For example, GCC will warn about @code{i} being uninitialized in the 2213following snippet only when @option{-Winit-self} has been specified: 2214@smallexample 2215@group 2216int f() 2217@{ 2218 int i = i; 2219 return i; 2220@} 2221@end group 2222@end smallexample 2223 2224@item -Wimplicit-int 2225@opindex Wimplicit-int 2226Warn when a declaration does not specify a type. 2227This warning is enabled by @option{-Wall}. 2228 2229@item -Wimplicit-function-declaration 2230@itemx -Werror-implicit-function-declaration 2231@opindex Wimplicit-function-declaration 2232@opindex Werror-implicit-function-declaration 2233Give a warning (or error) whenever a function is used before being 2234declared. The form @option{-Wno-error-implicit-function-declaration} 2235is not supported. 2236This warning is enabled by @option{-Wall} (as a warning, not an error). 2237 2238@item -Wimplicit 2239@opindex Wimplicit 2240Same as @option{-Wimplicit-int} and @option{-Wimplicit-function-declaration}. 2241This warning is enabled by @option{-Wall}. 2242 2243@item -Wmain 2244@opindex Wmain 2245Warn if the type of @samp{main} is suspicious. @samp{main} should be a 2246function with external linkage, returning int, taking either zero 2247arguments, two, or three arguments of appropriate types. 2248This warning is enabled by @option{-Wall}. 2249 2250@item -Wmissing-braces 2251@opindex Wmissing-braces 2252Warn if an aggregate or union initializer is not fully bracketed. In 2253the following example, the initializer for @samp{a} is not fully 2254bracketed, but that for @samp{b} is fully bracketed. 2255 2256@smallexample 2257int a[2][2] = @{ 0, 1, 2, 3 @}; 2258int b[2][2] = @{ @{ 0, 1 @}, @{ 2, 3 @} @}; 2259@end smallexample 2260 2261This warning is enabled by @option{-Wall}. 2262 2263@item -Wmissing-include-dirs @r{(C and C++ only)} 2264@opindex Wmissing-include-dirs 2265Warn if a user-supplied include directory does not exist. 2266 2267@item -Wparentheses 2268@opindex Wparentheses 2269Warn if parentheses are omitted in certain contexts, such 2270as when there is an assignment in a context where a truth value 2271is expected, or when operators are nested whose precedence people 2272often get confused about. 2273 2274Also warn if a comparison like @samp{x<=y<=z} appears; this is 2275equivalent to @samp{(x<=y ? 1 : 0) <= z}, which is a different 2276interpretation from that of ordinary mathematical notation. 2277 2278Also warn about constructions where there may be confusion to which 2279@code{if} statement an @code{else} branch belongs. Here is an example of 2280such a case: 2281 2282@smallexample 2283@group 2284@{ 2285 if (a) 2286 if (b) 2287 foo (); 2288 else 2289 bar (); 2290@} 2291@end group 2292@end smallexample 2293 2294In C/C++, every @code{else} branch belongs to the innermost possible 2295@code{if} statement, which in this example is @code{if (b)}. This is 2296often not what the programmer expected, as illustrated in the above 2297example by indentation the programmer chose. When there is the 2298potential for this confusion, GCC will issue a warning when this flag 2299is specified. To eliminate the warning, add explicit braces around 2300the innermost @code{if} statement so there is no way the @code{else} 2301could belong to the enclosing @code{if}. The resulting code would 2302look like this: 2303 2304@smallexample 2305@group 2306@{ 2307 if (a) 2308 @{ 2309 if (b) 2310 foo (); 2311 else 2312 bar (); 2313 @} 2314@} 2315@end group 2316@end smallexample 2317 2318This warning is enabled by @option{-Wall}. 2319 2320@item -Wsequence-point 2321@opindex Wsequence-point 2322Warn about code that may have undefined semantics because of violations 2323of sequence point rules in the C and C++ standards. 2324 2325The C and C++ standards defines the order in which expressions in a C/C++ 2326program are evaluated in terms of @dfn{sequence points}, which represent 2327a partial ordering between the execution of parts of the program: those 2328executed before the sequence point, and those executed after it. These 2329occur after the evaluation of a full expression (one which is not part 2330of a larger expression), after the evaluation of the first operand of a 2331@code{&&}, @code{||}, @code{? :} or @code{,} (comma) operator, before a 2332function is called (but after the evaluation of its arguments and the 2333expression denoting the called function), and in certain other places. 2334Other than as expressed by the sequence point rules, the order of 2335evaluation of subexpressions of an expression is not specified. All 2336these rules describe only a partial order rather than a total order, 2337since, for example, if two functions are called within one expression 2338with no sequence point between them, the order in which the functions 2339are called is not specified. However, the standards committee have 2340ruled that function calls do not overlap. 2341 2342It is not specified when between sequence points modifications to the 2343values of objects take effect. Programs whose behavior depends on this 2344have undefined behavior; the C and C++ standards specify that ``Between 2345the previous and next sequence point an object shall have its stored 2346value modified at most once by the evaluation of an expression. 2347Furthermore, the prior value shall be read only to determine the value 2348to be stored.''. If a program breaks these rules, the results on any 2349particular implementation are entirely unpredictable. 2350 2351Examples of code with undefined behavior are @code{a = a++;}, @code{a[n] 2352= b[n++]} and @code{a[i++] = i;}. Some more complicated cases are not 2353diagnosed by this option, and it may give an occasional false positive 2354result, but in general it has been found fairly effective at detecting 2355this sort of problem in programs. 2356 2357The standard is worded confusingly, therefore there is some debate 2358over the precise meaning of the sequence point rules in subtle cases. 2359Links to discussions of the problem, including proposed formal 2360definitions, may be found on the GCC readings page, at 2361@w{@uref{http://gcc.gnu.org/readings.html}}. 2362 2363This warning is enabled by @option{-Wall} for C and C++. 2364 2365@item -Wreturn-type 2366@opindex Wreturn-type 2367Warn whenever a function is defined with a return-type that defaults to 2368@code{int}. Also warn about any @code{return} statement with no 2369return-value in a function whose return-type is not @code{void}. 2370 2371For C, also warn if the return type of a function has a type qualifier 2372such as @code{const}. Such a type qualifier has no effect, since the 2373value returned by a function is not an lvalue. ISO C prohibits 2374qualified @code{void} return types on function definitions, so such 2375return types always receive a warning even without this option. 2376 2377For C++, a function without return type always produces a diagnostic 2378message, even when @option{-Wno-return-type} is specified. The only 2379exceptions are @samp{main} and functions defined in system headers. 2380 2381This warning is enabled by @option{-Wall}. 2382 2383@item -Wswitch 2384@opindex Wswitch 2385Warn whenever a @code{switch} statement has an index of enumerated type 2386and lacks a @code{case} for one or more of the named codes of that 2387enumeration. (The presence of a @code{default} label prevents this 2388warning.) @code{case} labels outside the enumeration range also 2389provoke warnings when this option is used. 2390This warning is enabled by @option{-Wall}. 2391 2392@item -Wswitch-default 2393@opindex Wswitch-switch 2394Warn whenever a @code{switch} statement does not have a @code{default} 2395case. 2396 2397@item -Wswitch-enum 2398@opindex Wswitch-enum 2399Warn whenever a @code{switch} statement has an index of enumerated type 2400and lacks a @code{case} for one or more of the named codes of that 2401enumeration. @code{case} labels outside the enumeration range also 2402provoke warnings when this option is used. 2403 2404@item -Wtrigraphs 2405@opindex Wtrigraphs 2406Warn if any trigraphs are encountered that might change the meaning of 2407the program (trigraphs within comments are not warned about). 2408This warning is enabled by @option{-Wall}. 2409 2410@item -Wunused-function 2411@opindex Wunused-function 2412Warn whenever a static function is declared but not defined or a 2413non-inline static function is unused. 2414This warning is enabled by @option{-Wall}. 2415 2416@item -Wunused-label 2417@opindex Wunused-label 2418Warn whenever a label is declared but not used. 2419This warning is enabled by @option{-Wall}. 2420 2421To suppress this warning use the @samp{unused} attribute 2422(@pxref{Variable Attributes}). 2423 2424@item -Wunused-parameter 2425@opindex Wunused-parameter 2426Warn whenever a function parameter is unused aside from its declaration. 2427 2428To suppress this warning use the @samp{unused} attribute 2429(@pxref{Variable Attributes}). 2430 2431@item -Wunused-variable 2432@opindex Wunused-variable 2433Warn whenever a local variable or non-constant static variable is unused 2434aside from its declaration. 2435This warning is enabled by @option{-Wall}. 2436 2437To suppress this warning use the @samp{unused} attribute 2438(@pxref{Variable Attributes}). 2439 2440@item -Wunused-value 2441@opindex Wunused-value 2442Warn whenever a statement computes a result that is explicitly not used. 2443This warning is enabled by @option{-Wall}. 2444 2445To suppress this warning cast the expression to @samp{void}. 2446 2447@item -Wunused 2448@opindex Wunused 2449All the above @option{-Wunused} options combined. 2450 2451In order to get a warning about an unused function parameter, you must 2452either specify @samp{-Wextra -Wunused} (note that @samp{-Wall} implies 2453@samp{-Wunused}), or separately specify @option{-Wunused-parameter}. 2454 2455@item -Wuninitialized 2456@opindex Wuninitialized 2457Warn if an automatic variable is used without first being initialized or 2458if a variable may be clobbered by a @code{setjmp} call. 2459 2460These warnings are possible only in optimizing compilation, 2461because they require data flow information that is computed only 2462when optimizing. If you do not specify @option{-O}, you will not get 2463these warnings. Instead, GCC will issue a warning about @option{-Wuninitialized} 2464requiring @option{-O}. 2465 2466If you want to warn about code which uses the uninitialized value of the 2467variable in its own initializer, use the @option{-Winit-self} option. 2468 2469These warnings occur for individual uninitialized or clobbered 2470elements of structure, union or array variables as well as for 2471variables which are uninitialized or clobbered as a whole. They do 2472not occur for variables or elements declared @code{volatile}. Because 2473these warnings depend on optimization, the exact variables or elements 2474for which there are warnings will depend on the precise optimization 2475options and version of GCC used. 2476 2477Note that there may be no warning about a variable that is used only 2478to compute a value that itself is never used, because such 2479computations may be deleted by data flow analysis before the warnings 2480are printed. 2481 2482These warnings are made optional because GCC is not smart 2483enough to see all the reasons why the code might be correct 2484despite appearing to have an error. Here is one example of how 2485this can happen: 2486 2487@smallexample 2488@group 2489@{ 2490 int x; 2491 switch (y) 2492 @{ 2493 case 1: x = 1; 2494 break; 2495 case 2: x = 4; 2496 break; 2497 case 3: x = 5; 2498 @} 2499 foo (x); 2500@} 2501@end group 2502@end smallexample 2503 2504@noindent 2505If the value of @code{y} is always 1, 2 or 3, then @code{x} is 2506always initialized, but GCC doesn't know this. Here is 2507another common case: 2508 2509@smallexample 2510@{ 2511 int save_y; 2512 if (change_y) save_y = y, y = new_y; 2513 @dots{} 2514 if (change_y) y = save_y; 2515@} 2516@end smallexample 2517 2518@noindent 2519This has no bug because @code{save_y} is used only if it is set. 2520 2521@cindex @code{longjmp} warnings 2522This option also warns when a non-volatile automatic variable might be 2523changed by a call to @code{longjmp}. These warnings as well are possible 2524only in optimizing compilation. 2525 2526The compiler sees only the calls to @code{setjmp}. It cannot know 2527where @code{longjmp} will be called; in fact, a signal handler could 2528call it at any point in the code. As a result, you may get a warning 2529even when there is in fact no problem because @code{longjmp} cannot 2530in fact be called at the place which would cause a problem. 2531 2532Some spurious warnings can be avoided if you declare all the functions 2533you use that never return as @code{noreturn}. @xref{Function 2534Attributes}. 2535 2536This warning is enabled by @option{-Wall}. 2537 2538@item -Wunknown-pragmas 2539@opindex Wunknown-pragmas 2540@cindex warning for unknown pragmas 2541@cindex unknown pragmas, warning 2542@cindex pragmas, warning of unknown 2543Warn when a #pragma directive is encountered which is not understood by 2544GCC@. If this command line option is used, warnings will even be issued 2545for unknown pragmas in system header files. This is not the case if 2546the warnings were only enabled by the @option{-Wall} command line option. 2547 2548@item -Wno-pragmas 2549@opindex Wno-pragmas 2550@opindex Wpragmas 2551Do not warn about misuses of pragmas, such as incorrect parameters, 2552invalid syntax, or conflicts between pragmas. See also 2553@samp{-Wunknown-pragmas}. 2554 2555@item -Wstrict-aliasing 2556@opindex Wstrict-aliasing 2557This option is only active when @option{-fstrict-aliasing} is active. 2558It warns about code which might break the strict aliasing rules that the 2559compiler is using for optimization. The warning does not catch all 2560cases, but does attempt to catch the more common pitfalls. It is 2561included in @option{-Wall}. 2562It is equivalent to -Wstrict-aliasing=3 2563 2564@item -Wstrict-aliasing=n 2565@opindex Wstrict-aliasing=n 2566This option is only active when @option{-fstrict-aliasing} is active. 2567It warns about code which might break the strict aliasing rules that the 2568compiler is using for optimization. 2569Higher levels correspond to higher accuracy (fewer false positives). 2570Higher levels also correspond to more effort, similar to the way -O works. 2571@option{-Wstrict-aliasing} is equivalent to @option{-Wstrict-aliasing=n}, 2572with n=3. 2573 2574Level 1: Most aggressive, quick, least accurate. 2575Possibly useful when higher levels 2576do not warn but -fstrict-aliasing still breaks the code, as it has very few 2577false negatives. However, it has many false positives. 2578Warns for all pointer conversions between possibly incompatible types, 2579even if never dereferenced. Runs in the frontend only. 2580 2581Level 2: Aggressive, quick, not too precise. 2582May still have many false positives (not as many as level 1 though), 2583and few false negatives (but possibly more than level 1). 2584Unlike level 1, it only warns when an address is taken. Warns about 2585incomplete types. Runs in the frontend only. 2586 2587Level 3 (default for @option{-Wstrict-aliasing}): 2588Should have very few false positives and few false 2589negatives. Slightly slower than levels 1 or 2 when optimization is enabled. 2590Takes care of the common punn+dereference pattern in the frontend: 2591@code{*(int*)&some_float}. 2592If optimization is enabled, it also runs in the backend, where it deals 2593with multiple statement cases using flow-sensitive points-to information. 2594Only warns when the converted pointer is dereferenced. 2595Does not warn about incomplete types. 2596 2597@item -Wstrict-overflow 2598@item -Wstrict-overflow=@var{n} 2599@opindex Wstrict-overflow 2600This option is only active when @option{-fstrict-overflow} is active. 2601It warns about cases where the compiler optimizes based on the 2602assumption that signed overflow does not occur. Note that it does not 2603warn about all cases where the code might overflow: it only warns 2604about cases where the compiler implements some optimization. Thus 2605this warning depends on the optimization level. 2606 2607An optimization which assumes that signed overflow does not occur is 2608perfectly safe if the values of the variables involved are such that 2609overflow never does, in fact, occur. Therefore this warning can 2610easily give a false positive: a warning about code which is not 2611actually a problem. To help focus on important issues, several 2612warning levels are defined. No warnings are issued for the use of 2613undefined signed overflow when estimating how many iterations a loop 2614will require, in particular when determining whether a loop will be 2615executed at all. 2616 2617@table @option 2618@item -Wstrict-overflow=1 2619Warn about cases which are both questionable and easy to avoid. For 2620example: @code{x + 1 > x}; with @option{-fstrict-overflow}, the 2621compiler will simplify this to @code{1}. This level of 2622@option{-Wstrict-overflow} is enabled by @option{-Wall}; higher levels 2623are not, and must be explicitly requested. 2624 2625@item -Wstrict-overflow=2 2626Also warn about other cases where a comparison is simplified to a 2627constant. For example: @code{abs (x) >= 0}. This can only be 2628simplified when @option{-fstrict-overflow} is in effect, because 2629@code{abs (INT_MIN)} overflows to @code{INT_MIN}, which is less than 2630zero. @option{-Wstrict-overflow} (with no level) is the same as 2631@option{-Wstrict-overflow=2}. 2632 2633@item -Wstrict-overflow=3 2634Also warn about other cases where a comparison is simplified. For 2635example: @code{x + 1 > 1} will be simplified to @code{x > 0}. 2636 2637@item -Wstrict-overflow=4 2638Also warn about other simplifications not covered by the above cases. 2639For example: @code{(x * 10) / 5} will be simplified to @code{x * 2}. 2640 2641@item -Wstrict-overflow=5 2642Also warn about cases where the compiler reduces the magnitude of a 2643constant involved in a comparison. For example: @code{x + 2 > y} will 2644be simplified to @code{x + 1 >= y}. This is reported only at the 2645highest warning level because this simplification applies to many 2646comparisons, so this warning level will give a very large number of 2647false positives. 2648@end table 2649 2650@item -Wall 2651@opindex Wall 2652All of the above @samp{-W} options combined. This enables all the 2653warnings about constructions that some users consider questionable, and 2654that are easy to avoid (or modify to prevent the warning), even in 2655conjunction with macros. This also enables some language-specific 2656warnings described in @ref{C++ Dialect Options}. 2657@c APPLE LOCAL begin -Wmost 2658@item -Wmost 2659@opindex Wmost 2660This is equivalent to -Wall -Wno-parentheses. (Apple compatible) 2661@end table 2662@c APPLE LOCAL end -Wmost 2663 2664The following @option{-W@dots{}} options are not implied by @option{-Wall}. 2665Some of them warn about constructions that users generally do not 2666consider questionable, but which occasionally you might wish to check 2667for; others warn about constructions that are necessary or hard to avoid 2668in some cases, and there is no simple way to modify the code to suppress 2669the warning. 2670 2671@table @gcctabopt 2672@item -Wextra 2673@opindex W 2674@opindex Wextra 2675(This option used to be called @option{-W}. The older name is still 2676supported, but the newer name is more descriptive.) Print extra warning 2677messages for these events: 2678 2679@itemize @bullet 2680@item 2681A function can return either with or without a value. (Falling 2682off the end of the function body is considered returning without 2683a value.) For example, this function would evoke such a 2684warning: 2685 2686@smallexample 2687@group 2688foo (a) 2689@{ 2690 if (a > 0) 2691 return a; 2692@} 2693@end group 2694@end smallexample 2695 2696@item 2697An expression-statement or the left-hand side of a comma expression 2698contains no side effects. 2699To suppress the warning, cast the unused expression to void. 2700For example, an expression such as @samp{x[i,j]} will cause a warning, 2701but @samp{x[(void)i,j]} will not. 2702 2703@item 2704An unsigned value is compared against zero with @samp{<} or @samp{>=}. 2705 2706@item 2707Storage-class specifiers like @code{static} are not the first things in 2708a declaration. According to the C Standard, this usage is obsolescent. 2709 2710@item 2711If @option{-Wall} or @option{-Wunused} is also specified, warn about unused 2712arguments. 2713 2714@item 2715A comparison between signed and unsigned values could produce an 2716incorrect result when the signed value is converted to unsigned. 2717(But don't warn if @option{-Wno-sign-compare} is also specified.) 2718 2719@item 2720An aggregate has an initializer which does not initialize all members. 2721This warning can be independently controlled by 2722@option{-Wmissing-field-initializers}. 2723 2724@item 2725An initialized field without side effects is overridden when using 2726designated initializers (@pxref{Designated Inits, , Designated 2727Initializers}). This warning can be independently controlled by 2728@option{-Woverride-init}. 2729 2730@item 2731A function parameter is declared without a type specifier in K&R-style 2732functions: 2733 2734@smallexample 2735void foo(bar) @{ @} 2736@end smallexample 2737 2738@item 2739An empty body occurs in an @samp{if} or @samp{else} statement. 2740 2741@item 2742A pointer is compared against integer zero with @samp{<}, @samp{<=}, 2743@samp{>}, or @samp{>=}. 2744 2745@item 2746A variable might be changed by @samp{longjmp} or @samp{vfork}. 2747 2748@item @r{(C++ only)} 2749An enumerator and a non-enumerator both appear in a conditional expression. 2750 2751@item @r{(C++ only)} 2752A non-static reference or non-static @samp{const} member appears in a 2753class without constructors. 2754 2755@item @r{(C++ only)} 2756Ambiguous virtual bases. 2757 2758@item @r{(C++ only)} 2759Subscripting an array which has been declared @samp{register}. 2760 2761@item @r{(C++ only)} 2762Taking the address of a variable which has been declared @samp{register}. 2763 2764@item @r{(C++ only)} 2765A base class is not initialized in a derived class' copy constructor. 2766@end itemize 2767 2768@item -Wno-div-by-zero 2769@opindex Wno-div-by-zero 2770@opindex Wdiv-by-zero 2771Do not warn about compile-time integer division by zero. Floating point 2772division by zero is not warned about, as it can be a legitimate way of 2773obtaining infinities and NaNs. 2774 2775@item -Wsystem-headers 2776@opindex Wsystem-headers 2777@cindex warnings from system headers 2778@cindex system headers, warnings from 2779Print warning messages for constructs found in system header files. 2780Warnings from system headers are normally suppressed, on the assumption 2781that they usually do not indicate real problems and would only make the 2782compiler output harder to read. Using this command line option tells 2783GCC to emit warnings from system headers as if they occurred in user 2784code. However, note that using @option{-Wall} in conjunction with this 2785option will @emph{not} warn about unknown pragmas in system 2786headers---for that, @option{-Wunknown-pragmas} must also be used. 2787 2788@item -Wfloat-equal 2789@opindex Wfloat-equal 2790Warn if floating point values are used in equality comparisons. 2791 2792The idea behind this is that sometimes it is convenient (for the 2793programmer) to consider floating-point values as approximations to 2794infinitely precise real numbers. If you are doing this, then you need 2795to compute (by analyzing the code, or in some other way) the maximum or 2796likely maximum error that the computation introduces, and allow for it 2797when performing comparisons (and when producing output, but that's a 2798different problem). In particular, instead of testing for equality, you 2799would check to see whether the two values have ranges that overlap; and 2800this is done with the relational operators, so equality comparisons are 2801probably mistaken. 2802 2803@item -Wtraditional @r{(C only)} 2804@opindex Wtraditional 2805Warn about certain constructs that behave differently in traditional and 2806ISO C@. Also warn about ISO C constructs that have no traditional C 2807equivalent, and/or problematic constructs which should be avoided. 2808 2809@itemize @bullet 2810@item 2811Macro parameters that appear within string literals in the macro body. 2812In traditional C macro replacement takes place within string literals, 2813but does not in ISO C@. 2814 2815@item 2816In traditional C, some preprocessor directives did not exist. 2817Traditional preprocessors would only consider a line to be a directive 2818if the @samp{#} appeared in column 1 on the line. Therefore 2819@option{-Wtraditional} warns about directives that traditional C 2820understands but would ignore because the @samp{#} does not appear as the 2821first character on the line. It also suggests you hide directives like 2822@samp{#pragma} not understood by traditional C by indenting them. Some 2823traditional implementations would not recognize @samp{#elif}, so it 2824suggests avoiding it altogether. 2825 2826@item 2827A function-like macro that appears without arguments. 2828 2829@item 2830The unary plus operator. 2831 2832@item 2833The @samp{U} integer constant suffix, or the @samp{F} or @samp{L} floating point 2834constant suffixes. (Traditional C does support the @samp{L} suffix on integer 2835constants.) Note, these suffixes appear in macros defined in the system 2836headers of most modern systems, e.g.@: the @samp{_MIN}/@samp{_MAX} macros in @code{<limits.h>}. 2837Use of these macros in user code might normally lead to spurious 2838warnings, however GCC's integrated preprocessor has enough context to 2839avoid warning in these cases. 2840 2841@item 2842A function declared external in one block and then used after the end of 2843the block. 2844 2845@item 2846A @code{switch} statement has an operand of type @code{long}. 2847 2848@item 2849A non-@code{static} function declaration follows a @code{static} one. 2850This construct is not accepted by some traditional C compilers. 2851 2852@item 2853The ISO type of an integer constant has a different width or 2854signedness from its traditional type. This warning is only issued if 2855the base of the constant is ten. I.e.@: hexadecimal or octal values, which 2856typically represent bit patterns, are not warned about. 2857 2858@item 2859Usage of ISO string concatenation is detected. 2860 2861@item 2862Initialization of automatic aggregates. 2863 2864@item 2865Identifier conflicts with labels. Traditional C lacks a separate 2866namespace for labels. 2867 2868@item 2869Initialization of unions. If the initializer is zero, the warning is 2870omitted. This is done under the assumption that the zero initializer in 2871user code appears conditioned on e.g.@: @code{__STDC__} to avoid missing 2872initializer warnings and relies on default initialization to zero in the 2873traditional C case. 2874 2875@item 2876Conversions by prototypes between fixed/floating point values and vice 2877versa. The absence of these prototypes when compiling with traditional 2878C would cause serious problems. This is a subset of the possible 2879conversion warnings, for the full set use @option{-Wconversion}. 2880 2881@item 2882Use of ISO C style function definitions. This warning intentionally is 2883@emph{not} issued for prototype declarations or variadic functions 2884because these ISO C features will appear in your code when using 2885libiberty's traditional C compatibility macros, @code{PARAMS} and 2886@code{VPARAMS}. This warning is also bypassed for nested functions 2887because that feature is already a GCC extension and thus not relevant to 2888traditional C compatibility. 2889@end itemize 2890 2891@item -Wdeclaration-after-statement @r{(C only)} 2892@opindex Wdeclaration-after-statement 2893Warn when a declaration is found after a statement in a block. This 2894construct, known from C++, was introduced with ISO C99 and is by default 2895allowed in GCC@. It is not supported by ISO C90 and was not supported by 2896GCC versions before GCC 3.0. @xref{Mixed Declarations}. 2897 2898@item -Wundef 2899@opindex Wundef 2900Warn if an undefined identifier is evaluated in an @samp{#if} directive. 2901 2902@item -Wno-endif-labels 2903@opindex Wno-endif-labels 2904@opindex Wendif-labels 2905Do not warn whenever an @samp{#else} or an @samp{#endif} are followed by text. 2906 2907@item -Wshadow 2908@opindex Wshadow 2909Warn whenever a local variable shadows another local variable, parameter or 2910global variable or whenever a built-in function is shadowed. 2911 2912@item -Wlarger-than-@var{len} 2913@opindex Wlarger-than 2914Warn whenever an object of larger than @var{len} bytes is defined. 2915 2916@item -Wframe-larger-than-@var{len} 2917@opindex Wframe-larger-than 2918Warn whenever the frame size of a function is larger than @var{len} bytes. 2919 2920@item -Wunsafe-loop-optimizations 2921@opindex Wunsafe-loop-optimizations 2922Warn if the loop cannot be optimized because the compiler could not 2923assume anything on the bounds of the loop indices. With 2924@option{-funsafe-loop-optimizations} warn if the compiler made 2925such assumptions. 2926 2927@item -Wpointer-arith 2928@opindex Wpointer-arith 2929Warn about anything that depends on the ``size of'' a function type or 2930of @code{void}. GNU C assigns these types a size of 1, for 2931convenience in calculations with @code{void *} pointers and pointers 2932to functions. 2933 2934@item -Wbad-function-cast @r{(C only)} 2935@opindex Wbad-function-cast 2936Warn whenever a function call is cast to a non-matching type. 2937For example, warn if @code{int malloc()} is cast to @code{anything *}. 2938 2939@item -Wc++-compat 2940Warn about ISO C constructs that are outside of the common subset of 2941ISO C and ISO C++, e.g.@: request for implicit conversion from 2942@code{void *} to a pointer to non-@code{void} type. 2943 2944@item -Wcast-qual 2945@opindex Wcast-qual 2946Warn whenever a pointer is cast so as to remove a type qualifier from 2947the target type. For example, warn if a @code{const char *} is cast 2948to an ordinary @code{char *}. 2949 2950@item -Wcast-align 2951@opindex Wcast-align 2952Warn whenever a pointer is cast such that the required alignment of the 2953target is increased. For example, warn if a @code{char *} is cast to 2954an @code{int *} on machines where integers can only be accessed at 2955two- or four-byte boundaries. 2956 2957@item -Wwrite-strings 2958@opindex Wwrite-strings 2959When compiling C, give string constants the type @code{const 2960char[@var{length}]} so that 2961copying the address of one into a non-@code{const} @code{char *} 2962pointer will get a warning; when compiling C++, warn about the 2963deprecated conversion from string literals to @code{char *}. This 2964warning, by default, is enabled for C++ programs. 2965These warnings will help you find at 2966compile time code that can try to write into a string constant, but 2967only if you have been very careful about using @code{const} in 2968declarations and prototypes. Otherwise, it will just be a nuisance; 2969this is why we did not make @option{-Wall} request these warnings. 2970 2971@item -Wconversion 2972@opindex Wconversion 2973Warn if a prototype causes a type conversion that is different from what 2974would happen to the same argument in the absence of a prototype. This 2975includes conversions of fixed point to floating and vice versa, and 2976conversions changing the width or signedness of a fixed point argument 2977except when the same as the default promotion. 2978 2979Also, warn if a negative integer constant expression is implicitly 2980converted to an unsigned type. For example, warn about the assignment 2981@code{x = -1} if @code{x} is unsigned. But do not warn about explicit 2982casts like @code{(unsigned) -1}. 2983 2984@item -Wsign-compare 2985@opindex Wsign-compare 2986@cindex warning for comparison of signed and unsigned values 2987@cindex comparison of signed and unsigned values, warning 2988@cindex signed and unsigned values, comparison warning 2989Warn when a comparison between signed and unsigned values could produce 2990an incorrect result when the signed value is converted to unsigned. 2991This warning is also enabled by @option{-Wextra}; to get the other warnings 2992of @option{-Wextra} without this warning, use @samp{-Wextra -Wno-sign-compare}. 2993 2994@item -Waddress 2995@opindex Waddress 2996@opindex Wno-address 2997Warn about suspicious uses of memory addresses. These include using 2998the address of a function in a conditional expression, such as 2999@code{void func(void); if (func)}, and comparisons against the memory 3000address of a string literal, such as @code{if (x == "abc")}. Such 3001uses typically indicate a programmer error: the address of a function 3002always evaluates to true, so their use in a conditional usually 3003indicate that the programmer forgot the parentheses in a function 3004call; and comparisons against string literals result in unspecified 3005behavior and are not portable in C, so they usually indicate that the 3006programmer intended to use @code{strcmp}. This warning is enabled by 3007@option{-Wall}. 3008 3009@item -Waggregate-return 3010@opindex Waggregate-return 3011Warn if any functions that return structures or unions are defined or 3012called. (In languages where you can return an array, this also elicits 3013a warning.) 3014 3015@item -Wno-attributes 3016@opindex Wno-attributes 3017@opindex Wattributes 3018Do not warn if an unexpected @code{__attribute__} is used, such as 3019unrecognized attributes, function attributes applied to variables, 3020etc. This will not stop errors for incorrect use of supported 3021attributes. 3022 3023@item -Wstrict-prototypes @r{(C only)} 3024@opindex Wstrict-prototypes 3025Warn if a function is declared or defined without specifying the 3026argument types. (An old-style function definition is permitted without 3027a warning if preceded by a declaration which specifies the argument 3028types.) 3029 3030@item -Wold-style-definition @r{(C only)} 3031@opindex Wold-style-definition 3032Warn if an old-style function definition is used. A warning is given 3033even if there is a previous prototype. 3034 3035@item -Wmissing-prototypes @r{(C only)} 3036@opindex Wmissing-prototypes 3037Warn if a global function is defined without a previous prototype 3038declaration. This warning is issued even if the definition itself 3039provides a prototype. The aim is to detect global functions that fail 3040to be declared in header files. 3041 3042@item -Wmissing-declarations @r{(C only)} 3043@opindex Wmissing-declarations 3044Warn if a global function is defined without a previous declaration. 3045Do so even if the definition itself provides a prototype. 3046Use this option to detect global functions that are not declared in 3047header files. 3048 3049@item -Wmissing-field-initializers 3050@opindex Wmissing-field-initializers 3051@opindex W 3052@opindex Wextra 3053Warn if a structure's initializer has some fields missing. For 3054example, the following code would cause such a warning, because 3055@code{x.h} is implicitly zero: 3056 3057@smallexample 3058struct s @{ int f, g, h; @}; 3059struct s x = @{ 3, 4 @}; 3060@end smallexample 3061 3062This option does not warn about designated initializers, so the following 3063modification would not trigger a warning: 3064 3065@smallexample 3066struct s @{ int f, g, h; @}; 3067struct s x = @{ .f = 3, .g = 4 @}; 3068@end smallexample 3069 3070This warning is included in @option{-Wextra}. To get other @option{-Wextra} 3071warnings without this one, use @samp{-Wextra -Wno-missing-field-initializers}. 3072 3073@item -Wmissing-noreturn 3074@opindex Wmissing-noreturn 3075Warn about functions which might be candidates for attribute @code{noreturn}. 3076Note these are only possible candidates, not absolute ones. Care should 3077be taken to manually verify functions actually do not ever return before 3078adding the @code{noreturn} attribute, otherwise subtle code generation 3079bugs could be introduced. You will not get a warning for @code{main} in 3080hosted C environments. 3081 3082@item -Wmissing-format-attribute 3083@opindex Wmissing-format-attribute 3084@opindex Wformat 3085Warn about function pointers which might be candidates for @code{format} 3086attributes. Note these are only possible candidates, not absolute ones. 3087GCC will guess that function pointers with @code{format} attributes that 3088are used in assignment, initialization, parameter passing or return 3089statements should have a corresponding @code{format} attribute in the 3090resulting type. I.e.@: the left-hand side of the assignment or 3091initialization, the type of the parameter variable, or the return type 3092of the containing function respectively should also have a @code{format} 3093attribute to avoid the warning. 3094 3095GCC will also warn about function definitions which might be 3096candidates for @code{format} attributes. Again, these are only 3097possible candidates. GCC will guess that @code{format} attributes 3098might be appropriate for any function that calls a function like 3099@code{vprintf} or @code{vscanf}, but this might not always be the 3100case, and some functions for which @code{format} attributes are 3101appropriate may not be detected. 3102 3103@item -Wno-multichar 3104@opindex Wno-multichar 3105@opindex Wmultichar 3106Do not warn if a multicharacter constant (@samp{'FOOF'}) is used. 3107Usually they indicate a typo in the user's code, as they have 3108implementation-defined values, and should not be used in portable code. 3109 3110@item -Wnormalized=<none|id|nfc|nfkc> 3111@opindex Wnormalized 3112@cindex NFC 3113@cindex NFKC 3114@cindex character set, input normalization 3115In ISO C and ISO C++, two identifiers are different if they are 3116different sequences of characters. However, sometimes when characters 3117outside the basic ASCII character set are used, you can have two 3118different character sequences that look the same. To avoid confusion, 3119the ISO 10646 standard sets out some @dfn{normalization rules} which 3120when applied ensure that two sequences that look the same are turned into 3121the same sequence. GCC can warn you if you are using identifiers which 3122have not been normalized; this option controls that warning. 3123 3124There are four levels of warning that GCC supports. The default is 3125@option{-Wnormalized=nfc}, which warns about any identifier which is 3126not in the ISO 10646 ``C'' normalized form, @dfn{NFC}. NFC is the 3127recommended form for most uses. 3128 3129Unfortunately, there are some characters which ISO C and ISO C++ allow 3130in identifiers that when turned into NFC aren't allowable as 3131identifiers. That is, there's no way to use these symbols in portable 3132ISO C or C++ and have all your identifiers in NFC. 3133@option{-Wnormalized=id} suppresses the warning for these characters. 3134It is hoped that future versions of the standards involved will correct 3135this, which is why this option is not the default. 3136 3137You can switch the warning off for all characters by writing 3138@option{-Wnormalized=none}. You would only want to do this if you 3139were using some other normalization scheme (like ``D''), because 3140otherwise you can easily create bugs that are literally impossible to see. 3141 3142Some characters in ISO 10646 have distinct meanings but look identical 3143in some fonts or display methodologies, especially once formatting has 3144been applied. For instance @code{\u207F}, ``SUPERSCRIPT LATIN SMALL 3145LETTER N'', will display just like a regular @code{n} which has been 3146placed in a superscript. ISO 10646 defines the @dfn{NFKC} 3147normalization scheme to convert all these into a standard form as 3148well, and GCC will warn if your code is not in NFKC if you use 3149@option{-Wnormalized=nfkc}. This warning is comparable to warning 3150about every identifier that contains the letter O because it might be 3151confused with the digit 0, and so is not the default, but may be 3152useful as a local coding convention if the programming environment is 3153unable to be fixed to display these characters distinctly. 3154 3155@item -Wno-deprecated-declarations 3156@opindex Wno-deprecated-declarations 3157Do not warn about uses of functions (@pxref{Function Attributes}), 3158variables (@pxref{Variable Attributes}), and types (@pxref{Type 3159Attributes}) marked as deprecated by using the @code{deprecated} 3160attribute. 3161 3162@item -Wno-overflow 3163@opindex Wno-overflow 3164Do not warn about compile-time overflow in constant expressions. 3165 3166@item -Woverride-init 3167@opindex Woverride-init 3168@opindex W 3169@opindex Wextra 3170Warn if an initialized field without side effects is overridden when 3171using designated initializers (@pxref{Designated Inits, , Designated 3172Initializers}). 3173 3174This warning is included in @option{-Wextra}. To get other 3175@option{-Wextra} warnings without this one, use @samp{-Wextra 3176-Wno-override-init}. 3177 3178@item -Wpacked 3179@opindex Wpacked 3180Warn if a structure is given the packed attribute, but the packed 3181attribute has no effect on the layout or size of the structure. 3182Such structures may be mis-aligned for little benefit. For 3183instance, in this code, the variable @code{f.x} in @code{struct bar} 3184will be misaligned even though @code{struct bar} does not itself 3185have the packed attribute: 3186 3187@smallexample 3188@group 3189struct foo @{ 3190 int x; 3191 char a, b, c, d; 3192@} __attribute__((packed)); 3193struct bar @{ 3194 char z; 3195 struct foo f; 3196@}; 3197@end group 3198@end smallexample 3199 3200@item -Wpadded 3201@opindex Wpadded 3202Warn if padding is included in a structure, either to align an element 3203of the structure or to align the whole structure. Sometimes when this 3204happens it is possible to rearrange the fields of the structure to 3205reduce the padding and so make the structure smaller. 3206 3207@item -Wredundant-decls 3208@opindex Wredundant-decls 3209Warn if anything is declared more than once in the same scope, even in 3210cases where multiple declaration is valid and changes nothing. 3211 3212@item -Wnested-externs @r{(C only)} 3213@opindex Wnested-externs 3214Warn if an @code{extern} declaration is encountered within a function. 3215 3216@item -Wunreachable-code 3217@opindex Wunreachable-code 3218Warn if the compiler detects that code will never be executed. 3219 3220This option is intended to warn when the compiler detects that at 3221least a whole line of source code will never be executed, because 3222some condition is never satisfied or because it is after a 3223procedure that never returns. 3224 3225It is possible for this option to produce a warning even though there 3226are circumstances under which part of the affected line can be executed, 3227so care should be taken when removing apparently-unreachable code. 3228 3229For instance, when a function is inlined, a warning may mean that the 3230line is unreachable in only one inlined copy of the function. 3231 3232This option is not made part of @option{-Wall} because in a debugging 3233version of a program there is often substantial code which checks 3234correct functioning of the program and is, hopefully, unreachable 3235because the program does work. Another common use of unreachable 3236code is to provide behavior which is selectable at compile-time. 3237 3238@item -Winline 3239@opindex Winline 3240Warn if a function can not be inlined and it was declared as inline. 3241Even with this option, the compiler will not warn about failures to 3242inline functions declared in system headers. 3243 3244The compiler uses a variety of heuristics to determine whether or not 3245to inline a function. For example, the compiler takes into account 3246the size of the function being inlined and the amount of inlining 3247that has already been done in the current function. Therefore, 3248seemingly insignificant changes in the source program can cause the 3249warnings produced by @option{-Winline} to appear or disappear. 3250 3251@item -Wno-invalid-offsetof @r{(C++ only)} 3252@opindex Wno-invalid-offsetof 3253Suppress warnings from applying the @samp{offsetof} macro to a non-POD 3254type. According to the 1998 ISO C++ standard, applying @samp{offsetof} 3255to a non-POD type is undefined. In existing C++ implementations, 3256however, @samp{offsetof} typically gives meaningful results even when 3257applied to certain kinds of non-POD types. (Such as a simple 3258@samp{struct} that fails to be a POD type only by virtue of having a 3259constructor.) This flag is for users who are aware that they are 3260writing nonportable code and who have deliberately chosen to ignore the 3261warning about it. 3262 3263The restrictions on @samp{offsetof} may be relaxed in a future version 3264of the C++ standard. 3265 3266@item -Wno-int-to-pointer-cast @r{(C only)} 3267@opindex Wno-int-to-pointer-cast 3268Suppress warnings from casts to pointer type of an integer of a 3269different size. 3270 3271@item -Wno-pointer-to-int-cast @r{(C only)} 3272@opindex Wno-pointer-to-int-cast 3273Suppress warnings from casts from a pointer to an integer type of a 3274different size. 3275 3276@item -Winvalid-pch 3277@opindex Winvalid-pch 3278Warn if a precompiled header (@pxref{Precompiled Headers}) is found in 3279the search path but can't be used. 3280 3281@item -Wlong-long 3282@opindex Wlong-long 3283@opindex Wno-long-long 3284Warn if @samp{long long} type is used. This is default. To inhibit 3285the warning messages, use @option{-Wno-long-long}. Flags 3286@option{-Wlong-long} and @option{-Wno-long-long} are taken into account 3287only when @option{-pedantic} flag is used. 3288 3289@item -Wvariadic-macros 3290@opindex Wvariadic-macros 3291@opindex Wno-variadic-macros 3292Warn if variadic macros are used in pedantic ISO C90 mode, or the GNU 3293alternate syntax when in pedantic ISO C99 mode. This is default. 3294To inhibit the warning messages, use @option{-Wno-variadic-macros}. 3295 3296@item -Wvla 3297@opindex Wvla 3298@opindex Wno-vla 3299Warn if variable length array is used in the code. 3300@option{-Wno-vla} will prevent the @option{-pedantic} warning of 3301the variable length array. 3302 3303@item -Wvolatile-register-var 3304@opindex Wvolatile-register-var 3305@opindex Wno-volatile-register-var 3306Warn if a register variable is declared volatile. The volatile 3307modifier does not inhibit all optimizations that may eliminate reads 3308and/or writes to register variables. 3309 3310@item -Wdisabled-optimization 3311@opindex Wdisabled-optimization 3312Warn if a requested optimization pass is disabled. This warning does 3313not generally indicate that there is anything wrong with your code; it 3314merely indicates that GCC's optimizers were unable to handle the code 3315effectively. Often, the problem is that your code is too big or too 3316complex; GCC will refuse to optimize programs when the optimization 3317itself is likely to take inordinate amounts of time. 3318 3319@item -Wpointer-sign 3320@opindex Wpointer-sign 3321@opindex Wno-pointer-sign 3322Warn for pointer argument passing or assignment with different signedness. 3323This option is only supported for C. It is implied by @option{-Wall} 3324and by @option{-pedantic}, which can be disabled with 3325@option{-Wno-pointer-sign}. 3326 3327@item -Werror 3328@opindex Werror 3329Make all warnings into errors. 3330 3331@item -Werror= 3332@opindex Werror= 3333Make the specified warning into an errors. The specifier for a 3334warning is appended, for example @option{-Werror=switch} turns the 3335warnings controlled by @option{-Wswitch} into errors. This switch 3336takes a negative form, to be used to negate @option{-Werror} for 3337specific warnings, for example @option{-Wno-error=switch} makes 3338@option{-Wswitch} warnings not be errors, even when @option{-Werror} 3339is in effect. You can use the @option{-fdiagnostics-show-option} 3340option to have each controllable warning amended with the option which 3341controls it, to determine what to use with this option. 3342 3343Note that specifying @option{-Werror=}@var{foo} automatically implies 3344@option{-W}@var{foo}. However, @option{-Wno-error=}@var{foo} does not 3345imply anything. 3346 3347@item -Wstack-protector 3348@opindex Wstack-protector 3349This option is only active when @option{-fstack-protector} is active. It 3350warns about functions that will not be protected against stack smashing. 3351 3352@item -Woverlength-strings 3353@opindex Woverlength-strings 3354Warn about string constants which are longer than the ``minimum 3355maximum'' length specified in the C standard. Modern compilers 3356generally allow string constants which are much longer than the 3357standard's minimum limit, but very portable programs should avoid 3358using longer strings. 3359 3360The limit applies @emph{after} string constant concatenation, and does 3361not count the trailing NUL@. In C89, the limit was 509 characters; in 3362C99, it was raised to 4095. C++98 does not specify a normative 3363minimum maximum, so we do not diagnose overlength strings in C++@. 3364 3365This option is implied by @option{-pedantic}, and can be disabled with 3366@option{-Wno-overlength-strings}. 3367@end table 3368 3369@node Debugging Options 3370@section Options for Debugging Your Program or GCC 3371@cindex options, debugging 3372@cindex debugging information options 3373 3374GCC has various special options that are used for debugging 3375either your program or GCC: 3376 3377@table @gcctabopt 3378@item -g 3379@opindex g 3380Produce debugging information in the operating system's native format 3381(stabs, COFF, XCOFF, or DWARF 2)@. GDB can work with this debugging 3382information. 3383 3384On most systems that use stabs format, @option{-g} enables use of extra 3385debugging information that only GDB can use; this extra information 3386makes debugging work better in GDB but will probably make other debuggers 3387crash or 3388refuse to read the program. If you want to control for certain whether 3389to generate the extra information, use @option{-gstabs+}, @option{-gstabs}, 3390@option{-gxcoff+}, @option{-gxcoff}, or @option{-gvms} (see below). 3391 3392GCC allows you to use @option{-g} with 3393@option{-O}. The shortcuts taken by optimized code may occasionally 3394produce surprising results: some variables you declared may not exist 3395at all; flow of control may briefly move where you did not expect it; 3396some statements may not be executed because they compute constant 3397results or their values were already at hand; some statements may 3398execute in different places because they were moved out of loops. 3399 3400Nevertheless it proves possible to debug optimized output. This makes 3401it reasonable to use the optimizer for programs that might have bugs. 3402 3403The following options are useful when GCC is generated with the 3404capability for more than one debugging format. 3405 3406@item -ggdb 3407@opindex ggdb 3408Produce debugging information for use by GDB@. This means to use the 3409most expressive format available (DWARF 2, stabs, or the native format 3410if neither of those are supported), including GDB extensions if at all 3411possible. 3412 3413@item -gstabs 3414@opindex gstabs 3415Produce debugging information in stabs format (if that is supported), 3416without GDB extensions. This is the format used by DBX on most BSD 3417systems. On MIPS, Alpha and System V Release 4 systems this option 3418produces stabs debugging output which is not understood by DBX or SDB@. 3419On System V Release 4 systems this option requires the GNU assembler. 3420 3421@item -feliminate-unused-debug-symbols 3422@opindex feliminate-unused-debug-symbols 3423Produce debugging information in stabs format (if that is supported), 3424for only symbols that are actually used. 3425 3426@item -femit-class-debug-always 3427Instead of emitting debugging information for a C++ class in only one 3428object file, emit it in all object files using the class. This option 3429should be used only with debuggers that are unable to handle the way GCC 3430normally emits debugging information for classes because using this 3431option will increase the size of debugging information by as much as a 3432factor of two. 3433 3434@item -gstabs+ 3435@opindex gstabs+ 3436Produce debugging information in stabs format (if that is supported), 3437using GNU extensions understood only by the GNU debugger (GDB)@. The 3438use of these extensions is likely to make other debuggers crash or 3439refuse to read the program. 3440 3441@item -gcoff 3442@opindex gcoff 3443Produce debugging information in COFF format (if that is supported). 3444This is the format used by SDB on most System V systems prior to 3445System V Release 4. 3446 3447@item -gxcoff 3448@opindex gxcoff 3449Produce debugging information in XCOFF format (if that is supported). 3450This is the format used by the DBX debugger on IBM RS/6000 systems. 3451 3452@item -gxcoff+ 3453@opindex gxcoff+ 3454Produce debugging information in XCOFF format (if that is supported), 3455using GNU extensions understood only by the GNU debugger (GDB)@. The 3456use of these extensions is likely to make other debuggers crash or 3457refuse to read the program, and may cause assemblers other than the GNU 3458assembler (GAS) to fail with an error. 3459 3460@item -gdwarf-2 3461@opindex gdwarf-2 3462Produce debugging information in DWARF version 2 format (if that is 3463supported). This is the format used by DBX on IRIX 6. With this 3464option, GCC uses features of DWARF version 3 when they are useful; 3465version 3 is upward compatible with version 2, but may still cause 3466problems for older debuggers. 3467 3468@item -gvms 3469@opindex gvms 3470Produce debugging information in VMS debug format (if that is 3471supported). This is the format used by DEBUG on VMS systems. 3472 3473@item -g@var{level} 3474@itemx -ggdb@var{level} 3475@itemx -gstabs@var{level} 3476@itemx -gcoff@var{level} 3477@itemx -gxcoff@var{level} 3478@itemx -gvms@var{level} 3479Request debugging information and also use @var{level} to specify how 3480much information. The default level is 2. 3481 3482Level 1 produces minimal information, enough for making backtraces in 3483parts of the program that you don't plan to debug. This includes 3484descriptions of functions and external variables, but no information 3485about local variables and no line numbers. 3486 3487Level 3 includes extra information, such as all the macro definitions 3488present in the program. Some debuggers support macro expansion when 3489you use @option{-g3}. 3490 3491@option{-gdwarf-2} does not accept a concatenated debug level, because 3492GCC used to support an option @option{-gdwarf} that meant to generate 3493debug information in version 1 of the DWARF format (which is very 3494different from version 2), and it would have been too confusing. That 3495debug format is long obsolete, but the option cannot be changed now. 3496Instead use an additional @option{-g@var{level}} option to change the 3497debug level for DWARF2. 3498 3499@item -feliminate-dwarf2-dups 3500@opindex feliminate-dwarf2-dups 3501Compress DWARF2 debugging information by eliminating duplicated 3502information about each symbol. This option only makes sense when 3503generating DWARF2 debugging information with @option{-gdwarf-2}. 3504 3505@item -femit-struct-debug-baseonly 3506Emit debug information for struct-like types 3507only when the base name of the compilation source file 3508matches the base name of file in which the struct was defined. 3509 3510This option substantially reduces the size of debugging information, 3511but at significant potential loss in type information to the debugger. 3512See @option{-femit-struct-debug-reduced} for a less aggressive option. 3513See @option{-femit-struct-debug-detailed} for more detailed control. 3514 3515This option works only with DWARF 2. 3516 3517@item -femit-struct-debug-reduced 3518Emit debug information for struct-like types 3519only when the base name of the compilation source file 3520matches the base name of file in which the type was defined, 3521unless the struct is a template or defined in a system header. 3522 3523This option significantly reduces the size of debugging information, 3524with some potential loss in type information to the debugger. 3525See @option{-femit-struct-debug-baseonly} for a more aggressive option. 3526See @option{-femit-struct-debug-detailed} for more detailed control. 3527 3528This option works only with DWARF 2. 3529 3530@item -femit-struct-debug-detailed@r{[}=@var{spec-list}@r{]} 3531Specify the struct-like types 3532for which the compiler will generate debug information. 3533The intent is to reduce duplicate struct debug information 3534between different object files within the same program. 3535 3536This option is a detailed version of 3537@option{-femit-struct-debug-reduced} and @option{-femit-struct-debug-baseonly}, 3538which will serve for most needs. 3539 3540A specification has the syntax 3541[@samp{dir:}|@samp{ind:}][@samp{ord:}|@samp{gen:}](@samp{any}|@samp{sys}|@samp{base}|@samp{none}) 3542 3543The optional first word limits the specification to 3544structs that are used directly (@samp{dir:}) or used indirectly (@samp{ind:}). 3545A struct type is used directly when it is the type of a variable, member. 3546Indirect uses arise through pointers to structs. 3547That is, when use of an incomplete struct would be legal, the use is indirect. 3548An example is 3549@samp{struct one direct; struct two * indirect;}. 3550 3551The optional second word limits the specification to 3552ordinary structs (@samp{ord:}) or generic structs (@samp{gen:}). 3553Generic structs are a bit complicated to explain. 3554For C++, these are non-explicit specializations of template classes, 3555or non-template classes within the above. 3556Other programming languages have generics, 3557but @samp{-femit-struct-debug-detailed} does not yet implement them. 3558 3559The third word specifies the source files for those 3560structs for which the compiler will emit debug information. 3561The values @samp{none} and @samp{any} have the normal meaning. 3562The value @samp{base} means that 3563the base of name of the file in which the type declaration appears 3564must match the base of the name of the main compilation file. 3565In practice, this means that 3566types declared in @file{foo.c} and @file{foo.h} will have debug information, 3567but types declared in other header will not. 3568The value @samp{sys} means those types satisfying @samp{base} 3569or declared in system or compiler headers. 3570 3571You may need to experiment to determine the best settings for your application. 3572 3573The default is @samp{-femit-struct-debug-detailed=all}. 3574 3575This option works only with DWARF 2. 3576 3577@cindex @command{prof} 3578@item -p 3579@opindex p 3580Generate extra code to write profile information suitable for the 3581analysis program @command{prof}. You must use this option when compiling 3582the source files you want data about, and you must also use it when 3583linking. 3584 3585@cindex @command{gprof} 3586@item -pg 3587@opindex pg 3588Generate extra code to write profile information suitable for the 3589analysis program @command{gprof}. You must use this option when compiling 3590the source files you want data about, and you must also use it when 3591linking. 3592 3593@item -Q 3594@opindex Q 3595Makes the compiler print out each function name as it is compiled, and 3596print some statistics about each pass when it finishes. 3597 3598@item -ftime-report 3599@opindex ftime-report 3600Makes the compiler print some statistics about the time consumed by each 3601pass when it finishes. 3602 3603@item -fmem-report 3604@opindex fmem-report 3605Makes the compiler print some statistics about permanent memory 3606allocation when it finishes. 3607 3608@item -fprofile-arcs 3609@opindex fprofile-arcs 3610Add code so that program flow @dfn{arcs} are instrumented. During 3611execution the program records how many times each branch and call is 3612executed and how many times it is taken or returns. When the compiled 3613program exits it saves this data to a file called 3614@file{@var{auxname}.gcda} for each source file. The data may be used for 3615profile-directed optimizations (@option{-fbranch-probabilities}), or for 3616test coverage analysis (@option{-ftest-coverage}). Each object file's 3617@var{auxname} is generated from the name of the output file, if 3618explicitly specified and it is not the final executable, otherwise it is 3619the basename of the source file. In both cases any suffix is removed 3620(e.g.@: @file{foo.gcda} for input file @file{dir/foo.c}, or 3621@file{dir/foo.gcda} for output file specified as @option{-o dir/foo.o}). 3622@xref{Cross-profiling}. 3623 3624@cindex @command{gcov} 3625@item --coverage 3626@opindex coverage 3627 3628This option is used to compile and link code instrumented for coverage 3629analysis. The option is a synonym for @option{-fprofile-arcs} 3630@option{-ftest-coverage} (when compiling) and @option{-lgcov} (when 3631linking). See the documentation for those options for more details. 3632 3633@itemize 3634 3635@item 3636Compile the source files with @option{-fprofile-arcs} plus optimization 3637and code generation options. For test coverage analysis, use the 3638additional @option{-ftest-coverage} option. You do not need to profile 3639every source file in a program. 3640 3641@item 3642Link your object files with @option{-lgcov} or @option{-fprofile-arcs} 3643(the latter implies the former). 3644 3645@item 3646Run the program on a representative workload to generate the arc profile 3647information. This may be repeated any number of times. You can run 3648concurrent instances of your program, and provided that the file system 3649supports locking, the data files will be correctly updated. Also 3650@code{fork} calls are detected and correctly handled (double counting 3651will not happen). 3652 3653@item 3654For profile-directed optimizations, compile the source files again with 3655the same optimization and code generation options plus 3656@option{-fbranch-probabilities} (@pxref{Optimize Options,,Options that 3657Control Optimization}). 3658 3659@item 3660For test coverage analysis, use @command{gcov} to produce human readable 3661information from the @file{.gcno} and @file{.gcda} files. Refer to the 3662@command{gcov} documentation for further information. 3663 3664@end itemize 3665 3666With @option{-fprofile-arcs}, for each function of your program GCC 3667creates a program flow graph, then finds a spanning tree for the graph. 3668Only arcs that are not on the spanning tree have to be instrumented: the 3669compiler adds code to count the number of times that these arcs are 3670executed. When an arc is the only exit or only entrance to a block, the 3671instrumentation code can be added to the block; otherwise, a new basic 3672block must be created to hold the instrumentation code. 3673 3674@need 2000 3675@item -ftest-coverage 3676@opindex ftest-coverage 3677Produce a notes file that the @command{gcov} code-coverage utility 3678(@pxref{Gcov,, @command{gcov}---a Test Coverage Program}) can use to 3679show program coverage. Each source file's note file is called 3680@file{@var{auxname}.gcno}. Refer to the @option{-fprofile-arcs} option 3681above for a description of @var{auxname} and instructions on how to 3682generate test coverage data. Coverage data will match the source files 3683more closely, if you do not optimize. 3684 3685@item -d@var{letters} 3686@item -fdump-rtl-@var{pass} 3687@opindex d 3688Says to make debugging dumps during compilation at times specified by 3689@var{letters}. This is used for debugging the RTL-based passes of the 3690compiler. The file names for most of the dumps are made by appending a 3691pass number and a word to the @var{dumpname}. @var{dumpname} is generated 3692from the name of the output file, if explicitly specified and it is not 3693an executable, otherwise it is the basename of the source file. These 3694switches may have different effects when @option{-E} is used for 3695preprocessing. 3696 3697Most debug dumps can be enabled either passing a letter to the @option{-d} 3698option, or with a long @option{-fdump-rtl} switch; here are the possible 3699letters for use in @var{letters} and @var{pass}, and their meanings: 3700 3701@table @gcctabopt 3702@item -dA 3703@opindex dA 3704Annotate the assembler output with miscellaneous debugging information. 3705 3706@item -dB 3707@itemx -fdump-rtl-bbro 3708@opindex dB 3709@opindex fdump-rtl-bbro 3710Dump after block reordering, to @file{@var{file}.148r.bbro}. 3711 3712@item -dc 3713@itemx -fdump-rtl-combine 3714@opindex dc 3715@opindex fdump-rtl-combine 3716Dump after instruction combination, to the file @file{@var{file}.129r.combine}. 3717 3718@item -dC 3719@itemx -fdump-rtl-ce1 3720@itemx -fdump-rtl-ce2 3721@opindex dC 3722@opindex fdump-rtl-ce1 3723@opindex fdump-rtl-ce2 3724@option{-dC} and @option{-fdump-rtl-ce1} enable dumping after the 3725first if conversion, to the file @file{@var{file}.117r.ce1}. @option{-dC} 3726and @option{-fdump-rtl-ce2} enable dumping after the second if 3727conversion, to the file @file{@var{file}.130r.ce2}. 3728 3729@item -dd 3730@itemx -fdump-rtl-btl 3731@itemx -fdump-rtl-dbr 3732@opindex dd 3733@opindex fdump-rtl-btl 3734@opindex fdump-rtl-dbr 3735@option{-dd} and @option{-fdump-rtl-btl} enable dumping after branch 3736target load optimization, to @file{@var{file}.31.btl}. @option{-dd} 3737and @option{-fdump-rtl-dbr} enable dumping after delayed branch 3738scheduling, to @file{@var{file}.36.dbr}. 3739 3740@item -dD 3741@opindex dD 3742Dump all macro definitions, at the end of preprocessing, in addition to 3743normal output. 3744 3745@item -dE 3746@itemx -fdump-rtl-ce3 3747@opindex dE 3748@opindex fdump-rtl-ce3 3749Dump after the third if conversion, to @file{@var{file}.146r.ce3}. 3750 3751@item -df 3752@itemx -fdump-rtl-cfg 3753@itemx -fdump-rtl-life 3754@opindex df 3755@opindex fdump-rtl-cfg 3756@opindex fdump-rtl-life 3757@option{-df} and @option{-fdump-rtl-cfg} enable dumping after control 3758and data flow analysis, to @file{@var{file}.116r.cfg}. @option{-df} 3759and @option{-fdump-rtl-cfg} enable dumping dump after life analysis, 3760to @file{@var{file}.128r.life1} and @file{@var{file}.135r.life2}. 3761 3762@item -dg 3763@itemx -fdump-rtl-greg 3764@opindex dg 3765@opindex fdump-rtl-greg 3766Dump after global register allocation, to @file{@var{file}.139r.greg}. 3767 3768@item -dG 3769@itemx -fdump-rtl-gcse 3770@itemx -fdump-rtl-bypass 3771@opindex dG 3772@opindex fdump-rtl-gcse 3773@opindex fdump-rtl-bypass 3774@option{-dG} and @option{-fdump-rtl-gcse} enable dumping after GCSE, to 3775@file{@var{file}.114r.gcse}. @option{-dG} and @option{-fdump-rtl-bypass} 3776enable dumping after jump bypassing and control flow optimizations, to 3777@file{@var{file}.115r.bypass}. 3778 3779@item -dh 3780@itemx -fdump-rtl-eh 3781@opindex dh 3782@opindex fdump-rtl-eh 3783Dump after finalization of EH handling code, to @file{@var{file}.02.eh}. 3784 3785@item -di 3786@itemx -fdump-rtl-sibling 3787@opindex di 3788@opindex fdump-rtl-sibling 3789Dump after sibling call optimizations, to @file{@var{file}.106r.sibling}. 3790 3791@item -dj 3792@itemx -fdump-rtl-jump 3793@opindex dj 3794@opindex fdump-rtl-jump 3795Dump after the first jump optimization, to @file{@var{file}.112r.jump}. 3796 3797@item -dk 3798@itemx -fdump-rtl-stack 3799@opindex dk 3800@opindex fdump-rtl-stack 3801Dump after conversion from registers to stack, to @file{@var{file}.152r.stack}. 3802 3803@item -dl 3804@itemx -fdump-rtl-lreg 3805@opindex dl 3806@opindex fdump-rtl-lreg 3807Dump after local register allocation, to @file{@var{file}.138r.lreg}. 3808 3809@item -dL 3810@itemx -fdump-rtl-loop2 3811@opindex dL 3812@opindex fdump-rtl-loop2 3813@option{-dL} and @option{-fdump-rtl-loop2} enable dumping after the 3814loop optimization pass, to @file{@var{file}.119r.loop2}, 3815@file{@var{file}.120r.loop2_init}, 3816@file{@var{file}.121r.loop2_invariant}, and 3817@file{@var{file}.125r.loop2_done}. 3818 3819@item -dm 3820@itemx -fdump-rtl-sms 3821@opindex dm 3822@opindex fdump-rtl-sms 3823Dump after modulo scheduling, to @file{@var{file}.136r.sms}. 3824 3825@item -dM 3826@itemx -fdump-rtl-mach 3827@opindex dM 3828@opindex fdump-rtl-mach 3829Dump after performing the machine dependent reorganization pass, to 3830@file{@var{file}.155r.mach} if that pass exists. 3831 3832@item -dn 3833@itemx -fdump-rtl-rnreg 3834@opindex dn 3835@opindex fdump-rtl-rnreg 3836Dump after register renumbering, to @file{@var{file}.147r.rnreg}. 3837 3838@item -dN 3839@itemx -fdump-rtl-regmove 3840@opindex dN 3841@opindex fdump-rtl-regmove 3842Dump after the register move pass, to @file{@var{file}.132r.regmove}. 3843 3844@item -do 3845@itemx -fdump-rtl-postreload 3846@opindex do 3847@opindex fdump-rtl-postreload 3848Dump after post-reload optimizations, to @file{@var{file}.24.postreload}. 3849 3850@item -dr 3851@itemx -fdump-rtl-expand 3852@opindex dr 3853@opindex fdump-rtl-expand 3854Dump after RTL generation, to @file{@var{file}.104r.expand}. 3855 3856@item -dR 3857@itemx -fdump-rtl-sched2 3858@opindex dR 3859@opindex fdump-rtl-sched2 3860Dump after the second scheduling pass, to @file{@var{file}.150r.sched2}. 3861 3862@item -ds 3863@itemx -fdump-rtl-cse 3864@opindex ds 3865@opindex fdump-rtl-cse 3866Dump after CSE (including the jump optimization that sometimes follows 3867CSE), to @file{@var{file}.113r.cse}. 3868 3869@item -dS 3870@itemx -fdump-rtl-sched 3871@opindex dS 3872@opindex fdump-rtl-sched 3873Dump after the first scheduling pass, to @file{@var{file}.21.sched}. 3874 3875@item -dt 3876@itemx -fdump-rtl-cse2 3877@opindex dt 3878@opindex fdump-rtl-cse2 3879Dump after the second CSE pass (including the jump optimization that 3880sometimes follows CSE), to @file{@var{file}.127r.cse2}. 3881 3882@item -dT 3883@itemx -fdump-rtl-tracer 3884@opindex dT 3885@opindex fdump-rtl-tracer 3886Dump after running tracer, to @file{@var{file}.118r.tracer}. 3887 3888@item -dV 3889@itemx -fdump-rtl-vpt 3890@itemx -fdump-rtl-vartrack 3891@opindex dV 3892@opindex fdump-rtl-vpt 3893@opindex fdump-rtl-vartrack 3894@option{-dV} and @option{-fdump-rtl-vpt} enable dumping after the value 3895profile transformations, to @file{@var{file}.10.vpt}. @option{-dV} 3896and @option{-fdump-rtl-vartrack} enable dumping after variable tracking, 3897to @file{@var{file}.154r.vartrack}. 3898 3899@item -dw 3900@itemx -fdump-rtl-flow2 3901@opindex dw 3902@opindex fdump-rtl-flow2 3903Dump after the second flow pass, to @file{@var{file}.142r.flow2}. 3904 3905@item -dz 3906@itemx -fdump-rtl-peephole2 3907@opindex dz 3908@opindex fdump-rtl-peephole2 3909Dump after the peephole pass, to @file{@var{file}.145r.peephole2}. 3910 3911@item -dZ 3912@itemx -fdump-rtl-web 3913@opindex dZ 3914@opindex fdump-rtl-web 3915Dump after live range splitting, to @file{@var{file}.126r.web}. 3916 3917@item -da 3918@itemx -fdump-rtl-all 3919@opindex da 3920@opindex fdump-rtl-all 3921Produce all the dumps listed above. 3922 3923@item -dH 3924@opindex dH 3925Produce a core dump whenever an error occurs. 3926 3927@item -dm 3928@opindex dm 3929Print statistics on memory usage, at the end of the run, to 3930standard error. 3931 3932@item -dp 3933@opindex dp 3934Annotate the assembler output with a comment indicating which 3935pattern and alternative was used. The length of each instruction is 3936also printed. 3937 3938@item -dP 3939@opindex dP 3940Dump the RTL in the assembler output as a comment before each instruction. 3941Also turns on @option{-dp} annotation. 3942 3943@item -dv 3944@opindex dv 3945For each of the other indicated dump files (either with @option{-d} or 3946@option{-fdump-rtl-@var{pass}}), dump a representation of the control flow 3947graph suitable for viewing with VCG to @file{@var{file}.@var{pass}.vcg}. 3948 3949@item -dx 3950@opindex dx 3951Just generate RTL for a function instead of compiling it. Usually used 3952with @samp{r} (@option{-fdump-rtl-expand}). 3953 3954@item -dy 3955@opindex dy 3956Dump debugging information during parsing, to standard error. 3957@end table 3958 3959@item -fdump-noaddr 3960@opindex fdump-noaddr 3961When doing debugging dumps (see @option{-d} option above), suppress 3962address output. This makes it more feasible to use diff on debugging 3963dumps for compiler invocations with different compiler binaries and/or 3964different text / bss / data / heap / stack / dso start locations. 3965 3966@item -fdump-unnumbered 3967@opindex fdump-unnumbered 3968When doing debugging dumps (see @option{-d} option above), suppress instruction 3969numbers, line number note and address output. This makes it more feasible to 3970use diff on debugging dumps for compiler invocations with different 3971options, in particular with and without @option{-g}. 3972 3973@item -fdump-translation-unit @r{(C++ only)} 3974@itemx -fdump-translation-unit-@var{options} @r{(C++ only)} 3975@opindex fdump-translation-unit 3976Dump a representation of the tree structure for the entire translation 3977unit to a file. The file name is made by appending @file{.tu} to the 3978source file name. If the @samp{-@var{options}} form is used, @var{options} 3979controls the details of the dump as described for the 3980@option{-fdump-tree} options. 3981 3982@item -fdump-class-hierarchy @r{(C++ only)} 3983@itemx -fdump-class-hierarchy-@var{options} @r{(C++ only)} 3984@opindex fdump-class-hierarchy 3985Dump a representation of each class's hierarchy and virtual function 3986table layout to a file. The file name is made by appending @file{.class} 3987to the source file name. If the @samp{-@var{options}} form is used, 3988@var{options} controls the details of the dump as described for the 3989@option{-fdump-tree} options. 3990 3991@item -fdump-ipa-@var{switch} 3992@opindex fdump-ipa 3993Control the dumping at various stages of inter-procedural analysis 3994language tree to a file. The file name is generated by appending a switch 3995specific suffix to the source file name. The following dumps are possible: 3996 3997@table @samp 3998@item all 3999Enables all inter-procedural analysis dumps; currently the only produced 4000dump is the @samp{cgraph} dump. 4001 4002@item cgraph 4003Dumps information about call-graph optimization, unused function removal, 4004and inlining decisions. 4005@end table 4006 4007@item -fdump-tree-@var{switch} 4008@itemx -fdump-tree-@var{switch}-@var{options} 4009@opindex fdump-tree 4010Control the dumping at various stages of processing the intermediate 4011language tree to a file. The file name is generated by appending a switch 4012specific suffix to the source file name. If the @samp{-@var{options}} 4013form is used, @var{options} is a list of @samp{-} separated options that 4014control the details of the dump. Not all options are applicable to all 4015dumps, those which are not meaningful will be ignored. The following 4016options are available 4017 4018@table @samp 4019@item address 4020Print the address of each node. Usually this is not meaningful as it 4021changes according to the environment and source file. Its primary use 4022is for tying up a dump file with a debug environment. 4023@item slim 4024Inhibit dumping of members of a scope or body of a function merely 4025because that scope has been reached. Only dump such items when they 4026are directly reachable by some other path. When dumping pretty-printed 4027trees, this option inhibits dumping the bodies of control structures. 4028@item raw 4029Print a raw representation of the tree. By default, trees are 4030pretty-printed into a C-like representation. 4031@item details 4032Enable more detailed dumps (not honored by every dump option). 4033@item stats 4034Enable dumping various statistics about the pass (not honored by every dump 4035option). 4036@item blocks 4037Enable showing basic block boundaries (disabled in raw dumps). 4038@item vops 4039Enable showing virtual operands for every statement. 4040@item lineno 4041Enable showing line numbers for statements. 4042@item uid 4043Enable showing the unique ID (@code{DECL_UID}) for each variable. 4044@item all 4045Turn on all options, except @option{raw}, @option{slim} and @option{lineno}. 4046@end table 4047 4048The following tree dumps are possible: 4049@table @samp 4050 4051@item original 4052Dump before any tree based optimization, to @file{@var{file}.original}. 4053 4054@item optimized 4055Dump after all tree based optimization, to @file{@var{file}.optimized}. 4056 4057@item inlined 4058Dump after function inlining, to @file{@var{file}.inlined}. 4059 4060@item gimple 4061@opindex fdump-tree-gimple 4062Dump each function before and after the gimplification pass to a file. The 4063file name is made by appending @file{.gimple} to the source file name. 4064 4065@item cfg 4066@opindex fdump-tree-cfg 4067Dump the control flow graph of each function to a file. The file name is 4068made by appending @file{.cfg} to the source file name. 4069 4070@item vcg 4071@opindex fdump-tree-vcg 4072Dump the control flow graph of each function to a file in VCG format. The 4073file name is made by appending @file{.vcg} to the source file name. Note 4074that if the file contains more than one function, the generated file cannot 4075be used directly by VCG@. You will need to cut and paste each function's 4076graph into its own separate file first. 4077 4078@item ch 4079@opindex fdump-tree-ch 4080Dump each function after copying loop headers. The file name is made by 4081appending @file{.ch} to the source file name. 4082 4083@item ssa 4084@opindex fdump-tree-ssa 4085Dump SSA related information to a file. The file name is made by appending 4086@file{.ssa} to the source file name. 4087 4088@item salias 4089@opindex fdump-tree-salias 4090Dump structure aliasing variable information to a file. This file name 4091is made by appending @file{.salias} to the source file name. 4092 4093@item alias 4094@opindex fdump-tree-alias 4095Dump aliasing information for each function. The file name is made by 4096appending @file{.alias} to the source file name. 4097 4098@item ccp 4099@opindex fdump-tree-ccp 4100Dump each function after CCP@. The file name is made by appending 4101@file{.ccp} to the source file name. 4102 4103@item storeccp 4104@opindex fdump-tree-storeccp 4105Dump each function after STORE-CCP. The file name is made by appending 4106@file{.storeccp} to the source file name. 4107 4108@item pre 4109@opindex fdump-tree-pre 4110Dump trees after partial redundancy elimination. The file name is made 4111by appending @file{.pre} to the source file name. 4112 4113@item fre 4114@opindex fdump-tree-fre 4115Dump trees after full redundancy elimination. The file name is made 4116by appending @file{.fre} to the source file name. 4117 4118@item copyprop 4119@opindex fdump-tree-copyprop 4120Dump trees after copy propagation. The file name is made 4121by appending @file{.copyprop} to the source file name. 4122 4123@item store_copyprop 4124@opindex fdump-tree-store_copyprop 4125Dump trees after store copy-propagation. The file name is made 4126by appending @file{.store_copyprop} to the source file name. 4127 4128@item dce 4129@opindex fdump-tree-dce 4130Dump each function after dead code elimination. The file name is made by 4131appending @file{.dce} to the source file name. 4132 4133@item mudflap 4134@opindex fdump-tree-mudflap 4135Dump each function after adding mudflap instrumentation. The file name is 4136made by appending @file{.mudflap} to the source file name. 4137 4138@item sra 4139@opindex fdump-tree-sra 4140Dump each function after performing scalar replacement of aggregates. The 4141file name is made by appending @file{.sra} to the source file name. 4142 4143@item sink 4144@opindex fdump-tree-sink 4145Dump each function after performing code sinking. The file name is made 4146by appending @file{.sink} to the source file name. 4147 4148@item dom 4149@opindex fdump-tree-dom 4150Dump each function after applying dominator tree optimizations. The file 4151name is made by appending @file{.dom} to the source file name. 4152 4153@item dse 4154@opindex fdump-tree-dse 4155Dump each function after applying dead store elimination. The file 4156name is made by appending @file{.dse} to the source file name. 4157 4158@item phiopt 4159@opindex fdump-tree-phiopt 4160Dump each function after optimizing PHI nodes into straightline code. The file 4161name is made by appending @file{.phiopt} to the source file name. 4162 4163@item forwprop 4164@opindex fdump-tree-forwprop 4165Dump each function after forward propagating single use variables. The file 4166name is made by appending @file{.forwprop} to the source file name. 4167 4168@item copyrename 4169@opindex fdump-tree-copyrename 4170Dump each function after applying the copy rename optimization. The file 4171name is made by appending @file{.copyrename} to the source file name. 4172 4173@item nrv 4174@opindex fdump-tree-nrv 4175Dump each function after applying the named return value optimization on 4176generic trees. The file name is made by appending @file{.nrv} to the source 4177file name. 4178 4179@item vect 4180@opindex fdump-tree-vect 4181Dump each function after applying vectorization of loops. The file name is 4182made by appending @file{.vect} to the source file name. 4183 4184@item vrp 4185@opindex fdump-tree-vrp 4186Dump each function after Value Range Propagation (VRP). The file name 4187is made by appending @file{.vrp} to the source file name. 4188 4189@item all 4190@opindex fdump-tree-all 4191Enable all the available tree dumps with the flags provided in this option. 4192@end table 4193 4194@item -ftree-vectorizer-verbose=@var{n} 4195@opindex ftree-vectorizer-verbose 4196This option controls the amount of debugging output the vectorizer prints. 4197This information is written to standard error, unless 4198@option{-fdump-tree-all} or @option{-fdump-tree-vect} is specified, 4199in which case it is output to the usual dump listing file, @file{.vect}. 4200For @var{n}=0 no diagnostic information is reported. 4201If @var{n}=1 the vectorizer reports each loop that got vectorized, 4202and the total number of loops that got vectorized. 4203If @var{n}=2 the vectorizer also reports non-vectorized loops that passed 4204the first analysis phase (vect_analyze_loop_form) - i.e. countable, 4205inner-most, single-bb, single-entry/exit loops. This is the same verbosity 4206level that @option{-fdump-tree-vect-stats} uses. 4207Higher verbosity levels mean either more information dumped for each 4208reported loop, or same amount of information reported for more loops: 4209If @var{n}=3, alignment related information is added to the reports. 4210If @var{n}=4, data-references related information (e.g. memory dependences, 4211memory access-patterns) is added to the reports. 4212If @var{n}=5, the vectorizer reports also non-vectorized inner-most loops 4213that did not pass the first analysis phase (i.e. may not be countable, or 4214may have complicated control-flow). 4215If @var{n}=6, the vectorizer reports also non-vectorized nested loops. 4216For @var{n}=7, all the information the vectorizer generates during its 4217analysis and transformation is reported. This is the same verbosity level 4218that @option{-fdump-tree-vect-details} uses. 4219 4220@item -frandom-seed=@var{string} 4221@opindex frandom-string 4222This option provides a seed that GCC uses when it would otherwise use 4223random numbers. It is used to generate certain symbol names 4224that have to be different in every compiled file. It is also used to 4225place unique stamps in coverage data files and the object files that 4226produce them. You can use the @option{-frandom-seed} option to produce 4227reproducibly identical object files. 4228 4229The @var{string} should be different for every file you compile. 4230 4231@item -fsched-verbose=@var{n} 4232@opindex fsched-verbose 4233On targets that use instruction scheduling, this option controls the 4234amount of debugging output the scheduler prints. This information is 4235written to standard error, unless @option{-dS} or @option{-dR} is 4236specified, in which case it is output to the usual dump 4237listing file, @file{.sched} or @file{.sched2} respectively. However 4238for @var{n} greater than nine, the output is always printed to standard 4239error. 4240 4241For @var{n} greater than zero, @option{-fsched-verbose} outputs the 4242same information as @option{-dRS}. For @var{n} greater than one, it 4243also output basic block probabilities, detailed ready list information 4244and unit/insn info. For @var{n} greater than two, it includes RTL 4245at abort point, control-flow and regions info. And for @var{n} over 4246four, @option{-fsched-verbose} also includes dependence info. 4247 4248@item -save-temps 4249@opindex save-temps 4250Store the usual ``temporary'' intermediate files permanently; place them 4251in the current directory and name them based on the source file. Thus, 4252compiling @file{foo.c} with @samp{-c -save-temps} would produce files 4253@file{foo.i} and @file{foo.s}, as well as @file{foo.o}. This creates a 4254preprocessed @file{foo.i} output file even though the compiler now 4255normally uses an integrated preprocessor. 4256 4257When used in combination with the @option{-x} command line option, 4258@option{-save-temps} is sensible enough to avoid over writing an 4259input source file with the same extension as an intermediate file. 4260The corresponding intermediate file may be obtained by renaming the 4261source file before using @option{-save-temps}. 4262 4263@item -time 4264@opindex time 4265Report the CPU time taken by each subprocess in the compilation 4266sequence. For C source files, this is the compiler proper and assembler 4267(plus the linker if linking is done). The output looks like this: 4268 4269@smallexample 4270# cc1 0.12 0.01 4271# as 0.00 0.01 4272@end smallexample 4273 4274The first number on each line is the ``user time'', that is time spent 4275executing the program itself. The second number is ``system time'', 4276time spent executing operating system routines on behalf of the program. 4277Both numbers are in seconds. 4278 4279@item -fvar-tracking 4280@opindex fvar-tracking 4281Run variable tracking pass. It computes where variables are stored at each 4282position in code. Better debugging information is then generated 4283(if the debugging information format supports this information). 4284 4285It is enabled by default when compiling with optimization (@option{-Os}, 4286@option{-O}, @option{-O2}, ...), debugging information (@option{-g}) and 4287the debug info format supports it. 4288 4289@item -print-file-name=@var{library} 4290@opindex print-file-name 4291Print the full absolute name of the library file @var{library} that 4292would be used when linking---and don't do anything else. With this 4293option, GCC does not compile or link anything; it just prints the 4294file name. 4295 4296@item -print-multi-directory 4297@opindex print-multi-directory 4298Print the directory name corresponding to the multilib selected by any 4299other switches present in the command line. This directory is supposed 4300to exist in @env{GCC_EXEC_PREFIX}. 4301 4302@item -print-multi-lib 4303@opindex print-multi-lib 4304Print the mapping from multilib directory names to compiler switches 4305that enable them. The directory name is separated from the switches by 4306@samp{;}, and each switch starts with an @samp{@@} instead of the 4307@samp{-}, without spaces between multiple switches. This is supposed to 4308ease shell-processing. 4309 4310@item -print-prog-name=@var{program} 4311@opindex print-prog-name 4312Like @option{-print-file-name}, but searches for a program such as @samp{cpp}. 4313 4314@item -print-libgcc-file-name 4315@opindex print-libgcc-file-name 4316Same as @option{-print-file-name=libgcc.a}. 4317 4318This is useful when you use @option{-nostdlib} or @option{-nodefaultlibs} 4319but you do want to link with @file{libgcc.a}. You can do 4320 4321@smallexample 4322gcc -nostdlib @var{files}@dots{} `gcc -print-libgcc-file-name` 4323@end smallexample 4324 4325@item -print-search-dirs 4326@opindex print-search-dirs 4327Print the name of the configured installation directory and a list of 4328program and library directories @command{gcc} will search---and don't do anything else. 4329 4330This is useful when @command{gcc} prints the error message 4331@samp{installation problem, cannot exec cpp0: No such file or directory}. 4332To resolve this you either need to put @file{cpp0} and the other compiler 4333components where @command{gcc} expects to find them, or you can set the environment 4334variable @env{GCC_EXEC_PREFIX} to the directory where you installed them. 4335Don't forget the trailing @samp{/}. 4336@xref{Environment Variables}. 4337 4338@item -dumpmachine 4339@opindex dumpmachine 4340Print the compiler's target machine (for example, 4341@samp{i686-pc-linux-gnu})---and don't do anything else. 4342 4343@item -dumpversion 4344@opindex dumpversion 4345Print the compiler version (for example, @samp{3.0})---and don't do 4346anything else. 4347 4348@item -dumpspecs 4349@opindex dumpspecs 4350Print the compiler's built-in specs---and don't do anything else. (This 4351is used when GCC itself is being built.) @xref{Spec Files}. 4352 4353@item -feliminate-unused-debug-types 4354@opindex feliminate-unused-debug-types 4355Normally, when producing DWARF2 output, GCC will emit debugging 4356information for all types declared in a compilation 4357unit, regardless of whether or not they are actually used 4358in that compilation unit. Sometimes this is useful, such as 4359if, in the debugger, you want to cast a value to a type that is 4360not actually used in your program (but is declared). More often, 4361however, this results in a significant amount of wasted space. 4362With this option, GCC will avoid producing debug symbol output 4363for types that are nowhere used in the source file being compiled. 4364@end table 4365 4366@node Optimize Options 4367@section Options That Control Optimization 4368@cindex optimize options 4369@cindex options, optimization 4370 4371These options control various sorts of optimizations. 4372 4373Without any optimization option, the compiler's goal is to reduce the 4374cost of compilation and to make debugging produce the expected 4375results. Statements are independent: if you stop the program with a 4376breakpoint between statements, you can then assign a new value to any 4377variable or change the program counter to any other statement in the 4378function and get exactly the results you would expect from the source 4379code. 4380 4381Turning on optimization flags makes the compiler attempt to improve 4382the performance and/or code size at the expense of compilation time 4383and possibly the ability to debug the program. 4384 4385The compiler performs optimization based on the knowledge it has of 4386the program. Optimization levels @option{-O} and above, in 4387particular, enable @emph{unit-at-a-time} mode, which allows the 4388compiler to consider information gained from later functions in 4389the file when compiling a function. Compiling multiple files at 4390once to a single output file in @emph{unit-at-a-time} mode allows 4391the compiler to use information gained from all of the files when 4392compiling each of them. 4393 4394Not all optimizations are controlled directly by a flag. Only 4395optimizations that have a flag are listed. 4396 4397@table @gcctabopt 4398@item -O 4399@itemx -O1 4400@opindex O 4401@opindex O1 4402Optimize. Optimizing compilation takes somewhat more time, and a lot 4403more memory for a large function. 4404 4405With @option{-O}, the compiler tries to reduce code size and execution 4406time, without performing any optimizations that take a great deal of 4407compilation time. 4408 4409@option{-O} turns on the following optimization flags: 4410@gccoptlist{-fdefer-pop @gol 4411-fdelayed-branch @gol 4412-fguess-branch-probability @gol 4413-fcprop-registers @gol 4414-fif-conversion @gol 4415-fif-conversion2 @gol 4416-ftree-ccp @gol 4417-ftree-dce @gol 4418-ftree-dominator-opts @gol 4419-ftree-dse @gol 4420-ftree-ter @gol 4421-ftree-lrs @gol 4422-ftree-sra @gol 4423-ftree-copyrename @gol 4424-ftree-fre @gol 4425-ftree-ch @gol 4426-funit-at-a-time @gol 4427-fmerge-constants} 4428 4429@option{-O} also turns on @option{-fomit-frame-pointer} on machines 4430where doing so does not interfere with debugging. 4431 4432@item -O2 4433@opindex O2 4434Optimize even more. GCC performs nearly all supported optimizations 4435that do not involve a space-speed tradeoff. The compiler does not 4436perform loop unrolling or function inlining when you specify @option{-O2}. 4437As compared to @option{-O}, this option increases both compilation time 4438and the performance of the generated code. 4439 4440@option{-O2} turns on all optimization flags specified by @option{-O}. It 4441also turns on the following optimization flags: 4442@gccoptlist{-fthread-jumps @gol 4443-fcrossjumping @gol 4444-foptimize-sibling-calls @gol 4445-fcse-follow-jumps -fcse-skip-blocks @gol 4446-fgcse -fgcse-lm @gol 4447-fexpensive-optimizations @gol 4448-frerun-cse-after-loop @gol 4449-fcaller-saves @gol 4450-fpeephole2 @gol 4451-fschedule-insns -fschedule-insns2 @gol 4452-fsched-interblock -fsched-spec @gol 4453-fregmove @gol 4454-fstrict-aliasing -fstrict-overflow @gol 4455-fdelete-null-pointer-checks @gol 4456-freorder-blocks -freorder-functions @gol 4457-falign-functions -falign-jumps @gol 4458-falign-loops -falign-labels @gol 4459-ftree-vrp @gol 4460-ftree-pre} 4461 4462Please note the warning under @option{-fgcse} about 4463invoking @option{-O2} on programs that use computed gotos. 4464 4465@option{-O2} doesn't turn on @option{-ftree-vrp} for the Ada compiler. 4466This option must be explicitly specified on the command line to be 4467enabled for the Ada compiler. 4468 4469@item -O3 4470@opindex O3 4471Optimize yet more. @option{-O3} turns on all optimizations specified by 4472@option{-O2} and also turns on the @option{-finline-functions}, 4473@option{-funswitch-loops} and @option{-fgcse-after-reload} options. 4474 4475@item -O0 4476@opindex O0 4477Do not optimize. This is the default. 4478 4479@item -Os 4480@opindex Os 4481Optimize for size. @option{-Os} enables all @option{-O2} optimizations that 4482do not typically increase code size. It also performs further 4483optimizations designed to reduce code size. 4484 4485@option{-Os} disables the following optimization flags: 4486@gccoptlist{-falign-functions -falign-jumps -falign-loops @gol 4487-falign-labels -freorder-blocks -freorder-blocks-and-partition @gol 4488-fprefetch-loop-arrays -ftree-vect-loop-version} 4489 4490If you use multiple @option{-O} options, with or without level numbers, 4491the last such option is the one that is effective. 4492@end table 4493 4494Options of the form @option{-f@var{flag}} specify machine-independent 4495flags. Most flags have both positive and negative forms; the negative 4496form of @option{-ffoo} would be @option{-fno-foo}. In the table 4497below, only one of the forms is listed---the one you typically will 4498use. You can figure out the other form by either removing @samp{no-} 4499or adding it. 4500 4501The following options control specific optimizations. They are either 4502activated by @option{-O} options or are related to ones that are. You 4503can use the following flags in the rare cases when ``fine-tuning'' of 4504optimizations to be performed is desired. 4505 4506@table @gcctabopt 4507@item -fno-default-inline 4508@opindex fno-default-inline 4509Do not make member functions inline by default merely because they are 4510defined inside the class scope (C++ only). Otherwise, when you specify 4511@w{@option{-O}}, member functions defined inside class scope are compiled 4512inline by default; i.e., you don't need to add @samp{inline} in front of 4513the member function name. 4514 4515@item -fno-defer-pop 4516@opindex fno-defer-pop 4517Always pop the arguments to each function call as soon as that function 4518returns. For machines which must pop arguments after a function call, 4519the compiler normally lets arguments accumulate on the stack for several 4520function calls and pops them all at once. 4521 4522Disabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}. 4523 4524@item -fforce-mem 4525@opindex fforce-mem 4526Force memory operands to be copied into registers before doing 4527arithmetic on them. This produces better code by making all memory 4528references potential common subexpressions. When they are not common 4529subexpressions, instruction combination should eliminate the separate 4530register-load. This option is now a nop and will be removed in 4.3. 4531 4532@item -fforce-addr 4533@opindex fforce-addr 4534Force memory address constants to be copied into registers before 4535doing arithmetic on them. 4536 4537@item -fomit-frame-pointer 4538@opindex fomit-frame-pointer 4539Don't keep the frame pointer in a register for functions that 4540don't need one. This avoids the instructions to save, set up and 4541restore frame pointers; it also makes an extra register available 4542in many functions. @strong{It also makes debugging impossible on 4543some machines.} 4544 4545On some machines, such as the VAX, this flag has no effect, because 4546the standard calling sequence automatically handles the frame pointer 4547and nothing is saved by pretending it doesn't exist. The 4548machine-description macro @code{FRAME_POINTER_REQUIRED} controls 4549whether a target machine supports this flag. @xref{Registers,,Register 4550Usage, gccint, GNU Compiler Collection (GCC) Internals}. 4551 4552Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}. 4553 4554@item -foptimize-sibling-calls 4555@opindex foptimize-sibling-calls 4556Optimize sibling and tail recursive calls. 4557 4558Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 4559 4560@item -fno-inline 4561@opindex fno-inline 4562Don't pay attention to the @code{inline} keyword. Normally this option 4563is used to keep the compiler from expanding any functions inline. 4564Note that if you are not optimizing, no functions can be expanded inline. 4565 4566@item -finline-functions 4567@opindex finline-functions 4568Integrate all simple functions into their callers. The compiler 4569heuristically decides which functions are simple enough to be worth 4570integrating in this way. 4571 4572If all calls to a given function are integrated, and the function is 4573declared @code{static}, then the function is normally not output as 4574assembler code in its own right. 4575 4576Enabled at level @option{-O3}. 4577 4578@item -finline-functions-called-once 4579@opindex finline-functions-called-once 4580Consider all @code{static} functions called once for inlining into their 4581caller even if they are not marked @code{inline}. If a call to a given 4582function is integrated, then the function is not output as assembler code 4583in its own right. 4584 4585Enabled if @option{-funit-at-a-time} is enabled. 4586 4587@item -fearly-inlining 4588@opindex fearly-inlining 4589Inline functions marked by @code{always_inline} and functions whose body seems 4590smaller than the function call overhead early before doing 4591@option{-fprofile-generate} instrumentation and real inlining pass. Doing so 4592makes profiling significantly cheaper and usually inlining faster on programs 4593having large chains of nested wrapper functions. 4594 4595Enabled by default. 4596 4597@item -finline-limit=@var{n} 4598@opindex finline-limit 4599By default, GCC limits the size of functions that can be inlined. This flag 4600allows the control of this limit for functions that are explicitly marked as 4601inline (i.e., marked with the inline keyword or defined within the class 4602definition in c++). @var{n} is the size of functions that can be inlined in 4603number of pseudo instructions (not counting parameter handling). The default 4604value of @var{n} is 600. 4605Increasing this value can result in more inlined code at 4606the cost of compilation time and memory consumption. Decreasing usually makes 4607the compilation faster and less code will be inlined (which presumably 4608means slower programs). This option is particularly useful for programs that 4609use inlining heavily such as those based on recursive templates with C++. 4610 4611Inlining is actually controlled by a number of parameters, which may be 4612specified individually by using @option{--param @var{name}=@var{value}}. 4613The @option{-finline-limit=@var{n}} option sets some of these parameters 4614as follows: 4615 4616@table @gcctabopt 4617@item max-inline-insns-single 4618 is set to @var{n}/2. 4619@item max-inline-insns-auto 4620 is set to @var{n}/2. 4621@item min-inline-insns 4622 is set to 130 or @var{n}/4, whichever is smaller. 4623@item max-inline-insns-rtl 4624 is set to @var{n}. 4625@end table 4626 4627See below for a documentation of the individual 4628parameters controlling inlining. 4629 4630@emph{Note:} pseudo instruction represents, in this particular context, an 4631abstract measurement of function's size. In no way does it represent a count 4632of assembly instructions and as such its exact meaning might change from one 4633release to an another. 4634 4635@item -fkeep-inline-functions 4636@opindex fkeep-inline-functions 4637In C, emit @code{static} functions that are declared @code{inline} 4638into the object file, even if the function has been inlined into all 4639of its callers. This switch does not affect functions using the 4640@code{extern inline} extension in GNU C@. In C++, emit any and all 4641inline functions into the object file. 4642 4643@item -fkeep-static-consts 4644@opindex fkeep-static-consts 4645Emit variables declared @code{static const} when optimization isn't turned 4646on, even if the variables aren't referenced. 4647 4648GCC enables this option by default. If you want to force the compiler to 4649check if the variable was referenced, regardless of whether or not 4650optimization is turned on, use the @option{-fno-keep-static-consts} option. 4651 4652@item -fmerge-constants 4653Attempt to merge identical constants (string constants and floating point 4654constants) across compilation units. 4655 4656This option is the default for optimized compilation if the assembler and 4657linker support it. Use @option{-fno-merge-constants} to inhibit this 4658behavior. 4659 4660Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}. 4661 4662@item -fmerge-all-constants 4663Attempt to merge identical constants and identical variables. 4664 4665This option implies @option{-fmerge-constants}. In addition to 4666@option{-fmerge-constants} this considers e.g.@: even constant initialized 4667arrays or initialized constant variables with integral or floating point 4668types. Languages like C or C++ require each non-automatic variable to 4669have distinct location, so using this option will result in non-conforming 4670behavior. 4671 4672@item -fmodulo-sched 4673@opindex fmodulo-sched 4674Perform swing modulo scheduling immediately before the first scheduling 4675pass. This pass looks at innermost loops and reorders their 4676instructions by overlapping different iterations. 4677 4678@item -fno-branch-count-reg 4679@opindex fno-branch-count-reg 4680Do not use ``decrement and branch'' instructions on a count register, 4681but instead generate a sequence of instructions that decrement a 4682register, compare it against zero, then branch based upon the result. 4683This option is only meaningful on architectures that support such 4684instructions, which include x86, PowerPC, IA-64 and S/390. 4685 4686The default is @option{-fbranch-count-reg}. 4687 4688@item -fno-function-cse 4689@opindex fno-function-cse 4690Do not put function addresses in registers; make each instruction that 4691calls a constant function contain the function's address explicitly. 4692 4693This option results in less efficient code, but some strange hacks 4694that alter the assembler output may be confused by the optimizations 4695performed when this option is not used. 4696 4697The default is @option{-ffunction-cse} 4698 4699@item -fno-zero-initialized-in-bss 4700@opindex fno-zero-initialized-in-bss 4701If the target supports a BSS section, GCC by default puts variables that 4702are initialized to zero into BSS@. This can save space in the resulting 4703code. 4704 4705This option turns off this behavior because some programs explicitly 4706rely on variables going to the data section. E.g., so that the 4707resulting executable can find the beginning of that section and/or make 4708assumptions based on that. 4709 4710The default is @option{-fzero-initialized-in-bss}. 4711 4712@item -fbounds-check 4713@opindex fbounds-check 4714For front-ends that support it, generate additional code to check that 4715indices used to access arrays are within the declared range. This is 4716currently only supported by the Java and Fortran front-ends, where 4717this option defaults to true and false respectively. 4718 4719@item -fmudflap -fmudflapth -fmudflapir 4720@opindex fmudflap 4721@opindex fmudflapth 4722@opindex fmudflapir 4723@cindex bounds checking 4724@cindex mudflap 4725For front-ends that support it (C and C++), instrument all risky 4726pointer/array dereferencing operations, some standard library 4727string/heap functions, and some other associated constructs with 4728range/validity tests. Modules so instrumented should be immune to 4729buffer overflows, invalid heap use, and some other classes of C/C++ 4730programming errors. The instrumentation relies on a separate runtime 4731library (@file{libmudflap}), which will be linked into a program if 4732@option{-fmudflap} is given at link time. Run-time behavior of the 4733instrumented program is controlled by the @env{MUDFLAP_OPTIONS} 4734environment variable. See @code{env MUDFLAP_OPTIONS=-help a.out} 4735for its options. 4736 4737Use @option{-fmudflapth} instead of @option{-fmudflap} to compile and to 4738link if your program is multi-threaded. Use @option{-fmudflapir}, in 4739addition to @option{-fmudflap} or @option{-fmudflapth}, if 4740instrumentation should ignore pointer reads. This produces less 4741instrumentation (and therefore faster execution) and still provides 4742some protection against outright memory corrupting writes, but allows 4743erroneously read data to propagate within a program. 4744 4745@item -fthread-jumps 4746@opindex fthread-jumps 4747Perform optimizations where we check to see if a jump branches to a 4748location where another comparison subsumed by the first is found. If 4749so, the first branch is redirected to either the destination of the 4750second branch or a point immediately following it, depending on whether 4751the condition is known to be true or false. 4752 4753Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 4754 4755@item -fcse-follow-jumps 4756@opindex fcse-follow-jumps 4757In common subexpression elimination, scan through jump instructions 4758when the target of the jump is not reached by any other path. For 4759example, when CSE encounters an @code{if} statement with an 4760@code{else} clause, CSE will follow the jump when the condition 4761tested is false. 4762 4763Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 4764 4765@item -fcse-skip-blocks 4766@opindex fcse-skip-blocks 4767This is similar to @option{-fcse-follow-jumps}, but causes CSE to 4768follow jumps which conditionally skip over blocks. When CSE 4769encounters a simple @code{if} statement with no else clause, 4770@option{-fcse-skip-blocks} causes CSE to follow the jump around the 4771body of the @code{if}. 4772 4773Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 4774 4775@item -frerun-cse-after-loop 4776@opindex frerun-cse-after-loop 4777Re-run common subexpression elimination after loop optimizations has been 4778performed. 4779 4780Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 4781 4782@item -fgcse 4783@opindex fgcse 4784Perform a global common subexpression elimination pass. 4785This pass also performs global constant and copy propagation. 4786 4787@emph{Note:} When compiling a program using computed gotos, a GCC 4788extension, you may get better runtime performance if you disable 4789the global common subexpression elimination pass by adding 4790@option{-fno-gcse} to the command line. 4791 4792Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 4793 4794@item -fgcse-lm 4795@opindex fgcse-lm 4796When @option{-fgcse-lm} is enabled, global common subexpression elimination will 4797attempt to move loads which are only killed by stores into themselves. This 4798allows a loop containing a load/store sequence to be changed to a load outside 4799the loop, and a copy/store within the loop. 4800 4801Enabled by default when gcse is enabled. 4802 4803@item -fgcse-sm 4804@opindex fgcse-sm 4805When @option{-fgcse-sm} is enabled, a store motion pass is run after 4806global common subexpression elimination. This pass will attempt to move 4807stores out of loops. When used in conjunction with @option{-fgcse-lm}, 4808loops containing a load/store sequence can be changed to a load before 4809the loop and a store after the loop. 4810 4811Not enabled at any optimization level. 4812 4813@item -fgcse-las 4814@opindex fgcse-las 4815When @option{-fgcse-las} is enabled, the global common subexpression 4816elimination pass eliminates redundant loads that come after stores to the 4817same memory location (both partial and full redundancies). 4818 4819Not enabled at any optimization level. 4820 4821@item -fgcse-after-reload 4822@opindex fgcse-after-reload 4823When @option{-fgcse-after-reload} is enabled, a redundant load elimination 4824pass is performed after reload. The purpose of this pass is to cleanup 4825redundant spilling. 4826 4827@item -funsafe-loop-optimizations 4828@opindex funsafe-loop-optimizations 4829If given, the loop optimizer will assume that loop indices do not 4830overflow, and that the loops with nontrivial exit condition are not 4831infinite. This enables a wider range of loop optimizations even if 4832the loop optimizer itself cannot prove that these assumptions are valid. 4833Using @option{-Wunsafe-loop-optimizations}, the compiler will warn you 4834if it finds this kind of loop. 4835 4836@item -fcrossjumping 4837@opindex crossjumping 4838Perform cross-jumping transformation. This transformation unifies equivalent code and save code size. The 4839resulting code may or may not perform better than without cross-jumping. 4840 4841Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 4842 4843@item -fif-conversion 4844@opindex if-conversion 4845Attempt to transform conditional jumps into branch-less equivalents. This 4846include use of conditional moves, min, max, set flags and abs instructions, and 4847some tricks doable by standard arithmetics. The use of conditional execution 4848on chips where it is available is controlled by @code{if-conversion2}. 4849 4850Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}. 4851 4852@item -fif-conversion2 4853@opindex if-conversion2 4854Use conditional execution (where available) to transform conditional jumps into 4855branch-less equivalents. 4856 4857Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}. 4858 4859@item -fdelete-null-pointer-checks 4860@opindex fdelete-null-pointer-checks 4861Use global dataflow analysis to identify and eliminate useless checks 4862for null pointers. The compiler assumes that dereferencing a null 4863pointer would have halted the program. If a pointer is checked after 4864it has already been dereferenced, it cannot be null. 4865 4866In some environments, this assumption is not true, and programs can 4867safely dereference null pointers. Use 4868@option{-fno-delete-null-pointer-checks} to disable this optimization 4869for programs which depend on that behavior. 4870 4871Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 4872 4873@item -fexpensive-optimizations 4874@opindex fexpensive-optimizations 4875Perform a number of minor optimizations that are relatively expensive. 4876 4877Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 4878 4879@item -foptimize-register-move 4880@itemx -fregmove 4881@opindex foptimize-register-move 4882@opindex fregmove 4883Attempt to reassign register numbers in move instructions and as 4884operands of other simple instructions in order to maximize the amount of 4885register tying. This is especially helpful on machines with two-operand 4886instructions. 4887 4888Note @option{-fregmove} and @option{-foptimize-register-move} are the same 4889optimization. 4890 4891Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 4892 4893@item -fdelayed-branch 4894@opindex fdelayed-branch 4895If supported for the target machine, attempt to reorder instructions 4896to exploit instruction slots available after delayed branch 4897instructions. 4898 4899Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}. 4900 4901@item -fschedule-insns 4902@opindex fschedule-insns 4903If supported for the target machine, attempt to reorder instructions to 4904eliminate execution stalls due to required data being unavailable. This 4905helps machines that have slow floating point or memory load instructions 4906by allowing other instructions to be issued until the result of the load 4907or floating point instruction is required. 4908 4909Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 4910 4911@item -fschedule-insns2 4912@opindex fschedule-insns2 4913Similar to @option{-fschedule-insns}, but requests an additional pass of 4914instruction scheduling after register allocation has been done. This is 4915especially useful on machines with a relatively small number of 4916registers and where memory load instructions take more than one cycle. 4917 4918Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 4919 4920@item -fno-sched-interblock 4921@opindex fno-sched-interblock 4922Don't schedule instructions across basic blocks. This is normally 4923enabled by default when scheduling before register allocation, i.e.@: 4924with @option{-fschedule-insns} or at @option{-O2} or higher. 4925 4926@item -fno-sched-spec 4927@opindex fno-sched-spec 4928Don't allow speculative motion of non-load instructions. This is normally 4929enabled by default when scheduling before register allocation, i.e.@: 4930with @option{-fschedule-insns} or at @option{-O2} or higher. 4931 4932@item -fsched-spec-load 4933@opindex fsched-spec-load 4934Allow speculative motion of some load instructions. This only makes 4935sense when scheduling before register allocation, i.e.@: with 4936@option{-fschedule-insns} or at @option{-O2} or higher. 4937 4938@item -fsched-spec-load-dangerous 4939@opindex fsched-spec-load-dangerous 4940Allow speculative motion of more load instructions. This only makes 4941sense when scheduling before register allocation, i.e.@: with 4942@option{-fschedule-insns} or at @option{-O2} or higher. 4943 4944@item -fsched-stalled-insns=@var{n} 4945@opindex fsched-stalled-insns 4946Define how many insns (if any) can be moved prematurely from the queue 4947of stalled insns into the ready list, during the second scheduling pass. 4948 4949@item -fsched-stalled-insns-dep=@var{n} 4950@opindex fsched-stalled-insns-dep 4951Define how many insn groups (cycles) will be examined for a dependency 4952on a stalled insn that is candidate for premature removal from the queue 4953of stalled insns. Has an effect only during the second scheduling pass, 4954and only if @option{-fsched-stalled-insns} is used and its value is not zero. 4955 4956@item -fsched2-use-superblocks 4957@opindex fsched2-use-superblocks 4958When scheduling after register allocation, do use superblock scheduling 4959algorithm. Superblock scheduling allows motion across basic block boundaries 4960resulting on faster schedules. This option is experimental, as not all machine 4961descriptions used by GCC model the CPU closely enough to avoid unreliable 4962results from the algorithm. 4963 4964This only makes sense when scheduling after register allocation, i.e.@: with 4965@option{-fschedule-insns2} or at @option{-O2} or higher. 4966 4967@item -fsched2-use-traces 4968@opindex fsched2-use-traces 4969Use @option{-fsched2-use-superblocks} algorithm when scheduling after register 4970allocation and additionally perform code duplication in order to increase the 4971size of superblocks using tracer pass. See @option{-ftracer} for details on 4972trace formation. 4973 4974This mode should produce faster but significantly longer programs. Also 4975without @option{-fbranch-probabilities} the traces constructed may not 4976match the reality and hurt the performance. This only makes 4977sense when scheduling after register allocation, i.e.@: with 4978@option{-fschedule-insns2} or at @option{-O2} or higher. 4979 4980@item -fsee 4981@opindex fsee 4982Eliminates redundant extension instructions and move the non redundant 4983ones to optimal placement using LCM. 4984 4985@item -freschedule-modulo-scheduled-loops 4986@opindex fscheduling-in-modulo-scheduled-loops 4987The modulo scheduling comes before the traditional scheduling, if a loop was modulo scheduled 4988we may want to prevent the later scheduling passes from changing its schedule, we use this 4989option to control that. 4990 4991@item -fcaller-saves 4992@opindex fcaller-saves 4993Enable values to be allocated in registers that will be clobbered by 4994function calls, by emitting extra instructions to save and restore the 4995registers around such calls. Such allocation is done only when it 4996seems to result in better code than would otherwise be produced. 4997 4998This option is always enabled by default on certain machines, usually 4999those which have no call-preserved registers to use instead. 5000 5001Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 5002 5003@item -ftree-pre 5004Perform Partial Redundancy Elimination (PRE) on trees. This flag is 5005enabled by default at @option{-O2} and @option{-O3}. 5006 5007@item -ftree-fre 5008Perform Full Redundancy Elimination (FRE) on trees. The difference 5009between FRE and PRE is that FRE only considers expressions 5010that are computed on all paths leading to the redundant computation. 5011This analysis faster than PRE, though it exposes fewer redundancies. 5012This flag is enabled by default at @option{-O} and higher. 5013 5014@item -ftree-copy-prop 5015Perform copy propagation on trees. This pass eliminates unnecessary 5016copy operations. This flag is enabled by default at @option{-O} and 5017higher. 5018 5019@item -ftree-store-copy-prop 5020Perform copy propagation of memory loads and stores. This pass 5021eliminates unnecessary copy operations in memory references 5022(structures, global variables, arrays, etc). This flag is enabled by 5023default at @option{-O2} and higher. 5024 5025@item -ftree-salias 5026Perform structural alias analysis on trees. This flag 5027is enabled by default at @option{-O} and higher. 5028 5029@item -fipa-pta 5030Perform interprocedural pointer analysis. 5031 5032@item -ftree-sink 5033Perform forward store motion on trees. This flag is 5034enabled by default at @option{-O} and higher. 5035 5036@item -ftree-ccp 5037Perform sparse conditional constant propagation (CCP) on trees. This 5038pass only operates on local scalar variables and is enabled by default 5039at @option{-O} and higher. 5040 5041@item -ftree-store-ccp 5042Perform sparse conditional constant propagation (CCP) on trees. This 5043pass operates on both local scalar variables and memory stores and 5044loads (global variables, structures, arrays, etc). This flag is 5045enabled by default at @option{-O2} and higher. 5046 5047@item -ftree-dce 5048Perform dead code elimination (DCE) on trees. This flag is enabled by 5049default at @option{-O} and higher. 5050 5051@item -ftree-dominator-opts 5052Perform a variety of simple scalar cleanups (constant/copy 5053propagation, redundancy elimination, range propagation and expression 5054simplification) based on a dominator tree traversal. This also 5055performs jump threading (to reduce jumps to jumps). This flag is 5056enabled by default at @option{-O} and higher. 5057 5058@item -ftree-ch 5059Perform loop header copying on trees. This is beneficial since it increases 5060effectiveness of code motion optimizations. It also saves one jump. This flag 5061is enabled by default at @option{-O} and higher. It is not enabled 5062for @option{-Os}, since it usually increases code size. 5063 5064@item -ftree-loop-optimize 5065Perform loop optimizations on trees. This flag is enabled by default 5066at @option{-O} and higher. 5067 5068@item -ftree-loop-linear 5069Perform linear loop transformations on tree. This flag can improve cache 5070performance and allow further loop optimizations to take place. 5071 5072@item -ftree-loop-im 5073Perform loop invariant motion on trees. This pass moves only invariants that 5074would be hard to handle at RTL level (function calls, operations that expand to 5075nontrivial sequences of insns). With @option{-funswitch-loops} it also moves 5076operands of conditions that are invariant out of the loop, so that we can use 5077just trivial invariantness analysis in loop unswitching. The pass also includes 5078store motion. 5079 5080@item -ftree-loop-ivcanon 5081Create a canonical counter for number of iterations in the loop for that 5082determining number of iterations requires complicated analysis. Later 5083optimizations then may determine the number easily. Useful especially 5084in connection with unrolling. 5085 5086@item -fivopts 5087Perform induction variable optimizations (strength reduction, induction 5088variable merging and induction variable elimination) on trees. 5089 5090@item -ftree-sra 5091Perform scalar replacement of aggregates. This pass replaces structure 5092references with scalars to prevent committing structures to memory too 5093early. This flag is enabled by default at @option{-O} and higher. 5094 5095@item -ftree-copyrename 5096Perform copy renaming on trees. This pass attempts to rename compiler 5097temporaries to other variables at copy locations, usually resulting in 5098variable names which more closely resemble the original variables. This flag 5099is enabled by default at @option{-O} and higher. 5100 5101@item -ftree-ter 5102Perform temporary expression replacement during the SSA->normal phase. Single 5103use/single def temporaries are replaced at their use location with their 5104defining expression. This results in non-GIMPLE code, but gives the expanders 5105much more complex trees to work on resulting in better RTL generation. This is 5106enabled by default at @option{-O} and higher. 5107 5108@item -ftree-lrs 5109Perform live range splitting during the SSA->normal phase. Distinct live 5110ranges of a variable are split into unique variables, allowing for better 5111optimization later. This is enabled by default at @option{-O} and higher. 5112 5113@item -ftree-vectorize 5114Perform loop vectorization on trees. 5115 5116@item -ftree-vect-loop-version 5117@opindex ftree-vect-loop-version 5118Perform loop versioning when doing loop vectorization on trees. When a loop 5119appears to be vectorizable except that data alignment or data dependence cannot 5120be determined at compile time then vectorized and non-vectorized versions of 5121the loop are generated along with runtime checks for alignment or dependence 5122to control which version is executed. This option is enabled by default 5123except at level @option{-Os} where it is disabled. 5124 5125@item -ftree-vrp 5126Perform Value Range Propagation on trees. This is similar to the 5127constant propagation pass, but instead of values, ranges of values are 5128propagated. This allows the optimizers to remove unnecessary range 5129checks like array bound checks and null pointer checks. This is 5130enabled by default at @option{-O2} and higher. Null pointer check 5131elimination is only done if @option{-fdelete-null-pointer-checks} is 5132enabled. 5133 5134@item -ftracer 5135@opindex ftracer 5136Perform tail duplication to enlarge superblock size. This transformation 5137simplifies the control flow of the function allowing other optimizations to do 5138better job. 5139 5140@item -funroll-loops 5141@opindex funroll-loops 5142Unroll loops whose number of iterations can be determined at compile 5143time or upon entry to the loop. @option{-funroll-loops} implies 5144@option{-frerun-cse-after-loop}. This option makes code larger, 5145and may or may not make it run faster. 5146 5147@item -funroll-all-loops 5148@opindex funroll-all-loops 5149Unroll all loops, even if their number of iterations is uncertain when 5150the loop is entered. This usually makes programs run more slowly. 5151@option{-funroll-all-loops} implies the same options as 5152@option{-funroll-loops}, 5153 5154@item -fsplit-ivs-in-unroller 5155@opindex fsplit-ivs-in-unroller 5156Enables expressing of values of induction variables in later iterations 5157of the unrolled loop using the value in the first iteration. This breaks 5158long dependency chains, thus improving efficiency of the scheduling passes. 5159 5160Combination of @option{-fweb} and CSE is often sufficient to obtain the 5161same effect. However in cases the loop body is more complicated than 5162a single basic block, this is not reliable. It also does not work at all 5163on some of the architectures due to restrictions in the CSE pass. 5164 5165This optimization is enabled by default. 5166 5167@item -fvariable-expansion-in-unroller 5168@opindex fvariable-expansion-in-unroller 5169With this option, the compiler will create multiple copies of some 5170local variables when unrolling a loop which can result in superior code. 5171 5172@item -fprefetch-loop-arrays 5173@opindex fprefetch-loop-arrays 5174If supported by the target machine, generate instructions to prefetch 5175memory to improve the performance of loops that access large arrays. 5176 5177This option may generate better or worse code; results are highly 5178dependent on the structure of loops within the source code. 5179 5180Disabled at level @option{-Os}. 5181 5182@item -fno-peephole 5183@itemx -fno-peephole2 5184@opindex fno-peephole 5185@opindex fno-peephole2 5186Disable any machine-specific peephole optimizations. The difference 5187between @option{-fno-peephole} and @option{-fno-peephole2} is in how they 5188are implemented in the compiler; some targets use one, some use the 5189other, a few use both. 5190 5191@option{-fpeephole} is enabled by default. 5192@option{-fpeephole2} enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 5193 5194@item -fno-guess-branch-probability 5195@opindex fno-guess-branch-probability 5196Do not guess branch probabilities using heuristics. 5197 5198GCC will use heuristics to guess branch probabilities if they are 5199not provided by profiling feedback (@option{-fprofile-arcs}). These 5200heuristics are based on the control flow graph. If some branch probabilities 5201are specified by @samp{__builtin_expect}, then the heuristics will be 5202used to guess branch probabilities for the rest of the control flow graph, 5203taking the @samp{__builtin_expect} info into account. The interactions 5204between the heuristics and @samp{__builtin_expect} can be complex, and in 5205some cases, it may be useful to disable the heuristics so that the effects 5206of @samp{__builtin_expect} are easier to understand. 5207 5208The default is @option{-fguess-branch-probability} at levels 5209@option{-O}, @option{-O2}, @option{-O3}, @option{-Os}. 5210 5211@item -freorder-blocks 5212@opindex freorder-blocks 5213Reorder basic blocks in the compiled function in order to reduce number of 5214taken branches and improve code locality. 5215 5216Enabled at levels @option{-O2}, @option{-O3}. 5217 5218@item -freorder-blocks-and-partition 5219@opindex freorder-blocks-and-partition 5220In addition to reordering basic blocks in the compiled function, in order 5221to reduce number of taken branches, partitions hot and cold basic blocks 5222into separate sections of the assembly and .o files, to improve 5223paging and cache locality performance. 5224 5225This optimization is automatically turned off in the presence of 5226exception handling, for linkonce sections, for functions with a user-defined 5227section attribute and on any architecture that does not support named 5228sections. 5229 5230@item -freorder-functions 5231@opindex freorder-functions 5232Reorder functions in the object file in order to 5233improve code locality. This is implemented by using special 5234subsections @code{.text.hot} for most frequently executed functions and 5235@code{.text.unlikely} for unlikely executed functions. Reordering is done by 5236the linker so object file format must support named sections and linker must 5237place them in a reasonable way. 5238 5239Also profile feedback must be available in to make this option effective. See 5240@option{-fprofile-arcs} for details. 5241 5242Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 5243 5244@item -fstrict-aliasing 5245@opindex fstrict-aliasing 5246Allows the compiler to assume the strictest aliasing rules applicable to 5247the language being compiled. For C (and C++), this activates 5248optimizations based on the type of expressions. In particular, an 5249object of one type is assumed never to reside at the same address as an 5250object of a different type, unless the types are almost the same. For 5251example, an @code{unsigned int} can alias an @code{int}, but not a 5252@code{void*} or a @code{double}. A character type may alias any other 5253type. 5254 5255Pay special attention to code like this: 5256@smallexample 5257union a_union @{ 5258 int i; 5259 double d; 5260@}; 5261 5262int f() @{ 5263 a_union t; 5264 t.d = 3.0; 5265 return t.i; 5266@} 5267@end smallexample 5268The practice of reading from a different union member than the one most 5269recently written to (called ``type-punning'') is common. Even with 5270@option{-fstrict-aliasing}, type-punning is allowed, provided the memory 5271is accessed through the union type. So, the code above will work as 5272expected. However, this code might not: 5273@smallexample 5274int f() @{ 5275 a_union t; 5276 int* ip; 5277 t.d = 3.0; 5278 ip = &t.i; 5279 return *ip; 5280@} 5281@end smallexample 5282 5283Every language that wishes to perform language-specific alias analysis 5284should define a function that computes, given an @code{tree} 5285node, an alias set for the node. Nodes in different alias sets are not 5286allowed to alias. For an example, see the C front-end function 5287@code{c_get_alias_set}. 5288 5289Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. 5290 5291@item -fstrict-overflow 5292@opindex fstrict-overflow 5293Allow the compiler to assume strict signed overflow rules, depending 5294on the language being compiled. For C (and C++) this means that 5295overflow when doing arithmetic with signed numbers is undefined, which 5296means that the compiler may assume that it will not happen. This 5297permits various optimizations. For example, the compiler will assume 5298that an expression like @code{i + 10 > i} will always be true for 5299signed @code{i}. This assumption is only valid if signed overflow is 5300undefined, as the expression is false if @code{i + 10} overflows when 5301using twos complement arithmetic. When this option is in effect any 5302attempt to determine whether an operation on signed numbers will 5303overflow must be written carefully to not actually involve overflow. 5304 5305See also the @option{-fwrapv} option. Using @option{-fwrapv} means 5306that signed overflow is fully defined: it wraps. When 5307@option{-fwrapv} is used, there is no difference between 5308@option{-fstrict-overflow} and @option{-fno-strict-overflow}. With 5309@option{-fwrapv} certain types of overflow are permitted. For 5310example, if the compiler gets an overflow when doing arithmetic on 5311constants, the overflowed value can still be used with 5312@option{-fwrapv}, but not otherwise. 5313 5314The @option{-fstrict-overflow} option is enabled at levels 5315@option{-O2}, @option{-O3}, @option{-Os}. 5316 5317@item -falign-functions 5318@itemx -falign-functions=@var{n} 5319@opindex falign-functions 5320Align the start of functions to the next power-of-two greater than 5321@var{n}, skipping up to @var{n} bytes. For instance, 5322@option{-falign-functions=32} aligns functions to the next 32-byte 5323boundary, but @option{-falign-functions=24} would align to the next 532432-byte boundary only if this can be done by skipping 23 bytes or less. 5325 5326@option{-fno-align-functions} and @option{-falign-functions=1} are 5327equivalent and mean that functions will not be aligned. 5328 5329Some assemblers only support this flag when @var{n} is a power of two; 5330in that case, it is rounded up. 5331 5332If @var{n} is not specified or is zero, use a machine-dependent default. 5333 5334Enabled at levels @option{-O2}, @option{-O3}. 5335 5336@item -falign-labels 5337@itemx -falign-labels=@var{n} 5338@opindex falign-labels 5339Align all branch targets to a power-of-two boundary, skipping up to 5340@var{n} bytes like @option{-falign-functions}. This option can easily 5341make code slower, because it must insert dummy operations for when the 5342branch target is reached in the usual flow of the code. 5343 5344@option{-fno-align-labels} and @option{-falign-labels=1} are 5345equivalent and mean that labels will not be aligned. 5346 5347If @option{-falign-loops} or @option{-falign-jumps} are applicable and 5348are greater than this value, then their values are used instead. 5349 5350If @var{n} is not specified or is zero, use a machine-dependent default 5351which is very likely to be @samp{1}, meaning no alignment. 5352 5353Enabled at levels @option{-O2}, @option{-O3}. 5354 5355@item -falign-loops 5356@itemx -falign-loops=@var{n} 5357@opindex falign-loops 5358Align loops to a power-of-two boundary, skipping up to @var{n} bytes 5359like @option{-falign-functions}. The hope is that the loop will be 5360executed many times, which will make up for any execution of the dummy 5361operations. 5362 5363@option{-fno-align-loops} and @option{-falign-loops=1} are 5364equivalent and mean that loops will not be aligned. 5365 5366If @var{n} is not specified or is zero, use a machine-dependent default. 5367 5368Enabled at levels @option{-O2}, @option{-O3}. 5369 5370@item -falign-jumps 5371@itemx -falign-jumps=@var{n} 5372@opindex falign-jumps 5373Align branch targets to a power-of-two boundary, for branch targets 5374where the targets can only be reached by jumping, skipping up to @var{n} 5375bytes like @option{-falign-functions}. In this case, no dummy operations 5376need be executed. 5377 5378@option{-fno-align-jumps} and @option{-falign-jumps=1} are 5379equivalent and mean that loops will not be aligned. 5380 5381If @var{n} is not specified or is zero, use a machine-dependent default. 5382 5383Enabled at levels @option{-O2}, @option{-O3}. 5384 5385@item -funit-at-a-time 5386@opindex funit-at-a-time 5387Parse the whole compilation unit before starting to produce code. 5388This allows some extra optimizations to take place but consumes 5389more memory (in general). There are some compatibility issues 5390with @emph{unit-at-a-time} mode: 5391@itemize @bullet 5392@item 5393enabling @emph{unit-at-a-time} mode may change the order 5394in which functions, variables, and top-level @code{asm} statements 5395are emitted, and will likely break code relying on some particular 5396ordering. The majority of such top-level @code{asm} statements, 5397though, can be replaced by @code{section} attributes. The 5398@option{fno-toplevel-reorder} option may be used to keep the ordering 5399used in the input file, at the cost of some optimizations. 5400 5401@item 5402@emph{unit-at-a-time} mode removes unreferenced static variables 5403and functions. This may result in undefined references 5404when an @code{asm} statement refers directly to variables or functions 5405that are otherwise unused. In that case either the variable/function 5406shall be listed as an operand of the @code{asm} statement operand or, 5407in the case of top-level @code{asm} statements the attribute @code{used} 5408shall be used on the declaration. 5409 5410@item 5411Static functions now can use non-standard passing conventions that 5412may break @code{asm} statements calling functions directly. Again, 5413attribute @code{used} will prevent this behavior. 5414@end itemize 5415 5416As a temporary workaround, @option{-fno-unit-at-a-time} can be used, 5417but this scheme may not be supported by future releases of GCC@. 5418 5419Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}. 5420 5421@item -fno-toplevel-reorder 5422Do not reorder top-level functions, variables, and @code{asm} 5423statements. Output them in the same order that they appear in the 5424input file. When this option is used, unreferenced static variables 5425will not be removed. This option is intended to support existing code 5426which relies on a particular ordering. For new code, it is better to 5427use attributes. 5428 5429@item -fweb 5430@opindex fweb 5431Constructs webs as commonly used for register allocation purposes and assign 5432each web individual pseudo register. This allows the register allocation pass 5433to operate on pseudos directly, but also strengthens several other optimization 5434passes, such as CSE, loop optimizer and trivial dead code remover. It can, 5435however, make debugging impossible, since variables will no longer stay in a 5436``home register''. 5437 5438Enabled by default with @option{-funroll-loops}. 5439 5440@item -fwhole-program 5441@opindex fwhole-program 5442Assume that the current compilation unit represents whole program being 5443compiled. All public functions and variables with the exception of @code{main} 5444and those merged by attribute @code{externally_visible} become static functions 5445and in a affect gets more aggressively optimized by interprocedural optimizers. 5446While this option is equivalent to proper use of @code{static} keyword for 5447programs consisting of single file, in combination with option 5448@option{--combine} this flag can be used to compile most of smaller scale C 5449programs since the functions and variables become local for the whole combined 5450compilation unit, not for the single source file itself. 5451 5452 5453@item -fno-cprop-registers 5454@opindex fno-cprop-registers 5455After register allocation and post-register allocation instruction splitting, 5456we perform a copy-propagation pass to try to reduce scheduling dependencies 5457and occasionally eliminate the copy. 5458 5459Disabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}. 5460 5461@item -fprofile-generate 5462@opindex fprofile-generate 5463 5464Enable options usually used for instrumenting application to produce 5465profile useful for later recompilation with profile feedback based 5466optimization. You must use @option{-fprofile-generate} both when 5467compiling and when linking your program. 5468 5469The following options are enabled: @code{-fprofile-arcs}, @code{-fprofile-values}, @code{-fvpt}. 5470 5471@item -fprofile-use 5472@opindex fprofile-use 5473Enable profile feedback directed optimizations, and optimizations 5474generally profitable only with profile feedback available. 5475 5476The following options are enabled: @code{-fbranch-probabilities}, @code{-fvpt}, 5477@code{-funroll-loops}, @code{-fpeel-loops}, @code{-ftracer} 5478 5479@end table 5480 5481The following options control compiler behavior regarding floating 5482point arithmetic. These options trade off between speed and 5483correctness. All must be specifically enabled. 5484 5485@table @gcctabopt 5486@item -ffloat-store 5487@opindex ffloat-store 5488Do not store floating point variables in registers, and inhibit other 5489options that might change whether a floating point value is taken from a 5490register or memory. 5491 5492@cindex floating point precision 5493This option prevents undesirable excess precision on machines such as 5494the 68000 where the floating registers (of the 68881) keep more 5495precision than a @code{double} is supposed to have. Similarly for the 5496x86 architecture. For most programs, the excess precision does only 5497good, but a few programs rely on the precise definition of IEEE floating 5498point. Use @option{-ffloat-store} for such programs, after modifying 5499them to store all pertinent intermediate computations into variables. 5500 5501@item -ffast-math 5502@opindex ffast-math 5503Sets @option{-fno-math-errno}, @option{-funsafe-math-optimizations}, @* 5504@option{-fno-trapping-math}, @option{-ffinite-math-only}, 5505@option{-fno-rounding-math}, @option{-fno-signaling-nans} 5506and @option{fcx-limited-range}. 5507 5508This option causes the preprocessor macro @code{__FAST_MATH__} to be defined. 5509 5510This option should never be turned on by any @option{-O} option since 5511it can result in incorrect output for programs which depend on 5512an exact implementation of IEEE or ISO rules/specifications for 5513math functions. 5514 5515@item -fno-math-errno 5516@opindex fno-math-errno 5517Do not set ERRNO after calling math functions that are executed 5518with a single instruction, e.g., sqrt. A program that relies on 5519IEEE exceptions for math error handling may want to use this flag 5520for speed while maintaining IEEE arithmetic compatibility. 5521 5522This option should never be turned on by any @option{-O} option since 5523it can result in incorrect output for programs which depend on 5524an exact implementation of IEEE or ISO rules/specifications for 5525math functions. 5526 5527The default is @option{-fmath-errno}. 5528 5529On Darwin and FreeBSD systems, the math library never sets @code{errno}. 5530There is therefore 5531no reason for the compiler to consider the possibility that it might, 5532and @option{-fno-math-errno} is the default. 5533 5534@item -funsafe-math-optimizations 5535@opindex funsafe-math-optimizations 5536Allow optimizations for floating-point arithmetic that (a) assume 5537that arguments and results are valid and (b) may violate IEEE or 5538ANSI standards. When used at link-time, it may include libraries 5539or startup files that change the default FPU control word or other 5540similar optimizations. 5541 5542This option should never be turned on by any @option{-O} option since 5543it can result in incorrect output for programs which depend on 5544an exact implementation of IEEE or ISO rules/specifications for 5545math functions. 5546 5547The default is @option{-fno-unsafe-math-optimizations}. 5548 5549@item -ffinite-math-only 5550@opindex ffinite-math-only 5551Allow optimizations for floating-point arithmetic that assume 5552that arguments and results are not NaNs or +-Infs. 5553 5554This option should never be turned on by any @option{-O} option since 5555it can result in incorrect output for programs which depend on 5556an exact implementation of IEEE or ISO rules/specifications. 5557 5558The default is @option{-fno-finite-math-only}. 5559 5560@item -fno-trapping-math 5561@opindex fno-trapping-math 5562Compile code assuming that floating-point operations cannot generate 5563user-visible traps. These traps include division by zero, overflow, 5564underflow, inexact result and invalid operation. This option implies 5565@option{-fno-signaling-nans}. Setting this option may allow faster 5566code if one relies on ``non-stop'' IEEE arithmetic, for example. 5567 5568This option should never be turned on by any @option{-O} option since 5569it can result in incorrect output for programs which depend on 5570an exact implementation of IEEE or ISO rules/specifications for 5571math functions. 5572 5573The default is @option{-ftrapping-math}. 5574 5575@item -frounding-math 5576@opindex frounding-math 5577Disable transformations and optimizations that assume default floating 5578point rounding behavior. This is round-to-zero for all floating point 5579to integer conversions, and round-to-nearest for all other arithmetic 5580truncations. This option should be specified for programs that change 5581the FP rounding mode dynamically, or that may be executed with a 5582non-default rounding mode. This option disables constant folding of 5583floating point expressions at compile-time (which may be affected by 5584rounding mode) and arithmetic transformations that are unsafe in the 5585presence of sign-dependent rounding modes. 5586 5587The default is @option{-fno-rounding-math}. 5588 5589This option is experimental and does not currently guarantee to 5590disable all GCC optimizations that are affected by rounding mode. 5591Future versions of GCC may provide finer control of this setting 5592using C99's @code{FENV_ACCESS} pragma. This command line option 5593will be used to specify the default state for @code{FENV_ACCESS}. 5594 5595@item -frtl-abstract-sequences 5596@opindex frtl-abstract-sequences 5597It is a size optimization method. This option is to find identical 5598sequences of code, which can be turned into pseudo-procedures and 5599then replace all occurrences with calls to the newly created 5600subroutine. It is kind of an opposite of @option{-finline-functions}. 5601This optimization runs at RTL level. 5602 5603@item -fsignaling-nans 5604@opindex fsignaling-nans 5605Compile code assuming that IEEE signaling NaNs may generate user-visible 5606traps during floating-point operations. Setting this option disables 5607optimizations that may change the number of exceptions visible with 5608signaling NaNs. This option implies @option{-ftrapping-math}. 5609 5610This option causes the preprocessor macro @code{__SUPPORT_SNAN__} to 5611be defined. 5612 5613The default is @option{-fno-signaling-nans}. 5614 5615This option is experimental and does not currently guarantee to 5616disable all GCC optimizations that affect signaling NaN behavior. 5617 5618@item -fsingle-precision-constant 5619@opindex fsingle-precision-constant 5620Treat floating point constant as single precision constant instead of 5621implicitly converting it to double precision constant. 5622 5623@item -fcx-limited-range 5624@itemx -fno-cx-limited-range 5625@opindex fcx-limited-range 5626@opindex fno-cx-limited-range 5627When enabled, this option states that a range reduction step is not 5628needed when performing complex division. The default is 5629@option{-fno-cx-limited-range}, but is enabled by @option{-ffast-math}. 5630 5631This option controls the default setting of the ISO C99 5632@code{CX_LIMITED_RANGE} pragma. Nevertheless, the option applies to 5633all languages. 5634 5635@end table 5636 5637The following options control optimizations that may improve 5638performance, but are not enabled by any @option{-O} options. This 5639section includes experimental options that may produce broken code. 5640 5641@table @gcctabopt 5642@item -fbranch-probabilities 5643@opindex fbranch-probabilities 5644After running a program compiled with @option{-fprofile-arcs} 5645(@pxref{Debugging Options,, Options for Debugging Your Program or 5646@command{gcc}}), you can compile it a second time using 5647@option{-fbranch-probabilities}, to improve optimizations based on 5648the number of times each branch was taken. When the program 5649compiled with @option{-fprofile-arcs} exits it saves arc execution 5650counts to a file called @file{@var{sourcename}.gcda} for each source 5651file The information in this data file is very dependent on the 5652structure of the generated code, so you must use the same source code 5653and the same optimization options for both compilations. 5654 5655With @option{-fbranch-probabilities}, GCC puts a 5656@samp{REG_BR_PROB} note on each @samp{JUMP_INSN} and @samp{CALL_INSN}. 5657These can be used to improve optimization. Currently, they are only 5658used in one place: in @file{reorg.c}, instead of guessing which path a 5659branch is mostly to take, the @samp{REG_BR_PROB} values are used to 5660exactly determine which path is taken more often. 5661 5662@item -fprofile-values 5663@opindex fprofile-values 5664If combined with @option{-fprofile-arcs}, it adds code so that some 5665data about values of expressions in the program is gathered. 5666 5667With @option{-fbranch-probabilities}, it reads back the data gathered 5668from profiling values of expressions and adds @samp{REG_VALUE_PROFILE} 5669notes to instructions for their later usage in optimizations. 5670 5671Enabled with @option{-fprofile-generate} and @option{-fprofile-use}. 5672 5673@item -fvpt 5674@opindex fvpt 5675If combined with @option{-fprofile-arcs}, it instructs the compiler to add 5676a code to gather information about values of expressions. 5677 5678With @option{-fbranch-probabilities}, it reads back the data gathered 5679and actually performs the optimizations based on them. 5680Currently the optimizations include specialization of division operation 5681using the knowledge about the value of the denominator. 5682 5683@item -frename-registers 5684@opindex frename-registers 5685Attempt to avoid false dependencies in scheduled code by making use 5686of registers left over after register allocation. This optimization 5687will most benefit processors with lots of registers. Depending on the 5688debug information format adopted by the target, however, it can 5689make debugging impossible, since variables will no longer stay in 5690a ``home register''. 5691 5692Enabled by default with @option{-funroll-loops}. 5693 5694@item -ftracer 5695@opindex ftracer 5696Perform tail duplication to enlarge superblock size. This transformation 5697simplifies the control flow of the function allowing other optimizations to do 5698better job. 5699 5700Enabled with @option{-fprofile-use}. 5701 5702@item -funroll-loops 5703@opindex funroll-loops 5704Unroll loops whose number of iterations can be determined at compile time or 5705upon entry to the loop. @option{-funroll-loops} implies 5706@option{-frerun-cse-after-loop}, @option{-fweb} and @option{-frename-registers}. 5707It also turns on complete loop peeling (i.e.@: complete removal of loops with 5708small constant number of iterations). This option makes code larger, and may 5709or may not make it run faster. 5710 5711Enabled with @option{-fprofile-use}. 5712 5713@item -funroll-all-loops 5714@opindex funroll-all-loops 5715Unroll all loops, even if their number of iterations is uncertain when 5716the loop is entered. This usually makes programs run more slowly. 5717@option{-funroll-all-loops} implies the same options as 5718@option{-funroll-loops}. 5719 5720@item -fpeel-loops 5721@opindex fpeel-loops 5722Peels the loops for that there is enough information that they do not 5723roll much (from profile feedback). It also turns on complete loop peeling 5724(i.e.@: complete removal of loops with small constant number of iterations). 5725 5726Enabled with @option{-fprofile-use}. 5727 5728@item -fmove-loop-invariants 5729@opindex fmove-loop-invariants 5730Enables the loop invariant motion pass in the RTL loop optimizer. Enabled 5731at level @option{-O1} 5732 5733@item -funswitch-loops 5734@opindex funswitch-loops 5735Move branches with loop invariant conditions out of the loop, with duplicates 5736of the loop on both branches (modified according to result of the condition). 5737 5738@item -ffunction-sections 5739@itemx -fdata-sections 5740@opindex ffunction-sections 5741@opindex fdata-sections 5742Place each function or data item into its own section in the output 5743file if the target supports arbitrary sections. The name of the 5744function or the name of the data item determines the section's name 5745in the output file. 5746 5747Use these options on systems where the linker can perform optimizations 5748to improve locality of reference in the instruction space. Most systems 5749using the ELF object format and SPARC processors running Solaris 2 have 5750linkers with such optimizations. AIX may have these optimizations in 5751the future. 5752 5753Only use these options when there are significant benefits from doing 5754so. When you specify these options, the assembler and linker will 5755create larger object and executable files and will also be slower. 5756You will not be able to use @code{gprof} on all systems if you 5757specify this option and you may have problems with debugging if 5758you specify both this option and @option{-g}. 5759 5760@item -fbranch-target-load-optimize 5761@opindex fbranch-target-load-optimize 5762Perform branch target register load optimization before prologue / epilogue 5763threading. 5764The use of target registers can typically be exposed only during reload, 5765thus hoisting loads out of loops and doing inter-block scheduling needs 5766a separate optimization pass. 5767 5768@item -fbranch-target-load-optimize2 5769@opindex fbranch-target-load-optimize2 5770Perform branch target register load optimization after prologue / epilogue 5771threading. 5772 5773@item -fbtr-bb-exclusive 5774@opindex fbtr-bb-exclusive 5775When performing branch target register load optimization, don't reuse 5776branch target registers in within any basic block. 5777 5778@item -fstack-protector 5779Emit extra code to check for buffer overflows, such as stack smashing 5780attacks. This is done by adding a guard variable to functions with 5781vulnerable objects. This includes functions that call alloca, and 5782functions with buffers larger than 8 bytes. The guards are initialized 5783when a function is entered and then checked when the function exits. 5784If a guard check fails, an error message is printed and the program exits. 5785 5786@item -fstack-protector-all 5787Like @option{-fstack-protector} except that all functions are protected. 5788 5789@item -fsection-anchors 5790@opindex fsection-anchors 5791Try to reduce the number of symbolic address calculations by using 5792shared ``anchor'' symbols to address nearby objects. This transformation 5793can help to reduce the number of GOT entries and GOT accesses on some 5794targets. 5795 5796For example, the implementation of the following function @code{foo}: 5797 5798@smallexample 5799static int a, b, c; 5800int foo (void) @{ return a + b + c; @} 5801@end smallexample 5802 5803would usually calculate the addresses of all three variables, but if you 5804compile it with @option{-fsection-anchors}, it will access the variables 5805from a common anchor point instead. The effect is similar to the 5806following pseudocode (which isn't valid C): 5807 5808@smallexample 5809int foo (void) 5810@{ 5811 register int *xr = &x; 5812 return xr[&a - &x] + xr[&b - &x] + xr[&c - &x]; 5813@} 5814@end smallexample 5815 5816Not all targets support this option. 5817 5818@item --param @var{name}=@var{value} 5819@opindex param 5820In some places, GCC uses various constants to control the amount of 5821optimization that is done. For example, GCC will not inline functions 5822that contain more that a certain number of instructions. You can 5823control some of these constants on the command-line using the 5824@option{--param} option. 5825 5826The names of specific parameters, and the meaning of the values, are 5827tied to the internals of the compiler, and are subject to change 5828without notice in future releases. 5829 5830In each case, the @var{value} is an integer. The allowable choices for 5831@var{name} are given in the following table: 5832 5833@table @gcctabopt 5834@item salias-max-implicit-fields 5835The maximum number of fields in a variable without direct 5836structure accesses for which structure aliasing will consider trying 5837to track each field. The default is 5 5838 5839@item salias-max-array-elements 5840The maximum number of elements an array can have and its elements 5841still be tracked individually by structure aliasing. The default is 4 5842 5843@item sra-max-structure-size 5844The maximum structure size, in bytes, at which the scalar replacement 5845of aggregates (SRA) optimization will perform block copies. The 5846default value, 0, implies that GCC will select the most appropriate 5847size itself. 5848 5849@item sra-field-structure-ratio 5850The threshold ratio (as a percentage) between instantiated fields and 5851the complete structure size. We say that if the ratio of the number 5852of bytes in instantiated fields to the number of bytes in the complete 5853structure exceeds this parameter, then block copies are not used. The 5854default is 75. 5855 5856@item max-crossjump-edges 5857The maximum number of incoming edges to consider for crossjumping. 5858The algorithm used by @option{-fcrossjumping} is @math{O(N^2)} in 5859the number of edges incoming to each block. Increasing values mean 5860more aggressive optimization, making the compile time increase with 5861probably small improvement in executable size. 5862 5863@item min-crossjump-insns 5864The minimum number of instructions which must be matched at the end 5865of two blocks before crossjumping will be performed on them. This 5866value is ignored in the case where all instructions in the block being 5867crossjumped from are matched. The default value is 5. 5868 5869@item max-grow-copy-bb-insns 5870The maximum code size expansion factor when copying basic blocks 5871instead of jumping. The expansion is relative to a jump instruction. 5872The default value is 8. 5873 5874@item max-goto-duplication-insns 5875The maximum number of instructions to duplicate to a block that jumps 5876to a computed goto. To avoid @math{O(N^2)} behavior in a number of 5877passes, GCC factors computed gotos early in the compilation process, 5878and unfactors them as late as possible. Only computed jumps at the 5879end of a basic blocks with no more than max-goto-duplication-insns are 5880unfactored. The default value is 8. 5881 5882@item max-delay-slot-insn-search 5883The maximum number of instructions to consider when looking for an 5884instruction to fill a delay slot. If more than this arbitrary number of 5885instructions is searched, the time savings from filling the delay slot 5886will be minimal so stop searching. Increasing values mean more 5887aggressive optimization, making the compile time increase with probably 5888small improvement in executable run time. 5889 5890@item max-delay-slot-live-search 5891When trying to fill delay slots, the maximum number of instructions to 5892consider when searching for a block with valid live register 5893information. Increasing this arbitrarily chosen value means more 5894aggressive optimization, increasing the compile time. This parameter 5895should be removed when the delay slot code is rewritten to maintain the 5896control-flow graph. 5897 5898@item max-gcse-memory 5899The approximate maximum amount of memory that will be allocated in 5900order to perform the global common subexpression elimination 5901optimization. If more memory than specified is required, the 5902optimization will not be done. 5903 5904@item max-gcse-passes 5905The maximum number of passes of GCSE to run. The default is 1. 5906 5907@item max-pending-list-length 5908The maximum number of pending dependencies scheduling will allow 5909before flushing the current state and starting over. Large functions 5910with few branches or calls can create excessively large lists which 5911needlessly consume memory and resources. 5912 5913@item max-inline-insns-single 5914Several parameters control the tree inliner used in gcc. 5915This number sets the maximum number of instructions (counted in GCC's 5916internal representation) in a single function that the tree inliner 5917will consider for inlining. This only affects functions declared 5918inline and methods implemented in a class declaration (C++). 5919The default value is 450. 5920 5921@item max-inline-insns-auto 5922When you use @option{-finline-functions} (included in @option{-O3}), 5923a lot of functions that would otherwise not be considered for inlining 5924by the compiler will be investigated. To those functions, a different 5925(more restrictive) limit compared to functions declared inline can 5926be applied. 5927The default value is 90. 5928 5929@item large-function-insns 5930The limit specifying really large functions. For functions larger than this 5931limit after inlining inlining is constrained by 5932@option{--param large-function-growth}. This parameter is useful primarily 5933to avoid extreme compilation time caused by non-linear algorithms used by the 5934backend. 5935This parameter is ignored when @option{-funit-at-a-time} is not used. 5936The default value is 2700. 5937 5938@item large-function-growth 5939Specifies maximal growth of large function caused by inlining in percents. 5940This parameter is ignored when @option{-funit-at-a-time} is not used. 5941The default value is 100 which limits large function growth to 2.0 times 5942the original size. 5943 5944@item large-unit-insns 5945The limit specifying large translation unit. Growth caused by inlining of 5946units larger than this limit is limited by @option{--param inline-unit-growth}. 5947For small units this might be too tight (consider unit consisting of function A 5948that is inline and B that just calls A three time. If B is small relative to 5949A, the growth of unit is 300\% and yet such inlining is very sane. For very 5950large units consisting of small inlininable functions however the overall unit 5951growth limit is needed to avoid exponential explosion of code size. Thus for 5952smaller units, the size is increased to @option{--param large-unit-insns} 5953before applying @option{--param inline-unit-growth}. The default is 10000 5954 5955@item inline-unit-growth 5956Specifies maximal overall growth of the compilation unit caused by inlining. 5957This parameter is ignored when @option{-funit-at-a-time} is not used. 5958The default value is 50 which limits unit growth to 1.5 times the original 5959size. 5960 5961@item max-inline-insns-recursive 5962@itemx max-inline-insns-recursive-auto 5963Specifies maximum number of instructions out-of-line copy of self recursive inline 5964function can grow into by performing recursive inlining. 5965 5966For functions declared inline @option{--param max-inline-insns-recursive} is 5967taken into account. For function not declared inline, recursive inlining 5968happens only when @option{-finline-functions} (included in @option{-O3}) is 5969enabled and @option{--param max-inline-insns-recursive-auto} is used. The 5970default value is 450. 5971 5972@item max-inline-recursive-depth 5973@itemx max-inline-recursive-depth-auto 5974Specifies maximum recursion depth used by the recursive inlining. 5975 5976For functions declared inline @option{--param max-inline-recursive-depth} is 5977taken into account. For function not declared inline, recursive inlining 5978happens only when @option{-finline-functions} (included in @option{-O3}) is 5979enabled and @option{--param max-inline-recursive-depth-auto} is used. The 5980default value is 450. 5981 5982@item min-inline-recursive-probability 5983Recursive inlining is profitable only for function having deep recursion 5984in average and can hurt for function having little recursion depth by 5985increasing the prologue size or complexity of function body to other 5986optimizers. 5987 5988When profile feedback is available (see @option{-fprofile-generate}) the actual 5989recursion depth can be guessed from probability that function will recurse via 5990given call expression. This parameter limits inlining only to call expression 5991whose probability exceeds given threshold (in percents). The default value is 599210. 5993 5994@item inline-call-cost 5995Specify cost of call instruction relative to simple arithmetics operations 5996(having cost of 1). Increasing this cost disqualifies inlining of non-leaf 5997functions and at the same time increases size of leaf function that is believed to 5998reduce function size by being inlined. In effect it increases amount of 5999inlining for code having large abstraction penalty (many functions that just 6000pass the arguments to other functions) and decrease inlining for code with low 6001abstraction penalty. The default value is 16. 6002 6003@item max-unrolled-insns 6004The maximum number of instructions that a loop should have if that loop 6005is unrolled, and if the loop is unrolled, it determines how many times 6006the loop code is unrolled. 6007 6008@item max-average-unrolled-insns 6009The maximum number of instructions biased by probabilities of their execution 6010that a loop should have if that loop is unrolled, and if the loop is unrolled, 6011it determines how many times the loop code is unrolled. 6012 6013@item max-unroll-times 6014The maximum number of unrollings of a single loop. 6015 6016@item max-peeled-insns 6017The maximum number of instructions that a loop should have if that loop 6018is peeled, and if the loop is peeled, it determines how many times 6019the loop code is peeled. 6020 6021@item max-peel-times 6022The maximum number of peelings of a single loop. 6023 6024@item max-completely-peeled-insns 6025The maximum number of insns of a completely peeled loop. 6026 6027@item max-completely-peel-times 6028The maximum number of iterations of a loop to be suitable for complete peeling. 6029 6030@item max-unswitch-insns 6031The maximum number of insns of an unswitched loop. 6032 6033@item max-unswitch-level 6034The maximum number of branches unswitched in a single loop. 6035 6036@item lim-expensive 6037The minimum cost of an expensive expression in the loop invariant motion. 6038 6039@item iv-consider-all-candidates-bound 6040Bound on number of candidates for induction variables below that 6041all candidates are considered for each use in induction variable 6042optimizations. Only the most relevant candidates are considered 6043if there are more candidates, to avoid quadratic time complexity. 6044 6045@item iv-max-considered-uses 6046The induction variable optimizations give up on loops that contain more 6047induction variable uses. 6048 6049@item iv-always-prune-cand-set-bound 6050If number of candidates in the set is smaller than this value, 6051we always try to remove unnecessary ivs from the set during its 6052optimization when a new iv is added to the set. 6053 6054@item scev-max-expr-size 6055Bound on size of expressions used in the scalar evolutions analyzer. 6056Large expressions slow the analyzer. 6057 6058@item vect-max-version-checks 6059The maximum number of runtime checks that can be performed when doing 6060loop versioning in the vectorizer. See option ftree-vect-loop-version 6061for more information. 6062 6063@item max-iterations-to-track 6064 6065The maximum number of iterations of a loop the brute force algorithm 6066for analysis of # of iterations of the loop tries to evaluate. 6067 6068@item hot-bb-count-fraction 6069Select fraction of the maximal count of repetitions of basic block in program 6070given basic block needs to have to be considered hot. 6071 6072@item hot-bb-frequency-fraction 6073Select fraction of the maximal frequency of executions of basic block in 6074function given basic block needs to have to be considered hot 6075 6076@item max-predicted-iterations 6077The maximum number of loop iterations we predict statically. This is useful 6078in cases where function contain single loop with known bound and other loop 6079with unknown. We predict the known number of iterations correctly, while 6080the unknown number of iterations average to roughly 10. This means that the 6081loop without bounds would appear artificially cold relative to the other one. 6082 6083@item tracer-dynamic-coverage 6084@itemx tracer-dynamic-coverage-feedback 6085 6086This value is used to limit superblock formation once the given percentage of 6087executed instructions is covered. This limits unnecessary code size 6088expansion. 6089 6090The @option{tracer-dynamic-coverage-feedback} is used only when profile 6091feedback is available. The real profiles (as opposed to statically estimated 6092ones) are much less balanced allowing the threshold to be larger value. 6093 6094@item tracer-max-code-growth 6095Stop tail duplication once code growth has reached given percentage. This is 6096rather hokey argument, as most of the duplicates will be eliminated later in 6097cross jumping, so it may be set to much higher values than is the desired code 6098growth. 6099 6100@item tracer-min-branch-ratio 6101 6102Stop reverse growth when the reverse probability of best edge is less than this 6103threshold (in percent). 6104 6105@item tracer-min-branch-ratio 6106@itemx tracer-min-branch-ratio-feedback 6107 6108Stop forward growth if the best edge do have probability lower than this 6109threshold. 6110 6111Similarly to @option{tracer-dynamic-coverage} two values are present, one for 6112compilation for profile feedback and one for compilation without. The value 6113for compilation with profile feedback needs to be more conservative (higher) in 6114order to make tracer effective. 6115 6116@item max-cse-path-length 6117 6118Maximum number of basic blocks on path that cse considers. The default is 10. 6119 6120@item max-cse-insns 6121The maximum instructions CSE process before flushing. The default is 1000. 6122 6123@item global-var-threshold 6124 6125Counts the number of function calls (@var{n}) and the number of 6126call-clobbered variables (@var{v}). If @var{n}x@var{v} is larger than this limit, a 6127single artificial variable will be created to represent all the 6128call-clobbered variables at function call sites. This artificial 6129variable will then be made to alias every call-clobbered variable. 6130(done as @code{int * size_t} on the host machine; beware overflow). 6131 6132@item max-aliased-vops 6133 6134Maximum number of virtual operands allowed to represent aliases 6135before triggering the alias grouping heuristic. Alias grouping 6136reduces compile times and memory consumption needed for aliasing at 6137the expense of precision loss in alias information. 6138 6139@item ggc-min-expand 6140 6141GCC uses a garbage collector to manage its own memory allocation. This 6142parameter specifies the minimum percentage by which the garbage 6143collector's heap should be allowed to expand between collections. 6144Tuning this may improve compilation speed; it has no effect on code 6145generation. 6146 6147The default is 30% + 70% * (RAM/1GB) with an upper bound of 100% when 6148RAM >= 1GB@. If @code{getrlimit} is available, the notion of "RAM" is 6149the smallest of actual RAM and @code{RLIMIT_DATA} or @code{RLIMIT_AS}. If 6150GCC is not able to calculate RAM on a particular platform, the lower 6151bound of 30% is used. Setting this parameter and 6152@option{ggc-min-heapsize} to zero causes a full collection to occur at 6153every opportunity. This is extremely slow, but can be useful for 6154debugging. 6155 6156@item ggc-min-heapsize 6157 6158Minimum size of the garbage collector's heap before it begins bothering 6159to collect garbage. The first collection occurs after the heap expands 6160by @option{ggc-min-expand}% beyond @option{ggc-min-heapsize}. Again, 6161tuning this may improve compilation speed, and has no effect on code 6162generation. 6163 6164The default is the smaller of RAM/8, RLIMIT_RSS, or a limit which 6165tries to ensure that RLIMIT_DATA or RLIMIT_AS are not exceeded, but 6166with a lower bound of 4096 (four megabytes) and an upper bound of 6167131072 (128 megabytes). If GCC is not able to calculate RAM on a 6168particular platform, the lower bound is used. Setting this parameter 6169very large effectively disables garbage collection. Setting this 6170parameter and @option{ggc-min-expand} to zero causes a full collection 6171to occur at every opportunity. 6172 6173@item max-reload-search-insns 6174The maximum number of instruction reload should look backward for equivalent 6175register. Increasing values mean more aggressive optimization, making the 6176compile time increase with probably slightly better performance. The default 6177value is 100. 6178 6179@item max-cselib-memory-locations 6180The maximum number of memory locations cselib should take into account. 6181Increasing values mean more aggressive optimization, making the compile time 6182increase with probably slightly better performance. The default value is 500. 6183 6184@item max-flow-memory-locations 6185Similar as @option{max-cselib-memory-locations} but for dataflow liveness. 6186The default value is 100. 6187 6188@item reorder-blocks-duplicate 6189@itemx reorder-blocks-duplicate-feedback 6190 6191Used by basic block reordering pass to decide whether to use unconditional 6192branch or duplicate the code on its destination. Code is duplicated when its 6193estimated size is smaller than this value multiplied by the estimated size of 6194unconditional jump in the hot spots of the program. 6195 6196The @option{reorder-block-duplicate-feedback} is used only when profile 6197feedback is available and may be set to higher values than 6198@option{reorder-block-duplicate} since information about the hot spots is more 6199accurate. 6200 6201@item max-sched-ready-insns 6202The maximum number of instructions ready to be issued the scheduler should 6203consider at any given time during the first scheduling pass. Increasing 6204values mean more thorough searches, making the compilation time increase 6205with probably little benefit. The default value is 100. 6206 6207@item max-sched-region-blocks 6208The maximum number of blocks in a region to be considered for 6209interblock scheduling. The default value is 10. 6210 6211@item max-sched-region-insns 6212The maximum number of insns in a region to be considered for 6213interblock scheduling. The default value is 100. 6214 6215@item min-spec-prob 6216The minimum probability (in percents) of reaching a source block 6217for interblock speculative scheduling. The default value is 40. 6218 6219@item max-sched-extend-regions-iters 6220The maximum number of iterations through CFG to extend regions. 62210 - disable region extension, 6222N - do at most N iterations. 6223The default value is 0. 6224 6225@item max-sched-insn-conflict-delay 6226The maximum conflict delay for an insn to be considered for speculative motion. 6227The default value is 3. 6228 6229@item sched-spec-prob-cutoff 6230The minimal probability of speculation success (in percents), so that 6231speculative insn will be scheduled. 6232The default value is 40. 6233 6234@item max-last-value-rtl 6235 6236The maximum size measured as number of RTLs that can be recorded in an expression 6237in combiner for a pseudo register as last known value of that register. The default 6238is 10000. 6239 6240@item integer-share-limit 6241Small integer constants can use a shared data structure, reducing the 6242compiler's memory usage and increasing its speed. This sets the maximum 6243value of a shared integer constant's. The default value is 256. 6244 6245@item min-virtual-mappings 6246Specifies the minimum number of virtual mappings in the incremental 6247SSA updater that should be registered to trigger the virtual mappings 6248heuristic defined by virtual-mappings-ratio. The default value is 6249100. 6250 6251@item virtual-mappings-ratio 6252If the number of virtual mappings is virtual-mappings-ratio bigger 6253than the number of virtual symbols to be updated, then the incremental 6254SSA updater switches to a full update for those symbols. The default 6255ratio is 3. 6256 6257@item ssp-buffer-size 6258The minimum size of buffers (i.e. arrays) that will receive stack smashing 6259protection when @option{-fstack-protection} is used. 6260 6261@item max-jump-thread-duplication-stmts 6262Maximum number of statements allowed in a block that needs to be 6263duplicated when threading jumps. 6264 6265@item max-fields-for-field-sensitive 6266Maximum number of fields in a structure we will treat in 6267a field sensitive manner during pointer analysis. 6268 6269@end table 6270@end table 6271 6272@node Preprocessor Options 6273@section Options Controlling the Preprocessor 6274@cindex preprocessor options 6275@cindex options, preprocessor 6276 6277These options control the C preprocessor, which is run on each C source 6278file before actual compilation. 6279 6280If you use the @option{-E} option, nothing is done except preprocessing. 6281Some of these options make sense only together with @option{-E} because 6282they cause the preprocessor output to be unsuitable for actual 6283compilation. 6284 6285@table @gcctabopt 6286@opindex Wp 6287You can use @option{-Wp,@var{option}} to bypass the compiler driver 6288and pass @var{option} directly through to the preprocessor. If 6289@var{option} contains commas, it is split into multiple options at the 6290commas. However, many options are modified, translated or interpreted 6291by the compiler driver before being passed to the preprocessor, and 6292@option{-Wp} forcibly bypasses this phase. The preprocessor's direct 6293interface is undocumented and subject to change, so whenever possible 6294you should avoid using @option{-Wp} and let the driver handle the 6295options instead. 6296 6297@item -Xpreprocessor @var{option} 6298@opindex preprocessor 6299Pass @var{option} as an option to the preprocessor. You can use this to 6300supply system-specific preprocessor options which GCC does not know how to 6301recognize. 6302 6303If you want to pass an option that takes an argument, you must use 6304@option{-Xpreprocessor} twice, once for the option and once for the argument. 6305@end table 6306 6307@include cppopts.texi 6308 6309@node Assembler Options 6310@section Passing Options to the Assembler 6311 6312@c prevent bad page break with this line 6313You can pass options to the assembler. 6314 6315@table @gcctabopt 6316@item -Wa,@var{option} 6317@opindex Wa 6318Pass @var{option} as an option to the assembler. If @var{option} 6319contains commas, it is split into multiple options at the commas. 6320 6321@item -Xassembler @var{option} 6322@opindex Xassembler 6323Pass @var{option} as an option to the assembler. You can use this to 6324supply system-specific assembler options which GCC does not know how to 6325recognize. 6326 6327If you want to pass an option that takes an argument, you must use 6328@option{-Xassembler} twice, once for the option and once for the argument. 6329 6330@end table 6331 6332@node Link Options 6333@section Options for Linking 6334@cindex link options 6335@cindex options, linking 6336 6337These options come into play when the compiler links object files into 6338an executable output file. They are meaningless if the compiler is 6339not doing a link step. 6340 6341@table @gcctabopt 6342@cindex file names 6343@item @var{object-file-name} 6344A file name that does not end in a special recognized suffix is 6345considered to name an object file or library. (Object files are 6346distinguished from libraries by the linker according to the file 6347contents.) If linking is done, these object files are used as input 6348to the linker. 6349 6350@item -c 6351@itemx -S 6352@itemx -E 6353@opindex c 6354@opindex S 6355@opindex E 6356If any of these options is used, then the linker is not run, and 6357object file names should not be used as arguments. @xref{Overall 6358Options}. 6359 6360@cindex Libraries 6361@item -l@var{library} 6362@itemx -l @var{library} 6363@opindex l 6364Search the library named @var{library} when linking. (The second 6365alternative with the library as a separate argument is only for 6366POSIX compliance and is not recommended.) 6367 6368It makes a difference where in the command you write this option; the 6369linker searches and processes libraries and object files in the order they 6370are specified. Thus, @samp{foo.o -lz bar.o} searches library @samp{z} 6371after file @file{foo.o} but before @file{bar.o}. If @file{bar.o} refers 6372to functions in @samp{z}, those functions may not be loaded. 6373 6374The linker searches a standard list of directories for the library, 6375which is actually a file named @file{lib@var{library}.a}. The linker 6376then uses this file as if it had been specified precisely by name. 6377 6378The directories searched include several standard system directories 6379plus any that you specify with @option{-L}. 6380 6381Normally the files found this way are library files---archive files 6382whose members are object files. The linker handles an archive file by 6383scanning through it for members which define symbols that have so far 6384been referenced but not defined. But if the file that is found is an 6385ordinary object file, it is linked in the usual fashion. The only 6386difference between using an @option{-l} option and specifying a file name 6387is that @option{-l} surrounds @var{library} with @samp{lib} and @samp{.a} 6388and searches several directories. 6389 6390@item -nostartfiles 6391@opindex nostartfiles 6392Do not use the standard system startup files when linking. 6393The standard system libraries are used normally, unless @option{-nostdlib} 6394or @option{-nodefaultlibs} is used. 6395 6396@item -nodefaultlibs 6397@opindex nodefaultlibs 6398Do not use the standard system libraries when linking. 6399Only the libraries you specify will be passed to the linker. 6400The standard startup files are used normally, unless @option{-nostartfiles} 6401is used. The compiler may generate calls to @code{memcmp}, 6402@code{memset}, @code{memcpy} and @code{memmove}. 6403These entries are usually resolved by entries in 6404libc. These entry points should be supplied through some other 6405mechanism when this option is specified. 6406 6407@item -nostdlib 6408@opindex nostdlib 6409Do not use the standard system startup files or libraries when linking. 6410No startup files and only the libraries you specify will be passed to 6411the linker. The compiler may generate calls to @code{memcmp}, @code{memset}, 6412@code{memcpy} and @code{memmove}. 6413These entries are usually resolved by entries in 6414libc. These entry points should be supplied through some other 6415mechanism when this option is specified. 6416 6417@cindex @option{-lgcc}, use with @option{-nostdlib} 6418@cindex @option{-nostdlib} and unresolved references 6419@cindex unresolved references and @option{-nostdlib} 6420@cindex @option{-lgcc}, use with @option{-nodefaultlibs} 6421@cindex @option{-nodefaultlibs} and unresolved references 6422@cindex unresolved references and @option{-nodefaultlibs} 6423One of the standard libraries bypassed by @option{-nostdlib} and 6424@option{-nodefaultlibs} is @file{libgcc.a}, a library of internal subroutines 6425that GCC uses to overcome shortcomings of particular machines, or special 6426needs for some languages. 6427(@xref{Interface,,Interfacing to GCC Output,gccint,GNU Compiler 6428Collection (GCC) Internals}, 6429for more discussion of @file{libgcc.a}.) 6430In most cases, you need @file{libgcc.a} even when you want to avoid 6431other standard libraries. In other words, when you specify @option{-nostdlib} 6432or @option{-nodefaultlibs} you should usually specify @option{-lgcc} as well. 6433This ensures that you have no unresolved references to internal GCC 6434library subroutines. (For example, @samp{__main}, used to ensure C++ 6435constructors will be called; @pxref{Collect2,,@code{collect2}, gccint, 6436GNU Compiler Collection (GCC) Internals}.) 6437 6438@item -pie 6439@opindex pie 6440Produce a position independent executable on targets which support it. 6441For predictable results, you must also specify the same set of options 6442that were used to generate code (@option{-fpie}, @option{-fPIE}, 6443or model suboptions) when you specify this option. 6444 6445@item -rdynamic 6446@opindex rdynamic 6447Pass the flag @option{-export-dynamic} to the ELF linker, on targets 6448that support it. This instructs the linker to add all symbols, not 6449only used ones, to the dynamic symbol table. This option is needed 6450for some uses of @code{dlopen} or to allow obtaining backtraces 6451from within a program. 6452 6453@item -s 6454@opindex s 6455Remove all symbol table and relocation information from the executable. 6456 6457@item -static 6458@opindex static 6459On systems that support dynamic linking, this prevents linking with the shared 6460libraries. On other systems, this option has no effect. 6461 6462@item -shared 6463@opindex shared 6464Produce a shared object which can then be linked with other objects to 6465form an executable. Not all systems support this option. For predictable 6466results, you must also specify the same set of options that were used to 6467generate code (@option{-fpic}, @option{-fPIC}, or model suboptions) 6468when you specify this option.@footnote{On some systems, @samp{gcc -shared} 6469needs to build supplementary stub code for constructors to work. On 6470multi-libbed systems, @samp{gcc -shared} must select the correct support 6471libraries to link against. Failing to supply the correct flags may lead 6472to subtle defects. Supplying them in cases where they are not necessary 6473is innocuous.} 6474 6475@item -shared-libgcc 6476@itemx -static-libgcc 6477@opindex shared-libgcc 6478@opindex static-libgcc 6479On systems that provide @file{libgcc} as a shared library, these options 6480force the use of either the shared or static version respectively. 6481If no shared version of @file{libgcc} was built when the compiler was 6482configured, these options have no effect. 6483 6484There are several situations in which an application should use the 6485shared @file{libgcc} instead of the static version. The most common 6486of these is when the application wishes to throw and catch exceptions 6487across different shared libraries. In that case, each of the libraries 6488as well as the application itself should use the shared @file{libgcc}. 6489 6490Therefore, the G++ and GCJ drivers automatically add 6491@option{-shared-libgcc} whenever you build a shared library or a main 6492executable, because C++ and Java programs typically use exceptions, so 6493this is the right thing to do. 6494 6495If, instead, you use the GCC driver to create shared libraries, you may 6496find that they will not always be linked with the shared @file{libgcc}. 6497If GCC finds, at its configuration time, that you have a non-GNU linker 6498or a GNU linker that does not support option @option{--eh-frame-hdr}, 6499it will link the shared version of @file{libgcc} into shared libraries 6500by default. Otherwise, it will take advantage of the linker and optimize 6501away the linking with the shared version of @file{libgcc}, linking with 6502the static version of libgcc by default. This allows exceptions to 6503propagate through such shared libraries, without incurring relocation 6504costs at library load time. 6505 6506However, if a library or main executable is supposed to throw or catch 6507exceptions, you must link it using the G++ or GCJ driver, as appropriate 6508for the languages used in the program, or using the option 6509@option{-shared-libgcc}, such that it is linked with the shared 6510@file{libgcc}. 6511 6512@item -symbolic 6513@opindex symbolic 6514Bind references to global symbols when building a shared object. Warn 6515about any unresolved references (unless overridden by the link editor 6516option @samp{-Xlinker -z -Xlinker defs}). Only a few systems support 6517this option. 6518 6519@item -Xlinker @var{option} 6520@opindex Xlinker 6521Pass @var{option} as an option to the linker. You can use this to 6522supply system-specific linker options which GCC does not know how to 6523recognize. 6524 6525If you want to pass an option that takes an argument, you must use 6526@option{-Xlinker} twice, once for the option and once for the argument. 6527For example, to pass @option{-assert definitions}, you must write 6528@samp{-Xlinker -assert -Xlinker definitions}. It does not work to write 6529@option{-Xlinker "-assert definitions"}, because this passes the entire 6530string as a single argument, which is not what the linker expects. 6531 6532@item -Wl,@var{option} 6533@opindex Wl 6534Pass @var{option} as an option to the linker. If @var{option} contains 6535commas, it is split into multiple options at the commas. 6536 6537@item -u @var{symbol} 6538@opindex u 6539Pretend the symbol @var{symbol} is undefined, to force linking of 6540library modules to define it. You can use @option{-u} multiple times with 6541different symbols to force loading of additional library modules. 6542@end table 6543 6544@node Directory Options 6545@section Options for Directory Search 6546@cindex directory options 6547@cindex options, directory search 6548@cindex search path 6549 6550These options specify directories to search for header files, for 6551libraries and for parts of the compiler: 6552 6553@table @gcctabopt 6554@item -I@var{dir} 6555@opindex I 6556Add the directory @var{dir} to the head of the list of directories to be 6557searched for header files. This can be used to override a system header 6558file, substituting your own version, since these directories are 6559searched before the system header file directories. However, you should 6560not use this option to add directories that contain vendor-supplied 6561system header files (use @option{-isystem} for that). If you use more than 6562one @option{-I} option, the directories are scanned in left-to-right 6563order; the standard system directories come after. 6564 6565If a standard system include directory, or a directory specified with 6566@option{-isystem}, is also specified with @option{-I}, the @option{-I} 6567option will be ignored. The directory will still be searched but as a 6568system directory at its normal position in the system include chain. 6569This is to ensure that GCC's procedure to fix buggy system headers and 6570the ordering for the include_next directive are not inadvertently changed. 6571If you really need to change the search order for system directories, 6572use the @option{-nostdinc} and/or @option{-isystem} options. 6573 6574@item -iquote@var{dir} 6575@opindex iquote 6576Add the directory @var{dir} to the head of the list of directories to 6577be searched for header files only for the case of @samp{#include 6578"@var{file}"}; they are not searched for @samp{#include <@var{file}>}, 6579otherwise just like @option{-I}. 6580 6581@item -L@var{dir} 6582@opindex L 6583Add directory @var{dir} to the list of directories to be searched 6584for @option{-l}. 6585 6586@item -B@var{prefix} 6587@opindex B 6588This option specifies where to find the executables, libraries, 6589include files, and data files of the compiler itself. 6590 6591The compiler driver program runs one or more of the subprograms 6592@file{cpp}, @file{cc1}, @file{as} and @file{ld}. It tries 6593@var{prefix} as a prefix for each program it tries to run, both with and 6594without @samp{@var{machine}/@var{version}/} (@pxref{Target Options}). 6595 6596For each subprogram to be run, the compiler driver first tries the 6597@option{-B} prefix, if any. If that name is not found, or if @option{-B} 6598was not specified, the driver tries two standard prefixes, which are 6599@file{/usr/lib/gcc/} and @file{/usr/local/lib/gcc/}. If neither of 6600those results in a file name that is found, the unmodified program 6601name is searched for using the directories specified in your 6602@env{PATH} environment variable. 6603 6604The compiler will check to see if the path provided by the @option{-B} 6605refers to a directory, and if necessary it will add a directory 6606separator character at the end of the path. 6607 6608@option{-B} prefixes that effectively specify directory names also apply 6609to libraries in the linker, because the compiler translates these 6610options into @option{-L} options for the linker. They also apply to 6611includes files in the preprocessor, because the compiler translates these 6612options into @option{-isystem} options for the preprocessor. In this case, 6613the compiler appends @samp{include} to the prefix. 6614 6615The run-time support file @file{libgcc.a} can also be searched for using 6616the @option{-B} prefix, if needed. If it is not found there, the two 6617standard prefixes above are tried, and that is all. The file is left 6618out of the link if it is not found by those means. 6619 6620Another way to specify a prefix much like the @option{-B} prefix is to use 6621the environment variable @env{GCC_EXEC_PREFIX}. @xref{Environment 6622Variables}. 6623 6624As a special kludge, if the path provided by @option{-B} is 6625@file{[dir/]stage@var{N}/}, where @var{N} is a number in the range 0 to 66269, then it will be replaced by @file{[dir/]include}. This is to help 6627with boot-strapping the compiler. 6628 6629@item -specs=@var{file} 6630@opindex specs 6631Process @var{file} after the compiler reads in the standard @file{specs} 6632file, in order to override the defaults that the @file{gcc} driver 6633program uses when determining what switches to pass to @file{cc1}, 6634@file{cc1plus}, @file{as}, @file{ld}, etc. More than one 6635@option{-specs=@var{file}} can be specified on the command line, and they 6636are processed in order, from left to right. 6637 6638@item --sysroot=@var{dir} 6639@opindex sysroot 6640Use @var{dir} as the logical root directory for headers and libraries. 6641For example, if the compiler would normally search for headers in 6642@file{/usr/include} and libraries in @file{/usr/lib}, it will instead 6643search @file{@var{dir}/usr/include} and @file{@var{dir}/usr/lib}. 6644 6645If you use both this option and the @option{-isysroot} option, then 6646the @option{--sysroot} option will apply to libraries, but the 6647@option{-isysroot} option will apply to header files. 6648 6649The GNU linker (beginning with version 2.16) has the necessary support 6650for this option. If your linker does not support this option, the 6651header file aspect of @option{--sysroot} will still work, but the 6652library aspect will not. 6653 6654@item -I- 6655@opindex I- 6656This option has been deprecated. Please use @option{-iquote} instead for 6657@option{-I} directories before the @option{-I-} and remove the @option{-I-}. 6658Any directories you specify with @option{-I} options before the @option{-I-} 6659option are searched only for the case of @samp{#include "@var{file}"}; 6660they are not searched for @samp{#include <@var{file}>}. 6661 6662If additional directories are specified with @option{-I} options after 6663the @option{-I-}, these directories are searched for all @samp{#include} 6664directives. (Ordinarily @emph{all} @option{-I} directories are used 6665this way.) 6666 6667In addition, the @option{-I-} option inhibits the use of the current 6668directory (where the current input file came from) as the first search 6669directory for @samp{#include "@var{file}"}. There is no way to 6670override this effect of @option{-I-}. With @option{-I.} you can specify 6671searching the directory which was current when the compiler was 6672invoked. That is not exactly the same as what the preprocessor does 6673by default, but it is often satisfactory. 6674 6675@option{-I-} does not inhibit the use of the standard system directories 6676for header files. Thus, @option{-I-} and @option{-nostdinc} are 6677independent. 6678@end table 6679 6680@c man end 6681 6682@node Spec Files 6683@section Specifying subprocesses and the switches to pass to them 6684@cindex Spec Files 6685 6686@command{gcc} is a driver program. It performs its job by invoking a 6687sequence of other programs to do the work of compiling, assembling and 6688linking. GCC interprets its command-line parameters and uses these to 6689deduce which programs it should invoke, and which command-line options 6690it ought to place on their command lines. This behavior is controlled 6691by @dfn{spec strings}. In most cases there is one spec string for each 6692program that GCC can invoke, but a few programs have multiple spec 6693strings to control their behavior. The spec strings built into GCC can 6694be overridden by using the @option{-specs=} command-line switch to specify 6695a spec file. 6696 6697@dfn{Spec files} are plaintext files that are used to construct spec 6698strings. They consist of a sequence of directives separated by blank 6699lines. The type of directive is determined by the first non-whitespace 6700character on the line and it can be one of the following: 6701 6702@table @code 6703@item %@var{command} 6704Issues a @var{command} to the spec file processor. The commands that can 6705appear here are: 6706 6707@table @code 6708@item %include <@var{file}> 6709@cindex %include 6710Search for @var{file} and insert its text at the current point in the 6711specs file. 6712 6713@item %include_noerr <@var{file}> 6714@cindex %include_noerr 6715Just like @samp{%include}, but do not generate an error message if the include 6716file cannot be found. 6717 6718@item %rename @var{old_name} @var{new_name} 6719@cindex %rename 6720Rename the spec string @var{old_name} to @var{new_name}. 6721 6722@end table 6723 6724@item *[@var{spec_name}]: 6725This tells the compiler to create, override or delete the named spec 6726string. All lines after this directive up to the next directive or 6727blank line are considered to be the text for the spec string. If this 6728results in an empty string then the spec will be deleted. (Or, if the 6729spec did not exist, then nothing will happened.) Otherwise, if the spec 6730does not currently exist a new spec will be created. If the spec does 6731exist then its contents will be overridden by the text of this 6732directive, unless the first character of that text is the @samp{+} 6733character, in which case the text will be appended to the spec. 6734 6735@item [@var{suffix}]: 6736Creates a new @samp{[@var{suffix}] spec} pair. All lines after this directive 6737and up to the next directive or blank line are considered to make up the 6738spec string for the indicated suffix. When the compiler encounters an 6739input file with the named suffix, it will processes the spec string in 6740order to work out how to compile that file. For example: 6741 6742@smallexample 6743.ZZ: 6744z-compile -input %i 6745@end smallexample 6746 6747This says that any input file whose name ends in @samp{.ZZ} should be 6748passed to the program @samp{z-compile}, which should be invoked with the 6749command-line switch @option{-input} and with the result of performing the 6750@samp{%i} substitution. (See below.) 6751 6752As an alternative to providing a spec string, the text that follows a 6753suffix directive can be one of the following: 6754 6755@table @code 6756@item @@@var{language} 6757This says that the suffix is an alias for a known @var{language}. This is 6758similar to using the @option{-x} command-line switch to GCC to specify a 6759language explicitly. For example: 6760 6761@smallexample 6762.ZZ: 6763@@c++ 6764@end smallexample 6765 6766Says that .ZZ files are, in fact, C++ source files. 6767 6768@item #@var{name} 6769This causes an error messages saying: 6770 6771@smallexample 6772@var{name} compiler not installed on this system. 6773@end smallexample 6774@end table 6775 6776GCC already has an extensive list of suffixes built into it. 6777This directive will add an entry to the end of the list of suffixes, but 6778since the list is searched from the end backwards, it is effectively 6779possible to override earlier entries using this technique. 6780 6781@end table 6782 6783GCC has the following spec strings built into it. Spec files can 6784override these strings or create their own. Note that individual 6785targets can also add their own spec strings to this list. 6786 6787@smallexample 6788asm Options to pass to the assembler 6789asm_final Options to pass to the assembler post-processor 6790cpp Options to pass to the C preprocessor 6791cc1 Options to pass to the C compiler 6792cc1plus Options to pass to the C++ compiler 6793endfile Object files to include at the end of the link 6794link Options to pass to the linker 6795lib Libraries to include on the command line to the linker 6796libgcc Decides which GCC support library to pass to the linker 6797linker Sets the name of the linker 6798predefines Defines to be passed to the C preprocessor 6799signed_char Defines to pass to CPP to say whether @code{char} is signed 6800 by default 6801startfile Object files to include at the start of the link 6802@end smallexample 6803 6804Here is a small example of a spec file: 6805 6806@smallexample 6807%rename lib old_lib 6808 6809*lib: 6810--start-group -lgcc -lc -leval1 --end-group %(old_lib) 6811@end smallexample 6812 6813This example renames the spec called @samp{lib} to @samp{old_lib} and 6814then overrides the previous definition of @samp{lib} with a new one. 6815The new definition adds in some extra command-line options before 6816including the text of the old definition. 6817 6818@dfn{Spec strings} are a list of command-line options to be passed to their 6819corresponding program. In addition, the spec strings can contain 6820@samp{%}-prefixed sequences to substitute variable text or to 6821conditionally insert text into the command line. Using these constructs 6822it is possible to generate quite complex command lines. 6823 6824Here is a table of all defined @samp{%}-sequences for spec 6825strings. Note that spaces are not generated automatically around the 6826results of expanding these sequences. Therefore you can concatenate them 6827together or combine them with constant text in a single argument. 6828 6829@table @code 6830@item %% 6831Substitute one @samp{%} into the program name or argument. 6832 6833@item %i 6834Substitute the name of the input file being processed. 6835 6836@item %b 6837Substitute the basename of the input file being processed. 6838This is the substring up to (and not including) the last period 6839and not including the directory. 6840 6841@item %B 6842This is the same as @samp{%b}, but include the file suffix (text after 6843the last period). 6844 6845@item %d 6846Marks the argument containing or following the @samp{%d} as a 6847temporary file name, so that that file will be deleted if GCC exits 6848successfully. Unlike @samp{%g}, this contributes no text to the 6849argument. 6850 6851@item %g@var{suffix} 6852Substitute a file name that has suffix @var{suffix} and is chosen 6853once per compilation, and mark the argument in the same way as 6854@samp{%d}. To reduce exposure to denial-of-service attacks, the file 6855name is now chosen in a way that is hard to predict even when previously 6856chosen file names are known. For example, @samp{%g.s @dots{} %g.o @dots{} %g.s} 6857might turn into @samp{ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s}. @var{suffix} matches 6858the regexp @samp{[.A-Za-z]*} or the special string @samp{%O}, which is 6859treated exactly as if @samp{%O} had been preprocessed. Previously, @samp{%g} 6860was simply substituted with a file name chosen once per compilation, 6861without regard to any appended suffix (which was therefore treated 6862just like ordinary text), making such attacks more likely to succeed. 6863 6864@item %u@var{suffix} 6865Like @samp{%g}, but generates a new temporary file name even if 6866@samp{%u@var{suffix}} was already seen. 6867 6868@item %U@var{suffix} 6869Substitutes the last file name generated with @samp{%u@var{suffix}}, generating a 6870new one if there is no such last file name. In the absence of any 6871@samp{%u@var{suffix}}, this is just like @samp{%g@var{suffix}}, except they don't share 6872the same suffix @emph{space}, so @samp{%g.s @dots{} %U.s @dots{} %g.s @dots{} %U.s} 6873would involve the generation of two distinct file names, one 6874for each @samp{%g.s} and another for each @samp{%U.s}. Previously, @samp{%U} was 6875simply substituted with a file name chosen for the previous @samp{%u}, 6876without regard to any appended suffix. 6877 6878@item %j@var{suffix} 6879Substitutes the name of the @code{HOST_BIT_BUCKET}, if any, and if it is 6880writable, and if save-temps is off; otherwise, substitute the name 6881of a temporary file, just like @samp{%u}. This temporary file is not 6882meant for communication between processes, but rather as a junk 6883disposal mechanism. 6884 6885@item %|@var{suffix} 6886@itemx %m@var{suffix} 6887Like @samp{%g}, except if @option{-pipe} is in effect. In that case 6888@samp{%|} substitutes a single dash and @samp{%m} substitutes nothing at 6889all. These are the two most common ways to instruct a program that it 6890should read from standard input or write to standard output. If you 6891need something more elaborate you can use an @samp{%@{pipe:@code{X}@}} 6892construct: see for example @file{f/lang-specs.h}. 6893 6894@item %.@var{SUFFIX} 6895Substitutes @var{.SUFFIX} for the suffixes of a matched switch's args 6896when it is subsequently output with @samp{%*}. @var{SUFFIX} is 6897terminated by the next space or %. 6898 6899@item %w 6900Marks the argument containing or following the @samp{%w} as the 6901designated output file of this compilation. This puts the argument 6902into the sequence of arguments that @samp{%o} will substitute later. 6903 6904@item %o 6905Substitutes the names of all the output files, with spaces 6906automatically placed around them. You should write spaces 6907around the @samp{%o} as well or the results are undefined. 6908@samp{%o} is for use in the specs for running the linker. 6909Input files whose names have no recognized suffix are not compiled 6910at all, but they are included among the output files, so they will 6911be linked. 6912 6913@item %O 6914Substitutes the suffix for object files. Note that this is 6915handled specially when it immediately follows @samp{%g, %u, or %U}, 6916because of the need for those to form complete file names. The 6917handling is such that @samp{%O} is treated exactly as if it had already 6918been substituted, except that @samp{%g, %u, and %U} do not currently 6919support additional @var{suffix} characters following @samp{%O} as they would 6920following, for example, @samp{.o}. 6921 6922@item %p 6923Substitutes the standard macro predefinitions for the 6924current target machine. Use this when running @code{cpp}. 6925 6926@item %P 6927Like @samp{%p}, but puts @samp{__} before and after the name of each 6928predefined macro, except for macros that start with @samp{__} or with 6929@samp{_@var{L}}, where @var{L} is an uppercase letter. This is for ISO 6930C@. 6931 6932@item %I 6933Substitute any of @option{-iprefix} (made from @env{GCC_EXEC_PREFIX}), 6934@option{-isysroot} (made from @env{TARGET_SYSTEM_ROOT}), 6935@option{-isystem} (made from @env{COMPILER_PATH} and @option{-B} options) 6936and @option{-imultilib} as necessary. 6937 6938@item %s 6939Current argument is the name of a library or startup file of some sort. 6940Search for that file in a standard list of directories and substitute 6941the full name found. 6942 6943@item %e@var{str} 6944Print @var{str} as an error message. @var{str} is terminated by a newline. 6945Use this when inconsistent options are detected. 6946 6947@item %(@var{name}) 6948Substitute the contents of spec string @var{name} at this point. 6949 6950@item %[@var{name}] 6951Like @samp{%(@dots{})} but put @samp{__} around @option{-D} arguments. 6952 6953@item %x@{@var{option}@} 6954Accumulate an option for @samp{%X}. 6955 6956@item %X 6957Output the accumulated linker options specified by @option{-Wl} or a @samp{%x} 6958spec string. 6959 6960@item %Y 6961Output the accumulated assembler options specified by @option{-Wa}. 6962 6963@item %Z 6964Output the accumulated preprocessor options specified by @option{-Wp}. 6965 6966@item %a 6967Process the @code{asm} spec. This is used to compute the 6968switches to be passed to the assembler. 6969 6970@item %A 6971Process the @code{asm_final} spec. This is a spec string for 6972passing switches to an assembler post-processor, if such a program is 6973needed. 6974 6975@item %l 6976Process the @code{link} spec. This is the spec for computing the 6977command line passed to the linker. Typically it will make use of the 6978@samp{%L %G %S %D and %E} sequences. 6979 6980@item %D 6981Dump out a @option{-L} option for each directory that GCC believes might 6982contain startup files. If the target supports multilibs then the 6983current multilib directory will be prepended to each of these paths. 6984 6985@item %L 6986Process the @code{lib} spec. This is a spec string for deciding which 6987libraries should be included on the command line to the linker. 6988 6989@item %G 6990Process the @code{libgcc} spec. This is a spec string for deciding 6991which GCC support library should be included on the command line to the linker. 6992 6993@item %S 6994Process the @code{startfile} spec. This is a spec for deciding which 6995object files should be the first ones passed to the linker. Typically 6996this might be a file named @file{crt0.o}. 6997 6998@item %E 6999Process the @code{endfile} spec. This is a spec string that specifies 7000the last object files that will be passed to the linker. 7001 7002@item %C 7003Process the @code{cpp} spec. This is used to construct the arguments 7004to be passed to the C preprocessor. 7005 7006@item %1 7007Process the @code{cc1} spec. This is used to construct the options to be 7008passed to the actual C compiler (@samp{cc1}). 7009 7010@item %2 7011Process the @code{cc1plus} spec. This is used to construct the options to be 7012passed to the actual C++ compiler (@samp{cc1plus}). 7013 7014@item %* 7015Substitute the variable part of a matched option. See below. 7016Note that each comma in the substituted string is replaced by 7017a single space. 7018 7019@item %<@code{S} 7020Remove all occurrences of @code{-S} from the command line. Note---this 7021command is position dependent. @samp{%} commands in the spec string 7022before this one will see @code{-S}, @samp{%} commands in the spec string 7023after this one will not. 7024 7025@item %:@var{function}(@var{args}) 7026Call the named function @var{function}, passing it @var{args}. 7027@var{args} is first processed as a nested spec string, then split 7028into an argument vector in the usual fashion. The function returns 7029a string which is processed as if it had appeared literally as part 7030of the current spec. 7031 7032The following built-in spec functions are provided: 7033 7034@table @code 7035@item @code{if-exists} 7036The @code{if-exists} spec function takes one argument, an absolute 7037pathname to a file. If the file exists, @code{if-exists} returns the 7038pathname. Here is a small example of its usage: 7039 7040@smallexample 7041*startfile: 7042crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s 7043@end smallexample 7044 7045@item @code{if-exists-else} 7046The @code{if-exists-else} spec function is similar to the @code{if-exists} 7047spec function, except that it takes two arguments. The first argument is 7048an absolute pathname to a file. If the file exists, @code{if-exists-else} 7049returns the pathname. If it does not exist, it returns the second argument. 7050This way, @code{if-exists-else} can be used to select one file or another, 7051based on the existence of the first. Here is a small example of its usage: 7052 7053@smallexample 7054*startfile: 7055crt0%O%s %:if-exists(crti%O%s) \ 7056%:if-exists-else(crtbeginT%O%s crtbegin%O%s) 7057@end smallexample 7058 7059@item @code{replace-outfile} 7060The @code{replace-outfile} spec function takes two arguments. It looks for the 7061first argument in the outfiles array and replaces it with the second argument. Here 7062is a small example of its usage: 7063 7064@smallexample 7065%@{static|static-libgcc|static-libstdc++:%:replace-outfile(-lstdc++ \ 7066libstdc++.a%s)@} 7067 7068@end smallexample 7069 7070@end table 7071 7072@item %@{@code{S}@} 7073Substitutes the @code{-S} switch, if that switch was given to GCC@. 7074If that switch was not specified, this substitutes nothing. Note that 7075the leading dash is omitted when specifying this option, and it is 7076automatically inserted if the substitution is performed. Thus the spec 7077string @samp{%@{foo@}} would match the command-line option @option{-foo} 7078and would output the command line option @option{-foo}. 7079 7080@item %W@{@code{S}@} 7081Like %@{@code{S}@} but mark last argument supplied within as a file to be 7082deleted on failure. 7083 7084@item %@{@code{S}*@} 7085Substitutes all the switches specified to GCC whose names start 7086with @code{-S}, but which also take an argument. This is used for 7087switches like @option{-o}, @option{-D}, @option{-I}, etc. 7088GCC considers @option{-o foo} as being 7089one switch whose names starts with @samp{o}. %@{o*@} would substitute this 7090text, including the space. Thus two arguments would be generated. 7091 7092@item %@{@code{S}*&@code{T}*@} 7093Like %@{@code{S}*@}, but preserve order of @code{S} and @code{T} options 7094(the order of @code{S} and @code{T} in the spec is not significant). 7095There can be any number of ampersand-separated variables; for each the 7096wild card is optional. Useful for CPP as @samp{%@{D*&U*&A*@}}. 7097 7098@item %@{@code{S}:@code{X}@} 7099Substitutes @code{X}, if the @samp{-S} switch was given to GCC@. 7100 7101@item %@{!@code{S}:@code{X}@} 7102Substitutes @code{X}, if the @samp{-S} switch was @emph{not} given to GCC@. 7103 7104@item %@{@code{S}*:@code{X}@} 7105Substitutes @code{X} if one or more switches whose names start with 7106@code{-S} are specified to GCC@. Normally @code{X} is substituted only 7107once, no matter how many such switches appeared. However, if @code{%*} 7108appears somewhere in @code{X}, then @code{X} will be substituted once 7109for each matching switch, with the @code{%*} replaced by the part of 7110that switch that matched the @code{*}. 7111 7112@item %@{.@code{S}:@code{X}@} 7113Substitutes @code{X}, if processing a file with suffix @code{S}. 7114 7115@item %@{!.@code{S}:@code{X}@} 7116Substitutes @code{X}, if @emph{not} processing a file with suffix @code{S}. 7117 7118@item %@{@code{S}|@code{P}:@code{X}@} 7119Substitutes @code{X} if either @code{-S} or @code{-P} was given to GCC@. 7120This may be combined with @samp{!}, @samp{.}, and @code{*} sequences as well, 7121although they have a stronger binding than the @samp{|}. If @code{%*} 7122appears in @code{X}, all of the alternatives must be starred, and only 7123the first matching alternative is substituted. 7124 7125For example, a spec string like this: 7126 7127@smallexample 7128%@{.c:-foo@} %@{!.c:-bar@} %@{.c|d:-baz@} %@{!.c|d:-boggle@} 7129@end smallexample 7130 7131will output the following command-line options from the following input 7132command-line options: 7133 7134@smallexample 7135fred.c -foo -baz 7136jim.d -bar -boggle 7137-d fred.c -foo -baz -boggle 7138-d jim.d -bar -baz -boggle 7139@end smallexample 7140 7141@item %@{S:X; T:Y; :D@} 7142 7143If @code{S} was given to GCC, substitutes @code{X}; else if @code{T} was 7144given to GCC, substitutes @code{Y}; else substitutes @code{D}. There can 7145be as many clauses as you need. This may be combined with @code{.}, 7146@code{!}, @code{|}, and @code{*} as needed. 7147 7148 7149@end table 7150 7151The conditional text @code{X} in a %@{@code{S}:@code{X}@} or similar 7152construct may contain other nested @samp{%} constructs or spaces, or 7153even newlines. They are processed as usual, as described above. 7154Trailing white space in @code{X} is ignored. White space may also 7155appear anywhere on the left side of the colon in these constructs, 7156except between @code{.} or @code{*} and the corresponding word. 7157 7158The @option{-O}, @option{-f}, @option{-m}, and @option{-W} switches are 7159handled specifically in these constructs. If another value of 7160@option{-O} or the negated form of a @option{-f}, @option{-m}, or 7161@option{-W} switch is found later in the command line, the earlier 7162switch value is ignored, except with @{@code{S}*@} where @code{S} is 7163just one letter, which passes all matching options. 7164 7165The character @samp{|} at the beginning of the predicate text is used to 7166indicate that a command should be piped to the following command, but 7167only if @option{-pipe} is specified. 7168 7169It is built into GCC which switches take arguments and which do not. 7170(You might think it would be useful to generalize this to allow each 7171compiler's spec to say which switches take arguments. But this cannot 7172be done in a consistent fashion. GCC cannot even decide which input 7173files have been specified without knowing which switches take arguments, 7174and it must know which input files to compile in order to tell which 7175compilers to run). 7176 7177GCC also knows implicitly that arguments starting in @option{-l} are to be 7178treated as compiler output files, and passed to the linker in their 7179proper position among the other output files. 7180 7181@c man begin OPTIONS 7182 7183@node Target Options 7184@section Specifying Target Machine and Compiler Version 7185@cindex target options 7186@cindex cross compiling 7187@cindex specifying machine version 7188@cindex specifying compiler version and target machine 7189@cindex compiler version, specifying 7190@cindex target machine, specifying 7191 7192The usual way to run GCC is to run the executable called @file{gcc}, or 7193@file{<machine>-gcc} when cross-compiling, or 7194@file{<machine>-gcc-<version>} to run a version other than the one that 7195was installed last. Sometimes this is inconvenient, so GCC provides 7196options that will switch to another cross-compiler or version. 7197 7198@table @gcctabopt 7199@item -b @var{machine} 7200@opindex b 7201The argument @var{machine} specifies the target machine for compilation. 7202 7203The value to use for @var{machine} is the same as was specified as the 7204machine type when configuring GCC as a cross-compiler. For 7205example, if a cross-compiler was configured with @samp{configure 7206arm-elf}, meaning to compile for an arm processor with elf binaries, 7207then you would specify @option{-b arm-elf} to run that cross compiler. 7208Because there are other options beginning with @option{-b}, the 7209configuration must contain a hyphen. 7210 7211@item -V @var{version} 7212@opindex V 7213The argument @var{version} specifies which version of GCC to run. 7214This is useful when multiple versions are installed. For example, 7215@var{version} might be @samp{4.0}, meaning to run GCC version 4.0. 7216@end table 7217 7218The @option{-V} and @option{-b} options work by running the 7219@file{<machine>-gcc-<version>} executable, so there's no real reason to 7220use them if you can just run that directly. 7221 7222@node Submodel Options 7223@section Hardware Models and Configurations 7224@cindex submodel options 7225@cindex specifying hardware config 7226@cindex hardware models and configurations, specifying 7227@cindex machine dependent options 7228 7229Earlier we discussed the standard option @option{-b} which chooses among 7230different installed compilers for completely different target 7231machines, such as VAX vs.@: 68000 vs.@: 80386. 7232 7233In addition, each of these target machine types can have its own 7234special options, starting with @samp{-m}, to choose among various 7235hardware models or configurations---for example, 68010 vs 68020, 7236floating coprocessor or none. A single installed version of the 7237compiler can compile for any model or configuration, according to the 7238options specified. 7239 7240Some configurations of the compiler also support additional special 7241options, usually for compatibility with other compilers on the same 7242platform. 7243 7244@c This list is ordered alphanumerically by subsection name. 7245@c It should be the same order and spelling as these options are listed 7246@c in Machine Dependent Options 7247 7248@menu 7249* ARC Options:: 7250* ARM Options:: 7251* AVR Options:: 7252* Blackfin Options:: 7253* CRIS Options:: 7254* CRX Options:: 7255* Darwin Options:: 7256* DEC Alpha Options:: 7257* DEC Alpha/VMS Options:: 7258* FRV Options:: 7259* GNU/Linux Options:: 7260* H8/300 Options:: 7261* HPPA Options:: 7262* i386 and x86-64 Options:: 7263* IA-64 Options:: 7264* M32C Options:: 7265* M32R/D Options:: 7266* M680x0 Options:: 7267* M68hc1x Options:: 7268* MCore Options:: 7269* MIPS Options:: 7270* MMIX Options:: 7271* MN10300 Options:: 7272* MT Options:: 7273* PDP-11 Options:: 7274* PowerPC Options:: 7275* RS/6000 and PowerPC Options:: 7276* S/390 and zSeries Options:: 7277* Score Options:: 7278* SH Options:: 7279* SPARC Options:: 7280* System V Options:: 7281* TMS320C3x/C4x Options:: 7282* V850 Options:: 7283* VAX Options:: 7284* x86-64 Options:: 7285* Xstormy16 Options:: 7286* Xtensa Options:: 7287* zSeries Options:: 7288@end menu 7289 7290@node ARC Options 7291@subsection ARC Options 7292@cindex ARC Options 7293 7294These options are defined for ARC implementations: 7295 7296@table @gcctabopt 7297@item -EL 7298@opindex EL 7299Compile code for little endian mode. This is the default. 7300 7301@item -EB 7302@opindex EB 7303Compile code for big endian mode. 7304 7305@item -mmangle-cpu 7306@opindex mmangle-cpu 7307Prepend the name of the cpu to all public symbol names. 7308In multiple-processor systems, there are many ARC variants with different 7309instruction and register set characteristics. This flag prevents code 7310compiled for one cpu to be linked with code compiled for another. 7311No facility exists for handling variants that are ``almost identical''. 7312This is an all or nothing option. 7313 7314@item -mcpu=@var{cpu} 7315@opindex mcpu 7316Compile code for ARC variant @var{cpu}. 7317Which variants are supported depend on the configuration. 7318All variants support @option{-mcpu=base}, this is the default. 7319 7320@item -mtext=@var{text-section} 7321@itemx -mdata=@var{data-section} 7322@itemx -mrodata=@var{readonly-data-section} 7323@opindex mtext 7324@opindex mdata 7325@opindex mrodata 7326Put functions, data, and readonly data in @var{text-section}, 7327@var{data-section}, and @var{readonly-data-section} respectively 7328by default. This can be overridden with the @code{section} attribute. 7329@xref{Variable Attributes}. 7330 7331@end table 7332 7333@node ARM Options 7334@subsection ARM Options 7335@cindex ARM options 7336 7337These @samp{-m} options are defined for Advanced RISC Machines (ARM) 7338architectures: 7339 7340@table @gcctabopt 7341@item -mabi=@var{name} 7342@opindex mabi 7343Generate code for the specified ABI@. Permissible values are: @samp{apcs-gnu}, 7344@samp{atpcs}, @samp{aapcs}, @samp{aapcs-linux} and @samp{iwmmxt}. 7345 7346@item -mapcs-frame 7347@opindex mapcs-frame 7348Generate a stack frame that is compliant with the ARM Procedure Call 7349Standard for all functions, even if this is not strictly necessary for 7350correct execution of the code. Specifying @option{-fomit-frame-pointer} 7351with this option will cause the stack frames not to be generated for 7352leaf functions. The default is @option{-mno-apcs-frame}. 7353 7354@item -mapcs 7355@opindex mapcs 7356This is a synonym for @option{-mapcs-frame}. 7357 7358@ignore 7359@c not currently implemented 7360@item -mapcs-stack-check 7361@opindex mapcs-stack-check 7362Generate code to check the amount of stack space available upon entry to 7363every function (that actually uses some stack space). If there is 7364insufficient space available then either the function 7365@samp{__rt_stkovf_split_small} or @samp{__rt_stkovf_split_big} will be 7366called, depending upon the amount of stack space required. The run time 7367system is required to provide these functions. The default is 7368@option{-mno-apcs-stack-check}, since this produces smaller code. 7369 7370@c not currently implemented 7371@item -mapcs-float 7372@opindex mapcs-float 7373Pass floating point arguments using the float point registers. This is 7374one of the variants of the APCS@. This option is recommended if the 7375target hardware has a floating point unit or if a lot of floating point 7376arithmetic is going to be performed by the code. The default is 7377@option{-mno-apcs-float}, since integer only code is slightly increased in 7378size if @option{-mapcs-float} is used. 7379 7380@c not currently implemented 7381@item -mapcs-reentrant 7382@opindex mapcs-reentrant 7383Generate reentrant, position independent code. The default is 7384@option{-mno-apcs-reentrant}. 7385@end ignore 7386 7387@item -mthumb-interwork 7388@opindex mthumb-interwork 7389Generate code which supports calling between the ARM and Thumb 7390instruction sets. Without this option the two instruction sets cannot 7391be reliably used inside one program. The default is 7392@option{-mno-thumb-interwork}, since slightly larger code is generated 7393when @option{-mthumb-interwork} is specified. 7394 7395@item -mno-sched-prolog 7396@opindex mno-sched-prolog 7397Prevent the reordering of instructions in the function prolog, or the 7398merging of those instruction with the instructions in the function's 7399body. This means that all functions will start with a recognizable set 7400of instructions (or in fact one of a choice from a small set of 7401different function prologues), and this information can be used to 7402locate the start if functions inside an executable piece of code. The 7403default is @option{-msched-prolog}. 7404 7405@item -mhard-float 7406@opindex mhard-float 7407Generate output containing floating point instructions. This is the 7408default. 7409 7410@item -msoft-float 7411@opindex msoft-float 7412Generate output containing library calls for floating point. 7413@strong{Warning:} the requisite libraries are not available for all ARM 7414targets. Normally the facilities of the machine's usual C compiler are 7415used, but this cannot be done directly in cross-compilation. You must make 7416your own arrangements to provide suitable library functions for 7417cross-compilation. 7418 7419@option{-msoft-float} changes the calling convention in the output file; 7420therefore, it is only useful if you compile @emph{all} of a program with 7421this option. In particular, you need to compile @file{libgcc.a}, the 7422library that comes with GCC, with @option{-msoft-float} in order for 7423this to work. 7424 7425@item -mfloat-abi=@var{name} 7426@opindex mfloat-abi 7427Specifies which ABI to use for floating point values. Permissible values 7428are: @samp{soft}, @samp{softfp} and @samp{hard}. 7429 7430@samp{soft} and @samp{hard} are equivalent to @option{-msoft-float} 7431and @option{-mhard-float} respectively. @samp{softfp} allows the generation 7432of floating point instructions, but still uses the soft-float calling 7433conventions. 7434 7435@item -mlittle-endian 7436@opindex mlittle-endian 7437Generate code for a processor running in little-endian mode. This is 7438the default for all standard configurations. 7439 7440@item -mbig-endian 7441@opindex mbig-endian 7442Generate code for a processor running in big-endian mode; the default is 7443to compile code for a little-endian processor. 7444 7445@item -mwords-little-endian 7446@opindex mwords-little-endian 7447This option only applies when generating code for big-endian processors. 7448Generate code for a little-endian word order but a big-endian byte 7449order. That is, a byte order of the form @samp{32107654}. Note: this 7450option should only be used if you require compatibility with code for 7451big-endian ARM processors generated by versions of the compiler prior to 74522.8. 7453 7454@item -mcpu=@var{name} 7455@opindex mcpu 7456This specifies the name of the target ARM processor. GCC uses this name 7457to determine what kind of instructions it can emit when generating 7458assembly code. Permissible names are: @samp{arm2}, @samp{arm250}, 7459@samp{arm3}, @samp{arm6}, @samp{arm60}, @samp{arm600}, @samp{arm610}, 7460@samp{arm620}, @samp{arm7}, @samp{arm7m}, @samp{arm7d}, @samp{arm7dm}, 7461@samp{arm7di}, @samp{arm7dmi}, @samp{arm70}, @samp{arm700}, 7462@samp{arm700i}, @samp{arm710}, @samp{arm710c}, @samp{arm7100}, 7463@samp{arm7500}, @samp{arm7500fe}, @samp{arm7tdmi}, @samp{arm7tdmi-s}, 7464@samp{arm8}, @samp{strongarm}, @samp{strongarm110}, @samp{strongarm1100}, 7465@samp{arm8}, @samp{arm810}, @samp{arm9}, @samp{arm9e}, @samp{arm920}, 7466@samp{arm920t}, @samp{arm922t}, @samp{arm946e-s}, @samp{arm966e-s}, 7467@samp{arm968e-s}, @samp{arm926ej-s}, @samp{arm940t}, @samp{arm9tdmi}, 7468@samp{arm10tdmi}, @samp{arm1020t}, @samp{arm1026ej-s}, 7469@samp{arm10e}, @samp{arm1020e}, @samp{arm1022e}, 7470@samp{arm1136j-s}, @samp{arm1136jf-s}, @samp{mpcore}, @samp{mpcorenovfp}, 7471@samp{arm1176jz-s}, @samp{arm1176jzf-s}, @samp{xscale}, @samp{iwmmxt}, 7472@samp{ep9312}. 7473 7474@itemx -mtune=@var{name} 7475@opindex mtune 7476This option is very similar to the @option{-mcpu=} option, except that 7477instead of specifying the actual target processor type, and hence 7478restricting which instructions can be used, it specifies that GCC should 7479tune the performance of the code as if the target were of the type 7480specified in this option, but still choosing the instructions that it 7481will generate based on the cpu specified by a @option{-mcpu=} option. 7482For some ARM implementations better performance can be obtained by using 7483this option. 7484 7485@item -march=@var{name} 7486@opindex march 7487This specifies the name of the target ARM architecture. GCC uses this 7488name to determine what kind of instructions it can emit when generating 7489assembly code. This option can be used in conjunction with or instead 7490of the @option{-mcpu=} option. Permissible names are: @samp{armv2}, 7491@samp{armv2a}, @samp{armv3}, @samp{armv3m}, @samp{armv4}, @samp{armv4t}, 7492@samp{armv5}, @samp{armv5t}, @samp{armv5te}, @samp{armv6}, @samp{armv6j}, 7493@samp{iwmmxt}, @samp{ep9312}. 7494 7495@item -mfpu=@var{name} 7496@itemx -mfpe=@var{number} 7497@itemx -mfp=@var{number} 7498@opindex mfpu 7499@opindex mfpe 7500@opindex mfp 7501This specifies what floating point hardware (or hardware emulation) is 7502available on the target. Permissible names are: @samp{fpa}, @samp{fpe2}, 7503@samp{fpe3}, @samp{maverick}, @samp{vfp}. @option{-mfp} and @option{-mfpe} 7504are synonyms for @option{-mfpu}=@samp{fpe}@var{number}, for compatibility 7505with older versions of GCC@. 7506 7507If @option{-msoft-float} is specified this specifies the format of 7508floating point values. 7509 7510@item -mstructure-size-boundary=@var{n} 7511@opindex mstructure-size-boundary 7512The size of all structures and unions will be rounded up to a multiple 7513of the number of bits set by this option. Permissible values are 8, 32 7514and 64. The default value varies for different toolchains. For the COFF 7515targeted toolchain the default value is 8. A value of 64 is only allowed 7516if the underlying ABI supports it. 7517 7518Specifying the larger number can produce faster, more efficient code, but 7519can also increase the size of the program. Different values are potentially 7520incompatible. Code compiled with one value cannot necessarily expect to 7521work with code or libraries compiled with another value, if they exchange 7522information using structures or unions. 7523 7524@item -mabort-on-noreturn 7525@opindex mabort-on-noreturn 7526Generate a call to the function @code{abort} at the end of a 7527@code{noreturn} function. It will be executed if the function tries to 7528return. 7529 7530@item -mlong-calls 7531@itemx -mno-long-calls 7532@opindex mlong-calls 7533@opindex mno-long-calls 7534Tells the compiler to perform function calls by first loading the 7535address of the function into a register and then performing a subroutine 7536call on this register. This switch is needed if the target function 7537will lie outside of the 64 megabyte addressing range of the offset based 7538version of subroutine call instruction. 7539 7540Even if this switch is enabled, not all function calls will be turned 7541into long calls. The heuristic is that static functions, functions 7542which have the @samp{short-call} attribute, functions that are inside 7543the scope of a @samp{#pragma no_long_calls} directive and functions whose 7544definitions have already been compiled within the current compilation 7545unit, will not be turned into long calls. The exception to this rule is 7546that weak function definitions, functions with the @samp{long-call} 7547attribute or the @samp{section} attribute, and functions that are within 7548the scope of a @samp{#pragma long_calls} directive, will always be 7549turned into long calls. 7550 7551This feature is not enabled by default. Specifying 7552@option{-mno-long-calls} will restore the default behavior, as will 7553placing the function calls within the scope of a @samp{#pragma 7554long_calls_off} directive. Note these switches have no effect on how 7555the compiler generates code to handle function calls via function 7556pointers. 7557 7558@item -mnop-fun-dllimport 7559@opindex mnop-fun-dllimport 7560Disable support for the @code{dllimport} attribute. 7561 7562@item -msingle-pic-base 7563@opindex msingle-pic-base 7564Treat the register used for PIC addressing as read-only, rather than 7565loading it in the prologue for each function. The run-time system is 7566responsible for initializing this register with an appropriate value 7567before execution begins. 7568 7569@item -mpic-register=@var{reg} 7570@opindex mpic-register 7571Specify the register to be used for PIC addressing. The default is R10 7572unless stack-checking is enabled, when R9 is used. 7573 7574@item -mcirrus-fix-invalid-insns 7575@opindex mcirrus-fix-invalid-insns 7576@opindex mno-cirrus-fix-invalid-insns 7577Insert NOPs into the instruction stream to in order to work around 7578problems with invalid Maverick instruction combinations. This option 7579is only valid if the @option{-mcpu=ep9312} option has been used to 7580enable generation of instructions for the Cirrus Maverick floating 7581point co-processor. This option is not enabled by default, since the 7582problem is only present in older Maverick implementations. The default 7583can be re-enabled by use of the @option{-mno-cirrus-fix-invalid-insns} 7584switch. 7585 7586@item -mpoke-function-name 7587@opindex mpoke-function-name 7588Write the name of each function into the text section, directly 7589preceding the function prologue. The generated code is similar to this: 7590 7591@smallexample 7592 t0 7593 .ascii "arm_poke_function_name", 0 7594 .align 7595 t1 7596 .word 0xff000000 + (t1 - t0) 7597 arm_poke_function_name 7598 mov ip, sp 7599 stmfd sp!, @{fp, ip, lr, pc@} 7600 sub fp, ip, #4 7601@end smallexample 7602 7603When performing a stack backtrace, code can inspect the value of 7604@code{pc} stored at @code{fp + 0}. If the trace function then looks at 7605location @code{pc - 12} and the top 8 bits are set, then we know that 7606there is a function name embedded immediately preceding this location 7607and has length @code{((pc[-3]) & 0xff000000)}. 7608 7609@item -mthumb 7610@opindex mthumb 7611Generate code for the 16-bit Thumb instruction set. The default is to 7612use the 32-bit ARM instruction set. 7613 7614@item -mtpcs-frame 7615@opindex mtpcs-frame 7616Generate a stack frame that is compliant with the Thumb Procedure Call 7617Standard for all non-leaf functions. (A leaf function is one that does 7618not call any other functions.) The default is @option{-mno-tpcs-frame}. 7619 7620@item -mtpcs-leaf-frame 7621@opindex mtpcs-leaf-frame 7622Generate a stack frame that is compliant with the Thumb Procedure Call 7623Standard for all leaf functions. (A leaf function is one that does 7624not call any other functions.) The default is @option{-mno-apcs-leaf-frame}. 7625 7626@item -mcallee-super-interworking 7627@opindex mcallee-super-interworking 7628Gives all externally visible functions in the file being compiled an ARM 7629instruction set header which switches to Thumb mode before executing the 7630rest of the function. This allows these functions to be called from 7631non-interworking code. 7632 7633@item -mcaller-super-interworking 7634@opindex mcaller-super-interworking 7635Allows calls via function pointers (including virtual functions) to 7636execute correctly regardless of whether the target code has been 7637compiled for interworking or not. There is a small overhead in the cost 7638of executing a function pointer if this option is enabled. 7639 7640@item -mtp=@var{name} 7641@opindex mtp 7642Specify the access model for the thread local storage pointer. The valid 7643models are @option{soft}, which generates calls to @code{__aeabi_read_tp}, 7644@option{cp15}, which fetches the thread pointer from @code{cp15} directly 7645(supported in the arm6k architecture), and @option{auto}, which uses the 7646best available method for the selected processor. The default setting is 7647@option{auto}. 7648 7649@end table 7650 7651@node AVR Options 7652@subsection AVR Options 7653@cindex AVR Options 7654 7655These options are defined for AVR implementations: 7656 7657@table @gcctabopt 7658@item -mmcu=@var{mcu} 7659@opindex mmcu 7660Specify ATMEL AVR instruction set or MCU type. 7661 7662Instruction set avr1 is for the minimal AVR core, not supported by the C 7663compiler, only for assembler programs (MCU types: at90s1200, attiny10, 7664attiny11, attiny12, attiny15, attiny28). 7665 7666Instruction set avr2 (default) is for the classic AVR core with up to 76678K program memory space (MCU types: at90s2313, at90s2323, attiny22, 7668at90s2333, at90s2343, at90s4414, at90s4433, at90s4434, at90s8515, 7669at90c8534, at90s8535). 7670 7671Instruction set avr3 is for the classic AVR core with up to 128K program 7672memory space (MCU types: atmega103, atmega603, at43usb320, at76c711). 7673 7674Instruction set avr4 is for the enhanced AVR core with up to 8K program 7675memory space (MCU types: atmega8, atmega83, atmega85). 7676 7677Instruction set avr5 is for the enhanced AVR core with up to 128K program 7678memory space (MCU types: atmega16, atmega161, atmega163, atmega32, atmega323, 7679atmega64, atmega128, at43usb355, at94k). 7680 7681@item -msize 7682@opindex msize 7683Output instruction sizes to the asm file. 7684 7685@item -minit-stack=@var{N} 7686@opindex minit-stack 7687Specify the initial stack address, which may be a symbol or numeric value, 7688@samp{__stack} is the default. 7689 7690@item -mno-interrupts 7691@opindex mno-interrupts 7692Generated code is not compatible with hardware interrupts. 7693Code size will be smaller. 7694 7695@item -mcall-prologues 7696@opindex mcall-prologues 7697Functions prologues/epilogues expanded as call to appropriate 7698subroutines. Code size will be smaller. 7699 7700@item -mno-tablejump 7701@opindex mno-tablejump 7702Do not generate tablejump insns which sometimes increase code size. 7703 7704@item -mtiny-stack 7705@opindex mtiny-stack 7706Change only the low 8 bits of the stack pointer. 7707 7708@item -mint8 7709@opindex mint8 7710Assume int to be 8 bit integer. This affects the sizes of all types: A 7711char will be 1 byte, an int will be 1 byte, an long will be 2 bytes 7712and long long will be 4 bytes. Please note that this option does not 7713comply to the C standards, but it will provide you with smaller code 7714size. 7715@end table 7716 7717@node Blackfin Options 7718@subsection Blackfin Options 7719@cindex Blackfin Options 7720 7721@table @gcctabopt 7722@item -momit-leaf-frame-pointer 7723@opindex momit-leaf-frame-pointer 7724Don't keep the frame pointer in a register for leaf functions. This 7725avoids the instructions to save, set up and restore frame pointers and 7726makes an extra register available in leaf functions. The option 7727@option{-fomit-frame-pointer} removes the frame pointer for all functions 7728which might make debugging harder. 7729 7730@item -mspecld-anomaly 7731@opindex mspecld-anomaly 7732When enabled, the compiler will ensure that the generated code does not 7733contain speculative loads after jump instructions. This option is enabled 7734by default. 7735 7736@item -mno-specld-anomaly 7737@opindex mno-specld-anomaly 7738Don't generate extra code to prevent speculative loads from occurring. 7739 7740@item -mcsync-anomaly 7741@opindex mcsync-anomaly 7742When enabled, the compiler will ensure that the generated code does not 7743contain CSYNC or SSYNC instructions too soon after conditional branches. 7744This option is enabled by default. 7745 7746@item -mno-csync-anomaly 7747@opindex mno-csync-anomaly 7748Don't generate extra code to prevent CSYNC or SSYNC instructions from 7749occurring too soon after a conditional branch. 7750 7751@item -mlow-64k 7752@opindex mlow-64k 7753When enabled, the compiler is free to take advantage of the knowledge that 7754the entire program fits into the low 64k of memory. 7755 7756@item -mno-low-64k 7757@opindex mno-low-64k 7758Assume that the program is arbitrarily large. This is the default. 7759 7760@item -mid-shared-library 7761@opindex mid-shared-library 7762Generate code that supports shared libraries via the library ID method. 7763This allows for execute in place and shared libraries in an environment 7764without virtual memory management. This option implies @option{-fPIC}. 7765 7766@item -mno-id-shared-library 7767@opindex mno-id-shared-library 7768Generate code that doesn't assume ID based shared libraries are being used. 7769This is the default. 7770 7771@item -mshared-library-id=n 7772@opindex mshared-library-id 7773Specified the identification number of the ID based shared library being 7774compiled. Specifying a value of 0 will generate more compact code, specifying 7775other values will force the allocation of that number to the current 7776library but is no more space or time efficient than omitting this option. 7777 7778@item -mlong-calls 7779@itemx -mno-long-calls 7780@opindex mlong-calls 7781@opindex mno-long-calls 7782Tells the compiler to perform function calls by first loading the 7783address of the function into a register and then performing a subroutine 7784call on this register. This switch is needed if the target function 7785will lie outside of the 24 bit addressing range of the offset based 7786version of subroutine call instruction. 7787 7788This feature is not enabled by default. Specifying 7789@option{-mno-long-calls} will restore the default behavior. Note these 7790switches have no effect on how the compiler generates code to handle 7791function calls via function pointers. 7792@end table 7793 7794@node CRIS Options 7795@subsection CRIS Options 7796@cindex CRIS Options 7797 7798These options are defined specifically for the CRIS ports. 7799 7800@table @gcctabopt 7801@item -march=@var{architecture-type} 7802@itemx -mcpu=@var{architecture-type} 7803@opindex march 7804@opindex mcpu 7805Generate code for the specified architecture. The choices for 7806@var{architecture-type} are @samp{v3}, @samp{v8} and @samp{v10} for 7807respectively ETRAX@w{ }4, ETRAX@w{ }100, and ETRAX@w{ }100@w{ }LX@. 7808Default is @samp{v0} except for cris-axis-linux-gnu, where the default is 7809@samp{v10}. 7810 7811@item -mtune=@var{architecture-type} 7812@opindex mtune 7813Tune to @var{architecture-type} everything applicable about the generated 7814code, except for the ABI and the set of available instructions. The 7815choices for @var{architecture-type} are the same as for 7816@option{-march=@var{architecture-type}}. 7817 7818@item -mmax-stack-frame=@var{n} 7819@opindex mmax-stack-frame 7820Warn when the stack frame of a function exceeds @var{n} bytes. 7821 7822@item -melinux-stacksize=@var{n} 7823@opindex melinux-stacksize 7824Only available with the @samp{cris-axis-aout} target. Arranges for 7825indications in the program to the kernel loader that the stack of the 7826program should be set to @var{n} bytes. 7827 7828@item -metrax4 7829@itemx -metrax100 7830@opindex metrax4 7831@opindex metrax100 7832The options @option{-metrax4} and @option{-metrax100} are synonyms for 7833@option{-march=v3} and @option{-march=v8} respectively. 7834 7835@item -mmul-bug-workaround 7836@itemx -mno-mul-bug-workaround 7837@opindex mmul-bug-workaround 7838@opindex mno-mul-bug-workaround 7839Work around a bug in the @code{muls} and @code{mulu} instructions for CPU 7840models where it applies. This option is active by default. 7841 7842@item -mpdebug 7843@opindex mpdebug 7844Enable CRIS-specific verbose debug-related information in the assembly 7845code. This option also has the effect to turn off the @samp{#NO_APP} 7846formatted-code indicator to the assembler at the beginning of the 7847assembly file. 7848 7849@item -mcc-init 7850@opindex mcc-init 7851Do not use condition-code results from previous instruction; always emit 7852compare and test instructions before use of condition codes. 7853 7854@item -mno-side-effects 7855@opindex mno-side-effects 7856Do not emit instructions with side-effects in addressing modes other than 7857post-increment. 7858 7859@item -mstack-align 7860@itemx -mno-stack-align 7861@itemx -mdata-align 7862@itemx -mno-data-align 7863@itemx -mconst-align 7864@itemx -mno-const-align 7865@opindex mstack-align 7866@opindex mno-stack-align 7867@opindex mdata-align 7868@opindex mno-data-align 7869@opindex mconst-align 7870@opindex mno-const-align 7871These options (no-options) arranges (eliminate arrangements) for the 7872stack-frame, individual data and constants to be aligned for the maximum 7873single data access size for the chosen CPU model. The default is to 7874arrange for 32-bit alignment. ABI details such as structure layout are 7875not affected by these options. 7876 7877@item -m32-bit 7878@itemx -m16-bit 7879@itemx -m8-bit 7880@opindex m32-bit 7881@opindex m16-bit 7882@opindex m8-bit 7883Similar to the stack- data- and const-align options above, these options 7884arrange for stack-frame, writable data and constants to all be 32-bit, 788516-bit or 8-bit aligned. The default is 32-bit alignment. 7886 7887@item -mno-prologue-epilogue 7888@itemx -mprologue-epilogue 7889@opindex mno-prologue-epilogue 7890@opindex mprologue-epilogue 7891With @option{-mno-prologue-epilogue}, the normal function prologue and 7892epilogue that sets up the stack-frame are omitted and no return 7893instructions or return sequences are generated in the code. Use this 7894option only together with visual inspection of the compiled code: no 7895warnings or errors are generated when call-saved registers must be saved, 7896or storage for local variable needs to be allocated. 7897 7898@item -mno-gotplt 7899@itemx -mgotplt 7900@opindex mno-gotplt 7901@opindex mgotplt 7902With @option{-fpic} and @option{-fPIC}, don't generate (do generate) 7903instruction sequences that load addresses for functions from the PLT part 7904of the GOT rather than (traditional on other architectures) calls to the 7905PLT@. The default is @option{-mgotplt}. 7906 7907@item -maout 7908@opindex maout 7909Legacy no-op option only recognized with the cris-axis-aout target. 7910 7911@item -melf 7912@opindex melf 7913Legacy no-op option only recognized with the cris-axis-elf and 7914cris-axis-linux-gnu targets. 7915 7916@item -melinux 7917@opindex melinux 7918Only recognized with the cris-axis-aout target, where it selects a 7919GNU/linux-like multilib, include files and instruction set for 7920@option{-march=v8}. 7921 7922@item -mlinux 7923@opindex mlinux 7924Legacy no-op option only recognized with the cris-axis-linux-gnu target. 7925 7926@item -sim 7927@opindex sim 7928This option, recognized for the cris-axis-aout and cris-axis-elf arranges 7929to link with input-output functions from a simulator library. Code, 7930initialized data and zero-initialized data are allocated consecutively. 7931 7932@item -sim2 7933@opindex sim2 7934Like @option{-sim}, but pass linker options to locate initialized data at 79350x40000000 and zero-initialized data at 0x80000000. 7936@end table 7937 7938@node CRX Options 7939@subsection CRX Options 7940@cindex CRX Options 7941 7942These options are defined specifically for the CRX ports. 7943 7944@table @gcctabopt 7945 7946@item -mmac 7947@opindex mmac 7948Enable the use of multiply-accumulate instructions. Disabled by default. 7949 7950@item -mpush-args 7951@opindex mpush-args 7952Push instructions will be used to pass outgoing arguments when functions 7953are called. Enabled by default. 7954@end table 7955 7956@node Darwin Options 7957@subsection Darwin Options 7958@cindex Darwin options 7959 7960These options are defined for all architectures running the Darwin operating 7961system. 7962 7963FSF GCC on Darwin does not create ``fat'' object files; it will create 7964an object file for the single architecture that it was built to 7965target. Apple's GCC on Darwin does create ``fat'' files if multiple 7966@option{-arch} options are used; it does so by running the compiler or 7967linker multiple times and joining the results together with 7968@file{lipo}. 7969 7970The subtype of the file created (like @samp{ppc7400} or @samp{ppc970} or 7971@samp{i686}) is determined by the flags that specify the ISA 7972that GCC is targetting, like @option{-mcpu} or @option{-march}. The 7973@option{-force_cpusubtype_ALL} option can be used to override this. 7974 7975The Darwin tools vary in their behavior when presented with an ISA 7976mismatch. The assembler, @file{as}, will only permit instructions to 7977be used that are valid for the subtype of the file it is generating, 7978so you cannot put 64-bit instructions in an @samp{ppc750} object file. 7979The linker for shared libraries, @file{/usr/bin/libtool}, will fail 7980and print an error if asked to create a shared library with a less 7981restrictive subtype than its input files (for instance, trying to put 7982a @samp{ppc970} object file in a @samp{ppc7400} library). The linker 7983for executables, @file{ld}, will quietly give the executable the most 7984restrictive subtype of any of its input files. 7985 7986@table @gcctabopt 7987@item -F@var{dir} 7988@opindex F 7989Add the framework directory @var{dir} to the head of the list of 7990directories to be searched for header files. These directories are 7991interleaved with those specified by @option{-I} options and are 7992scanned in a left-to-right order. 7993 7994A framework directory is a directory with frameworks in it. A 7995framework is a directory with a @samp{"Headers"} and/or 7996@samp{"PrivateHeaders"} directory contained directly in it that ends 7997in @samp{".framework"}. The name of a framework is the name of this 7998directory excluding the @samp{".framework"}. Headers associated with 7999the framework are found in one of those two directories, with 8000@samp{"Headers"} being searched first. A subframework is a framework 8001directory that is in a framework's @samp{"Frameworks"} directory. 8002Includes of subframework headers can only appear in a header of a 8003framework that contains the subframework, or in a sibling subframework 8004header. Two subframeworks are siblings if they occur in the same 8005framework. A subframework should not have the same name as a 8006framework, a warning will be issued if this is violated. Currently a 8007subframework cannot have subframeworks, in the future, the mechanism 8008may be extended to support this. The standard frameworks can be found 8009in @samp{"/System/Library/Frameworks"} and 8010@samp{"/Library/Frameworks"}. An example include looks like 8011@code{#include <Framework/header.h>}, where @samp{Framework} denotes 8012the name of the framework and header.h is found in the 8013@samp{"PrivateHeaders"} or @samp{"Headers"} directory. 8014 8015@item -gused 8016@opindex gused 8017Emit debugging information for symbols that are used. For STABS 8018debugging format, this enables @option{-feliminate-unused-debug-symbols}. 8019This is by default ON@. 8020 8021@item -gfull 8022@opindex gfull 8023Emit debugging information for all symbols and types. 8024 8025@item -mmacosx-version-min=@var{version} 8026The earliest version of MacOS X that this executable will run on 8027is @var{version}. Typical values of @var{version} include @code{10.1}, 8028@code{10.2}, and @code{10.3.9}. 8029 8030The default for this option is to make choices that seem to be most 8031useful. 8032 8033@item -mkernel 8034@opindex mkernel 8035Enable kernel development mode. The @option{-mkernel} option sets 8036@option{-static}, @option{-fno-common}, @option{-fno-cxa-atexit}, 8037@option{-fno-exceptions}, @option{-fno-non-call-exceptions}, 8038@option{-fapple-kext}, @option{-fno-weak} and @option{-fno-rtti} where 8039applicable. This mode also sets @option{-mno-altivec}, 8040@option{-msoft-float}, @option{-fno-builtin} and 8041@option{-mlong-branch} for PowerPC targets. 8042 8043@item -mone-byte-bool 8044@opindex mone-byte-bool 8045Override the defaults for @samp{bool} so that @samp{sizeof(bool)==1}. 8046By default @samp{sizeof(bool)} is @samp{4} when compiling for 8047Darwin/PowerPC and @samp{1} when compiling for Darwin/x86, so this 8048option has no effect on x86. 8049 8050@strong{Warning:} The @option{-mone-byte-bool} switch causes GCC 8051to generate code that is not binary compatible with code generated 8052without that switch. Using this switch may require recompiling all 8053other modules in a program, including system libraries. Use this 8054switch to conform to a non-default data model. 8055 8056@item -mfix-and-continue 8057@itemx -ffix-and-continue 8058@itemx -findirect-data 8059@opindex mfix-and-continue 8060@opindex ffix-and-continue 8061@opindex findirect-data 8062Generate code suitable for fast turn around development. Needed to 8063enable gdb to dynamically load @code{.o} files into already running 8064programs. @option{-findirect-data} and @option{-ffix-and-continue} 8065are provided for backwards compatibility. 8066 8067@item -all_load 8068@opindex all_load 8069Loads all members of static archive libraries. 8070See man ld(1) for more information. 8071 8072@item -arch_errors_fatal 8073@opindex arch_errors_fatal 8074Cause the errors having to do with files that have the wrong architecture 8075to be fatal. 8076 8077@item -bind_at_load 8078@opindex bind_at_load 8079Causes the output file to be marked such that the dynamic linker will 8080bind all undefined references when the file is loaded or launched. 8081 8082@item -bundle 8083@opindex bundle 8084Produce a Mach-o bundle format file. 8085See man ld(1) for more information. 8086 8087@item -bundle_loader @var{executable} 8088@opindex bundle_loader 8089This option specifies the @var{executable} that will be loading the build 8090output file being linked. See man ld(1) for more information. 8091 8092@item -dynamiclib 8093@opindex dynamiclib 8094When passed this option, GCC will produce a dynamic library instead of 8095an executable when linking, using the Darwin @file{libtool} command. 8096 8097@item -force_cpusubtype_ALL 8098@opindex force_cpusubtype_ALL 8099This causes GCC's output file to have the @var{ALL} subtype, instead of 8100one controlled by the @option{-mcpu} or @option{-march} option. 8101 8102@item -allowable_client @var{client_name} 8103@itemx -client_name 8104@itemx -compatibility_version 8105@itemx -current_version 8106@itemx -dead_strip 8107@itemx -dependency-file 8108@itemx -dylib_file 8109@itemx -dylinker_install_name 8110@itemx -dynamic 8111@itemx -exported_symbols_list 8112@itemx -filelist 8113@itemx -flat_namespace 8114@itemx -force_flat_namespace 8115@itemx -headerpad_max_install_names 8116@itemx -image_base 8117@itemx -init 8118@itemx -install_name 8119@itemx -keep_private_externs 8120@itemx -multi_module 8121@itemx -multiply_defined 8122@itemx -multiply_defined_unused 8123@itemx -noall_load 8124@itemx -no_dead_strip_inits_and_terms 8125@itemx -nofixprebinding 8126@itemx -nomultidefs 8127@itemx -noprebind 8128@itemx -noseglinkedit 8129@itemx -pagezero_size 8130@itemx -prebind 8131@itemx -prebind_all_twolevel_modules 8132@itemx -private_bundle 8133@itemx -read_only_relocs 8134@itemx -sectalign 8135@itemx -sectobjectsymbols 8136@itemx -whyload 8137@itemx -seg1addr 8138@itemx -sectcreate 8139@itemx -sectobjectsymbols 8140@itemx -sectorder 8141@itemx -segaddr 8142@itemx -segs_read_only_addr 8143@itemx -segs_read_write_addr 8144@itemx -seg_addr_table 8145@itemx -seg_addr_table_filename 8146@itemx -seglinkedit 8147@itemx -segprot 8148@itemx -segs_read_only_addr 8149@itemx -segs_read_write_addr 8150@itemx -single_module 8151@itemx -static 8152@itemx -sub_library 8153@itemx -sub_umbrella 8154@itemx -twolevel_namespace 8155@itemx -umbrella 8156@itemx -undefined 8157@itemx -unexported_symbols_list 8158@itemx -weak_reference_mismatches 8159@itemx -whatsloaded 8160 8161@opindex allowable_client 8162@opindex client_name 8163@opindex compatibility_version 8164@opindex current_version 8165@opindex dead_strip 8166@opindex dependency-file 8167@opindex dylib_file 8168@opindex dylinker_install_name 8169@opindex dynamic 8170@opindex exported_symbols_list 8171@opindex filelist 8172@opindex flat_namespace 8173@opindex force_flat_namespace 8174@opindex headerpad_max_install_names 8175@opindex image_base 8176@opindex init 8177@opindex install_name 8178@opindex keep_private_externs 8179@opindex multi_module 8180@opindex multiply_defined 8181@opindex multiply_defined_unused 8182@opindex noall_load 8183@opindex no_dead_strip_inits_and_terms 8184@opindex nofixprebinding 8185@opindex nomultidefs 8186@opindex noprebind 8187@opindex noseglinkedit 8188@opindex pagezero_size 8189@opindex prebind 8190@opindex prebind_all_twolevel_modules 8191@opindex private_bundle 8192@opindex read_only_relocs 8193@opindex sectalign 8194@opindex sectobjectsymbols 8195@opindex whyload 8196@opindex seg1addr 8197@opindex sectcreate 8198@opindex sectobjectsymbols 8199@opindex sectorder 8200@opindex segaddr 8201@opindex segs_read_only_addr 8202@opindex segs_read_write_addr 8203@opindex seg_addr_table 8204@opindex seg_addr_table_filename 8205@opindex seglinkedit 8206@opindex segprot 8207@opindex segs_read_only_addr 8208@opindex segs_read_write_addr 8209@opindex single_module 8210@opindex static 8211@opindex sub_library 8212@opindex sub_umbrella 8213@opindex twolevel_namespace 8214@opindex umbrella 8215@opindex undefined 8216@opindex unexported_symbols_list 8217@opindex weak_reference_mismatches 8218@opindex whatsloaded 8219 8220These options are passed to the Darwin linker. The Darwin linker man page 8221describes them in detail. 8222@end table 8223 8224@node DEC Alpha Options 8225@subsection DEC Alpha Options 8226 8227These @samp{-m} options are defined for the DEC Alpha implementations: 8228 8229@table @gcctabopt 8230@item -mno-soft-float 8231@itemx -msoft-float 8232@opindex mno-soft-float 8233@opindex msoft-float 8234Use (do not use) the hardware floating-point instructions for 8235floating-point operations. When @option{-msoft-float} is specified, 8236functions in @file{libgcc.a} will be used to perform floating-point 8237operations. Unless they are replaced by routines that emulate the 8238floating-point operations, or compiled in such a way as to call such 8239emulations routines, these routines will issue floating-point 8240operations. If you are compiling for an Alpha without floating-point 8241operations, you must ensure that the library is built so as not to call 8242them. 8243 8244Note that Alpha implementations without floating-point operations are 8245required to have floating-point registers. 8246 8247@item -mfp-reg 8248@itemx -mno-fp-regs 8249@opindex mfp-reg 8250@opindex mno-fp-regs 8251Generate code that uses (does not use) the floating-point register set. 8252@option{-mno-fp-regs} implies @option{-msoft-float}. If the floating-point 8253register set is not used, floating point operands are passed in integer 8254registers as if they were integers and floating-point results are passed 8255in @code{$0} instead of @code{$f0}. This is a non-standard calling sequence, 8256so any function with a floating-point argument or return value called by code 8257compiled with @option{-mno-fp-regs} must also be compiled with that 8258option. 8259 8260A typical use of this option is building a kernel that does not use, 8261and hence need not save and restore, any floating-point registers. 8262 8263@item -mieee 8264@opindex mieee 8265The Alpha architecture implements floating-point hardware optimized for 8266maximum performance. It is mostly compliant with the IEEE floating 8267point standard. However, for full compliance, software assistance is 8268required. This option generates code fully IEEE compliant code 8269@emph{except} that the @var{inexact-flag} is not maintained (see below). 8270If this option is turned on, the preprocessor macro @code{_IEEE_FP} is 8271defined during compilation. The resulting code is less efficient but is 8272able to correctly support denormalized numbers and exceptional IEEE 8273values such as not-a-number and plus/minus infinity. Other Alpha 8274compilers call this option @option{-ieee_with_no_inexact}. 8275 8276@item -mieee-with-inexact 8277@opindex mieee-with-inexact 8278This is like @option{-mieee} except the generated code also maintains 8279the IEEE @var{inexact-flag}. Turning on this option causes the 8280generated code to implement fully-compliant IEEE math. In addition to 8281@code{_IEEE_FP}, @code{_IEEE_FP_EXACT} is defined as a preprocessor 8282macro. On some Alpha implementations the resulting code may execute 8283significantly slower than the code generated by default. Since there is 8284very little code that depends on the @var{inexact-flag}, you should 8285normally not specify this option. Other Alpha compilers call this 8286option @option{-ieee_with_inexact}. 8287 8288@item -mfp-trap-mode=@var{trap-mode} 8289@opindex mfp-trap-mode 8290This option controls what floating-point related traps are enabled. 8291Other Alpha compilers call this option @option{-fptm @var{trap-mode}}. 8292The trap mode can be set to one of four values: 8293 8294@table @samp 8295@item n 8296This is the default (normal) setting. The only traps that are enabled 8297are the ones that cannot be disabled in software (e.g., division by zero 8298trap). 8299 8300@item u 8301In addition to the traps enabled by @samp{n}, underflow traps are enabled 8302as well. 8303 8304@item su 8305Like @samp{u}, but the instructions are marked to be safe for software 8306completion (see Alpha architecture manual for details). 8307 8308@item sui 8309Like @samp{su}, but inexact traps are enabled as well. 8310@end table 8311 8312@item -mfp-rounding-mode=@var{rounding-mode} 8313@opindex mfp-rounding-mode 8314Selects the IEEE rounding mode. Other Alpha compilers call this option 8315@option{-fprm @var{rounding-mode}}. The @var{rounding-mode} can be one 8316of: 8317 8318@table @samp 8319@item n 8320Normal IEEE rounding mode. Floating point numbers are rounded towards 8321the nearest machine number or towards the even machine number in case 8322of a tie. 8323 8324@item m 8325Round towards minus infinity. 8326 8327@item c 8328Chopped rounding mode. Floating point numbers are rounded towards zero. 8329 8330@item d 8331Dynamic rounding mode. A field in the floating point control register 8332(@var{fpcr}, see Alpha architecture reference manual) controls the 8333rounding mode in effect. The C library initializes this register for 8334rounding towards plus infinity. Thus, unless your program modifies the 8335@var{fpcr}, @samp{d} corresponds to round towards plus infinity. 8336@end table 8337 8338@item -mtrap-precision=@var{trap-precision} 8339@opindex mtrap-precision 8340In the Alpha architecture, floating point traps are imprecise. This 8341means without software assistance it is impossible to recover from a 8342floating trap and program execution normally needs to be terminated. 8343GCC can generate code that can assist operating system trap handlers 8344in determining the exact location that caused a floating point trap. 8345Depending on the requirements of an application, different levels of 8346precisions can be selected: 8347 8348@table @samp 8349@item p 8350Program precision. This option is the default and means a trap handler 8351can only identify which program caused a floating point exception. 8352 8353@item f 8354Function precision. The trap handler can determine the function that 8355caused a floating point exception. 8356 8357@item i 8358Instruction precision. The trap handler can determine the exact 8359instruction that caused a floating point exception. 8360@end table 8361 8362Other Alpha compilers provide the equivalent options called 8363@option{-scope_safe} and @option{-resumption_safe}. 8364 8365@item -mieee-conformant 8366@opindex mieee-conformant 8367This option marks the generated code as IEEE conformant. You must not 8368use this option unless you also specify @option{-mtrap-precision=i} and either 8369@option{-mfp-trap-mode=su} or @option{-mfp-trap-mode=sui}. Its only effect 8370is to emit the line @samp{.eflag 48} in the function prologue of the 8371generated assembly file. Under DEC Unix, this has the effect that 8372IEEE-conformant math library routines will be linked in. 8373 8374@item -mbuild-constants 8375@opindex mbuild-constants 8376Normally GCC examines a 32- or 64-bit integer constant to 8377see if it can construct it from smaller constants in two or three 8378instructions. If it cannot, it will output the constant as a literal and 8379generate code to load it from the data segment at runtime. 8380 8381Use this option to require GCC to construct @emph{all} integer constants 8382using code, even if it takes more instructions (the maximum is six). 8383 8384You would typically use this option to build a shared library dynamic 8385loader. Itself a shared library, it must relocate itself in memory 8386before it can find the variables and constants in its own data segment. 8387 8388@item -malpha-as 8389@itemx -mgas 8390@opindex malpha-as 8391@opindex mgas 8392Select whether to generate code to be assembled by the vendor-supplied 8393assembler (@option{-malpha-as}) or by the GNU assembler @option{-mgas}. 8394 8395@item -mbwx 8396@itemx -mno-bwx 8397@itemx -mcix 8398@itemx -mno-cix 8399@itemx -mfix 8400@itemx -mno-fix 8401@itemx -mmax 8402@itemx -mno-max 8403@opindex mbwx 8404@opindex mno-bwx 8405@opindex mcix 8406@opindex mno-cix 8407@opindex mfix 8408@opindex mno-fix 8409@opindex mmax 8410@opindex mno-max 8411Indicate whether GCC should generate code to use the optional BWX, 8412CIX, FIX and MAX instruction sets. The default is to use the instruction 8413sets supported by the CPU type specified via @option{-mcpu=} option or that 8414of the CPU on which GCC was built if none was specified. 8415 8416@item -mfloat-vax 8417@itemx -mfloat-ieee 8418@opindex mfloat-vax 8419@opindex mfloat-ieee 8420Generate code that uses (does not use) VAX F and G floating point 8421arithmetic instead of IEEE single and double precision. 8422 8423@item -mexplicit-relocs 8424@itemx -mno-explicit-relocs 8425@opindex mexplicit-relocs 8426@opindex mno-explicit-relocs 8427Older Alpha assemblers provided no way to generate symbol relocations 8428except via assembler macros. Use of these macros does not allow 8429optimal instruction scheduling. GNU binutils as of version 2.12 8430supports a new syntax that allows the compiler to explicitly mark 8431which relocations should apply to which instructions. This option 8432is mostly useful for debugging, as GCC detects the capabilities of 8433the assembler when it is built and sets the default accordingly. 8434 8435@item -msmall-data 8436@itemx -mlarge-data 8437@opindex msmall-data 8438@opindex mlarge-data 8439When @option{-mexplicit-relocs} is in effect, static data is 8440accessed via @dfn{gp-relative} relocations. When @option{-msmall-data} 8441is used, objects 8 bytes long or smaller are placed in a @dfn{small data area} 8442(the @code{.sdata} and @code{.sbss} sections) and are accessed via 844316-bit relocations off of the @code{$gp} register. This limits the 8444size of the small data area to 64KB, but allows the variables to be 8445directly accessed via a single instruction. 8446 8447The default is @option{-mlarge-data}. With this option the data area 8448is limited to just below 2GB@. Programs that require more than 2GB of 8449data must use @code{malloc} or @code{mmap} to allocate the data in the 8450heap instead of in the program's data segment. 8451 8452When generating code for shared libraries, @option{-fpic} implies 8453@option{-msmall-data} and @option{-fPIC} implies @option{-mlarge-data}. 8454 8455@item -msmall-text 8456@itemx -mlarge-text 8457@opindex msmall-text 8458@opindex mlarge-text 8459When @option{-msmall-text} is used, the compiler assumes that the 8460code of the entire program (or shared library) fits in 4MB, and is 8461thus reachable with a branch instruction. When @option{-msmall-data} 8462is used, the compiler can assume that all local symbols share the 8463same @code{$gp} value, and thus reduce the number of instructions 8464required for a function call from 4 to 1. 8465 8466The default is @option{-mlarge-text}. 8467 8468@item -mcpu=@var{cpu_type} 8469@opindex mcpu 8470Set the instruction set and instruction scheduling parameters for 8471machine type @var{cpu_type}. You can specify either the @samp{EV} 8472style name or the corresponding chip number. GCC supports scheduling 8473parameters for the EV4, EV5 and EV6 family of processors and will 8474choose the default values for the instruction set from the processor 8475you specify. If you do not specify a processor type, GCC will default 8476to the processor on which the compiler was built. 8477 8478Supported values for @var{cpu_type} are 8479 8480@table @samp 8481@item ev4 8482@itemx ev45 8483@itemx 21064 8484Schedules as an EV4 and has no instruction set extensions. 8485 8486@item ev5 8487@itemx 21164 8488Schedules as an EV5 and has no instruction set extensions. 8489 8490@item ev56 8491@itemx 21164a 8492Schedules as an EV5 and supports the BWX extension. 8493 8494@item pca56 8495@itemx 21164pc 8496@itemx 21164PC 8497Schedules as an EV5 and supports the BWX and MAX extensions. 8498 8499@item ev6 8500@itemx 21264 8501Schedules as an EV6 and supports the BWX, FIX, and MAX extensions. 8502 8503@item ev67 8504@itemx 21264a 8505Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX extensions. 8506@end table 8507 8508@item -mtune=@var{cpu_type} 8509@opindex mtune 8510Set only the instruction scheduling parameters for machine type 8511@var{cpu_type}. The instruction set is not changed. 8512 8513@item -mmemory-latency=@var{time} 8514@opindex mmemory-latency 8515Sets the latency the scheduler should assume for typical memory 8516references as seen by the application. This number is highly 8517dependent on the memory access patterns used by the application 8518and the size of the external cache on the machine. 8519 8520Valid options for @var{time} are 8521 8522@table @samp 8523@item @var{number} 8524A decimal number representing clock cycles. 8525 8526@item L1 8527@itemx L2 8528@itemx L3 8529@itemx main 8530The compiler contains estimates of the number of clock cycles for 8531``typical'' EV4 & EV5 hardware for the Level 1, 2 & 3 caches 8532(also called Dcache, Scache, and Bcache), as well as to main memory. 8533Note that L3 is only valid for EV5. 8534 8535@end table 8536@end table 8537 8538@node DEC Alpha/VMS Options 8539@subsection DEC Alpha/VMS Options 8540 8541These @samp{-m} options are defined for the DEC Alpha/VMS implementations: 8542 8543@table @gcctabopt 8544@item -mvms-return-codes 8545@opindex mvms-return-codes 8546Return VMS condition codes from main. The default is to return POSIX 8547style condition (e.g.@ error) codes. 8548@end table 8549 8550@node FRV Options 8551@subsection FRV Options 8552@cindex FRV Options 8553 8554@table @gcctabopt 8555@item -mgpr-32 8556@opindex mgpr-32 8557 8558Only use the first 32 general purpose registers. 8559 8560@item -mgpr-64 8561@opindex mgpr-64 8562 8563Use all 64 general purpose registers. 8564 8565@item -mfpr-32 8566@opindex mfpr-32 8567 8568Use only the first 32 floating point registers. 8569 8570@item -mfpr-64 8571@opindex mfpr-64 8572 8573Use all 64 floating point registers 8574 8575@item -mhard-float 8576@opindex mhard-float 8577 8578Use hardware instructions for floating point operations. 8579 8580@item -msoft-float 8581@opindex msoft-float 8582 8583Use library routines for floating point operations. 8584 8585@item -malloc-cc 8586@opindex malloc-cc 8587 8588Dynamically allocate condition code registers. 8589 8590@item -mfixed-cc 8591@opindex mfixed-cc 8592 8593Do not try to dynamically allocate condition code registers, only 8594use @code{icc0} and @code{fcc0}. 8595 8596@item -mdword 8597@opindex mdword 8598 8599Change ABI to use double word insns. 8600 8601@item -mno-dword 8602@opindex mno-dword 8603 8604Do not use double word instructions. 8605 8606@item -mdouble 8607@opindex mdouble 8608 8609Use floating point double instructions. 8610 8611@item -mno-double 8612@opindex mno-double 8613 8614Do not use floating point double instructions. 8615 8616@item -mmedia 8617@opindex mmedia 8618 8619Use media instructions. 8620 8621@item -mno-media 8622@opindex mno-media 8623 8624Do not use media instructions. 8625 8626@item -mmuladd 8627@opindex mmuladd 8628 8629Use multiply and add/subtract instructions. 8630 8631@item -mno-muladd 8632@opindex mno-muladd 8633 8634Do not use multiply and add/subtract instructions. 8635 8636@item -mfdpic 8637@opindex mfdpic 8638 8639Select the FDPIC ABI, that uses function descriptors to represent 8640pointers to functions. Without any PIC/PIE-related options, it 8641implies @option{-fPIE}. With @option{-fpic} or @option{-fpie}, it 8642assumes GOT entries and small data are within a 12-bit range from the 8643GOT base address; with @option{-fPIC} or @option{-fPIE}, GOT offsets 8644are computed with 32 bits. 8645 8646@item -minline-plt 8647@opindex minline-plt 8648 8649Enable inlining of PLT entries in function calls to functions that are 8650not known to bind locally. It has no effect without @option{-mfdpic}. 8651It's enabled by default if optimizing for speed and compiling for 8652shared libraries (i.e., @option{-fPIC} or @option{-fpic}), or when an 8653optimization option such as @option{-O3} or above is present in the 8654command line. 8655 8656@item -mTLS 8657@opindex TLS 8658 8659Assume a large TLS segment when generating thread-local code. 8660 8661@item -mtls 8662@opindex tls 8663 8664Do not assume a large TLS segment when generating thread-local code. 8665 8666@item -mgprel-ro 8667@opindex mgprel-ro 8668 8669Enable the use of @code{GPREL} relocations in the FDPIC ABI for data 8670that is known to be in read-only sections. It's enabled by default, 8671except for @option{-fpic} or @option{-fpie}: even though it may help 8672make the global offset table smaller, it trades 1 instruction for 4. 8673With @option{-fPIC} or @option{-fPIE}, it trades 3 instructions for 4, 8674one of which may be shared by multiple symbols, and it avoids the need 8675for a GOT entry for the referenced symbol, so it's more likely to be a 8676win. If it is not, @option{-mno-gprel-ro} can be used to disable it. 8677 8678@item -multilib-library-pic 8679@opindex multilib-library-pic 8680 8681Link with the (library, not FD) pic libraries. It's implied by 8682@option{-mlibrary-pic}, as well as by @option{-fPIC} and 8683@option{-fpic} without @option{-mfdpic}. You should never have to use 8684it explicitly. 8685 8686@item -mlinked-fp 8687@opindex mlinked-fp 8688 8689Follow the EABI requirement of always creating a frame pointer whenever 8690a stack frame is allocated. This option is enabled by default and can 8691be disabled with @option{-mno-linked-fp}. 8692 8693@item -mlong-calls 8694@opindex mlong-calls 8695 8696Use indirect addressing to call functions outside the current 8697compilation unit. This allows the functions to be placed anywhere 8698within the 32-bit address space. 8699 8700@item -malign-labels 8701@opindex malign-labels 8702 8703Try to align labels to an 8-byte boundary by inserting nops into the 8704previous packet. This option only has an effect when VLIW packing 8705is enabled. It doesn't create new packets; it merely adds nops to 8706existing ones. 8707 8708@item -mlibrary-pic 8709@opindex mlibrary-pic 8710 8711Generate position-independent EABI code. 8712 8713@item -macc-4 8714@opindex macc-4 8715 8716Use only the first four media accumulator registers. 8717 8718@item -macc-8 8719@opindex macc-8 8720 8721Use all eight media accumulator registers. 8722 8723@item -mpack 8724@opindex mpack 8725 8726Pack VLIW instructions. 8727 8728@item -mno-pack 8729@opindex mno-pack 8730 8731Do not pack VLIW instructions. 8732 8733@item -mno-eflags 8734@opindex mno-eflags 8735 8736Do not mark ABI switches in e_flags. 8737 8738@item -mcond-move 8739@opindex mcond-move 8740 8741Enable the use of conditional-move instructions (default). 8742 8743This switch is mainly for debugging the compiler and will likely be removed 8744in a future version. 8745 8746@item -mno-cond-move 8747@opindex mno-cond-move 8748 8749Disable the use of conditional-move instructions. 8750 8751This switch is mainly for debugging the compiler and will likely be removed 8752in a future version. 8753 8754@item -mscc 8755@opindex mscc 8756 8757Enable the use of conditional set instructions (default). 8758 8759This switch is mainly for debugging the compiler and will likely be removed 8760in a future version. 8761 8762@item -mno-scc 8763@opindex mno-scc 8764 8765Disable the use of conditional set instructions. 8766 8767This switch is mainly for debugging the compiler and will likely be removed 8768in a future version. 8769 8770@item -mcond-exec 8771@opindex mcond-exec 8772 8773Enable the use of conditional execution (default). 8774 8775This switch is mainly for debugging the compiler and will likely be removed 8776in a future version. 8777 8778@item -mno-cond-exec 8779@opindex mno-cond-exec 8780 8781Disable the use of conditional execution. 8782 8783This switch is mainly for debugging the compiler and will likely be removed 8784in a future version. 8785 8786@item -mvliw-branch 8787@opindex mvliw-branch 8788 8789Run a pass to pack branches into VLIW instructions (default). 8790 8791This switch is mainly for debugging the compiler and will likely be removed 8792in a future version. 8793 8794@item -mno-vliw-branch 8795@opindex mno-vliw-branch 8796 8797Do not run a pass to pack branches into VLIW instructions. 8798 8799This switch is mainly for debugging the compiler and will likely be removed 8800in a future version. 8801 8802@item -mmulti-cond-exec 8803@opindex mmulti-cond-exec 8804 8805Enable optimization of @code{&&} and @code{||} in conditional execution 8806(default). 8807 8808This switch is mainly for debugging the compiler and will likely be removed 8809in a future version. 8810 8811@item -mno-multi-cond-exec 8812@opindex mno-multi-cond-exec 8813 8814Disable optimization of @code{&&} and @code{||} in conditional execution. 8815 8816This switch is mainly for debugging the compiler and will likely be removed 8817in a future version. 8818 8819@item -mnested-cond-exec 8820@opindex mnested-cond-exec 8821 8822Enable nested conditional execution optimizations (default). 8823 8824This switch is mainly for debugging the compiler and will likely be removed 8825in a future version. 8826 8827@item -mno-nested-cond-exec 8828@opindex mno-nested-cond-exec 8829 8830Disable nested conditional execution optimizations. 8831 8832This switch is mainly for debugging the compiler and will likely be removed 8833in a future version. 8834 8835@item -moptimize-membar 8836@opindex moptimize-membar 8837 8838This switch removes redundant @code{membar} instructions from the 8839compiler generated code. It is enabled by default. 8840 8841@item -mno-optimize-membar 8842@opindex mno-optimize-membar 8843 8844This switch disables the automatic removal of redundant @code{membar} 8845instructions from the generated code. 8846 8847@item -mtomcat-stats 8848@opindex mtomcat-stats 8849 8850Cause gas to print out tomcat statistics. 8851 8852@item -mcpu=@var{cpu} 8853@opindex mcpu 8854 8855Select the processor type for which to generate code. Possible values are 8856@samp{frv}, @samp{fr550}, @samp{tomcat}, @samp{fr500}, @samp{fr450}, 8857@samp{fr405}, @samp{fr400}, @samp{fr300} and @samp{simple}. 8858 8859@end table 8860 8861@node GNU/Linux Options 8862@subsection GNU/Linux Options 8863 8864These @samp{-m} options are defined for GNU/Linux targets: 8865 8866@table @gcctabopt 8867@item -mglibc 8868@opindex mglibc 8869Use the GNU C library instead of uClibc. This is the default except 8870on @samp{*-*-linux-*uclibc*} targets. 8871 8872@item -muclibc 8873@opindex muclibc 8874Use uClibc instead of the GNU C library. This is the default on 8875@samp{*-*-linux-*uclibc*} targets. 8876@end table 8877 8878@node H8/300 Options 8879@subsection H8/300 Options 8880 8881These @samp{-m} options are defined for the H8/300 implementations: 8882 8883@table @gcctabopt 8884@item -mrelax 8885@opindex mrelax 8886Shorten some address references at link time, when possible; uses the 8887linker option @option{-relax}. @xref{H8/300,, @code{ld} and the H8/300, 8888ld, Using ld}, for a fuller description. 8889 8890@item -mh 8891@opindex mh 8892Generate code for the H8/300H@. 8893 8894@item -ms 8895@opindex ms 8896Generate code for the H8S@. 8897 8898@item -mn 8899@opindex mn 8900Generate code for the H8S and H8/300H in the normal mode. This switch 8901must be used either with @option{-mh} or @option{-ms}. 8902 8903@item -ms2600 8904@opindex ms2600 8905Generate code for the H8S/2600. This switch must be used with @option{-ms}. 8906 8907@item -mint32 8908@opindex mint32 8909Make @code{int} data 32 bits by default. 8910 8911@item -malign-300 8912@opindex malign-300 8913On the H8/300H and H8S, use the same alignment rules as for the H8/300. 8914The default for the H8/300H and H8S is to align longs and floats on 4 8915byte boundaries. 8916@option{-malign-300} causes them to be aligned on 2 byte boundaries. 8917This option has no effect on the H8/300. 8918@end table 8919 8920@node HPPA Options 8921@subsection HPPA Options 8922@cindex HPPA Options 8923 8924These @samp{-m} options are defined for the HPPA family of computers: 8925 8926@table @gcctabopt 8927@item -march=@var{architecture-type} 8928@opindex march 8929Generate code for the specified architecture. The choices for 8930@var{architecture-type} are @samp{1.0} for PA 1.0, @samp{1.1} for PA 89311.1, and @samp{2.0} for PA 2.0 processors. Refer to 8932@file{/usr/lib/sched.models} on an HP-UX system to determine the proper 8933architecture option for your machine. Code compiled for lower numbered 8934architectures will run on higher numbered architectures, but not the 8935other way around. 8936 8937@item -mpa-risc-1-0 8938@itemx -mpa-risc-1-1 8939@itemx -mpa-risc-2-0 8940@opindex mpa-risc-1-0 8941@opindex mpa-risc-1-1 8942@opindex mpa-risc-2-0 8943Synonyms for @option{-march=1.0}, @option{-march=1.1}, and @option{-march=2.0} respectively. 8944 8945@item -mbig-switch 8946@opindex mbig-switch 8947Generate code suitable for big switch tables. Use this option only if 8948the assembler/linker complain about out of range branches within a switch 8949table. 8950 8951@item -mjump-in-delay 8952@opindex mjump-in-delay 8953Fill delay slots of function calls with unconditional jump instructions 8954by modifying the return pointer for the function call to be the target 8955of the conditional jump. 8956 8957@item -mdisable-fpregs 8958@opindex mdisable-fpregs 8959Prevent floating point registers from being used in any manner. This is 8960necessary for compiling kernels which perform lazy context switching of 8961floating point registers. If you use this option and attempt to perform 8962floating point operations, the compiler will abort. 8963 8964@item -mdisable-indexing 8965@opindex mdisable-indexing 8966Prevent the compiler from using indexing address modes. This avoids some 8967rather obscure problems when compiling MIG generated code under MACH@. 8968 8969@item -mno-space-regs 8970@opindex mno-space-regs 8971Generate code that assumes the target has no space registers. This allows 8972GCC to generate faster indirect calls and use unscaled index address modes. 8973 8974Such code is suitable for level 0 PA systems and kernels. 8975 8976@item -mfast-indirect-calls 8977@opindex mfast-indirect-calls 8978Generate code that assumes calls never cross space boundaries. This 8979allows GCC to emit code which performs faster indirect calls. 8980 8981This option will not work in the presence of shared libraries or nested 8982functions. 8983 8984@item -mfixed-range=@var{register-range} 8985@opindex mfixed-range 8986Generate code treating the given register range as fixed registers. 8987A fixed register is one that the register allocator can not use. This is 8988useful when compiling kernel code. A register range is specified as 8989two registers separated by a dash. Multiple register ranges can be 8990specified separated by a comma. 8991 8992@item -mlong-load-store 8993@opindex mlong-load-store 8994Generate 3-instruction load and store sequences as sometimes required by 8995the HP-UX 10 linker. This is equivalent to the @samp{+k} option to 8996the HP compilers. 8997 8998@item -mportable-runtime 8999@opindex mportable-runtime 9000Use the portable calling conventions proposed by HP for ELF systems. 9001 9002@item -mgas 9003@opindex mgas 9004Enable the use of assembler directives only GAS understands. 9005 9006@item -mschedule=@var{cpu-type} 9007@opindex mschedule 9008Schedule code according to the constraints for the machine type 9009@var{cpu-type}. The choices for @var{cpu-type} are @samp{700} 9010@samp{7100}, @samp{7100LC}, @samp{7200}, @samp{7300} and @samp{8000}. Refer 9011to @file{/usr/lib/sched.models} on an HP-UX system to determine the 9012proper scheduling option for your machine. The default scheduling is 9013@samp{8000}. 9014 9015@item -mlinker-opt 9016@opindex mlinker-opt 9017Enable the optimization pass in the HP-UX linker. Note this makes symbolic 9018debugging impossible. It also triggers a bug in the HP-UX 8 and HP-UX 9 9019linkers in which they give bogus error messages when linking some programs. 9020 9021@item -msoft-float 9022@opindex msoft-float 9023Generate output containing library calls for floating point. 9024@strong{Warning:} the requisite libraries are not available for all HPPA 9025targets. Normally the facilities of the machine's usual C compiler are 9026used, but this cannot be done directly in cross-compilation. You must make 9027your own arrangements to provide suitable library functions for 9028cross-compilation. The embedded target @samp{hppa1.1-*-pro} 9029does provide software floating point support. 9030 9031@option{-msoft-float} changes the calling convention in the output file; 9032therefore, it is only useful if you compile @emph{all} of a program with 9033this option. In particular, you need to compile @file{libgcc.a}, the 9034library that comes with GCC, with @option{-msoft-float} in order for 9035this to work. 9036 9037@item -msio 9038@opindex msio 9039Generate the predefine, @code{_SIO}, for server IO@. The default is 9040@option{-mwsio}. This generates the predefines, @code{__hp9000s700}, 9041@code{__hp9000s700__} and @code{_WSIO}, for workstation IO@. These 9042options are available under HP-UX and HI-UX@. 9043 9044@item -mgnu-ld 9045@opindex gnu-ld 9046Use GNU ld specific options. This passes @option{-shared} to ld when 9047building a shared library. It is the default when GCC is configured, 9048explicitly or implicitly, with the GNU linker. This option does not 9049have any affect on which ld is called, it only changes what parameters 9050are passed to that ld. The ld that is called is determined by the 9051@option{--with-ld} configure option, GCC's program search path, and 9052finally by the user's @env{PATH}. The linker used by GCC can be printed 9053using @samp{which `gcc -print-prog-name=ld`}. This option is only available 9054on the 64 bit HP-UX GCC, i.e. configured with @samp{hppa*64*-*-hpux*}. 9055 9056@item -mhp-ld 9057@opindex hp-ld 9058Use HP ld specific options. This passes @option{-b} to ld when building 9059a shared library and passes @option{+Accept TypeMismatch} to ld on all 9060links. It is the default when GCC is configured, explicitly or 9061implicitly, with the HP linker. This option does not have any affect on 9062which ld is called, it only changes what parameters are passed to that 9063ld. The ld that is called is determined by the @option{--with-ld} 9064configure option, GCC's program search path, and finally by the user's 9065@env{PATH}. The linker used by GCC can be printed using @samp{which 9066`gcc -print-prog-name=ld`}. This option is only available on the 64 bit 9067HP-UX GCC, i.e. configured with @samp{hppa*64*-*-hpux*}. 9068 9069@item -mlong-calls 9070@opindex mno-long-calls 9071Generate code that uses long call sequences. This ensures that a call 9072is always able to reach linker generated stubs. The default is to generate 9073long calls only when the distance from the call site to the beginning 9074of the function or translation unit, as the case may be, exceeds a 9075predefined limit set by the branch type being used. The limits for 9076normal calls are 7,600,000 and 240,000 bytes, respectively for the 9077PA 2.0 and PA 1.X architectures. Sibcalls are always limited at 9078240,000 bytes. 9079 9080Distances are measured from the beginning of functions when using the 9081@option{-ffunction-sections} option, or when using the @option{-mgas} 9082and @option{-mno-portable-runtime} options together under HP-UX with 9083the SOM linker. 9084 9085It is normally not desirable to use this option as it will degrade 9086performance. However, it may be useful in large applications, 9087particularly when partial linking is used to build the application. 9088 9089The types of long calls used depends on the capabilities of the 9090assembler and linker, and the type of code being generated. The 9091impact on systems that support long absolute calls, and long pic 9092symbol-difference or pc-relative calls should be relatively small. 9093However, an indirect call is used on 32-bit ELF systems in pic code 9094and it is quite long. 9095 9096@item -munix=@var{unix-std} 9097@opindex march 9098Generate compiler predefines and select a startfile for the specified 9099UNIX standard. The choices for @var{unix-std} are @samp{93}, @samp{95} 9100and @samp{98}. @samp{93} is supported on all HP-UX versions. @samp{95} 9101is available on HP-UX 10.10 and later. @samp{98} is available on HP-UX 910211.11 and later. The default values are @samp{93} for HP-UX 10.00, 9103@samp{95} for HP-UX 10.10 though to 11.00, and @samp{98} for HP-UX 11.11 9104and later. 9105 9106@option{-munix=93} provides the same predefines as GCC 3.3 and 3.4. 9107@option{-munix=95} provides additional predefines for @code{XOPEN_UNIX} 9108and @code{_XOPEN_SOURCE_EXTENDED}, and the startfile @file{unix95.o}. 9109@option{-munix=98} provides additional predefines for @code{_XOPEN_UNIX}, 9110@code{_XOPEN_SOURCE_EXTENDED}, @code{_INCLUDE__STDC_A1_SOURCE} and 9111@code{_INCLUDE_XOPEN_SOURCE_500}, and the startfile @file{unix98.o}. 9112 9113It is @emph{important} to note that this option changes the interfaces 9114for various library routines. It also affects the operational behavior 9115of the C library. Thus, @emph{extreme} care is needed in using this 9116option. 9117 9118Library code that is intended to operate with more than one UNIX 9119standard must test, set and restore the variable @var{__xpg4_extended_mask} 9120as appropriate. Most GNU software doesn't provide this capability. 9121 9122@item -nolibdld 9123@opindex nolibdld 9124Suppress the generation of link options to search libdld.sl when the 9125@option{-static} option is specified on HP-UX 10 and later. 9126 9127@item -static 9128@opindex static 9129The HP-UX implementation of setlocale in libc has a dependency on 9130libdld.sl. There isn't an archive version of libdld.sl. Thus, 9131when the @option{-static} option is specified, special link options 9132are needed to resolve this dependency. 9133 9134On HP-UX 10 and later, the GCC driver adds the necessary options to 9135link with libdld.sl when the @option{-static} option is specified. 9136This causes the resulting binary to be dynamic. On the 64-bit port, 9137the linkers generate dynamic binaries by default in any case. The 9138@option{-nolibdld} option can be used to prevent the GCC driver from 9139adding these link options. 9140 9141@item -threads 9142@opindex threads 9143Add support for multithreading with the @dfn{dce thread} library 9144under HP-UX@. This option sets flags for both the preprocessor and 9145linker. 9146@end table 9147 9148@node i386 and x86-64 Options 9149@subsection Intel 386 and AMD x86-64 Options 9150@cindex i386 Options 9151@cindex x86-64 Options 9152@cindex Intel 386 Options 9153@cindex AMD x86-64 Options 9154 9155These @samp{-m} options are defined for the i386 and x86-64 family of 9156computers: 9157 9158@table @gcctabopt 9159@item -mtune=@var{cpu-type} 9160@opindex mtune 9161Tune to @var{cpu-type} everything applicable about the generated code, except 9162for the ABI and the set of available instructions. The choices for 9163@var{cpu-type} are: 9164@table @emph 9165@item generic 9166Produce code optimized for the most common IA32/AMD64/EM64T processors. 9167If you know the CPU on which your code will run, then you should use 9168the corresponding @option{-mtune} option instead of 9169@option{-mtune=generic}. But, if you do not know exactly what CPU users 9170of your application will have, then you should use this option. 9171 9172As new processors are deployed in the marketplace, the behavior of this 9173option will change. Therefore, if you upgrade to a newer version of 9174GCC, the code generated option will change to reflect the processors 9175that were most common when that version of GCC was released. 9176 9177There is no @option{-march=generic} option because @option{-march} 9178indicates the instruction set the compiler can use, and there is no 9179generic instruction set applicable to all processors. In contrast, 9180@option{-mtune} indicates the processor (or, in this case, collection of 9181processors) for which the code is optimized. 9182@item native 9183This selects the CPU to tune for at compilation time by determining 9184the processor type of the compiling machine. Using @option{-mtune=native} 9185will produce code optimized for the local machine under the constraints 9186of the selected instruction set. Using @option{-march=native} will 9187enable all instruction subsets supported by the local machine (hence 9188the result might not run on different machines). 9189@item i386 9190Original Intel's i386 CPU@. 9191@item i486 9192Intel's i486 CPU@. (No scheduling is implemented for this chip.) 9193@item i586, pentium 9194Intel Pentium CPU with no MMX support. 9195@item pentium-mmx 9196Intel PentiumMMX CPU based on Pentium core with MMX instruction set support. 9197@item pentiumpro 9198Intel PentiumPro CPU@. 9199@item i686 9200Same as @code{generic}, but when used as @code{march} option, PentiumPro 9201instruction set will be used, so the code will run on all i686 family chips. 9202@item pentium2 9203Intel Pentium2 CPU based on PentiumPro core with MMX instruction set support. 9204@item pentium3, pentium3m 9205Intel Pentium3 CPU based on PentiumPro core with MMX and SSE instruction set 9206support. 9207@item pentium-m 9208Low power version of Intel Pentium3 CPU with MMX, SSE and SSE2 instruction set 9209support. Used by Centrino notebooks. 9210@item pentium4, pentium4m 9211Intel Pentium4 CPU with MMX, SSE and SSE2 instruction set support. 9212@item prescott 9213Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2 and SSE3 instruction 9214set support. 9215@item nocona 9216Improved version of Intel Pentium4 CPU with 64-bit extensions, MMX, SSE, 9217SSE2 and SSE3 instruction set support. 9218@item core2 9219Intel Core2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 and SSSE3 9220instruction set support. 9221@item k6 9222AMD K6 CPU with MMX instruction set support. 9223@item k6-2, k6-3 9224Improved versions of AMD K6 CPU with MMX and 3dNOW! instruction set support. 9225@item athlon, athlon-tbird 9226AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and SSE prefetch instructions 9227support. 9228@item athlon-4, athlon-xp, athlon-mp 9229Improved AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and full SSE 9230instruction set support. 9231@item k8, opteron, athlon64, athlon-fx 9232AMD K8 core based CPUs with x86-64 instruction set support. (This supersets 9233MMX, SSE, SSE2, 3dNOW!, enhanced 3dNOW! and 64-bit instruction set extensions.) 9234@item k8-sse3, opteron-sse3, athlon64-sse3 9235Improved versions of k8, opteron and athlon64 with SSE3 instruction set support. 9236@item amdfam10, barcelona 9237AMD Family 10h core based CPUs with x86-64 instruction set support. (This 9238supersets MMX, SSE, SSE2, SSE3, SSE4A, 3dNOW!, enhanced 3dNOW!, ABM and 64-bit 9239instruction set extensions.) 9240@item winchip-c6 9241IDT Winchip C6 CPU, dealt in same way as i486 with additional MMX instruction 9242set support. 9243@item winchip2 9244IDT Winchip2 CPU, dealt in same way as i486 with additional MMX and 3dNOW! 9245instruction set support. 9246@item c3 9247Via C3 CPU with MMX and 3dNOW! instruction set support. (No scheduling is 9248implemented for this chip.) 9249@item c3-2 9250Via C3-2 CPU with MMX and SSE instruction set support. (No scheduling is 9251implemented for this chip.) 9252@item geode 9253Embedded AMD CPU with MMX and 3dNOW! instruction set support. 9254@end table 9255 9256While picking a specific @var{cpu-type} will schedule things appropriately 9257for that particular chip, the compiler will not generate any code that 9258does not run on the i386 without the @option{-march=@var{cpu-type}} option 9259being used. 9260 9261@item -march=@var{cpu-type} 9262@opindex march 9263Generate instructions for the machine type @var{cpu-type}. The choices 9264for @var{cpu-type} are the same as for @option{-mtune}. Moreover, 9265specifying @option{-march=@var{cpu-type}} implies @option{-mtune=@var{cpu-type}}. 9266 9267@item -mcpu=@var{cpu-type} 9268@opindex mcpu 9269A deprecated synonym for @option{-mtune}. 9270 9271@item -m386 9272@itemx -m486 9273@itemx -mpentium 9274@itemx -mpentiumpro 9275@opindex m386 9276@opindex m486 9277@opindex mpentium 9278@opindex mpentiumpro 9279These options are synonyms for @option{-mtune=i386}, @option{-mtune=i486}, 9280@option{-mtune=pentium}, and @option{-mtune=pentiumpro} respectively. 9281These synonyms are deprecated. 9282 9283@item -mfpmath=@var{unit} 9284@opindex march 9285Generate floating point arithmetics for selected unit @var{unit}. The choices 9286for @var{unit} are: 9287 9288@table @samp 9289@item 387 9290Use the standard 387 floating point coprocessor present majority of chips and 9291emulated otherwise. Code compiled with this option will run almost everywhere. 9292The temporary results are computed in 80bit precision instead of precision 9293specified by the type resulting in slightly different results compared to most 9294of other chips. See @option{-ffloat-store} for more detailed description. 9295 9296This is the default choice for i386 compiler. 9297 9298@item sse 9299Use scalar floating point instructions present in the SSE instruction set. 9300This instruction set is supported by Pentium3 and newer chips, in the AMD line 9301by Athlon-4, Athlon-xp and Athlon-mp chips. The earlier version of SSE 9302instruction set supports only single precision arithmetics, thus the double and 9303extended precision arithmetics is still done using 387. Later version, present 9304only in Pentium4 and the future AMD x86-64 chips supports double precision 9305arithmetics too. 9306 9307For the i386 compiler, you need to use @option{-march=@var{cpu-type}}, @option{-msse} 9308or @option{-msse2} switches to enable SSE extensions and make this option 9309effective. For the x86-64 compiler, these extensions are enabled by default. 9310 9311The resulting code should be considerably faster in the majority of cases and avoid 9312the numerical instability problems of 387 code, but may break some existing 9313code that expects temporaries to be 80bit. 9314 9315This is the default choice for the x86-64 compiler. 9316 9317@item sse,387 9318Attempt to utilize both instruction sets at once. This effectively double the 9319amount of available registers and on chips with separate execution units for 9320387 and SSE the execution resources too. Use this option with care, as it is 9321still experimental, because the GCC register allocator does not model separate 9322functional units well resulting in instable performance. 9323@end table 9324 9325@item -masm=@var{dialect} 9326@opindex masm=@var{dialect} 9327Output asm instructions using selected @var{dialect}. Supported 9328choices are @samp{intel} or @samp{att} (the default one). Darwin does 9329not support @samp{intel}. 9330 9331@item -mieee-fp 9332@itemx -mno-ieee-fp 9333@opindex mieee-fp 9334@opindex mno-ieee-fp 9335Control whether or not the compiler uses IEEE floating point 9336comparisons. These handle correctly the case where the result of a 9337comparison is unordered. 9338 9339@item -msoft-float 9340@opindex msoft-float 9341Generate output containing library calls for floating point. 9342@strong{Warning:} the requisite libraries are not part of GCC@. 9343Normally the facilities of the machine's usual C compiler are used, but 9344this can't be done directly in cross-compilation. You must make your 9345own arrangements to provide suitable library functions for 9346cross-compilation. 9347 9348On machines where a function returns floating point results in the 80387 9349register stack, some floating point opcodes may be emitted even if 9350@option{-msoft-float} is used. 9351 9352@item -mno-fp-ret-in-387 9353@opindex mno-fp-ret-in-387 9354Do not use the FPU registers for return values of functions. 9355 9356The usual calling convention has functions return values of types 9357@code{float} and @code{double} in an FPU register, even if there 9358is no FPU@. The idea is that the operating system should emulate 9359an FPU@. 9360 9361The option @option{-mno-fp-ret-in-387} causes such values to be returned 9362in ordinary CPU registers instead. 9363 9364@item -mno-fancy-math-387 9365@opindex mno-fancy-math-387 9366Some 387 emulators do not support the @code{sin}, @code{cos} and 9367@code{sqrt} instructions for the 387. Specify this option to avoid 9368generating those instructions. This option is the default on 9369OpenBSD and NetBSD@. This option is overridden when @option{-march} 9370indicates that the target cpu will always have an FPU and so the 9371instruction will not need emulation. As of revision 2.6.1, these 9372instructions are not generated unless you also use the 9373@option{-funsafe-math-optimizations} switch. 9374 9375@item -malign-double 9376@itemx -mno-align-double 9377@opindex malign-double 9378@opindex mno-align-double 9379Control whether GCC aligns @code{double}, @code{long double}, and 9380@code{long long} variables on a two word boundary or a one word 9381boundary. Aligning @code{double} variables on a two word boundary will 9382produce code that runs somewhat faster on a @samp{Pentium} at the 9383expense of more memory. 9384 9385On x86-64, @option{-malign-double} is enabled by default. 9386 9387@strong{Warning:} if you use the @option{-malign-double} switch, 9388structures containing the above types will be aligned differently than 9389the published application binary interface specifications for the 386 9390and will not be binary compatible with structures in code compiled 9391without that switch. 9392 9393@item -m96bit-long-double 9394@itemx -m128bit-long-double 9395@opindex m96bit-long-double 9396@opindex m128bit-long-double 9397These switches control the size of @code{long double} type. The i386 9398application binary interface specifies the size to be 96 bits, 9399so @option{-m96bit-long-double} is the default in 32 bit mode. 9400 9401Modern architectures (Pentium and newer) would prefer @code{long double} 9402to be aligned to an 8 or 16 byte boundary. In arrays or structures 9403conforming to the ABI, this would not be possible. So specifying a 9404@option{-m128bit-long-double} will align @code{long double} 9405to a 16 byte boundary by padding the @code{long double} with an additional 940632 bit zero. 9407 9408In the x86-64 compiler, @option{-m128bit-long-double} is the default choice as 9409its ABI specifies that @code{long double} is to be aligned on 16 byte boundary. 9410 9411Notice that neither of these options enable any extra precision over the x87 9412standard of 80 bits for a @code{long double}. 9413 9414@strong{Warning:} if you override the default value for your target ABI, the 9415structures and arrays containing @code{long double} variables will change 9416their size as well as function calling convention for function taking 9417@code{long double} will be modified. Hence they will not be binary 9418compatible with arrays or structures in code compiled without that switch. 9419 9420@item -mmlarge-data-threshold=@var{number} 9421@opindex mlarge-data-threshold=@var{number} 9422When @option{-mcmodel=medium} is specified, the data greater than 9423@var{threshold} are placed in large data section. This value must be the 9424same across all object linked into the binary and defaults to 65535. 9425 9426@item -msvr3-shlib 9427@itemx -mno-svr3-shlib 9428@opindex msvr3-shlib 9429@opindex mno-svr3-shlib 9430Control whether GCC places uninitialized local variables into the 9431@code{bss} or @code{data} segments. @option{-msvr3-shlib} places them 9432into @code{bss}. These options are meaningful only on System V Release 3. 9433 9434@item -mrtd 9435@opindex mrtd 9436Use a different function-calling convention, in which functions that 9437take a fixed number of arguments return with the @code{ret} @var{num} 9438instruction, which pops their arguments while returning. This saves one 9439instruction in the caller since there is no need to pop the arguments 9440there. 9441 9442You can specify that an individual function is called with this calling 9443sequence with the function attribute @samp{stdcall}. You can also 9444override the @option{-mrtd} option by using the function attribute 9445@samp{cdecl}. @xref{Function Attributes}. 9446 9447@strong{Warning:} this calling convention is incompatible with the one 9448normally used on Unix, so you cannot use it if you need to call 9449libraries compiled with the Unix compiler. 9450 9451Also, you must provide function prototypes for all functions that 9452take variable numbers of arguments (including @code{printf}); 9453otherwise incorrect code will be generated for calls to those 9454functions. 9455 9456In addition, seriously incorrect code will result if you call a 9457function with too many arguments. (Normally, extra arguments are 9458harmlessly ignored.) 9459 9460@item -mregparm=@var{num} 9461@opindex mregparm 9462Control how many registers are used to pass integer arguments. By 9463default, no registers are used to pass arguments, and at most 3 9464registers can be used. You can control this behavior for a specific 9465function by using the function attribute @samp{regparm}. 9466@xref{Function Attributes}. 9467 9468@strong{Warning:} if you use this switch, and 9469@var{num} is nonzero, then you must build all modules with the same 9470value, including any libraries. This includes the system libraries and 9471startup modules. 9472 9473@item -msseregparm 9474@opindex msseregparm 9475Use SSE register passing conventions for float and double arguments 9476and return values. You can control this behavior for a specific 9477function by using the function attribute @samp{sseregparm}. 9478@xref{Function Attributes}. 9479 9480@strong{Warning:} if you use this switch then you must build all 9481modules with the same value, including any libraries. This includes 9482the system libraries and startup modules. 9483 9484@item -mstackrealign 9485@opindex mstackrealign 9486Realign the stack at entry. On the Intel x86, the 9487@option{-mstackrealign} option will generate an alternate prologue and 9488epilogue that realigns the runtime stack. This supports mixing legacy 9489codes that keep a 4-byte aligned stack with modern codes that keep a 949016-byte stack for SSE compatibility. The alternate prologue and 9491epilogue are slower and bigger than the regular ones, and the 9492alternate prologue requires an extra scratch register; this lowers the 9493number of registers available if used in conjunction with the 9494@code{regparm} attribute. The @option{-mstackrealign} option is 9495incompatible with the nested function prologue; this is considered a 9496hard error. See also the attribute @code{force_align_arg_pointer}, 9497applicable to individual functions. 9498 9499@item -mpreferred-stack-boundary=@var{num} 9500@opindex mpreferred-stack-boundary 9501Attempt to keep the stack boundary aligned to a 2 raised to @var{num} 9502byte boundary. If @option{-mpreferred-stack-boundary} is not specified, 9503the default is 4 (16 bytes or 128 bits). 9504 9505On Pentium and PentiumPro, @code{double} and @code{long double} values 9506should be aligned to an 8 byte boundary (see @option{-malign-double}) or 9507suffer significant run time performance penalties. On Pentium III, the 9508Streaming SIMD Extension (SSE) data type @code{__m128} may not work 9509properly if it is not 16 byte aligned. 9510 9511To ensure proper alignment of this values on the stack, the stack boundary 9512must be as aligned as that required by any value stored on the stack. 9513Further, every function must be generated such that it keeps the stack 9514aligned. Thus calling a function compiled with a higher preferred 9515stack boundary from a function compiled with a lower preferred stack 9516boundary will most likely misalign the stack. It is recommended that 9517libraries that use callbacks always use the default setting. 9518 9519This extra alignment does consume extra stack space, and generally 9520increases code size. Code that is sensitive to stack space usage, such 9521as embedded systems and operating system kernels, may want to reduce the 9522preferred alignment to @option{-mpreferred-stack-boundary=2}. 9523 9524@item -mmmx 9525@itemx -mno-mmx 9526@item -msse 9527@itemx -mno-sse 9528@item -msse2 9529@itemx -mno-sse2 9530@item -msse3 9531@itemx -mno-sse3 9532@item -mssse3 9533@itemx -mno-ssse3 9534@item -msse4a 9535@item -mno-sse4a 9536@item -m3dnow 9537@itemx -mno-3dnow 9538@item -mpopcnt 9539@itemx -mno-popcnt 9540@item -mabm 9541@itemx -mno-abm 9542@opindex mmmx 9543@opindex mno-mmx 9544@opindex msse 9545@opindex mno-sse 9546@opindex m3dnow 9547@opindex mno-3dnow 9548These switches enable or disable the use of instructions in the MMX, 9549SSE, SSE2, SSE3, SSSE3, SSE4A, ABM or 3DNow! extended instruction sets. 9550These extensions are also available as built-in functions: see 9551@ref{X86 Built-in Functions}, for details of the functions enabled and 9552disabled by these switches. 9553 9554To have SSE/SSE2 instructions generated automatically from floating-point 9555code (as opposed to 387 instructions), see @option{-mfpmath=sse}. 9556 9557These options will enable GCC to use these extended instructions in 9558generated code, even without @option{-mfpmath=sse}. Applications which 9559perform runtime CPU detection must compile separate files for each 9560supported architecture, using the appropriate flags. In particular, 9561the file containing the CPU detection code should be compiled without 9562these options. 9563 9564@item -mpush-args 9565@itemx -mno-push-args 9566@opindex mpush-args 9567@opindex mno-push-args 9568Use PUSH operations to store outgoing parameters. This method is shorter 9569and usually equally fast as method using SUB/MOV operations and is enabled 9570by default. In some cases disabling it may improve performance because of 9571improved scheduling and reduced dependencies. 9572 9573@item -maccumulate-outgoing-args 9574@opindex maccumulate-outgoing-args 9575If enabled, the maximum amount of space required for outgoing arguments will be 9576computed in the function prologue. This is faster on most modern CPUs 9577because of reduced dependencies, improved scheduling and reduced stack usage 9578when preferred stack boundary is not equal to 2. The drawback is a notable 9579increase in code size. This switch implies @option{-mno-push-args}. 9580 9581@item -mthreads 9582@opindex mthreads 9583Support thread-safe exception handling on @samp{Mingw32}. Code that relies 9584on thread-safe exception handling must compile and link all code with the 9585@option{-mthreads} option. When compiling, @option{-mthreads} defines 9586@option{-D_MT}; when linking, it links in a special thread helper library 9587@option{-lmingwthrd} which cleans up per thread exception handling data. 9588 9589@item -mno-align-stringops 9590@opindex mno-align-stringops 9591Do not align destination of inlined string operations. This switch reduces 9592code size and improves performance in case the destination is already aligned, 9593but GCC doesn't know about it. 9594 9595@item -minline-all-stringops 9596@opindex minline-all-stringops 9597By default GCC inlines string operations only when destination is known to be 9598aligned at least to 4 byte boundary. This enables more inlining, increase code 9599size, but may improve performance of code that depends on fast memcpy, strlen 9600and memset for short lengths. 9601 9602@item -momit-leaf-frame-pointer 9603@opindex momit-leaf-frame-pointer 9604Don't keep the frame pointer in a register for leaf functions. This 9605avoids the instructions to save, set up and restore frame pointers and 9606makes an extra register available in leaf functions. The option 9607@option{-fomit-frame-pointer} removes the frame pointer for all functions 9608which might make debugging harder. 9609 9610@item -mtls-direct-seg-refs 9611@itemx -mno-tls-direct-seg-refs 9612@opindex mtls-direct-seg-refs 9613Controls whether TLS variables may be accessed with offsets from the 9614TLS segment register (@code{%gs} for 32-bit, @code{%fs} for 64-bit), 9615or whether the thread base pointer must be added. Whether or not this 9616is legal depends on the operating system, and whether it maps the 9617segment to cover the entire TLS area. 9618 9619For systems that use GNU libc, the default is on. 9620@end table 9621 9622These @samp{-m} switches are supported in addition to the above 9623on AMD x86-64 processors in 64-bit environments. 9624 9625@table @gcctabopt 9626@item -m32 9627@itemx -m64 9628@opindex m32 9629@opindex m64 9630Generate code for a 32-bit or 64-bit environment. 9631The 32-bit environment sets int, long and pointer to 32 bits and 9632generates code that runs on any i386 system. 9633The 64-bit environment sets int to 32 bits and long and pointer 9634to 64 bits and generates code for AMD's x86-64 architecture. For 9635darwin only the -m64 option turns off the @option{-fno-pic} and 9636@option{-mdynamic-no-pic} options. 9637 9638@item -mno-red-zone 9639@opindex no-red-zone 9640Do not use a so called red zone for x86-64 code. The red zone is mandated 9641by the x86-64 ABI, it is a 128-byte area beyond the location of the 9642stack pointer that will not be modified by signal or interrupt handlers 9643and therefore can be used for temporary data without adjusting the stack 9644pointer. The flag @option{-mno-red-zone} disables this red zone. 9645 9646@item -mcmodel=small 9647@opindex mcmodel=small 9648Generate code for the small code model: the program and its symbols must 9649be linked in the lower 2 GB of the address space. Pointers are 64 bits. 9650Programs can be statically or dynamically linked. This is the default 9651code model. 9652 9653@item -mcmodel=kernel 9654@opindex mcmodel=kernel 9655Generate code for the kernel code model. The kernel runs in the 9656negative 2 GB of the address space. 9657This model has to be used for Linux kernel code. 9658 9659@item -mcmodel=medium 9660@opindex mcmodel=medium 9661Generate code for the medium model: The program is linked in the lower 2 9662GB of the address space but symbols can be located anywhere in the 9663address space. Programs can be statically or dynamically linked, but 9664building of shared libraries are not supported with the medium model. 9665 9666@item -mcmodel=large 9667@opindex mcmodel=large 9668Generate code for the large model: This model makes no assumptions 9669about addresses and sizes of sections. Currently GCC does not implement 9670this model. 9671@end table 9672 9673@node IA-64 Options 9674@subsection IA-64 Options 9675@cindex IA-64 Options 9676 9677These are the @samp{-m} options defined for the Intel IA-64 architecture. 9678 9679@table @gcctabopt 9680@item -mbig-endian 9681@opindex mbig-endian 9682Generate code for a big endian target. This is the default for HP-UX@. 9683 9684@item -mlittle-endian 9685@opindex mlittle-endian 9686Generate code for a little endian target. This is the default for AIX5 9687and GNU/Linux. 9688 9689@item -mgnu-as 9690@itemx -mno-gnu-as 9691@opindex mgnu-as 9692@opindex mno-gnu-as 9693Generate (or don't) code for the GNU assembler. This is the default. 9694@c Also, this is the default if the configure option @option{--with-gnu-as} 9695@c is used. 9696 9697@item -mgnu-ld 9698@itemx -mno-gnu-ld 9699@opindex mgnu-ld 9700@opindex mno-gnu-ld 9701Generate (or don't) code for the GNU linker. This is the default. 9702@c Also, this is the default if the configure option @option{--with-gnu-ld} 9703@c is used. 9704 9705@item -mno-pic 9706@opindex mno-pic 9707Generate code that does not use a global pointer register. The result 9708is not position independent code, and violates the IA-64 ABI@. 9709 9710@item -mvolatile-asm-stop 9711@itemx -mno-volatile-asm-stop 9712@opindex mvolatile-asm-stop 9713@opindex mno-volatile-asm-stop 9714Generate (or don't) a stop bit immediately before and after volatile asm 9715statements. 9716 9717@item -mregister-names 9718@itemx -mno-register-names 9719@opindex mregister-names 9720@opindex mno-register-names 9721Generate (or don't) @samp{in}, @samp{loc}, and @samp{out} register names for 9722the stacked registers. This may make assembler output more readable. 9723 9724@item -mno-sdata 9725@itemx -msdata 9726@opindex mno-sdata 9727@opindex msdata 9728Disable (or enable) optimizations that use the small data section. This may 9729be useful for working around optimizer bugs. 9730 9731@item -mconstant-gp 9732@opindex mconstant-gp 9733Generate code that uses a single constant global pointer value. This is 9734useful when compiling kernel code. 9735 9736@item -mauto-pic 9737@opindex mauto-pic 9738Generate code that is self-relocatable. This implies @option{-mconstant-gp}. 9739This is useful when compiling firmware code. 9740 9741@item -minline-float-divide-min-latency 9742@opindex minline-float-divide-min-latency 9743Generate code for inline divides of floating point values 9744using the minimum latency algorithm. 9745 9746@item -minline-float-divide-max-throughput 9747@opindex minline-float-divide-max-throughput 9748Generate code for inline divides of floating point values 9749using the maximum throughput algorithm. 9750 9751@item -minline-int-divide-min-latency 9752@opindex minline-int-divide-min-latency 9753Generate code for inline divides of integer values 9754using the minimum latency algorithm. 9755 9756@item -minline-int-divide-max-throughput 9757@opindex minline-int-divide-max-throughput 9758Generate code for inline divides of integer values 9759using the maximum throughput algorithm. 9760 9761@item -minline-sqrt-min-latency 9762@opindex minline-sqrt-min-latency 9763Generate code for inline square roots 9764using the minimum latency algorithm. 9765 9766@item -minline-sqrt-max-throughput 9767@opindex minline-sqrt-max-throughput 9768Generate code for inline square roots 9769using the maximum throughput algorithm. 9770 9771@item -mno-dwarf2-asm 9772@itemx -mdwarf2-asm 9773@opindex mno-dwarf2-asm 9774@opindex mdwarf2-asm 9775Don't (or do) generate assembler code for the DWARF2 line number debugging 9776info. This may be useful when not using the GNU assembler. 9777 9778@item -mearly-stop-bits 9779@itemx -mno-early-stop-bits 9780@opindex mearly-stop-bits 9781@opindex mno-early-stop-bits 9782Allow stop bits to be placed earlier than immediately preceding the 9783instruction that triggered the stop bit. This can improve instruction 9784scheduling, but does not always do so. 9785 9786@item -mfixed-range=@var{register-range} 9787@opindex mfixed-range 9788Generate code treating the given register range as fixed registers. 9789A fixed register is one that the register allocator can not use. This is 9790useful when compiling kernel code. A register range is specified as 9791two registers separated by a dash. Multiple register ranges can be 9792specified separated by a comma. 9793 9794@item -mtls-size=@var{tls-size} 9795@opindex mtls-size 9796Specify bit size of immediate TLS offsets. Valid values are 14, 22, and 979764. 9798 9799@item -mtune=@var{cpu-type} 9800@opindex mtune 9801Tune the instruction scheduling for a particular CPU, Valid values are 9802itanium, itanium1, merced, itanium2, and mckinley. 9803 9804@item -mt 9805@itemx -pthread 9806@opindex mt 9807@opindex pthread 9808Add support for multithreading using the POSIX threads library. This 9809option sets flags for both the preprocessor and linker. It does 9810not affect the thread safety of object code produced by the compiler or 9811that of libraries supplied with it. These are HP-UX specific flags. 9812 9813@item -milp32 9814@itemx -mlp64 9815@opindex milp32 9816@opindex mlp64 9817Generate code for a 32-bit or 64-bit environment. 9818The 32-bit environment sets int, long and pointer to 32 bits. 9819The 64-bit environment sets int to 32 bits and long and pointer 9820to 64 bits. These are HP-UX specific flags. 9821 9822@item -mno-sched-br-data-spec 9823@itemx -msched-br-data-spec 9824@opindex mno-sched-br-data-spec 9825@opindex msched-br-data-spec 9826(Dis/En)able data speculative scheduling before reload. 9827This will result in generation of the ld.a instructions and 9828the corresponding check instructions (ld.c / chk.a). 9829The default is 'disable'. 9830 9831@item -msched-ar-data-spec 9832@itemx -mno-sched-ar-data-spec 9833@opindex msched-ar-data-spec 9834@opindex mno-sched-ar-data-spec 9835(En/Dis)able data speculative scheduling after reload. 9836This will result in generation of the ld.a instructions and 9837the corresponding check instructions (ld.c / chk.a). 9838The default is 'enable'. 9839 9840@item -mno-sched-control-spec 9841@itemx -msched-control-spec 9842@opindex mno-sched-control-spec 9843@opindex msched-control-spec 9844(Dis/En)able control speculative scheduling. This feature is 9845available only during region scheduling (i.e. before reload). 9846This will result in generation of the ld.s instructions and 9847the corresponding check instructions chk.s . 9848The default is 'disable'. 9849 9850@item -msched-br-in-data-spec 9851@itemx -mno-sched-br-in-data-spec 9852@opindex msched-br-in-data-spec 9853@opindex mno-sched-br-in-data-spec 9854(En/Dis)able speculative scheduling of the instructions that 9855are dependent on the data speculative loads before reload. 9856This is effective only with @option{-msched-br-data-spec} enabled. 9857The default is 'enable'. 9858 9859@item -msched-ar-in-data-spec 9860@itemx -mno-sched-ar-in-data-spec 9861@opindex msched-ar-in-data-spec 9862@opindex mno-sched-ar-in-data-spec 9863(En/Dis)able speculative scheduling of the instructions that 9864are dependent on the data speculative loads after reload. 9865This is effective only with @option{-msched-ar-data-spec} enabled. 9866The default is 'enable'. 9867 9868@item -msched-in-control-spec 9869@itemx -mno-sched-in-control-spec 9870@opindex msched-in-control-spec 9871@opindex mno-sched-in-control-spec 9872(En/Dis)able speculative scheduling of the instructions that 9873are dependent on the control speculative loads. 9874This is effective only with @option{-msched-control-spec} enabled. 9875The default is 'enable'. 9876 9877@item -msched-ldc 9878@itemx -mno-sched-ldc 9879@opindex msched-ldc 9880@opindex mno-sched-ldc 9881(En/Dis)able use of simple data speculation checks ld.c . 9882If disabled, only chk.a instructions will be emitted to check 9883data speculative loads. 9884The default is 'enable'. 9885 9886@item -mno-sched-control-ldc 9887@itemx -msched-control-ldc 9888@opindex mno-sched-control-ldc 9889@opindex msched-control-ldc 9890(Dis/En)able use of ld.c instructions to check control speculative loads. 9891If enabled, in case of control speculative load with no speculatively 9892scheduled dependent instructions this load will be emitted as ld.sa and 9893ld.c will be used to check it. 9894The default is 'disable'. 9895 9896@item -mno-sched-spec-verbose 9897@itemx -msched-spec-verbose 9898@opindex mno-sched-spec-verbose 9899@opindex msched-spec-verbose 9900(Dis/En)able printing of the information about speculative motions. 9901 9902@item -mno-sched-prefer-non-data-spec-insns 9903@itemx -msched-prefer-non-data-spec-insns 9904@opindex mno-sched-prefer-non-data-spec-insns 9905@opindex msched-prefer-non-data-spec-insns 9906If enabled, data speculative instructions will be chosen for schedule 9907only if there are no other choices at the moment. This will make 9908the use of the data speculation much more conservative. 9909The default is 'disable'. 9910 9911@item -mno-sched-prefer-non-control-spec-insns 9912@itemx -msched-prefer-non-control-spec-insns 9913@opindex mno-sched-prefer-non-control-spec-insns 9914@opindex msched-prefer-non-control-spec-insns 9915If enabled, control speculative instructions will be chosen for schedule 9916only if there are no other choices at the moment. This will make 9917the use of the control speculation much more conservative. 9918The default is 'disable'. 9919 9920@item -mno-sched-count-spec-in-critical-path 9921@itemx -msched-count-spec-in-critical-path 9922@opindex mno-sched-count-spec-in-critical-path 9923@opindex msched-count-spec-in-critical-path 9924If enabled, speculative dependencies will be considered during 9925computation of the instructions priorities. This will make the use of the 9926speculation a bit more conservative. 9927The default is 'disable'. 9928 9929@end table 9930 9931@node M32C Options 9932@subsection M32C Options 9933@cindex M32C options 9934 9935@table @gcctabopt 9936@item -mcpu=@var{name} 9937@opindex mcpu= 9938Select the CPU for which code is generated. @var{name} may be one of 9939@samp{r8c} for the R8C/Tiny series, @samp{m16c} for the M16C (up to 9940/60) series, @samp{m32cm} for the M16C/80 series, or @samp{m32c} for 9941the M32C/80 series. 9942 9943@item -msim 9944@opindex msim 9945Specifies that the program will be run on the simulator. This causes 9946an alternate runtime library to be linked in which supports, for 9947example, file I/O. You must not use this option when generating 9948programs that will run on real hardware; you must provide your own 9949runtime library for whatever I/O functions are needed. 9950 9951@item -memregs=@var{number} 9952@opindex memregs= 9953Specifies the number of memory-based pseudo-registers GCC will use 9954during code generation. These pseudo-registers will be used like real 9955registers, so there is a tradeoff between GCC's ability to fit the 9956code into available registers, and the performance penalty of using 9957memory instead of registers. Note that all modules in a program must 9958be compiled with the same value for this option. Because of that, you 9959must not use this option with the default runtime libraries gcc 9960builds. 9961 9962@end table 9963 9964@node M32R/D Options 9965@subsection M32R/D Options 9966@cindex M32R/D options 9967 9968These @option{-m} options are defined for Renesas M32R/D architectures: 9969 9970@table @gcctabopt 9971@item -m32r2 9972@opindex m32r2 9973Generate code for the M32R/2@. 9974 9975@item -m32rx 9976@opindex m32rx 9977Generate code for the M32R/X@. 9978 9979@item -m32r 9980@opindex m32r 9981Generate code for the M32R@. This is the default. 9982 9983@item -mmodel=small 9984@opindex mmodel=small 9985Assume all objects live in the lower 16MB of memory (so that their addresses 9986can be loaded with the @code{ld24} instruction), and assume all subroutines 9987are reachable with the @code{bl} instruction. 9988This is the default. 9989 9990The addressability of a particular object can be set with the 9991@code{model} attribute. 9992 9993@item -mmodel=medium 9994@opindex mmodel=medium 9995Assume objects may be anywhere in the 32-bit address space (the compiler 9996will generate @code{seth/add3} instructions to load their addresses), and 9997assume all subroutines are reachable with the @code{bl} instruction. 9998 9999@item -mmodel=large 10000@opindex mmodel=large 10001Assume objects may be anywhere in the 32-bit address space (the compiler 10002will generate @code{seth/add3} instructions to load their addresses), and 10003assume subroutines may not be reachable with the @code{bl} instruction 10004(the compiler will generate the much slower @code{seth/add3/jl} 10005instruction sequence). 10006 10007@item -msdata=none 10008@opindex msdata=none 10009Disable use of the small data area. Variables will be put into 10010one of @samp{.data}, @samp{bss}, or @samp{.rodata} (unless the 10011@code{section} attribute has been specified). 10012This is the default. 10013 10014The small data area consists of sections @samp{.sdata} and @samp{.sbss}. 10015Objects may be explicitly put in the small data area with the 10016@code{section} attribute using one of these sections. 10017 10018@item -msdata=sdata 10019@opindex msdata=sdata 10020Put small global and static data in the small data area, but do not 10021generate special code to reference them. 10022 10023@item -msdata=use 10024@opindex msdata=use 10025Put small global and static data in the small data area, and generate 10026special instructions to reference them. 10027 10028@item -G @var{num} 10029@opindex G 10030@cindex smaller data references 10031Put global and static objects less than or equal to @var{num} bytes 10032into the small data or bss sections instead of the normal data or bss 10033sections. The default value of @var{num} is 8. 10034The @option{-msdata} option must be set to one of @samp{sdata} or @samp{use} 10035for this option to have any effect. 10036 10037All modules should be compiled with the same @option{-G @var{num}} value. 10038Compiling with different values of @var{num} may or may not work; if it 10039doesn't the linker will give an error message---incorrect code will not be 10040generated. 10041 10042@item -mdebug 10043@opindex mdebug 10044Makes the M32R specific code in the compiler display some statistics 10045that might help in debugging programs. 10046 10047@item -malign-loops 10048@opindex malign-loops 10049Align all loops to a 32-byte boundary. 10050 10051@item -mno-align-loops 10052@opindex mno-align-loops 10053Do not enforce a 32-byte alignment for loops. This is the default. 10054 10055@item -missue-rate=@var{number} 10056@opindex missue-rate=@var{number} 10057Issue @var{number} instructions per cycle. @var{number} can only be 1 10058or 2. 10059 10060@item -mbranch-cost=@var{number} 10061@opindex mbranch-cost=@var{number} 10062@var{number} can only be 1 or 2. If it is 1 then branches will be 10063preferred over conditional code, if it is 2, then the opposite will 10064apply. 10065 10066@item -mflush-trap=@var{number} 10067@opindex mflush-trap=@var{number} 10068Specifies the trap number to use to flush the cache. The default is 1006912. Valid numbers are between 0 and 15 inclusive. 10070 10071@item -mno-flush-trap 10072@opindex mno-flush-trap 10073Specifies that the cache cannot be flushed by using a trap. 10074 10075@item -mflush-func=@var{name} 10076@opindex mflush-func=@var{name} 10077Specifies the name of the operating system function to call to flush 10078the cache. The default is @emph{_flush_cache}, but a function call 10079will only be used if a trap is not available. 10080 10081@item -mno-flush-func 10082@opindex mno-flush-func 10083Indicates that there is no OS function for flushing the cache. 10084 10085@end table 10086 10087@node M680x0 Options 10088@subsection M680x0 Options 10089@cindex M680x0 options 10090 10091These are the @samp{-m} options defined for the 68000 series. The default 10092values for these options depends on which style of 68000 was selected when 10093the compiler was configured; the defaults for the most common choices are 10094given below. 10095 10096@table @gcctabopt 10097@item -m68000 10098@itemx -mc68000 10099@opindex m68000 10100@opindex mc68000 10101Generate output for a 68000. This is the default 10102when the compiler is configured for 68000-based systems. 10103 10104Use this option for microcontrollers with a 68000 or EC000 core, 10105including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356. 10106 10107@item -m68020 10108@itemx -mc68020 10109@opindex m68020 10110@opindex mc68020 10111Generate output for a 68020. This is the default 10112when the compiler is configured for 68020-based systems. 10113 10114@item -m68881 10115@opindex m68881 10116Generate output containing 68881 instructions for floating point. 10117This is the default for most 68020 systems unless @option{--nfp} was 10118specified when the compiler was configured. 10119 10120@item -m68030 10121@opindex m68030 10122Generate output for a 68030. This is the default when the compiler is 10123configured for 68030-based systems. 10124 10125@item -m68040 10126@opindex m68040 10127Generate output for a 68040. This is the default when the compiler is 10128configured for 68040-based systems. 10129 10130This option inhibits the use of 68881/68882 instructions that have to be 10131emulated by software on the 68040. Use this option if your 68040 does not 10132have code to emulate those instructions. 10133 10134@item -m68060 10135@opindex m68060 10136Generate output for a 68060. This is the default when the compiler is 10137configured for 68060-based systems. 10138 10139This option inhibits the use of 68020 and 68881/68882 instructions that 10140have to be emulated by software on the 68060. Use this option if your 68060 10141does not have code to emulate those instructions. 10142 10143@item -mcpu32 10144@opindex mcpu32 10145Generate output for a CPU32. This is the default 10146when the compiler is configured for CPU32-based systems. 10147 10148Use this option for microcontrollers with a 10149CPU32 or CPU32+ core, including the 68330, 68331, 68332, 68333, 68334, 1015068336, 68340, 68341, 68349 and 68360. 10151 10152@item -m5200 10153@opindex m5200 10154Generate output for a 520X ``coldfire'' family cpu. This is the default 10155when the compiler is configured for 520X-based systems. 10156 10157Use this option for microcontroller with a 5200 core, including 10158the MCF5202, MCF5203, MCF5204 and MCF5202. 10159 10160@item -mcfv4e 10161@opindex mcfv4e 10162Generate output for a ColdFire V4e family cpu (e.g.@: 547x/548x). 10163This includes use of hardware floating point instructions. 10164 10165@item -m68020-40 10166@opindex m68020-40 10167Generate output for a 68040, without using any of the new instructions. 10168This results in code which can run relatively efficiently on either a 1016968020/68881 or a 68030 or a 68040. The generated code does use the 1017068881 instructions that are emulated on the 68040. 10171 10172@item -m68020-60 10173@opindex m68020-60 10174Generate output for a 68060, without using any of the new instructions. 10175This results in code which can run relatively efficiently on either a 1017668020/68881 or a 68030 or a 68040. The generated code does use the 1017768881 instructions that are emulated on the 68060. 10178 10179@item -msoft-float 10180@opindex msoft-float 10181Generate output containing library calls for floating point. 10182@strong{Warning:} the requisite libraries are not available for all m68k 10183targets. Normally the facilities of the machine's usual C compiler are 10184used, but this can't be done directly in cross-compilation. You must 10185make your own arrangements to provide suitable library functions for 10186cross-compilation. The embedded targets @samp{m68k-*-aout} and 10187@samp{m68k-*-coff} do provide software floating point support. 10188 10189@item -mshort 10190@opindex mshort 10191Consider type @code{int} to be 16 bits wide, like @code{short int}. 10192Additionally, parameters passed on the stack are also aligned to a 1019316-bit boundary even on targets whose API mandates promotion to 32-bit. 10194 10195@item -mnobitfield 10196@opindex mnobitfield 10197Do not use the bit-field instructions. The @option{-m68000}, @option{-mcpu32} 10198and @option{-m5200} options imply @w{@option{-mnobitfield}}. 10199 10200@item -mbitfield 10201@opindex mbitfield 10202Do use the bit-field instructions. The @option{-m68020} option implies 10203@option{-mbitfield}. This is the default if you use a configuration 10204designed for a 68020. 10205 10206@item -mrtd 10207@opindex mrtd 10208Use a different function-calling convention, in which functions 10209that take a fixed number of arguments return with the @code{rtd} 10210instruction, which pops their arguments while returning. This 10211saves one instruction in the caller since there is no need to pop 10212the arguments there. 10213 10214This calling convention is incompatible with the one normally 10215used on Unix, so you cannot use it if you need to call libraries 10216compiled with the Unix compiler. 10217 10218Also, you must provide function prototypes for all functions that 10219take variable numbers of arguments (including @code{printf}); 10220otherwise incorrect code will be generated for calls to those 10221functions. 10222 10223In addition, seriously incorrect code will result if you call a 10224function with too many arguments. (Normally, extra arguments are 10225harmlessly ignored.) 10226 10227The @code{rtd} instruction is supported by the 68010, 68020, 68030, 1022868040, 68060 and CPU32 processors, but not by the 68000 or 5200. 10229 10230@item -malign-int 10231@itemx -mno-align-int 10232@opindex malign-int 10233@opindex mno-align-int 10234Control whether GCC aligns @code{int}, @code{long}, @code{long long}, 10235@code{float}, @code{double}, and @code{long double} variables on a 32-bit 10236boundary (@option{-malign-int}) or a 16-bit boundary (@option{-mno-align-int}). 10237Aligning variables on 32-bit boundaries produces code that runs somewhat 10238faster on processors with 32-bit busses at the expense of more memory. 10239 10240@strong{Warning:} if you use the @option{-malign-int} switch, GCC will 10241align structures containing the above types differently than 10242most published application binary interface specifications for the m68k. 10243 10244@item -mpcrel 10245@opindex mpcrel 10246Use the pc-relative addressing mode of the 68000 directly, instead of 10247using a global offset table. At present, this option implies @option{-fpic}, 10248allowing at most a 16-bit offset for pc-relative addressing. @option{-fPIC} is 10249not presently supported with @option{-mpcrel}, though this could be supported for 1025068020 and higher processors. 10251 10252@item -mno-strict-align 10253@itemx -mstrict-align 10254@opindex mno-strict-align 10255@opindex mstrict-align 10256Do not (do) assume that unaligned memory references will be handled by 10257the system. 10258 10259@item -msep-data 10260Generate code that allows the data segment to be located in a different 10261area of memory from the text segment. This allows for execute in place in 10262an environment without virtual memory management. This option implies 10263@option{-fPIC}. 10264 10265@item -mno-sep-data 10266Generate code that assumes that the data segment follows the text segment. 10267This is the default. 10268 10269@item -mid-shared-library 10270Generate code that supports shared libraries via the library ID method. 10271This allows for execute in place and shared libraries in an environment 10272without virtual memory management. This option implies @option{-fPIC}. 10273 10274@item -mno-id-shared-library 10275Generate code that doesn't assume ID based shared libraries are being used. 10276This is the default. 10277 10278@item -mshared-library-id=n 10279Specified the identification number of the ID based shared library being 10280compiled. Specifying a value of 0 will generate more compact code, specifying 10281other values will force the allocation of that number to the current 10282library but is no more space or time efficient than omitting this option. 10283 10284@end table 10285 10286@node M68hc1x Options 10287@subsection M68hc1x Options 10288@cindex M68hc1x options 10289 10290These are the @samp{-m} options defined for the 68hc11 and 68hc12 10291microcontrollers. The default values for these options depends on 10292which style of microcontroller was selected when the compiler was configured; 10293the defaults for the most common choices are given below. 10294 10295@table @gcctabopt 10296@item -m6811 10297@itemx -m68hc11 10298@opindex m6811 10299@opindex m68hc11 10300Generate output for a 68HC11. This is the default 10301when the compiler is configured for 68HC11-based systems. 10302 10303@item -m6812 10304@itemx -m68hc12 10305@opindex m6812 10306@opindex m68hc12 10307Generate output for a 68HC12. This is the default 10308when the compiler is configured for 68HC12-based systems. 10309 10310@item -m68S12 10311@itemx -m68hcs12 10312@opindex m68S12 10313@opindex m68hcs12 10314Generate output for a 68HCS12. 10315 10316@item -mauto-incdec 10317@opindex mauto-incdec 10318Enable the use of 68HC12 pre and post auto-increment and auto-decrement 10319addressing modes. 10320 10321@item -minmax 10322@itemx -nominmax 10323@opindex minmax 10324@opindex mnominmax 10325Enable the use of 68HC12 min and max instructions. 10326 10327@item -mlong-calls 10328@itemx -mno-long-calls 10329@opindex mlong-calls 10330@opindex mno-long-calls 10331Treat all calls as being far away (near). If calls are assumed to be 10332far away, the compiler will use the @code{call} instruction to 10333call a function and the @code{rtc} instruction for returning. 10334 10335@item -mshort 10336@opindex mshort 10337Consider type @code{int} to be 16 bits wide, like @code{short int}. 10338 10339@item -msoft-reg-count=@var{count} 10340@opindex msoft-reg-count 10341Specify the number of pseudo-soft registers which are used for the 10342code generation. The maximum number is 32. Using more pseudo-soft 10343register may or may not result in better code depending on the program. 10344The default is 4 for 68HC11 and 2 for 68HC12. 10345 10346@end table 10347 10348@node MCore Options 10349@subsection MCore Options 10350@cindex MCore options 10351 10352These are the @samp{-m} options defined for the Motorola M*Core 10353processors. 10354 10355@table @gcctabopt 10356 10357@item -mhardlit 10358@itemx -mno-hardlit 10359@opindex mhardlit 10360@opindex mno-hardlit 10361Inline constants into the code stream if it can be done in two 10362instructions or less. 10363 10364@item -mdiv 10365@itemx -mno-div 10366@opindex mdiv 10367@opindex mno-div 10368Use the divide instruction. (Enabled by default). 10369 10370@item -mrelax-immediate 10371@itemx -mno-relax-immediate 10372@opindex mrelax-immediate 10373@opindex mno-relax-immediate 10374Allow arbitrary sized immediates in bit operations. 10375 10376@item -mwide-bitfields 10377@itemx -mno-wide-bitfields 10378@opindex mwide-bitfields 10379@opindex mno-wide-bitfields 10380Always treat bit-fields as int-sized. 10381 10382@item -m4byte-functions 10383@itemx -mno-4byte-functions 10384@opindex m4byte-functions 10385@opindex mno-4byte-functions 10386Force all functions to be aligned to a four byte boundary. 10387 10388@item -mcallgraph-data 10389@itemx -mno-callgraph-data 10390@opindex mcallgraph-data 10391@opindex mno-callgraph-data 10392Emit callgraph information. 10393 10394@item -mslow-bytes 10395@itemx -mno-slow-bytes 10396@opindex mslow-bytes 10397@opindex mno-slow-bytes 10398Prefer word access when reading byte quantities. 10399 10400@item -mlittle-endian 10401@itemx -mbig-endian 10402@opindex mlittle-endian 10403@opindex mbig-endian 10404Generate code for a little endian target. 10405 10406@item -m210 10407@itemx -m340 10408@opindex m210 10409@opindex m340 10410Generate code for the 210 processor. 10411@end table 10412 10413@node MIPS Options 10414@subsection MIPS Options 10415@cindex MIPS options 10416 10417@table @gcctabopt 10418 10419@item -EB 10420@opindex EB 10421Generate big-endian code. 10422 10423@item -EL 10424@opindex EL 10425Generate little-endian code. This is the default for @samp{mips*el-*-*} 10426configurations. 10427 10428@item -march=@var{arch} 10429@opindex march 10430Generate code that will run on @var{arch}, which can be the name of a 10431generic MIPS ISA, or the name of a particular processor. 10432The ISA names are: 10433@samp{mips1}, @samp{mips2}, @samp{mips3}, @samp{mips4}, 10434@samp{mips32}, @samp{mips32r2}, and @samp{mips64}. 10435The processor names are: 10436@samp{4kc}, @samp{4km}, @samp{4kp}, 10437@samp{5kc}, @samp{5kf}, 10438@samp{20kc}, 10439@samp{24k}, @samp{24kc}, @samp{24kf}, @samp{24kx}, 10440@samp{m4k}, 10441@samp{orion}, 10442@samp{r2000}, @samp{r3000}, @samp{r3900}, @samp{r4000}, @samp{r4400}, 10443@samp{r4600}, @samp{r4650}, @samp{r6000}, @samp{r8000}, 10444@samp{rm7000}, @samp{rm9000}, 10445@samp{sb1}, 10446@samp{sr71000}, 10447@samp{vr4100}, @samp{vr4111}, @samp{vr4120}, @samp{vr4130}, @samp{vr4300}, 10448@samp{vr5000}, @samp{vr5400} and @samp{vr5500}. 10449The special value @samp{from-abi} selects the 10450most compatible architecture for the selected ABI (that is, 10451@samp{mips1} for 32-bit ABIs and @samp{mips3} for 64-bit ABIs)@. 10452 10453In processor names, a final @samp{000} can be abbreviated as @samp{k} 10454(for example, @samp{-march=r2k}). Prefixes are optional, and 10455@samp{vr} may be written @samp{r}. 10456 10457GCC defines two macros based on the value of this option. The first 10458is @samp{_MIPS_ARCH}, which gives the name of target architecture, as 10459a string. The second has the form @samp{_MIPS_ARCH_@var{foo}}, 10460where @var{foo} is the capitalized value of @samp{_MIPS_ARCH}@. 10461For example, @samp{-march=r2000} will set @samp{_MIPS_ARCH} 10462to @samp{"r2000"} and define the macro @samp{_MIPS_ARCH_R2000}. 10463 10464Note that the @samp{_MIPS_ARCH} macro uses the processor names given 10465above. In other words, it will have the full prefix and will not 10466abbreviate @samp{000} as @samp{k}. In the case of @samp{from-abi}, 10467the macro names the resolved architecture (either @samp{"mips1"} or 10468@samp{"mips3"}). It names the default architecture when no 10469@option{-march} option is given. 10470 10471@item -mtune=@var{arch} 10472@opindex mtune 10473Optimize for @var{arch}. Among other things, this option controls 10474the way instructions are scheduled, and the perceived cost of arithmetic 10475operations. The list of @var{arch} values is the same as for 10476@option{-march}. 10477 10478When this option is not used, GCC will optimize for the processor 10479specified by @option{-march}. By using @option{-march} and 10480@option{-mtune} together, it is possible to generate code that will 10481run on a family of processors, but optimize the code for one 10482particular member of that family. 10483 10484@samp{-mtune} defines the macros @samp{_MIPS_TUNE} and 10485@samp{_MIPS_TUNE_@var{foo}}, which work in the same way as the 10486@samp{-march} ones described above. 10487 10488@item -mips1 10489@opindex mips1 10490Equivalent to @samp{-march=mips1}. 10491 10492@item -mips2 10493@opindex mips2 10494Equivalent to @samp{-march=mips2}. 10495 10496@item -mips3 10497@opindex mips3 10498Equivalent to @samp{-march=mips3}. 10499 10500@item -mips4 10501@opindex mips4 10502Equivalent to @samp{-march=mips4}. 10503 10504@item -mips32 10505@opindex mips32 10506Equivalent to @samp{-march=mips32}. 10507 10508@item -mips32r2 10509@opindex mips32r2 10510Equivalent to @samp{-march=mips32r2}. 10511 10512@item -mips64 10513@opindex mips64 10514Equivalent to @samp{-march=mips64}. 10515 10516@item -mips16 10517@itemx -mno-mips16 10518@opindex mips16 10519@opindex mno-mips16 10520Generate (do not generate) MIPS16 code. If GCC is targetting a 10521MIPS32 or MIPS64 architecture, it will make use of the MIPS16e ASE@. 10522 10523@item -mabi=32 10524@itemx -mabi=o64 10525@itemx -mabi=n32 10526@itemx -mabi=64 10527@itemx -mabi=eabi 10528@opindex mabi=32 10529@opindex mabi=o64 10530@opindex mabi=n32 10531@opindex mabi=64 10532@opindex mabi=eabi 10533Generate code for the given ABI@. 10534 10535Note that the EABI has a 32-bit and a 64-bit variant. GCC normally 10536generates 64-bit code when you select a 64-bit architecture, but you 10537can use @option{-mgp32} to get 32-bit code instead. 10538 10539For information about the O64 ABI, see 10540@w{@uref{http://gcc.gnu.org/projects/mipso64-abi.html}}. 10541 10542@item -mabicalls 10543@itemx -mno-abicalls 10544@opindex mabicalls 10545@opindex mno-abicalls 10546Generate (do not generate) code that is suitable for SVR4-style 10547dynamic objects. @option{-mabicalls} is the default for SVR4-based 10548systems. 10549 10550@item -mshared 10551@itemx -mno-shared 10552Generate (do not generate) code that is fully position-independent, 10553and that can therefore be linked into shared libraries. This option 10554only affects @option{-mabicalls}. 10555 10556All @option{-mabicalls} code has traditionally been position-independent, 10557regardless of options like @option{-fPIC} and @option{-fpic}. However, 10558as an extension, the GNU toolchain allows executables to use absolute 10559accesses for locally-binding symbols. It can also use shorter GP 10560initialization sequences and generate direct calls to locally-defined 10561functions. This mode is selected by @option{-mno-shared}. 10562 10563@option{-mno-shared} depends on binutils 2.16 or higher and generates 10564objects that can only be linked by the GNU linker. However, the option 10565does not affect the ABI of the final executable; it only affects the ABI 10566of relocatable objects. Using @option{-mno-shared} will generally make 10567executables both smaller and quicker. 10568 10569@option{-mshared} is the default. 10570 10571@item -mxgot 10572@itemx -mno-xgot 10573@opindex mxgot 10574@opindex mno-xgot 10575Lift (do not lift) the usual restrictions on the size of the global 10576offset table. 10577 10578GCC normally uses a single instruction to load values from the GOT@. 10579While this is relatively efficient, it will only work if the GOT 10580is smaller than about 64k. Anything larger will cause the linker 10581to report an error such as: 10582 10583@cindex relocation truncated to fit (MIPS) 10584@smallexample 10585relocation truncated to fit: R_MIPS_GOT16 foobar 10586@end smallexample 10587 10588If this happens, you should recompile your code with @option{-mxgot}. 10589It should then work with very large GOTs, although it will also be 10590less efficient, since it will take three instructions to fetch the 10591value of a global symbol. 10592 10593Note that some linkers can create multiple GOTs. If you have such a 10594linker, you should only need to use @option{-mxgot} when a single object 10595file accesses more than 64k's worth of GOT entries. Very few do. 10596 10597These options have no effect unless GCC is generating position 10598independent code. 10599 10600@item -mgp32 10601@opindex mgp32 10602Assume that general-purpose registers are 32 bits wide. 10603 10604@item -mgp64 10605@opindex mgp64 10606Assume that general-purpose registers are 64 bits wide. 10607 10608@item -mfp32 10609@opindex mfp32 10610Assume that floating-point registers are 32 bits wide. 10611 10612@item -mfp64 10613@opindex mfp64 10614Assume that floating-point registers are 64 bits wide. 10615 10616@item -mhard-float 10617@opindex mhard-float 10618Use floating-point coprocessor instructions. 10619 10620@item -msoft-float 10621@opindex msoft-float 10622Do not use floating-point coprocessor instructions. Implement 10623floating-point calculations using library calls instead. 10624 10625@item -msingle-float 10626@opindex msingle-float 10627Assume that the floating-point coprocessor only supports single-precision 10628operations. 10629 10630@itemx -mdouble-float 10631@opindex mdouble-float 10632Assume that the floating-point coprocessor supports double-precision 10633operations. This is the default. 10634 10635@itemx -mdsp 10636@itemx -mno-dsp 10637@opindex mdsp 10638@opindex mno-dsp 10639Use (do not use) the MIPS DSP ASE. @xref{MIPS DSP Built-in Functions}. 10640 10641@itemx -mpaired-single 10642@itemx -mno-paired-single 10643@opindex mpaired-single 10644@opindex mno-paired-single 10645Use (do not use) paired-single floating-point instructions. 10646@xref{MIPS Paired-Single Support}. This option can only be used 10647when generating 64-bit code and requires hardware floating-point 10648support to be enabled. 10649 10650@itemx -mips3d 10651@itemx -mno-mips3d 10652@opindex mips3d 10653@opindex mno-mips3d 10654Use (do not use) the MIPS-3D ASE@. @xref{MIPS-3D Built-in Functions}. 10655The option @option{-mips3d} implies @option{-mpaired-single}. 10656 10657@item -mlong64 10658@opindex mlong64 10659Force @code{long} types to be 64 bits wide. See @option{-mlong32} for 10660an explanation of the default and the way that the pointer size is 10661determined. 10662 10663@item -mlong32 10664@opindex mlong32 10665Force @code{long}, @code{int}, and pointer types to be 32 bits wide. 10666 10667The default size of @code{int}s, @code{long}s and pointers depends on 10668the ABI@. All the supported ABIs use 32-bit @code{int}s. The n64 ABI 10669uses 64-bit @code{long}s, as does the 64-bit EABI; the others use 1067032-bit @code{long}s. Pointers are the same size as @code{long}s, 10671or the same size as integer registers, whichever is smaller. 10672 10673@item -msym32 10674@itemx -mno-sym32 10675@opindex msym32 10676@opindex mno-sym32 10677Assume (do not assume) that all symbols have 32-bit values, regardless 10678of the selected ABI@. This option is useful in combination with 10679@option{-mabi=64} and @option{-mno-abicalls} because it allows GCC 10680to generate shorter and faster references to symbolic addresses. 10681 10682@item -G @var{num} 10683@opindex G 10684@cindex smaller data references (MIPS) 10685@cindex gp-relative references (MIPS) 10686Put global and static items less than or equal to @var{num} bytes into 10687the small data or bss section instead of the normal data or bss section. 10688This allows the data to be accessed using a single instruction. 10689 10690All modules should be compiled with the same @option{-G @var{num}} 10691value. 10692 10693@item -membedded-data 10694@itemx -mno-embedded-data 10695@opindex membedded-data 10696@opindex mno-embedded-data 10697Allocate variables to the read-only data section first if possible, then 10698next in the small data section if possible, otherwise in data. This gives 10699slightly slower code than the default, but reduces the amount of RAM required 10700when executing, and thus may be preferred for some embedded systems. 10701 10702@item -muninit-const-in-rodata 10703@itemx -mno-uninit-const-in-rodata 10704@opindex muninit-const-in-rodata 10705@opindex mno-uninit-const-in-rodata 10706Put uninitialized @code{const} variables in the read-only data section. 10707This option is only meaningful in conjunction with @option{-membedded-data}. 10708 10709@item -msplit-addresses 10710@itemx -mno-split-addresses 10711@opindex msplit-addresses 10712@opindex mno-split-addresses 10713Enable (disable) use of the @code{%hi()} and @code{%lo()} assembler 10714relocation operators. This option has been superseded by 10715@option{-mexplicit-relocs} but is retained for backwards compatibility. 10716 10717@item -mexplicit-relocs 10718@itemx -mno-explicit-relocs 10719@opindex mexplicit-relocs 10720@opindex mno-explicit-relocs 10721Use (do not use) assembler relocation operators when dealing with symbolic 10722addresses. The alternative, selected by @option{-mno-explicit-relocs}, 10723is to use assembler macros instead. 10724 10725@option{-mexplicit-relocs} is the default if GCC was configured 10726to use an assembler that supports relocation operators. 10727 10728@item -mcheck-zero-division 10729@itemx -mno-check-zero-division 10730@opindex mcheck-zero-division 10731@opindex mno-check-zero-division 10732Trap (do not trap) on integer division by zero. The default is 10733@option{-mcheck-zero-division}. 10734 10735@item -mdivide-traps 10736@itemx -mdivide-breaks 10737@opindex mdivide-traps 10738@opindex mdivide-breaks 10739MIPS systems check for division by zero by generating either a 10740conditional trap or a break instruction. Using traps results in 10741smaller code, but is only supported on MIPS II and later. Also, some 10742versions of the Linux kernel have a bug that prevents trap from 10743generating the proper signal (@code{SIGFPE}). Use @option{-mdivide-traps} to 10744allow conditional traps on architectures that support them and 10745@option{-mdivide-breaks} to force the use of breaks. 10746 10747The default is usually @option{-mdivide-traps}, but this can be 10748overridden at configure time using @option{--with-divide=breaks}. 10749Divide-by-zero checks can be completely disabled using 10750@option{-mno-check-zero-division}. 10751 10752@item -mmemcpy 10753@itemx -mno-memcpy 10754@opindex mmemcpy 10755@opindex mno-memcpy 10756Force (do not force) the use of @code{memcpy()} for non-trivial block 10757moves. The default is @option{-mno-memcpy}, which allows GCC to inline 10758most constant-sized copies. 10759 10760@item -mlong-calls 10761@itemx -mno-long-calls 10762@opindex mlong-calls 10763@opindex mno-long-calls 10764Disable (do not disable) use of the @code{jal} instruction. Calling 10765functions using @code{jal} is more efficient but requires the caller 10766and callee to be in the same 256 megabyte segment. 10767 10768This option has no effect on abicalls code. The default is 10769@option{-mno-long-calls}. 10770 10771@item -mmad 10772@itemx -mno-mad 10773@opindex mmad 10774@opindex mno-mad 10775Enable (disable) use of the @code{mad}, @code{madu} and @code{mul} 10776instructions, as provided by the R4650 ISA@. 10777 10778@item -mfused-madd 10779@itemx -mno-fused-madd 10780@opindex mfused-madd 10781@opindex mno-fused-madd 10782Enable (disable) use of the floating point multiply-accumulate 10783instructions, when they are available. The default is 10784@option{-mfused-madd}. 10785 10786When multiply-accumulate instructions are used, the intermediate 10787product is calculated to infinite precision and is not subject to 10788the FCSR Flush to Zero bit. This may be undesirable in some 10789circumstances. 10790 10791@item -nocpp 10792@opindex nocpp 10793Tell the MIPS assembler to not run its preprocessor over user 10794assembler files (with a @samp{.s} suffix) when assembling them. 10795 10796@item -mfix-r4000 10797@itemx -mno-fix-r4000 10798@opindex mfix-r4000 10799@opindex mno-fix-r4000 10800Work around certain R4000 CPU errata: 10801@itemize @minus 10802@item 10803A double-word or a variable shift may give an incorrect result if executed 10804immediately after starting an integer division. 10805@item 10806A double-word or a variable shift may give an incorrect result if executed 10807while an integer multiplication is in progress. 10808@item 10809An integer division may give an incorrect result if started in a delay slot 10810of a taken branch or a jump. 10811@end itemize 10812 10813@item -mfix-r4400 10814@itemx -mno-fix-r4400 10815@opindex mfix-r4400 10816@opindex mno-fix-r4400 10817Work around certain R4400 CPU errata: 10818@itemize @minus 10819@item 10820A double-word or a variable shift may give an incorrect result if executed 10821immediately after starting an integer division. 10822@end itemize 10823 10824@item -mfix-vr4120 10825@itemx -mno-fix-vr4120 10826@opindex mfix-vr4120 10827Work around certain VR4120 errata: 10828@itemize @minus 10829@item 10830@code{dmultu} does not always produce the correct result. 10831@item 10832@code{div} and @code{ddiv} do not always produce the correct result if one 10833of the operands is negative. 10834@end itemize 10835The workarounds for the division errata rely on special functions in 10836@file{libgcc.a}. At present, these functions are only provided by 10837the @code{mips64vr*-elf} configurations. 10838 10839Other VR4120 errata require a nop to be inserted between certain pairs of 10840instructions. These errata are handled by the assembler, not by GCC itself. 10841 10842@item -mfix-vr4130 10843@opindex mfix-vr4130 10844Work around the VR4130 @code{mflo}/@code{mfhi} errata. The 10845workarounds are implemented by the assembler rather than by GCC, 10846although GCC will avoid using @code{mflo} and @code{mfhi} if the 10847VR4130 @code{macc}, @code{macchi}, @code{dmacc} and @code{dmacchi} 10848instructions are available instead. 10849 10850@item -mfix-sb1 10851@itemx -mno-fix-sb1 10852@opindex mfix-sb1 10853Work around certain SB-1 CPU core errata. 10854(This flag currently works around the SB-1 revision 2 10855``F1'' and ``F2'' floating point errata.) 10856 10857@item -mflush-func=@var{func} 10858@itemx -mno-flush-func 10859@opindex mflush-func 10860Specifies the function to call to flush the I and D caches, or to not 10861call any such function. If called, the function must take the same 10862arguments as the common @code{_flush_func()}, that is, the address of the 10863memory range for which the cache is being flushed, the size of the 10864memory range, and the number 3 (to flush both caches). The default 10865depends on the target GCC was configured for, but commonly is either 10866@samp{_flush_func} or @samp{__cpu_flush}. 10867 10868@item -mbranch-likely 10869@itemx -mno-branch-likely 10870@opindex mbranch-likely 10871@opindex mno-branch-likely 10872Enable or disable use of Branch Likely instructions, regardless of the 10873default for the selected architecture. By default, Branch Likely 10874instructions may be generated if they are supported by the selected 10875architecture. An exception is for the MIPS32 and MIPS64 architectures 10876and processors which implement those architectures; for those, Branch 10877Likely instructions will not be generated by default because the MIPS32 10878and MIPS64 architectures specifically deprecate their use. 10879 10880@item -mfp-exceptions 10881@itemx -mno-fp-exceptions 10882@opindex mfp-exceptions 10883Specifies whether FP exceptions are enabled. This affects how we schedule 10884FP instructions for some processors. The default is that FP exceptions are 10885enabled. 10886 10887For instance, on the SB-1, if FP exceptions are disabled, and we are emitting 1088864-bit code, then we can use both FP pipes. Otherwise, we can only use one 10889FP pipe. 10890 10891@item -mvr4130-align 10892@itemx -mno-vr4130-align 10893@opindex mvr4130-align 10894The VR4130 pipeline is two-way superscalar, but can only issue two 10895instructions together if the first one is 8-byte aligned. When this 10896option is enabled, GCC will align pairs of instructions that it 10897thinks should execute in parallel. 10898 10899This option only has an effect when optimizing for the VR4130. 10900It normally makes code faster, but at the expense of making it bigger. 10901It is enabled by default at optimization level @option{-O3}. 10902@end table 10903 10904@node MMIX Options 10905@subsection MMIX Options 10906@cindex MMIX Options 10907 10908These options are defined for the MMIX: 10909 10910@table @gcctabopt 10911@item -mlibfuncs 10912@itemx -mno-libfuncs 10913@opindex mlibfuncs 10914@opindex mno-libfuncs 10915Specify that intrinsic library functions are being compiled, passing all 10916values in registers, no matter the size. 10917 10918@item -mepsilon 10919@itemx -mno-epsilon 10920@opindex mepsilon 10921@opindex mno-epsilon 10922Generate floating-point comparison instructions that compare with respect 10923to the @code{rE} epsilon register. 10924 10925@item -mabi=mmixware 10926@itemx -mabi=gnu 10927@opindex mabi-mmixware 10928@opindex mabi=gnu 10929Generate code that passes function parameters and return values that (in 10930the called function) are seen as registers @code{$0} and up, as opposed to 10931the GNU ABI which uses global registers @code{$231} and up. 10932 10933@item -mzero-extend 10934@itemx -mno-zero-extend 10935@opindex mzero-extend 10936@opindex mno-zero-extend 10937When reading data from memory in sizes shorter than 64 bits, use (do not 10938use) zero-extending load instructions by default, rather than 10939sign-extending ones. 10940 10941@item -mknuthdiv 10942@itemx -mno-knuthdiv 10943@opindex mknuthdiv 10944@opindex mno-knuthdiv 10945Make the result of a division yielding a remainder have the same sign as 10946the divisor. With the default, @option{-mno-knuthdiv}, the sign of the 10947remainder follows the sign of the dividend. Both methods are 10948arithmetically valid, the latter being almost exclusively used. 10949 10950@item -mtoplevel-symbols 10951@itemx -mno-toplevel-symbols 10952@opindex mtoplevel-symbols 10953@opindex mno-toplevel-symbols 10954Prepend (do not prepend) a @samp{:} to all global symbols, so the assembly 10955code can be used with the @code{PREFIX} assembly directive. 10956 10957@item -melf 10958@opindex melf 10959Generate an executable in the ELF format, rather than the default 10960@samp{mmo} format used by the @command{mmix} simulator. 10961 10962@item -mbranch-predict 10963@itemx -mno-branch-predict 10964@opindex mbranch-predict 10965@opindex mno-branch-predict 10966Use (do not use) the probable-branch instructions, when static branch 10967prediction indicates a probable branch. 10968 10969@item -mbase-addresses 10970@itemx -mno-base-addresses 10971@opindex mbase-addresses 10972@opindex mno-base-addresses 10973Generate (do not generate) code that uses @emph{base addresses}. Using a 10974base address automatically generates a request (handled by the assembler 10975and the linker) for a constant to be set up in a global register. The 10976register is used for one or more base address requests within the range 0 10977to 255 from the value held in the register. The generally leads to short 10978and fast code, but the number of different data items that can be 10979addressed is limited. This means that a program that uses lots of static 10980data may require @option{-mno-base-addresses}. 10981 10982@item -msingle-exit 10983@itemx -mno-single-exit 10984@opindex msingle-exit 10985@opindex mno-single-exit 10986Force (do not force) generated code to have a single exit point in each 10987function. 10988@end table 10989 10990@node MN10300 Options 10991@subsection MN10300 Options 10992@cindex MN10300 options 10993 10994These @option{-m} options are defined for Matsushita MN10300 architectures: 10995 10996@table @gcctabopt 10997@item -mmult-bug 10998@opindex mmult-bug 10999Generate code to avoid bugs in the multiply instructions for the MN10300 11000processors. This is the default. 11001 11002@item -mno-mult-bug 11003@opindex mno-mult-bug 11004Do not generate code to avoid bugs in the multiply instructions for the 11005MN10300 processors. 11006 11007@item -mam33 11008@opindex mam33 11009Generate code which uses features specific to the AM33 processor. 11010 11011@item -mno-am33 11012@opindex mno-am33 11013Do not generate code which uses features specific to the AM33 processor. This 11014is the default. 11015 11016@item -mreturn-pointer-on-d0 11017@opindex mreturn-pointer-on-d0 11018When generating a function which returns a pointer, return the pointer 11019in both @code{a0} and @code{d0}. Otherwise, the pointer is returned 11020only in a0, and attempts to call such functions without a prototype 11021would result in errors. Note that this option is on by default; use 11022@option{-mno-return-pointer-on-d0} to disable it. 11023 11024@item -mno-crt0 11025@opindex mno-crt0 11026Do not link in the C run-time initialization object file. 11027 11028@item -mrelax 11029@opindex mrelax 11030Indicate to the linker that it should perform a relaxation optimization pass 11031to shorten branches, calls and absolute memory addresses. This option only 11032has an effect when used on the command line for the final link step. 11033 11034This option makes symbolic debugging impossible. 11035@end table 11036 11037@node MT Options 11038@subsection MT Options 11039@cindex MT options 11040 11041These @option{-m} options are defined for Morpho MT architectures: 11042 11043@table @gcctabopt 11044 11045@item -march=@var{cpu-type} 11046@opindex march 11047Generate code that will run on @var{cpu-type}, which is the name of a system 11048representing a certain processor type. Possible values for 11049@var{cpu-type} are @samp{ms1-64-001}, @samp{ms1-16-002}, 11050@samp{ms1-16-003} and @samp{ms2}. 11051 11052When this option is not used, the default is @option{-march=ms1-16-002}. 11053 11054@item -mbacc 11055@opindex mbacc 11056Use byte loads and stores when generating code. 11057 11058@item -mno-bacc 11059@opindex mno-bacc 11060Do not use byte loads and stores when generating code. 11061 11062@item -msim 11063@opindex msim 11064Use simulator runtime 11065 11066@item -mno-crt0 11067@opindex mno-crt0 11068Do not link in the C run-time initialization object file 11069@file{crti.o}. Other run-time initialization and termination files 11070such as @file{startup.o} and @file{exit.o} are still included on the 11071linker command line. 11072 11073@end table 11074 11075@node PDP-11 Options 11076@subsection PDP-11 Options 11077@cindex PDP-11 Options 11078 11079These options are defined for the PDP-11: 11080 11081@table @gcctabopt 11082@item -mfpu 11083@opindex mfpu 11084Use hardware FPP floating point. This is the default. (FIS floating 11085point on the PDP-11/40 is not supported.) 11086 11087@item -msoft-float 11088@opindex msoft-float 11089Do not use hardware floating point. 11090 11091@item -mac0 11092@opindex mac0 11093Return floating-point results in ac0 (fr0 in Unix assembler syntax). 11094 11095@item -mno-ac0 11096@opindex mno-ac0 11097Return floating-point results in memory. This is the default. 11098 11099@item -m40 11100@opindex m40 11101Generate code for a PDP-11/40. 11102 11103@item -m45 11104@opindex m45 11105Generate code for a PDP-11/45. This is the default. 11106 11107@item -m10 11108@opindex m10 11109Generate code for a PDP-11/10. 11110 11111@item -mbcopy-builtin 11112@opindex bcopy-builtin 11113Use inline @code{movmemhi} patterns for copying memory. This is the 11114default. 11115 11116@item -mbcopy 11117@opindex mbcopy 11118Do not use inline @code{movmemhi} patterns for copying memory. 11119 11120@item -mint16 11121@itemx -mno-int32 11122@opindex mint16 11123@opindex mno-int32 11124Use 16-bit @code{int}. This is the default. 11125 11126@item -mint32 11127@itemx -mno-int16 11128@opindex mint32 11129@opindex mno-int16 11130Use 32-bit @code{int}. 11131 11132@item -mfloat64 11133@itemx -mno-float32 11134@opindex mfloat64 11135@opindex mno-float32 11136Use 64-bit @code{float}. This is the default. 11137 11138@item -mfloat32 11139@itemx -mno-float64 11140@opindex mfloat32 11141@opindex mno-float64 11142Use 32-bit @code{float}. 11143 11144@item -mabshi 11145@opindex mabshi 11146Use @code{abshi2} pattern. This is the default. 11147 11148@item -mno-abshi 11149@opindex mno-abshi 11150Do not use @code{abshi2} pattern. 11151 11152@item -mbranch-expensive 11153@opindex mbranch-expensive 11154Pretend that branches are expensive. This is for experimenting with 11155code generation only. 11156 11157@item -mbranch-cheap 11158@opindex mbranch-cheap 11159Do not pretend that branches are expensive. This is the default. 11160 11161@item -msplit 11162@opindex msplit 11163Generate code for a system with split I&D@. 11164 11165@item -mno-split 11166@opindex mno-split 11167Generate code for a system without split I&D@. This is the default. 11168 11169@item -munix-asm 11170@opindex munix-asm 11171Use Unix assembler syntax. This is the default when configured for 11172@samp{pdp11-*-bsd}. 11173 11174@item -mdec-asm 11175@opindex mdec-asm 11176Use DEC assembler syntax. This is the default when configured for any 11177PDP-11 target other than @samp{pdp11-*-bsd}. 11178@end table 11179 11180@node PowerPC Options 11181@subsection PowerPC Options 11182@cindex PowerPC options 11183 11184These are listed under @xref{RS/6000 and PowerPC Options}. 11185 11186@node RS/6000 and PowerPC Options 11187@subsection IBM RS/6000 and PowerPC Options 11188@cindex RS/6000 and PowerPC Options 11189@cindex IBM RS/6000 and PowerPC Options 11190 11191These @samp{-m} options are defined for the IBM RS/6000 and PowerPC: 11192@table @gcctabopt 11193@item -mpower 11194@itemx -mno-power 11195@itemx -mpower2 11196@itemx -mno-power2 11197@itemx -mpowerpc 11198@itemx -mno-powerpc 11199@itemx -mpowerpc-gpopt 11200@itemx -mno-powerpc-gpopt 11201@itemx -mpowerpc-gfxopt 11202@itemx -mno-powerpc-gfxopt 11203@itemx -mpowerpc64 11204@itemx -mno-powerpc64 11205@itemx -mmfcrf 11206@itemx -mno-mfcrf 11207@itemx -mpopcntb 11208@itemx -mno-popcntb 11209@itemx -mfprnd 11210@itemx -mno-fprnd 11211@opindex mpower 11212@opindex mno-power 11213@opindex mpower2 11214@opindex mno-power2 11215@opindex mpowerpc 11216@opindex mno-powerpc 11217@opindex mpowerpc-gpopt 11218@opindex mno-powerpc-gpopt 11219@opindex mpowerpc-gfxopt 11220@opindex mno-powerpc-gfxopt 11221@opindex mpowerpc64 11222@opindex mno-powerpc64 11223@opindex mmfcrf 11224@opindex mno-mfcrf 11225@opindex mpopcntb 11226@opindex mno-popcntb 11227@opindex mfprnd 11228@opindex mno-fprnd 11229GCC supports two related instruction set architectures for the 11230RS/6000 and PowerPC@. The @dfn{POWER} instruction set are those 11231instructions supported by the @samp{rios} chip set used in the original 11232RS/6000 systems and the @dfn{PowerPC} instruction set is the 11233architecture of the Freescale MPC5xx, MPC6xx, MPC8xx microprocessors, and 11234the IBM 4xx, 6xx, and follow-on microprocessors. 11235 11236Neither architecture is a subset of the other. However there is a 11237large common subset of instructions supported by both. An MQ 11238register is included in processors supporting the POWER architecture. 11239 11240You use these options to specify which instructions are available on the 11241processor you are using. The default value of these options is 11242determined when configuring GCC@. Specifying the 11243@option{-mcpu=@var{cpu_type}} overrides the specification of these 11244options. We recommend you use the @option{-mcpu=@var{cpu_type}} option 11245rather than the options listed above. 11246 11247The @option{-mpower} option allows GCC to generate instructions that 11248are found only in the POWER architecture and to use the MQ register. 11249Specifying @option{-mpower2} implies @option{-power} and also allows GCC 11250to generate instructions that are present in the POWER2 architecture but 11251not the original POWER architecture. 11252 11253The @option{-mpowerpc} option allows GCC to generate instructions that 11254are found only in the 32-bit subset of the PowerPC architecture. 11255Specifying @option{-mpowerpc-gpopt} implies @option{-mpowerpc} and also allows 11256GCC to use the optional PowerPC architecture instructions in the 11257General Purpose group, including floating-point square root. Specifying 11258@option{-mpowerpc-gfxopt} implies @option{-mpowerpc} and also allows GCC to 11259use the optional PowerPC architecture instructions in the Graphics 11260group, including floating-point select. 11261 11262The @option{-mmfcrf} option allows GCC to generate the move from 11263condition register field instruction implemented on the POWER4 11264processor and other processors that support the PowerPC V2.01 11265architecture. 11266The @option{-mpopcntb} option allows GCC to generate the popcount and 11267double precision FP reciprocal estimate instruction implemented on the 11268POWER5 processor and other processors that support the PowerPC V2.02 11269architecture. 11270The @option{-mfprnd} option allows GCC to generate the FP round to 11271integer instructions implemented on the POWER5+ processor and other 11272processors that support the PowerPC V2.03 architecture. 11273 11274The @option{-mpowerpc64} option allows GCC to generate the additional 1127564-bit instructions that are found in the full PowerPC64 architecture 11276and to treat GPRs as 64-bit, doubleword quantities. GCC defaults to 11277@option{-mno-powerpc64}. 11278 11279If you specify both @option{-mno-power} and @option{-mno-powerpc}, GCC 11280will use only the instructions in the common subset of both 11281architectures plus some special AIX common-mode calls, and will not use 11282the MQ register. Specifying both @option{-mpower} and @option{-mpowerpc} 11283permits GCC to use any instruction from either architecture and to 11284allow use of the MQ register; specify this for the Motorola MPC601. 11285 11286@item -mnew-mnemonics 11287@itemx -mold-mnemonics 11288@opindex mnew-mnemonics 11289@opindex mold-mnemonics 11290Select which mnemonics to use in the generated assembler code. With 11291@option{-mnew-mnemonics}, GCC uses the assembler mnemonics defined for 11292the PowerPC architecture. With @option{-mold-mnemonics} it uses the 11293assembler mnemonics defined for the POWER architecture. Instructions 11294defined in only one architecture have only one mnemonic; GCC uses that 11295mnemonic irrespective of which of these options is specified. 11296 11297GCC defaults to the mnemonics appropriate for the architecture in 11298use. Specifying @option{-mcpu=@var{cpu_type}} sometimes overrides the 11299value of these option. Unless you are building a cross-compiler, you 11300should normally not specify either @option{-mnew-mnemonics} or 11301@option{-mold-mnemonics}, but should instead accept the default. 11302 11303@item -mcpu=@var{cpu_type} 11304@opindex mcpu 11305Set architecture type, register usage, choice of mnemonics, and 11306instruction scheduling parameters for machine type @var{cpu_type}. 11307Supported values for @var{cpu_type} are @samp{401}, @samp{403}, 11308@samp{405}, @samp{405fp}, @samp{440}, @samp{440fp}, @samp{505}, 11309@samp{601}, @samp{602}, @samp{603}, @samp{603e}, @samp{604}, 11310@samp{604e}, @samp{620}, @samp{630}, @samp{740}, @samp{7400}, 11311@samp{7450}, @samp{750}, @samp{801}, @samp{821}, @samp{823}, 11312@samp{860}, @samp{970}, @samp{8540}, @samp{ec603e}, @samp{G3}, 11313@samp{G4}, @samp{G5}, @samp{power}, @samp{power2}, @samp{power3}, 11314@samp{power4}, @samp{power5}, @samp{power5+}, @samp{power6}, 11315@samp{common}, @samp{powerpc}, @samp{powerpc64}, 11316@samp{rios}, @samp{rios1}, @samp{rios2}, @samp{rsc}, and @samp{rs64}. 11317 11318@option{-mcpu=common} selects a completely generic processor. Code 11319generated under this option will run on any POWER or PowerPC processor. 11320GCC will use only the instructions in the common subset of both 11321architectures, and will not use the MQ register. GCC assumes a generic 11322processor model for scheduling purposes. 11323 11324@option{-mcpu=power}, @option{-mcpu=power2}, @option{-mcpu=powerpc}, and 11325@option{-mcpu=powerpc64} specify generic POWER, POWER2, pure 32-bit 11326PowerPC (i.e., not MPC601), and 64-bit PowerPC architecture machine 11327types, with an appropriate, generic processor model assumed for 11328scheduling purposes. 11329 11330The other options specify a specific processor. Code generated under 11331those options will run best on that processor, and may not run at all on 11332others. 11333 11334The @option{-mcpu} options automatically enable or disable the 11335following options: @option{-maltivec}, @option{-mfprnd}, 11336@option{-mhard-float}, @option{-mmfcrf}, @option{-mmultiple}, 11337@option{-mnew-mnemonics}, @option{-mpopcntb}, @option{-mpower}, 11338@option{-mpower2}, @option{-mpowerpc64}, @option{-mpowerpc-gpopt}, 11339@option{-mpowerpc-gfxopt}, @option{-mstring}, @option{-mmulhw}, @option{-mdlmzb}. 11340The particular options 11341set for any particular CPU will vary between compiler versions, 11342depending on what setting seems to produce optimal code for that CPU; 11343it doesn't necessarily reflect the actual hardware's capabilities. If 11344you wish to set an individual option to a particular value, you may 11345specify it after the @option{-mcpu} option, like @samp{-mcpu=970 11346-mno-altivec}. 11347 11348On AIX, the @option{-maltivec} and @option{-mpowerpc64} options are 11349not enabled or disabled by the @option{-mcpu} option at present because 11350AIX does not have full support for these options. You may still 11351enable or disable them individually if you're sure it'll work in your 11352environment. 11353 11354@item -mtune=@var{cpu_type} 11355@opindex mtune 11356Set the instruction scheduling parameters for machine type 11357@var{cpu_type}, but do not set the architecture type, register usage, or 11358choice of mnemonics, as @option{-mcpu=@var{cpu_type}} would. The same 11359values for @var{cpu_type} are used for @option{-mtune} as for 11360@option{-mcpu}. If both are specified, the code generated will use the 11361architecture, registers, and mnemonics set by @option{-mcpu}, but the 11362scheduling parameters set by @option{-mtune}. 11363 11364@item -mswdiv 11365@itemx -mno-swdiv 11366@opindex mswdiv 11367@opindex mno-swdiv 11368Generate code to compute division as reciprocal estimate and iterative 11369refinement, creating opportunities for increased throughput. This 11370feature requires: optional PowerPC Graphics instruction set for single 11371precision and FRE instruction for double precision, assuming divides 11372cannot generate user-visible traps, and the domain values not include 11373Infinities, denormals or zero denominator. 11374 11375@item -maltivec 11376@itemx -mno-altivec 11377@opindex maltivec 11378@opindex mno-altivec 11379Generate code that uses (does not use) AltiVec instructions, and also 11380enable the use of built-in functions that allow more direct access to 11381the AltiVec instruction set. You may also need to set 11382@option{-mabi=altivec} to adjust the current ABI with AltiVec ABI 11383enhancements. 11384 11385@item -mvrsave 11386@item -mno-vrsave 11387@opindex mvrsave 11388@opindex mno-vrsave 11389Generate VRSAVE instructions when generating AltiVec code. 11390 11391@item -msecure-plt 11392@opindex msecure-plt 11393Generate code that allows ld and ld.so to build executables and shared 11394libraries with non-exec .plt and .got sections. This is a PowerPC 1139532-bit SYSV ABI option. 11396 11397@item -mbss-plt 11398@opindex mbss-plt 11399Generate code that uses a BSS .plt section that ld.so fills in, and 11400requires .plt and .got sections that are both writable and executable. 11401This is a PowerPC 32-bit SYSV ABI option. 11402 11403@item -misel 11404@itemx -mno-isel 11405@opindex misel 11406@opindex mno-isel 11407This switch enables or disables the generation of ISEL instructions. 11408 11409@item -misel=@var{yes/no} 11410This switch has been deprecated. Use @option{-misel} and 11411@option{-mno-isel} instead. 11412 11413@item -mspe 11414@itemx -mno-spe 11415@opindex mspe 11416@opindex mno-spe 11417This switch enables or disables the generation of SPE simd 11418instructions. 11419 11420@item -mspe=@var{yes/no} 11421This option has been deprecated. Use @option{-mspe} and 11422@option{-mno-spe} instead. 11423 11424@item -mfloat-gprs=@var{yes/single/double/no} 11425@itemx -mfloat-gprs 11426@opindex mfloat-gprs 11427This switch enables or disables the generation of floating point 11428operations on the general purpose registers for architectures that 11429support it. 11430 11431The argument @var{yes} or @var{single} enables the use of 11432single-precision floating point operations. 11433 11434The argument @var{double} enables the use of single and 11435double-precision floating point operations. 11436 11437The argument @var{no} disables floating point operations on the 11438general purpose registers. 11439 11440This option is currently only available on the MPC854x. 11441 11442@item -m32 11443@itemx -m64 11444@opindex m32 11445@opindex m64 11446Generate code for 32-bit or 64-bit environments of Darwin and SVR4 11447targets (including GNU/Linux). The 32-bit environment sets int, long 11448and pointer to 32 bits and generates code that runs on any PowerPC 11449variant. The 64-bit environment sets int to 32 bits and long and 11450pointer to 64 bits, and generates code for PowerPC64, as for 11451@option{-mpowerpc64}. 11452 11453@item -mfull-toc 11454@itemx -mno-fp-in-toc 11455@itemx -mno-sum-in-toc 11456@itemx -mminimal-toc 11457@opindex mfull-toc 11458@opindex mno-fp-in-toc 11459@opindex mno-sum-in-toc 11460@opindex mminimal-toc 11461Modify generation of the TOC (Table Of Contents), which is created for 11462every executable file. The @option{-mfull-toc} option is selected by 11463default. In that case, GCC will allocate at least one TOC entry for 11464each unique non-automatic variable reference in your program. GCC 11465will also place floating-point constants in the TOC@. However, only 1146616,384 entries are available in the TOC@. 11467 11468If you receive a linker error message that saying you have overflowed 11469the available TOC space, you can reduce the amount of TOC space used 11470with the @option{-mno-fp-in-toc} and @option{-mno-sum-in-toc} options. 11471@option{-mno-fp-in-toc} prevents GCC from putting floating-point 11472constants in the TOC and @option{-mno-sum-in-toc} forces GCC to 11473generate code to calculate the sum of an address and a constant at 11474run-time instead of putting that sum into the TOC@. You may specify one 11475or both of these options. Each causes GCC to produce very slightly 11476slower and larger code at the expense of conserving TOC space. 11477 11478If you still run out of space in the TOC even when you specify both of 11479these options, specify @option{-mminimal-toc} instead. This option causes 11480GCC to make only one TOC entry for every file. When you specify this 11481option, GCC will produce code that is slower and larger but which 11482uses extremely little TOC space. You may wish to use this option 11483only on files that contain less frequently executed code. 11484 11485@item -maix64 11486@itemx -maix32 11487@opindex maix64 11488@opindex maix32 11489Enable 64-bit AIX ABI and calling convention: 64-bit pointers, 64-bit 11490@code{long} type, and the infrastructure needed to support them. 11491Specifying @option{-maix64} implies @option{-mpowerpc64} and 11492@option{-mpowerpc}, while @option{-maix32} disables the 64-bit ABI and 11493implies @option{-mno-powerpc64}. GCC defaults to @option{-maix32}. 11494 11495@item -mxl-compat 11496@itemx -mno-xl-compat 11497@opindex mxl-compat 11498@opindex mno-xl-compat 11499Produce code that conforms more closely to IBM XL compiler semantics 11500when using AIX-compatible ABI. Pass floating-point arguments to 11501prototyped functions beyond the register save area (RSA) on the stack 11502in addition to argument FPRs. Do not assume that most significant 11503double in 128-bit long double value is properly rounded when comparing 11504values and converting to double. Use XL symbol names for long double 11505support routines. 11506 11507The AIX calling convention was extended but not initially documented to 11508handle an obscure K&R C case of calling a function that takes the 11509address of its arguments with fewer arguments than declared. IBM XL 11510compilers access floating point arguments which do not fit in the 11511RSA from the stack when a subroutine is compiled without 11512optimization. Because always storing floating-point arguments on the 11513stack is inefficient and rarely needed, this option is not enabled by 11514default and only is necessary when calling subroutines compiled by IBM 11515XL compilers without optimization. 11516 11517@item -mpe 11518@opindex mpe 11519Support @dfn{IBM RS/6000 SP} @dfn{Parallel Environment} (PE)@. Link an 11520application written to use message passing with special startup code to 11521enable the application to run. The system must have PE installed in the 11522standard location (@file{/usr/lpp/ppe.poe/}), or the @file{specs} file 11523must be overridden with the @option{-specs=} option to specify the 11524appropriate directory location. The Parallel Environment does not 11525support threads, so the @option{-mpe} option and the @option{-pthread} 11526option are incompatible. 11527 11528@item -malign-natural 11529@itemx -malign-power 11530@opindex malign-natural 11531@opindex malign-power 11532On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option 11533@option{-malign-natural} overrides the ABI-defined alignment of larger 11534types, such as floating-point doubles, on their natural size-based boundary. 11535The option @option{-malign-power} instructs GCC to follow the ABI-specified 11536alignment rules. GCC defaults to the standard alignment defined in the ABI@. 11537 11538On 64-bit Darwin, natural alignment is the default, and @option{-malign-power} 11539is not supported. 11540 11541@item -msoft-float 11542@itemx -mhard-float 11543@opindex msoft-float 11544@opindex mhard-float 11545Generate code that does not use (uses) the floating-point register set. 11546Software floating point emulation is provided if you use the 11547@option{-msoft-float} option, and pass the option to GCC when linking. 11548 11549@item -mmultiple 11550@itemx -mno-multiple 11551@opindex mmultiple 11552@opindex mno-multiple 11553Generate code that uses (does not use) the load multiple word 11554instructions and the store multiple word instructions. These 11555instructions are generated by default on POWER systems, and not 11556generated on PowerPC systems. Do not use @option{-mmultiple} on little 11557endian PowerPC systems, since those instructions do not work when the 11558processor is in little endian mode. The exceptions are PPC740 and 11559PPC750 which permit the instructions usage in little endian mode. 11560 11561@item -mstring 11562@itemx -mno-string 11563@opindex mstring 11564@opindex mno-string 11565Generate code that uses (does not use) the load string instructions 11566and the store string word instructions to save multiple registers and 11567do small block moves. These instructions are generated by default on 11568POWER systems, and not generated on PowerPC systems. Do not use 11569@option{-mstring} on little endian PowerPC systems, since those 11570instructions do not work when the processor is in little endian mode. 11571The exceptions are PPC740 and PPC750 which permit the instructions 11572usage in little endian mode. 11573 11574@item -mupdate 11575@itemx -mno-update 11576@opindex mupdate 11577@opindex mno-update 11578Generate code that uses (does not use) the load or store instructions 11579that update the base register to the address of the calculated memory 11580location. These instructions are generated by default. If you use 11581@option{-mno-update}, there is a small window between the time that the 11582stack pointer is updated and the address of the previous frame is 11583stored, which means code that walks the stack frame across interrupts or 11584signals may get corrupted data. 11585 11586@item -mfused-madd 11587@itemx -mno-fused-madd 11588@opindex mfused-madd 11589@opindex mno-fused-madd 11590Generate code that uses (does not use) the floating point multiply and 11591accumulate instructions. These instructions are generated by default if 11592hardware floating is used. 11593 11594@item -mmulhw 11595@itemx -mno-mulhw 11596@opindex mmulhw 11597@opindex mno-mulhw 11598Generate code that uses (does not use) the half-word multiply and 11599multiply-accumulate instructions on the IBM 405 and 440 processors. 11600These instructions are generated by default when targetting those 11601processors. 11602 11603@item -mdlmzb 11604@itemx -mno-dlmzb 11605@opindex mdlmzb 11606@opindex mno-dlmzb 11607Generate code that uses (does not use) the string-search @samp{dlmzb} 11608instruction on the IBM 405 and 440 processors. This instruction is 11609generated by default when targetting those processors. 11610 11611@item -mno-bit-align 11612@itemx -mbit-align 11613@opindex mno-bit-align 11614@opindex mbit-align 11615On System V.4 and embedded PowerPC systems do not (do) force structures 11616and unions that contain bit-fields to be aligned to the base type of the 11617bit-field. 11618 11619For example, by default a structure containing nothing but 8 11620@code{unsigned} bit-fields of length 1 would be aligned to a 4 byte 11621boundary and have a size of 4 bytes. By using @option{-mno-bit-align}, 11622the structure would be aligned to a 1 byte boundary and be one byte in 11623size. 11624 11625@item -mno-strict-align 11626@itemx -mstrict-align 11627@opindex mno-strict-align 11628@opindex mstrict-align 11629On System V.4 and embedded PowerPC systems do not (do) assume that 11630unaligned memory references will be handled by the system. 11631 11632@item -mrelocatable 11633@itemx -mno-relocatable 11634@opindex mrelocatable 11635@opindex mno-relocatable 11636On embedded PowerPC systems generate code that allows (does not allow) 11637the program to be relocated to a different address at runtime. If you 11638use @option{-mrelocatable} on any module, all objects linked together must 11639be compiled with @option{-mrelocatable} or @option{-mrelocatable-lib}. 11640 11641@item -mrelocatable-lib 11642@itemx -mno-relocatable-lib 11643@opindex mrelocatable-lib 11644@opindex mno-relocatable-lib 11645On embedded PowerPC systems generate code that allows (does not allow) 11646the program to be relocated to a different address at runtime. Modules 11647compiled with @option{-mrelocatable-lib} can be linked with either modules 11648compiled without @option{-mrelocatable} and @option{-mrelocatable-lib} or 11649with modules compiled with the @option{-mrelocatable} options. 11650 11651@item -mno-toc 11652@itemx -mtoc 11653@opindex mno-toc 11654@opindex mtoc 11655On System V.4 and embedded PowerPC systems do not (do) assume that 11656register 2 contains a pointer to a global area pointing to the addresses 11657used in the program. 11658 11659@item -mlittle 11660@itemx -mlittle-endian 11661@opindex mlittle 11662@opindex mlittle-endian 11663On System V.4 and embedded PowerPC systems compile code for the 11664processor in little endian mode. The @option{-mlittle-endian} option is 11665the same as @option{-mlittle}. 11666 11667@item -mbig 11668@itemx -mbig-endian 11669@opindex mbig 11670@opindex mbig-endian 11671On System V.4 and embedded PowerPC systems compile code for the 11672processor in big endian mode. The @option{-mbig-endian} option is 11673the same as @option{-mbig}. 11674 11675@item -mdynamic-no-pic 11676@opindex mdynamic-no-pic 11677On Darwin and Mac OS X systems, compile code so that it is not 11678relocatable, but that its external references are relocatable. The 11679resulting code is suitable for applications, but not shared 11680libraries. 11681 11682@item -mprioritize-restricted-insns=@var{priority} 11683@opindex mprioritize-restricted-insns 11684This option controls the priority that is assigned to 11685dispatch-slot restricted instructions during the second scheduling 11686pass. The argument @var{priority} takes the value @var{0/1/2} to assign 11687@var{no/highest/second-highest} priority to dispatch slot restricted 11688instructions. 11689 11690@item -msched-costly-dep=@var{dependence_type} 11691@opindex msched-costly-dep 11692This option controls which dependences are considered costly 11693by the target during instruction scheduling. The argument 11694@var{dependence_type} takes one of the following values: 11695@var{no}: no dependence is costly, 11696@var{all}: all dependences are costly, 11697@var{true_store_to_load}: a true dependence from store to load is costly, 11698@var{store_to_load}: any dependence from store to load is costly, 11699@var{number}: any dependence which latency >= @var{number} is costly. 11700 11701@item -minsert-sched-nops=@var{scheme} 11702@opindex minsert-sched-nops 11703This option controls which nop insertion scheme will be used during 11704the second scheduling pass. The argument @var{scheme} takes one of the 11705following values: 11706@var{no}: Don't insert nops. 11707@var{pad}: Pad with nops any dispatch group which has vacant issue slots, 11708according to the scheduler's grouping. 11709@var{regroup_exact}: Insert nops to force costly dependent insns into 11710separate groups. Insert exactly as many nops as needed to force an insn 11711to a new group, according to the estimated processor grouping. 11712@var{number}: Insert nops to force costly dependent insns into 11713separate groups. Insert @var{number} nops to force an insn to a new group. 11714 11715@item -mcall-sysv 11716@opindex mcall-sysv 11717On System V.4 and embedded PowerPC systems compile code using calling 11718conventions that adheres to the March 1995 draft of the System V 11719Application Binary Interface, PowerPC processor supplement. This is the 11720default unless you configured GCC using @samp{powerpc-*-eabiaix}. 11721 11722@item -mcall-sysv-eabi 11723@opindex mcall-sysv-eabi 11724Specify both @option{-mcall-sysv} and @option{-meabi} options. 11725 11726@item -mcall-sysv-noeabi 11727@opindex mcall-sysv-noeabi 11728Specify both @option{-mcall-sysv} and @option{-mno-eabi} options. 11729 11730@item -mcall-solaris 11731@opindex mcall-solaris 11732On System V.4 and embedded PowerPC systems compile code for the Solaris 11733operating system. 11734 11735@item -mcall-linux 11736@opindex mcall-linux 11737On System V.4 and embedded PowerPC systems compile code for the 11738Linux-based GNU system. 11739 11740@item -mcall-gnu 11741@opindex mcall-gnu 11742On System V.4 and embedded PowerPC systems compile code for the 11743Hurd-based GNU system. 11744 11745@item -mcall-netbsd 11746@opindex mcall-netbsd 11747On System V.4 and embedded PowerPC systems compile code for the 11748NetBSD operating system. 11749 11750@item -maix-struct-return 11751@opindex maix-struct-return 11752Return all structures in memory (as specified by the AIX ABI)@. 11753 11754@item -msvr4-struct-return 11755@opindex msvr4-struct-return 11756Return structures smaller than 8 bytes in registers (as specified by the 11757SVR4 ABI)@. 11758 11759@item -mabi=@var{abi-type} 11760@opindex mabi 11761Extend the current ABI with a particular extension, or remove such extension. 11762Valid values are @var{altivec}, @var{no-altivec}, @var{spe}, 11763@var{no-spe}, @var{ibmlongdouble}, @var{ieeelongdouble}@. 11764 11765@item -mabi=spe 11766@opindex mabi=spe 11767Extend the current ABI with SPE ABI extensions. This does not change 11768the default ABI, instead it adds the SPE ABI extensions to the current 11769ABI@. 11770 11771@item -mabi=no-spe 11772@opindex mabi=no-spe 11773Disable Booke SPE ABI extensions for the current ABI@. 11774 11775@item -mabi=ibmlongdouble 11776@opindex mabi=ibmlongdouble 11777Change the current ABI to use IBM extended precision long double. 11778This is a PowerPC 32-bit SYSV ABI option. 11779 11780@item -mabi=ieeelongdouble 11781@opindex mabi=ieeelongdouble 11782Change the current ABI to use IEEE extended precision long double. 11783This is a PowerPC 32-bit Linux ABI option. 11784 11785@item -mprototype 11786@itemx -mno-prototype 11787@opindex mprototype 11788@opindex mno-prototype 11789On System V.4 and embedded PowerPC systems assume that all calls to 11790variable argument functions are properly prototyped. Otherwise, the 11791compiler must insert an instruction before every non prototyped call to 11792set or clear bit 6 of the condition code register (@var{CR}) to 11793indicate whether floating point values were passed in the floating point 11794registers in case the function takes a variable arguments. With 11795@option{-mprototype}, only calls to prototyped variable argument functions 11796will set or clear the bit. 11797 11798@item -msim 11799@opindex msim 11800On embedded PowerPC systems, assume that the startup module is called 11801@file{sim-crt0.o} and that the standard C libraries are @file{libsim.a} and 11802@file{libc.a}. This is the default for @samp{powerpc-*-eabisim}. 11803configurations. 11804 11805@item -mmvme 11806@opindex mmvme 11807On embedded PowerPC systems, assume that the startup module is called 11808@file{crt0.o} and the standard C libraries are @file{libmvme.a} and 11809@file{libc.a}. 11810 11811@item -mads 11812@opindex mads 11813On embedded PowerPC systems, assume that the startup module is called 11814@file{crt0.o} and the standard C libraries are @file{libads.a} and 11815@file{libc.a}. 11816 11817@item -myellowknife 11818@opindex myellowknife 11819On embedded PowerPC systems, assume that the startup module is called 11820@file{crt0.o} and the standard C libraries are @file{libyk.a} and 11821@file{libc.a}. 11822 11823@item -mvxworks 11824@opindex mvxworks 11825On System V.4 and embedded PowerPC systems, specify that you are 11826compiling for a VxWorks system. 11827 11828@item -mwindiss 11829@opindex mwindiss 11830Specify that you are compiling for the WindISS simulation environment. 11831 11832@item -memb 11833@opindex memb 11834On embedded PowerPC systems, set the @var{PPC_EMB} bit in the ELF flags 11835header to indicate that @samp{eabi} extended relocations are used. 11836 11837@item -meabi 11838@itemx -mno-eabi 11839@opindex meabi 11840@opindex mno-eabi 11841On System V.4 and embedded PowerPC systems do (do not) adhere to the 11842Embedded Applications Binary Interface (eabi) which is a set of 11843modifications to the System V.4 specifications. Selecting @option{-meabi} 11844means that the stack is aligned to an 8 byte boundary, a function 11845@code{__eabi} is called to from @code{main} to set up the eabi 11846environment, and the @option{-msdata} option can use both @code{r2} and 11847@code{r13} to point to two separate small data areas. Selecting 11848@option{-mno-eabi} means that the stack is aligned to a 16 byte boundary, 11849do not call an initialization function from @code{main}, and the 11850@option{-msdata} option will only use @code{r13} to point to a single 11851small data area. The @option{-meabi} option is on by default if you 11852configured GCC using one of the @samp{powerpc*-*-eabi*} options. 11853 11854@item -msdata=eabi 11855@opindex msdata=eabi 11856On System V.4 and embedded PowerPC systems, put small initialized 11857@code{const} global and static data in the @samp{.sdata2} section, which 11858is pointed to by register @code{r2}. Put small initialized 11859non-@code{const} global and static data in the @samp{.sdata} section, 11860which is pointed to by register @code{r13}. Put small uninitialized 11861global and static data in the @samp{.sbss} section, which is adjacent to 11862the @samp{.sdata} section. The @option{-msdata=eabi} option is 11863incompatible with the @option{-mrelocatable} option. The 11864@option{-msdata=eabi} option also sets the @option{-memb} option. 11865 11866@item -msdata=sysv 11867@opindex msdata=sysv 11868On System V.4 and embedded PowerPC systems, put small global and static 11869data in the @samp{.sdata} section, which is pointed to by register 11870@code{r13}. Put small uninitialized global and static data in the 11871@samp{.sbss} section, which is adjacent to the @samp{.sdata} section. 11872The @option{-msdata=sysv} option is incompatible with the 11873@option{-mrelocatable} option. 11874 11875@item -msdata=default 11876@itemx -msdata 11877@opindex msdata=default 11878@opindex msdata 11879On System V.4 and embedded PowerPC systems, if @option{-meabi} is used, 11880compile code the same as @option{-msdata=eabi}, otherwise compile code the 11881same as @option{-msdata=sysv}. 11882 11883@item -msdata-data 11884@opindex msdata-data 11885On System V.4 and embedded PowerPC systems, put small global 11886data in the @samp{.sdata} section. Put small uninitialized global 11887data in the @samp{.sbss} section. Do not use register @code{r13} 11888to address small data however. This is the default behavior unless 11889other @option{-msdata} options are used. 11890 11891@item -msdata=none 11892@itemx -mno-sdata 11893@opindex msdata=none 11894@opindex mno-sdata 11895On embedded PowerPC systems, put all initialized global and static data 11896in the @samp{.data} section, and all uninitialized data in the 11897@samp{.bss} section. 11898 11899@item -G @var{num} 11900@opindex G 11901@cindex smaller data references (PowerPC) 11902@cindex .sdata/.sdata2 references (PowerPC) 11903On embedded PowerPC systems, put global and static items less than or 11904equal to @var{num} bytes into the small data or bss sections instead of 11905the normal data or bss section. By default, @var{num} is 8. The 11906@option{-G @var{num}} switch is also passed to the linker. 11907All modules should be compiled with the same @option{-G @var{num}} value. 11908 11909@item -mregnames 11910@itemx -mno-regnames 11911@opindex mregnames 11912@opindex mno-regnames 11913On System V.4 and embedded PowerPC systems do (do not) emit register 11914names in the assembly language output using symbolic forms. 11915 11916@item -mlongcall 11917@itemx -mno-longcall 11918@opindex mlongcall 11919@opindex mno-longcall 11920By default assume that all calls are far away so that a longer more 11921expensive calling sequence is required. This is required for calls 11922further than 32 megabytes (33,554,432 bytes) from the current location. 11923A short call will be generated if the compiler knows 11924the call cannot be that far away. This setting can be overridden by 11925the @code{shortcall} function attribute, or by @code{#pragma 11926longcall(0)}. 11927 11928Some linkers are capable of detecting out-of-range calls and generating 11929glue code on the fly. On these systems, long calls are unnecessary and 11930generate slower code. As of this writing, the AIX linker can do this, 11931as can the GNU linker for PowerPC/64. It is planned to add this feature 11932to the GNU linker for 32-bit PowerPC systems as well. 11933 11934On Darwin/PPC systems, @code{#pragma longcall} will generate ``jbsr 11935callee, L42'', plus a ``branch island'' (glue code). The two target 11936addresses represent the callee and the ``branch island''. The 11937Darwin/PPC linker will prefer the first address and generate a ``bl 11938callee'' if the PPC ``bl'' instruction will reach the callee directly; 11939otherwise, the linker will generate ``bl L42'' to call the ``branch 11940island''. The ``branch island'' is appended to the body of the 11941calling function; it computes the full 32-bit address of the callee 11942and jumps to it. 11943 11944On Mach-O (Darwin) systems, this option directs the compiler emit to 11945the glue for every direct call, and the Darwin linker decides whether 11946to use or discard it. 11947 11948In the future, we may cause GCC to ignore all longcall specifications 11949when the linker is known to generate glue. 11950 11951@item -pthread 11952@opindex pthread 11953Adds support for multithreading with the @dfn{pthreads} library. 11954This option sets flags for both the preprocessor and linker. 11955 11956@end table 11957 11958@node S/390 and zSeries Options 11959@subsection S/390 and zSeries Options 11960@cindex S/390 and zSeries Options 11961 11962These are the @samp{-m} options defined for the S/390 and zSeries architecture. 11963 11964@table @gcctabopt 11965@item -mhard-float 11966@itemx -msoft-float 11967@opindex mhard-float 11968@opindex msoft-float 11969Use (do not use) the hardware floating-point instructions and registers 11970for floating-point operations. When @option{-msoft-float} is specified, 11971functions in @file{libgcc.a} will be used to perform floating-point 11972operations. When @option{-mhard-float} is specified, the compiler 11973generates IEEE floating-point instructions. This is the default. 11974 11975@item -mlong-double-64 11976@itemx -mlong-double-128 11977@opindex mlong-double-64 11978@opindex mlong-double-128 11979These switches control the size of @code{long double} type. A size 11980of 64bit makes the @code{long double} type equivalent to the @code{double} 11981type. This is the default. 11982 11983@item -mbackchain 11984@itemx -mno-backchain 11985@opindex mbackchain 11986@opindex mno-backchain 11987Store (do not store) the address of the caller's frame as backchain pointer 11988into the callee's stack frame. 11989A backchain may be needed to allow debugging using tools that do not understand 11990DWARF-2 call frame information. 11991When @option{-mno-packed-stack} is in effect, the backchain pointer is stored 11992at the bottom of the stack frame; when @option{-mpacked-stack} is in effect, 11993the backchain is placed into the topmost word of the 96/160 byte register 11994save area. 11995 11996In general, code compiled with @option{-mbackchain} is call-compatible with 11997code compiled with @option{-mmo-backchain}; however, use of the backchain 11998for debugging purposes usually requires that the whole binary is built with 11999@option{-mbackchain}. Note that the combination of @option{-mbackchain}, 12000@option{-mpacked-stack} and @option{-mhard-float} is not supported. In order 12001to build a linux kernel use @option{-msoft-float}. 12002 12003The default is to not maintain the backchain. 12004 12005@item -mpacked-stack 12006@item -mno-packed-stack 12007@opindex mpacked-stack 12008@opindex mno-packed-stack 12009Use (do not use) the packed stack layout. When @option{-mno-packed-stack} is 12010specified, the compiler uses the all fields of the 96/160 byte register save 12011area only for their default purpose; unused fields still take up stack space. 12012When @option{-mpacked-stack} is specified, register save slots are densely 12013packed at the top of the register save area; unused space is reused for other 12014purposes, allowing for more efficient use of the available stack space. 12015However, when @option{-mbackchain} is also in effect, the topmost word of 12016the save area is always used to store the backchain, and the return address 12017register is always saved two words below the backchain. 12018 12019As long as the stack frame backchain is not used, code generated with 12020@option{-mpacked-stack} is call-compatible with code generated with 12021@option{-mno-packed-stack}. Note that some non-FSF releases of GCC 2.95 for 12022S/390 or zSeries generated code that uses the stack frame backchain at run 12023time, not just for debugging purposes. Such code is not call-compatible 12024with code compiled with @option{-mpacked-stack}. Also, note that the 12025combination of @option{-mbackchain}, 12026@option{-mpacked-stack} and @option{-mhard-float} is not supported. In order 12027to build a linux kernel use @option{-msoft-float}. 12028 12029The default is to not use the packed stack layout. 12030 12031@item -msmall-exec 12032@itemx -mno-small-exec 12033@opindex msmall-exec 12034@opindex mno-small-exec 12035Generate (or do not generate) code using the @code{bras} instruction 12036to do subroutine calls. 12037This only works reliably if the total executable size does not 12038exceed 64k. The default is to use the @code{basr} instruction instead, 12039which does not have this limitation. 12040 12041@item -m64 12042@itemx -m31 12043@opindex m64 12044@opindex m31 12045When @option{-m31} is specified, generate code compliant to the 12046GNU/Linux for S/390 ABI@. When @option{-m64} is specified, generate 12047code compliant to the GNU/Linux for zSeries ABI@. This allows GCC in 12048particular to generate 64-bit instructions. For the @samp{s390} 12049targets, the default is @option{-m31}, while the @samp{s390x} 12050targets default to @option{-m64}. 12051 12052@item -mzarch 12053@itemx -mesa 12054@opindex mzarch 12055@opindex mesa 12056When @option{-mzarch} is specified, generate code using the 12057instructions available on z/Architecture. 12058When @option{-mesa} is specified, generate code using the 12059instructions available on ESA/390. Note that @option{-mesa} is 12060not possible with @option{-m64}. 12061When generating code compliant to the GNU/Linux for S/390 ABI, 12062the default is @option{-mesa}. When generating code compliant 12063to the GNU/Linux for zSeries ABI, the default is @option{-mzarch}. 12064 12065@item -mmvcle 12066@itemx -mno-mvcle 12067@opindex mmvcle 12068@opindex mno-mvcle 12069Generate (or do not generate) code using the @code{mvcle} instruction 12070to perform block moves. When @option{-mno-mvcle} is specified, 12071use a @code{mvc} loop instead. This is the default unless optimizing for 12072size. 12073 12074@item -mdebug 12075@itemx -mno-debug 12076@opindex mdebug 12077@opindex mno-debug 12078Print (or do not print) additional debug information when compiling. 12079The default is to not print debug information. 12080 12081@item -march=@var{cpu-type} 12082@opindex march 12083Generate code that will run on @var{cpu-type}, which is the name of a system 12084representing a certain processor type. Possible values for 12085@var{cpu-type} are @samp{g5}, @samp{g6}, @samp{z900}, and @samp{z990}. 12086When generating code using the instructions available on z/Architecture, 12087the default is @option{-march=z900}. Otherwise, the default is 12088@option{-march=g5}. 12089 12090@item -mtune=@var{cpu-type} 12091@opindex mtune 12092Tune to @var{cpu-type} everything applicable about the generated code, 12093except for the ABI and the set of available instructions. 12094The list of @var{cpu-type} values is the same as for @option{-march}. 12095The default is the value used for @option{-march}. 12096 12097@item -mtpf-trace 12098@itemx -mno-tpf-trace 12099@opindex mtpf-trace 12100@opindex mno-tpf-trace 12101Generate code that adds (does not add) in TPF OS specific branches to trace 12102routines in the operating system. This option is off by default, even 12103when compiling for the TPF OS@. 12104 12105@item -mfused-madd 12106@itemx -mno-fused-madd 12107@opindex mfused-madd 12108@opindex mno-fused-madd 12109Generate code that uses (does not use) the floating point multiply and 12110accumulate instructions. These instructions are generated by default if 12111hardware floating point is used. 12112 12113@item -mwarn-framesize=@var{framesize} 12114@opindex mwarn-framesize 12115Emit a warning if the current function exceeds the given frame size. Because 12116this is a compile time check it doesn't need to be a real problem when the program 12117runs. It is intended to identify functions which most probably cause 12118a stack overflow. It is useful to be used in an environment with limited stack 12119size e.g.@: the linux kernel. 12120 12121@item -mwarn-dynamicstack 12122@opindex mwarn-dynamicstack 12123Emit a warning if the function calls alloca or uses dynamically 12124sized arrays. This is generally a bad idea with a limited stack size. 12125 12126@item -mstack-guard=@var{stack-guard} 12127@item -mstack-size=@var{stack-size} 12128@opindex mstack-guard 12129@opindex mstack-size 12130These arguments always have to be used in conjunction. If they are present the s390 12131back end emits additional instructions in the function prologue which trigger a trap 12132if the stack size is @var{stack-guard} bytes above the @var{stack-size} 12133(remember that the stack on s390 grows downward). These options are intended to 12134be used to help debugging stack overflow problems. The additionally emitted code 12135causes only little overhead and hence can also be used in production like systems 12136without greater performance degradation. The given values have to be exact 12137powers of 2 and @var{stack-size} has to be greater than @var{stack-guard} without 12138exceeding 64k. 12139In order to be efficient the extra code makes the assumption that the stack starts 12140at an address aligned to the value given by @var{stack-size}. 12141@end table 12142 12143@node Score Options 12144@subsection Score Options 12145@cindex Score Options 12146 12147These options are defined for Score implementations: 12148 12149@table @gcctabopt 12150@item -meb 12151@opindex meb 12152Compile code for big endian mode. This is the default. 12153 12154@item -mel 12155@opindex mel 12156Compile code for little endian mode. 12157 12158@item -mnhwloop 12159@opindex mnhwloop 12160Disable generate bcnz instruction. 12161 12162@item -muls 12163@opindex muls 12164Enable generate unaligned load and store instruction. 12165 12166@item -mmac 12167@opindex mmac 12168Enable the use of multiply-accumulate instructions. Disabled by default. 12169 12170@item -mscore5 12171@opindex mscore5 12172Specify the SCORE5 as the target architecture. 12173 12174@item -mscore5u 12175@opindex mscore5u 12176Specify the SCORE5U of the target architecture. 12177 12178@item -mscore7 12179@opindex mscore7 12180Specify the SCORE7 as the target architecture. This is the default. 12181 12182@item -mscore7d 12183@opindex mscore7d 12184Specify the SCORE7D as the target architecture. 12185@end table 12186 12187@node SH Options 12188@subsection SH Options 12189 12190These @samp{-m} options are defined for the SH implementations: 12191 12192@table @gcctabopt 12193@item -m1 12194@opindex m1 12195Generate code for the SH1. 12196 12197@item -m2 12198@opindex m2 12199Generate code for the SH2. 12200 12201@item -m2e 12202Generate code for the SH2e. 12203 12204@item -m3 12205@opindex m3 12206Generate code for the SH3. 12207 12208@item -m3e 12209@opindex m3e 12210Generate code for the SH3e. 12211 12212@item -m4-nofpu 12213@opindex m4-nofpu 12214Generate code for the SH4 without a floating-point unit. 12215 12216@item -m4-single-only 12217@opindex m4-single-only 12218Generate code for the SH4 with a floating-point unit that only 12219supports single-precision arithmetic. 12220 12221@item -m4-single 12222@opindex m4-single 12223Generate code for the SH4 assuming the floating-point unit is in 12224single-precision mode by default. 12225 12226@item -m4 12227@opindex m4 12228Generate code for the SH4. 12229 12230@item -m4a-nofpu 12231@opindex m4a-nofpu 12232Generate code for the SH4al-dsp, or for a SH4a in such a way that the 12233floating-point unit is not used. 12234 12235@item -m4a-single-only 12236@opindex m4a-single-only 12237Generate code for the SH4a, in such a way that no double-precision 12238floating point operations are used. 12239 12240@item -m4a-single 12241@opindex m4a-single 12242Generate code for the SH4a assuming the floating-point unit is in 12243single-precision mode by default. 12244 12245@item -m4a 12246@opindex m4a 12247Generate code for the SH4a. 12248 12249@item -m4al 12250@opindex m4al 12251Same as @option{-m4a-nofpu}, except that it implicitly passes 12252@option{-dsp} to the assembler. GCC doesn't generate any DSP 12253instructions at the moment. 12254 12255@item -mb 12256@opindex mb 12257Compile code for the processor in big endian mode. 12258 12259@item -ml 12260@opindex ml 12261Compile code for the processor in little endian mode. 12262 12263@item -mdalign 12264@opindex mdalign 12265Align doubles at 64-bit boundaries. Note that this changes the calling 12266conventions, and thus some functions from the standard C library will 12267not work unless you recompile it first with @option{-mdalign}. 12268 12269@item -mrelax 12270@opindex mrelax 12271Shorten some address references at link time, when possible; uses the 12272linker option @option{-relax}. 12273 12274@item -mbigtable 12275@opindex mbigtable 12276Use 32-bit offsets in @code{switch} tables. The default is to use 1227716-bit offsets. 12278 12279@item -mfmovd 12280@opindex mfmovd 12281Enable the use of the instruction @code{fmovd}. 12282 12283@item -mhitachi 12284@opindex mhitachi 12285Comply with the calling conventions defined by Renesas. 12286 12287@item -mrenesas 12288@opindex mhitachi 12289Comply with the calling conventions defined by Renesas. 12290 12291@item -mno-renesas 12292@opindex mhitachi 12293Comply with the calling conventions defined for GCC before the Renesas 12294conventions were available. This option is the default for all 12295targets of the SH toolchain except for @samp{sh-symbianelf}. 12296 12297@item -mnomacsave 12298@opindex mnomacsave 12299Mark the @code{MAC} register as call-clobbered, even if 12300@option{-mhitachi} is given. 12301 12302@item -mieee 12303@opindex mieee 12304Increase IEEE-compliance of floating-point code. 12305At the moment, this is equivalent to @option{-fno-finite-math-only}. 12306When generating 16 bit SH opcodes, getting IEEE-conforming results for 12307comparisons of NANs / infinities incurs extra overhead in every 12308floating point comparison, therefore the default is set to 12309@option{-ffinite-math-only}. 12310 12311@item -misize 12312@opindex misize 12313Dump instruction size and location in the assembly code. 12314 12315@item -mpadstruct 12316@opindex mpadstruct 12317This option is deprecated. It pads structures to multiple of 4 bytes, 12318which is incompatible with the SH ABI@. 12319 12320@item -mspace 12321@opindex mspace 12322Optimize for space instead of speed. Implied by @option{-Os}. 12323 12324@item -mprefergot 12325@opindex mprefergot 12326When generating position-independent code, emit function calls using 12327the Global Offset Table instead of the Procedure Linkage Table. 12328 12329@item -musermode 12330@opindex musermode 12331Generate a library function call to invalidate instruction cache 12332entries, after fixing up a trampoline. This library function call 12333doesn't assume it can write to the whole memory address space. This 12334is the default when the target is @code{sh-*-linux*}. 12335 12336@item -multcost=@var{number} 12337@opindex multcost=@var{number} 12338Set the cost to assume for a multiply insn. 12339 12340@item -mdiv=@var{strategy} 12341@opindex mdiv=@var{strategy} 12342Set the division strategy to use for SHmedia code. @var{strategy} must be 12343one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l, inv:call, 12344inv:call2, inv:fp . 12345"fp" performs the operation in floating point. This has a very high latency, 12346but needs only a few instructions, so it might be a good choice if 12347your code has enough easily exploitable ILP to allow the compiler to 12348schedule the floating point instructions together with other instructions. 12349Division by zero causes a floating point exception. 12350"inv" uses integer operations to calculate the inverse of the divisor, 12351and then multiplies the dividend with the inverse. This strategy allows 12352cse and hoisting of the inverse calculation. Division by zero calculates 12353an unspecified result, but does not trap. 12354"inv:minlat" is a variant of "inv" where if no cse / hoisting opportunities 12355have been found, or if the entire operation has been hoisted to the same 12356place, the last stages of the inverse calculation are intertwined with the 12357final multiply to reduce the overall latency, at the expense of using a few 12358more instructions, and thus offering fewer scheduling opportunities with 12359other code. 12360"call" calls a library function that usually implements the inv:minlat 12361strategy. 12362This gives high code density for m5-*media-nofpu compilations. 12363"call2" uses a different entry point of the same library function, where it 12364assumes that a pointer to a lookup table has already been set up, which 12365exposes the pointer load to cse / code hoisting optimizations. 12366"inv:call", "inv:call2" and "inv:fp" all use the "inv" algorithm for initial 12367code generation, but if the code stays unoptimized, revert to the "call", 12368"call2", or "fp" strategies, respectively. Note that the 12369potentially-trapping side effect of division by zero is carried by a 12370separate instruction, so it is possible that all the integer instructions 12371are hoisted out, but the marker for the side effect stays where it is. 12372A recombination to fp operations or a call is not possible in that case. 12373"inv20u" and "inv20l" are variants of the "inv:minlat" strategy. In the case 12374that the inverse calculation was nor separated from the multiply, they speed 12375up division where the dividend fits into 20 bits (plus sign where applicable), 12376by inserting a test to skip a number of operations in this case; this test 12377slows down the case of larger dividends. inv20u assumes the case of a such 12378a small dividend to be unlikely, and inv20l assumes it to be likely. 12379 12380@item -mdivsi3_libfunc=@var{name} 12381@opindex mdivsi3_libfunc=@var{name} 12382Set the name of the library function used for 32 bit signed division to 12383@var{name}. This only affect the name used in the call and inv:call 12384division strategies, and the compiler will still expect the same 12385sets of input/output/clobbered registers as if this option was not present. 12386 12387@item -madjust-unroll 12388@opindex madjust-unroll 12389Throttle unrolling to avoid thrashing target registers. 12390This option only has an effect if the gcc code base supports the 12391TARGET_ADJUST_UNROLL_MAX target hook. 12392 12393@item -mindexed-addressing 12394@opindex mindexed-addressing 12395Enable the use of the indexed addressing mode for SHmedia32/SHcompact. 12396This is only safe if the hardware and/or OS implement 32 bit wrap-around 12397semantics for the indexed addressing mode. The architecture allows the 12398implementation of processors with 64 bit MMU, which the OS could use to 12399get 32 bit addressing, but since no current hardware implementation supports 12400this or any other way to make the indexed addressing mode safe to use in 12401the 32 bit ABI, the default is -mno-indexed-addressing. 12402 12403@item -mgettrcost=@var{number} 12404@opindex mgettrcost=@var{number} 12405Set the cost assumed for the gettr instruction to @var{number}. 12406The default is 2 if @option{-mpt-fixed} is in effect, 100 otherwise. 12407 12408@item -mpt-fixed 12409@opindex mpt-fixed 12410Assume pt* instructions won't trap. This will generally generate better 12411scheduled code, but is unsafe on current hardware. The current architecture 12412definition says that ptabs and ptrel trap when the target anded with 3 is 3. 12413This has the unintentional effect of making it unsafe to schedule ptabs / 12414ptrel before a branch, or hoist it out of a loop. For example, 12415__do_global_ctors, a part of libgcc that runs constructors at program 12416startup, calls functions in a list which is delimited by -1. With the 12417-mpt-fixed option, the ptabs will be done before testing against -1. 12418That means that all the constructors will be run a bit quicker, but when 12419the loop comes to the end of the list, the program crashes because ptabs 12420loads -1 into a target register. Since this option is unsafe for any 12421hardware implementing the current architecture specification, the default 12422is -mno-pt-fixed. Unless the user specifies a specific cost with 12423@option{-mgettrcost}, -mno-pt-fixed also implies @option{-mgettrcost=100}; 12424this deters register allocation using target registers for storing 12425ordinary integers. 12426 12427@item -minvalid-symbols 12428@opindex minvalid-symbols 12429Assume symbols might be invalid. Ordinary function symbols generated by 12430the compiler will always be valid to load with movi/shori/ptabs or 12431movi/shori/ptrel, but with assembler and/or linker tricks it is possible 12432to generate symbols that will cause ptabs / ptrel to trap. 12433This option is only meaningful when @option{-mno-pt-fixed} is in effect. 12434It will then prevent cross-basic-block cse, hoisting and most scheduling 12435of symbol loads. The default is @option{-mno-invalid-symbols}. 12436@end table 12437 12438@node SPARC Options 12439@subsection SPARC Options 12440@cindex SPARC options 12441 12442These @samp{-m} options are supported on the SPARC: 12443 12444@table @gcctabopt 12445@item -mno-app-regs 12446@itemx -mapp-regs 12447@opindex mno-app-regs 12448@opindex mapp-regs 12449Specify @option{-mapp-regs} to generate output using the global registers 124502 through 4, which the SPARC SVR4 ABI reserves for applications. This 12451is the default. 12452 12453To be fully SVR4 ABI compliant at the cost of some performance loss, 12454specify @option{-mno-app-regs}. You should compile libraries and system 12455software with this option. 12456 12457@item -mfpu 12458@itemx -mhard-float 12459@opindex mfpu 12460@opindex mhard-float 12461Generate output containing floating point instructions. This is the 12462default. 12463 12464@item -mno-fpu 12465@itemx -msoft-float 12466@opindex mno-fpu 12467@opindex msoft-float 12468Generate output containing library calls for floating point. 12469@strong{Warning:} the requisite libraries are not available for all SPARC 12470targets. Normally the facilities of the machine's usual C compiler are 12471used, but this cannot be done directly in cross-compilation. You must make 12472your own arrangements to provide suitable library functions for 12473cross-compilation. The embedded targets @samp{sparc-*-aout} and 12474@samp{sparclite-*-*} do provide software floating point support. 12475 12476@option{-msoft-float} changes the calling convention in the output file; 12477therefore, it is only useful if you compile @emph{all} of a program with 12478this option. In particular, you need to compile @file{libgcc.a}, the 12479library that comes with GCC, with @option{-msoft-float} in order for 12480this to work. 12481 12482@item -mhard-quad-float 12483@opindex mhard-quad-float 12484Generate output containing quad-word (long double) floating point 12485instructions. 12486 12487@item -msoft-quad-float 12488@opindex msoft-quad-float 12489Generate output containing library calls for quad-word (long double) 12490floating point instructions. The functions called are those specified 12491in the SPARC ABI@. This is the default. 12492 12493As of this writing, there are no SPARC implementations that have hardware 12494support for the quad-word floating point instructions. They all invoke 12495a trap handler for one of these instructions, and then the trap handler 12496emulates the effect of the instruction. Because of the trap handler overhead, 12497this is much slower than calling the ABI library routines. Thus the 12498@option{-msoft-quad-float} option is the default. 12499 12500@item -mno-unaligned-doubles 12501@itemx -munaligned-doubles 12502@opindex mno-unaligned-doubles 12503@opindex munaligned-doubles 12504Assume that doubles have 8 byte alignment. This is the default. 12505 12506With @option{-munaligned-doubles}, GCC assumes that doubles have 8 byte 12507alignment only if they are contained in another type, or if they have an 12508absolute address. Otherwise, it assumes they have 4 byte alignment. 12509Specifying this option avoids some rare compatibility problems with code 12510generated by other compilers. It is not the default because it results 12511in a performance loss, especially for floating point code. 12512 12513@item -mno-faster-structs 12514@itemx -mfaster-structs 12515@opindex mno-faster-structs 12516@opindex mfaster-structs 12517With @option{-mfaster-structs}, the compiler assumes that structures 12518should have 8 byte alignment. This enables the use of pairs of 12519@code{ldd} and @code{std} instructions for copies in structure 12520assignment, in place of twice as many @code{ld} and @code{st} pairs. 12521However, the use of this changed alignment directly violates the SPARC 12522ABI@. Thus, it's intended only for use on targets where the developer 12523acknowledges that their resulting code will not be directly in line with 12524the rules of the ABI@. 12525 12526@item -mimpure-text 12527@opindex mimpure-text 12528@option{-mimpure-text}, used in addition to @option{-shared}, tells 12529the compiler to not pass @option{-z text} to the linker when linking a 12530shared object. Using this option, you can link position-dependent 12531code into a shared object. 12532 12533@option{-mimpure-text} suppresses the ``relocations remain against 12534allocatable but non-writable sections'' linker error message. 12535However, the necessary relocations will trigger copy-on-write, and the 12536shared object is not actually shared across processes. Instead of 12537using @option{-mimpure-text}, you should compile all source code with 12538@option{-fpic} or @option{-fPIC}. 12539 12540This option is only available on SunOS and Solaris. 12541 12542@item -mcpu=@var{cpu_type} 12543@opindex mcpu 12544Set the instruction set, register set, and instruction scheduling parameters 12545for machine type @var{cpu_type}. Supported values for @var{cpu_type} are 12546@samp{v7}, @samp{cypress}, @samp{v8}, @samp{supersparc}, @samp{sparclite}, 12547@samp{f930}, @samp{f934}, @samp{hypersparc}, @samp{sparclite86x}, 12548@samp{sparclet}, @samp{tsc701}, @samp{v9}, @samp{ultrasparc}, 12549@samp{ultrasparc3}, and @samp{niagara}. 12550 12551Default instruction scheduling parameters are used for values that select 12552an architecture and not an implementation. These are @samp{v7}, @samp{v8}, 12553@samp{sparclite}, @samp{sparclet}, @samp{v9}. 12554 12555Here is a list of each supported architecture and their supported 12556implementations. 12557 12558@smallexample 12559 v7: cypress 12560 v8: supersparc, hypersparc 12561 sparclite: f930, f934, sparclite86x 12562 sparclet: tsc701 12563 v9: ultrasparc, ultrasparc3, niagara 12564@end smallexample 12565 12566By default (unless configured otherwise), GCC generates code for the V7 12567variant of the SPARC architecture. With @option{-mcpu=cypress}, the compiler 12568additionally optimizes it for the Cypress CY7C602 chip, as used in the 12569SPARCStation/SPARCServer 3xx series. This is also appropriate for the older 12570SPARCStation 1, 2, IPX etc. 12571 12572With @option{-mcpu=v8}, GCC generates code for the V8 variant of the SPARC 12573architecture. The only difference from V7 code is that the compiler emits 12574the integer multiply and integer divide instructions which exist in SPARC-V8 12575but not in SPARC-V7. With @option{-mcpu=supersparc}, the compiler additionally 12576optimizes it for the SuperSPARC chip, as used in the SPARCStation 10, 1000 and 125772000 series. 12578 12579With @option{-mcpu=sparclite}, GCC generates code for the SPARClite variant of 12580the SPARC architecture. This adds the integer multiply, integer divide step 12581and scan (@code{ffs}) instructions which exist in SPARClite but not in SPARC-V7. 12582With @option{-mcpu=f930}, the compiler additionally optimizes it for the 12583Fujitsu MB86930 chip, which is the original SPARClite, with no FPU@. With 12584@option{-mcpu=f934}, the compiler additionally optimizes it for the Fujitsu 12585MB86934 chip, which is the more recent SPARClite with FPU@. 12586 12587With @option{-mcpu=sparclet}, GCC generates code for the SPARClet variant of 12588the SPARC architecture. This adds the integer multiply, multiply/accumulate, 12589integer divide step and scan (@code{ffs}) instructions which exist in SPARClet 12590but not in SPARC-V7. With @option{-mcpu=tsc701}, the compiler additionally 12591optimizes it for the TEMIC SPARClet chip. 12592 12593With @option{-mcpu=v9}, GCC generates code for the V9 variant of the SPARC 12594architecture. This adds 64-bit integer and floating-point move instructions, 125953 additional floating-point condition code registers and conditional move 12596instructions. With @option{-mcpu=ultrasparc}, the compiler additionally 12597optimizes it for the Sun UltraSPARC I/II/IIi chips. With 12598@option{-mcpu=ultrasparc3}, the compiler additionally optimizes it for the 12599Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ chips. With 12600@option{-mcpu=niagara}, the compiler additionally optimizes it for 12601Sun UltraSPARC T1 chips. 12602 12603@item -mtune=@var{cpu_type} 12604@opindex mtune 12605Set the instruction scheduling parameters for machine type 12606@var{cpu_type}, but do not set the instruction set or register set that the 12607option @option{-mcpu=@var{cpu_type}} would. 12608 12609The same values for @option{-mcpu=@var{cpu_type}} can be used for 12610@option{-mtune=@var{cpu_type}}, but the only useful values are those 12611that select a particular cpu implementation. Those are @samp{cypress}, 12612@samp{supersparc}, @samp{hypersparc}, @samp{f930}, @samp{f934}, 12613@samp{sparclite86x}, @samp{tsc701}, @samp{ultrasparc}, 12614@samp{ultrasparc3}, and @samp{niagara}. 12615 12616@item -mv8plus 12617@itemx -mno-v8plus 12618@opindex mv8plus 12619@opindex mno-v8plus 12620With @option{-mv8plus}, GCC generates code for the SPARC-V8+ ABI@. The 12621difference from the V8 ABI is that the global and out registers are 12622considered 64-bit wide. This is enabled by default on Solaris in 32-bit 12623mode for all SPARC-V9 processors. 12624 12625@item -mvis 12626@itemx -mno-vis 12627@opindex mvis 12628@opindex mno-vis 12629With @option{-mvis}, GCC generates code that takes advantage of the UltraSPARC 12630Visual Instruction Set extensions. The default is @option{-mno-vis}. 12631@end table 12632 12633These @samp{-m} options are supported in addition to the above 12634on SPARC-V9 processors in 64-bit environments: 12635 12636@table @gcctabopt 12637@item -mlittle-endian 12638@opindex mlittle-endian 12639Generate code for a processor running in little-endian mode. It is only 12640available for a few configurations and most notably not on Solaris and Linux. 12641 12642@item -m32 12643@itemx -m64 12644@opindex m32 12645@opindex m64 12646Generate code for a 32-bit or 64-bit environment. 12647The 32-bit environment sets int, long and pointer to 32 bits. 12648The 64-bit environment sets int to 32 bits and long and pointer 12649to 64 bits. 12650 12651@item -mcmodel=medlow 12652@opindex mcmodel=medlow 12653Generate code for the Medium/Low code model: 64-bit addresses, programs 12654must be linked in the low 32 bits of memory. Programs can be statically 12655or dynamically linked. 12656 12657@item -mcmodel=medmid 12658@opindex mcmodel=medmid 12659Generate code for the Medium/Middle code model: 64-bit addresses, programs 12660must be linked in the low 44 bits of memory, the text and data segments must 12661be less than 2GB in size and the data segment must be located within 2GB of 12662the text segment. 12663 12664@item -mcmodel=medany 12665@opindex mcmodel=medany 12666Generate code for the Medium/Anywhere code model: 64-bit addresses, programs 12667may be linked anywhere in memory, the text and data segments must be less 12668than 2GB in size and the data segment must be located within 2GB of the 12669text segment. 12670 12671@item -mcmodel=embmedany 12672@opindex mcmodel=embmedany 12673Generate code for the Medium/Anywhere code model for embedded systems: 1267464-bit addresses, the text and data segments must be less than 2GB in 12675size, both starting anywhere in memory (determined at link time). The 12676global register %g4 points to the base of the data segment. Programs 12677are statically linked and PIC is not supported. 12678 12679@item -mstack-bias 12680@itemx -mno-stack-bias 12681@opindex mstack-bias 12682@opindex mno-stack-bias 12683With @option{-mstack-bias}, GCC assumes that the stack pointer, and 12684frame pointer if present, are offset by @minus{}2047 which must be added back 12685when making stack frame references. This is the default in 64-bit mode. 12686Otherwise, assume no such offset is present. 12687@end table 12688 12689These switches are supported in addition to the above on Solaris: 12690 12691@table @gcctabopt 12692@item -threads 12693@opindex threads 12694Add support for multithreading using the Solaris threads library. This 12695option sets flags for both the preprocessor and linker. This option does 12696not affect the thread safety of object code produced by the compiler or 12697that of libraries supplied with it. 12698 12699@item -pthreads 12700@opindex pthreads 12701Add support for multithreading using the POSIX threads library. This 12702option sets flags for both the preprocessor and linker. This option does 12703not affect the thread safety of object code produced by the compiler or 12704that of libraries supplied with it. 12705 12706@item -pthread 12707@opindex pthread 12708This is a synonym for @option{-pthreads}. 12709@end table 12710 12711@node System V Options 12712@subsection Options for System V 12713 12714These additional options are available on System V Release 4 for 12715compatibility with other compilers on those systems: 12716 12717@table @gcctabopt 12718@item -G 12719@opindex G 12720Create a shared object. 12721It is recommended that @option{-symbolic} or @option{-shared} be used instead. 12722 12723@item -Qy 12724@opindex Qy 12725Identify the versions of each tool used by the compiler, in a 12726@code{.ident} assembler directive in the output. 12727 12728@item -Qn 12729@opindex Qn 12730Refrain from adding @code{.ident} directives to the output file (this is 12731the default). 12732 12733@item -YP,@var{dirs} 12734@opindex YP 12735Search the directories @var{dirs}, and no others, for libraries 12736specified with @option{-l}. 12737 12738@item -Ym,@var{dir} 12739@opindex Ym 12740Look in the directory @var{dir} to find the M4 preprocessor. 12741The assembler uses this option. 12742@c This is supposed to go with a -Yd for predefined M4 macro files, but 12743@c the generic assembler that comes with Solaris takes just -Ym. 12744@end table 12745 12746@node TMS320C3x/C4x Options 12747@subsection TMS320C3x/C4x Options 12748@cindex TMS320C3x/C4x Options 12749 12750These @samp{-m} options are defined for TMS320C3x/C4x implementations: 12751 12752@table @gcctabopt 12753 12754@item -mcpu=@var{cpu_type} 12755@opindex mcpu 12756Set the instruction set, register set, and instruction scheduling 12757parameters for machine type @var{cpu_type}. Supported values for 12758@var{cpu_type} are @samp{c30}, @samp{c31}, @samp{c32}, @samp{c40}, and 12759@samp{c44}. The default is @samp{c40} to generate code for the 12760TMS320C40. 12761 12762@item -mbig-memory 12763@itemx -mbig 12764@itemx -msmall-memory 12765@itemx -msmall 12766@opindex mbig-memory 12767@opindex mbig 12768@opindex msmall-memory 12769@opindex msmall 12770Generates code for the big or small memory model. The small memory 12771model assumed that all data fits into one 64K word page. At run-time 12772the data page (DP) register must be set to point to the 64K page 12773containing the .bss and .data program sections. The big memory model is 12774the default and requires reloading of the DP register for every direct 12775memory access. 12776 12777@item -mbk 12778@itemx -mno-bk 12779@opindex mbk 12780@opindex mno-bk 12781Allow (disallow) allocation of general integer operands into the block 12782count register BK@. 12783 12784@item -mdb 12785@itemx -mno-db 12786@opindex mdb 12787@opindex mno-db 12788Enable (disable) generation of code using decrement and branch, 12789DBcond(D), instructions. This is enabled by default for the C4x. To be 12790on the safe side, this is disabled for the C3x, since the maximum 12791iteration count on the C3x is @math{2^{23} + 1} (but who iterates loops more than 12792@math{2^{23}} times on the C3x?). Note that GCC will try to reverse a loop so 12793that it can utilize the decrement and branch instruction, but will give 12794up if there is more than one memory reference in the loop. Thus a loop 12795where the loop counter is decremented can generate slightly more 12796efficient code, in cases where the RPTB instruction cannot be utilized. 12797 12798@item -mdp-isr-reload 12799@itemx -mparanoid 12800@opindex mdp-isr-reload 12801@opindex mparanoid 12802Force the DP register to be saved on entry to an interrupt service 12803routine (ISR), reloaded to point to the data section, and restored on 12804exit from the ISR@. This should not be required unless someone has 12805violated the small memory model by modifying the DP register, say within 12806an object library. 12807 12808@item -mmpyi 12809@itemx -mno-mpyi 12810@opindex mmpyi 12811@opindex mno-mpyi 12812For the C3x use the 24-bit MPYI instruction for integer multiplies 12813instead of a library call to guarantee 32-bit results. Note that if one 12814of the operands is a constant, then the multiplication will be performed 12815using shifts and adds. If the @option{-mmpyi} option is not specified for the C3x, 12816then squaring operations are performed inline instead of a library call. 12817 12818@item -mfast-fix 12819@itemx -mno-fast-fix 12820@opindex mfast-fix 12821@opindex mno-fast-fix 12822The C3x/C4x FIX instruction to convert a floating point value to an 12823integer value chooses the nearest integer less than or equal to the 12824floating point value rather than to the nearest integer. Thus if the 12825floating point number is negative, the result will be incorrectly 12826truncated an additional code is necessary to detect and correct this 12827case. This option can be used to disable generation of the additional 12828code required to correct the result. 12829 12830@item -mrptb 12831@itemx -mno-rptb 12832@opindex mrptb 12833@opindex mno-rptb 12834Enable (disable) generation of repeat block sequences using the RPTB 12835instruction for zero overhead looping. The RPTB construct is only used 12836for innermost loops that do not call functions or jump across the loop 12837boundaries. There is no advantage having nested RPTB loops due to the 12838overhead required to save and restore the RC, RS, and RE registers. 12839This is enabled by default with @option{-O2}. 12840 12841@item -mrpts=@var{count} 12842@itemx -mno-rpts 12843@opindex mrpts 12844@opindex mno-rpts 12845Enable (disable) the use of the single instruction repeat instruction 12846RPTS@. If a repeat block contains a single instruction, and the loop 12847count can be guaranteed to be less than the value @var{count}, GCC will 12848emit a RPTS instruction instead of a RPTB@. If no value is specified, 12849then a RPTS will be emitted even if the loop count cannot be determined 12850at compile time. Note that the repeated instruction following RPTS does 12851not have to be reloaded from memory each iteration, thus freeing up the 12852CPU buses for operands. However, since interrupts are blocked by this 12853instruction, it is disabled by default. 12854 12855@item -mloop-unsigned 12856@itemx -mno-loop-unsigned 12857@opindex mloop-unsigned 12858@opindex mno-loop-unsigned 12859The maximum iteration count when using RPTS and RPTB (and DB on the C40) 12860is @math{2^{31} + 1} since these instructions test if the iteration count is 12861negative to terminate the loop. If the iteration count is unsigned 12862there is a possibility than the @math{2^{31} + 1} maximum iteration count may be 12863exceeded. This switch allows an unsigned iteration count. 12864 12865@item -mti 12866@opindex mti 12867Try to emit an assembler syntax that the TI assembler (asm30) is happy 12868with. This also enforces compatibility with the API employed by the TI 12869C3x C compiler. For example, long doubles are passed as structures 12870rather than in floating point registers. 12871 12872@item -mregparm 12873@itemx -mmemparm 12874@opindex mregparm 12875@opindex mmemparm 12876Generate code that uses registers (stack) for passing arguments to functions. 12877By default, arguments are passed in registers where possible rather 12878than by pushing arguments on to the stack. 12879 12880@item -mparallel-insns 12881@itemx -mno-parallel-insns 12882@opindex mparallel-insns 12883@opindex mno-parallel-insns 12884Allow the generation of parallel instructions. This is enabled by 12885default with @option{-O2}. 12886 12887@item -mparallel-mpy 12888@itemx -mno-parallel-mpy 12889@opindex mparallel-mpy 12890@opindex mno-parallel-mpy 12891Allow the generation of MPY||ADD and MPY||SUB parallel instructions, 12892provided @option{-mparallel-insns} is also specified. These instructions have 12893tight register constraints which can pessimize the code generation 12894of large functions. 12895 12896@end table 12897 12898@node V850 Options 12899@subsection V850 Options 12900@cindex V850 Options 12901 12902These @samp{-m} options are defined for V850 implementations: 12903 12904@table @gcctabopt 12905@item -mlong-calls 12906@itemx -mno-long-calls 12907@opindex mlong-calls 12908@opindex mno-long-calls 12909Treat all calls as being far away (near). If calls are assumed to be 12910far away, the compiler will always load the functions address up into a 12911register, and call indirect through the pointer. 12912 12913@item -mno-ep 12914@itemx -mep 12915@opindex mno-ep 12916@opindex mep 12917Do not optimize (do optimize) basic blocks that use the same index 12918pointer 4 or more times to copy pointer into the @code{ep} register, and 12919use the shorter @code{sld} and @code{sst} instructions. The @option{-mep} 12920option is on by default if you optimize. 12921 12922@item -mno-prolog-function 12923@itemx -mprolog-function 12924@opindex mno-prolog-function 12925@opindex mprolog-function 12926Do not use (do use) external functions to save and restore registers 12927at the prologue and epilogue of a function. The external functions 12928are slower, but use less code space if more than one function saves 12929the same number of registers. The @option{-mprolog-function} option 12930is on by default if you optimize. 12931 12932@item -mspace 12933@opindex mspace 12934Try to make the code as small as possible. At present, this just turns 12935on the @option{-mep} and @option{-mprolog-function} options. 12936 12937@item -mtda=@var{n} 12938@opindex mtda 12939Put static or global variables whose size is @var{n} bytes or less into 12940the tiny data area that register @code{ep} points to. The tiny data 12941area can hold up to 256 bytes in total (128 bytes for byte references). 12942 12943@item -msda=@var{n} 12944@opindex msda 12945Put static or global variables whose size is @var{n} bytes or less into 12946the small data area that register @code{gp} points to. The small data 12947area can hold up to 64 kilobytes. 12948 12949@item -mzda=@var{n} 12950@opindex mzda 12951Put static or global variables whose size is @var{n} bytes or less into 12952the first 32 kilobytes of memory. 12953 12954@item -mv850 12955@opindex mv850 12956Specify that the target processor is the V850. 12957 12958@item -mbig-switch 12959@opindex mbig-switch 12960Generate code suitable for big switch tables. Use this option only if 12961the assembler/linker complain about out of range branches within a switch 12962table. 12963 12964@item -mapp-regs 12965@opindex mapp-regs 12966This option will cause r2 and r5 to be used in the code generated by 12967the compiler. This setting is the default. 12968 12969@item -mno-app-regs 12970@opindex mno-app-regs 12971This option will cause r2 and r5 to be treated as fixed registers. 12972 12973@item -mv850e1 12974@opindex mv850e1 12975Specify that the target processor is the V850E1. The preprocessor 12976constants @samp{__v850e1__} and @samp{__v850e__} will be defined if 12977this option is used. 12978 12979@item -mv850e 12980@opindex mv850e 12981Specify that the target processor is the V850E@. The preprocessor 12982constant @samp{__v850e__} will be defined if this option is used. 12983 12984If neither @option{-mv850} nor @option{-mv850e} nor @option{-mv850e1} 12985are defined then a default target processor will be chosen and the 12986relevant @samp{__v850*__} preprocessor constant will be defined. 12987 12988The preprocessor constants @samp{__v850} and @samp{__v851__} are always 12989defined, regardless of which processor variant is the target. 12990 12991@item -mdisable-callt 12992@opindex mdisable-callt 12993This option will suppress generation of the CALLT instruction for the 12994v850e and v850e1 flavors of the v850 architecture. The default is 12995@option{-mno-disable-callt} which allows the CALLT instruction to be used. 12996 12997@end table 12998 12999@node VAX Options 13000@subsection VAX Options 13001@cindex VAX options 13002 13003These @samp{-m} options are defined for the VAX: 13004 13005@table @gcctabopt 13006@item -munix 13007@opindex munix 13008Do not output certain jump instructions (@code{aobleq} and so on) 13009that the Unix assembler for the VAX cannot handle across long 13010ranges. 13011 13012@item -mgnu 13013@opindex mgnu 13014Do output those jump instructions, on the assumption that you 13015will assemble with the GNU assembler. 13016 13017@item -mg 13018@opindex mg 13019Output code for g-format floating point numbers instead of d-format. 13020@end table 13021 13022@node x86-64 Options 13023@subsection x86-64 Options 13024@cindex x86-64 options 13025 13026These are listed under @xref{i386 and x86-64 Options}. 13027 13028@node Xstormy16 Options 13029@subsection Xstormy16 Options 13030@cindex Xstormy16 Options 13031 13032These options are defined for Xstormy16: 13033 13034@table @gcctabopt 13035@item -msim 13036@opindex msim 13037Choose startup files and linker script suitable for the simulator. 13038@end table 13039 13040@node Xtensa Options 13041@subsection Xtensa Options 13042@cindex Xtensa Options 13043 13044These options are supported for Xtensa targets: 13045 13046@table @gcctabopt 13047@item -mconst16 13048@itemx -mno-const16 13049@opindex mconst16 13050@opindex mno-const16 13051Enable or disable use of @code{CONST16} instructions for loading 13052constant values. The @code{CONST16} instruction is currently not a 13053standard option from Tensilica. When enabled, @code{CONST16} 13054instructions are always used in place of the standard @code{L32R} 13055instructions. The use of @code{CONST16} is enabled by default only if 13056the @code{L32R} instruction is not available. 13057 13058@item -mfused-madd 13059@itemx -mno-fused-madd 13060@opindex mfused-madd 13061@opindex mno-fused-madd 13062Enable or disable use of fused multiply/add and multiply/subtract 13063instructions in the floating-point option. This has no effect if the 13064floating-point option is not also enabled. Disabling fused multiply/add 13065and multiply/subtract instructions forces the compiler to use separate 13066instructions for the multiply and add/subtract operations. This may be 13067desirable in some cases where strict IEEE 754-compliant results are 13068required: the fused multiply add/subtract instructions do not round the 13069intermediate result, thereby producing results with @emph{more} bits of 13070precision than specified by the IEEE standard. Disabling fused multiply 13071add/subtract instructions also ensures that the program output is not 13072sensitive to the compiler's ability to combine multiply and add/subtract 13073operations. 13074 13075@item -mtext-section-literals 13076@itemx -mno-text-section-literals 13077@opindex mtext-section-literals 13078@opindex mno-text-section-literals 13079Control the treatment of literal pools. The default is 13080@option{-mno-text-section-literals}, which places literals in a separate 13081section in the output file. This allows the literal pool to be placed 13082in a data RAM/ROM, and it also allows the linker to combine literal 13083pools from separate object files to remove redundant literals and 13084improve code size. With @option{-mtext-section-literals}, the literals 13085are interspersed in the text section in order to keep them as close as 13086possible to their references. This may be necessary for large assembly 13087files. 13088 13089@item -mtarget-align 13090@itemx -mno-target-align 13091@opindex mtarget-align 13092@opindex mno-target-align 13093When this option is enabled, GCC instructs the assembler to 13094automatically align instructions to reduce branch penalties at the 13095expense of some code density. The assembler attempts to widen density 13096instructions to align branch targets and the instructions following call 13097instructions. If there are not enough preceding safe density 13098instructions to align a target, no widening will be performed. The 13099default is @option{-mtarget-align}. These options do not affect the 13100treatment of auto-aligned instructions like @code{LOOP}, which the 13101assembler will always align, either by widening density instructions or 13102by inserting no-op instructions. 13103 13104@item -mlongcalls 13105@itemx -mno-longcalls 13106@opindex mlongcalls 13107@opindex mno-longcalls 13108When this option is enabled, GCC instructs the assembler to translate 13109direct calls to indirect calls unless it can determine that the target 13110of a direct call is in the range allowed by the call instruction. This 13111translation typically occurs for calls to functions in other source 13112files. Specifically, the assembler translates a direct @code{CALL} 13113instruction into an @code{L32R} followed by a @code{CALLX} instruction. 13114The default is @option{-mno-longcalls}. This option should be used in 13115programs where the call target can potentially be out of range. This 13116option is implemented in the assembler, not the compiler, so the 13117assembly code generated by GCC will still show direct call 13118instructions---look at the disassembled object code to see the actual 13119instructions. Note that the assembler will use an indirect call for 13120every cross-file call, not just those that really will be out of range. 13121@end table 13122 13123@node zSeries Options 13124@subsection zSeries Options 13125@cindex zSeries options 13126 13127These are listed under @xref{S/390 and zSeries Options}. 13128 13129@node Code Gen Options 13130@section Options for Code Generation Conventions 13131@cindex code generation conventions 13132@cindex options, code generation 13133@cindex run-time options 13134 13135These machine-independent options control the interface conventions 13136used in code generation. 13137 13138Most of them have both positive and negative forms; the negative form 13139of @option{-ffoo} would be @option{-fno-foo}. In the table below, only 13140one of the forms is listed---the one which is not the default. You 13141can figure out the other form by either removing @samp{no-} or adding 13142it. 13143 13144@table @gcctabopt 13145@item -fbounds-check 13146@opindex fbounds-check 13147For front-ends that support it, generate additional code to check that 13148indices used to access arrays are within the declared range. This is 13149currently only supported by the Java and Fortran front-ends, where 13150this option defaults to true and false respectively. 13151 13152@item -ftrapv 13153@opindex ftrapv 13154This option generates traps for signed overflow on addition, subtraction, 13155multiplication operations. 13156 13157@item -fwrapv 13158@opindex fwrapv 13159This option instructs the compiler to assume that signed arithmetic 13160overflow of addition, subtraction and multiplication wraps around 13161using twos-complement representation. This flag enables some optimizations 13162and disables others. This option is enabled by default for the Java 13163front-end, as required by the Java language specification. 13164 13165@item -fexceptions 13166@opindex fexceptions 13167Enable exception handling. Generates extra code needed to propagate 13168exceptions. For some targets, this implies GCC will generate frame 13169unwind information for all functions, which can produce significant data 13170size overhead, although it does not affect execution. If you do not 13171specify this option, GCC will enable it by default for languages like 13172C++ which normally require exception handling, and disable it for 13173languages like C that do not normally require it. However, you may need 13174to enable this option when compiling C code that needs to interoperate 13175properly with exception handlers written in C++. You may also wish to 13176disable this option if you are compiling older C++ programs that don't 13177use exception handling. 13178 13179@item -fnon-call-exceptions 13180@opindex fnon-call-exceptions 13181Generate code that allows trapping instructions to throw exceptions. 13182Note that this requires platform-specific runtime support that does 13183not exist everywhere. Moreover, it only allows @emph{trapping} 13184instructions to throw exceptions, i.e.@: memory references or floating 13185point instructions. It does not allow exceptions to be thrown from 13186arbitrary signal handlers such as @code{SIGALRM}. 13187 13188@item -funwind-tables 13189@opindex funwind-tables 13190Similar to @option{-fexceptions}, except that it will just generate any needed 13191static data, but will not affect the generated code in any other way. 13192You will normally not enable this option; instead, a language processor 13193that needs this handling would enable it on your behalf. 13194 13195@item -fasynchronous-unwind-tables 13196@opindex fasynchronous-unwind-tables 13197Generate unwind table in dwarf2 format, if supported by target machine. The 13198table is exact at each instruction boundary, so it can be used for stack 13199unwinding from asynchronous events (such as debugger or garbage collector). 13200 13201@item -fpcc-struct-return 13202@opindex fpcc-struct-return 13203Return ``short'' @code{struct} and @code{union} values in memory like 13204longer ones, rather than in registers. This convention is less 13205efficient, but it has the advantage of allowing intercallability between 13206GCC-compiled files and files compiled with other compilers, particularly 13207the Portable C Compiler (pcc). 13208 13209The precise convention for returning structures in memory depends 13210on the target configuration macros. 13211 13212Short structures and unions are those whose size and alignment match 13213that of some integer type. 13214 13215@strong{Warning:} code compiled with the @option{-fpcc-struct-return} 13216switch is not binary compatible with code compiled with the 13217@option{-freg-struct-return} switch. 13218Use it to conform to a non-default application binary interface. 13219 13220@item -freg-struct-return 13221@opindex freg-struct-return 13222Return @code{struct} and @code{union} values in registers when possible. 13223This is more efficient for small structures than 13224@option{-fpcc-struct-return}. 13225 13226If you specify neither @option{-fpcc-struct-return} nor 13227@option{-freg-struct-return}, GCC defaults to whichever convention is 13228standard for the target. If there is no standard convention, GCC 13229defaults to @option{-fpcc-struct-return}, except on targets where GCC is 13230the principal compiler. In those cases, we can choose the standard, and 13231we chose the more efficient register return alternative. 13232 13233@strong{Warning:} code compiled with the @option{-freg-struct-return} 13234switch is not binary compatible with code compiled with the 13235@option{-fpcc-struct-return} switch. 13236Use it to conform to a non-default application binary interface. 13237 13238@item -fshort-enums 13239@opindex fshort-enums 13240Allocate to an @code{enum} type only as many bytes as it needs for the 13241declared range of possible values. Specifically, the @code{enum} type 13242will be equivalent to the smallest integer type which has enough room. 13243 13244@strong{Warning:} the @option{-fshort-enums} switch causes GCC to generate 13245code that is not binary compatible with code generated without that switch. 13246Use it to conform to a non-default application binary interface. 13247 13248@item -fshort-double 13249@opindex fshort-double 13250Use the same size for @code{double} as for @code{float}. 13251 13252@strong{Warning:} the @option{-fshort-double} switch causes GCC to generate 13253code that is not binary compatible with code generated without that switch. 13254Use it to conform to a non-default application binary interface. 13255 13256@item -fshort-wchar 13257@opindex fshort-wchar 13258Override the underlying type for @samp{wchar_t} to be @samp{short 13259unsigned int} instead of the default for the target. This option is 13260useful for building programs to run under WINE@. 13261 13262@strong{Warning:} the @option{-fshort-wchar} switch causes GCC to generate 13263code that is not binary compatible with code generated without that switch. 13264Use it to conform to a non-default application binary interface. 13265 13266@item -fno-common 13267@opindex fno-common 13268In C, allocate even uninitialized global variables in the data section of the 13269object file, rather than generating them as common blocks. This has the 13270effect that if the same variable is declared (without @code{extern}) in 13271two different compilations, you will get an error when you link them. 13272The only reason this might be useful is if you wish to verify that the 13273program will work on other systems which always work this way. 13274 13275@item -fno-ident 13276@opindex fno-ident 13277Ignore the @samp{#ident} directive. 13278 13279@item -finhibit-size-directive 13280@opindex finhibit-size-directive 13281Don't output a @code{.size} assembler directive, or anything else that 13282would cause trouble if the function is split in the middle, and the 13283two halves are placed at locations far apart in memory. This option is 13284used when compiling @file{crtstuff.c}; you should not need to use it 13285for anything else. 13286 13287@item -fverbose-asm 13288@opindex fverbose-asm 13289Put extra commentary information in the generated assembly code to 13290make it more readable. This option is generally only of use to those 13291who actually need to read the generated assembly code (perhaps while 13292debugging the compiler itself). 13293 13294@option{-fno-verbose-asm}, the default, causes the 13295extra information to be omitted and is useful when comparing two assembler 13296files. 13297 13298@item -fpic 13299@opindex fpic 13300@cindex global offset table 13301@cindex PIC 13302Generate position-independent code (PIC) suitable for use in a shared 13303library, if supported for the target machine. Such code accesses all 13304constant addresses through a global offset table (GOT)@. The dynamic 13305loader resolves the GOT entries when the program starts (the dynamic 13306loader is not part of GCC; it is part of the operating system). If 13307the GOT size for the linked executable exceeds a machine-specific 13308maximum size, you get an error message from the linker indicating that 13309@option{-fpic} does not work; in that case, recompile with @option{-fPIC} 13310instead. (These maximums are 8k on the SPARC and 32k 13311on the m68k and RS/6000. The 386 has no such limit.) 13312 13313Position-independent code requires special support, and therefore works 13314only on certain machines. For the 386, GCC supports PIC for System V 13315but not for the Sun 386i. Code generated for the IBM RS/6000 is always 13316position-independent. 13317 13318When this flag is set, the macros @code{__pic__} and @code{__PIC__} 13319are defined to 1. 13320 13321@item -fPIC 13322@opindex fPIC 13323If supported for the target machine, emit position-independent code, 13324suitable for dynamic linking and avoiding any limit on the size of the 13325global offset table. This option makes a difference on the m68k, 13326PowerPC and SPARC@. 13327 13328Position-independent code requires special support, and therefore works 13329only on certain machines. 13330 13331When this flag is set, the macros @code{__pic__} and @code{__PIC__} 13332are defined to 2. 13333 13334@item -fpie 13335@itemx -fPIE 13336@opindex fpie 13337@opindex fPIE 13338These options are similar to @option{-fpic} and @option{-fPIC}, but 13339generated position independent code can be only linked into executables. 13340Usually these options are used when @option{-pie} GCC option will be 13341used during linking. 13342 13343@item -fno-jump-tables 13344@opindex fno-jump-tables 13345Do not use jump tables for switch statements even where it would be 13346more efficient than other code generation strategies. This option is 13347of use in conjunction with @option{-fpic} or @option{-fPIC} for 13348building code which forms part of a dynamic linker and cannot 13349reference the address of a jump table. On some targets, jump tables 13350do not require a GOT and this option is not needed. 13351 13352@item -ffixed-@var{reg} 13353@opindex ffixed 13354Treat the register named @var{reg} as a fixed register; generated code 13355should never refer to it (except perhaps as a stack pointer, frame 13356pointer or in some other fixed role). 13357 13358@var{reg} must be the name of a register. The register names accepted 13359are machine-specific and are defined in the @code{REGISTER_NAMES} 13360macro in the machine description macro file. 13361 13362This flag does not have a negative form, because it specifies a 13363three-way choice. 13364 13365@item -fcall-used-@var{reg} 13366@opindex fcall-used 13367Treat the register named @var{reg} as an allocable register that is 13368clobbered by function calls. It may be allocated for temporaries or 13369variables that do not live across a call. Functions compiled this way 13370will not save and restore the register @var{reg}. 13371 13372It is an error to used this flag with the frame pointer or stack pointer. 13373Use of this flag for other registers that have fixed pervasive roles in 13374the machine's execution model will produce disastrous results. 13375 13376This flag does not have a negative form, because it specifies a 13377three-way choice. 13378 13379@item -fcall-saved-@var{reg} 13380@opindex fcall-saved 13381Treat the register named @var{reg} as an allocable register saved by 13382functions. It may be allocated even for temporaries or variables that 13383live across a call. Functions compiled this way will save and restore 13384the register @var{reg} if they use it. 13385 13386It is an error to used this flag with the frame pointer or stack pointer. 13387Use of this flag for other registers that have fixed pervasive roles in 13388the machine's execution model will produce disastrous results. 13389 13390A different sort of disaster will result from the use of this flag for 13391a register in which function values may be returned. 13392 13393This flag does not have a negative form, because it specifies a 13394three-way choice. 13395 13396@item -fpack-struct[=@var{n}] 13397@opindex fpack-struct 13398Without a value specified, pack all structure members together without 13399holes. When a value is specified (which must be a small power of two), pack 13400structure members according to this value, representing the maximum 13401alignment (that is, objects with default alignment requirements larger than 13402this will be output potentially unaligned at the next fitting location. 13403 13404@strong{Warning:} the @option{-fpack-struct} switch causes GCC to generate 13405code that is not binary compatible with code generated without that switch. 13406Additionally, it makes the code suboptimal. 13407Use it to conform to a non-default application binary interface. 13408 13409@item -finstrument-functions 13410@opindex finstrument-functions 13411Generate instrumentation calls for entry and exit to functions. Just 13412after function entry and just before function exit, the following 13413profiling functions will be called with the address of the current 13414function and its call site. (On some platforms, 13415@code{__builtin_return_address} does not work beyond the current 13416function, so the call site information may not be available to the 13417profiling functions otherwise.) 13418 13419@smallexample 13420void __cyg_profile_func_enter (void *this_fn, 13421 void *call_site); 13422void __cyg_profile_func_exit (void *this_fn, 13423 void *call_site); 13424@end smallexample 13425 13426The first argument is the address of the start of the current function, 13427which may be looked up exactly in the symbol table. 13428 13429This instrumentation is also done for functions expanded inline in other 13430functions. The profiling calls will indicate where, conceptually, the 13431inline function is entered and exited. This means that addressable 13432versions of such functions must be available. If all your uses of a 13433function are expanded inline, this may mean an additional expansion of 13434code size. If you use @samp{extern inline} in your C code, an 13435addressable version of such functions must be provided. (This is 13436normally the case anyways, but if you get lucky and the optimizer always 13437expands the functions inline, you might have gotten away without 13438providing static copies.) 13439 13440A function may be given the attribute @code{no_instrument_function}, in 13441which case this instrumentation will not be done. This can be used, for 13442example, for the profiling functions listed above, high-priority 13443interrupt routines, and any functions from which the profiling functions 13444cannot safely be called (perhaps signal handlers, if the profiling 13445routines generate output or allocate memory). 13446 13447@item -finstrument-functions-exclude-file-list=@var{file},@var{file},@dots{} 13448@opindex finstrument-functions-exclude-file-list 13449 13450Set the list of functions that are excluded from instrumentation (see 13451the description of @code{-finstrument-functions}). If the file that 13452contains a function definition matches with one of @var{file}, then 13453that function is not instrumented. The match is done on substrings: 13454if the @var{file} parameter is a substring of the file name, it is 13455considered to be a match. 13456 13457For example, 13458@code{-finstrument-functions-exclude-file-list=/bits/stl,include/sys} 13459will exclude any inline function defined in files whose pathnames 13460contain @code{/bits/stl} or @code{include/sys}. 13461 13462If, for some reason, you want to include letter @code{','} in one of 13463@var{sym}, write @code{'\,'}. For example, 13464@code{-finstrument-functions-exclude-file-list='\,\,tmp'} 13465(note the single quote surrounding the option). 13466 13467@item -finstrument-functions-exclude-function-list=@var{sym},@var{sym},@dots{} 13468@opindex finstrument-functions-exclude-function-list 13469 13470This is similar to @code{-finstrument-functions-exclude-file-list}, 13471but this option sets the list of function names to be excluded from 13472instrumentation. The function name to be matched is its user-visible 13473name, such as @code{vector<int> blah(const vector<int> &)}, not the 13474internal mangled name (e.g., @code{_Z4blahRSt6vectorIiSaIiEE}). The 13475match is done on substrings: if the @var{sym} parameter is a substring 13476of the function name, it is considered to be a match. 13477 13478@item -fstack-check 13479@opindex fstack-check 13480Generate code to verify that you do not go beyond the boundary of the 13481stack. You should specify this flag if you are running in an 13482environment with multiple threads, but only rarely need to specify it in 13483a single-threaded environment since stack overflow is automatically 13484detected on nearly all systems if there is only one stack. 13485 13486Note that this switch does not actually cause checking to be done; the 13487operating system must do that. The switch causes generation of code 13488to ensure that the operating system sees the stack being extended. 13489 13490@item -fstack-limit-register=@var{reg} 13491@itemx -fstack-limit-symbol=@var{sym} 13492@itemx -fno-stack-limit 13493@opindex fstack-limit-register 13494@opindex fstack-limit-symbol 13495@opindex fno-stack-limit 13496Generate code to ensure that the stack does not grow beyond a certain value, 13497either the value of a register or the address of a symbol. If the stack 13498would grow beyond the value, a signal is raised. For most targets, 13499the signal is raised before the stack overruns the boundary, so 13500it is possible to catch the signal without taking special precautions. 13501 13502For instance, if the stack starts at absolute address @samp{0x80000000} 13503and grows downwards, you can use the flags 13504@option{-fstack-limit-symbol=__stack_limit} and 13505@option{-Wl,--defsym,__stack_limit=0x7ffe0000} to enforce a stack limit 13506of 128KB@. Note that this may only work with the GNU linker. 13507 13508@cindex aliasing of parameters 13509@cindex parameters, aliased 13510@item -fargument-alias 13511@itemx -fargument-noalias 13512@itemx -fargument-noalias-global 13513@itemx -fargument-noalias-anything 13514@opindex fargument-alias 13515@opindex fargument-noalias 13516@opindex fargument-noalias-global 13517@opindex fargument-noalias-anything 13518Specify the possible relationships among parameters and between 13519parameters and global data. 13520 13521@option{-fargument-alias} specifies that arguments (parameters) may 13522alias each other and may alias global storage.@* 13523@option{-fargument-noalias} specifies that arguments do not alias 13524each other, but may alias global storage.@* 13525@option{-fargument-noalias-global} specifies that arguments do not 13526alias each other and do not alias global storage. 13527@option{-fargument-noalias-anything} specifies that arguments do not 13528alias any other storage. 13529 13530Each language will automatically use whatever option is required by 13531the language standard. You should not need to use these options yourself. 13532 13533@item -fleading-underscore 13534@opindex fleading-underscore 13535This option and its counterpart, @option{-fno-leading-underscore}, forcibly 13536change the way C symbols are represented in the object file. One use 13537is to help link with legacy assembly code. 13538 13539@strong{Warning:} the @option{-fleading-underscore} switch causes GCC to 13540generate code that is not binary compatible with code generated without that 13541switch. Use it to conform to a non-default application binary interface. 13542Not all targets provide complete support for this switch. 13543 13544@item -ftls-model=@var{model} 13545Alter the thread-local storage model to be used (@pxref{Thread-Local}). 13546The @var{model} argument should be one of @code{global-dynamic}, 13547@code{local-dynamic}, @code{initial-exec} or @code{local-exec}. 13548 13549The default without @option{-fpic} is @code{initial-exec}; with 13550@option{-fpic} the default is @code{global-dynamic}. 13551 13552@item -fvisibility=@var{default|internal|hidden|protected} 13553@opindex fvisibility 13554Set the default ELF image symbol visibility to the specified option---all 13555symbols will be marked with this unless overridden within the code. 13556Using this feature can very substantially improve linking and 13557load times of shared object libraries, produce more optimized 13558code, provide near-perfect API export and prevent symbol clashes. 13559It is @strong{strongly} recommended that you use this in any shared objects 13560you distribute. 13561 13562Despite the nomenclature, @code{default} always means public ie; 13563available to be linked against from outside the shared object. 13564@code{protected} and @code{internal} are pretty useless in real-world 13565usage so the only other commonly used option will be @code{hidden}. 13566The default if @option{-fvisibility} isn't specified is 13567@code{default}, i.e., make every 13568symbol public---this causes the same behavior as previous versions of 13569GCC@. 13570 13571A good explanation of the benefits offered by ensuring ELF 13572symbols have the correct visibility is given by ``How To Write 13573Shared Libraries'' by Ulrich Drepper (which can be found at 13574@w{@uref{http://people.redhat.com/~drepper/}})---however a superior 13575solution made possible by this option to marking things hidden when 13576the default is public is to make the default hidden and mark things 13577public. This is the norm with DLL's on Windows and with @option{-fvisibility=hidden} 13578and @code{__attribute__ ((visibility("default")))} instead of 13579@code{__declspec(dllexport)} you get almost identical semantics with 13580identical syntax. This is a great boon to those working with 13581cross-platform projects. 13582 13583For those adding visibility support to existing code, you may find 13584@samp{#pragma GCC visibility} of use. This works by you enclosing 13585the declarations you wish to set visibility for with (for example) 13586@samp{#pragma GCC visibility push(hidden)} and 13587@samp{#pragma GCC visibility pop}. 13588Bear in mind that symbol visibility should be viewed @strong{as 13589part of the API interface contract} and thus all new code should 13590always specify visibility when it is not the default ie; declarations 13591only for use within the local DSO should @strong{always} be marked explicitly 13592as hidden as so to avoid PLT indirection overheads---making this 13593abundantly clear also aids readability and self-documentation of the code. 13594Note that due to ISO C++ specification requirements, operator new and 13595operator delete must always be of default visibility. 13596 13597Be aware that headers from outside your project, in particular system 13598headers and headers from any other library you use, may not be 13599expecting to be compiled with visibility other than the default. You 13600may need to explicitly say @samp{#pragma GCC visibility push(default)} 13601before including any such headers. 13602 13603@samp{extern} declarations are not affected by @samp{-fvisibility}, so 13604a lot of code can be recompiled with @samp{-fvisibility=hidden} with 13605no modifications. However, this means that calls to @samp{extern} 13606functions with no explicit visibility will use the PLT, so it is more 13607effective to use @samp{__attribute ((visibility))} and/or 13608@samp{#pragma GCC visibility} to tell the compiler which @samp{extern} 13609declarations should be treated as hidden. 13610 13611Note that @samp{-fvisibility} does affect C++ vague linkage 13612entities. This means that, for instance, an exception class that will 13613be thrown between DSOs must be explicitly marked with default 13614visibility so that the @samp{type_info} nodes will be unified between 13615the DSOs. 13616 13617An overview of these techniques, their benefits and how to use them 13618is at @w{@uref{http://gcc.gnu.org/wiki/Visibility}}. 13619 13620@end table 13621 13622@c man end 13623 13624@node Environment Variables 13625@section Environment Variables Affecting GCC 13626@cindex environment variables 13627 13628@c man begin ENVIRONMENT 13629This section describes several environment variables that affect how GCC 13630operates. Some of them work by specifying directories or prefixes to use 13631when searching for various kinds of files. Some are used to specify other 13632aspects of the compilation environment. 13633 13634Note that you can also specify places to search using options such as 13635@option{-B}, @option{-I} and @option{-L} (@pxref{Directory Options}). These 13636take precedence over places specified using environment variables, which 13637in turn take precedence over those specified by the configuration of GCC@. 13638@xref{Driver,, Controlling the Compilation Driver @file{gcc}, gccint, 13639GNU Compiler Collection (GCC) Internals}. 13640 13641@table @env 13642@item LANG 13643@itemx LC_CTYPE 13644@c @itemx LC_COLLATE 13645@itemx LC_MESSAGES 13646@c @itemx LC_MONETARY 13647@c @itemx LC_NUMERIC 13648@c @itemx LC_TIME 13649@itemx LC_ALL 13650@findex LANG 13651@findex LC_CTYPE 13652@c @findex LC_COLLATE 13653@findex LC_MESSAGES 13654@c @findex LC_MONETARY 13655@c @findex LC_NUMERIC 13656@c @findex LC_TIME 13657@findex LC_ALL 13658@cindex locale 13659These environment variables control the way that GCC uses 13660localization information that allow GCC to work with different 13661national conventions. GCC inspects the locale categories 13662@env{LC_CTYPE} and @env{LC_MESSAGES} if it has been configured to do 13663so. These locale categories can be set to any value supported by your 13664installation. A typical value is @samp{en_GB.UTF-8} for English in the United 13665Kingdom encoded in UTF-8. 13666 13667The @env{LC_CTYPE} environment variable specifies character 13668classification. GCC uses it to determine the character boundaries in 13669a string; this is needed for some multibyte encodings that contain quote 13670and escape characters that would otherwise be interpreted as a string 13671end or escape. 13672 13673The @env{LC_MESSAGES} environment variable specifies the language to 13674use in diagnostic messages. 13675 13676If the @env{LC_ALL} environment variable is set, it overrides the value 13677of @env{LC_CTYPE} and @env{LC_MESSAGES}; otherwise, @env{LC_CTYPE} 13678and @env{LC_MESSAGES} default to the value of the @env{LANG} 13679environment variable. If none of these variables are set, GCC 13680defaults to traditional C English behavior. 13681 13682@item TMPDIR 13683@findex TMPDIR 13684If @env{TMPDIR} is set, it specifies the directory to use for temporary 13685files. GCC uses temporary files to hold the output of one stage of 13686compilation which is to be used as input to the next stage: for example, 13687the output of the preprocessor, which is the input to the compiler 13688proper. 13689 13690@item GCC_EXEC_PREFIX 13691@findex GCC_EXEC_PREFIX 13692If @env{GCC_EXEC_PREFIX} is set, it specifies a prefix to use in the 13693names of the subprograms executed by the compiler. No slash is added 13694when this prefix is combined with the name of a subprogram, but you can 13695specify a prefix that ends with a slash if you wish. 13696 13697If @env{GCC_EXEC_PREFIX} is not set, GCC will attempt to figure out 13698an appropriate prefix to use based on the pathname it was invoked with. 13699 13700If GCC cannot find the subprogram using the specified prefix, it 13701tries looking in the usual places for the subprogram. 13702 13703The default value of @env{GCC_EXEC_PREFIX} is 13704@file{@var{prefix}/lib/gcc/} where @var{prefix} is the value 13705of @code{prefix} when you ran the @file{configure} script. 13706 13707Other prefixes specified with @option{-B} take precedence over this prefix. 13708 13709This prefix is also used for finding files such as @file{crt0.o} that are 13710used for linking. 13711 13712In addition, the prefix is used in an unusual way in finding the 13713directories to search for header files. For each of the standard 13714directories whose name normally begins with @samp{/usr/local/lib/gcc} 13715(more precisely, with the value of @env{GCC_INCLUDE_DIR}), GCC tries 13716replacing that beginning with the specified prefix to produce an 13717alternate directory name. Thus, with @option{-Bfoo/}, GCC will search 13718@file{foo/bar} where it would normally search @file{/usr/local/lib/bar}. 13719These alternate directories are searched first; the standard directories 13720come next. 13721 13722@item COMPILER_PATH 13723@findex COMPILER_PATH 13724The value of @env{COMPILER_PATH} is a colon-separated list of 13725directories, much like @env{PATH}. GCC tries the directories thus 13726specified when searching for subprograms, if it can't find the 13727subprograms using @env{GCC_EXEC_PREFIX}. 13728 13729@item LIBRARY_PATH 13730@findex LIBRARY_PATH 13731The value of @env{LIBRARY_PATH} is a colon-separated list of 13732directories, much like @env{PATH}. When configured as a native compiler, 13733GCC tries the directories thus specified when searching for special 13734linker files, if it can't find them using @env{GCC_EXEC_PREFIX}. Linking 13735using GCC also uses these directories when searching for ordinary 13736libraries for the @option{-l} option (but directories specified with 13737@option{-L} come first). 13738 13739@item LANG 13740@findex LANG 13741@cindex locale definition 13742This variable is used to pass locale information to the compiler. One way in 13743which this information is used is to determine the character set to be used 13744when character literals, string literals and comments are parsed in C and C++. 13745When the compiler is configured to allow multibyte characters, 13746the following values for @env{LANG} are recognized: 13747 13748@table @samp 13749@item C-JIS 13750Recognize JIS characters. 13751@item C-SJIS 13752Recognize SJIS characters. 13753@item C-EUCJP 13754Recognize EUCJP characters. 13755@end table 13756 13757If @env{LANG} is not defined, or if it has some other value, then the 13758compiler will use mblen and mbtowc as defined by the default locale to 13759recognize and translate multibyte characters. 13760@end table 13761 13762@noindent 13763Some additional environments variables affect the behavior of the 13764preprocessor. 13765 13766@include cppenv.texi 13767 13768@c man end 13769 13770@node Precompiled Headers 13771@section Using Precompiled Headers 13772@cindex precompiled headers 13773@cindex speed of compilation 13774 13775Often large projects have many header files that are included in every 13776source file. The time the compiler takes to process these header files 13777over and over again can account for nearly all of the time required to 13778build the project. To make builds faster, GCC allows users to 13779`precompile' a header file; then, if builds can use the precompiled 13780header file they will be much faster. 13781 13782To create a precompiled header file, simply compile it as you would any 13783other file, if necessary using the @option{-x} option to make the driver 13784treat it as a C or C++ header file. You will probably want to use a 13785tool like @command{make} to keep the precompiled header up-to-date when 13786the headers it contains change. 13787 13788A precompiled header file will be searched for when @code{#include} is 13789seen in the compilation. As it searches for the included file 13790(@pxref{Search Path,,Search Path,cpp,The C Preprocessor}) the 13791compiler looks for a precompiled header in each directory just before it 13792looks for the include file in that directory. The name searched for is 13793the name specified in the @code{#include} with @samp{.gch} appended. If 13794the precompiled header file can't be used, it is ignored. 13795 13796For instance, if you have @code{#include "all.h"}, and you have 13797@file{all.h.gch} in the same directory as @file{all.h}, then the 13798precompiled header file will be used if possible, and the original 13799header will be used otherwise. 13800 13801Alternatively, you might decide to put the precompiled header file in a 13802directory and use @option{-I} to ensure that directory is searched 13803before (or instead of) the directory containing the original header. 13804Then, if you want to check that the precompiled header file is always 13805used, you can put a file of the same name as the original header in this 13806directory containing an @code{#error} command. 13807 13808This also works with @option{-include}. So yet another way to use 13809precompiled headers, good for projects not designed with precompiled 13810header files in mind, is to simply take most of the header files used by 13811a project, include them from another header file, precompile that header 13812file, and @option{-include} the precompiled header. If the header files 13813have guards against multiple inclusion, they will be skipped because 13814they've already been included (in the precompiled header). 13815 13816If you need to precompile the same header file for different 13817languages, targets, or compiler options, you can instead make a 13818@emph{directory} named like @file{all.h.gch}, and put each precompiled 13819header in the directory, perhaps using @option{-o}. It doesn't matter 13820what you call the files in the directory, every precompiled header in 13821the directory will be considered. The first precompiled header 13822encountered in the directory that is valid for this compilation will 13823be used; they're searched in no particular order. 13824 13825There are many other possibilities, limited only by your imagination, 13826good sense, and the constraints of your build system. 13827 13828A precompiled header file can be used only when these conditions apply: 13829 13830@itemize 13831@item 13832Only one precompiled header can be used in a particular compilation. 13833 13834@item 13835A precompiled header can't be used once the first C token is seen. You 13836can have preprocessor directives before a precompiled header; you can 13837even include a precompiled header from inside another header, so long as 13838there are no C tokens before the @code{#include}. 13839 13840@item 13841The precompiled header file must be produced for the same language as 13842the current compilation. You can't use a C precompiled header for a C++ 13843compilation. 13844 13845@item 13846The precompiled header file must have been produced by the same compiler 13847binary as the current compilation is using. 13848 13849@item 13850Any macros defined before the precompiled header is included must 13851either be defined in the same way as when the precompiled header was 13852generated, or must not affect the precompiled header, which usually 13853means that they don't appear in the precompiled header at all. 13854 13855The @option{-D} option is one way to define a macro before a 13856precompiled header is included; using a @code{#define} can also do it. 13857There are also some options that define macros implicitly, like 13858@option{-O} and @option{-Wdeprecated}; the same rule applies to macros 13859defined this way. 13860 13861@item If debugging information is output when using the precompiled 13862header, using @option{-g} or similar, the same kind of debugging information 13863must have been output when building the precompiled header. However, 13864a precompiled header built using @option{-g} can be used in a compilation 13865when no debugging information is being output. 13866 13867@item The same @option{-m} options must generally be used when building 13868and using the precompiled header. @xref{Submodel Options}, 13869for any cases where this rule is relaxed. 13870 13871@item Each of the following options must be the same when building and using 13872the precompiled header: 13873 13874@gccoptlist{-fexceptions -funit-at-a-time} 13875 13876@item 13877Some other command-line options starting with @option{-f}, 13878@option{-p}, or @option{-O} must be defined in the same way as when 13879the precompiled header was generated. At present, it's not clear 13880which options are safe to change and which are not; the safest choice 13881is to use exactly the same options when generating and using the 13882precompiled header. The following are known to be safe: 13883 13884@gccoptlist{-fmessage-length= -fpreprocessed 13885-fsched-interblock -fsched-spec -fsched-spec-load -fsched-spec-load-dangerous 13886-fsched-verbose=<number> -fschedule-insns -fvisibility= 13887-pedantic-errors} 13888 13889@end itemize 13890 13891For all of these except the last, the compiler will automatically 13892ignore the precompiled header if the conditions aren't met. If you 13893find an option combination that doesn't work and doesn't cause the 13894precompiled header to be ignored, please consider filing a bug report, 13895see @ref{Bugs}. 13896 13897If you do use differing options when generating and using the 13898precompiled header, the actual behavior will be a mixture of the 13899behavior for the options. For instance, if you use @option{-g} to 13900generate the precompiled header but not when using it, you may or may 13901not get debugging information for routines in the precompiled header. 13902 13903@node Running Protoize 13904@section Running Protoize 13905 13906The program @code{protoize} is an optional part of GCC@. You can use 13907it to add prototypes to a program, thus converting the program to ISO 13908C in one respect. The companion program @code{unprotoize} does the 13909reverse: it removes argument types from any prototypes that are found. 13910 13911When you run these programs, you must specify a set of source files as 13912command line arguments. The conversion programs start out by compiling 13913these files to see what functions they define. The information gathered 13914about a file @var{foo} is saved in a file named @file{@var{foo}.X}. 13915 13916After scanning comes actual conversion. The specified files are all 13917eligible to be converted; any files they include (whether sources or 13918just headers) are eligible as well. 13919 13920But not all the eligible files are converted. By default, 13921@code{protoize} and @code{unprotoize} convert only source and header 13922files in the current directory. You can specify additional directories 13923whose files should be converted with the @option{-d @var{directory}} 13924option. You can also specify particular files to exclude with the 13925@option{-x @var{file}} option. A file is converted if it is eligible, its 13926directory name matches one of the specified directory names, and its 13927name within the directory has not been excluded. 13928 13929Basic conversion with @code{protoize} consists of rewriting most 13930function definitions and function declarations to specify the types of 13931the arguments. The only ones not rewritten are those for varargs 13932functions. 13933 13934@code{protoize} optionally inserts prototype declarations at the 13935beginning of the source file, to make them available for any calls that 13936precede the function's definition. Or it can insert prototype 13937declarations with block scope in the blocks where undeclared functions 13938are called. 13939 13940Basic conversion with @code{unprotoize} consists of rewriting most 13941function declarations to remove any argument types, and rewriting 13942function definitions to the old-style pre-ISO form. 13943 13944Both conversion programs print a warning for any function declaration or 13945definition that they can't convert. You can suppress these warnings 13946with @option{-q}. 13947 13948The output from @code{protoize} or @code{unprotoize} replaces the 13949original source file. The original file is renamed to a name ending 13950with @samp{.save} (for DOS, the saved filename ends in @samp{.sav} 13951without the original @samp{.c} suffix). If the @samp{.save} (@samp{.sav} 13952for DOS) file already exists, then the source file is simply discarded. 13953 13954@code{protoize} and @code{unprotoize} both depend on GCC itself to 13955scan the program and collect information about the functions it uses. 13956So neither of these programs will work until GCC is installed. 13957 13958Here is a table of the options you can use with @code{protoize} and 13959@code{unprotoize}. Each option works with both programs unless 13960otherwise stated. 13961 13962@table @code 13963@item -B @var{directory} 13964Look for the file @file{SYSCALLS.c.X} in @var{directory}, instead of the 13965usual directory (normally @file{/usr/local/lib}). This file contains 13966prototype information about standard system functions. This option 13967applies only to @code{protoize}. 13968 13969@item -c @var{compilation-options} 13970Use @var{compilation-options} as the options when running @command{gcc} to 13971produce the @samp{.X} files. The special option @option{-aux-info} is 13972always passed in addition, to tell @command{gcc} to write a @samp{.X} file. 13973 13974Note that the compilation options must be given as a single argument to 13975@code{protoize} or @code{unprotoize}. If you want to specify several 13976@command{gcc} options, you must quote the entire set of compilation options 13977to make them a single word in the shell. 13978 13979There are certain @command{gcc} arguments that you cannot use, because they 13980would produce the wrong kind of output. These include @option{-g}, 13981@option{-O}, @option{-c}, @option{-S}, and @option{-o} If you include these in 13982the @var{compilation-options}, they are ignored. 13983 13984@item -C 13985Rename files to end in @samp{.C} (@samp{.cc} for DOS-based file 13986systems) instead of @samp{.c}. This is convenient if you are converting 13987a C program to C++. This option applies only to @code{protoize}. 13988 13989@item -g 13990Add explicit global declarations. This means inserting explicit 13991declarations at the beginning of each source file for each function 13992that is called in the file and was not declared. These declarations 13993precede the first function definition that contains a call to an 13994undeclared function. This option applies only to @code{protoize}. 13995 13996@item -i @var{string} 13997Indent old-style parameter declarations with the string @var{string}. 13998This option applies only to @code{protoize}. 13999 14000@code{unprotoize} converts prototyped function definitions to old-style 14001function definitions, where the arguments are declared between the 14002argument list and the initial @samp{@{}. By default, @code{unprotoize} 14003uses five spaces as the indentation. If you want to indent with just 14004one space instead, use @option{-i " "}. 14005 14006@item -k 14007Keep the @samp{.X} files. Normally, they are deleted after conversion 14008is finished. 14009 14010@item -l 14011Add explicit local declarations. @code{protoize} with @option{-l} inserts 14012a prototype declaration for each function in each block which calls the 14013function without any declaration. This option applies only to 14014@code{protoize}. 14015 14016@item -n 14017Make no real changes. This mode just prints information about the conversions 14018that would have been done without @option{-n}. 14019 14020@item -N 14021Make no @samp{.save} files. The original files are simply deleted. 14022Use this option with caution. 14023 14024@item -p @var{program} 14025Use the program @var{program} as the compiler. Normally, the name 14026@file{gcc} is used. 14027 14028@item -q 14029Work quietly. Most warnings are suppressed. 14030 14031@item -v 14032Print the version number, just like @option{-v} for @command{gcc}. 14033@end table 14034 14035If you need special compiler options to compile one of your program's 14036source files, then you should generate that file's @samp{.X} file 14037specially, by running @command{gcc} on that source file with the 14038appropriate options and the option @option{-aux-info}. Then run 14039@code{protoize} on the entire set of files. @code{protoize} will use 14040the existing @samp{.X} file because it is newer than the source file. 14041For example: 14042 14043@smallexample 14044gcc -Dfoo=bar file1.c -aux-info file1.X 14045protoize *.c 14046@end smallexample 14047 14048@noindent 14049You need to include the special files along with the rest in the 14050@code{protoize} command, even though their @samp{.X} files already 14051exist, because otherwise they won't get converted. 14052 14053@xref{Protoize Caveats}, for more information on how to use 14054@code{protoize} successfully. 14055 14056