invoke.texi revision 260568
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 -maes @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@item -maes 9543@itemx -mno-aes 9544@opindex mmmx 9545@opindex mno-mmx 9546@opindex msse 9547@opindex mno-sse 9548@opindex m3dnow 9549@opindex mno-3dnow 9550These switches enable or disable the use of instructions in the MMX, 9551SSE, SSE2, SSE3, SSSE3, SSE4A, ABM, AES or 3DNow! extended 9552instruction sets. These extensions are also available as built-in 9553functions: see @ref{X86 Built-in Functions}, for details of the functions 9554enabled and disabled by these switches. 9555 9556To have SSE/SSE2 instructions generated automatically from floating-point 9557code (as opposed to 387 instructions), see @option{-mfpmath=sse}. 9558 9559These options will enable GCC to use these extended instructions in 9560generated code, even without @option{-mfpmath=sse}. Applications which 9561perform runtime CPU detection must compile separate files for each 9562supported architecture, using the appropriate flags. In particular, 9563the file containing the CPU detection code should be compiled without 9564these options. 9565 9566@item -mpush-args 9567@itemx -mno-push-args 9568@opindex mpush-args 9569@opindex mno-push-args 9570Use PUSH operations to store outgoing parameters. This method is shorter 9571and usually equally fast as method using SUB/MOV operations and is enabled 9572by default. In some cases disabling it may improve performance because of 9573improved scheduling and reduced dependencies. 9574 9575@item -maccumulate-outgoing-args 9576@opindex maccumulate-outgoing-args 9577If enabled, the maximum amount of space required for outgoing arguments will be 9578computed in the function prologue. This is faster on most modern CPUs 9579because of reduced dependencies, improved scheduling and reduced stack usage 9580when preferred stack boundary is not equal to 2. The drawback is a notable 9581increase in code size. This switch implies @option{-mno-push-args}. 9582 9583@item -mthreads 9584@opindex mthreads 9585Support thread-safe exception handling on @samp{Mingw32}. Code that relies 9586on thread-safe exception handling must compile and link all code with the 9587@option{-mthreads} option. When compiling, @option{-mthreads} defines 9588@option{-D_MT}; when linking, it links in a special thread helper library 9589@option{-lmingwthrd} which cleans up per thread exception handling data. 9590 9591@item -mno-align-stringops 9592@opindex mno-align-stringops 9593Do not align destination of inlined string operations. This switch reduces 9594code size and improves performance in case the destination is already aligned, 9595but GCC doesn't know about it. 9596 9597@item -minline-all-stringops 9598@opindex minline-all-stringops 9599By default GCC inlines string operations only when destination is known to be 9600aligned at least to 4 byte boundary. This enables more inlining, increase code 9601size, but may improve performance of code that depends on fast memcpy, strlen 9602and memset for short lengths. 9603 9604@item -momit-leaf-frame-pointer 9605@opindex momit-leaf-frame-pointer 9606Don't keep the frame pointer in a register for leaf functions. This 9607avoids the instructions to save, set up and restore frame pointers and 9608makes an extra register available in leaf functions. The option 9609@option{-fomit-frame-pointer} removes the frame pointer for all functions 9610which might make debugging harder. 9611 9612@item -mtls-direct-seg-refs 9613@itemx -mno-tls-direct-seg-refs 9614@opindex mtls-direct-seg-refs 9615Controls whether TLS variables may be accessed with offsets from the 9616TLS segment register (@code{%gs} for 32-bit, @code{%fs} for 64-bit), 9617or whether the thread base pointer must be added. Whether or not this 9618is legal depends on the operating system, and whether it maps the 9619segment to cover the entire TLS area. 9620 9621For systems that use GNU libc, the default is on. 9622@end table 9623 9624These @samp{-m} switches are supported in addition to the above 9625on AMD x86-64 processors in 64-bit environments. 9626 9627@table @gcctabopt 9628@item -m32 9629@itemx -m64 9630@opindex m32 9631@opindex m64 9632Generate code for a 32-bit or 64-bit environment. 9633The 32-bit environment sets int, long and pointer to 32 bits and 9634generates code that runs on any i386 system. 9635The 64-bit environment sets int to 32 bits and long and pointer 9636to 64 bits and generates code for AMD's x86-64 architecture. For 9637darwin only the -m64 option turns off the @option{-fno-pic} and 9638@option{-mdynamic-no-pic} options. 9639 9640@item -mno-red-zone 9641@opindex no-red-zone 9642Do not use a so called red zone for x86-64 code. The red zone is mandated 9643by the x86-64 ABI, it is a 128-byte area beyond the location of the 9644stack pointer that will not be modified by signal or interrupt handlers 9645and therefore can be used for temporary data without adjusting the stack 9646pointer. The flag @option{-mno-red-zone} disables this red zone. 9647 9648@item -mcmodel=small 9649@opindex mcmodel=small 9650Generate code for the small code model: the program and its symbols must 9651be linked in the lower 2 GB of the address space. Pointers are 64 bits. 9652Programs can be statically or dynamically linked. This is the default 9653code model. 9654 9655@item -mcmodel=kernel 9656@opindex mcmodel=kernel 9657Generate code for the kernel code model. The kernel runs in the 9658negative 2 GB of the address space. 9659This model has to be used for Linux kernel code. 9660 9661@item -mcmodel=medium 9662@opindex mcmodel=medium 9663Generate code for the medium model: The program is linked in the lower 2 9664GB of the address space but symbols can be located anywhere in the 9665address space. Programs can be statically or dynamically linked, but 9666building of shared libraries are not supported with the medium model. 9667 9668@item -mcmodel=large 9669@opindex mcmodel=large 9670Generate code for the large model: This model makes no assumptions 9671about addresses and sizes of sections. Currently GCC does not implement 9672this model. 9673@end table 9674 9675@node IA-64 Options 9676@subsection IA-64 Options 9677@cindex IA-64 Options 9678 9679These are the @samp{-m} options defined for the Intel IA-64 architecture. 9680 9681@table @gcctabopt 9682@item -mbig-endian 9683@opindex mbig-endian 9684Generate code for a big endian target. This is the default for HP-UX@. 9685 9686@item -mlittle-endian 9687@opindex mlittle-endian 9688Generate code for a little endian target. This is the default for AIX5 9689and GNU/Linux. 9690 9691@item -mgnu-as 9692@itemx -mno-gnu-as 9693@opindex mgnu-as 9694@opindex mno-gnu-as 9695Generate (or don't) code for the GNU assembler. This is the default. 9696@c Also, this is the default if the configure option @option{--with-gnu-as} 9697@c is used. 9698 9699@item -mgnu-ld 9700@itemx -mno-gnu-ld 9701@opindex mgnu-ld 9702@opindex mno-gnu-ld 9703Generate (or don't) code for the GNU linker. This is the default. 9704@c Also, this is the default if the configure option @option{--with-gnu-ld} 9705@c is used. 9706 9707@item -mno-pic 9708@opindex mno-pic 9709Generate code that does not use a global pointer register. The result 9710is not position independent code, and violates the IA-64 ABI@. 9711 9712@item -mvolatile-asm-stop 9713@itemx -mno-volatile-asm-stop 9714@opindex mvolatile-asm-stop 9715@opindex mno-volatile-asm-stop 9716Generate (or don't) a stop bit immediately before and after volatile asm 9717statements. 9718 9719@item -mregister-names 9720@itemx -mno-register-names 9721@opindex mregister-names 9722@opindex mno-register-names 9723Generate (or don't) @samp{in}, @samp{loc}, and @samp{out} register names for 9724the stacked registers. This may make assembler output more readable. 9725 9726@item -mno-sdata 9727@itemx -msdata 9728@opindex mno-sdata 9729@opindex msdata 9730Disable (or enable) optimizations that use the small data section. This may 9731be useful for working around optimizer bugs. 9732 9733@item -mconstant-gp 9734@opindex mconstant-gp 9735Generate code that uses a single constant global pointer value. This is 9736useful when compiling kernel code. 9737 9738@item -mauto-pic 9739@opindex mauto-pic 9740Generate code that is self-relocatable. This implies @option{-mconstant-gp}. 9741This is useful when compiling firmware code. 9742 9743@item -minline-float-divide-min-latency 9744@opindex minline-float-divide-min-latency 9745Generate code for inline divides of floating point values 9746using the minimum latency algorithm. 9747 9748@item -minline-float-divide-max-throughput 9749@opindex minline-float-divide-max-throughput 9750Generate code for inline divides of floating point values 9751using the maximum throughput algorithm. 9752 9753@item -minline-int-divide-min-latency 9754@opindex minline-int-divide-min-latency 9755Generate code for inline divides of integer values 9756using the minimum latency algorithm. 9757 9758@item -minline-int-divide-max-throughput 9759@opindex minline-int-divide-max-throughput 9760Generate code for inline divides of integer values 9761using the maximum throughput algorithm. 9762 9763@item -minline-sqrt-min-latency 9764@opindex minline-sqrt-min-latency 9765Generate code for inline square roots 9766using the minimum latency algorithm. 9767 9768@item -minline-sqrt-max-throughput 9769@opindex minline-sqrt-max-throughput 9770Generate code for inline square roots 9771using the maximum throughput algorithm. 9772 9773@item -mno-dwarf2-asm 9774@itemx -mdwarf2-asm 9775@opindex mno-dwarf2-asm 9776@opindex mdwarf2-asm 9777Don't (or do) generate assembler code for the DWARF2 line number debugging 9778info. This may be useful when not using the GNU assembler. 9779 9780@item -mearly-stop-bits 9781@itemx -mno-early-stop-bits 9782@opindex mearly-stop-bits 9783@opindex mno-early-stop-bits 9784Allow stop bits to be placed earlier than immediately preceding the 9785instruction that triggered the stop bit. This can improve instruction 9786scheduling, but does not always do so. 9787 9788@item -mfixed-range=@var{register-range} 9789@opindex mfixed-range 9790Generate code treating the given register range as fixed registers. 9791A fixed register is one that the register allocator can not use. This is 9792useful when compiling kernel code. A register range is specified as 9793two registers separated by a dash. Multiple register ranges can be 9794specified separated by a comma. 9795 9796@item -mtls-size=@var{tls-size} 9797@opindex mtls-size 9798Specify bit size of immediate TLS offsets. Valid values are 14, 22, and 979964. 9800 9801@item -mtune=@var{cpu-type} 9802@opindex mtune 9803Tune the instruction scheduling for a particular CPU, Valid values are 9804itanium, itanium1, merced, itanium2, and mckinley. 9805 9806@item -mt 9807@itemx -pthread 9808@opindex mt 9809@opindex pthread 9810Add support for multithreading using the POSIX threads library. This 9811option sets flags for both the preprocessor and linker. It does 9812not affect the thread safety of object code produced by the compiler or 9813that of libraries supplied with it. These are HP-UX specific flags. 9814 9815@item -milp32 9816@itemx -mlp64 9817@opindex milp32 9818@opindex mlp64 9819Generate code for a 32-bit or 64-bit environment. 9820The 32-bit environment sets int, long and pointer to 32 bits. 9821The 64-bit environment sets int to 32 bits and long and pointer 9822to 64 bits. These are HP-UX specific flags. 9823 9824@item -mno-sched-br-data-spec 9825@itemx -msched-br-data-spec 9826@opindex mno-sched-br-data-spec 9827@opindex msched-br-data-spec 9828(Dis/En)able data speculative scheduling before reload. 9829This will result in generation of the ld.a instructions and 9830the corresponding check instructions (ld.c / chk.a). 9831The default is 'disable'. 9832 9833@item -msched-ar-data-spec 9834@itemx -mno-sched-ar-data-spec 9835@opindex msched-ar-data-spec 9836@opindex mno-sched-ar-data-spec 9837(En/Dis)able data speculative scheduling after reload. 9838This will result in generation of the ld.a instructions and 9839the corresponding check instructions (ld.c / chk.a). 9840The default is 'enable'. 9841 9842@item -mno-sched-control-spec 9843@itemx -msched-control-spec 9844@opindex mno-sched-control-spec 9845@opindex msched-control-spec 9846(Dis/En)able control speculative scheduling. This feature is 9847available only during region scheduling (i.e. before reload). 9848This will result in generation of the ld.s instructions and 9849the corresponding check instructions chk.s . 9850The default is 'disable'. 9851 9852@item -msched-br-in-data-spec 9853@itemx -mno-sched-br-in-data-spec 9854@opindex msched-br-in-data-spec 9855@opindex mno-sched-br-in-data-spec 9856(En/Dis)able speculative scheduling of the instructions that 9857are dependent on the data speculative loads before reload. 9858This is effective only with @option{-msched-br-data-spec} enabled. 9859The default is 'enable'. 9860 9861@item -msched-ar-in-data-spec 9862@itemx -mno-sched-ar-in-data-spec 9863@opindex msched-ar-in-data-spec 9864@opindex mno-sched-ar-in-data-spec 9865(En/Dis)able speculative scheduling of the instructions that 9866are dependent on the data speculative loads after reload. 9867This is effective only with @option{-msched-ar-data-spec} enabled. 9868The default is 'enable'. 9869 9870@item -msched-in-control-spec 9871@itemx -mno-sched-in-control-spec 9872@opindex msched-in-control-spec 9873@opindex mno-sched-in-control-spec 9874(En/Dis)able speculative scheduling of the instructions that 9875are dependent on the control speculative loads. 9876This is effective only with @option{-msched-control-spec} enabled. 9877The default is 'enable'. 9878 9879@item -msched-ldc 9880@itemx -mno-sched-ldc 9881@opindex msched-ldc 9882@opindex mno-sched-ldc 9883(En/Dis)able use of simple data speculation checks ld.c . 9884If disabled, only chk.a instructions will be emitted to check 9885data speculative loads. 9886The default is 'enable'. 9887 9888@item -mno-sched-control-ldc 9889@itemx -msched-control-ldc 9890@opindex mno-sched-control-ldc 9891@opindex msched-control-ldc 9892(Dis/En)able use of ld.c instructions to check control speculative loads. 9893If enabled, in case of control speculative load with no speculatively 9894scheduled dependent instructions this load will be emitted as ld.sa and 9895ld.c will be used to check it. 9896The default is 'disable'. 9897 9898@item -mno-sched-spec-verbose 9899@itemx -msched-spec-verbose 9900@opindex mno-sched-spec-verbose 9901@opindex msched-spec-verbose 9902(Dis/En)able printing of the information about speculative motions. 9903 9904@item -mno-sched-prefer-non-data-spec-insns 9905@itemx -msched-prefer-non-data-spec-insns 9906@opindex mno-sched-prefer-non-data-spec-insns 9907@opindex msched-prefer-non-data-spec-insns 9908If enabled, data speculative instructions will be chosen for schedule 9909only if there are no other choices at the moment. This will make 9910the use of the data speculation much more conservative. 9911The default is 'disable'. 9912 9913@item -mno-sched-prefer-non-control-spec-insns 9914@itemx -msched-prefer-non-control-spec-insns 9915@opindex mno-sched-prefer-non-control-spec-insns 9916@opindex msched-prefer-non-control-spec-insns 9917If enabled, control speculative instructions will be chosen for schedule 9918only if there are no other choices at the moment. This will make 9919the use of the control speculation much more conservative. 9920The default is 'disable'. 9921 9922@item -mno-sched-count-spec-in-critical-path 9923@itemx -msched-count-spec-in-critical-path 9924@opindex mno-sched-count-spec-in-critical-path 9925@opindex msched-count-spec-in-critical-path 9926If enabled, speculative dependencies will be considered during 9927computation of the instructions priorities. This will make the use of the 9928speculation a bit more conservative. 9929The default is 'disable'. 9930 9931@end table 9932 9933@node M32C Options 9934@subsection M32C Options 9935@cindex M32C options 9936 9937@table @gcctabopt 9938@item -mcpu=@var{name} 9939@opindex mcpu= 9940Select the CPU for which code is generated. @var{name} may be one of 9941@samp{r8c} for the R8C/Tiny series, @samp{m16c} for the M16C (up to 9942/60) series, @samp{m32cm} for the M16C/80 series, or @samp{m32c} for 9943the M32C/80 series. 9944 9945@item -msim 9946@opindex msim 9947Specifies that the program will be run on the simulator. This causes 9948an alternate runtime library to be linked in which supports, for 9949example, file I/O. You must not use this option when generating 9950programs that will run on real hardware; you must provide your own 9951runtime library for whatever I/O functions are needed. 9952 9953@item -memregs=@var{number} 9954@opindex memregs= 9955Specifies the number of memory-based pseudo-registers GCC will use 9956during code generation. These pseudo-registers will be used like real 9957registers, so there is a tradeoff between GCC's ability to fit the 9958code into available registers, and the performance penalty of using 9959memory instead of registers. Note that all modules in a program must 9960be compiled with the same value for this option. Because of that, you 9961must not use this option with the default runtime libraries gcc 9962builds. 9963 9964@end table 9965 9966@node M32R/D Options 9967@subsection M32R/D Options 9968@cindex M32R/D options 9969 9970These @option{-m} options are defined for Renesas M32R/D architectures: 9971 9972@table @gcctabopt 9973@item -m32r2 9974@opindex m32r2 9975Generate code for the M32R/2@. 9976 9977@item -m32rx 9978@opindex m32rx 9979Generate code for the M32R/X@. 9980 9981@item -m32r 9982@opindex m32r 9983Generate code for the M32R@. This is the default. 9984 9985@item -mmodel=small 9986@opindex mmodel=small 9987Assume all objects live in the lower 16MB of memory (so that their addresses 9988can be loaded with the @code{ld24} instruction), and assume all subroutines 9989are reachable with the @code{bl} instruction. 9990This is the default. 9991 9992The addressability of a particular object can be set with the 9993@code{model} attribute. 9994 9995@item -mmodel=medium 9996@opindex mmodel=medium 9997Assume objects may be anywhere in the 32-bit address space (the compiler 9998will generate @code{seth/add3} instructions to load their addresses), and 9999assume all subroutines are reachable with the @code{bl} instruction. 10000 10001@item -mmodel=large 10002@opindex mmodel=large 10003Assume objects may be anywhere in the 32-bit address space (the compiler 10004will generate @code{seth/add3} instructions to load their addresses), and 10005assume subroutines may not be reachable with the @code{bl} instruction 10006(the compiler will generate the much slower @code{seth/add3/jl} 10007instruction sequence). 10008 10009@item -msdata=none 10010@opindex msdata=none 10011Disable use of the small data area. Variables will be put into 10012one of @samp{.data}, @samp{bss}, or @samp{.rodata} (unless the 10013@code{section} attribute has been specified). 10014This is the default. 10015 10016The small data area consists of sections @samp{.sdata} and @samp{.sbss}. 10017Objects may be explicitly put in the small data area with the 10018@code{section} attribute using one of these sections. 10019 10020@item -msdata=sdata 10021@opindex msdata=sdata 10022Put small global and static data in the small data area, but do not 10023generate special code to reference them. 10024 10025@item -msdata=use 10026@opindex msdata=use 10027Put small global and static data in the small data area, and generate 10028special instructions to reference them. 10029 10030@item -G @var{num} 10031@opindex G 10032@cindex smaller data references 10033Put global and static objects less than or equal to @var{num} bytes 10034into the small data or bss sections instead of the normal data or bss 10035sections. The default value of @var{num} is 8. 10036The @option{-msdata} option must be set to one of @samp{sdata} or @samp{use} 10037for this option to have any effect. 10038 10039All modules should be compiled with the same @option{-G @var{num}} value. 10040Compiling with different values of @var{num} may or may not work; if it 10041doesn't the linker will give an error message---incorrect code will not be 10042generated. 10043 10044@item -mdebug 10045@opindex mdebug 10046Makes the M32R specific code in the compiler display some statistics 10047that might help in debugging programs. 10048 10049@item -malign-loops 10050@opindex malign-loops 10051Align all loops to a 32-byte boundary. 10052 10053@item -mno-align-loops 10054@opindex mno-align-loops 10055Do not enforce a 32-byte alignment for loops. This is the default. 10056 10057@item -missue-rate=@var{number} 10058@opindex missue-rate=@var{number} 10059Issue @var{number} instructions per cycle. @var{number} can only be 1 10060or 2. 10061 10062@item -mbranch-cost=@var{number} 10063@opindex mbranch-cost=@var{number} 10064@var{number} can only be 1 or 2. If it is 1 then branches will be 10065preferred over conditional code, if it is 2, then the opposite will 10066apply. 10067 10068@item -mflush-trap=@var{number} 10069@opindex mflush-trap=@var{number} 10070Specifies the trap number to use to flush the cache. The default is 1007112. Valid numbers are between 0 and 15 inclusive. 10072 10073@item -mno-flush-trap 10074@opindex mno-flush-trap 10075Specifies that the cache cannot be flushed by using a trap. 10076 10077@item -mflush-func=@var{name} 10078@opindex mflush-func=@var{name} 10079Specifies the name of the operating system function to call to flush 10080the cache. The default is @emph{_flush_cache}, but a function call 10081will only be used if a trap is not available. 10082 10083@item -mno-flush-func 10084@opindex mno-flush-func 10085Indicates that there is no OS function for flushing the cache. 10086 10087@end table 10088 10089@node M680x0 Options 10090@subsection M680x0 Options 10091@cindex M680x0 options 10092 10093These are the @samp{-m} options defined for the 68000 series. The default 10094values for these options depends on which style of 68000 was selected when 10095the compiler was configured; the defaults for the most common choices are 10096given below. 10097 10098@table @gcctabopt 10099@item -m68000 10100@itemx -mc68000 10101@opindex m68000 10102@opindex mc68000 10103Generate output for a 68000. This is the default 10104when the compiler is configured for 68000-based systems. 10105 10106Use this option for microcontrollers with a 68000 or EC000 core, 10107including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356. 10108 10109@item -m68020 10110@itemx -mc68020 10111@opindex m68020 10112@opindex mc68020 10113Generate output for a 68020. This is the default 10114when the compiler is configured for 68020-based systems. 10115 10116@item -m68881 10117@opindex m68881 10118Generate output containing 68881 instructions for floating point. 10119This is the default for most 68020 systems unless @option{--nfp} was 10120specified when the compiler was configured. 10121 10122@item -m68030 10123@opindex m68030 10124Generate output for a 68030. This is the default when the compiler is 10125configured for 68030-based systems. 10126 10127@item -m68040 10128@opindex m68040 10129Generate output for a 68040. This is the default when the compiler is 10130configured for 68040-based systems. 10131 10132This option inhibits the use of 68881/68882 instructions that have to be 10133emulated by software on the 68040. Use this option if your 68040 does not 10134have code to emulate those instructions. 10135 10136@item -m68060 10137@opindex m68060 10138Generate output for a 68060. This is the default when the compiler is 10139configured for 68060-based systems. 10140 10141This option inhibits the use of 68020 and 68881/68882 instructions that 10142have to be emulated by software on the 68060. Use this option if your 68060 10143does not have code to emulate those instructions. 10144 10145@item -mcpu32 10146@opindex mcpu32 10147Generate output for a CPU32. This is the default 10148when the compiler is configured for CPU32-based systems. 10149 10150Use this option for microcontrollers with a 10151CPU32 or CPU32+ core, including the 68330, 68331, 68332, 68333, 68334, 1015268336, 68340, 68341, 68349 and 68360. 10153 10154@item -m5200 10155@opindex m5200 10156Generate output for a 520X ``coldfire'' family cpu. This is the default 10157when the compiler is configured for 520X-based systems. 10158 10159Use this option for microcontroller with a 5200 core, including 10160the MCF5202, MCF5203, MCF5204 and MCF5202. 10161 10162@item -mcfv4e 10163@opindex mcfv4e 10164Generate output for a ColdFire V4e family cpu (e.g.@: 547x/548x). 10165This includes use of hardware floating point instructions. 10166 10167@item -m68020-40 10168@opindex m68020-40 10169Generate output for a 68040, without using any of the new instructions. 10170This results in code which can run relatively efficiently on either a 1017168020/68881 or a 68030 or a 68040. The generated code does use the 1017268881 instructions that are emulated on the 68040. 10173 10174@item -m68020-60 10175@opindex m68020-60 10176Generate output for a 68060, without using any of the new instructions. 10177This results in code which can run relatively efficiently on either a 1017868020/68881 or a 68030 or a 68040. The generated code does use the 1017968881 instructions that are emulated on the 68060. 10180 10181@item -msoft-float 10182@opindex msoft-float 10183Generate output containing library calls for floating point. 10184@strong{Warning:} the requisite libraries are not available for all m68k 10185targets. Normally the facilities of the machine's usual C compiler are 10186used, but this can't be done directly in cross-compilation. You must 10187make your own arrangements to provide suitable library functions for 10188cross-compilation. The embedded targets @samp{m68k-*-aout} and 10189@samp{m68k-*-coff} do provide software floating point support. 10190 10191@item -mshort 10192@opindex mshort 10193Consider type @code{int} to be 16 bits wide, like @code{short int}. 10194Additionally, parameters passed on the stack are also aligned to a 1019516-bit boundary even on targets whose API mandates promotion to 32-bit. 10196 10197@item -mnobitfield 10198@opindex mnobitfield 10199Do not use the bit-field instructions. The @option{-m68000}, @option{-mcpu32} 10200and @option{-m5200} options imply @w{@option{-mnobitfield}}. 10201 10202@item -mbitfield 10203@opindex mbitfield 10204Do use the bit-field instructions. The @option{-m68020} option implies 10205@option{-mbitfield}. This is the default if you use a configuration 10206designed for a 68020. 10207 10208@item -mrtd 10209@opindex mrtd 10210Use a different function-calling convention, in which functions 10211that take a fixed number of arguments return with the @code{rtd} 10212instruction, which pops their arguments while returning. This 10213saves one instruction in the caller since there is no need to pop 10214the arguments there. 10215 10216This calling convention is incompatible with the one normally 10217used on Unix, so you cannot use it if you need to call libraries 10218compiled with the Unix compiler. 10219 10220Also, you must provide function prototypes for all functions that 10221take variable numbers of arguments (including @code{printf}); 10222otherwise incorrect code will be generated for calls to those 10223functions. 10224 10225In addition, seriously incorrect code will result if you call a 10226function with too many arguments. (Normally, extra arguments are 10227harmlessly ignored.) 10228 10229The @code{rtd} instruction is supported by the 68010, 68020, 68030, 1023068040, 68060 and CPU32 processors, but not by the 68000 or 5200. 10231 10232@item -malign-int 10233@itemx -mno-align-int 10234@opindex malign-int 10235@opindex mno-align-int 10236Control whether GCC aligns @code{int}, @code{long}, @code{long long}, 10237@code{float}, @code{double}, and @code{long double} variables on a 32-bit 10238boundary (@option{-malign-int}) or a 16-bit boundary (@option{-mno-align-int}). 10239Aligning variables on 32-bit boundaries produces code that runs somewhat 10240faster on processors with 32-bit busses at the expense of more memory. 10241 10242@strong{Warning:} if you use the @option{-malign-int} switch, GCC will 10243align structures containing the above types differently than 10244most published application binary interface specifications for the m68k. 10245 10246@item -mpcrel 10247@opindex mpcrel 10248Use the pc-relative addressing mode of the 68000 directly, instead of 10249using a global offset table. At present, this option implies @option{-fpic}, 10250allowing at most a 16-bit offset for pc-relative addressing. @option{-fPIC} is 10251not presently supported with @option{-mpcrel}, though this could be supported for 1025268020 and higher processors. 10253 10254@item -mno-strict-align 10255@itemx -mstrict-align 10256@opindex mno-strict-align 10257@opindex mstrict-align 10258Do not (do) assume that unaligned memory references will be handled by 10259the system. 10260 10261@item -msep-data 10262Generate code that allows the data segment to be located in a different 10263area of memory from the text segment. This allows for execute in place in 10264an environment without virtual memory management. This option implies 10265@option{-fPIC}. 10266 10267@item -mno-sep-data 10268Generate code that assumes that the data segment follows the text segment. 10269This is the default. 10270 10271@item -mid-shared-library 10272Generate code that supports shared libraries via the library ID method. 10273This allows for execute in place and shared libraries in an environment 10274without virtual memory management. This option implies @option{-fPIC}. 10275 10276@item -mno-id-shared-library 10277Generate code that doesn't assume ID based shared libraries are being used. 10278This is the default. 10279 10280@item -mshared-library-id=n 10281Specified the identification number of the ID based shared library being 10282compiled. Specifying a value of 0 will generate more compact code, specifying 10283other values will force the allocation of that number to the current 10284library but is no more space or time efficient than omitting this option. 10285 10286@end table 10287 10288@node M68hc1x Options 10289@subsection M68hc1x Options 10290@cindex M68hc1x options 10291 10292These are the @samp{-m} options defined for the 68hc11 and 68hc12 10293microcontrollers. The default values for these options depends on 10294which style of microcontroller was selected when the compiler was configured; 10295the defaults for the most common choices are given below. 10296 10297@table @gcctabopt 10298@item -m6811 10299@itemx -m68hc11 10300@opindex m6811 10301@opindex m68hc11 10302Generate output for a 68HC11. This is the default 10303when the compiler is configured for 68HC11-based systems. 10304 10305@item -m6812 10306@itemx -m68hc12 10307@opindex m6812 10308@opindex m68hc12 10309Generate output for a 68HC12. This is the default 10310when the compiler is configured for 68HC12-based systems. 10311 10312@item -m68S12 10313@itemx -m68hcs12 10314@opindex m68S12 10315@opindex m68hcs12 10316Generate output for a 68HCS12. 10317 10318@item -mauto-incdec 10319@opindex mauto-incdec 10320Enable the use of 68HC12 pre and post auto-increment and auto-decrement 10321addressing modes. 10322 10323@item -minmax 10324@itemx -nominmax 10325@opindex minmax 10326@opindex mnominmax 10327Enable the use of 68HC12 min and max instructions. 10328 10329@item -mlong-calls 10330@itemx -mno-long-calls 10331@opindex mlong-calls 10332@opindex mno-long-calls 10333Treat all calls as being far away (near). If calls are assumed to be 10334far away, the compiler will use the @code{call} instruction to 10335call a function and the @code{rtc} instruction for returning. 10336 10337@item -mshort 10338@opindex mshort 10339Consider type @code{int} to be 16 bits wide, like @code{short int}. 10340 10341@item -msoft-reg-count=@var{count} 10342@opindex msoft-reg-count 10343Specify the number of pseudo-soft registers which are used for the 10344code generation. The maximum number is 32. Using more pseudo-soft 10345register may or may not result in better code depending on the program. 10346The default is 4 for 68HC11 and 2 for 68HC12. 10347 10348@end table 10349 10350@node MCore Options 10351@subsection MCore Options 10352@cindex MCore options 10353 10354These are the @samp{-m} options defined for the Motorola M*Core 10355processors. 10356 10357@table @gcctabopt 10358 10359@item -mhardlit 10360@itemx -mno-hardlit 10361@opindex mhardlit 10362@opindex mno-hardlit 10363Inline constants into the code stream if it can be done in two 10364instructions or less. 10365 10366@item -mdiv 10367@itemx -mno-div 10368@opindex mdiv 10369@opindex mno-div 10370Use the divide instruction. (Enabled by default). 10371 10372@item -mrelax-immediate 10373@itemx -mno-relax-immediate 10374@opindex mrelax-immediate 10375@opindex mno-relax-immediate 10376Allow arbitrary sized immediates in bit operations. 10377 10378@item -mwide-bitfields 10379@itemx -mno-wide-bitfields 10380@opindex mwide-bitfields 10381@opindex mno-wide-bitfields 10382Always treat bit-fields as int-sized. 10383 10384@item -m4byte-functions 10385@itemx -mno-4byte-functions 10386@opindex m4byte-functions 10387@opindex mno-4byte-functions 10388Force all functions to be aligned to a four byte boundary. 10389 10390@item -mcallgraph-data 10391@itemx -mno-callgraph-data 10392@opindex mcallgraph-data 10393@opindex mno-callgraph-data 10394Emit callgraph information. 10395 10396@item -mslow-bytes 10397@itemx -mno-slow-bytes 10398@opindex mslow-bytes 10399@opindex mno-slow-bytes 10400Prefer word access when reading byte quantities. 10401 10402@item -mlittle-endian 10403@itemx -mbig-endian 10404@opindex mlittle-endian 10405@opindex mbig-endian 10406Generate code for a little endian target. 10407 10408@item -m210 10409@itemx -m340 10410@opindex m210 10411@opindex m340 10412Generate code for the 210 processor. 10413@end table 10414 10415@node MIPS Options 10416@subsection MIPS Options 10417@cindex MIPS options 10418 10419@table @gcctabopt 10420 10421@item -EB 10422@opindex EB 10423Generate big-endian code. 10424 10425@item -EL 10426@opindex EL 10427Generate little-endian code. This is the default for @samp{mips*el-*-*} 10428configurations. 10429 10430@item -march=@var{arch} 10431@opindex march 10432Generate code that will run on @var{arch}, which can be the name of a 10433generic MIPS ISA, or the name of a particular processor. 10434The ISA names are: 10435@samp{mips1}, @samp{mips2}, @samp{mips3}, @samp{mips4}, 10436@samp{mips32}, @samp{mips32r2}, and @samp{mips64}. 10437The processor names are: 10438@samp{4kc}, @samp{4km}, @samp{4kp}, 10439@samp{5kc}, @samp{5kf}, 10440@samp{20kc}, 10441@samp{24k}, @samp{24kc}, @samp{24kf}, @samp{24kx}, 10442@samp{m4k}, 10443@samp{orion}, 10444@samp{r2000}, @samp{r3000}, @samp{r3900}, @samp{r4000}, @samp{r4400}, 10445@samp{r4600}, @samp{r4650}, @samp{r6000}, @samp{r8000}, 10446@samp{rm7000}, @samp{rm9000}, 10447@samp{sb1}, 10448@samp{sr71000}, 10449@samp{vr4100}, @samp{vr4111}, @samp{vr4120}, @samp{vr4130}, @samp{vr4300}, 10450@samp{vr5000}, @samp{vr5400} and @samp{vr5500}. 10451The special value @samp{from-abi} selects the 10452most compatible architecture for the selected ABI (that is, 10453@samp{mips1} for 32-bit ABIs and @samp{mips3} for 64-bit ABIs)@. 10454 10455In processor names, a final @samp{000} can be abbreviated as @samp{k} 10456(for example, @samp{-march=r2k}). Prefixes are optional, and 10457@samp{vr} may be written @samp{r}. 10458 10459GCC defines two macros based on the value of this option. The first 10460is @samp{_MIPS_ARCH}, which gives the name of target architecture, as 10461a string. The second has the form @samp{_MIPS_ARCH_@var{foo}}, 10462where @var{foo} is the capitalized value of @samp{_MIPS_ARCH}@. 10463For example, @samp{-march=r2000} will set @samp{_MIPS_ARCH} 10464to @samp{"r2000"} and define the macro @samp{_MIPS_ARCH_R2000}. 10465 10466Note that the @samp{_MIPS_ARCH} macro uses the processor names given 10467above. In other words, it will have the full prefix and will not 10468abbreviate @samp{000} as @samp{k}. In the case of @samp{from-abi}, 10469the macro names the resolved architecture (either @samp{"mips1"} or 10470@samp{"mips3"}). It names the default architecture when no 10471@option{-march} option is given. 10472 10473@item -mtune=@var{arch} 10474@opindex mtune 10475Optimize for @var{arch}. Among other things, this option controls 10476the way instructions are scheduled, and the perceived cost of arithmetic 10477operations. The list of @var{arch} values is the same as for 10478@option{-march}. 10479 10480When this option is not used, GCC will optimize for the processor 10481specified by @option{-march}. By using @option{-march} and 10482@option{-mtune} together, it is possible to generate code that will 10483run on a family of processors, but optimize the code for one 10484particular member of that family. 10485 10486@samp{-mtune} defines the macros @samp{_MIPS_TUNE} and 10487@samp{_MIPS_TUNE_@var{foo}}, which work in the same way as the 10488@samp{-march} ones described above. 10489 10490@item -mips1 10491@opindex mips1 10492Equivalent to @samp{-march=mips1}. 10493 10494@item -mips2 10495@opindex mips2 10496Equivalent to @samp{-march=mips2}. 10497 10498@item -mips3 10499@opindex mips3 10500Equivalent to @samp{-march=mips3}. 10501 10502@item -mips4 10503@opindex mips4 10504Equivalent to @samp{-march=mips4}. 10505 10506@item -mips32 10507@opindex mips32 10508Equivalent to @samp{-march=mips32}. 10509 10510@item -mips32r2 10511@opindex mips32r2 10512Equivalent to @samp{-march=mips32r2}. 10513 10514@item -mips64 10515@opindex mips64 10516Equivalent to @samp{-march=mips64}. 10517 10518@item -mips16 10519@itemx -mno-mips16 10520@opindex mips16 10521@opindex mno-mips16 10522Generate (do not generate) MIPS16 code. If GCC is targetting a 10523MIPS32 or MIPS64 architecture, it will make use of the MIPS16e ASE@. 10524 10525@item -mabi=32 10526@itemx -mabi=o64 10527@itemx -mabi=n32 10528@itemx -mabi=64 10529@itemx -mabi=eabi 10530@opindex mabi=32 10531@opindex mabi=o64 10532@opindex mabi=n32 10533@opindex mabi=64 10534@opindex mabi=eabi 10535Generate code for the given ABI@. 10536 10537Note that the EABI has a 32-bit and a 64-bit variant. GCC normally 10538generates 64-bit code when you select a 64-bit architecture, but you 10539can use @option{-mgp32} to get 32-bit code instead. 10540 10541For information about the O64 ABI, see 10542@w{@uref{http://gcc.gnu.org/projects/mipso64-abi.html}}. 10543 10544@item -mabicalls 10545@itemx -mno-abicalls 10546@opindex mabicalls 10547@opindex mno-abicalls 10548Generate (do not generate) code that is suitable for SVR4-style 10549dynamic objects. @option{-mabicalls} is the default for SVR4-based 10550systems. 10551 10552@item -mshared 10553@itemx -mno-shared 10554Generate (do not generate) code that is fully position-independent, 10555and that can therefore be linked into shared libraries. This option 10556only affects @option{-mabicalls}. 10557 10558All @option{-mabicalls} code has traditionally been position-independent, 10559regardless of options like @option{-fPIC} and @option{-fpic}. However, 10560as an extension, the GNU toolchain allows executables to use absolute 10561accesses for locally-binding symbols. It can also use shorter GP 10562initialization sequences and generate direct calls to locally-defined 10563functions. This mode is selected by @option{-mno-shared}. 10564 10565@option{-mno-shared} depends on binutils 2.16 or higher and generates 10566objects that can only be linked by the GNU linker. However, the option 10567does not affect the ABI of the final executable; it only affects the ABI 10568of relocatable objects. Using @option{-mno-shared} will generally make 10569executables both smaller and quicker. 10570 10571@option{-mshared} is the default. 10572 10573@item -mxgot 10574@itemx -mno-xgot 10575@opindex mxgot 10576@opindex mno-xgot 10577Lift (do not lift) the usual restrictions on the size of the global 10578offset table. 10579 10580GCC normally uses a single instruction to load values from the GOT@. 10581While this is relatively efficient, it will only work if the GOT 10582is smaller than about 64k. Anything larger will cause the linker 10583to report an error such as: 10584 10585@cindex relocation truncated to fit (MIPS) 10586@smallexample 10587relocation truncated to fit: R_MIPS_GOT16 foobar 10588@end smallexample 10589 10590If this happens, you should recompile your code with @option{-mxgot}. 10591It should then work with very large GOTs, although it will also be 10592less efficient, since it will take three instructions to fetch the 10593value of a global symbol. 10594 10595Note that some linkers can create multiple GOTs. If you have such a 10596linker, you should only need to use @option{-mxgot} when a single object 10597file accesses more than 64k's worth of GOT entries. Very few do. 10598 10599These options have no effect unless GCC is generating position 10600independent code. 10601 10602@item -mgp32 10603@opindex mgp32 10604Assume that general-purpose registers are 32 bits wide. 10605 10606@item -mgp64 10607@opindex mgp64 10608Assume that general-purpose registers are 64 bits wide. 10609 10610@item -mfp32 10611@opindex mfp32 10612Assume that floating-point registers are 32 bits wide. 10613 10614@item -mfp64 10615@opindex mfp64 10616Assume that floating-point registers are 64 bits wide. 10617 10618@item -mhard-float 10619@opindex mhard-float 10620Use floating-point coprocessor instructions. 10621 10622@item -msoft-float 10623@opindex msoft-float 10624Do not use floating-point coprocessor instructions. Implement 10625floating-point calculations using library calls instead. 10626 10627@item -msingle-float 10628@opindex msingle-float 10629Assume that the floating-point coprocessor only supports single-precision 10630operations. 10631 10632@itemx -mdouble-float 10633@opindex mdouble-float 10634Assume that the floating-point coprocessor supports double-precision 10635operations. This is the default. 10636 10637@itemx -mdsp 10638@itemx -mno-dsp 10639@opindex mdsp 10640@opindex mno-dsp 10641Use (do not use) the MIPS DSP ASE. @xref{MIPS DSP Built-in Functions}. 10642 10643@itemx -mpaired-single 10644@itemx -mno-paired-single 10645@opindex mpaired-single 10646@opindex mno-paired-single 10647Use (do not use) paired-single floating-point instructions. 10648@xref{MIPS Paired-Single Support}. This option can only be used 10649when generating 64-bit code and requires hardware floating-point 10650support to be enabled. 10651 10652@itemx -mips3d 10653@itemx -mno-mips3d 10654@opindex mips3d 10655@opindex mno-mips3d 10656Use (do not use) the MIPS-3D ASE@. @xref{MIPS-3D Built-in Functions}. 10657The option @option{-mips3d} implies @option{-mpaired-single}. 10658 10659@item -mlong64 10660@opindex mlong64 10661Force @code{long} types to be 64 bits wide. See @option{-mlong32} for 10662an explanation of the default and the way that the pointer size is 10663determined. 10664 10665@item -mlong32 10666@opindex mlong32 10667Force @code{long}, @code{int}, and pointer types to be 32 bits wide. 10668 10669The default size of @code{int}s, @code{long}s and pointers depends on 10670the ABI@. All the supported ABIs use 32-bit @code{int}s. The n64 ABI 10671uses 64-bit @code{long}s, as does the 64-bit EABI; the others use 1067232-bit @code{long}s. Pointers are the same size as @code{long}s, 10673or the same size as integer registers, whichever is smaller. 10674 10675@item -msym32 10676@itemx -mno-sym32 10677@opindex msym32 10678@opindex mno-sym32 10679Assume (do not assume) that all symbols have 32-bit values, regardless 10680of the selected ABI@. This option is useful in combination with 10681@option{-mabi=64} and @option{-mno-abicalls} because it allows GCC 10682to generate shorter and faster references to symbolic addresses. 10683 10684@item -G @var{num} 10685@opindex G 10686@cindex smaller data references (MIPS) 10687@cindex gp-relative references (MIPS) 10688Put global and static items less than or equal to @var{num} bytes into 10689the small data or bss section instead of the normal data or bss section. 10690This allows the data to be accessed using a single instruction. 10691 10692All modules should be compiled with the same @option{-G @var{num}} 10693value. 10694 10695@item -membedded-data 10696@itemx -mno-embedded-data 10697@opindex membedded-data 10698@opindex mno-embedded-data 10699Allocate variables to the read-only data section first if possible, then 10700next in the small data section if possible, otherwise in data. This gives 10701slightly slower code than the default, but reduces the amount of RAM required 10702when executing, and thus may be preferred for some embedded systems. 10703 10704@item -muninit-const-in-rodata 10705@itemx -mno-uninit-const-in-rodata 10706@opindex muninit-const-in-rodata 10707@opindex mno-uninit-const-in-rodata 10708Put uninitialized @code{const} variables in the read-only data section. 10709This option is only meaningful in conjunction with @option{-membedded-data}. 10710 10711@item -msplit-addresses 10712@itemx -mno-split-addresses 10713@opindex msplit-addresses 10714@opindex mno-split-addresses 10715Enable (disable) use of the @code{%hi()} and @code{%lo()} assembler 10716relocation operators. This option has been superseded by 10717@option{-mexplicit-relocs} but is retained for backwards compatibility. 10718 10719@item -mexplicit-relocs 10720@itemx -mno-explicit-relocs 10721@opindex mexplicit-relocs 10722@opindex mno-explicit-relocs 10723Use (do not use) assembler relocation operators when dealing with symbolic 10724addresses. The alternative, selected by @option{-mno-explicit-relocs}, 10725is to use assembler macros instead. 10726 10727@option{-mexplicit-relocs} is the default if GCC was configured 10728to use an assembler that supports relocation operators. 10729 10730@item -mcheck-zero-division 10731@itemx -mno-check-zero-division 10732@opindex mcheck-zero-division 10733@opindex mno-check-zero-division 10734Trap (do not trap) on integer division by zero. The default is 10735@option{-mcheck-zero-division}. 10736 10737@item -mdivide-traps 10738@itemx -mdivide-breaks 10739@opindex mdivide-traps 10740@opindex mdivide-breaks 10741MIPS systems check for division by zero by generating either a 10742conditional trap or a break instruction. Using traps results in 10743smaller code, but is only supported on MIPS II and later. Also, some 10744versions of the Linux kernel have a bug that prevents trap from 10745generating the proper signal (@code{SIGFPE}). Use @option{-mdivide-traps} to 10746allow conditional traps on architectures that support them and 10747@option{-mdivide-breaks} to force the use of breaks. 10748 10749The default is usually @option{-mdivide-traps}, but this can be 10750overridden at configure time using @option{--with-divide=breaks}. 10751Divide-by-zero checks can be completely disabled using 10752@option{-mno-check-zero-division}. 10753 10754@item -mmemcpy 10755@itemx -mno-memcpy 10756@opindex mmemcpy 10757@opindex mno-memcpy 10758Force (do not force) the use of @code{memcpy()} for non-trivial block 10759moves. The default is @option{-mno-memcpy}, which allows GCC to inline 10760most constant-sized copies. 10761 10762@item -mlong-calls 10763@itemx -mno-long-calls 10764@opindex mlong-calls 10765@opindex mno-long-calls 10766Disable (do not disable) use of the @code{jal} instruction. Calling 10767functions using @code{jal} is more efficient but requires the caller 10768and callee to be in the same 256 megabyte segment. 10769 10770This option has no effect on abicalls code. The default is 10771@option{-mno-long-calls}. 10772 10773@item -mmad 10774@itemx -mno-mad 10775@opindex mmad 10776@opindex mno-mad 10777Enable (disable) use of the @code{mad}, @code{madu} and @code{mul} 10778instructions, as provided by the R4650 ISA@. 10779 10780@item -mfused-madd 10781@itemx -mno-fused-madd 10782@opindex mfused-madd 10783@opindex mno-fused-madd 10784Enable (disable) use of the floating point multiply-accumulate 10785instructions, when they are available. The default is 10786@option{-mfused-madd}. 10787 10788When multiply-accumulate instructions are used, the intermediate 10789product is calculated to infinite precision and is not subject to 10790the FCSR Flush to Zero bit. This may be undesirable in some 10791circumstances. 10792 10793@item -nocpp 10794@opindex nocpp 10795Tell the MIPS assembler to not run its preprocessor over user 10796assembler files (with a @samp{.s} suffix) when assembling them. 10797 10798@item -mfix-r4000 10799@itemx -mno-fix-r4000 10800@opindex mfix-r4000 10801@opindex mno-fix-r4000 10802Work around certain R4000 CPU errata: 10803@itemize @minus 10804@item 10805A double-word or a variable shift may give an incorrect result if executed 10806immediately after starting an integer division. 10807@item 10808A double-word or a variable shift may give an incorrect result if executed 10809while an integer multiplication is in progress. 10810@item 10811An integer division may give an incorrect result if started in a delay slot 10812of a taken branch or a jump. 10813@end itemize 10814 10815@item -mfix-r4400 10816@itemx -mno-fix-r4400 10817@opindex mfix-r4400 10818@opindex mno-fix-r4400 10819Work around certain R4400 CPU errata: 10820@itemize @minus 10821@item 10822A double-word or a variable shift may give an incorrect result if executed 10823immediately after starting an integer division. 10824@end itemize 10825 10826@item -mfix-vr4120 10827@itemx -mno-fix-vr4120 10828@opindex mfix-vr4120 10829Work around certain VR4120 errata: 10830@itemize @minus 10831@item 10832@code{dmultu} does not always produce the correct result. 10833@item 10834@code{div} and @code{ddiv} do not always produce the correct result if one 10835of the operands is negative. 10836@end itemize 10837The workarounds for the division errata rely on special functions in 10838@file{libgcc.a}. At present, these functions are only provided by 10839the @code{mips64vr*-elf} configurations. 10840 10841Other VR4120 errata require a nop to be inserted between certain pairs of 10842instructions. These errata are handled by the assembler, not by GCC itself. 10843 10844@item -mfix-vr4130 10845@opindex mfix-vr4130 10846Work around the VR4130 @code{mflo}/@code{mfhi} errata. The 10847workarounds are implemented by the assembler rather than by GCC, 10848although GCC will avoid using @code{mflo} and @code{mfhi} if the 10849VR4130 @code{macc}, @code{macchi}, @code{dmacc} and @code{dmacchi} 10850instructions are available instead. 10851 10852@item -mfix-sb1 10853@itemx -mno-fix-sb1 10854@opindex mfix-sb1 10855Work around certain SB-1 CPU core errata. 10856(This flag currently works around the SB-1 revision 2 10857``F1'' and ``F2'' floating point errata.) 10858 10859@item -mflush-func=@var{func} 10860@itemx -mno-flush-func 10861@opindex mflush-func 10862Specifies the function to call to flush the I and D caches, or to not 10863call any such function. If called, the function must take the same 10864arguments as the common @code{_flush_func()}, that is, the address of the 10865memory range for which the cache is being flushed, the size of the 10866memory range, and the number 3 (to flush both caches). The default 10867depends on the target GCC was configured for, but commonly is either 10868@samp{_flush_func} or @samp{__cpu_flush}. 10869 10870@item -mbranch-likely 10871@itemx -mno-branch-likely 10872@opindex mbranch-likely 10873@opindex mno-branch-likely 10874Enable or disable use of Branch Likely instructions, regardless of the 10875default for the selected architecture. By default, Branch Likely 10876instructions may be generated if they are supported by the selected 10877architecture. An exception is for the MIPS32 and MIPS64 architectures 10878and processors which implement those architectures; for those, Branch 10879Likely instructions will not be generated by default because the MIPS32 10880and MIPS64 architectures specifically deprecate their use. 10881 10882@item -mfp-exceptions 10883@itemx -mno-fp-exceptions 10884@opindex mfp-exceptions 10885Specifies whether FP exceptions are enabled. This affects how we schedule 10886FP instructions for some processors. The default is that FP exceptions are 10887enabled. 10888 10889For instance, on the SB-1, if FP exceptions are disabled, and we are emitting 1089064-bit code, then we can use both FP pipes. Otherwise, we can only use one 10891FP pipe. 10892 10893@item -mvr4130-align 10894@itemx -mno-vr4130-align 10895@opindex mvr4130-align 10896The VR4130 pipeline is two-way superscalar, but can only issue two 10897instructions together if the first one is 8-byte aligned. When this 10898option is enabled, GCC will align pairs of instructions that it 10899thinks should execute in parallel. 10900 10901This option only has an effect when optimizing for the VR4130. 10902It normally makes code faster, but at the expense of making it bigger. 10903It is enabled by default at optimization level @option{-O3}. 10904@end table 10905 10906@node MMIX Options 10907@subsection MMIX Options 10908@cindex MMIX Options 10909 10910These options are defined for the MMIX: 10911 10912@table @gcctabopt 10913@item -mlibfuncs 10914@itemx -mno-libfuncs 10915@opindex mlibfuncs 10916@opindex mno-libfuncs 10917Specify that intrinsic library functions are being compiled, passing all 10918values in registers, no matter the size. 10919 10920@item -mepsilon 10921@itemx -mno-epsilon 10922@opindex mepsilon 10923@opindex mno-epsilon 10924Generate floating-point comparison instructions that compare with respect 10925to the @code{rE} epsilon register. 10926 10927@item -mabi=mmixware 10928@itemx -mabi=gnu 10929@opindex mabi-mmixware 10930@opindex mabi=gnu 10931Generate code that passes function parameters and return values that (in 10932the called function) are seen as registers @code{$0} and up, as opposed to 10933the GNU ABI which uses global registers @code{$231} and up. 10934 10935@item -mzero-extend 10936@itemx -mno-zero-extend 10937@opindex mzero-extend 10938@opindex mno-zero-extend 10939When reading data from memory in sizes shorter than 64 bits, use (do not 10940use) zero-extending load instructions by default, rather than 10941sign-extending ones. 10942 10943@item -mknuthdiv 10944@itemx -mno-knuthdiv 10945@opindex mknuthdiv 10946@opindex mno-knuthdiv 10947Make the result of a division yielding a remainder have the same sign as 10948the divisor. With the default, @option{-mno-knuthdiv}, the sign of the 10949remainder follows the sign of the dividend. Both methods are 10950arithmetically valid, the latter being almost exclusively used. 10951 10952@item -mtoplevel-symbols 10953@itemx -mno-toplevel-symbols 10954@opindex mtoplevel-symbols 10955@opindex mno-toplevel-symbols 10956Prepend (do not prepend) a @samp{:} to all global symbols, so the assembly 10957code can be used with the @code{PREFIX} assembly directive. 10958 10959@item -melf 10960@opindex melf 10961Generate an executable in the ELF format, rather than the default 10962@samp{mmo} format used by the @command{mmix} simulator. 10963 10964@item -mbranch-predict 10965@itemx -mno-branch-predict 10966@opindex mbranch-predict 10967@opindex mno-branch-predict 10968Use (do not use) the probable-branch instructions, when static branch 10969prediction indicates a probable branch. 10970 10971@item -mbase-addresses 10972@itemx -mno-base-addresses 10973@opindex mbase-addresses 10974@opindex mno-base-addresses 10975Generate (do not generate) code that uses @emph{base addresses}. Using a 10976base address automatically generates a request (handled by the assembler 10977and the linker) for a constant to be set up in a global register. The 10978register is used for one or more base address requests within the range 0 10979to 255 from the value held in the register. The generally leads to short 10980and fast code, but the number of different data items that can be 10981addressed is limited. This means that a program that uses lots of static 10982data may require @option{-mno-base-addresses}. 10983 10984@item -msingle-exit 10985@itemx -mno-single-exit 10986@opindex msingle-exit 10987@opindex mno-single-exit 10988Force (do not force) generated code to have a single exit point in each 10989function. 10990@end table 10991 10992@node MN10300 Options 10993@subsection MN10300 Options 10994@cindex MN10300 options 10995 10996These @option{-m} options are defined for Matsushita MN10300 architectures: 10997 10998@table @gcctabopt 10999@item -mmult-bug 11000@opindex mmult-bug 11001Generate code to avoid bugs in the multiply instructions for the MN10300 11002processors. This is the default. 11003 11004@item -mno-mult-bug 11005@opindex mno-mult-bug 11006Do not generate code to avoid bugs in the multiply instructions for the 11007MN10300 processors. 11008 11009@item -mam33 11010@opindex mam33 11011Generate code which uses features specific to the AM33 processor. 11012 11013@item -mno-am33 11014@opindex mno-am33 11015Do not generate code which uses features specific to the AM33 processor. This 11016is the default. 11017 11018@item -mreturn-pointer-on-d0 11019@opindex mreturn-pointer-on-d0 11020When generating a function which returns a pointer, return the pointer 11021in both @code{a0} and @code{d0}. Otherwise, the pointer is returned 11022only in a0, and attempts to call such functions without a prototype 11023would result in errors. Note that this option is on by default; use 11024@option{-mno-return-pointer-on-d0} to disable it. 11025 11026@item -mno-crt0 11027@opindex mno-crt0 11028Do not link in the C run-time initialization object file. 11029 11030@item -mrelax 11031@opindex mrelax 11032Indicate to the linker that it should perform a relaxation optimization pass 11033to shorten branches, calls and absolute memory addresses. This option only 11034has an effect when used on the command line for the final link step. 11035 11036This option makes symbolic debugging impossible. 11037@end table 11038 11039@node MT Options 11040@subsection MT Options 11041@cindex MT options 11042 11043These @option{-m} options are defined for Morpho MT architectures: 11044 11045@table @gcctabopt 11046 11047@item -march=@var{cpu-type} 11048@opindex march 11049Generate code that will run on @var{cpu-type}, which is the name of a system 11050representing a certain processor type. Possible values for 11051@var{cpu-type} are @samp{ms1-64-001}, @samp{ms1-16-002}, 11052@samp{ms1-16-003} and @samp{ms2}. 11053 11054When this option is not used, the default is @option{-march=ms1-16-002}. 11055 11056@item -mbacc 11057@opindex mbacc 11058Use byte loads and stores when generating code. 11059 11060@item -mno-bacc 11061@opindex mno-bacc 11062Do not use byte loads and stores when generating code. 11063 11064@item -msim 11065@opindex msim 11066Use simulator runtime 11067 11068@item -mno-crt0 11069@opindex mno-crt0 11070Do not link in the C run-time initialization object file 11071@file{crti.o}. Other run-time initialization and termination files 11072such as @file{startup.o} and @file{exit.o} are still included on the 11073linker command line. 11074 11075@end table 11076 11077@node PDP-11 Options 11078@subsection PDP-11 Options 11079@cindex PDP-11 Options 11080 11081These options are defined for the PDP-11: 11082 11083@table @gcctabopt 11084@item -mfpu 11085@opindex mfpu 11086Use hardware FPP floating point. This is the default. (FIS floating 11087point on the PDP-11/40 is not supported.) 11088 11089@item -msoft-float 11090@opindex msoft-float 11091Do not use hardware floating point. 11092 11093@item -mac0 11094@opindex mac0 11095Return floating-point results in ac0 (fr0 in Unix assembler syntax). 11096 11097@item -mno-ac0 11098@opindex mno-ac0 11099Return floating-point results in memory. This is the default. 11100 11101@item -m40 11102@opindex m40 11103Generate code for a PDP-11/40. 11104 11105@item -m45 11106@opindex m45 11107Generate code for a PDP-11/45. This is the default. 11108 11109@item -m10 11110@opindex m10 11111Generate code for a PDP-11/10. 11112 11113@item -mbcopy-builtin 11114@opindex bcopy-builtin 11115Use inline @code{movmemhi} patterns for copying memory. This is the 11116default. 11117 11118@item -mbcopy 11119@opindex mbcopy 11120Do not use inline @code{movmemhi} patterns for copying memory. 11121 11122@item -mint16 11123@itemx -mno-int32 11124@opindex mint16 11125@opindex mno-int32 11126Use 16-bit @code{int}. This is the default. 11127 11128@item -mint32 11129@itemx -mno-int16 11130@opindex mint32 11131@opindex mno-int16 11132Use 32-bit @code{int}. 11133 11134@item -mfloat64 11135@itemx -mno-float32 11136@opindex mfloat64 11137@opindex mno-float32 11138Use 64-bit @code{float}. This is the default. 11139 11140@item -mfloat32 11141@itemx -mno-float64 11142@opindex mfloat32 11143@opindex mno-float64 11144Use 32-bit @code{float}. 11145 11146@item -mabshi 11147@opindex mabshi 11148Use @code{abshi2} pattern. This is the default. 11149 11150@item -mno-abshi 11151@opindex mno-abshi 11152Do not use @code{abshi2} pattern. 11153 11154@item -mbranch-expensive 11155@opindex mbranch-expensive 11156Pretend that branches are expensive. This is for experimenting with 11157code generation only. 11158 11159@item -mbranch-cheap 11160@opindex mbranch-cheap 11161Do not pretend that branches are expensive. This is the default. 11162 11163@item -msplit 11164@opindex msplit 11165Generate code for a system with split I&D@. 11166 11167@item -mno-split 11168@opindex mno-split 11169Generate code for a system without split I&D@. This is the default. 11170 11171@item -munix-asm 11172@opindex munix-asm 11173Use Unix assembler syntax. This is the default when configured for 11174@samp{pdp11-*-bsd}. 11175 11176@item -mdec-asm 11177@opindex mdec-asm 11178Use DEC assembler syntax. This is the default when configured for any 11179PDP-11 target other than @samp{pdp11-*-bsd}. 11180@end table 11181 11182@node PowerPC Options 11183@subsection PowerPC Options 11184@cindex PowerPC options 11185 11186These are listed under @xref{RS/6000 and PowerPC Options}. 11187 11188@node RS/6000 and PowerPC Options 11189@subsection IBM RS/6000 and PowerPC Options 11190@cindex RS/6000 and PowerPC Options 11191@cindex IBM RS/6000 and PowerPC Options 11192 11193These @samp{-m} options are defined for the IBM RS/6000 and PowerPC: 11194@table @gcctabopt 11195@item -mpower 11196@itemx -mno-power 11197@itemx -mpower2 11198@itemx -mno-power2 11199@itemx -mpowerpc 11200@itemx -mno-powerpc 11201@itemx -mpowerpc-gpopt 11202@itemx -mno-powerpc-gpopt 11203@itemx -mpowerpc-gfxopt 11204@itemx -mno-powerpc-gfxopt 11205@itemx -mpowerpc64 11206@itemx -mno-powerpc64 11207@itemx -mmfcrf 11208@itemx -mno-mfcrf 11209@itemx -mpopcntb 11210@itemx -mno-popcntb 11211@itemx -mfprnd 11212@itemx -mno-fprnd 11213@opindex mpower 11214@opindex mno-power 11215@opindex mpower2 11216@opindex mno-power2 11217@opindex mpowerpc 11218@opindex mno-powerpc 11219@opindex mpowerpc-gpopt 11220@opindex mno-powerpc-gpopt 11221@opindex mpowerpc-gfxopt 11222@opindex mno-powerpc-gfxopt 11223@opindex mpowerpc64 11224@opindex mno-powerpc64 11225@opindex mmfcrf 11226@opindex mno-mfcrf 11227@opindex mpopcntb 11228@opindex mno-popcntb 11229@opindex mfprnd 11230@opindex mno-fprnd 11231GCC supports two related instruction set architectures for the 11232RS/6000 and PowerPC@. The @dfn{POWER} instruction set are those 11233instructions supported by the @samp{rios} chip set used in the original 11234RS/6000 systems and the @dfn{PowerPC} instruction set is the 11235architecture of the Freescale MPC5xx, MPC6xx, MPC8xx microprocessors, and 11236the IBM 4xx, 6xx, and follow-on microprocessors. 11237 11238Neither architecture is a subset of the other. However there is a 11239large common subset of instructions supported by both. An MQ 11240register is included in processors supporting the POWER architecture. 11241 11242You use these options to specify which instructions are available on the 11243processor you are using. The default value of these options is 11244determined when configuring GCC@. Specifying the 11245@option{-mcpu=@var{cpu_type}} overrides the specification of these 11246options. We recommend you use the @option{-mcpu=@var{cpu_type}} option 11247rather than the options listed above. 11248 11249The @option{-mpower} option allows GCC to generate instructions that 11250are found only in the POWER architecture and to use the MQ register. 11251Specifying @option{-mpower2} implies @option{-power} and also allows GCC 11252to generate instructions that are present in the POWER2 architecture but 11253not the original POWER architecture. 11254 11255The @option{-mpowerpc} option allows GCC to generate instructions that 11256are found only in the 32-bit subset of the PowerPC architecture. 11257Specifying @option{-mpowerpc-gpopt} implies @option{-mpowerpc} and also allows 11258GCC to use the optional PowerPC architecture instructions in the 11259General Purpose group, including floating-point square root. Specifying 11260@option{-mpowerpc-gfxopt} implies @option{-mpowerpc} and also allows GCC to 11261use the optional PowerPC architecture instructions in the Graphics 11262group, including floating-point select. 11263 11264The @option{-mmfcrf} option allows GCC to generate the move from 11265condition register field instruction implemented on the POWER4 11266processor and other processors that support the PowerPC V2.01 11267architecture. 11268The @option{-mpopcntb} option allows GCC to generate the popcount and 11269double precision FP reciprocal estimate instruction implemented on the 11270POWER5 processor and other processors that support the PowerPC V2.02 11271architecture. 11272The @option{-mfprnd} option allows GCC to generate the FP round to 11273integer instructions implemented on the POWER5+ processor and other 11274processors that support the PowerPC V2.03 architecture. 11275 11276The @option{-mpowerpc64} option allows GCC to generate the additional 1127764-bit instructions that are found in the full PowerPC64 architecture 11278and to treat GPRs as 64-bit, doubleword quantities. GCC defaults to 11279@option{-mno-powerpc64}. 11280 11281If you specify both @option{-mno-power} and @option{-mno-powerpc}, GCC 11282will use only the instructions in the common subset of both 11283architectures plus some special AIX common-mode calls, and will not use 11284the MQ register. Specifying both @option{-mpower} and @option{-mpowerpc} 11285permits GCC to use any instruction from either architecture and to 11286allow use of the MQ register; specify this for the Motorola MPC601. 11287 11288@item -mnew-mnemonics 11289@itemx -mold-mnemonics 11290@opindex mnew-mnemonics 11291@opindex mold-mnemonics 11292Select which mnemonics to use in the generated assembler code. With 11293@option{-mnew-mnemonics}, GCC uses the assembler mnemonics defined for 11294the PowerPC architecture. With @option{-mold-mnemonics} it uses the 11295assembler mnemonics defined for the POWER architecture. Instructions 11296defined in only one architecture have only one mnemonic; GCC uses that 11297mnemonic irrespective of which of these options is specified. 11298 11299GCC defaults to the mnemonics appropriate for the architecture in 11300use. Specifying @option{-mcpu=@var{cpu_type}} sometimes overrides the 11301value of these option. Unless you are building a cross-compiler, you 11302should normally not specify either @option{-mnew-mnemonics} or 11303@option{-mold-mnemonics}, but should instead accept the default. 11304 11305@item -mcpu=@var{cpu_type} 11306@opindex mcpu 11307Set architecture type, register usage, choice of mnemonics, and 11308instruction scheduling parameters for machine type @var{cpu_type}. 11309Supported values for @var{cpu_type} are @samp{401}, @samp{403}, 11310@samp{405}, @samp{405fp}, @samp{440}, @samp{440fp}, @samp{505}, 11311@samp{601}, @samp{602}, @samp{603}, @samp{603e}, @samp{604}, 11312@samp{604e}, @samp{620}, @samp{630}, @samp{740}, @samp{7400}, 11313@samp{7450}, @samp{750}, @samp{801}, @samp{821}, @samp{823}, 11314@samp{860}, @samp{970}, @samp{8540}, @samp{ec603e}, @samp{G3}, 11315@samp{G4}, @samp{G5}, @samp{power}, @samp{power2}, @samp{power3}, 11316@samp{power4}, @samp{power5}, @samp{power5+}, @samp{power6}, 11317@samp{common}, @samp{powerpc}, @samp{powerpc64}, 11318@samp{rios}, @samp{rios1}, @samp{rios2}, @samp{rsc}, and @samp{rs64}. 11319 11320@option{-mcpu=common} selects a completely generic processor. Code 11321generated under this option will run on any POWER or PowerPC processor. 11322GCC will use only the instructions in the common subset of both 11323architectures, and will not use the MQ register. GCC assumes a generic 11324processor model for scheduling purposes. 11325 11326@option{-mcpu=power}, @option{-mcpu=power2}, @option{-mcpu=powerpc}, and 11327@option{-mcpu=powerpc64} specify generic POWER, POWER2, pure 32-bit 11328PowerPC (i.e., not MPC601), and 64-bit PowerPC architecture machine 11329types, with an appropriate, generic processor model assumed for 11330scheduling purposes. 11331 11332The other options specify a specific processor. Code generated under 11333those options will run best on that processor, and may not run at all on 11334others. 11335 11336The @option{-mcpu} options automatically enable or disable the 11337following options: @option{-maltivec}, @option{-mfprnd}, 11338@option{-mhard-float}, @option{-mmfcrf}, @option{-mmultiple}, 11339@option{-mnew-mnemonics}, @option{-mpopcntb}, @option{-mpower}, 11340@option{-mpower2}, @option{-mpowerpc64}, @option{-mpowerpc-gpopt}, 11341@option{-mpowerpc-gfxopt}, @option{-mstring}, @option{-mmulhw}, @option{-mdlmzb}. 11342The particular options 11343set for any particular CPU will vary between compiler versions, 11344depending on what setting seems to produce optimal code for that CPU; 11345it doesn't necessarily reflect the actual hardware's capabilities. If 11346you wish to set an individual option to a particular value, you may 11347specify it after the @option{-mcpu} option, like @samp{-mcpu=970 11348-mno-altivec}. 11349 11350On AIX, the @option{-maltivec} and @option{-mpowerpc64} options are 11351not enabled or disabled by the @option{-mcpu} option at present because 11352AIX does not have full support for these options. You may still 11353enable or disable them individually if you're sure it'll work in your 11354environment. 11355 11356@item -mtune=@var{cpu_type} 11357@opindex mtune 11358Set the instruction scheduling parameters for machine type 11359@var{cpu_type}, but do not set the architecture type, register usage, or 11360choice of mnemonics, as @option{-mcpu=@var{cpu_type}} would. The same 11361values for @var{cpu_type} are used for @option{-mtune} as for 11362@option{-mcpu}. If both are specified, the code generated will use the 11363architecture, registers, and mnemonics set by @option{-mcpu}, but the 11364scheduling parameters set by @option{-mtune}. 11365 11366@item -mswdiv 11367@itemx -mno-swdiv 11368@opindex mswdiv 11369@opindex mno-swdiv 11370Generate code to compute division as reciprocal estimate and iterative 11371refinement, creating opportunities for increased throughput. This 11372feature requires: optional PowerPC Graphics instruction set for single 11373precision and FRE instruction for double precision, assuming divides 11374cannot generate user-visible traps, and the domain values not include 11375Infinities, denormals or zero denominator. 11376 11377@item -maltivec 11378@itemx -mno-altivec 11379@opindex maltivec 11380@opindex mno-altivec 11381Generate code that uses (does not use) AltiVec instructions, and also 11382enable the use of built-in functions that allow more direct access to 11383the AltiVec instruction set. You may also need to set 11384@option{-mabi=altivec} to adjust the current ABI with AltiVec ABI 11385enhancements. 11386 11387@item -mvrsave 11388@item -mno-vrsave 11389@opindex mvrsave 11390@opindex mno-vrsave 11391Generate VRSAVE instructions when generating AltiVec code. 11392 11393@item -msecure-plt 11394@opindex msecure-plt 11395Generate code that allows ld and ld.so to build executables and shared 11396libraries with non-exec .plt and .got sections. This is a PowerPC 1139732-bit SYSV ABI option. 11398 11399@item -mbss-plt 11400@opindex mbss-plt 11401Generate code that uses a BSS .plt section that ld.so fills in, and 11402requires .plt and .got sections that are both writable and executable. 11403This is a PowerPC 32-bit SYSV ABI option. 11404 11405@item -misel 11406@itemx -mno-isel 11407@opindex misel 11408@opindex mno-isel 11409This switch enables or disables the generation of ISEL instructions. 11410 11411@item -misel=@var{yes/no} 11412This switch has been deprecated. Use @option{-misel} and 11413@option{-mno-isel} instead. 11414 11415@item -mspe 11416@itemx -mno-spe 11417@opindex mspe 11418@opindex mno-spe 11419This switch enables or disables the generation of SPE simd 11420instructions. 11421 11422@item -mspe=@var{yes/no} 11423This option has been deprecated. Use @option{-mspe} and 11424@option{-mno-spe} instead. 11425 11426@item -mfloat-gprs=@var{yes/single/double/no} 11427@itemx -mfloat-gprs 11428@opindex mfloat-gprs 11429This switch enables or disables the generation of floating point 11430operations on the general purpose registers for architectures that 11431support it. 11432 11433The argument @var{yes} or @var{single} enables the use of 11434single-precision floating point operations. 11435 11436The argument @var{double} enables the use of single and 11437double-precision floating point operations. 11438 11439The argument @var{no} disables floating point operations on the 11440general purpose registers. 11441 11442This option is currently only available on the MPC854x. 11443 11444@item -m32 11445@itemx -m64 11446@opindex m32 11447@opindex m64 11448Generate code for 32-bit or 64-bit environments of Darwin and SVR4 11449targets (including GNU/Linux). The 32-bit environment sets int, long 11450and pointer to 32 bits and generates code that runs on any PowerPC 11451variant. The 64-bit environment sets int to 32 bits and long and 11452pointer to 64 bits, and generates code for PowerPC64, as for 11453@option{-mpowerpc64}. 11454 11455@item -mfull-toc 11456@itemx -mno-fp-in-toc 11457@itemx -mno-sum-in-toc 11458@itemx -mminimal-toc 11459@opindex mfull-toc 11460@opindex mno-fp-in-toc 11461@opindex mno-sum-in-toc 11462@opindex mminimal-toc 11463Modify generation of the TOC (Table Of Contents), which is created for 11464every executable file. The @option{-mfull-toc} option is selected by 11465default. In that case, GCC will allocate at least one TOC entry for 11466each unique non-automatic variable reference in your program. GCC 11467will also place floating-point constants in the TOC@. However, only 1146816,384 entries are available in the TOC@. 11469 11470If you receive a linker error message that saying you have overflowed 11471the available TOC space, you can reduce the amount of TOC space used 11472with the @option{-mno-fp-in-toc} and @option{-mno-sum-in-toc} options. 11473@option{-mno-fp-in-toc} prevents GCC from putting floating-point 11474constants in the TOC and @option{-mno-sum-in-toc} forces GCC to 11475generate code to calculate the sum of an address and a constant at 11476run-time instead of putting that sum into the TOC@. You may specify one 11477or both of these options. Each causes GCC to produce very slightly 11478slower and larger code at the expense of conserving TOC space. 11479 11480If you still run out of space in the TOC even when you specify both of 11481these options, specify @option{-mminimal-toc} instead. This option causes 11482GCC to make only one TOC entry for every file. When you specify this 11483option, GCC will produce code that is slower and larger but which 11484uses extremely little TOC space. You may wish to use this option 11485only on files that contain less frequently executed code. 11486 11487@item -maix64 11488@itemx -maix32 11489@opindex maix64 11490@opindex maix32 11491Enable 64-bit AIX ABI and calling convention: 64-bit pointers, 64-bit 11492@code{long} type, and the infrastructure needed to support them. 11493Specifying @option{-maix64} implies @option{-mpowerpc64} and 11494@option{-mpowerpc}, while @option{-maix32} disables the 64-bit ABI and 11495implies @option{-mno-powerpc64}. GCC defaults to @option{-maix32}. 11496 11497@item -mxl-compat 11498@itemx -mno-xl-compat 11499@opindex mxl-compat 11500@opindex mno-xl-compat 11501Produce code that conforms more closely to IBM XL compiler semantics 11502when using AIX-compatible ABI. Pass floating-point arguments to 11503prototyped functions beyond the register save area (RSA) on the stack 11504in addition to argument FPRs. Do not assume that most significant 11505double in 128-bit long double value is properly rounded when comparing 11506values and converting to double. Use XL symbol names for long double 11507support routines. 11508 11509The AIX calling convention was extended but not initially documented to 11510handle an obscure K&R C case of calling a function that takes the 11511address of its arguments with fewer arguments than declared. IBM XL 11512compilers access floating point arguments which do not fit in the 11513RSA from the stack when a subroutine is compiled without 11514optimization. Because always storing floating-point arguments on the 11515stack is inefficient and rarely needed, this option is not enabled by 11516default and only is necessary when calling subroutines compiled by IBM 11517XL compilers without optimization. 11518 11519@item -mpe 11520@opindex mpe 11521Support @dfn{IBM RS/6000 SP} @dfn{Parallel Environment} (PE)@. Link an 11522application written to use message passing with special startup code to 11523enable the application to run. The system must have PE installed in the 11524standard location (@file{/usr/lpp/ppe.poe/}), or the @file{specs} file 11525must be overridden with the @option{-specs=} option to specify the 11526appropriate directory location. The Parallel Environment does not 11527support threads, so the @option{-mpe} option and the @option{-pthread} 11528option are incompatible. 11529 11530@item -malign-natural 11531@itemx -malign-power 11532@opindex malign-natural 11533@opindex malign-power 11534On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option 11535@option{-malign-natural} overrides the ABI-defined alignment of larger 11536types, such as floating-point doubles, on their natural size-based boundary. 11537The option @option{-malign-power} instructs GCC to follow the ABI-specified 11538alignment rules. GCC defaults to the standard alignment defined in the ABI@. 11539 11540On 64-bit Darwin, natural alignment is the default, and @option{-malign-power} 11541is not supported. 11542 11543@item -msoft-float 11544@itemx -mhard-float 11545@opindex msoft-float 11546@opindex mhard-float 11547Generate code that does not use (uses) the floating-point register set. 11548Software floating point emulation is provided if you use the 11549@option{-msoft-float} option, and pass the option to GCC when linking. 11550 11551@item -mmultiple 11552@itemx -mno-multiple 11553@opindex mmultiple 11554@opindex mno-multiple 11555Generate code that uses (does not use) the load multiple word 11556instructions and the store multiple word instructions. These 11557instructions are generated by default on POWER systems, and not 11558generated on PowerPC systems. Do not use @option{-mmultiple} on little 11559endian PowerPC systems, since those instructions do not work when the 11560processor is in little endian mode. The exceptions are PPC740 and 11561PPC750 which permit the instructions usage in little endian mode. 11562 11563@item -mstring 11564@itemx -mno-string 11565@opindex mstring 11566@opindex mno-string 11567Generate code that uses (does not use) the load string instructions 11568and the store string word instructions to save multiple registers and 11569do small block moves. These instructions are generated by default on 11570POWER systems, and not generated on PowerPC systems. Do not use 11571@option{-mstring} on little endian PowerPC systems, since those 11572instructions do not work when the processor is in little endian mode. 11573The exceptions are PPC740 and PPC750 which permit the instructions 11574usage in little endian mode. 11575 11576@item -mupdate 11577@itemx -mno-update 11578@opindex mupdate 11579@opindex mno-update 11580Generate code that uses (does not use) the load or store instructions 11581that update the base register to the address of the calculated memory 11582location. These instructions are generated by default. If you use 11583@option{-mno-update}, there is a small window between the time that the 11584stack pointer is updated and the address of the previous frame is 11585stored, which means code that walks the stack frame across interrupts or 11586signals may get corrupted data. 11587 11588@item -mfused-madd 11589@itemx -mno-fused-madd 11590@opindex mfused-madd 11591@opindex mno-fused-madd 11592Generate code that uses (does not use) the floating point multiply and 11593accumulate instructions. These instructions are generated by default if 11594hardware floating is used. 11595 11596@item -mmulhw 11597@itemx -mno-mulhw 11598@opindex mmulhw 11599@opindex mno-mulhw 11600Generate code that uses (does not use) the half-word multiply and 11601multiply-accumulate instructions on the IBM 405 and 440 processors. 11602These instructions are generated by default when targetting those 11603processors. 11604 11605@item -mdlmzb 11606@itemx -mno-dlmzb 11607@opindex mdlmzb 11608@opindex mno-dlmzb 11609Generate code that uses (does not use) the string-search @samp{dlmzb} 11610instruction on the IBM 405 and 440 processors. This instruction is 11611generated by default when targetting those processors. 11612 11613@item -mno-bit-align 11614@itemx -mbit-align 11615@opindex mno-bit-align 11616@opindex mbit-align 11617On System V.4 and embedded PowerPC systems do not (do) force structures 11618and unions that contain bit-fields to be aligned to the base type of the 11619bit-field. 11620 11621For example, by default a structure containing nothing but 8 11622@code{unsigned} bit-fields of length 1 would be aligned to a 4 byte 11623boundary and have a size of 4 bytes. By using @option{-mno-bit-align}, 11624the structure would be aligned to a 1 byte boundary and be one byte in 11625size. 11626 11627@item -mno-strict-align 11628@itemx -mstrict-align 11629@opindex mno-strict-align 11630@opindex mstrict-align 11631On System V.4 and embedded PowerPC systems do not (do) assume that 11632unaligned memory references will be handled by the system. 11633 11634@item -mrelocatable 11635@itemx -mno-relocatable 11636@opindex mrelocatable 11637@opindex mno-relocatable 11638On embedded PowerPC systems generate code that allows (does not allow) 11639the program to be relocated to a different address at runtime. If you 11640use @option{-mrelocatable} on any module, all objects linked together must 11641be compiled with @option{-mrelocatable} or @option{-mrelocatable-lib}. 11642 11643@item -mrelocatable-lib 11644@itemx -mno-relocatable-lib 11645@opindex mrelocatable-lib 11646@opindex mno-relocatable-lib 11647On embedded PowerPC systems generate code that allows (does not allow) 11648the program to be relocated to a different address at runtime. Modules 11649compiled with @option{-mrelocatable-lib} can be linked with either modules 11650compiled without @option{-mrelocatable} and @option{-mrelocatable-lib} or 11651with modules compiled with the @option{-mrelocatable} options. 11652 11653@item -mno-toc 11654@itemx -mtoc 11655@opindex mno-toc 11656@opindex mtoc 11657On System V.4 and embedded PowerPC systems do not (do) assume that 11658register 2 contains a pointer to a global area pointing to the addresses 11659used in the program. 11660 11661@item -mlittle 11662@itemx -mlittle-endian 11663@opindex mlittle 11664@opindex mlittle-endian 11665On System V.4 and embedded PowerPC systems compile code for the 11666processor in little endian mode. The @option{-mlittle-endian} option is 11667the same as @option{-mlittle}. 11668 11669@item -mbig 11670@itemx -mbig-endian 11671@opindex mbig 11672@opindex mbig-endian 11673On System V.4 and embedded PowerPC systems compile code for the 11674processor in big endian mode. The @option{-mbig-endian} option is 11675the same as @option{-mbig}. 11676 11677@item -mdynamic-no-pic 11678@opindex mdynamic-no-pic 11679On Darwin and Mac OS X systems, compile code so that it is not 11680relocatable, but that its external references are relocatable. The 11681resulting code is suitable for applications, but not shared 11682libraries. 11683 11684@item -mprioritize-restricted-insns=@var{priority} 11685@opindex mprioritize-restricted-insns 11686This option controls the priority that is assigned to 11687dispatch-slot restricted instructions during the second scheduling 11688pass. The argument @var{priority} takes the value @var{0/1/2} to assign 11689@var{no/highest/second-highest} priority to dispatch slot restricted 11690instructions. 11691 11692@item -msched-costly-dep=@var{dependence_type} 11693@opindex msched-costly-dep 11694This option controls which dependences are considered costly 11695by the target during instruction scheduling. The argument 11696@var{dependence_type} takes one of the following values: 11697@var{no}: no dependence is costly, 11698@var{all}: all dependences are costly, 11699@var{true_store_to_load}: a true dependence from store to load is costly, 11700@var{store_to_load}: any dependence from store to load is costly, 11701@var{number}: any dependence which latency >= @var{number} is costly. 11702 11703@item -minsert-sched-nops=@var{scheme} 11704@opindex minsert-sched-nops 11705This option controls which nop insertion scheme will be used during 11706the second scheduling pass. The argument @var{scheme} takes one of the 11707following values: 11708@var{no}: Don't insert nops. 11709@var{pad}: Pad with nops any dispatch group which has vacant issue slots, 11710according to the scheduler's grouping. 11711@var{regroup_exact}: Insert nops to force costly dependent insns into 11712separate groups. Insert exactly as many nops as needed to force an insn 11713to a new group, according to the estimated processor grouping. 11714@var{number}: Insert nops to force costly dependent insns into 11715separate groups. Insert @var{number} nops to force an insn to a new group. 11716 11717@item -mcall-sysv 11718@opindex mcall-sysv 11719On System V.4 and embedded PowerPC systems compile code using calling 11720conventions that adheres to the March 1995 draft of the System V 11721Application Binary Interface, PowerPC processor supplement. This is the 11722default unless you configured GCC using @samp{powerpc-*-eabiaix}. 11723 11724@item -mcall-sysv-eabi 11725@opindex mcall-sysv-eabi 11726Specify both @option{-mcall-sysv} and @option{-meabi} options. 11727 11728@item -mcall-sysv-noeabi 11729@opindex mcall-sysv-noeabi 11730Specify both @option{-mcall-sysv} and @option{-mno-eabi} options. 11731 11732@item -mcall-solaris 11733@opindex mcall-solaris 11734On System V.4 and embedded PowerPC systems compile code for the Solaris 11735operating system. 11736 11737@item -mcall-linux 11738@opindex mcall-linux 11739On System V.4 and embedded PowerPC systems compile code for the 11740Linux-based GNU system. 11741 11742@item -mcall-gnu 11743@opindex mcall-gnu 11744On System V.4 and embedded PowerPC systems compile code for the 11745Hurd-based GNU system. 11746 11747@item -mcall-netbsd 11748@opindex mcall-netbsd 11749On System V.4 and embedded PowerPC systems compile code for the 11750NetBSD operating system. 11751 11752@item -maix-struct-return 11753@opindex maix-struct-return 11754Return all structures in memory (as specified by the AIX ABI)@. 11755 11756@item -msvr4-struct-return 11757@opindex msvr4-struct-return 11758Return structures smaller than 8 bytes in registers (as specified by the 11759SVR4 ABI)@. 11760 11761@item -mabi=@var{abi-type} 11762@opindex mabi 11763Extend the current ABI with a particular extension, or remove such extension. 11764Valid values are @var{altivec}, @var{no-altivec}, @var{spe}, 11765@var{no-spe}, @var{ibmlongdouble}, @var{ieeelongdouble}@. 11766 11767@item -mabi=spe 11768@opindex mabi=spe 11769Extend the current ABI with SPE ABI extensions. This does not change 11770the default ABI, instead it adds the SPE ABI extensions to the current 11771ABI@. 11772 11773@item -mabi=no-spe 11774@opindex mabi=no-spe 11775Disable Booke SPE ABI extensions for the current ABI@. 11776 11777@item -mabi=ibmlongdouble 11778@opindex mabi=ibmlongdouble 11779Change the current ABI to use IBM extended precision long double. 11780This is a PowerPC 32-bit SYSV ABI option. 11781 11782@item -mabi=ieeelongdouble 11783@opindex mabi=ieeelongdouble 11784Change the current ABI to use IEEE extended precision long double. 11785This is a PowerPC 32-bit Linux ABI option. 11786 11787@item -mprototype 11788@itemx -mno-prototype 11789@opindex mprototype 11790@opindex mno-prototype 11791On System V.4 and embedded PowerPC systems assume that all calls to 11792variable argument functions are properly prototyped. Otherwise, the 11793compiler must insert an instruction before every non prototyped call to 11794set or clear bit 6 of the condition code register (@var{CR}) to 11795indicate whether floating point values were passed in the floating point 11796registers in case the function takes a variable arguments. With 11797@option{-mprototype}, only calls to prototyped variable argument functions 11798will set or clear the bit. 11799 11800@item -msim 11801@opindex msim 11802On embedded PowerPC systems, assume that the startup module is called 11803@file{sim-crt0.o} and that the standard C libraries are @file{libsim.a} and 11804@file{libc.a}. This is the default for @samp{powerpc-*-eabisim}. 11805configurations. 11806 11807@item -mmvme 11808@opindex mmvme 11809On embedded PowerPC systems, assume that the startup module is called 11810@file{crt0.o} and the standard C libraries are @file{libmvme.a} and 11811@file{libc.a}. 11812 11813@item -mads 11814@opindex mads 11815On embedded PowerPC systems, assume that the startup module is called 11816@file{crt0.o} and the standard C libraries are @file{libads.a} and 11817@file{libc.a}. 11818 11819@item -myellowknife 11820@opindex myellowknife 11821On embedded PowerPC systems, assume that the startup module is called 11822@file{crt0.o} and the standard C libraries are @file{libyk.a} and 11823@file{libc.a}. 11824 11825@item -mvxworks 11826@opindex mvxworks 11827On System V.4 and embedded PowerPC systems, specify that you are 11828compiling for a VxWorks system. 11829 11830@item -mwindiss 11831@opindex mwindiss 11832Specify that you are compiling for the WindISS simulation environment. 11833 11834@item -memb 11835@opindex memb 11836On embedded PowerPC systems, set the @var{PPC_EMB} bit in the ELF flags 11837header to indicate that @samp{eabi} extended relocations are used. 11838 11839@item -meabi 11840@itemx -mno-eabi 11841@opindex meabi 11842@opindex mno-eabi 11843On System V.4 and embedded PowerPC systems do (do not) adhere to the 11844Embedded Applications Binary Interface (eabi) which is a set of 11845modifications to the System V.4 specifications. Selecting @option{-meabi} 11846means that the stack is aligned to an 8 byte boundary, a function 11847@code{__eabi} is called to from @code{main} to set up the eabi 11848environment, and the @option{-msdata} option can use both @code{r2} and 11849@code{r13} to point to two separate small data areas. Selecting 11850@option{-mno-eabi} means that the stack is aligned to a 16 byte boundary, 11851do not call an initialization function from @code{main}, and the 11852@option{-msdata} option will only use @code{r13} to point to a single 11853small data area. The @option{-meabi} option is on by default if you 11854configured GCC using one of the @samp{powerpc*-*-eabi*} options. 11855 11856@item -msdata=eabi 11857@opindex msdata=eabi 11858On System V.4 and embedded PowerPC systems, put small initialized 11859@code{const} global and static data in the @samp{.sdata2} section, which 11860is pointed to by register @code{r2}. Put small initialized 11861non-@code{const} global and static data in the @samp{.sdata} section, 11862which is pointed to by register @code{r13}. Put small uninitialized 11863global and static data in the @samp{.sbss} section, which is adjacent to 11864the @samp{.sdata} section. The @option{-msdata=eabi} option is 11865incompatible with the @option{-mrelocatable} option. The 11866@option{-msdata=eabi} option also sets the @option{-memb} option. 11867 11868@item -msdata=sysv 11869@opindex msdata=sysv 11870On System V.4 and embedded PowerPC systems, put small global and static 11871data in the @samp{.sdata} section, which is pointed to by register 11872@code{r13}. Put small uninitialized global and static data in the 11873@samp{.sbss} section, which is adjacent to the @samp{.sdata} section. 11874The @option{-msdata=sysv} option is incompatible with the 11875@option{-mrelocatable} option. 11876 11877@item -msdata=default 11878@itemx -msdata 11879@opindex msdata=default 11880@opindex msdata 11881On System V.4 and embedded PowerPC systems, if @option{-meabi} is used, 11882compile code the same as @option{-msdata=eabi}, otherwise compile code the 11883same as @option{-msdata=sysv}. 11884 11885@item -msdata-data 11886@opindex msdata-data 11887On System V.4 and embedded PowerPC systems, put small global 11888data in the @samp{.sdata} section. Put small uninitialized global 11889data in the @samp{.sbss} section. Do not use register @code{r13} 11890to address small data however. This is the default behavior unless 11891other @option{-msdata} options are used. 11892 11893@item -msdata=none 11894@itemx -mno-sdata 11895@opindex msdata=none 11896@opindex mno-sdata 11897On embedded PowerPC systems, put all initialized global and static data 11898in the @samp{.data} section, and all uninitialized data in the 11899@samp{.bss} section. 11900 11901@item -G @var{num} 11902@opindex G 11903@cindex smaller data references (PowerPC) 11904@cindex .sdata/.sdata2 references (PowerPC) 11905On embedded PowerPC systems, put global and static items less than or 11906equal to @var{num} bytes into the small data or bss sections instead of 11907the normal data or bss section. By default, @var{num} is 8. The 11908@option{-G @var{num}} switch is also passed to the linker. 11909All modules should be compiled with the same @option{-G @var{num}} value. 11910 11911@item -mregnames 11912@itemx -mno-regnames 11913@opindex mregnames 11914@opindex mno-regnames 11915On System V.4 and embedded PowerPC systems do (do not) emit register 11916names in the assembly language output using symbolic forms. 11917 11918@item -mlongcall 11919@itemx -mno-longcall 11920@opindex mlongcall 11921@opindex mno-longcall 11922By default assume that all calls are far away so that a longer more 11923expensive calling sequence is required. This is required for calls 11924further than 32 megabytes (33,554,432 bytes) from the current location. 11925A short call will be generated if the compiler knows 11926the call cannot be that far away. This setting can be overridden by 11927the @code{shortcall} function attribute, or by @code{#pragma 11928longcall(0)}. 11929 11930Some linkers are capable of detecting out-of-range calls and generating 11931glue code on the fly. On these systems, long calls are unnecessary and 11932generate slower code. As of this writing, the AIX linker can do this, 11933as can the GNU linker for PowerPC/64. It is planned to add this feature 11934to the GNU linker for 32-bit PowerPC systems as well. 11935 11936On Darwin/PPC systems, @code{#pragma longcall} will generate ``jbsr 11937callee, L42'', plus a ``branch island'' (glue code). The two target 11938addresses represent the callee and the ``branch island''. The 11939Darwin/PPC linker will prefer the first address and generate a ``bl 11940callee'' if the PPC ``bl'' instruction will reach the callee directly; 11941otherwise, the linker will generate ``bl L42'' to call the ``branch 11942island''. The ``branch island'' is appended to the body of the 11943calling function; it computes the full 32-bit address of the callee 11944and jumps to it. 11945 11946On Mach-O (Darwin) systems, this option directs the compiler emit to 11947the glue for every direct call, and the Darwin linker decides whether 11948to use or discard it. 11949 11950In the future, we may cause GCC to ignore all longcall specifications 11951when the linker is known to generate glue. 11952 11953@item -pthread 11954@opindex pthread 11955Adds support for multithreading with the @dfn{pthreads} library. 11956This option sets flags for both the preprocessor and linker. 11957 11958@end table 11959 11960@node S/390 and zSeries Options 11961@subsection S/390 and zSeries Options 11962@cindex S/390 and zSeries Options 11963 11964These are the @samp{-m} options defined for the S/390 and zSeries architecture. 11965 11966@table @gcctabopt 11967@item -mhard-float 11968@itemx -msoft-float 11969@opindex mhard-float 11970@opindex msoft-float 11971Use (do not use) the hardware floating-point instructions and registers 11972for floating-point operations. When @option{-msoft-float} is specified, 11973functions in @file{libgcc.a} will be used to perform floating-point 11974operations. When @option{-mhard-float} is specified, the compiler 11975generates IEEE floating-point instructions. This is the default. 11976 11977@item -mlong-double-64 11978@itemx -mlong-double-128 11979@opindex mlong-double-64 11980@opindex mlong-double-128 11981These switches control the size of @code{long double} type. A size 11982of 64bit makes the @code{long double} type equivalent to the @code{double} 11983type. This is the default. 11984 11985@item -mbackchain 11986@itemx -mno-backchain 11987@opindex mbackchain 11988@opindex mno-backchain 11989Store (do not store) the address of the caller's frame as backchain pointer 11990into the callee's stack frame. 11991A backchain may be needed to allow debugging using tools that do not understand 11992DWARF-2 call frame information. 11993When @option{-mno-packed-stack} is in effect, the backchain pointer is stored 11994at the bottom of the stack frame; when @option{-mpacked-stack} is in effect, 11995the backchain is placed into the topmost word of the 96/160 byte register 11996save area. 11997 11998In general, code compiled with @option{-mbackchain} is call-compatible with 11999code compiled with @option{-mmo-backchain}; however, use of the backchain 12000for debugging purposes usually requires that the whole binary is built with 12001@option{-mbackchain}. Note that the combination of @option{-mbackchain}, 12002@option{-mpacked-stack} and @option{-mhard-float} is not supported. In order 12003to build a linux kernel use @option{-msoft-float}. 12004 12005The default is to not maintain the backchain. 12006 12007@item -mpacked-stack 12008@item -mno-packed-stack 12009@opindex mpacked-stack 12010@opindex mno-packed-stack 12011Use (do not use) the packed stack layout. When @option{-mno-packed-stack} is 12012specified, the compiler uses the all fields of the 96/160 byte register save 12013area only for their default purpose; unused fields still take up stack space. 12014When @option{-mpacked-stack} is specified, register save slots are densely 12015packed at the top of the register save area; unused space is reused for other 12016purposes, allowing for more efficient use of the available stack space. 12017However, when @option{-mbackchain} is also in effect, the topmost word of 12018the save area is always used to store the backchain, and the return address 12019register is always saved two words below the backchain. 12020 12021As long as the stack frame backchain is not used, code generated with 12022@option{-mpacked-stack} is call-compatible with code generated with 12023@option{-mno-packed-stack}. Note that some non-FSF releases of GCC 2.95 for 12024S/390 or zSeries generated code that uses the stack frame backchain at run 12025time, not just for debugging purposes. Such code is not call-compatible 12026with code compiled with @option{-mpacked-stack}. Also, note that the 12027combination of @option{-mbackchain}, 12028@option{-mpacked-stack} and @option{-mhard-float} is not supported. In order 12029to build a linux kernel use @option{-msoft-float}. 12030 12031The default is to not use the packed stack layout. 12032 12033@item -msmall-exec 12034@itemx -mno-small-exec 12035@opindex msmall-exec 12036@opindex mno-small-exec 12037Generate (or do not generate) code using the @code{bras} instruction 12038to do subroutine calls. 12039This only works reliably if the total executable size does not 12040exceed 64k. The default is to use the @code{basr} instruction instead, 12041which does not have this limitation. 12042 12043@item -m64 12044@itemx -m31 12045@opindex m64 12046@opindex m31 12047When @option{-m31} is specified, generate code compliant to the 12048GNU/Linux for S/390 ABI@. When @option{-m64} is specified, generate 12049code compliant to the GNU/Linux for zSeries ABI@. This allows GCC in 12050particular to generate 64-bit instructions. For the @samp{s390} 12051targets, the default is @option{-m31}, while the @samp{s390x} 12052targets default to @option{-m64}. 12053 12054@item -mzarch 12055@itemx -mesa 12056@opindex mzarch 12057@opindex mesa 12058When @option{-mzarch} is specified, generate code using the 12059instructions available on z/Architecture. 12060When @option{-mesa} is specified, generate code using the 12061instructions available on ESA/390. Note that @option{-mesa} is 12062not possible with @option{-m64}. 12063When generating code compliant to the GNU/Linux for S/390 ABI, 12064the default is @option{-mesa}. When generating code compliant 12065to the GNU/Linux for zSeries ABI, the default is @option{-mzarch}. 12066 12067@item -mmvcle 12068@itemx -mno-mvcle 12069@opindex mmvcle 12070@opindex mno-mvcle 12071Generate (or do not generate) code using the @code{mvcle} instruction 12072to perform block moves. When @option{-mno-mvcle} is specified, 12073use a @code{mvc} loop instead. This is the default unless optimizing for 12074size. 12075 12076@item -mdebug 12077@itemx -mno-debug 12078@opindex mdebug 12079@opindex mno-debug 12080Print (or do not print) additional debug information when compiling. 12081The default is to not print debug information. 12082 12083@item -march=@var{cpu-type} 12084@opindex march 12085Generate code that will run on @var{cpu-type}, which is the name of a system 12086representing a certain processor type. Possible values for 12087@var{cpu-type} are @samp{g5}, @samp{g6}, @samp{z900}, and @samp{z990}. 12088When generating code using the instructions available on z/Architecture, 12089the default is @option{-march=z900}. Otherwise, the default is 12090@option{-march=g5}. 12091 12092@item -mtune=@var{cpu-type} 12093@opindex mtune 12094Tune to @var{cpu-type} everything applicable about the generated code, 12095except for the ABI and the set of available instructions. 12096The list of @var{cpu-type} values is the same as for @option{-march}. 12097The default is the value used for @option{-march}. 12098 12099@item -mtpf-trace 12100@itemx -mno-tpf-trace 12101@opindex mtpf-trace 12102@opindex mno-tpf-trace 12103Generate code that adds (does not add) in TPF OS specific branches to trace 12104routines in the operating system. This option is off by default, even 12105when compiling for the TPF OS@. 12106 12107@item -mfused-madd 12108@itemx -mno-fused-madd 12109@opindex mfused-madd 12110@opindex mno-fused-madd 12111Generate code that uses (does not use) the floating point multiply and 12112accumulate instructions. These instructions are generated by default if 12113hardware floating point is used. 12114 12115@item -mwarn-framesize=@var{framesize} 12116@opindex mwarn-framesize 12117Emit a warning if the current function exceeds the given frame size. Because 12118this is a compile time check it doesn't need to be a real problem when the program 12119runs. It is intended to identify functions which most probably cause 12120a stack overflow. It is useful to be used in an environment with limited stack 12121size e.g.@: the linux kernel. 12122 12123@item -mwarn-dynamicstack 12124@opindex mwarn-dynamicstack 12125Emit a warning if the function calls alloca or uses dynamically 12126sized arrays. This is generally a bad idea with a limited stack size. 12127 12128@item -mstack-guard=@var{stack-guard} 12129@item -mstack-size=@var{stack-size} 12130@opindex mstack-guard 12131@opindex mstack-size 12132These arguments always have to be used in conjunction. If they are present the s390 12133back end emits additional instructions in the function prologue which trigger a trap 12134if the stack size is @var{stack-guard} bytes above the @var{stack-size} 12135(remember that the stack on s390 grows downward). These options are intended to 12136be used to help debugging stack overflow problems. The additionally emitted code 12137causes only little overhead and hence can also be used in production like systems 12138without greater performance degradation. The given values have to be exact 12139powers of 2 and @var{stack-size} has to be greater than @var{stack-guard} without 12140exceeding 64k. 12141In order to be efficient the extra code makes the assumption that the stack starts 12142at an address aligned to the value given by @var{stack-size}. 12143@end table 12144 12145@node Score Options 12146@subsection Score Options 12147@cindex Score Options 12148 12149These options are defined for Score implementations: 12150 12151@table @gcctabopt 12152@item -meb 12153@opindex meb 12154Compile code for big endian mode. This is the default. 12155 12156@item -mel 12157@opindex mel 12158Compile code for little endian mode. 12159 12160@item -mnhwloop 12161@opindex mnhwloop 12162Disable generate bcnz instruction. 12163 12164@item -muls 12165@opindex muls 12166Enable generate unaligned load and store instruction. 12167 12168@item -mmac 12169@opindex mmac 12170Enable the use of multiply-accumulate instructions. Disabled by default. 12171 12172@item -mscore5 12173@opindex mscore5 12174Specify the SCORE5 as the target architecture. 12175 12176@item -mscore5u 12177@opindex mscore5u 12178Specify the SCORE5U of the target architecture. 12179 12180@item -mscore7 12181@opindex mscore7 12182Specify the SCORE7 as the target architecture. This is the default. 12183 12184@item -mscore7d 12185@opindex mscore7d 12186Specify the SCORE7D as the target architecture. 12187@end table 12188 12189@node SH Options 12190@subsection SH Options 12191 12192These @samp{-m} options are defined for the SH implementations: 12193 12194@table @gcctabopt 12195@item -m1 12196@opindex m1 12197Generate code for the SH1. 12198 12199@item -m2 12200@opindex m2 12201Generate code for the SH2. 12202 12203@item -m2e 12204Generate code for the SH2e. 12205 12206@item -m3 12207@opindex m3 12208Generate code for the SH3. 12209 12210@item -m3e 12211@opindex m3e 12212Generate code for the SH3e. 12213 12214@item -m4-nofpu 12215@opindex m4-nofpu 12216Generate code for the SH4 without a floating-point unit. 12217 12218@item -m4-single-only 12219@opindex m4-single-only 12220Generate code for the SH4 with a floating-point unit that only 12221supports single-precision arithmetic. 12222 12223@item -m4-single 12224@opindex m4-single 12225Generate code for the SH4 assuming the floating-point unit is in 12226single-precision mode by default. 12227 12228@item -m4 12229@opindex m4 12230Generate code for the SH4. 12231 12232@item -m4a-nofpu 12233@opindex m4a-nofpu 12234Generate code for the SH4al-dsp, or for a SH4a in such a way that the 12235floating-point unit is not used. 12236 12237@item -m4a-single-only 12238@opindex m4a-single-only 12239Generate code for the SH4a, in such a way that no double-precision 12240floating point operations are used. 12241 12242@item -m4a-single 12243@opindex m4a-single 12244Generate code for the SH4a assuming the floating-point unit is in 12245single-precision mode by default. 12246 12247@item -m4a 12248@opindex m4a 12249Generate code for the SH4a. 12250 12251@item -m4al 12252@opindex m4al 12253Same as @option{-m4a-nofpu}, except that it implicitly passes 12254@option{-dsp} to the assembler. GCC doesn't generate any DSP 12255instructions at the moment. 12256 12257@item -mb 12258@opindex mb 12259Compile code for the processor in big endian mode. 12260 12261@item -ml 12262@opindex ml 12263Compile code for the processor in little endian mode. 12264 12265@item -mdalign 12266@opindex mdalign 12267Align doubles at 64-bit boundaries. Note that this changes the calling 12268conventions, and thus some functions from the standard C library will 12269not work unless you recompile it first with @option{-mdalign}. 12270 12271@item -mrelax 12272@opindex mrelax 12273Shorten some address references at link time, when possible; uses the 12274linker option @option{-relax}. 12275 12276@item -mbigtable 12277@opindex mbigtable 12278Use 32-bit offsets in @code{switch} tables. The default is to use 1227916-bit offsets. 12280 12281@item -mfmovd 12282@opindex mfmovd 12283Enable the use of the instruction @code{fmovd}. 12284 12285@item -mhitachi 12286@opindex mhitachi 12287Comply with the calling conventions defined by Renesas. 12288 12289@item -mrenesas 12290@opindex mhitachi 12291Comply with the calling conventions defined by Renesas. 12292 12293@item -mno-renesas 12294@opindex mhitachi 12295Comply with the calling conventions defined for GCC before the Renesas 12296conventions were available. This option is the default for all 12297targets of the SH toolchain except for @samp{sh-symbianelf}. 12298 12299@item -mnomacsave 12300@opindex mnomacsave 12301Mark the @code{MAC} register as call-clobbered, even if 12302@option{-mhitachi} is given. 12303 12304@item -mieee 12305@opindex mieee 12306Increase IEEE-compliance of floating-point code. 12307At the moment, this is equivalent to @option{-fno-finite-math-only}. 12308When generating 16 bit SH opcodes, getting IEEE-conforming results for 12309comparisons of NANs / infinities incurs extra overhead in every 12310floating point comparison, therefore the default is set to 12311@option{-ffinite-math-only}. 12312 12313@item -misize 12314@opindex misize 12315Dump instruction size and location in the assembly code. 12316 12317@item -mpadstruct 12318@opindex mpadstruct 12319This option is deprecated. It pads structures to multiple of 4 bytes, 12320which is incompatible with the SH ABI@. 12321 12322@item -mspace 12323@opindex mspace 12324Optimize for space instead of speed. Implied by @option{-Os}. 12325 12326@item -mprefergot 12327@opindex mprefergot 12328When generating position-independent code, emit function calls using 12329the Global Offset Table instead of the Procedure Linkage Table. 12330 12331@item -musermode 12332@opindex musermode 12333Generate a library function call to invalidate instruction cache 12334entries, after fixing up a trampoline. This library function call 12335doesn't assume it can write to the whole memory address space. This 12336is the default when the target is @code{sh-*-linux*}. 12337 12338@item -multcost=@var{number} 12339@opindex multcost=@var{number} 12340Set the cost to assume for a multiply insn. 12341 12342@item -mdiv=@var{strategy} 12343@opindex mdiv=@var{strategy} 12344Set the division strategy to use for SHmedia code. @var{strategy} must be 12345one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l, inv:call, 12346inv:call2, inv:fp . 12347"fp" performs the operation in floating point. This has a very high latency, 12348but needs only a few instructions, so it might be a good choice if 12349your code has enough easily exploitable ILP to allow the compiler to 12350schedule the floating point instructions together with other instructions. 12351Division by zero causes a floating point exception. 12352"inv" uses integer operations to calculate the inverse of the divisor, 12353and then multiplies the dividend with the inverse. This strategy allows 12354cse and hoisting of the inverse calculation. Division by zero calculates 12355an unspecified result, but does not trap. 12356"inv:minlat" is a variant of "inv" where if no cse / hoisting opportunities 12357have been found, or if the entire operation has been hoisted to the same 12358place, the last stages of the inverse calculation are intertwined with the 12359final multiply to reduce the overall latency, at the expense of using a few 12360more instructions, and thus offering fewer scheduling opportunities with 12361other code. 12362"call" calls a library function that usually implements the inv:minlat 12363strategy. 12364This gives high code density for m5-*media-nofpu compilations. 12365"call2" uses a different entry point of the same library function, where it 12366assumes that a pointer to a lookup table has already been set up, which 12367exposes the pointer load to cse / code hoisting optimizations. 12368"inv:call", "inv:call2" and "inv:fp" all use the "inv" algorithm for initial 12369code generation, but if the code stays unoptimized, revert to the "call", 12370"call2", or "fp" strategies, respectively. Note that the 12371potentially-trapping side effect of division by zero is carried by a 12372separate instruction, so it is possible that all the integer instructions 12373are hoisted out, but the marker for the side effect stays where it is. 12374A recombination to fp operations or a call is not possible in that case. 12375"inv20u" and "inv20l" are variants of the "inv:minlat" strategy. In the case 12376that the inverse calculation was nor separated from the multiply, they speed 12377up division where the dividend fits into 20 bits (plus sign where applicable), 12378by inserting a test to skip a number of operations in this case; this test 12379slows down the case of larger dividends. inv20u assumes the case of a such 12380a small dividend to be unlikely, and inv20l assumes it to be likely. 12381 12382@item -mdivsi3_libfunc=@var{name} 12383@opindex mdivsi3_libfunc=@var{name} 12384Set the name of the library function used for 32 bit signed division to 12385@var{name}. This only affect the name used in the call and inv:call 12386division strategies, and the compiler will still expect the same 12387sets of input/output/clobbered registers as if this option was not present. 12388 12389@item -madjust-unroll 12390@opindex madjust-unroll 12391Throttle unrolling to avoid thrashing target registers. 12392This option only has an effect if the gcc code base supports the 12393TARGET_ADJUST_UNROLL_MAX target hook. 12394 12395@item -mindexed-addressing 12396@opindex mindexed-addressing 12397Enable the use of the indexed addressing mode for SHmedia32/SHcompact. 12398This is only safe if the hardware and/or OS implement 32 bit wrap-around 12399semantics for the indexed addressing mode. The architecture allows the 12400implementation of processors with 64 bit MMU, which the OS could use to 12401get 32 bit addressing, but since no current hardware implementation supports 12402this or any other way to make the indexed addressing mode safe to use in 12403the 32 bit ABI, the default is -mno-indexed-addressing. 12404 12405@item -mgettrcost=@var{number} 12406@opindex mgettrcost=@var{number} 12407Set the cost assumed for the gettr instruction to @var{number}. 12408The default is 2 if @option{-mpt-fixed} is in effect, 100 otherwise. 12409 12410@item -mpt-fixed 12411@opindex mpt-fixed 12412Assume pt* instructions won't trap. This will generally generate better 12413scheduled code, but is unsafe on current hardware. The current architecture 12414definition says that ptabs and ptrel trap when the target anded with 3 is 3. 12415This has the unintentional effect of making it unsafe to schedule ptabs / 12416ptrel before a branch, or hoist it out of a loop. For example, 12417__do_global_ctors, a part of libgcc that runs constructors at program 12418startup, calls functions in a list which is delimited by -1. With the 12419-mpt-fixed option, the ptabs will be done before testing against -1. 12420That means that all the constructors will be run a bit quicker, but when 12421the loop comes to the end of the list, the program crashes because ptabs 12422loads -1 into a target register. Since this option is unsafe for any 12423hardware implementing the current architecture specification, the default 12424is -mno-pt-fixed. Unless the user specifies a specific cost with 12425@option{-mgettrcost}, -mno-pt-fixed also implies @option{-mgettrcost=100}; 12426this deters register allocation using target registers for storing 12427ordinary integers. 12428 12429@item -minvalid-symbols 12430@opindex minvalid-symbols 12431Assume symbols might be invalid. Ordinary function symbols generated by 12432the compiler will always be valid to load with movi/shori/ptabs or 12433movi/shori/ptrel, but with assembler and/or linker tricks it is possible 12434to generate symbols that will cause ptabs / ptrel to trap. 12435This option is only meaningful when @option{-mno-pt-fixed} is in effect. 12436It will then prevent cross-basic-block cse, hoisting and most scheduling 12437of symbol loads. The default is @option{-mno-invalid-symbols}. 12438@end table 12439 12440@node SPARC Options 12441@subsection SPARC Options 12442@cindex SPARC options 12443 12444These @samp{-m} options are supported on the SPARC: 12445 12446@table @gcctabopt 12447@item -mno-app-regs 12448@itemx -mapp-regs 12449@opindex mno-app-regs 12450@opindex mapp-regs 12451Specify @option{-mapp-regs} to generate output using the global registers 124522 through 4, which the SPARC SVR4 ABI reserves for applications. This 12453is the default. 12454 12455To be fully SVR4 ABI compliant at the cost of some performance loss, 12456specify @option{-mno-app-regs}. You should compile libraries and system 12457software with this option. 12458 12459@item -mfpu 12460@itemx -mhard-float 12461@opindex mfpu 12462@opindex mhard-float 12463Generate output containing floating point instructions. This is the 12464default. 12465 12466@item -mno-fpu 12467@itemx -msoft-float 12468@opindex mno-fpu 12469@opindex msoft-float 12470Generate output containing library calls for floating point. 12471@strong{Warning:} the requisite libraries are not available for all SPARC 12472targets. Normally the facilities of the machine's usual C compiler are 12473used, but this cannot be done directly in cross-compilation. You must make 12474your own arrangements to provide suitable library functions for 12475cross-compilation. The embedded targets @samp{sparc-*-aout} and 12476@samp{sparclite-*-*} do provide software floating point support. 12477 12478@option{-msoft-float} changes the calling convention in the output file; 12479therefore, it is only useful if you compile @emph{all} of a program with 12480this option. In particular, you need to compile @file{libgcc.a}, the 12481library that comes with GCC, with @option{-msoft-float} in order for 12482this to work. 12483 12484@item -mhard-quad-float 12485@opindex mhard-quad-float 12486Generate output containing quad-word (long double) floating point 12487instructions. 12488 12489@item -msoft-quad-float 12490@opindex msoft-quad-float 12491Generate output containing library calls for quad-word (long double) 12492floating point instructions. The functions called are those specified 12493in the SPARC ABI@. This is the default. 12494 12495As of this writing, there are no SPARC implementations that have hardware 12496support for the quad-word floating point instructions. They all invoke 12497a trap handler for one of these instructions, and then the trap handler 12498emulates the effect of the instruction. Because of the trap handler overhead, 12499this is much slower than calling the ABI library routines. Thus the 12500@option{-msoft-quad-float} option is the default. 12501 12502@item -mno-unaligned-doubles 12503@itemx -munaligned-doubles 12504@opindex mno-unaligned-doubles 12505@opindex munaligned-doubles 12506Assume that doubles have 8 byte alignment. This is the default. 12507 12508With @option{-munaligned-doubles}, GCC assumes that doubles have 8 byte 12509alignment only if they are contained in another type, or if they have an 12510absolute address. Otherwise, it assumes they have 4 byte alignment. 12511Specifying this option avoids some rare compatibility problems with code 12512generated by other compilers. It is not the default because it results 12513in a performance loss, especially for floating point code. 12514 12515@item -mno-faster-structs 12516@itemx -mfaster-structs 12517@opindex mno-faster-structs 12518@opindex mfaster-structs 12519With @option{-mfaster-structs}, the compiler assumes that structures 12520should have 8 byte alignment. This enables the use of pairs of 12521@code{ldd} and @code{std} instructions for copies in structure 12522assignment, in place of twice as many @code{ld} and @code{st} pairs. 12523However, the use of this changed alignment directly violates the SPARC 12524ABI@. Thus, it's intended only for use on targets where the developer 12525acknowledges that their resulting code will not be directly in line with 12526the rules of the ABI@. 12527 12528@item -mimpure-text 12529@opindex mimpure-text 12530@option{-mimpure-text}, used in addition to @option{-shared}, tells 12531the compiler to not pass @option{-z text} to the linker when linking a 12532shared object. Using this option, you can link position-dependent 12533code into a shared object. 12534 12535@option{-mimpure-text} suppresses the ``relocations remain against 12536allocatable but non-writable sections'' linker error message. 12537However, the necessary relocations will trigger copy-on-write, and the 12538shared object is not actually shared across processes. Instead of 12539using @option{-mimpure-text}, you should compile all source code with 12540@option{-fpic} or @option{-fPIC}. 12541 12542This option is only available on SunOS and Solaris. 12543 12544@item -mcpu=@var{cpu_type} 12545@opindex mcpu 12546Set the instruction set, register set, and instruction scheduling parameters 12547for machine type @var{cpu_type}. Supported values for @var{cpu_type} are 12548@samp{v7}, @samp{cypress}, @samp{v8}, @samp{supersparc}, @samp{sparclite}, 12549@samp{f930}, @samp{f934}, @samp{hypersparc}, @samp{sparclite86x}, 12550@samp{sparclet}, @samp{tsc701}, @samp{v9}, @samp{ultrasparc}, 12551@samp{ultrasparc3}, and @samp{niagara}. 12552 12553Default instruction scheduling parameters are used for values that select 12554an architecture and not an implementation. These are @samp{v7}, @samp{v8}, 12555@samp{sparclite}, @samp{sparclet}, @samp{v9}. 12556 12557Here is a list of each supported architecture and their supported 12558implementations. 12559 12560@smallexample 12561 v7: cypress 12562 v8: supersparc, hypersparc 12563 sparclite: f930, f934, sparclite86x 12564 sparclet: tsc701 12565 v9: ultrasparc, ultrasparc3, niagara 12566@end smallexample 12567 12568By default (unless configured otherwise), GCC generates code for the V7 12569variant of the SPARC architecture. With @option{-mcpu=cypress}, the compiler 12570additionally optimizes it for the Cypress CY7C602 chip, as used in the 12571SPARCStation/SPARCServer 3xx series. This is also appropriate for the older 12572SPARCStation 1, 2, IPX etc. 12573 12574With @option{-mcpu=v8}, GCC generates code for the V8 variant of the SPARC 12575architecture. The only difference from V7 code is that the compiler emits 12576the integer multiply and integer divide instructions which exist in SPARC-V8 12577but not in SPARC-V7. With @option{-mcpu=supersparc}, the compiler additionally 12578optimizes it for the SuperSPARC chip, as used in the SPARCStation 10, 1000 and 125792000 series. 12580 12581With @option{-mcpu=sparclite}, GCC generates code for the SPARClite variant of 12582the SPARC architecture. This adds the integer multiply, integer divide step 12583and scan (@code{ffs}) instructions which exist in SPARClite but not in SPARC-V7. 12584With @option{-mcpu=f930}, the compiler additionally optimizes it for the 12585Fujitsu MB86930 chip, which is the original SPARClite, with no FPU@. With 12586@option{-mcpu=f934}, the compiler additionally optimizes it for the Fujitsu 12587MB86934 chip, which is the more recent SPARClite with FPU@. 12588 12589With @option{-mcpu=sparclet}, GCC generates code for the SPARClet variant of 12590the SPARC architecture. This adds the integer multiply, multiply/accumulate, 12591integer divide step and scan (@code{ffs}) instructions which exist in SPARClet 12592but not in SPARC-V7. With @option{-mcpu=tsc701}, the compiler additionally 12593optimizes it for the TEMIC SPARClet chip. 12594 12595With @option{-mcpu=v9}, GCC generates code for the V9 variant of the SPARC 12596architecture. This adds 64-bit integer and floating-point move instructions, 125973 additional floating-point condition code registers and conditional move 12598instructions. With @option{-mcpu=ultrasparc}, the compiler additionally 12599optimizes it for the Sun UltraSPARC I/II/IIi chips. With 12600@option{-mcpu=ultrasparc3}, the compiler additionally optimizes it for the 12601Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ chips. With 12602@option{-mcpu=niagara}, the compiler additionally optimizes it for 12603Sun UltraSPARC T1 chips. 12604 12605@item -mtune=@var{cpu_type} 12606@opindex mtune 12607Set the instruction scheduling parameters for machine type 12608@var{cpu_type}, but do not set the instruction set or register set that the 12609option @option{-mcpu=@var{cpu_type}} would. 12610 12611The same values for @option{-mcpu=@var{cpu_type}} can be used for 12612@option{-mtune=@var{cpu_type}}, but the only useful values are those 12613that select a particular cpu implementation. Those are @samp{cypress}, 12614@samp{supersparc}, @samp{hypersparc}, @samp{f930}, @samp{f934}, 12615@samp{sparclite86x}, @samp{tsc701}, @samp{ultrasparc}, 12616@samp{ultrasparc3}, and @samp{niagara}. 12617 12618@item -mv8plus 12619@itemx -mno-v8plus 12620@opindex mv8plus 12621@opindex mno-v8plus 12622With @option{-mv8plus}, GCC generates code for the SPARC-V8+ ABI@. The 12623difference from the V8 ABI is that the global and out registers are 12624considered 64-bit wide. This is enabled by default on Solaris in 32-bit 12625mode for all SPARC-V9 processors. 12626 12627@item -mvis 12628@itemx -mno-vis 12629@opindex mvis 12630@opindex mno-vis 12631With @option{-mvis}, GCC generates code that takes advantage of the UltraSPARC 12632Visual Instruction Set extensions. The default is @option{-mno-vis}. 12633@end table 12634 12635These @samp{-m} options are supported in addition to the above 12636on SPARC-V9 processors in 64-bit environments: 12637 12638@table @gcctabopt 12639@item -mlittle-endian 12640@opindex mlittle-endian 12641Generate code for a processor running in little-endian mode. It is only 12642available for a few configurations and most notably not on Solaris and Linux. 12643 12644@item -m32 12645@itemx -m64 12646@opindex m32 12647@opindex m64 12648Generate code for a 32-bit or 64-bit environment. 12649The 32-bit environment sets int, long and pointer to 32 bits. 12650The 64-bit environment sets int to 32 bits and long and pointer 12651to 64 bits. 12652 12653@item -mcmodel=medlow 12654@opindex mcmodel=medlow 12655Generate code for the Medium/Low code model: 64-bit addresses, programs 12656must be linked in the low 32 bits of memory. Programs can be statically 12657or dynamically linked. 12658 12659@item -mcmodel=medmid 12660@opindex mcmodel=medmid 12661Generate code for the Medium/Middle code model: 64-bit addresses, programs 12662must be linked in the low 44 bits of memory, the text and data segments must 12663be less than 2GB in size and the data segment must be located within 2GB of 12664the text segment. 12665 12666@item -mcmodel=medany 12667@opindex mcmodel=medany 12668Generate code for the Medium/Anywhere code model: 64-bit addresses, programs 12669may be linked anywhere in memory, the text and data segments must be less 12670than 2GB in size and the data segment must be located within 2GB of the 12671text segment. 12672 12673@item -mcmodel=embmedany 12674@opindex mcmodel=embmedany 12675Generate code for the Medium/Anywhere code model for embedded systems: 1267664-bit addresses, the text and data segments must be less than 2GB in 12677size, both starting anywhere in memory (determined at link time). The 12678global register %g4 points to the base of the data segment. Programs 12679are statically linked and PIC is not supported. 12680 12681@item -mstack-bias 12682@itemx -mno-stack-bias 12683@opindex mstack-bias 12684@opindex mno-stack-bias 12685With @option{-mstack-bias}, GCC assumes that the stack pointer, and 12686frame pointer if present, are offset by @minus{}2047 which must be added back 12687when making stack frame references. This is the default in 64-bit mode. 12688Otherwise, assume no such offset is present. 12689@end table 12690 12691These switches are supported in addition to the above on Solaris: 12692 12693@table @gcctabopt 12694@item -threads 12695@opindex threads 12696Add support for multithreading using the Solaris threads library. This 12697option sets flags for both the preprocessor and linker. This option does 12698not affect the thread safety of object code produced by the compiler or 12699that of libraries supplied with it. 12700 12701@item -pthreads 12702@opindex pthreads 12703Add support for multithreading using the POSIX threads library. This 12704option sets flags for both the preprocessor and linker. This option does 12705not affect the thread safety of object code produced by the compiler or 12706that of libraries supplied with it. 12707 12708@item -pthread 12709@opindex pthread 12710This is a synonym for @option{-pthreads}. 12711@end table 12712 12713@node System V Options 12714@subsection Options for System V 12715 12716These additional options are available on System V Release 4 for 12717compatibility with other compilers on those systems: 12718 12719@table @gcctabopt 12720@item -G 12721@opindex G 12722Create a shared object. 12723It is recommended that @option{-symbolic} or @option{-shared} be used instead. 12724 12725@item -Qy 12726@opindex Qy 12727Identify the versions of each tool used by the compiler, in a 12728@code{.ident} assembler directive in the output. 12729 12730@item -Qn 12731@opindex Qn 12732Refrain from adding @code{.ident} directives to the output file (this is 12733the default). 12734 12735@item -YP,@var{dirs} 12736@opindex YP 12737Search the directories @var{dirs}, and no others, for libraries 12738specified with @option{-l}. 12739 12740@item -Ym,@var{dir} 12741@opindex Ym 12742Look in the directory @var{dir} to find the M4 preprocessor. 12743The assembler uses this option. 12744@c This is supposed to go with a -Yd for predefined M4 macro files, but 12745@c the generic assembler that comes with Solaris takes just -Ym. 12746@end table 12747 12748@node TMS320C3x/C4x Options 12749@subsection TMS320C3x/C4x Options 12750@cindex TMS320C3x/C4x Options 12751 12752These @samp{-m} options are defined for TMS320C3x/C4x implementations: 12753 12754@table @gcctabopt 12755 12756@item -mcpu=@var{cpu_type} 12757@opindex mcpu 12758Set the instruction set, register set, and instruction scheduling 12759parameters for machine type @var{cpu_type}. Supported values for 12760@var{cpu_type} are @samp{c30}, @samp{c31}, @samp{c32}, @samp{c40}, and 12761@samp{c44}. The default is @samp{c40} to generate code for the 12762TMS320C40. 12763 12764@item -mbig-memory 12765@itemx -mbig 12766@itemx -msmall-memory 12767@itemx -msmall 12768@opindex mbig-memory 12769@opindex mbig 12770@opindex msmall-memory 12771@opindex msmall 12772Generates code for the big or small memory model. The small memory 12773model assumed that all data fits into one 64K word page. At run-time 12774the data page (DP) register must be set to point to the 64K page 12775containing the .bss and .data program sections. The big memory model is 12776the default and requires reloading of the DP register for every direct 12777memory access. 12778 12779@item -mbk 12780@itemx -mno-bk 12781@opindex mbk 12782@opindex mno-bk 12783Allow (disallow) allocation of general integer operands into the block 12784count register BK@. 12785 12786@item -mdb 12787@itemx -mno-db 12788@opindex mdb 12789@opindex mno-db 12790Enable (disable) generation of code using decrement and branch, 12791DBcond(D), instructions. This is enabled by default for the C4x. To be 12792on the safe side, this is disabled for the C3x, since the maximum 12793iteration count on the C3x is @math{2^{23} + 1} (but who iterates loops more than 12794@math{2^{23}} times on the C3x?). Note that GCC will try to reverse a loop so 12795that it can utilize the decrement and branch instruction, but will give 12796up if there is more than one memory reference in the loop. Thus a loop 12797where the loop counter is decremented can generate slightly more 12798efficient code, in cases where the RPTB instruction cannot be utilized. 12799 12800@item -mdp-isr-reload 12801@itemx -mparanoid 12802@opindex mdp-isr-reload 12803@opindex mparanoid 12804Force the DP register to be saved on entry to an interrupt service 12805routine (ISR), reloaded to point to the data section, and restored on 12806exit from the ISR@. This should not be required unless someone has 12807violated the small memory model by modifying the DP register, say within 12808an object library. 12809 12810@item -mmpyi 12811@itemx -mno-mpyi 12812@opindex mmpyi 12813@opindex mno-mpyi 12814For the C3x use the 24-bit MPYI instruction for integer multiplies 12815instead of a library call to guarantee 32-bit results. Note that if one 12816of the operands is a constant, then the multiplication will be performed 12817using shifts and adds. If the @option{-mmpyi} option is not specified for the C3x, 12818then squaring operations are performed inline instead of a library call. 12819 12820@item -mfast-fix 12821@itemx -mno-fast-fix 12822@opindex mfast-fix 12823@opindex mno-fast-fix 12824The C3x/C4x FIX instruction to convert a floating point value to an 12825integer value chooses the nearest integer less than or equal to the 12826floating point value rather than to the nearest integer. Thus if the 12827floating point number is negative, the result will be incorrectly 12828truncated an additional code is necessary to detect and correct this 12829case. This option can be used to disable generation of the additional 12830code required to correct the result. 12831 12832@item -mrptb 12833@itemx -mno-rptb 12834@opindex mrptb 12835@opindex mno-rptb 12836Enable (disable) generation of repeat block sequences using the RPTB 12837instruction for zero overhead looping. The RPTB construct is only used 12838for innermost loops that do not call functions or jump across the loop 12839boundaries. There is no advantage having nested RPTB loops due to the 12840overhead required to save and restore the RC, RS, and RE registers. 12841This is enabled by default with @option{-O2}. 12842 12843@item -mrpts=@var{count} 12844@itemx -mno-rpts 12845@opindex mrpts 12846@opindex mno-rpts 12847Enable (disable) the use of the single instruction repeat instruction 12848RPTS@. If a repeat block contains a single instruction, and the loop 12849count can be guaranteed to be less than the value @var{count}, GCC will 12850emit a RPTS instruction instead of a RPTB@. If no value is specified, 12851then a RPTS will be emitted even if the loop count cannot be determined 12852at compile time. Note that the repeated instruction following RPTS does 12853not have to be reloaded from memory each iteration, thus freeing up the 12854CPU buses for operands. However, since interrupts are blocked by this 12855instruction, it is disabled by default. 12856 12857@item -mloop-unsigned 12858@itemx -mno-loop-unsigned 12859@opindex mloop-unsigned 12860@opindex mno-loop-unsigned 12861The maximum iteration count when using RPTS and RPTB (and DB on the C40) 12862is @math{2^{31} + 1} since these instructions test if the iteration count is 12863negative to terminate the loop. If the iteration count is unsigned 12864there is a possibility than the @math{2^{31} + 1} maximum iteration count may be 12865exceeded. This switch allows an unsigned iteration count. 12866 12867@item -mti 12868@opindex mti 12869Try to emit an assembler syntax that the TI assembler (asm30) is happy 12870with. This also enforces compatibility with the API employed by the TI 12871C3x C compiler. For example, long doubles are passed as structures 12872rather than in floating point registers. 12873 12874@item -mregparm 12875@itemx -mmemparm 12876@opindex mregparm 12877@opindex mmemparm 12878Generate code that uses registers (stack) for passing arguments to functions. 12879By default, arguments are passed in registers where possible rather 12880than by pushing arguments on to the stack. 12881 12882@item -mparallel-insns 12883@itemx -mno-parallel-insns 12884@opindex mparallel-insns 12885@opindex mno-parallel-insns 12886Allow the generation of parallel instructions. This is enabled by 12887default with @option{-O2}. 12888 12889@item -mparallel-mpy 12890@itemx -mno-parallel-mpy 12891@opindex mparallel-mpy 12892@opindex mno-parallel-mpy 12893Allow the generation of MPY||ADD and MPY||SUB parallel instructions, 12894provided @option{-mparallel-insns} is also specified. These instructions have 12895tight register constraints which can pessimize the code generation 12896of large functions. 12897 12898@end table 12899 12900@node V850 Options 12901@subsection V850 Options 12902@cindex V850 Options 12903 12904These @samp{-m} options are defined for V850 implementations: 12905 12906@table @gcctabopt 12907@item -mlong-calls 12908@itemx -mno-long-calls 12909@opindex mlong-calls 12910@opindex mno-long-calls 12911Treat all calls as being far away (near). If calls are assumed to be 12912far away, the compiler will always load the functions address up into a 12913register, and call indirect through the pointer. 12914 12915@item -mno-ep 12916@itemx -mep 12917@opindex mno-ep 12918@opindex mep 12919Do not optimize (do optimize) basic blocks that use the same index 12920pointer 4 or more times to copy pointer into the @code{ep} register, and 12921use the shorter @code{sld} and @code{sst} instructions. The @option{-mep} 12922option is on by default if you optimize. 12923 12924@item -mno-prolog-function 12925@itemx -mprolog-function 12926@opindex mno-prolog-function 12927@opindex mprolog-function 12928Do not use (do use) external functions to save and restore registers 12929at the prologue and epilogue of a function. The external functions 12930are slower, but use less code space if more than one function saves 12931the same number of registers. The @option{-mprolog-function} option 12932is on by default if you optimize. 12933 12934@item -mspace 12935@opindex mspace 12936Try to make the code as small as possible. At present, this just turns 12937on the @option{-mep} and @option{-mprolog-function} options. 12938 12939@item -mtda=@var{n} 12940@opindex mtda 12941Put static or global variables whose size is @var{n} bytes or less into 12942the tiny data area that register @code{ep} points to. The tiny data 12943area can hold up to 256 bytes in total (128 bytes for byte references). 12944 12945@item -msda=@var{n} 12946@opindex msda 12947Put static or global variables whose size is @var{n} bytes or less into 12948the small data area that register @code{gp} points to. The small data 12949area can hold up to 64 kilobytes. 12950 12951@item -mzda=@var{n} 12952@opindex mzda 12953Put static or global variables whose size is @var{n} bytes or less into 12954the first 32 kilobytes of memory. 12955 12956@item -mv850 12957@opindex mv850 12958Specify that the target processor is the V850. 12959 12960@item -mbig-switch 12961@opindex mbig-switch 12962Generate code suitable for big switch tables. Use this option only if 12963the assembler/linker complain about out of range branches within a switch 12964table. 12965 12966@item -mapp-regs 12967@opindex mapp-regs 12968This option will cause r2 and r5 to be used in the code generated by 12969the compiler. This setting is the default. 12970 12971@item -mno-app-regs 12972@opindex mno-app-regs 12973This option will cause r2 and r5 to be treated as fixed registers. 12974 12975@item -mv850e1 12976@opindex mv850e1 12977Specify that the target processor is the V850E1. The preprocessor 12978constants @samp{__v850e1__} and @samp{__v850e__} will be defined if 12979this option is used. 12980 12981@item -mv850e 12982@opindex mv850e 12983Specify that the target processor is the V850E@. The preprocessor 12984constant @samp{__v850e__} will be defined if this option is used. 12985 12986If neither @option{-mv850} nor @option{-mv850e} nor @option{-mv850e1} 12987are defined then a default target processor will be chosen and the 12988relevant @samp{__v850*__} preprocessor constant will be defined. 12989 12990The preprocessor constants @samp{__v850} and @samp{__v851__} are always 12991defined, regardless of which processor variant is the target. 12992 12993@item -mdisable-callt 12994@opindex mdisable-callt 12995This option will suppress generation of the CALLT instruction for the 12996v850e and v850e1 flavors of the v850 architecture. The default is 12997@option{-mno-disable-callt} which allows the CALLT instruction to be used. 12998 12999@end table 13000 13001@node VAX Options 13002@subsection VAX Options 13003@cindex VAX options 13004 13005These @samp{-m} options are defined for the VAX: 13006 13007@table @gcctabopt 13008@item -munix 13009@opindex munix 13010Do not output certain jump instructions (@code{aobleq} and so on) 13011that the Unix assembler for the VAX cannot handle across long 13012ranges. 13013 13014@item -mgnu 13015@opindex mgnu 13016Do output those jump instructions, on the assumption that you 13017will assemble with the GNU assembler. 13018 13019@item -mg 13020@opindex mg 13021Output code for g-format floating point numbers instead of d-format. 13022@end table 13023 13024@node x86-64 Options 13025@subsection x86-64 Options 13026@cindex x86-64 options 13027 13028These are listed under @xref{i386 and x86-64 Options}. 13029 13030@node Xstormy16 Options 13031@subsection Xstormy16 Options 13032@cindex Xstormy16 Options 13033 13034These options are defined for Xstormy16: 13035 13036@table @gcctabopt 13037@item -msim 13038@opindex msim 13039Choose startup files and linker script suitable for the simulator. 13040@end table 13041 13042@node Xtensa Options 13043@subsection Xtensa Options 13044@cindex Xtensa Options 13045 13046These options are supported for Xtensa targets: 13047 13048@table @gcctabopt 13049@item -mconst16 13050@itemx -mno-const16 13051@opindex mconst16 13052@opindex mno-const16 13053Enable or disable use of @code{CONST16} instructions for loading 13054constant values. The @code{CONST16} instruction is currently not a 13055standard option from Tensilica. When enabled, @code{CONST16} 13056instructions are always used in place of the standard @code{L32R} 13057instructions. The use of @code{CONST16} is enabled by default only if 13058the @code{L32R} instruction is not available. 13059 13060@item -mfused-madd 13061@itemx -mno-fused-madd 13062@opindex mfused-madd 13063@opindex mno-fused-madd 13064Enable or disable use of fused multiply/add and multiply/subtract 13065instructions in the floating-point option. This has no effect if the 13066floating-point option is not also enabled. Disabling fused multiply/add 13067and multiply/subtract instructions forces the compiler to use separate 13068instructions for the multiply and add/subtract operations. This may be 13069desirable in some cases where strict IEEE 754-compliant results are 13070required: the fused multiply add/subtract instructions do not round the 13071intermediate result, thereby producing results with @emph{more} bits of 13072precision than specified by the IEEE standard. Disabling fused multiply 13073add/subtract instructions also ensures that the program output is not 13074sensitive to the compiler's ability to combine multiply and add/subtract 13075operations. 13076 13077@item -mtext-section-literals 13078@itemx -mno-text-section-literals 13079@opindex mtext-section-literals 13080@opindex mno-text-section-literals 13081Control the treatment of literal pools. The default is 13082@option{-mno-text-section-literals}, which places literals in a separate 13083section in the output file. This allows the literal pool to be placed 13084in a data RAM/ROM, and it also allows the linker to combine literal 13085pools from separate object files to remove redundant literals and 13086improve code size. With @option{-mtext-section-literals}, the literals 13087are interspersed in the text section in order to keep them as close as 13088possible to their references. This may be necessary for large assembly 13089files. 13090 13091@item -mtarget-align 13092@itemx -mno-target-align 13093@opindex mtarget-align 13094@opindex mno-target-align 13095When this option is enabled, GCC instructs the assembler to 13096automatically align instructions to reduce branch penalties at the 13097expense of some code density. The assembler attempts to widen density 13098instructions to align branch targets and the instructions following call 13099instructions. If there are not enough preceding safe density 13100instructions to align a target, no widening will be performed. The 13101default is @option{-mtarget-align}. These options do not affect the 13102treatment of auto-aligned instructions like @code{LOOP}, which the 13103assembler will always align, either by widening density instructions or 13104by inserting no-op instructions. 13105 13106@item -mlongcalls 13107@itemx -mno-longcalls 13108@opindex mlongcalls 13109@opindex mno-longcalls 13110When this option is enabled, GCC instructs the assembler to translate 13111direct calls to indirect calls unless it can determine that the target 13112of a direct call is in the range allowed by the call instruction. This 13113translation typically occurs for calls to functions in other source 13114files. Specifically, the assembler translates a direct @code{CALL} 13115instruction into an @code{L32R} followed by a @code{CALLX} instruction. 13116The default is @option{-mno-longcalls}. This option should be used in 13117programs where the call target can potentially be out of range. This 13118option is implemented in the assembler, not the compiler, so the 13119assembly code generated by GCC will still show direct call 13120instructions---look at the disassembled object code to see the actual 13121instructions. Note that the assembler will use an indirect call for 13122every cross-file call, not just those that really will be out of range. 13123@end table 13124 13125@node zSeries Options 13126@subsection zSeries Options 13127@cindex zSeries options 13128 13129These are listed under @xref{S/390 and zSeries Options}. 13130 13131@node Code Gen Options 13132@section Options for Code Generation Conventions 13133@cindex code generation conventions 13134@cindex options, code generation 13135@cindex run-time options 13136 13137These machine-independent options control the interface conventions 13138used in code generation. 13139 13140Most of them have both positive and negative forms; the negative form 13141of @option{-ffoo} would be @option{-fno-foo}. In the table below, only 13142one of the forms is listed---the one which is not the default. You 13143can figure out the other form by either removing @samp{no-} or adding 13144it. 13145 13146@table @gcctabopt 13147@item -fbounds-check 13148@opindex fbounds-check 13149For front-ends that support it, generate additional code to check that 13150indices used to access arrays are within the declared range. This is 13151currently only supported by the Java and Fortran front-ends, where 13152this option defaults to true and false respectively. 13153 13154@item -ftrapv 13155@opindex ftrapv 13156This option generates traps for signed overflow on addition, subtraction, 13157multiplication operations. 13158 13159@item -fwrapv 13160@opindex fwrapv 13161This option instructs the compiler to assume that signed arithmetic 13162overflow of addition, subtraction and multiplication wraps around 13163using twos-complement representation. This flag enables some optimizations 13164and disables others. This option is enabled by default for the Java 13165front-end, as required by the Java language specification. 13166 13167@item -fexceptions 13168@opindex fexceptions 13169Enable exception handling. Generates extra code needed to propagate 13170exceptions. For some targets, this implies GCC will generate frame 13171unwind information for all functions, which can produce significant data 13172size overhead, although it does not affect execution. If you do not 13173specify this option, GCC will enable it by default for languages like 13174C++ which normally require exception handling, and disable it for 13175languages like C that do not normally require it. However, you may need 13176to enable this option when compiling C code that needs to interoperate 13177properly with exception handlers written in C++. You may also wish to 13178disable this option if you are compiling older C++ programs that don't 13179use exception handling. 13180 13181@item -fnon-call-exceptions 13182@opindex fnon-call-exceptions 13183Generate code that allows trapping instructions to throw exceptions. 13184Note that this requires platform-specific runtime support that does 13185not exist everywhere. Moreover, it only allows @emph{trapping} 13186instructions to throw exceptions, i.e.@: memory references or floating 13187point instructions. It does not allow exceptions to be thrown from 13188arbitrary signal handlers such as @code{SIGALRM}. 13189 13190@item -funwind-tables 13191@opindex funwind-tables 13192Similar to @option{-fexceptions}, except that it will just generate any needed 13193static data, but will not affect the generated code in any other way. 13194You will normally not enable this option; instead, a language processor 13195that needs this handling would enable it on your behalf. 13196 13197@item -fasynchronous-unwind-tables 13198@opindex fasynchronous-unwind-tables 13199Generate unwind table in dwarf2 format, if supported by target machine. The 13200table is exact at each instruction boundary, so it can be used for stack 13201unwinding from asynchronous events (such as debugger or garbage collector). 13202 13203@item -fpcc-struct-return 13204@opindex fpcc-struct-return 13205Return ``short'' @code{struct} and @code{union} values in memory like 13206longer ones, rather than in registers. This convention is less 13207efficient, but it has the advantage of allowing intercallability between 13208GCC-compiled files and files compiled with other compilers, particularly 13209the Portable C Compiler (pcc). 13210 13211The precise convention for returning structures in memory depends 13212on the target configuration macros. 13213 13214Short structures and unions are those whose size and alignment match 13215that of some integer type. 13216 13217@strong{Warning:} code compiled with the @option{-fpcc-struct-return} 13218switch is not binary compatible with code compiled with the 13219@option{-freg-struct-return} switch. 13220Use it to conform to a non-default application binary interface. 13221 13222@item -freg-struct-return 13223@opindex freg-struct-return 13224Return @code{struct} and @code{union} values in registers when possible. 13225This is more efficient for small structures than 13226@option{-fpcc-struct-return}. 13227 13228If you specify neither @option{-fpcc-struct-return} nor 13229@option{-freg-struct-return}, GCC defaults to whichever convention is 13230standard for the target. If there is no standard convention, GCC 13231defaults to @option{-fpcc-struct-return}, except on targets where GCC is 13232the principal compiler. In those cases, we can choose the standard, and 13233we chose the more efficient register return alternative. 13234 13235@strong{Warning:} code compiled with the @option{-freg-struct-return} 13236switch is not binary compatible with code compiled with the 13237@option{-fpcc-struct-return} switch. 13238Use it to conform to a non-default application binary interface. 13239 13240@item -fshort-enums 13241@opindex fshort-enums 13242Allocate to an @code{enum} type only as many bytes as it needs for the 13243declared range of possible values. Specifically, the @code{enum} type 13244will be equivalent to the smallest integer type which has enough room. 13245 13246@strong{Warning:} the @option{-fshort-enums} switch causes GCC to generate 13247code that is not binary compatible with code generated without that switch. 13248Use it to conform to a non-default application binary interface. 13249 13250@item -fshort-double 13251@opindex fshort-double 13252Use the same size for @code{double} as for @code{float}. 13253 13254@strong{Warning:} the @option{-fshort-double} switch causes GCC to generate 13255code that is not binary compatible with code generated without that switch. 13256Use it to conform to a non-default application binary interface. 13257 13258@item -fshort-wchar 13259@opindex fshort-wchar 13260Override the underlying type for @samp{wchar_t} to be @samp{short 13261unsigned int} instead of the default for the target. This option is 13262useful for building programs to run under WINE@. 13263 13264@strong{Warning:} the @option{-fshort-wchar} switch causes GCC to generate 13265code that is not binary compatible with code generated without that switch. 13266Use it to conform to a non-default application binary interface. 13267 13268@item -fno-common 13269@opindex fno-common 13270In C, allocate even uninitialized global variables in the data section of the 13271object file, rather than generating them as common blocks. This has the 13272effect that if the same variable is declared (without @code{extern}) in 13273two different compilations, you will get an error when you link them. 13274The only reason this might be useful is if you wish to verify that the 13275program will work on other systems which always work this way. 13276 13277@item -fno-ident 13278@opindex fno-ident 13279Ignore the @samp{#ident} directive. 13280 13281@item -finhibit-size-directive 13282@opindex finhibit-size-directive 13283Don't output a @code{.size} assembler directive, or anything else that 13284would cause trouble if the function is split in the middle, and the 13285two halves are placed at locations far apart in memory. This option is 13286used when compiling @file{crtstuff.c}; you should not need to use it 13287for anything else. 13288 13289@item -fverbose-asm 13290@opindex fverbose-asm 13291Put extra commentary information in the generated assembly code to 13292make it more readable. This option is generally only of use to those 13293who actually need to read the generated assembly code (perhaps while 13294debugging the compiler itself). 13295 13296@option{-fno-verbose-asm}, the default, causes the 13297extra information to be omitted and is useful when comparing two assembler 13298files. 13299 13300@item -fpic 13301@opindex fpic 13302@cindex global offset table 13303@cindex PIC 13304Generate position-independent code (PIC) suitable for use in a shared 13305library, if supported for the target machine. Such code accesses all 13306constant addresses through a global offset table (GOT)@. The dynamic 13307loader resolves the GOT entries when the program starts (the dynamic 13308loader is not part of GCC; it is part of the operating system). If 13309the GOT size for the linked executable exceeds a machine-specific 13310maximum size, you get an error message from the linker indicating that 13311@option{-fpic} does not work; in that case, recompile with @option{-fPIC} 13312instead. (These maximums are 8k on the SPARC and 32k 13313on the m68k and RS/6000. The 386 has no such limit.) 13314 13315Position-independent code requires special support, and therefore works 13316only on certain machines. For the 386, GCC supports PIC for System V 13317but not for the Sun 386i. Code generated for the IBM RS/6000 is always 13318position-independent. 13319 13320When this flag is set, the macros @code{__pic__} and @code{__PIC__} 13321are defined to 1. 13322 13323@item -fPIC 13324@opindex fPIC 13325If supported for the target machine, emit position-independent code, 13326suitable for dynamic linking and avoiding any limit on the size of the 13327global offset table. This option makes a difference on the m68k, 13328PowerPC and SPARC@. 13329 13330Position-independent code requires special support, and therefore works 13331only on certain machines. 13332 13333When this flag is set, the macros @code{__pic__} and @code{__PIC__} 13334are defined to 2. 13335 13336@item -fpie 13337@itemx -fPIE 13338@opindex fpie 13339@opindex fPIE 13340These options are similar to @option{-fpic} and @option{-fPIC}, but 13341generated position independent code can be only linked into executables. 13342Usually these options are used when @option{-pie} GCC option will be 13343used during linking. 13344 13345@item -fno-jump-tables 13346@opindex fno-jump-tables 13347Do not use jump tables for switch statements even where it would be 13348more efficient than other code generation strategies. This option is 13349of use in conjunction with @option{-fpic} or @option{-fPIC} for 13350building code which forms part of a dynamic linker and cannot 13351reference the address of a jump table. On some targets, jump tables 13352do not require a GOT and this option is not needed. 13353 13354@item -ffixed-@var{reg} 13355@opindex ffixed 13356Treat the register named @var{reg} as a fixed register; generated code 13357should never refer to it (except perhaps as a stack pointer, frame 13358pointer or in some other fixed role). 13359 13360@var{reg} must be the name of a register. The register names accepted 13361are machine-specific and are defined in the @code{REGISTER_NAMES} 13362macro in the machine description macro file. 13363 13364This flag does not have a negative form, because it specifies a 13365three-way choice. 13366 13367@item -fcall-used-@var{reg} 13368@opindex fcall-used 13369Treat the register named @var{reg} as an allocable register that is 13370clobbered by function calls. It may be allocated for temporaries or 13371variables that do not live across a call. Functions compiled this way 13372will not save and restore the register @var{reg}. 13373 13374It is an error to used this flag with the frame pointer or stack pointer. 13375Use of this flag for other registers that have fixed pervasive roles in 13376the machine's execution model will produce disastrous results. 13377 13378This flag does not have a negative form, because it specifies a 13379three-way choice. 13380 13381@item -fcall-saved-@var{reg} 13382@opindex fcall-saved 13383Treat the register named @var{reg} as an allocable register saved by 13384functions. It may be allocated even for temporaries or variables that 13385live across a call. Functions compiled this way will save and restore 13386the register @var{reg} if they use it. 13387 13388It is an error to used this flag with the frame pointer or stack pointer. 13389Use of this flag for other registers that have fixed pervasive roles in 13390the machine's execution model will produce disastrous results. 13391 13392A different sort of disaster will result from the use of this flag for 13393a register in which function values may be returned. 13394 13395This flag does not have a negative form, because it specifies a 13396three-way choice. 13397 13398@item -fpack-struct[=@var{n}] 13399@opindex fpack-struct 13400Without a value specified, pack all structure members together without 13401holes. When a value is specified (which must be a small power of two), pack 13402structure members according to this value, representing the maximum 13403alignment (that is, objects with default alignment requirements larger than 13404this will be output potentially unaligned at the next fitting location. 13405 13406@strong{Warning:} the @option{-fpack-struct} switch causes GCC to generate 13407code that is not binary compatible with code generated without that switch. 13408Additionally, it makes the code suboptimal. 13409Use it to conform to a non-default application binary interface. 13410 13411@item -finstrument-functions 13412@opindex finstrument-functions 13413Generate instrumentation calls for entry and exit to functions. Just 13414after function entry and just before function exit, the following 13415profiling functions will be called with the address of the current 13416function and its call site. (On some platforms, 13417@code{__builtin_return_address} does not work beyond the current 13418function, so the call site information may not be available to the 13419profiling functions otherwise.) 13420 13421@smallexample 13422void __cyg_profile_func_enter (void *this_fn, 13423 void *call_site); 13424void __cyg_profile_func_exit (void *this_fn, 13425 void *call_site); 13426@end smallexample 13427 13428The first argument is the address of the start of the current function, 13429which may be looked up exactly in the symbol table. 13430 13431This instrumentation is also done for functions expanded inline in other 13432functions. The profiling calls will indicate where, conceptually, the 13433inline function is entered and exited. This means that addressable 13434versions of such functions must be available. If all your uses of a 13435function are expanded inline, this may mean an additional expansion of 13436code size. If you use @samp{extern inline} in your C code, an 13437addressable version of such functions must be provided. (This is 13438normally the case anyways, but if you get lucky and the optimizer always 13439expands the functions inline, you might have gotten away without 13440providing static copies.) 13441 13442A function may be given the attribute @code{no_instrument_function}, in 13443which case this instrumentation will not be done. This can be used, for 13444example, for the profiling functions listed above, high-priority 13445interrupt routines, and any functions from which the profiling functions 13446cannot safely be called (perhaps signal handlers, if the profiling 13447routines generate output or allocate memory). 13448 13449@item -finstrument-functions-exclude-file-list=@var{file},@var{file},@dots{} 13450@opindex finstrument-functions-exclude-file-list 13451 13452Set the list of functions that are excluded from instrumentation (see 13453the description of @code{-finstrument-functions}). If the file that 13454contains a function definition matches with one of @var{file}, then 13455that function is not instrumented. The match is done on substrings: 13456if the @var{file} parameter is a substring of the file name, it is 13457considered to be a match. 13458 13459For example, 13460@code{-finstrument-functions-exclude-file-list=/bits/stl,include/sys} 13461will exclude any inline function defined in files whose pathnames 13462contain @code{/bits/stl} or @code{include/sys}. 13463 13464If, for some reason, you want to include letter @code{','} in one of 13465@var{sym}, write @code{'\,'}. For example, 13466@code{-finstrument-functions-exclude-file-list='\,\,tmp'} 13467(note the single quote surrounding the option). 13468 13469@item -finstrument-functions-exclude-function-list=@var{sym},@var{sym},@dots{} 13470@opindex finstrument-functions-exclude-function-list 13471 13472This is similar to @code{-finstrument-functions-exclude-file-list}, 13473but this option sets the list of function names to be excluded from 13474instrumentation. The function name to be matched is its user-visible 13475name, such as @code{vector<int> blah(const vector<int> &)}, not the 13476internal mangled name (e.g., @code{_Z4blahRSt6vectorIiSaIiEE}). The 13477match is done on substrings: if the @var{sym} parameter is a substring 13478of the function name, it is considered to be a match. 13479 13480@item -fstack-check 13481@opindex fstack-check 13482Generate code to verify that you do not go beyond the boundary of the 13483stack. You should specify this flag if you are running in an 13484environment with multiple threads, but only rarely need to specify it in 13485a single-threaded environment since stack overflow is automatically 13486detected on nearly all systems if there is only one stack. 13487 13488Note that this switch does not actually cause checking to be done; the 13489operating system must do that. The switch causes generation of code 13490to ensure that the operating system sees the stack being extended. 13491 13492@item -fstack-limit-register=@var{reg} 13493@itemx -fstack-limit-symbol=@var{sym} 13494@itemx -fno-stack-limit 13495@opindex fstack-limit-register 13496@opindex fstack-limit-symbol 13497@opindex fno-stack-limit 13498Generate code to ensure that the stack does not grow beyond a certain value, 13499either the value of a register or the address of a symbol. If the stack 13500would grow beyond the value, a signal is raised. For most targets, 13501the signal is raised before the stack overruns the boundary, so 13502it is possible to catch the signal without taking special precautions. 13503 13504For instance, if the stack starts at absolute address @samp{0x80000000} 13505and grows downwards, you can use the flags 13506@option{-fstack-limit-symbol=__stack_limit} and 13507@option{-Wl,--defsym,__stack_limit=0x7ffe0000} to enforce a stack limit 13508of 128KB@. Note that this may only work with the GNU linker. 13509 13510@cindex aliasing of parameters 13511@cindex parameters, aliased 13512@item -fargument-alias 13513@itemx -fargument-noalias 13514@itemx -fargument-noalias-global 13515@itemx -fargument-noalias-anything 13516@opindex fargument-alias 13517@opindex fargument-noalias 13518@opindex fargument-noalias-global 13519@opindex fargument-noalias-anything 13520Specify the possible relationships among parameters and between 13521parameters and global data. 13522 13523@option{-fargument-alias} specifies that arguments (parameters) may 13524alias each other and may alias global storage.@* 13525@option{-fargument-noalias} specifies that arguments do not alias 13526each other, but may alias global storage.@* 13527@option{-fargument-noalias-global} specifies that arguments do not 13528alias each other and do not alias global storage. 13529@option{-fargument-noalias-anything} specifies that arguments do not 13530alias any other storage. 13531 13532Each language will automatically use whatever option is required by 13533the language standard. You should not need to use these options yourself. 13534 13535@item -fleading-underscore 13536@opindex fleading-underscore 13537This option and its counterpart, @option{-fno-leading-underscore}, forcibly 13538change the way C symbols are represented in the object file. One use 13539is to help link with legacy assembly code. 13540 13541@strong{Warning:} the @option{-fleading-underscore} switch causes GCC to 13542generate code that is not binary compatible with code generated without that 13543switch. Use it to conform to a non-default application binary interface. 13544Not all targets provide complete support for this switch. 13545 13546@item -ftls-model=@var{model} 13547Alter the thread-local storage model to be used (@pxref{Thread-Local}). 13548The @var{model} argument should be one of @code{global-dynamic}, 13549@code{local-dynamic}, @code{initial-exec} or @code{local-exec}. 13550 13551The default without @option{-fpic} is @code{initial-exec}; with 13552@option{-fpic} the default is @code{global-dynamic}. 13553 13554@item -fvisibility=@var{default|internal|hidden|protected} 13555@opindex fvisibility 13556Set the default ELF image symbol visibility to the specified option---all 13557symbols will be marked with this unless overridden within the code. 13558Using this feature can very substantially improve linking and 13559load times of shared object libraries, produce more optimized 13560code, provide near-perfect API export and prevent symbol clashes. 13561It is @strong{strongly} recommended that you use this in any shared objects 13562you distribute. 13563 13564Despite the nomenclature, @code{default} always means public ie; 13565available to be linked against from outside the shared object. 13566@code{protected} and @code{internal} are pretty useless in real-world 13567usage so the only other commonly used option will be @code{hidden}. 13568The default if @option{-fvisibility} isn't specified is 13569@code{default}, i.e., make every 13570symbol public---this causes the same behavior as previous versions of 13571GCC@. 13572 13573A good explanation of the benefits offered by ensuring ELF 13574symbols have the correct visibility is given by ``How To Write 13575Shared Libraries'' by Ulrich Drepper (which can be found at 13576@w{@uref{http://people.redhat.com/~drepper/}})---however a superior 13577solution made possible by this option to marking things hidden when 13578the default is public is to make the default hidden and mark things 13579public. This is the norm with DLL's on Windows and with @option{-fvisibility=hidden} 13580and @code{__attribute__ ((visibility("default")))} instead of 13581@code{__declspec(dllexport)} you get almost identical semantics with 13582identical syntax. This is a great boon to those working with 13583cross-platform projects. 13584 13585For those adding visibility support to existing code, you may find 13586@samp{#pragma GCC visibility} of use. This works by you enclosing 13587the declarations you wish to set visibility for with (for example) 13588@samp{#pragma GCC visibility push(hidden)} and 13589@samp{#pragma GCC visibility pop}. 13590Bear in mind that symbol visibility should be viewed @strong{as 13591part of the API interface contract} and thus all new code should 13592always specify visibility when it is not the default ie; declarations 13593only for use within the local DSO should @strong{always} be marked explicitly 13594as hidden as so to avoid PLT indirection overheads---making this 13595abundantly clear also aids readability and self-documentation of the code. 13596Note that due to ISO C++ specification requirements, operator new and 13597operator delete must always be of default visibility. 13598 13599Be aware that headers from outside your project, in particular system 13600headers and headers from any other library you use, may not be 13601expecting to be compiled with visibility other than the default. You 13602may need to explicitly say @samp{#pragma GCC visibility push(default)} 13603before including any such headers. 13604 13605@samp{extern} declarations are not affected by @samp{-fvisibility}, so 13606a lot of code can be recompiled with @samp{-fvisibility=hidden} with 13607no modifications. However, this means that calls to @samp{extern} 13608functions with no explicit visibility will use the PLT, so it is more 13609effective to use @samp{__attribute ((visibility))} and/or 13610@samp{#pragma GCC visibility} to tell the compiler which @samp{extern} 13611declarations should be treated as hidden. 13612 13613Note that @samp{-fvisibility} does affect C++ vague linkage 13614entities. This means that, for instance, an exception class that will 13615be thrown between DSOs must be explicitly marked with default 13616visibility so that the @samp{type_info} nodes will be unified between 13617the DSOs. 13618 13619An overview of these techniques, their benefits and how to use them 13620is at @w{@uref{http://gcc.gnu.org/wiki/Visibility}}. 13621 13622@end table 13623 13624@c man end 13625 13626@node Environment Variables 13627@section Environment Variables Affecting GCC 13628@cindex environment variables 13629 13630@c man begin ENVIRONMENT 13631This section describes several environment variables that affect how GCC 13632operates. Some of them work by specifying directories or prefixes to use 13633when searching for various kinds of files. Some are used to specify other 13634aspects of the compilation environment. 13635 13636Note that you can also specify places to search using options such as 13637@option{-B}, @option{-I} and @option{-L} (@pxref{Directory Options}). These 13638take precedence over places specified using environment variables, which 13639in turn take precedence over those specified by the configuration of GCC@. 13640@xref{Driver,, Controlling the Compilation Driver @file{gcc}, gccint, 13641GNU Compiler Collection (GCC) Internals}. 13642 13643@table @env 13644@item LANG 13645@itemx LC_CTYPE 13646@c @itemx LC_COLLATE 13647@itemx LC_MESSAGES 13648@c @itemx LC_MONETARY 13649@c @itemx LC_NUMERIC 13650@c @itemx LC_TIME 13651@itemx LC_ALL 13652@findex LANG 13653@findex LC_CTYPE 13654@c @findex LC_COLLATE 13655@findex LC_MESSAGES 13656@c @findex LC_MONETARY 13657@c @findex LC_NUMERIC 13658@c @findex LC_TIME 13659@findex LC_ALL 13660@cindex locale 13661These environment variables control the way that GCC uses 13662localization information that allow GCC to work with different 13663national conventions. GCC inspects the locale categories 13664@env{LC_CTYPE} and @env{LC_MESSAGES} if it has been configured to do 13665so. These locale categories can be set to any value supported by your 13666installation. A typical value is @samp{en_GB.UTF-8} for English in the United 13667Kingdom encoded in UTF-8. 13668 13669The @env{LC_CTYPE} environment variable specifies character 13670classification. GCC uses it to determine the character boundaries in 13671a string; this is needed for some multibyte encodings that contain quote 13672and escape characters that would otherwise be interpreted as a string 13673end or escape. 13674 13675The @env{LC_MESSAGES} environment variable specifies the language to 13676use in diagnostic messages. 13677 13678If the @env{LC_ALL} environment variable is set, it overrides the value 13679of @env{LC_CTYPE} and @env{LC_MESSAGES}; otherwise, @env{LC_CTYPE} 13680and @env{LC_MESSAGES} default to the value of the @env{LANG} 13681environment variable. If none of these variables are set, GCC 13682defaults to traditional C English behavior. 13683 13684@item TMPDIR 13685@findex TMPDIR 13686If @env{TMPDIR} is set, it specifies the directory to use for temporary 13687files. GCC uses temporary files to hold the output of one stage of 13688compilation which is to be used as input to the next stage: for example, 13689the output of the preprocessor, which is the input to the compiler 13690proper. 13691 13692@item GCC_EXEC_PREFIX 13693@findex GCC_EXEC_PREFIX 13694If @env{GCC_EXEC_PREFIX} is set, it specifies a prefix to use in the 13695names of the subprograms executed by the compiler. No slash is added 13696when this prefix is combined with the name of a subprogram, but you can 13697specify a prefix that ends with a slash if you wish. 13698 13699If @env{GCC_EXEC_PREFIX} is not set, GCC will attempt to figure out 13700an appropriate prefix to use based on the pathname it was invoked with. 13701 13702If GCC cannot find the subprogram using the specified prefix, it 13703tries looking in the usual places for the subprogram. 13704 13705The default value of @env{GCC_EXEC_PREFIX} is 13706@file{@var{prefix}/lib/gcc/} where @var{prefix} is the value 13707of @code{prefix} when you ran the @file{configure} script. 13708 13709Other prefixes specified with @option{-B} take precedence over this prefix. 13710 13711This prefix is also used for finding files such as @file{crt0.o} that are 13712used for linking. 13713 13714In addition, the prefix is used in an unusual way in finding the 13715directories to search for header files. For each of the standard 13716directories whose name normally begins with @samp{/usr/local/lib/gcc} 13717(more precisely, with the value of @env{GCC_INCLUDE_DIR}), GCC tries 13718replacing that beginning with the specified prefix to produce an 13719alternate directory name. Thus, with @option{-Bfoo/}, GCC will search 13720@file{foo/bar} where it would normally search @file{/usr/local/lib/bar}. 13721These alternate directories are searched first; the standard directories 13722come next. 13723 13724@item COMPILER_PATH 13725@findex COMPILER_PATH 13726The value of @env{COMPILER_PATH} is a colon-separated list of 13727directories, much like @env{PATH}. GCC tries the directories thus 13728specified when searching for subprograms, if it can't find the 13729subprograms using @env{GCC_EXEC_PREFIX}. 13730 13731@item LIBRARY_PATH 13732@findex LIBRARY_PATH 13733The value of @env{LIBRARY_PATH} is a colon-separated list of 13734directories, much like @env{PATH}. When configured as a native compiler, 13735GCC tries the directories thus specified when searching for special 13736linker files, if it can't find them using @env{GCC_EXEC_PREFIX}. Linking 13737using GCC also uses these directories when searching for ordinary 13738libraries for the @option{-l} option (but directories specified with 13739@option{-L} come first). 13740 13741@item LANG 13742@findex LANG 13743@cindex locale definition 13744This variable is used to pass locale information to the compiler. One way in 13745which this information is used is to determine the character set to be used 13746when character literals, string literals and comments are parsed in C and C++. 13747When the compiler is configured to allow multibyte characters, 13748the following values for @env{LANG} are recognized: 13749 13750@table @samp 13751@item C-JIS 13752Recognize JIS characters. 13753@item C-SJIS 13754Recognize SJIS characters. 13755@item C-EUCJP 13756Recognize EUCJP characters. 13757@end table 13758 13759If @env{LANG} is not defined, or if it has some other value, then the 13760compiler will use mblen and mbtowc as defined by the default locale to 13761recognize and translate multibyte characters. 13762@end table 13763 13764@noindent 13765Some additional environments variables affect the behavior of the 13766preprocessor. 13767 13768@include cppenv.texi 13769 13770@c man end 13771 13772@node Precompiled Headers 13773@section Using Precompiled Headers 13774@cindex precompiled headers 13775@cindex speed of compilation 13776 13777Often large projects have many header files that are included in every 13778source file. The time the compiler takes to process these header files 13779over and over again can account for nearly all of the time required to 13780build the project. To make builds faster, GCC allows users to 13781`precompile' a header file; then, if builds can use the precompiled 13782header file they will be much faster. 13783 13784To create a precompiled header file, simply compile it as you would any 13785other file, if necessary using the @option{-x} option to make the driver 13786treat it as a C or C++ header file. You will probably want to use a 13787tool like @command{make} to keep the precompiled header up-to-date when 13788the headers it contains change. 13789 13790A precompiled header file will be searched for when @code{#include} is 13791seen in the compilation. As it searches for the included file 13792(@pxref{Search Path,,Search Path,cpp,The C Preprocessor}) the 13793compiler looks for a precompiled header in each directory just before it 13794looks for the include file in that directory. The name searched for is 13795the name specified in the @code{#include} with @samp{.gch} appended. If 13796the precompiled header file can't be used, it is ignored. 13797 13798For instance, if you have @code{#include "all.h"}, and you have 13799@file{all.h.gch} in the same directory as @file{all.h}, then the 13800precompiled header file will be used if possible, and the original 13801header will be used otherwise. 13802 13803Alternatively, you might decide to put the precompiled header file in a 13804directory and use @option{-I} to ensure that directory is searched 13805before (or instead of) the directory containing the original header. 13806Then, if you want to check that the precompiled header file is always 13807used, you can put a file of the same name as the original header in this 13808directory containing an @code{#error} command. 13809 13810This also works with @option{-include}. So yet another way to use 13811precompiled headers, good for projects not designed with precompiled 13812header files in mind, is to simply take most of the header files used by 13813a project, include them from another header file, precompile that header 13814file, and @option{-include} the precompiled header. If the header files 13815have guards against multiple inclusion, they will be skipped because 13816they've already been included (in the precompiled header). 13817 13818If you need to precompile the same header file for different 13819languages, targets, or compiler options, you can instead make a 13820@emph{directory} named like @file{all.h.gch}, and put each precompiled 13821header in the directory, perhaps using @option{-o}. It doesn't matter 13822what you call the files in the directory, every precompiled header in 13823the directory will be considered. The first precompiled header 13824encountered in the directory that is valid for this compilation will 13825be used; they're searched in no particular order. 13826 13827There are many other possibilities, limited only by your imagination, 13828good sense, and the constraints of your build system. 13829 13830A precompiled header file can be used only when these conditions apply: 13831 13832@itemize 13833@item 13834Only one precompiled header can be used in a particular compilation. 13835 13836@item 13837A precompiled header can't be used once the first C token is seen. You 13838can have preprocessor directives before a precompiled header; you can 13839even include a precompiled header from inside another header, so long as 13840there are no C tokens before the @code{#include}. 13841 13842@item 13843The precompiled header file must be produced for the same language as 13844the current compilation. You can't use a C precompiled header for a C++ 13845compilation. 13846 13847@item 13848The precompiled header file must have been produced by the same compiler 13849binary as the current compilation is using. 13850 13851@item 13852Any macros defined before the precompiled header is included must 13853either be defined in the same way as when the precompiled header was 13854generated, or must not affect the precompiled header, which usually 13855means that they don't appear in the precompiled header at all. 13856 13857The @option{-D} option is one way to define a macro before a 13858precompiled header is included; using a @code{#define} can also do it. 13859There are also some options that define macros implicitly, like 13860@option{-O} and @option{-Wdeprecated}; the same rule applies to macros 13861defined this way. 13862 13863@item If debugging information is output when using the precompiled 13864header, using @option{-g} or similar, the same kind of debugging information 13865must have been output when building the precompiled header. However, 13866a precompiled header built using @option{-g} can be used in a compilation 13867when no debugging information is being output. 13868 13869@item The same @option{-m} options must generally be used when building 13870and using the precompiled header. @xref{Submodel Options}, 13871for any cases where this rule is relaxed. 13872 13873@item Each of the following options must be the same when building and using 13874the precompiled header: 13875 13876@gccoptlist{-fexceptions -funit-at-a-time} 13877 13878@item 13879Some other command-line options starting with @option{-f}, 13880@option{-p}, or @option{-O} must be defined in the same way as when 13881the precompiled header was generated. At present, it's not clear 13882which options are safe to change and which are not; the safest choice 13883is to use exactly the same options when generating and using the 13884precompiled header. The following are known to be safe: 13885 13886@gccoptlist{-fmessage-length= -fpreprocessed 13887-fsched-interblock -fsched-spec -fsched-spec-load -fsched-spec-load-dangerous 13888-fsched-verbose=<number> -fschedule-insns -fvisibility= 13889-pedantic-errors} 13890 13891@end itemize 13892 13893For all of these except the last, the compiler will automatically 13894ignore the precompiled header if the conditions aren't met. If you 13895find an option combination that doesn't work and doesn't cause the 13896precompiled header to be ignored, please consider filing a bug report, 13897see @ref{Bugs}. 13898 13899If you do use differing options when generating and using the 13900precompiled header, the actual behavior will be a mixture of the 13901behavior for the options. For instance, if you use @option{-g} to 13902generate the precompiled header but not when using it, you may or may 13903not get debugging information for routines in the precompiled header. 13904 13905@node Running Protoize 13906@section Running Protoize 13907 13908The program @code{protoize} is an optional part of GCC@. You can use 13909it to add prototypes to a program, thus converting the program to ISO 13910C in one respect. The companion program @code{unprotoize} does the 13911reverse: it removes argument types from any prototypes that are found. 13912 13913When you run these programs, you must specify a set of source files as 13914command line arguments. The conversion programs start out by compiling 13915these files to see what functions they define. The information gathered 13916about a file @var{foo} is saved in a file named @file{@var{foo}.X}. 13917 13918After scanning comes actual conversion. The specified files are all 13919eligible to be converted; any files they include (whether sources or 13920just headers) are eligible as well. 13921 13922But not all the eligible files are converted. By default, 13923@code{protoize} and @code{unprotoize} convert only source and header 13924files in the current directory. You can specify additional directories 13925whose files should be converted with the @option{-d @var{directory}} 13926option. You can also specify particular files to exclude with the 13927@option{-x @var{file}} option. A file is converted if it is eligible, its 13928directory name matches one of the specified directory names, and its 13929name within the directory has not been excluded. 13930 13931Basic conversion with @code{protoize} consists of rewriting most 13932function definitions and function declarations to specify the types of 13933the arguments. The only ones not rewritten are those for varargs 13934functions. 13935 13936@code{protoize} optionally inserts prototype declarations at the 13937beginning of the source file, to make them available for any calls that 13938precede the function's definition. Or it can insert prototype 13939declarations with block scope in the blocks where undeclared functions 13940are called. 13941 13942Basic conversion with @code{unprotoize} consists of rewriting most 13943function declarations to remove any argument types, and rewriting 13944function definitions to the old-style pre-ISO form. 13945 13946Both conversion programs print a warning for any function declaration or 13947definition that they can't convert. You can suppress these warnings 13948with @option{-q}. 13949 13950The output from @code{protoize} or @code{unprotoize} replaces the 13951original source file. The original file is renamed to a name ending 13952with @samp{.save} (for DOS, the saved filename ends in @samp{.sav} 13953without the original @samp{.c} suffix). If the @samp{.save} (@samp{.sav} 13954for DOS) file already exists, then the source file is simply discarded. 13955 13956@code{protoize} and @code{unprotoize} both depend on GCC itself to 13957scan the program and collect information about the functions it uses. 13958So neither of these programs will work until GCC is installed. 13959 13960Here is a table of the options you can use with @code{protoize} and 13961@code{unprotoize}. Each option works with both programs unless 13962otherwise stated. 13963 13964@table @code 13965@item -B @var{directory} 13966Look for the file @file{SYSCALLS.c.X} in @var{directory}, instead of the 13967usual directory (normally @file{/usr/local/lib}). This file contains 13968prototype information about standard system functions. This option 13969applies only to @code{protoize}. 13970 13971@item -c @var{compilation-options} 13972Use @var{compilation-options} as the options when running @command{gcc} to 13973produce the @samp{.X} files. The special option @option{-aux-info} is 13974always passed in addition, to tell @command{gcc} to write a @samp{.X} file. 13975 13976Note that the compilation options must be given as a single argument to 13977@code{protoize} or @code{unprotoize}. If you want to specify several 13978@command{gcc} options, you must quote the entire set of compilation options 13979to make them a single word in the shell. 13980 13981There are certain @command{gcc} arguments that you cannot use, because they 13982would produce the wrong kind of output. These include @option{-g}, 13983@option{-O}, @option{-c}, @option{-S}, and @option{-o} If you include these in 13984the @var{compilation-options}, they are ignored. 13985 13986@item -C 13987Rename files to end in @samp{.C} (@samp{.cc} for DOS-based file 13988systems) instead of @samp{.c}. This is convenient if you are converting 13989a C program to C++. This option applies only to @code{protoize}. 13990 13991@item -g 13992Add explicit global declarations. This means inserting explicit 13993declarations at the beginning of each source file for each function 13994that is called in the file and was not declared. These declarations 13995precede the first function definition that contains a call to an 13996undeclared function. This option applies only to @code{protoize}. 13997 13998@item -i @var{string} 13999Indent old-style parameter declarations with the string @var{string}. 14000This option applies only to @code{protoize}. 14001 14002@code{unprotoize} converts prototyped function definitions to old-style 14003function definitions, where the arguments are declared between the 14004argument list and the initial @samp{@{}. By default, @code{unprotoize} 14005uses five spaces as the indentation. If you want to indent with just 14006one space instead, use @option{-i " "}. 14007 14008@item -k 14009Keep the @samp{.X} files. Normally, they are deleted after conversion 14010is finished. 14011 14012@item -l 14013Add explicit local declarations. @code{protoize} with @option{-l} inserts 14014a prototype declaration for each function in each block which calls the 14015function without any declaration. This option applies only to 14016@code{protoize}. 14017 14018@item -n 14019Make no real changes. This mode just prints information about the conversions 14020that would have been done without @option{-n}. 14021 14022@item -N 14023Make no @samp{.save} files. The original files are simply deleted. 14024Use this option with caution. 14025 14026@item -p @var{program} 14027Use the program @var{program} as the compiler. Normally, the name 14028@file{gcc} is used. 14029 14030@item -q 14031Work quietly. Most warnings are suppressed. 14032 14033@item -v 14034Print the version number, just like @option{-v} for @command{gcc}. 14035@end table 14036 14037If you need special compiler options to compile one of your program's 14038source files, then you should generate that file's @samp{.X} file 14039specially, by running @command{gcc} on that source file with the 14040appropriate options and the option @option{-aux-info}. Then run 14041@code{protoize} on the entire set of files. @code{protoize} will use 14042the existing @samp{.X} file because it is newer than the source file. 14043For example: 14044 14045@smallexample 14046gcc -Dfoo=bar file1.c -aux-info file1.X 14047protoize *.c 14048@end smallexample 14049 14050@noindent 14051You need to include the special files along with the rest in the 14052@code{protoize} command, even though their @samp{.X} files already 14053exist, because otherwise they won't get converted. 14054 14055@xref{Protoize Caveats}, for more information on how to use 14056@code{protoize} successfully. 14057 14058