GNU GC(1)
NAME
gcc - GNU project C and C] compiler
SYNOPSIS
gcc [-c-S-E] [-std=standard]
[-g] [-pg] [-Olevel]
[-Wwarn...] [-pedantic]
[-Idir...] [-Ldir...]
[-Dmacro[=defn]...] [-Umacro]
[-foption...] [-mmachine-option...]
[-o outfile] infile...
Only the most useful options are listed here; see below for
the remainder. g] accepts mostly the same options as gcc.
DESCRIPTION
When you invoke GC, it normally does preprocessing,
compilation, assembly and linking. The ``overall options''
allow you to stop this process at an intermediate stage.
For example, the -c option says not to run the linker. Then
the output consists of object files output by the assembler.
Other options are passed on to one stage of processing.
Some options control the preprocessor and others the
compiler itself. Yet other options control the assembler
and linker; most of these are not documented here, since you
rarely need to use any of them.
Most of the command line options that you can use with GC
are useful for C programs; when an option is only useful
with another language (usually C]), the explanation says so
explicitly. If the description for a particular option does
not mention a source language, you can use that option with
all supported languages.
The gcc program accepts options and file names as operands.
Many options have multi-letter names; therefore multiple
single-letter options may not be grouped: -dr is very
different from -d -r.
You can mix options and other arguments. For the most part,
the order you use doesn't matter. Order does matter when
you use several options of the same kind; for example, if
you specify -L more than once, the directories are searched
in the order specified.
Many options have long names starting with -f or with
-W---for example, -fforce-mem, -fstrength-reduce, -Wformat
and so on. Most of these have both positive and negative
forms; the negative form of -ffoo would be -fno-foo. This
manual documents only one of these two forms, whichever one
is not the default.
gcc-3.4.3 Last change: 2004-11-05 1
GNU GC(1)
OPTIONS
Option Summary
Here is a summary of all the options, grouped by type.
Explanations are in the following sections.
Overall Options
-c -S -E -o file -pipe -pass-exit-codes -x language
-v -### --help --target-help --version
C Language Options
-ansi -std=standard -aux-info filename -fno-asm
-fno-builtin -fno-builtin-function -fhosted
-ffreestanding -fms-extensions -trigraphs
-no-integrated-cpp -traditional -traditional-cpp
-fallow-single-precision -fcond-mismatch
-fsigned-bitfields -fsigned-char -funsigned-bitfields
-funsigned-char -fwritable-strings
C] Language Options
-fabi-version=n -fno-access-control -fcheck-new
-fconserve-space -fno-const-strings
-fno-elide-constructors -fno-enforce-eh-specs
-ffor-scope -fno-for-scope -fno-gnu-keywords
-fno-implicit-templates -fno-implicit-inline-templates
-fno-implement-inlines -fms-extensions
-fno-nonansi-builtins -fno-operator-names
-fno-optional-diags -fpermissive -frepo -fno-rtti
-fstats -ftemplate-depth-n -fuse-cxa-atexit -fno-weak
-nostdinc] -fno-default-inline -Wabi
-Wctor-dtor-privacy -Wnon-virtual-dtor -Wreorder
-Weffc] -Wno-deprecated -Wno-non-template-friend
-Wold-style-cast -Woverloaded-virtual
-Wno-pmf-conversions -Wsign-promo -Wsynth
Objective-C Language Options
-fconstant-string-class=class-name -fgnu-runtime
-fnext-runtime -fno-nil-receivers -fobjc-exceptions
-freplace-objc-classes -fzero-link -gen-decls
-Wno-protocol -Wselector -Wundeclared-selector
Language Independent Options
-fmessage-length=n
-fdiagnostics-show-location=[onceevery-line]
Warning Options
-fsyntax-only -pedantic -pedantic-errors -w -Wextra
-Wall -Waggregate-return -Wcast-align -Wcast-qual
-Wchar-subscripts -Wcomment -Wconversion
-Wno-deprecated-declarations -Wdisabled-optimization
-Wno-div-by-zero -Wendif-labels -Werror
-Werror-implicit-function-declaration -Wfloat-equal
gcc-3.4.3 Last change: 2004-11-05 2
GNU GC(1)
-Wformat -Wformat=2 -Wno-format-extra-args
-Wformat-nonliteral -Wformat-security -Wformat-y2k
-Wimplicit -Wimplicit-function-declaration
-Wimplicit-int -Wimport -Wno-import -Winit-self
-Winline -Wno-invalid-offsetof -Winvalid-pch
-Wlarger-than-len -Wlong-long -Wmain -Wmissing-braces
-Wmissing-format-attribute -Wmissing-noreturn
-Wno-multichar -Wnonnull -Wpacked -Wpadded
-Wparentheses -Wpointer-arith -Wredundant-decls
-Wreturn-type -Wsequence-point -Wshadow -Wsign-compare
-Wstrict-aliasing -Wswitch -Wswitch-default
-Wswitch-enum -Wsystem-headers -Wtrigraphs -Wundef
-Wuninitialized -Wunknown-pragmas -Wunreachable-code
-Wunused -Wunused-function -Wunused-label
-Wunused-parameter -Wunused-value -Wunused-variable
-Wwrite-strings
C-only Warning Options
-Wbad-function-cast -Wmissing-declarations
-Wmissing-prototypes -Wnested-externs
-Wold-style-definition -Wstrict-prototypes
-Wtraditional -Wdeclaration-after-statement
Debugging Options
-dletters -dumpspecs -dumpmachine -dumpversion
-fdump-unnumbered -fdump-translation-unit[-n]
-fdump-class-hierarchy[-n] -fdump-tree-original[-n]
-fdump-tree-optimized[-n] -fdump-tree-inlined[-n]
-feliminate-dwarf2-dups -feliminate-unused-debug-types
-feliminate-unused-debug-symbols -fmem-report
-fprofile-arcs -frandom-seed=string -fsched-verbose=n
-ftest-coverage -ftime-report -g -glevel -gcoff
-gdwarf-2 -ggdb -gstabs -gstabs] -gvms -gxcoff
-gxcoff] -p -pg -print-file-name=library
-print-libgcc-file-name -print-multi-directory
-print-multi-lib -print-prog-name=program
-print-search-dirs -Q -save-temps -time
Optimization Options
-falign-functions=n -falign-jumps=n -falign-labels=n
-falign-loops=n -fbranch-probabilities -fprofile-values
-fvpt -fbranch-target-load-optimize
-fbranch-target-load-optimize2 -fcaller-saves
-fcprop-registers -fcse-follow-jumps -fcse-skip-blocks
-fdata-sections -fdelayed-branch
-fdelete-null-pointer-checks -fexpensive-optimizations
-ffast-math -ffloat-store -fforce-addr -fforce-mem
-ffunction-sections -fgcse -fgcse-lm -fgcse-sm
-fgcse-las -floop-optimize -fcrossjumping
-fif-conversion -fif-conversion2 -finline-functions
-finline-limit=n -fkeep-inline-functions
-fkeep-static-consts -fmerge-constants
gcc-3.4.3 Last change: 2004-11-05 3
GNU GC(1)
-fmerge-all-constants -fmove-all-movables -fnew-ra
-fno-branch-count-reg -fno-default-inline
-fno-defer-pop -fno-function-cse
-fno-guess-branch-probability -fno-inline
-fno-math-errno -fno-peephole -fno-peephole2
-funsafe-math-optimizations -ffinite-math-only
-fno-trapping-math -fno-zero-initialized-in-bss
-fomit-frame-pointer -foptimize-register-move
-foptimize-sibling-calls -fprefetch-loop-arrays
-fprofile-generate -fprofile-use -freduce-all-givs
-fregmove -frename-registers -freorder-blocks
-freorder-functions -frerun-cse-after-loop
-frerun-loop-opt -frounding-math -fschedule-insns
-fschedule-insns2 -fno-sched-interblock -fno-sched-spec
-fsched-spec-load -fsched-spec-load-dangerous
-fsched-stalled-insns=n -sched-stalled-insns-dep=n
-fsched2-use-superblocks -fsched2-use-traces
-fsignaling-nans -fsingle-precision-constant
-fstrength-reduce -fstrict-aliasing -ftracer
-fthread-jumps -funroll-all-loops -funroll-loops
-fpeel-loops -funswitch-loops -fold-unroll-loops
-fold-unroll-all-loops --param name=value -O -O0 -O1
-O2 -O3 -Os
Preprocessor Options
-Aquestion=answer -A-question[=answer] -C -dD -dI -dM
-dN -Dmacro[=defn] -E -H -idirafter dir -include file
-imacros file -iprefix file -iwithprefix dir
-iwithprefixbefore dir -isystem dir -M -M -MF -MG
-MP -MQ -MT -nostdinc -P -fworking-directory -remap
-trigraphs -undef -Umacro -Wp,option -Xpreprocessor
option
Assembler Option
-Wa,option -Xassembler option
Linker Options
object-file-name -llibrary -nostartfiles
-nodefaultlibs -nostdlib -pie -s -static
-static-libgcc -shared -shared-libgcc -symbolic
-Wl,option -Xlinker option -u symbol
Directory Options
-Bprefix -Idir -I- -Ldir -specs=file
Target Options
-V version -b machine
Machine Dependent Options
M680x0 Options -m68000 -m68020 -m68020-40 -m68020-60
-m68030 -m68040 -m68060 -mcpu32 -m5200 -m68881
-mbitfield -mc68000 -mc68020 -mnobitfield -mrtd
gcc-3.4.3 Last change: 2004-11-05 4
GNU GC(1)
-mshort -msoft-float -mpcrel -malign-int
-mstrict-align -msep-data -mno-sep-data
-mshared-library-id=n -mid-shared-library
-mno-id-shared-library
M68hc1x Options -m6811 -m6812 -m68hc11 -m68hc12
-m68hcs12 -mauto-incdec -minmax -mlong-calls -mshort
-msoft-reg-count=count
VAX Options -mg -mgnu -munix
SPARC Options -mcpu=cpu-type -mtune=cpu-type
-mcmodel=code-model -m32 -m64 -mapp-regs
-mno-app-regs -mfaster-structs -mno-faster-structs
-mflat -mno-flat -mfpu -mno-fpu -mhard-float
-msoft-float -mhard-quad-float -msoft-quad-float
-mimpure-text -mno-impure-text -mlittle-endian
-mstack-bias -mno-stack-bias -munaligned-doubles
-mno-unaligned-doubles -mv8plus -mno-v8plus -mvis
-mno-vis -mcypress -mf930 -mf934 -msparclite
-msupersparc -mv8 -threads -pthreads
ARM Options -mapcs-frame -mno-apcs-frame -mapcs-26
-mapcs-32 -mapcs-stack-check -mno-apcs-stack-check
-mapcs-float -mno-apcs-float -mapcs-reentrant
-mno-apcs-reentrant -msched-prolog -mno-sched-prolog
-mlittle-endian -mbig-endian -mwords-little-endian
-malignment-traps -mno-alignment-traps -msoft-float
-mhard-float -mfpe -mthumb-interwork
-mno-thumb-interwork -mcpu=name -march=name -mfpe=name
-mstructure-size-boundary=n -mabort-on-noreturn
-mlong-calls -mno-long-calls -msingle-pic-base
-mno-single-pic-base -mpic-register=reg
-mnop-fun-dllimport -mcirrus-fix-invalid-insns
-mno-cirrus-fix-invalid-insns -mpoke-function-name
-mthumb -marm -mtpcs-frame -mtpcs-leaf-frame
-mcaller-super-interworking -mcallee-super-interworking
MN10300 Options -mmult-bug -mno-mult-bug -mam33
-mno-am33 -mam33-2 -mno-am33-2 -mno-crt0 -mrelax
M32R/D Options -m32r2 -m32rx -m32r -mdebug -malign-loops
-mno-align-loops -missue-rate=number
-mbranch-cost=number -mmodel=code-size-model-type
-msdata=sdata-type -mno-flush-func -mflush-func=name
-mno-flush-trap -mflush-trap=number -G num
RS/6000 and PowerPC Options -mcpu=cpu-type -mtune=cpu-
type -mpower -mno-power -mpower2 -mno-power2
-mpowerpc -mpowerpc64 -mno-powerpc -maltivec
-mno-altivec -mpowerpc-gpopt -mno-powerpc-gpopt
-mpowerpc-gfxopt -mno-powerpc-gfxopt -mnew-mnemonics
gcc-3.4.3 Last change: 2004-11-05 5
GNU GC(1)
-mold-mnemonics -mfull-toc -mminimal-toc
-mno-fp-in-toc -mno-sum-in-toc -m64 -m32 -mxl-call
-mno-xl-call -mpe -malign-power -malign-natural
-msoft-float -mhard-float -mmultiple -mno-multiple
-mstring -mno-string -mupdate -mno-update
-mfused-madd -mno-fused-madd -mbit-align
-mno-bit-align -mstrict-align -mno-strict-align
-mrelocatable -mno-relocatable -mrelocatable-lib
-mno-relocatable-lib -mtoc -mno-toc -mlittle
-mlittle-endian -mbig -mbig-endian -mdynamic-no-pic
-mprioritize-restricted-insns=priority
-msched-costly-dep=dependencetype
-minsert-sched-nops=scheme -mcall-sysv -mcall-netbsd
-maix-struct-return -msvr4-struct-return -mabi=altivec
-mabi=no-altivec -mabi=spe -mabi=no-spe -misel=yes
-misel=no -mspe=yes -mspe=no -mfloat-gprs=yes
-mfloat-gprs=no -mprototype -mno-prototype -msim
-mmvme -mads -myellowknife -memb -msdata -msdata=opt
-mvxworks -mwindiss -G num -pthread
Darwin Options -allload -allowableclient -arch
-archerrorsfatal -archonly -bindatload -bundle
-bundleloader -clientname -compatibilityversion
-currentversion -dependency-file -dylibfile
-dylinkerinstallname -dynamic -dynamiclib
-exportedsymbolslist -filelist -flatnamespace
-forcecpusubtypeAL -forceflatnamespace
-headerpadmaxinstallnames -imagebase -init
-installname -keepprivateexterns -multimodule
-multiplydefined -multiplydefinedunused -noallload
-nofixprebinding -nomultidefs -noprebind
-noseglinkedit -pagezerosize -prebind
-prebindalltwolevelmodules -privatebundle
-readonlyrelocs -sectalign -sectobjectsymbols
-whyload -seg1addr -sectcreate -sectobjectsymbols
-sectorder -segaddrtable -segaddrtablefilename
-seglinkedit -segprot -segsreadonlyaddr
-segsreadwriteaddr -singlemodule -static
-sublibrary -subumbrella -twolevelnamespace
-umbrella -undefined -unexportedsymbolslist
-weakreferencemismatches -whatsloaded
MIPS Options -EL -EB -march=arch -mtune=arch -mips1
-mips2 -mips3 -mips4 -mips32 -mips32r2 -mips64
-mips16 -mno-mips16 -mabi=abi -mabicalls
-mno-abicalls -mxgot -mno-xgot -membedded-pic
-mno-embedded-pic -mgp32 -mgp64 -mfp32 -mfp64
-mhard-float -msoft-float -msingle-float
-mdouble-float -mint64 -mlong64 -mlong32 -Gnum
-membedded-data -mno-embedded-data
-muninit-const-in-rodata -mno-uninit-const-in-rodata
-msplit-addresses -mno-split-addresses
gcc-3.4.3 Last change: 2004-11-05 6
GNU GC(1)
-mexplicit-relocs -mno-explicit-relocs -mrnames
-mno-rnames -mcheck-zero-division
-mno-check-zero-division -mmemcpy -mno-memcpy
-mlong-calls -mno-long-calls -mmad -mno-mad
-mfused-madd -mno-fused-madd -nocpp -mfix-sb1
-mno-fix-sb1 -mflush-func=func -mno-flush-func
-mbranch-likely -mno-branch-likely
i386 and x86-64 Options -mtune=cpu-type -march=cpu-type
-mfpmath=unit -masm=dialect -mno-fancy-math-387
-mno-fp-ret-in-387 -msoft-float -msvr3-shlib
-mno-wide-multiply -mrtd -malign-double
-mpreferred-stack-boundary=num -mmmx -msse -msse2
-msse3 -m3dnow -mthreads -mno-align-stringops
-minline-all-stringops -mpush-args
-maccumulate-outgoing-args -m128bit-long-double
-m96bit-long-double -mregparm=num
-momit-leaf-frame-pointer -mno-red-zone
-mno-tls-direct-seg-refs -mcmodel=code-model -m32 -m64
HPA Options -march=architecture-type -mbig-switch
-mdisable-fpregs -mdisable-indexing
-mfast-indirect-calls -mgas -mgnu-ld -mhp-ld
-mjump-in-delay -mlinker-opt -mlong-calls
-mlong-load-store -mno-big-switch -mno-disable-fpregs
-mno-disable-indexing -mno-fast-indirect-calls
-mno-gas -mno-jump-in-delay -mno-long-load-store
-mno-portable-runtime -mno-soft-float -mno-space-regs
-msoft-float -mpa-risc-1-0 -mpa-risc-1-1 -mpa-risc-2-0
-mportable-runtime -mschedule=cpu-type -mspace-regs
-msio -mwsio -nolibdld -static -threads
Intel 960 Options -mcpu-type -masm-compat
-mclean-linkage -mcode-align -mcomplex-addr
-mleaf-procedures -mic-compat -mic2.0-compat
-mic3.0-compat -mintel-asm -mno-clean-linkage
-mno-code-align -mno-complex-addr -mno-leaf-procedures
-mno-old-align -mno-strict-align -mno-tail-call
-mnumerics -mold-align -msoft-float -mstrict-align
-mtail-call
DEC Alpha Options -mno-fp-regs -msoft-float -malpha-as
-mgas -mieee -mieee-with-inexact -mieee-conformant
-mfp-trap-mode=mode -mfp-rounding-mode=mode
-mtrap-precision=mode -mbuild-constants -mcpu=cpu-type
-mtune=cpu-type -mbwx -mmax -mfix -mcix -mfloat-vax
-mfloat-ieee -mexplicit-relocs -msmall-data
-mlarge-data -msmall-text -mlarge-text
-mmemory-latency=time
DEC Alpha/VMS Options -mvms-return-codes
gcc-3.4.3 Last change: 2004-11-05 7
GNU GC(1)
H8/300 Options -mrelax -mh -ms -mn -mint32
-malign-300
SH Options -m1 -m2 -m2e -m3 -m3e -m4-nofpu
-m4-single-only -m4-single -m4 -m5-64media
-m5-64media-nofpu -m5-32media -m5-32media-nofpu
-m5-compact -m5-compact-nofpu -mb -ml -mdalign
-mrelax -mbigtable -mfmovd -mhitachi -mnomacsave
-mieee -misize -mpadstruct -mspace -mprefergot
-musermode
System V Options -Qy -Qn -YP,paths -Ym,dir
ARC Options -EB -EL -mmangle-cpu -mcpu=cpu
-mtext=text-section -mdata=data-section
-mrodata=readonly-data-section
TMS320C3x/C4x Options -mcpu=cpu -mbig -msmall
-mregparm -mmemparm -mfast-fix -mmpyi -mbk -mti
-mdp-isr-reload -mrpts=count -mrptb -mdb
-mloop-unsigned -mparallel-insns -mparallel-mpy
-mpreserve-float
V850 Options -mlong-calls -mno-long-calls -mep
-mno-ep -mprolog-function -mno-prolog-function -mspace
-mtda=n -msda=n -mzda=n -mapp-regs -mno-app-regs
-mdisable-callt -mno-disable-callt -mv850e1 -mv850e
-mv850 -mbig-switch
NS32K Options -m32032 -m32332 -m32532 -m32081
-m32381 -mmult-add -mnomult-add -msoft-float -mrtd
-mnortd -mregparam -mnoregparam -msb -mnosb
-mbitfield -mnobitfield -mhimem -mnohimem
AVR Options -mmcu=mcu -msize -minit-stack=n
-mno-interrupts -mcall-prologues -mno-tablejump
-mtiny-stack
MCore Options -mhardlit -mno-hardlit -mdiv -mno-div
-mrelax-immediates -mno-relax-immediates
-mwide-bitfields -mno-wide-bitfields -m4byte-functions
-mno-4byte-functions -mcallgraph-data
-mno-callgraph-data -mslow-bytes -mno-slow-bytes
-mno-lsim -mlittle-endian -mbig-endian -m210 -m340
-mstack-increment
MIX Options -mlibfuncs -mno-libfuncs -mepsilon
-mno-epsilon -mabi=gnu -mabi=mmixware -mzero-extend
-mknuthdiv -mtoplevel-symbols -melf -mbranch-predict
-mno-branch-predict -mbase-addresses
-mno-base-addresses -msingle-exit -mno-single-exit
gcc-3.4.3 Last change: 2004-11-05 8
GNU GC(1)
IA-64 Options -mbig-endian -mlittle-endian -mgnu-as
-mgnu-ld -mno-pic -mvolatile-asm-stop -mb-step
-mregister-names -mno-sdata -mconstant-gp -mauto-pic
-minline-float-divide-min-latency
-minline-float-divide-max-throughput
-minline-int-divide-min-latency
-minline-int-divide-max-throughput -mno-dwarf2-asm
-mfixed-range=register-range
D30V Options -mextmem -mextmemory -monchip
-mno-asm-optimize -masm-optimize -mbranch-cost=n
-mcond-exec=n
S/390 and zSeries Options -mtune=cpu-type -march=cpu-
type -mhard-float -msoft-float -mbackchain
-mno-backchain -msmall-exec -mno-small-exec -mmvcle
-mno-mvcle -m64 -m31 -mdebug -mno-debug -mesa
-mzarch -mfused-madd -mno-fused-madd
CRIS Options -mcpu=cpu -march=cpu -mtune=cpu
-mmax-stack-frame=n -melinux-stacksize=n -metrax4
-metrax100 -mpdebug -mcc-init -mno-side-effects
-mstack-align -mdata-align -mconst-align -m32-bit
-m16-bit -m8-bit -mno-prologue-epilogue -mno-gotplt
-melf -maout -melinux -mlinux -sim -sim2
-mmul-bug-workaround -mno-mul-bug-workaround
PDP-11 Options -mfpu -msoft-float -mac0 -mno-ac0
-m40 -m45 -m10 -mbcopy -mbcopy-builtin -mint32
-mno-int16 -mint16 -mno-int32 -mfloat32 -mno-float64
-mfloat64 -mno-float32 -mabshi -mno-abshi
-mbranch-expensive -mbranch-cheap -msplit -mno-split
-munix-asm -mdec-asm
Xstormy16 Options -msim
Xtensa Options -mconst16 -mno-const16 -mfused-madd
-mno-fused-madd -mtext-section-literals
-mno-text-section-literals -mtarget-align
-mno-target-align -mlongcalls -mno-longcalls
FRV Options -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64
-mhard-float -msoft-float -malloc-cc -mfixed-cc
-mdword -mno-dword -mdouble -mno-double -mmedia
-mno-media -mmuladd -mno-muladd -mlibrary-pic -macc-4
-macc-8 -mpack -mno-pack -mno-eflags -mcond-move
-mno-cond-move -mscc -mno-scc -mcond-exec
-mno-cond-exec -mvliw-branch -mno-vliw-branch
-mmulti-cond-exec -mno-multi-cond-exec
-mnested-cond-exec -mno-nested-cond-exec -mtomcat-stats
-mcpu=cpu
gcc-3.4.3 Last change: 2004-11-05 9
GNU GC(1)
Code Generation Options
-fcall-saved-reg -fcall-used-reg -ffixed-reg
-fexceptions -fnon-call-exceptions -funwind-tables
-fasynchronous-unwind-tables -finhibit-size-directive
-finstrument-functions -fno-common -fno-ident
-fpcc-struct-return -fpic -fPIC -fpie -fPIE
-freg-struct-return -fshared-data -fshort-enums
-fshort-double -fshort-wchar -fverbose-asm
-fpack-struct -fstack-check -fstack-limit-register=reg
-fstack-limit-symbol=sym -fargument-alias
-fargument-noalias -fargument-noalias-global
-fleading-underscore -ftls-model=model -ftrapv -fwrapv
-fbounds-check
Options Controlling the Kind of Output
Compilation can involve up to four stages: preprocessing,
compilation proper, assembly and linking, always in that
order. GC is capable of preprocessing and compiling
several files either into several assembler input files, or
into one assembler input file; then each assembler input
file produces an object file, and linking combines all the
object files (those newly compiled, and those specified as
input) into an executable file.
For any given input file, the file name suffix determines
what kind of compilation is done:
file.c
C source code which must be preprocessed.
file.i
C source code which should not be preprocessed.
file.ii
C] source code which should not be preprocessed.
file.m
Objective-C source code. Note that you must link with
the library libobjc.a to make an Objective-C program
work.
file.mi
Objective-C source code which should not be
preprocessed.
file.h
C or C] header file to be turned into a precompiled
header.
file.cc
file.cp
gcc-3.4.3 Last change: 2004-11-05 10
GNU GC(1)
file.cxx
file.cpp
file.CP
file.c]
file.C
C] source code which must be preprocessed. Note that
in .cxx, the last two letters must both be literally x.
Likewise, .C refers to a literal capital C.
file.hh
file.H
C] header file to be turned into a precompiled header.
file.f
file.for
file.FOR
Fortran source code which should not be preprocessed.
file.F
file.fpp
file.FP
Fortran source code which must be preprocessed (with the
traditional preprocessor).
file.r
Fortran source code which must be preprocessed with a
RATFOR preprocessor (not included with GC).
file.ads
Ada source code file which contains a library unit
declaration (a declaration of a package, subprogram, or
generic, or a generic instantiation), or a library unit
renaming declaration (a package, generic, or subprogram
renaming declaration). Such files are also called
specs.
file.adb
Ada source code file containing a library unit body (a
subprogram or package body). Such files are also called
bodies.
file.s
Assembler code.
file.S
Assembler code which must be preprocessed.
other
An object file to be fed straight into linking. Any
file name with no recognized suffix is treated this way.
gcc-3.4.3 Last change: 2004-11-05 11
GNU GC(1)
You can specify the input language explicitly with the -x
option:
-x language
Specify explicitly the language for the following input
files (rather than letting the compiler choose a default
based on the file name suffix). This option applies to
all following input files until the next -x option.
Possible values for language are:
c c-header cpp-output
c] c]-header c]-cpp-output
objective-c objective-c-header objc-cpp-output
assembler assembler-with-cpp
ada
f77 f77-cpp-input ratfor
java
treelang
-x none
Turn off any specification of a language, so that
subsequent files are handled according to their file
name suffixes (as they are if -x has not been used at
all).
-pass-exit-codes
Normally the gcc program will exit with the code of 1 if
any phase of the compiler returns a non-success return
code. If you specify -pass-exit-codes, the gcc program
will instead return with numerically highest error
produced by any phase that returned an error indication.
If you only want some of the stages of compilation, you can
use -x (or filename suffixes) to tell gcc where to start,
and one of the options -c, -S, or -E to say where gcc is to
stop. Note that some combinations (for example, -x cpp-
output -E) instruct gcc to do nothing at all.
-c Compile or assemble the source files, but do not link.
The linking stage simply is not done. The ultimate
output is in the form of an object file for each source
file.
By default, the object file name for a source file is
made by replacing the suffix .c, .i, .s, etc., with .o.
Unrecognized input files, not requiring compilation or
assembly, are ignored.
-S Stop after the stage of compilation proper; do not
assemble. The output is in the form of an assembler
code file for each non-assembler input file specified.
gcc-3.4.3 Last change: 2004-11-05 12
GNU GC(1)
By default, the assembler file name for a source file is
made by replacing the suffix .c, .i, etc., with .s.
Input files that don't require compilation are ignored.
-E Stop after the preprocessing stage; do not run the
compiler proper. The output is in the form of
preprocessed source code, which is sent to the standard
output.
Input files which don't require preprocessing are
ignored.
-o file
Place output in file file. This applies regardless to
whatever sort of output is being produced, whether it be
an executable file, an object file, an assembler file or
preprocessed C code.
If you specify -o when compiling more than one input
file, or you are producing an executable file as output,
all the source files on the command line will be
compiled at once.
If -o is not specified, the default is to put an
executable file in a.out, the object file for
source.suffix in source.o, its assembler file in
source.s, and all preprocessed C source on standard
output.
-v Print (on standard error output) the commands executed
to run the stages of compilation. Also print the
version number of the compiler driver program and of the
preprocessor and the compiler proper.
-###
Like -v except the commands are not executed and all
command arguments are quoted. This is useful for shell
scripts to capture the driver-generated command lines.
-pipe
Use pipes rather than temporary files for communication
between the various stages of compilation. This fails
to work on some systems where the assembler is unable to
read from a pipe; but the GNU assembler has no trouble.
--help
Print (on the standard output) a description of the
command line options understood by gcc. If the -v
option is also specified then --help will also be passed
on to the various processes invoked by gcc, so that they
can display the command line options they accept. If
gcc-3.4.3 Last change: 2004-11-05 13
GNU GC(1)
the -Wextra option is also specified then command line
options which have no documentation associated with them
will also be displayed.
--target-help
Print (on the standard output) a description of target
specific command line options for each tool.
--version
Display the version number and copyrights of the invoked
GC.
Compiling C] Programs
C] source files conventionally use one of the suffixes .C,
.cc, .cpp, .CP, .c], .cp, or .cxx; C] header files often
use .hh or .H; and preprocessed C] files use the suffix
.ii. GC recognizes files with these names and compiles
them as C] programs even if you call the compiler the same
way as for compiling C programs (usually with the name gcc).
However, C] programs often require class libraries as well
as a compiler that understands the C] language---and under
some circumstances, you might want to compile programs or
header files from standard input, or otherwise without a
suffix that flags them as C] programs. You might also like
to precompile a C header file with a .h extension to be used
in C] compilations. g] is a program that calls GC with
the default language set to C], and automatically specifies
linking against the C] library. On many systems, g] is
also installed with the name c].
When you compile C] programs, you may specify many of the
same command-line options that you use for compiling
programs in any language; or command-line options meaningful
for C and related languages; or options that are meaningful
only for C] programs.
Options Controlling C Dialect
The following options control the dialect of C (or languages
derived from C, such as C] and Objective-C) that the
compiler accepts:
-ansi
In C mode, support all ISO C90 programs. In C] mode,
remove GNU extensions that conflict with ISO C].
This turns off certain features of GC that are
incompatible with ISO C90 (when compiling C code), or of
standard C] (when compiling C] code), such as the
"asm" and "typeof" keywords, and predefined macros such
gcc-3.4.3 Last change: 2004-11-05 14
GNU GC(1)
as "unix" and "vax" that identify the type of system you
are using. It also enables the undesirable and rarely
used ISO trigraph feature. For the C compiler, it
disables recognition of C] style / comments as well as
the "inline" keyword.
The alternate keywords "asm", "extension",
"inline" and "typeof" continue to work despite
-ansi. You would not want to use them in an ISO C
program, of course, but it is useful to put them in
header files that might be included in compilations done
with -ansi. Alternate predefined macros such as
"unix" and "vax" are also available, with or
without -ansi.
The -ansi option does not cause non-ISO programs to be
rejected gratuitously. For that, -pedantic is required
in addition to -ansi.
The macro "STRICTANSI" is predefined when the -ansi
option is used. Some header files may notice this macro
and refrain from declaring certain functions or defining
certain macros that the ISO standard doesn't call for;
this is to avoid interfering with any programs that
might use these names for other things.
Functions which would normally be built in but do not
have semantics defined by ISO C (such as "alloca" and
"ffs") are not built-in functions with -ansi is used.
-std=
Determine the language standard. This option is
currently only supported when compiling C or C]. A
value for this option must be provided; possible values
are
c89
iso9899:1990
ISO C90 (same as -ansi).
iso9899:199409
ISO C90 as modified in amendment 1.
c99
c9x
iso9899:1999
iso9899:199x
ISO C99. Note that this standard is not yet fully
supported; see
for more
information. The names c9x and iso9899:199x are
deprecated.
gcc-3.4.3 Last change: 2004-11-05 15
GNU GC(1)
gnu89
Default, ISO C90 plus GNU extensions (including some
C99 features).
gnu99
gnu9x
ISO C99 plus GNU extensions. When ISO C99 is fully
implemented in GC, this will become the default.
The name gnu9x is deprecated.
c]98
The 1998 ISO C] standard plus amendments.
gnu]98
The same as -std=c]98 plus GNU extensions. This is
the default for C] code.
Even when this option is not specified, you can still
use some of the features of newer standards in so far as
they do not conflict with previous C standards. For
example, you may use "restrict" even when -std=c99
is not specified.
The -std options specifying some version of ISO C have
the same effects as -ansi, except that features that
were not in ISO C90 but are in the specified version
(for example, / comments and the "inline" keyword in
ISO C99) are not disabled.
-aux-info filename
Output to the given filename prototyped declarations for
all functions declared and/or defined in a translation
unit, including those in header files. This option is
silently ignored in any language other than C.
Besides declarations, the file indicates, in comments,
the origin of each declaration (source file and line),
whether the declaration was implicit, prototyped or
unprototyped (I, N for new or O for old, respectively,
in the first character after the line number and the
colon), and whether it came from a declaration or a
definition (C or F, respectively, in the following
character). In the case of function definitions, a
K&R-style list of arguments followed by their
declarations is also provided, inside comments, after
the declaration.
-fno-asm
Do not recognize "asm", "inline" or "typeof" as a
keyword, so that code can use these words as
identifiers. You can use the keywords "asm",
"inline" and "typeof" instead. -ansi implies
gcc-3.4.3 Last change: 2004-11-05 16
GNU GC(1)
-fno-asm.
In C], this switch only affects the "typeof" keyword,
since "asm" and "inline" are standard keywords. You may
want to use the -fno-gnu-keywords flag instead, which
has the same effect. In C99 mode (-std=c99 or
-std=gnu99), this switch only affects the "asm" and
"typeof" keywords, since "inline" is a standard keyword
in ISO C99.
-fno-builtin
-fno-builtin-function
Don't recognize built-in functions that do not begin
with builtin as prefix.
GC normally generates special code to handle certain
built-in functions more efficiently; for instance, calls
to "alloca" may become single instructions that adjust
the stack directly, and calls to "memcpy" may become
inline copy loops. The resulting code is often both
smaller and faster, but since the function calls no
longer appear as such, you cannot set a breakpoint on
those calls, nor can you change the behavior of the
functions by linking with a different library.
With the -fno-builtin-function option only the built-in
function function is disabled. function must not begin
with builtin. If a function is named this is not
built-in in this version of GC, this option is ignored.
There is no corresponding -fbuiltin-function option; if
you wish to enable built-in functions selectively when
using -fno-builtin or -ffreestanding, you may define
macros such as:
#define abs(n) builtinabs ((n))
#define strcpy(d, s) builtinstrcpy ((d), (s))
-fhosted
Assert that compilation takes place in a hosted
environment. This implies -fbuiltin. A hosted
environment is one in which the entire standard library
is available, and in which "main" has a return type of
"int". Examples are nearly everything except a kernel.
This is equivalent to -fno-freestanding.
-ffreestanding
Assert that compilation takes place in a freestanding
environment. This implies -fno-builtin. A freestanding
environment is one in which the standard library may not
exist, and program startup may not necessarily be at
"main". The most obvious example is an OS kernel. This
is equivalent to -fno-hosted.
gcc-3.4.3 Last change: 2004-11-05 17
GNU GC(1)
-fms-extensions
Accept some non-standard constructs used in Microsoft
header files.
-trigraphs
Support ISO C trigraphs. The -ansi option (and -std
options for strict ISO C conformance) implies
-trigraphs.
-no-integrated-cpp
Performs a compilation in two passes: preprocessing and
compiling. This option allows a user supplied "cc1",
"cc1plus", or "cc1obj" via the -B option. The user
supplied compilation step can then add in an additional
preprocessing step after normal preprocessing but before
compiling. The default is to use the integrated cpp
(internal cpp)
The semantics of this option will change if "cc1",
"cc1plus", and "cc1obj" are merged.
-traditional
-traditional-cpp
Formerly, these options caused GC to attempt to emulate
a pre-standard C compiler. They are now only supported
with the -E switch. The preprocessor continues to
support a pre-standard mode. See the GNU CP manual for
details.
-fcond-mismatch
Allow conditional expressions with mismatched types in
the second and third arguments. The value of such an
expression is void. This option is not supported for
C].
-funsigned-char
Let the type "char" be unsigned, like "unsigned char".
Each kind of machine has a default for what "char"
should be. It is either like "unsigned char" by default
or like "signed char" by default.
Ideally, a portable program should always use "signed
char" or "unsigned char" when it depends on the
signedness of an object. But many programs have been
written to use plain "char" and expect it to be signed,
or expect it to be unsigned, depending on the machines
they were written for. This option, and its inverse,
let you make such a program work with the opposite
default.
The type "char" is always a distinct type from each of
gcc-3.4.3 Last change: 2004-11-05 18
GNU GC(1)
"signed char" or "unsigned char", even though its
behavior is always just like one of those two.
-fsigned-char
Let the type "char" be signed, like "signed char".
Note that this is equivalent to -fno-unsigned-char,
which is the negative form of -funsigned-char.
Likewise, the option -fno-signed-char is equivalent to
-funsigned-char.
-fsigned-bitfields
-funsigned-bitfields
-fno-signed-bitfields
-fno-unsigned-bitfields
These options control whether a bit-field is signed or
unsigned, when the declaration does not use either
"signed" or "unsigned". By default, such a bit-field is
signed, because this is consistent: the basic integer
types such as "int" are signed types.
-fwritable-strings
Store string constants in the writable data segment and
don't uniquize them. This is for compatibility with old
programs which assume they can write into string
constants.
Writing into string constants is a very bad idea;
``constants'' should be constant.
This option is deprecated.
Options Controlling C] Dialect
This section describes the command-line options that are
only meaningful for C] programs; but you can also use most
of the GNU compiler options regardless of what language your
program is in. For example, you might compile a file
"firstClass.C" like this:
g] -g -frepo -O -c firstClass.C
In this example, only -frepo is an option meant only for C]
programs; you can use the other options with any language
supported by GC.
Here is a list of options that are only for compiling C]
programs:
-fabi-version=n
Use version n of the C] ABI. Version 2 is the version
of the C] ABI that first appeared in G] 3.4. Version
gcc-3.4.3 Last change: 2004-11-05 19
GNU GC(1)
1 is the version of the C] ABI that first appeared in
G] 3.2. Version 0 will always be the version that
conforms most closely to the C] ABI specification.
Therefore, the ABI obtained using version 0 will change
as ABI bugs are fixed.
The default is version 2.
-fno-access-control
Turn off all access checking. This switch is mainly
useful for working around bugs in the access control
code.
-fcheck-new
Check that the pointer returned by "operator new" is
non-null before attempting to modify the storage
allocated. This check is normally unnecessary because
the C] standard specifies that "operator new" will only
return 0 if it is declared throw(), in which case the
compiler will always check the return value even without
this option. In all other cases, when "operator new"
has a non-empty exception specification, memory
exhaustion is signalled by throwing "std::badalloc".
See also new (nothrow).
-fconserve-space
Put uninitialized or runtime-initialized global
variables into the common segment, as C does. This
saves space in the executable at the cost of not
diagnosing duplicate definitions. If you compile with
this flag and your program mysteriously crashes after
"main()" has completed, you may have an object that is
being destroyed twice because two definitions were
merged.
This option is no longer useful on most targets, now
that support has been added for putting variables into
BS without making them common.
-fno-const-strings
Give string constants type "char *" instead of type
"const char *". By default, G] uses type "const char
*" as required by the standard. Even if you use
-fno-const-strings, you cannot actually modify the value
of a string constant, unless you also use
-fwritable-strings.
This option might be removed in a future release of G].
For maximum portability, you should structure your code
so that it works with string constants that have type
"const char *".
gcc-3.4.3 Last change: 2004-11-05 20
GNU GC(1)
-fno-elide-constructors
The C] standard allows an implementation to omit
creating a temporary which is only used to initialize
another object of the same type. Specifying this option
disables that optimization, and forces G] to call the
copy constructor in all cases.
-fno-enforce-eh-specs
Don't check for violation of exception specifications at
runtime. This option violates the C] standard, but may
be useful for reducing code size in production builds,
much like defining NDEBUG. The compiler will still
optimize based on the exception specifications.
-ffor-scope
-fno-for-scope
If -ffor-scope is specified, the scope of variables
declared in a for-init-statement is limited to the for
loop itself, as specified by the C] standard. If
-fno-for-scope is specified, the scope of variables
declared in a for-init-statement extends to the end of
the enclosing scope, as was the case in old versions of
G], and other (traditional) implementations of C].
The default if neither flag is given to follow the
standard, but to allow and give a warning for old-style
code that would otherwise be invalid, or have different
behavior.
-fno-gnu-keywords
Do not recognize "typeof" as a keyword, so that code can
use this word as an identifier. You can use the keyword
"typeof" instead. -ansi implies -fno-gnu-keywords.
-fno-implicit-templates
Never emit code for non-inline templates which are
instantiated implicitly (i.e. by use); only emit code
for explicit instantiations.
-fno-implicit-inline-templates
Don't emit code for implicit instantiations of inline
templates, either. The default is to handle inlines
differently so that compiles with and without
optimization will need the same set of explicit
instantiations.
-fno-implement-inlines
To save space, do not emit out-of-line copies of inline
functions controlled by #pragma implementation. This
will cause linker errors if these functions are not
inlined everywhere they are called.
gcc-3.4.3 Last change: 2004-11-05 21
GNU GC(1)
-fms-extensions
Disable pedantic warnings about constructs used in MFC,
such as implicit int and getting a pointer to member
function via non-standard syntax.
-fno-nonansi-builtins
Disable built-in declarations of functions that are not
mandated by ANSI/ISO C. These include "ffs", "alloca",
"exit", "index", "bzero", "conjf", and other related
functions.
-fno-operator-names
Do not treat the operator name keywords "and", "bitand",
"bitor", "compl", "not", "or" and "xor" as synonyms as
keywords.
-fno-optional-diags
Disable diagnostics that the standard says a compiler
does not need to issue. Currently, the only such
diagnostic issued by G] is the one for a name having
multiple meanings within a class.
-fpermissive
Downgrade some diagnostics about nonconformant code from
errors to warnings. Thus, using -fpermissive will allow
some nonconforming code to compile.
-frepo
Enable automatic template instantiation at link time.
This option also implies -fno-implicit-templates.
-fno-rtti
Disable generation of information about every class with
virtual functions for use by the C] runtime type
identification features (dynamiccast and typeid). If
you don't use those parts of the language, you can save
some space by using this flag. Note that exception
handling uses the same information, but it will generate
it as needed.
-fstats
Emit statistics about front-end processing at the end of
the compilation. This information is generally only
useful to the G] development team.
-ftemplate-depth-n
Set the maximum instantiation depth for template classes
to n. A limit on the template instantiation depth is
needed to detect endless recursions during template
class instantiation. ANSI/ISO C] conforming programs
must not rely on a maximum depth greater than 17.
gcc-3.4.3 Last change: 2004-11-05 22
GNU GC(1)
-fuse-cxa-atexit
Register destructors for objects with static storage
duration with the "cxaatexit" function rather than
the "atexit" function. This option is required for
fully standards-compliant handling of static
destructors, but will only work if your C library
supports "cxaatexit".
-fno-weak
Do not use weak symbol support, even if it is provided
by the linker. By default, G] will use weak symbols if
they are available. This option exists only for
testing, and should not be used by end-users; it will
result in inferior code and has no benefits. This
option may be removed in a future release of G].
-nostdinc]
Do not search for header files in the standard
directories specific to C], but do still search the
other standard directories. (This option is used when
building the C] library.)
In addition, these optimization, warning, and code
generation options have meanings only for C] programs:
-fno-default-inline
Do not assume inline for functions defined inside a
class scope.
Note that these functions will have linkage like
inline functions; they just won't be inlined by default.
-Wabi (C] only)
Warn when G] generates code that is probably not
compatible with the vendor-neutral C] ABI. Although an
effort has been made to warn about all such cases, there
are probably some cases that are not warned about, even
though G] is generating incompatible code. There may
also be cases where warnings are emitted even though the
code that is generated will be compatible.
You should rewrite your code to avoid these warnings if
you are concerned about the fact that code generated by
G] may not be binary compatible with code generated by
other compilers.
The known incompatibilities at this point include:
]o Incorrect handling of tail-padding for bit-fields.
G] may attempt to pack data into the same byte as a
base class. For example:
gcc-3.4.3 Last change: 2004-11-05 23
GNU GC(1)
struct A { virtual void f(); int f1 : 1; };
struct B : public A { int f2 : 1; };
In this case, G] will place "B::f2" into the same
byte as"A::f1"; other compilers will not. You can
avoid this problem by explicitly padding "A" so that
its size is a multiple of the byte size on your
platform; that will cause G] and other compilers to
layout "B" identically.
]o Incorrect handling of tail-padding for virtual
bases. G] does not use tail padding when laying
out virtual bases. For example:
struct A { virtual void f(); char c1; };
struct B { B(); char c2; };
struct C : public A, public virtual B {};
In this case, G] will not place "B" into the tail-
padding for "A"; other compilers will. You can
avoid this problem by explicitly padding "A" so that
its size is a multiple of its alignment (ignoring
virtual base classes); that will cause G] and other
compilers to layout "C" identically.
]o Incorrect handling of bit-fields with declared
widths greater than that of their underlying types,
when the bit-fields appear in a union. For example:
union U { int i : 4096; };
Assuming that an "int" does not have 4096 bits, G]
will make the union too small by the number of bits
in an "int".
]o Empty classes can be placed at incorrect offsets.
For example:
struct A {};
struct B {
A a;
virtual void f ();
};
struct C : public B, public A {};
G] will place the "A" base class of "C" at a
nonzero offset; it should be placed at offset zero.
G] mistakenly believes that the "A" data member of
"B" is already at offset zero.
gcc-3.4.3 Last change: 2004-11-05 24
GNU GC(1)
]o Names of template functions whose types involve
"typename" or template template parameters can be
mangled incorrectly.
template
void f(typename Q::X) {}
template class Q>
void f(typename Q::X) {}
Instantiations of these templates may be mangled
incorrectly.
-Wctor-dtor-privacy (C] only)
Warn when a class seems unusable because all the
constructors or destructors in that class are private,
and it has neither friends nor public static member
functions.
-Wnon-virtual-dtor (C] only)
Warn when a class appears to be polymorphic, thereby
requiring a virtual destructor, yet it declares a non-
virtual one. This warning is enabled by -Wall.
-Wreorder (C] only)
Warn when the order of member initializers given in the
code does not match the order in which they must be
executed. For instance:
struct A {
int i;
int j;
A(): j (0), i (1) { }
};
The compiler will rearrange the member initializers for
i and j to match the declaration order of the members,
emitting a warning to that effect. This warning is
enabled by -Wall.
The following -W... options are not affected by -Wall.
-Weffc] (C] only)
Warn about violations of the following style guidelines
from Scott Meyers' Effective C] book:
]o Item 11: Define a copy constructor and an
assignment operator for classes with dynamically
allocated memory.
]o Item 12: Prefer initialization to assignment in
constructors.
gcc-3.4.3 Last change: 2004-11-05 25
GNU GC(1)
]o Item 14: Make destructors virtual in base classes.
]o Item 15: Have "operator=" return a reference to
*this.
]o Item 23: Don't try to return a reference when you
must return an object.
Also warn about violations of the following style
guidelines from Scott Meyers' More Effective C] book:
]o Item 6: Distinguish between prefix and postfix
forms of increment and decrement operators.
]o Item 7: Never overload "&&", "", or ",".
When selecting this option, be aware that the standard
library headers do not obey all of these guidelines; use
grep -v to filter out those warnings.
-Wno-deprecated (C] only)
Do not warn about usage of deprecated features.
-Wno-non-template-friend (C] only)
Disable warnings when non-templatized friend functions
are declared within a template. Since the advent of
explicit template specification support in G], if the
name of the friend is an unqualified-id (i.e., friend
foo(int)), the C] language specification demands that
the friend declare or define an ordinary, nontemplate
function. (Section 14.5.3). Before G] implemented
explicit specification, unqualified-ids could be
interpreted as a particular specialization of a
templatized function. Because this non-conforming
behavior is no longer the default behavior for G],
-Wnon-template-friend allows the compiler to check
existing code for potential trouble spots and is on by
default. This new compiler behavior can be turned off
with -Wno-non-template-friend which keeps the conformant
compiler code but disables the helpful warning.
-Wold-style-cast (C] only)
Warn if an old-style (C-style) cast to a non-void type
is used within a C] program. The new-style casts
(staticcast, reinterpretcast, and constcast) are less
vulnerable to unintended effects and much easier to
search for.
-Woverloaded-virtual (C] only)
Warn when a function declaration hides virtual functions
from a base class. For example, in:
gcc-3.4.3 Last change: 2004-11-05 26
GNU GC(1)
struct A {
virtual void f();
};
struct B: public A {
void f(int);
};
the "A" class version of "f" is hidden in "B", and code
like:
B* b;
b->f();
will fail to compile.
-Wno-pmf-conversions (C] only)
Disable the diagnostic for converting a bound pointer to
member function to a plain pointer.
-Wsign-promo (C] only)
Warn when overload resolution chooses a promotion from
unsigned or enumerated type to a signed type, over a
conversion to an unsigned type of the same size.
Previous versions of G] would try to preserve
unsignedness, but the standard mandates the current
behavior.
-Wsynth (C] only)
Warn when G]'s synthesis behavior does not match that
of cfront. For instance:
struct A {
operator int ();
A& operator = (int);
};
main ()
{
A a,b;
a = b;
}
In this example, G] will synthesize a default A&
operator = (const A&);, while cfront will use the user-
defined operator =.
Options Controlling Objective-C Dialect
(NOTE: This manual does not describe the Objective-C
language itself. See for
references.)
gcc-3.4.3 Last change: 2004-11-05 27
GNU GC(1)
This section describes the command-line options that are
only meaningful for Objective-C programs, but you can also
use most of the GNU compiler options regardless of what
language your program is in. For example, you might compile
a file "someclass.m" like this:
gcc -g -fgnu-runtime -O -c someclass.m
In this example, -fgnu-runtime is an option meant only for
Objective-C programs; you can use the other options with any
language supported by GC.
Here is a list of options that are only for compiling
Objective-C programs:
-fconstant-string-class=class-name
Use class-name as the name of the class to instantiate
for each literal string specified with the syntax
"@"..."". The default class name is "NXConstantString"
if the GNU runtime is being used, and "NSConstantString"
if the NeXT runtime is being used (see below). The
-fconstant-cfstrings option, if also present, will
override the -fconstant-string-class setting and cause
"@"..."" literals to be laid out as constant
CoreFoundation strings.
-fgnu-runtime
Generate object code compatible with the standard GNU
Objective-C runtime. This is the default for most types
of systems.
-fnext-runtime
Generate output compatible with the NeXT runtime. This
is the default for NeXT-based systems, including Darwin
and Mac OS X. The macro "NEXTRUNTIME" is
predefined if (and only if) this option is used.
-fno-nil-receivers
Assume that all Objective-C message dispatches (e.g.,
"[receiver message:arg]") in this translation unit
ensure that the receiver is not "nil". This allows for
more efficient entry points in the runtime to be used.
Currently, this option is only available in conjunction
with the NeXT runtime on Mac OS X 10.3 and later.
-fobjc-exceptions
Enable syntactic support for structured exception
handling in Objective-C, similar to what is offered by
C] and Java. Currently, this option is only available
in conjunction with the NeXT runtime on Mac OS X 10.3
and later.
gcc-3.4.3 Last change: 2004-11-05 28
GNU GC(1)
@try {
...
@throw expr;
...
}
@catch (AnObjClass *exc) {
...
@throw expr;
...
@throw;
...
}
@catch (AnotherClass *exc) {
...
}
@catch (id allOthers) {
...
}
@finally {
...
@throw expr;
...
}
The @throw statement may appear anywhere in an
Objective-C or Objective-C] program; when used inside
of a @catch block, the @throw may appear without an
argument (as shown above), in which case the object
caught by the @catch will be rethrown.
Note that only (pointers to) Objective-C objects may be
thrown and caught using this scheme. When an object is
thrown, it will be caught by the nearest @catch clause
capable of handling objects of that type, analogously to
how "catch" blocks work in C] and Java. A "@catch(id
...)" clause (as shown above) may also be provided to
catch any and all Objective-C exceptions not caught by
previous @catch clauses (if any).
The @finally clause, if present, will be executed upon
exit from the immediately preceding "@try ... @catch"
section. This will happen regardless of whether any
exceptions are thrown, caught or rethrown inside the
"@try ... @catch" section, analogously to the behavior
of the "finally" clause in Java.
There are several caveats to using the new exception
mechanism:
]o Although currently designed to be binary compatible
with "NSHANDLER"-style idioms provided by the
"NSException" class, the new exceptions can only be
gcc-3.4.3 Last change: 2004-11-05 29
GNU GC(1)
used on Mac OS X 10.3 (Panther) and later systems,
due to additional functionality needed in the (NeXT)
Objective-C runtime.
]o As mentioned above, the new exceptions do not
support handling types other than Objective-C
objects. Furthermore, when used from
Objective-C], the Objective-C exception model does
not interoperate with C] exceptions at this time.
This means you cannot @throw an exception from
Objective-C and "catch" it in C], or vice versa
(i.e., "throw ... @catch").
The -fobjc-exceptions switch also enables the use of
synchronization blocks for thread-safe execution:
@synchronized (ObjClass *guard) {
...
}
Upon entering the @synchronized block, a thread of
execution shall first check whether a lock has been
placed on the corresponding "guard" object by another
thread. If it has, the current thread shall wait until
the other thread relinquishes its lock. Once "guard"
becomes available, the current thread will place its own
lock on it, execute the code contained in the
@synchronized block, and finally relinquish the lock
(thereby making "guard" available to other threads).
Unlike Java, Objective-C does not allow for entire
methods to be marked @synchronized. Note that throwing
exceptions out of @synchronized blocks is allowed, and
will cause the guarding object to be unlocked properly.
-freplace-objc-classes
Emit a special marker instructing ld(1) not to
statically link in the resulting object file, and allow
dyld(1) to load it in at run time instead. This is used
in conjunction with the Fix-and-Continue debugging mode,
where the object file in question may be recompiled and
dynamically reloaded in the course of program execution,
without the need to restart the program itself.
Currently, Fix-and-Continue functionality is only
available in conjunction with the NeXT runtime on Mac OS
X 10.3 and later.
-fzero-link
When compiling for the NeXT runtime, the compiler
ordinarily replaces calls to "objcgetClass("...")"
(when the name of the class is known at compile time)
with static class references that get initialized at
gcc-3.4.3 Last change: 2004-11-05 30
GNU GC(1)
load time, which improves run-time performance.
Specifying the -fzero-link flag suppresses this behavior
and causes calls to "objcgetClass("...")" to be
retained. This is useful in Zero-Link debugging mode,
since it allows for individual class implementations to
be modified during program execution.
-gen-decls
Dump interface declarations for all classes seen in the
source file to a file named sourcename.decl.
-Wno-protocol
If a class is declared to implement a protocol, a
warning is issued for every method in the protocol that
is not implemented by the class. The default behavior
is to issue a warning for every method not explicitly
implemented in the class, even if a method
implementation is inherited from the superclass. If you
use the "-Wno-protocol" option, then methods inherited
from the superclass are considered to be implemented,
and no warning is issued for them.
-Wselector
Warn if multiple methods of different types for the same
selector are found during compilation. The check is
performed on the list of methods in the final stage of
compilation. Additionally, a check is performed for
each selector appearing in a "@selector(...)"
expression, and a corresponding method for that selector
has been found during compilation. Because these checks
scan the method table only at the end of compilation,
these warnings are not produced if the final stage of
compilation is not reached, for example because an error
is found during compilation, or because the
"-fsyntax-only" option is being used.
-Wundeclared-selector
Warn if a "@selector(...)" expression referring to an
undeclared selector is found. A selector is considered
undeclared if no method with that name has been declared
before the "@selector(...)" expression, either
explicitly in an @interface or @protocol declaration, or
implicitly in an @implementation section. This option
always performs its checks as soon as a "@selector(...)"
expression is found, while "-Wselector" only performs
its checks in the final stage of compilation. This also
enforces the coding style convention that methods and
selectors must be declared before being used.
-print-objc-runtime-info
Generate C header describing the largest structure that
is passed by value, if any.
gcc-3.4.3 Last change: 2004-11-05 31
GNU GC(1)
Options to Control Diagnostic Messages Formatting
Traditionally, diagnostic messages have been formatted
irrespective of the output device's aspect (e.g. its width,
...). The options described below can be used to control
the diagnostic messages formatting algorithm, e.g. how many
characters per line, how often source location information
should be reported. Right now, only the C] front end can
honor these options. However it is expected, in the near
future, that the remaining front ends would be able to
digest them correctly.
-fmessage-length=n
Try to format error messages so that they fit on lines
of about n characters. The default is 72 characters for
g] and 0 for the rest of the front ends supported by
GC. If n is zero, then no line-wrapping will be done;
each error message will appear on a single line.
-fdiagnostics-show-location=once
Only meaningful in line-wrapping mode. Instructs the
diagnostic messages reporter to emit once source
location information; that is, in case the message is
too long to fit on a single physical line and has to be
wrapped, the source location won't be emitted (as
prefix) again, over and over, in subsequent continuation
lines. This is the default behavior.
-fdiagnostics-show-location=every-line
Only meaningful in line-wrapping mode. Instructs the
diagnostic messages reporter to emit the same source
location information (as prefix) for physical lines that
result from the process of breaking a message which is
too long to fit on a single line.
Options to Request or Suppress Warnings
Warnings are diagnostic messages that report constructions
which are not inherently erroneous but which are risky or
suggest there may have been an error.
You can request many specific warnings with options
beginning -W, for example -Wimplicit to request warnings on
implicit declarations. Each of these specific warning
options also has a negative form beginning -Wno- to turn off
warnings; for example, -Wno-implicit. This manual lists
only one of the two forms, whichever is not the default.
The following options control the amount and kinds of
warnings produced by GC; for further, language-specific
options also refer to C] Dialect Options and Objective-C
Dialect Options.
gcc-3.4.3 Last change: 2004-11-05 32
GNU GC(1)
-fsyntax-only
Check the code for syntax errors, but don't do anything
beyond that.
-pedantic
Issue all the warnings demanded by strict ISO C and ISO
C]; reject all programs that use forbidden extensions,
and some other programs that do not follow ISO C and ISO
C]. For ISO C, follows the version of the ISO C
standard specified by any -std option used.
Valid ISO C and ISO C] programs should compile properly
with or without this option (though a rare few will
require -ansi or a -std option specifying the required
version of ISO C). However, without this option,
certain GNU extensions and traditional C and C]
features are supported as well. With this option, they
are rejected.
-pedantic does not cause warning messages for use of the
alternate keywords whose names begin and end with .
Pedantic warnings are also disabled in the expression
that follows "extension". However, only system
header files should use these escape routes; application
programs should avoid them.
Some users try to use -pedantic to check programs for
strict ISO C conformance. They soon find that it does
not do quite what they want: it finds some non-ISO
practices, but not all---only those for which ISO C
requires a diagnostic, and some others for which
diagnostics have been added.
A feature to report any failure to conform to ISO C
might be useful in some instances, but would require
considerable additional work and would be quite
different from -pedantic. We don't have plans to
support such a feature in the near future.
Where the standard specified with -std represents a GNU
extended dialect of C, such as gnu89 or gnu99, there is
a corresponding base standard, the version of ISO C on
which the GNU extended dialect is based. Warnings from
-pedantic are given where they are required by the base
standard. (It would not make sense for such warnings to
be given only for features not in the specified GNU C
dialect, since by definition the GNU dialects of C
include all features the compiler supports with the
given option, and there would be nothing to warn about.)
-pedantic-errors
Like -pedantic, except that errors are produced rather
gcc-3.4.3 Last change: 2004-11-05 33
GNU GC(1)
than warnings.
-w Inhibit all warning messages.
-Wno-import
Inhibit warning messages about the use of #import.
-Wchar-subscripts
Warn if an array subscript has type "char". This is a
common cause of error, as programmers often forget that
this type is signed on some machines.
-Wcomment
Warn whenever a comment-start sequence /* appears in a
/* comment, or whenever a Backslash-Newline appears in a
/ comment.
-Wformat
Check calls to "printf" and "scanf", etc., to make sure
that the arguments supplied have types appropriate to
the format string specified, and that the conversions
specified in the format string make sense. This
includes standard functions, and others specified by
format attributes, in the "printf", "scanf", "strftime"
and "strfmon" (an X/Open extension, not in the C
standard) families.
The formats are checked against the format features
supported by GNU libc version 2.2. These include all
ISO C90 and C99 features, as well as features from the
Single Unix Specification and some BSD and GNU
extensions. Other library implementations may not
support all these features; GC does not support warning
about features that go beyond a particular library's
limitations. However, if -pedantic is used with
-Wformat, warnings will be given about format features
not in the selected standard version (but not for
"strfmon" formats, since those are not in any version of
the C standard).
Since -Wformat also checks for null format arguments for
several functions, -Wformat also implies -Wnonnull.
-Wformat is included in -Wall. For more control over
some aspects of format checking, the options
-Wformat-y2k, -Wno-format-extra-args,
-Wno-format-zero-length, -Wformat-nonliteral,
-Wformat-security, and -Wformat=2 are available, but are
not included in -Wall.
-Wformat-y2k
If -Wformat is specified, also warn about "strftime"
gcc-3.4.3 Last change: 2004-11-05 34
GNU GC(1)
formats which may yield only a two-digit year.
-Wno-format-extra-args
If -Wformat is specified, do not warn about excess
arguments to a "printf" or "scanf" format function. The
C standard specifies that such arguments are ignored.
Where the unused arguments lie between used arguments
that are specified with $ operand number specifications,
normally warnings are still given, since the
implementation could not know what type to pass to
"vaarg" to skip the unused arguments. However, in the
case of "scanf" formats, this option will suppress the
warning if the unused arguments are all pointers, since
the Single Unix Specification says that such unused
arguments are allowed.
-Wno-format-zero-length
If -Wformat is specified, do not warn about zero-length
formats. The C standard specifies that zero-length
formats are allowed.
-Wformat-nonliteral
If -Wformat is specified, also warn if the format string
is not a string literal and so cannot be checked, unless
the format function takes its format arguments as a
"valist".
-Wformat-security
If -Wformat is specified, also warn about uses of format
functions that represent possible security problems. At
present, this warns about calls to "printf" and "scanf"
functions where the format string is not a string
literal and there are no format arguments, as in "printf
(foo);". This may be a security hole if the format
string came from untrusted input and contains %n. (This
is currently a subset of what -Wformat-nonliteral warns
about, but in future warnings may be added to
-Wformat-security that are not included in
-Wformat-nonliteral.)
-Wformat=2
Enable -Wformat plus format checks not included in
-Wformat. Currently equivalent to -Wformat
-Wformat-nonliteral -Wformat-security -Wformat-y2k.
-Wnonnull
Warn about passing a null pointer for arguments marked
as requiring a non-null value by the "nonnull" function
attribute.
-Wnonnull is included in -Wall and -Wformat. It can be
gcc-3.4.3 Last change: 2004-11-05 35
GNU GC(1)
disabled with the -Wno-nonnull option.
-Winit-self (C, C], and Objective-C only)
Warn about uninitialized variables which are initialized
with themselves. Note this option can only be used with
the -Wuninitialized option, which in turn only works
with -O1 and above.
For example, GC will warn about "i" being uninitialized
in the following snippet only when -Winit-self has been
specified:
int f()
{
int i = i;
return i;
}
-Wimplicit-int
Warn when a declaration does not specify a type.
-Wimplicit-function-declaration
-Werror-implicit-function-declaration
Give a warning (or error) whenever a function is used
before being declared.
-Wimplicit
Same as -Wimplicit-int and
-Wimplicit-function-declaration.
-Wmain
Warn if the type of main is suspicious. main should be
a function with external linkage, returning int, taking
either zero arguments, two, or three arguments of
appropriate types.
-Wmissing-braces
Warn if an aggregate or union initializer is not fully
bracketed. In the following example, the initializer
for a is not fully bracketed, but that for b is fully
bracketed.
int a[2][2] = { 0, 1, 2, 3 };
int b[2][2] = { { 0, 1 }, { 2, 3 } };
-Wparentheses
Warn if parentheses are omitted in certain contexts,
such as when there is an assignment in a context where a
truth value is expected, or when operators are nested
whose precedence people often get confused about.
Also warn about constructions where there may be
gcc-3.4.3 Last change: 2004-11-05 36
GNU GC(1)
confusion to which "if" statement an "else" branch
belongs. Here is an example of such a case:
{
if (a)
if (b)
foo ();
else
bar ();
}
In C, every "else" branch belongs to the innermost
possible "if" statement, which in this example is "if
(b)". This is often not what the programmer expected,
as illustrated in the above example by indentation the
programmer chose. When there is the potential for this
confusion, GC will issue a warning when this flag is
specified. To eliminate the warning, add explicit
braces around the innermost "if" statement so there is
no way the "else" could belong to the enclosing "if".
The resulting code would look like this:
{
if (a)
{
if (b)
foo ();
else
bar ();
}
}
-Wsequence-point
Warn about code that may have undefined semantics
because of violations of sequence point rules in the C
standard.
The C standard defines the order in which expressions in
a C program are evaluated in terms of sequence points,
which represent a partial ordering between the execution
of parts of the program: those executed before the
sequence point, and those executed after it. These
occur after the evaluation of a full expression (one
which is not part of a larger expression), after the
evaluation of the first operand of a "&&", "", "? :"
or "," (comma) operator, before a function is called
(but after the evaluation of its arguments and the
expression denoting the called function), and in certain
other places. Other than as expressed by the sequence
point rules, the order of evaluation of subexpressions
of an expression is not specified. All these rules
describe only a partial order rather than a total order,
gcc-3.4.3 Last change: 2004-11-05 37
GNU GC(1)
since, for example, if two functions are called within
one expression with no sequence point between them, the
order in which the functions are called is not
specified. However, the standards committee have ruled
that function calls do not overlap.
It is not specified when between sequence points
modifications to the values of objects take effect.
Programs whose behavior depends on this have undefined
behavior; the C standard specifies that ``Between the
previous and next sequence point an object shall have
its stored value modified at most once by the evaluation
of an expression. Furthermore, the prior value shall be
read only to determine the value to be stored.''. If a
program breaks these rules, the results on any
particular implementation are entirely unpredictable.
Examples of code with undefined behavior are "a = a];",
"a[n] = b[n]" and "a[i] = i;". Some more
complicated cases are not diagnosed by this option, and
it may give an occasional false positive result, but in
general it has been found fairly effective at detecting
this sort of problem in programs.
The present implementation of this option only works for
C programs. A future implementation may also work for
C] programs.
The C standard is worded confusingly, therefore there is
some debate over the precise meaning of the sequence
point rules in subtle cases. Links to discussions of
the problem, including proposed formal definitions, may
be found on the GC readings page, at
.
-Wreturn-type
Warn whenever a function is defined with a return-type
that defaults to "int". Also warn about any "return"
statement with no return-value in a function whose
return-type is not "void".
For C], a function without return type always produces
a diagnostic message, even when -Wno-return-type is
specified. The only exceptions are main and functions
defined in system headers.
-Wswitch
Warn whenever a "switch" statement has an index of
enumerated type and lacks a "case" for one or more of
the named codes of that enumeration. (The presence of a
"default" label prevents this warning.) "case" labels
outside the enumeration range also provoke warnings when
gcc-3.4.3 Last change: 2004-11-05 38
GNU GC(1)
this option is used.
-Wswitch-default
Warn whenever a "switch" statement does not have a
"default" case.
-Wswitch-enum
Warn whenever a "switch" statement has an index of
enumerated type and lacks a "case" for one or more of
the named codes of that enumeration. "case" labels
outside the enumeration range also provoke warnings when
this option is used.
-Wtrigraphs
Warn if any trigraphs are encountered that might change
the meaning of the program (trigraphs within comments
are not warned about).
-Wunused-function
Warn whenever a static function is declared but not
defined or a non\-inline static function is unused.
-Wunused-label
Warn whenever a label is declared but not used.
To suppress this warning use the unused attribute.
-Wunused-parameter
Warn whenever a function parameter is unused aside from
its declaration.
To suppress this warning use the unused attribute.
-Wunused-variable
Warn whenever a local variable or non-constant static
variable is unused aside from its declaration
To suppress this warning use the unused attribute.
-Wunused-value
Warn whenever a statement computes a result that is
explicitly not used.
To suppress this warning cast the expression to void.
-Wunused
All the above -Wunused options combined.
In order to get a warning about an unused function
parameter, you must either specify -Wextra -Wunused
(note that -Wall implies -Wunused), or separately
specify -Wunused-parameter.
gcc-3.4.3 Last change: 2004-11-05 39
GNU GC(1)
-Wuninitialized
Warn if an automatic variable is used without first
being initialized or if a variable may be clobbered by a
"setjmp" call.
These warnings are possible only in optimizing
compilation, because they require data flow information
that is computed only when optimizing. If you don't
specify -O, you simply won't get these warnings.
If you want to warn about code which uses the
uninitialized value of the variable in its own
initializer, use the -Winit-self option.
These warnings occur only for variables that are
candidates for register allocation. Therefore, they do
not occur for a variable that is declared "volatile", or
whose address is taken, or whose size is other than 1,
2, 4 or 8 bytes. Also, they do not occur for
structures, unions or arrays, even when they are in
registers.
Note that there may be no warning about a variable that
is used only to compute a value that itself is never
used, because such computations may be deleted by data
flow analysis before the warnings are printed.
These warnings are made optional because GC is not
smart enough to see all the reasons why the code might
be correct despite appearing to have an error. Here is
one example of how this can happen:
{
int x;
switch (y)
{
case 1: x = 1;
break;
case 2: x = 4;
break;
case 3: x = 5;
}
foo (x);
}
If the value of "y" is always 1, 2 or 3, then "x" is
always initialized, but GC doesn't know this. Here is
another common case:
gcc-3.4.3 Last change: 2004-11-05 40
GNU GC(1)
{
int savey;
if (changey) savey = y, y = newy;
...
if (changey) y = savey;
}
This has no bug because "savey" is used only if it is
set.
This option also warns when a non-volatile automatic
variable might be changed by a call to "longjmp". These
warnings as well are possible only in optimizing
compilation.
The compiler sees only the calls to "setjmp". It cannot
know where "longjmp" will be called; in fact, a signal
handler could call it at any point in the code. As a
result, you may get a warning even when there is in fact
no problem because "longjmp" cannot in fact be called at
the place which would cause a problem.
Some spurious warnings can be avoided if you declare all
the functions you use that never return as "noreturn".
-Wunknown-pragmas
Warn when a #pragma directive is encountered which is
not understood by GC. If this command line option is
used, warnings will even be issued for unknown pragmas
in system header files. This is not the case if the
warnings were only enabled by the -Wall command line
option.
-Wstrict-aliasing
This option is only active when -fstrict-aliasing is
active. It warns about code which might break the
strict aliasing rules that the compiler is using for
optimization. The warning does not catch all cases, but
does attempt to catch the more common pitfalls. It is
included in -Wall.
-Wall
All of the above -W options combined. This enables all
the warnings about constructions that some users
consider questionable, and that are easy to avoid (or
modify to prevent the warning), even in conjunction with
macros. This also enables some language-specific
warnings described in C] Dialect Options and
Objective-C Dialect Options.
The following -W... options are not implied by -Wall. Some
of them warn about constructions that users generally do not
gcc-3.4.3 Last change: 2004-11-05 41
GNU GC(1)
consider questionable, but which occasionally you might wish
to check for; others warn about constructions that are
necessary or hard to avoid in some cases, and there is no
simple way to modify the code to suppress the warning.
-Wextra
(This option used to be called -W. The older name is
still supported, but the newer name is more
descriptive.) Print extra warning messages for these
events:
]o A function can return either with or without a
value. (Falling off the end of the function body is
considered returning without a value.) For example,
this function would evoke such a warning:
foo (a)
{
if (a > 0)
return a;
}
]o An expression-statement or the left-hand side of a
comma expression contains no side effects. To
suppress the warning, cast the unused expression to
void. For example, an expression such as x[i,j]
will cause a warning, but x[(void)i,j] will not.
]o An unsigned value is compared against zero with < or
>=.
]o A comparison like x<=y<=z appears; this is
equivalent to (x<=y ? 1 : 0) <= z, which is a
different interpretation from that of ordinary
mathematical notation.
]o Storage-class specifiers like "static" are not the
first things in a declaration. According to the C
Standard, this usage is obsolescent.
]o The return type of a function has a type qualifier
such as "const". Such a type qualifier has no
effect, since the value returned by a function is
not an lvalue. (But don't warn about the GNU
extension of "volatile void" return types. That
extension will be warned about if -pedantic is
specified.)
]o If -Wall or -Wunused is also specified, warn about
unused arguments.
]o A comparison between signed and unsigned values
gcc-3.4.3 Last change: 2004-11-05 42
GNU GC(1)
could produce an incorrect result when the signed
value is converted to unsigned. (But don't warn if
-Wno-sign-compare is also specified.)
]o An aggregate has an initializer which does not
initialize all members. For example, the following
code would cause such a warning, because "x.h" would
be implicitly initialized to zero:
struct s { int f, g, h; };
struct s x = { 3, 4 };
]o A function parameter is declared without a type
specifier in K&R-style functions:
void foo(bar) { }
]o An empty body occurs in an if or else statement.
]o A pointer is compared against integer zero with <,
<=, >, or >=.
]o A variable might be changed by longjmp or vfork.
]o Any of several floating-point events that often
indicate errors, such as overflow, underflow, loss
of precision, etc.
*<(C] only)>
An enumerator and a non-enumerator both appear in a
conditional expression.
*<(C] only)>
A non-static reference or non-static const member
appears in a class without constructors.
*<(C] only)>
Ambiguous virtual bases.
*<(C] only)>
Subscripting an array which has been declared
register.
*<(C] only)>
Taking the address of a variable which has been
declared register.
*<(C] only)>
A base class is not initialized in a derived class'
copy constructor.
-Wno-div-by-zero
gcc-3.4.3 Last change: 2004-11-05 43
GNU GC(1)
Do not warn about compile-time integer division by zero.
Floating point division by zero is not warned about, as
it can be a legitimate way of obtaining infinities and
NaNs.
-Wsystem-headers
Print warning messages for constructs found in system
header files. Warnings from system headers are normally
suppressed, on the assumption that they usually do not
indicate real problems and would only make the compiler
output harder to read. Using this command line option
tells GC to emit warnings from system headers as if
they occurred in user code. However, note that using
-Wall in conjunction with this option will not warn
about unknown pragmas in system headers---for that,
-Wunknown-pragmas must also be used.
-Wfloat-equal
Warn if floating point values are used in equality
comparisons.
The idea behind this is that sometimes it is convenient
(for the programmer) to consider floating-point values
as approximations to infinitely precise real numbers.
If you are doing this, then you need to compute (by
analyzing the code, or in some other way) the maximum or
likely maximum error that the computation introduces,
and allow for it when performing comparisons (and when
producing output, but that's a different problem). In
particular, instead of testing for equality, you would
check to see whether the two values have ranges that
overlap; and this is done with the relational operators,
so equality comparisons are probably mistaken.
-Wtraditional (C only)
Warn about certain constructs that behave differently in
traditional and ISO C. Also warn about ISO C constructs
that have no traditional C equivalent, and/or
problematic constructs which should be avoided.
]o Macro parameters that appear within string literals
in the macro body. In traditional C macro
replacement takes place within string literals, but
does not in ISO C.
]o In traditional C, some preprocessor directives did
not exist. Traditional preprocessors would only
consider a line to be a directive if the # appeared
in column 1 on the line. Therefore -Wtraditional
warns about directives that traditional C
understands but would ignore because the # does not
appear as the first character on the line. It also
gcc-3.4.3 Last change: 2004-11-05 44
GNU GC(1)
suggests you hide directives like #pragma not
understood by traditional C by indenting them. Some
traditional implementations would not recognize
#elif, so it suggests avoiding it altogether.
]o A function-like macro that appears without
arguments.
]o The unary plus operator.
]o The U integer constant suffix, or the F or L
floating point constant suffixes. (Traditional C
does support the L suffix on integer constants.)
Note, these suffixes appear in macros defined in the
system headers of most modern systems, e.g. the
MIN/MAX macros in "". Use of these
macros in user code might normally lead to spurious
warnings, however GC's integrated preprocessor has
enough context to avoid warning in these cases.
]o A function declared external in one block and then
used after the end of the block.
]o A "switch" statement has an operand of type "long".
]o A non-"static" function declaration follows a
"static" one. This construct is not accepted by
some traditional C compilers.
]o The ISO type of an integer constant has a different
width or signedness from its traditional type. This
warning is only issued if the base of the constant
is ten. I.e. hexadecimal or octal values, which
typically represent bit patterns, are not warned
about.
]o Usage of ISO string concatenation is detected.
]o Initialization of automatic aggregates.
]o Identifier conflicts with labels. Traditional C
lacks a separate namespace for labels.
]o Initialization of unions. If the initializer is
zero, the warning is omitted. This is done under
the assumption that the zero initializer in user
code appears conditioned on e.g. "STDC" to avoid
missing initializer warnings and relies on default
initialization to zero in the traditional C case.
]o Conversions by prototypes between fixed/floating
point values and vice versa. The absence of these
gcc-3.4.3 Last change: 2004-11-05 45
GNU GC(1)
prototypes when compiling with traditional C would
cause serious problems. This is a subset of the
possible conversion warnings, for the full set use
-Wconversion.
]o Use of ISO C style function definitions. This
warning intentionally is not issued for prototype
declarations or variadic functions because these ISO
C features will appear in your code when using
libiberty's traditional C compatibility macros,
"PARAMS" and "VPARAMS". This warning is also
bypassed for nested functions because that feature
is already a GC extension and thus not relevant to
traditional C compatibility.
-Wdeclaration-after-statement (C only)
Warn when a declaration is found after a statement in a
block. This construct, known from C], was introduced
with ISO C99 and is by default allowed in GC. It is
not supported by ISO C90 and was not supported by GC
versions before GC 3.0.
-Wundef
Warn if an undefined identifier is evaluated in an #if
directive.
-Wendif-labels
Warn whenever an #else or an #endif are followed by
text.
-Wshadow
Warn whenever a local variable shadows another local
variable, parameter or global variable or whenever a
built-in function is shadowed.
-Wlarger-than-len
Warn whenever an object of larger than len bytes is
defined.
-Wpointer-arith
Warn about anything that depends on the ``size of'' a
function type or of "void". GNU C assigns these types a
size of 1, for convenience in calculations with "void *"
pointers and pointers to functions.
-Wbad-function-cast (C only)
Warn whenever a function call is cast to a non-matching
type. For example, warn if "int malloc()" is cast to
"anything *".
-Wcast-qual
Warn whenever a pointer is cast so as to remove a type
gcc-3.4.3 Last change: 2004-11-05 46
GNU GC(1)
qualifier from the target type. For example, warn if a
"const char *" is cast to an ordinary "char *".
-Wcast-align
Warn whenever a pointer is cast such that the required
alignment of the target is increased. For example, warn
if a "char *" is cast to an "int *" on machines where
integers can only be accessed at two- or four-byte
boundaries.
-Wwrite-strings
When compiling C, give string constants the type "const
char[length]" so that copying the address of one into a
non-"const" "char *" pointer will get a warning; when
compiling C], warn about the deprecated conversion from
string constants to "char *". These warnings will help
you find at compile time code that can try to write into
a string constant, but only if you have been very
careful about using "const" in declarations and
prototypes. Otherwise, it will just be a nuisance; this
is why we did not make -Wall request these warnings.
-Wconversion
Warn if a prototype causes a type conversion that is
different from what would happen to the same argument in
the absence of a prototype. This includes conversions
of fixed point to floating and vice versa, and
conversions changing the width or signedness of a fixed
point argument except when the same as the default
promotion.
Also, warn if a negative integer constant expression is
implicitly converted to an unsigned type. For example,
warn about the assignment "x = -1" if "x" is unsigned.
But do not warn about explicit casts like "(unsigned)
-1".
-Wsign-compare
Warn when a comparison between signed and unsigned
values could produce an incorrect result when the signed
value is converted to unsigned. This warning is also
enabled by -Wextra; to get the other warnings of -Wextra
without this warning, use -Wextra -Wno-sign-compare.
-Waggregate-return
Warn if any functions that return structures or unions
are defined or called. (In languages where you can
return an array, this also elicits a warning.)
-Wstrict-prototypes (C only)
Warn if a function is declared or defined without
specifying the argument types. (An old-style function
gcc-3.4.3 Last change: 2004-11-05 47
GNU GC(1)
definition is permitted without a warning if preceded by
a declaration which specifies the argument types.)
-Wold-style-definition (C only)
Warn if an old-style function definition is used. A
warning is given even if there is a previous prototype.
-Wmissing-prototypes (C only)
Warn if a global function is defined without a previous
prototype declaration. This warning is issued even if
the definition itself provides a prototype. The aim is
to detect global functions that fail to be declared in
header files.
-Wmissing-declarations (C only)
Warn if a global function is defined without a previous
declaration. Do so even if the definition itself
provides a prototype. Use this option to detect global
functions that are not declared in header files.
-Wmissing-noreturn
Warn about functions which might be candidates for
attribute "noreturn". Note these are only possible
candidates, not absolute ones. Care should be taken to
manually verify functions actually do not ever return
before adding the "noreturn" attribute, otherwise subtle
code generation bugs could be introduced. You will not
get a warning for "main" in hosted C environments.
-Wmissing-format-attribute
If -Wformat is enabled, also warn about functions which
might be candidates for "format" attributes. Note these
are only possible candidates, not absolute ones. GC
will guess that "format" attributes might be appropriate
for any function that calls a function like "vprintf" or
"vscanf", but this might not always be the case, and
some functions for which "format" attributes are
appropriate may not be detected. This option has no
effect unless -Wformat is enabled (possibly by -Wall).
-Wno-multichar
Do not warn if a multicharacter constant ('FOF') is
used. Usually they indicate a typo in the user's code,
as they have implementation-defined values, and should
not be used in portable code.
-Wno-deprecated-declarations
Do not warn about uses of functions, variables, and
types marked as deprecated by using the "deprecated"
attribute. (@pxref{Function Attributes},
@pxref{Variable Attributes}, @pxref{Type Attributes}.)
gcc-3.4.3 Last change: 2004-11-05 48
GNU GC(1)
-Wpacked
Warn if a structure is given the packed attribute, but
the packed attribute has no effect on the layout or size
of the structure. Such structures may be mis-aligned
for little benefit. For instance, in this code, the
variable "f.x" in "struct bar" will be misaligned even
though "struct bar" does not itself have the packed
attribute:
struct foo {
int x;
char a, b, c, d;
} attribute((packed));
struct bar {
char z;
struct foo f;
};
-Wpadded
Warn if padding is included in a structure, either to
align an element of the structure or to align the whole
structure. Sometimes when this happens it is possible
to rearrange the fields of the structure to reduce the
padding and so make the structure smaller.
-Wredundant-decls
Warn if anything is declared more than once in the same
scope, even in cases where multiple declaration is valid
and changes nothing.
-Wnested-externs (C only)
Warn if an "extern" declaration is encountered within a
function.
-Wunreachable-code
Warn if the compiler detects that code will never be
executed.
This option is intended to warn when the compiler
detects that at least a whole line of source code will
never be executed, because some condition is never
satisfied or because it is after a procedure that never
returns.
It is possible for this option to produce a warning even
though there are circumstances under which part of the
affected line can be executed, so care should be taken
when removing apparently-unreachable code.
For instance, when a function is inlined, a warning may
mean that the line is unreachable in only one inlined
copy of the function.
gcc-3.4.3 Last change: 2004-11-05 49
GNU GC(1)
This option is not made part of -Wall because in a
debugging version of a program there is often
substantial code which checks correct functioning of the
program and is, hopefully, unreachable because the
program does work. Another common use of unreachable
code is to provide behavior which is selectable at
compile-time.
-Winline
Warn if a function can not be inlined and it was
declared as inline. Even with this option, the compiler
will not warn about failures to inline functions
declared in system headers.
The compiler uses a variety of heuristics to determine
whether or not to inline a function. For example, the
compiler takes into account the size of the function
being inlined and the the amount of inlining that has
already been done in the current function. Therefore,
seemingly insignificant changes in the source program
can cause the warnings produced by -Winline to appear or
disappear.
-Wno-invalid-offsetof (C] only)
Suppress warnings from applying the offsetof macro to a
non-POD type. According to the 1998 ISO C] standard,
applying offsetof to a non-POD type is undefined. In
existing C] implementations, however, offsetof
typically gives meaningful results even when applied to
certain kinds of non-POD types. (Such as a simple struct
that fails to be a POD type only by virtue of having a
constructor.) This flag is for users who are aware that
they are writing nonportable code and who have
deliberately chosen to ignore the warning about it.
The restrictions on offsetof may be relaxed in a future
version of the C] standard.
-Winvalid-pch
Warn if a precompiled header is found in the search path
but can't be used.
-Wlong-long
Warn if long long type is used. This is default. To
inhibit the warning messages, use -Wno-long-long. Flags
-Wlong-long and -Wno-long-long are taken into account
only when -pedantic flag is used.
-Wdisabled-optimization
Warn if a requested optimization pass is disabled. This
warning does not generally indicate that there is
anything wrong with your code; it merely indicates that
gcc-3.4.3 Last change: 2004-11-05 50
GNU GC(1)
GC's optimizers were unable to handle the code
effectively. Often, the problem is that your code is
too big or too complex; GC will refuse to optimize
programs when the optimization itself is likely to take
inordinate amounts of time.
-Werror
Make all warnings into errors.
Options for Debugging Your Program or GC
GC has various special options that are used for debugging
either your program or GC:
-g Produce debugging information in the operating system's
native format (stabs, COF, XCOF, or DWARF). GDB can
work with this debugging information.
On most systems that use stabs format, -g enables use of
extra debugging information that only GDB can use; this
extra information makes debugging work better in GDB but
will probably make other debuggers crash or refuse to
read the program. If you want to control for certain
whether to generate the extra information, use -gstabs],
-gstabs, -gxcoff], -gxcoff, or -gvms (see below).
Unlike most other C compilers, GC allows you to use -g
with -O. The shortcuts taken by optimized code may
occasionally produce surprising results: some variables
you declared may not exist at all; flow of control may
briefly move where you did not expect it; some
statements may not be executed because they compute
constant results or their values were already at hand;
some statements may execute in different places because
they were moved out of loops.
Nevertheless it proves possible to debug optimized
output. This makes it reasonable to use the optimizer
for programs that might have bugs.
The following options are useful when GC is generated
with the capability for more than one debugging format.
-ggdb
Produce debugging information for use by GDB. This
means to use the most expressive format available (DWARF
2, stabs, or the native format if neither of those are
supported), including GDB extensions if at all possible.
-gstabs
Produce debugging information in stabs format (if that
is supported), without GDB extensions. This is the
gcc-3.4.3 Last change: 2004-11-05 51
GNU GC(1)
format used by DBX on most BSD systems. On MIPS, Alpha
and System V Release 4 systems this option produces
stabs debugging output which is not understood by DBX or
SDB. On System V Release 4 systems this option requires
the GNU assembler.
-feliminate-unused-debug-symbols
Produce debugging information in stabs format (if that
is supported), for only symbols that are actually used.
-gstabs]
Produce debugging information in stabs format (if that
is supported), using GNU extensions understood only by
the GNU debugger (GDB). The use of these extensions is
likely to make other debuggers crash or refuse to read
the program.
-gcoff
Produce debugging information in COF format (if that is
supported). This is the format used by SDB on most
System V systems prior to System V Release 4.
-gxcoff
Produce debugging information in XCOF format (if that
is supported). This is the format used by the DBX
debugger on IBM RS/6000 systems.
-gxcoff]
Produce debugging information in XCOF format (if that
is supported), using GNU extensions understood only by
the GNU debugger (GDB). The use of these extensions is
likely to make other debuggers crash or refuse to read
the program, and may cause assemblers other than the GNU
assembler (GAS) to fail with an error.
-gdwarf-2
Produce debugging information in DWARF version 2 format
(if that is supported). This is the format used by DBX
on IRIX 6.
-gvms
Produce debugging information in VMS debug format (if
that is supported). This is the format used by DEBUG on
VMS systems.
-glevel
-ggdblevel
-gstabslevel
-gcofflevel
-gxcofflevel
-gvmslevel
Request debugging information and also use level to
gcc-3.4.3 Last change: 2004-11-05 52
GNU GC(1)
specify how much information. The default level is 2.
Level 1 produces minimal information, enough for making
backtraces in parts of the program that you don't plan
to debug. This includes descriptions of functions and
external variables, but no information about local
variables and no line numbers.
Level 3 includes extra information, such as all the
macro definitions present in the program. Some
debuggers support macro expansion when you use -g3.
Note that in order to avoid confusion between DWARF1
debug level 2, and DWARF2 -gdwarf-2 does not accept a
concatenated debug level. Instead use an additional
-glevel option to change the debug level for DWARF2.
-feliminate-dwarf2-dups
Compress DWARF2 debugging information by eliminating
duplicated information about each symbol. This option
only makes sense when generating DWARF2 debugging
information with -gdwarf-2.
-p Generate extra code to write profile information
suitable for the analysis program prof. You must use
this option when compiling the source files you want
data about, and you must also use it when linking.
-pg Generate extra code to write profile information
suitable for the analysis program gprof. You must use
this option when compiling the source files you want
data about, and you must also use it when linking.
-Q Makes the compiler print out each function name as it is
compiled, and print some statistics about each pass when
it finishes.
-ftime-report
Makes the compiler print some statistics about the time
consumed by each pass when it finishes.
-fmem-report
Makes the compiler print some statistics about permanent
memory allocation when it finishes.
-fprofile-arcs
Add code so that program flow arcs are instrumented.
During execution the program records how many times each
branch and call is executed and how many times it is
taken or returns. When the compiled program exits it
saves this data to a file called auxname.gcda for each
source file. The data may be used for profile-directed
gcc-3.4.3 Last change: 2004-11-05 53
GNU GC(1)
optimizations (-fbranch-probabilities), or for test
coverage analysis (-ftest-coverage). Each object file's
auxname is generated from the name of the output file,
if explicitly specified and it is not the final
executable, otherwise it is the basename of the source
file. In both cases any suffix is removed (e.g.
foo.gcda for input file dir/foo.c, or dir/foo.gcda for
output file specified as -o dir/foo.o).
@bullet
Compile the source files with -fprofile-arcs plus
optimization and code generation options. For test
coverage analysis, use the additional
-ftest-coverage option. You do not need to profile
every source file in a program.
@cvmmfu
Link your object files with -lgcov or -fprofile-arcs
(the latter implies the former).
@dwnngv
Run the program on a representative workload to
generate the arc profile information. This may be
repeated any number of times. You can run concurrent
instances of your program, and provided that the
file system supports locking, the data files will be
correctly updated. Also "fork" calls are detected
and correctly handled (double counting will not
happen).
@exoohw
For profile-directed optimizations, compile the
source files again with the same optimization and
code generation options plus -fbranch-probabilities.
@fyppix
For test coverage analysis, use gcov to produce
human readable information from the .gcno and .gcda
files. Refer to the gcov documentation for further
information.
With -fprofile-arcs, for each function of your program
GC creates a program flow graph, then finds a spanning
tree for the graph. Only arcs that are not on the
spanning tree have to be instrumented: the compiler adds
code to count the number of times that these arcs are
executed. When an arc is the only exit or only entrance
to a block, the instrumentation code can be added to the
block; otherwise, a new basic block must be created to
hold the instrumentation code.
-ftest-coverage
gcc-3.4.3 Last change: 2004-11-05 54
GNU GC(1)
Produce a notes file that the gcov code-coverage utility
can use to show program coverage. Each source file's
note file is called auxname.gcno. Refer to the
-fprofile-arcs option above for a description of auxname
and instructions on how to generate test coverage data.
Coverage data will match the source files more closely,
if you do not optimize.
-dletters
Says to make debugging dumps during compilation at times
specified by letters. This is used for debugging the
compiler. The file names for most of the dumps are made
by appending a pass number and a word to the dumpname.
dumpname is generated from the name of the output file,
if explicitly specified and it is not an executable,
otherwise it is the basename of the source file. In both
cases any suffix is removed (e.g. foo.01.rtl or
foo.02.sibling). Here are the possible letters for use
in letters, and their meanings:
A Annotate the assembler output with miscellaneous
debugging information.
b Dump after computing branch probabilities, to
file.12.bp.
B Dump after block reordering, to file.31.bbro.
c Dump after instruction combination, to the file
file.20.combine.
C Dump after the first if conversion, to the file
file.14.ce1. Also dump after the second if
conversion, to the file file.21.ce2.
d Dump after branch target load optimization, to to
file.32.btl. Also dump after delayed branch
scheduling, to file.36.dbr.
D Dump all macro definitions, at the end of
preprocessing, in addition to normal output.
E Dump after the third if conversion, to file.30.ce3.
f Dump after control and data flow analysis, to
file.11.cfg. Also dump after life analysis, to
file.19.life.
F Dump after purging "ADRESOF" codes, to
file.07.addressof.
g Dump after global register allocation, to
gcc-3.4.3 Last change: 2004-11-05 55
GNU GC(1)
file.25.greg.
G Dump after GCSE, to file.08.gcse. Also dump after
jump bypassing and control flow optimizations, to
file.10.bypass.
h Dump after finalization of EH handling code, to
file.03.eh.
i Dump after sibling call optimizations, to
file.02.sibling.
j Dump after the first jump optimization, to
file.04.jump.
k Dump after conversion from registers to stack, to
file.34.stack.
l Dump after local register allocation, to
file.24.lreg.
L Dump after loop optimization passes, to file.09.loop
and file.16.loop2.
M Dump after performing the machine dependent
reorganization pass, to file.35.mach.
n Dump after register renumbering, to file.29.rnreg.
N Dump after the register move pass, to
file.22.regmove.
o Dump after post-reload optimizations, to
file.26.postreload.
r Dump after RTL generation, to file.01.rtl.
R Dump after the second scheduling pass, to
file.33.sched2.
s Dump after CSE (including the jump optimization that
sometimes follows CSE), to file.06.cse.
S Dump after the first scheduling pass, to
file.23.sched.
t Dump after the second CSE pass (including the jump
optimization that sometimes follows CSE), to
file.18.cse2.
T Dump after running tracer, to file.15.tracer.
gcc-3.4.3 Last change: 2004-11-05 56
GNU GC(1)
u Dump after null pointer elimination pass to
file.05.null.
U Dump callgraph and unit-at-a-time optimization
file.00.unit.
V Dump after the value profile transformations, to
file.13.vpt.
w Dump after the second flow pass, to file.27.flow2.
z Dump after the peephole pass, to file.28.peephole2.
Z Dump after constructing the web, to file.17.web.
a Produce all the dumps listed above.
H Produce a core dump whenever an error occurs.
m Print statistics on memory usage, at the end of the
run, to standard error.
p Annotate the assembler output with a comment
indicating which pattern and alternative was used.
The length of each instruction is also printed.
P Dump the RTL in the assembler output as a comment
before each instruction. Also turns on -dp
annotation.
v For each of the other indicated dump files (except
for file.01.rtl), dump a representation of the
control flow graph suitable for viewing with VCG to
file.pass.vcg.
x Just generate RTL for a function instead of
compiling it. Usually used with r.
y Dump debugging information during parsing, to
standard error.
-fdump-unnumbered
When doing debugging dumps (see -d option above),
suppress instruction numbers and line number note
output. This makes it more feasible to use diff on
debugging dumps for compiler invocations with different
options, in particular with and without -g.
-fdump-translation-unit (C and C] only)
-fdump-translation-unit-options (C and C] only)
Dump a representation of the tree structure for the
entire translation unit to a file. The file name is
gcc-3.4.3 Last change: 2004-11-05 57
GNU GC(1)
made by appending .tu to the source file name. If the
-options form is used, options controls the details of
the dump as described for the -fdump-tree options.
-fdump-class-hierarchy (C] only)
-fdump-class-hierarchy-options (C] only)
Dump a representation of each class's hierarchy and
virtual function table layout to a file. The file name
is made by appending .class to the source file name. If
the -options form is used, options controls the details
of the dump as described for the -fdump-tree options.
-fdump-tree-switch (C] only)
-fdump-tree-switch-options (C] only)
Control the dumping at various stages of processing the
intermediate language tree to a file. The file name is
generated by appending a switch specific suffix to the
source file name. If the -options form is used, options
is a list of - separated options that control the
details of the dump. Not all options are applicable to
all dumps, those which are not meaningful will be
ignored. The following options are available
address
Print the address of each node. Usually this is not
meaningful as it changes according to the
environment and source file. Its primary use is for
tying up a dump file with a debug environment.
slim
Inhibit dumping of members of a scope or body of a
function merely because that scope has been reached.
Only dump such items when they are directly
reachable by some other path.
all Turn on all options.
The following tree dumps are possible:
original
Dump before any tree based optimization, to
file.original.
optimized
Dump after all tree based optimization, to
file.optimized.
inlined
Dump after function inlining, to file.inlined.
-frandom-seed=string
This option provides a seed that GC uses when it would
gcc-3.4.3 Last change: 2004-11-05 58
GNU GC(1)
otherwise use random numbers. It is used to generate
certain symbol names that have to be different in every
compiled file. It is also used to place unique stamps in
coverage data files and the object files that produce
them. You can use the -frandom-seed option to produce
reproducibly identical object files.
The string should be different for every file you
compile.
-fsched-verbose=n
On targets that use instruction scheduling, this option
controls the amount of debugging output the scheduler
prints. This information is written to standard error,
unless -dS or -dR is specified, in which case it is
output to the usual dump listing file, .sched or .sched2
respectively. However for n greater than nine, the
output is always printed to standard error.
For n greater than zero, -fsched-verbose outputs the
same information as -dRS. For n greater than one, it
also output basic block probabilities, detailed ready
list information and unit/insn info. For n greater than
two, it includes RTL at abort point, control-flow and
regions info. And for n over four, -fsched-verbose also
includes dependence info.
-save-temps
Store the usual ``temporary'' intermediate files
permanently; place them in the current directory and
name them based on the source file. Thus, compiling
foo.c with -c -save-temps would produce files foo.i and
foo.s, as well as foo.o. This creates a preprocessed
foo.i output file even though the compiler now normally
uses an integrated preprocessor.
-time
Report the CPU time taken by each subprocess in the
compilation sequence. For C source files, this is the
compiler proper and assembler (plus the linker if
linking is done). The output looks like this:
# cc1 0.12 0.01
# as 0.00 0.01
The first number on each line is the ``user time,'' that
is time spent executing the program itself. The second
number is ``system time,'' time spent executing
operating system routines on behalf of the program.
Both numbers are in seconds.
-print-file-name=library
gcc-3.4.3 Last change: 2004-11-05 59
GNU GC(1)
Print the full absolute name of the library file library
that would be used when linking---and don't do anything
else. With this option, GC does not compile or link
anything; it just prints the file name.
-print-multi-directory
Print the directory name corresponding to the multilib
selected by any other switches present in the command
line. This directory is supposed to exist in
GCEXECPREFIX.
-print-multi-lib
Print the mapping from multilib directory names to
compiler switches that enable them. The directory name
is separated from the switches by ;, and each switch
starts with an @} instead of the @samp{-, without spaces
between multiple switches. This is supposed to ease
shell-processing.
-print-prog-name=program
Like -print-file-name, but searches for a program such
as cpp.
-print-libgcc-file-name
Same as -print-file-name=libgcc.a.
This is useful when you use -nostdlib or -nodefaultlibs
but you do want to link with libgcc.a. You can do
gcc -nostdlib ... `gcc -print-libgcc-file-name`
-print-search-dirs
Print the name of the configured installation directory
and a list of program and library directories gcc will
search---and don't do anything else.
This is useful when gcc prints the error message
installation problem, cannot exec cpp0: No such file or
directory. To resolve this you either need to put cpp0
and the other compiler components where gcc expects to
find them, or you can set the environment variable
GCEXECPREFIX to the directory where you installed
them. Don't forget the trailing '/'.
-dumpmachine
Print the compiler's target machine (for example,
i686-pc-linux-gnu)---and don't do anything else.
-dumpversion
Print the compiler version (for example, 3.0)---and
don't do anything else.
gcc-3.4.3 Last change: 2004-11-05 60
GNU GC(1)
-dumpspecs
Print the compiler's built-in specs---and don't do
anything else. (This is used when GC itself is being
built.)
-feliminate-unused-debug-types
Normally, when producing DWARF2 output, GC will emit
debugging information for all types declared in a
compilation unit, regardless of whether or not they are
actually used in that compilation unit. Sometimes this
is useful, such as if, in the debugger, you want to cast
a value to a type that is not actually used in your
program (but is declared). More often, however, this
results in a significant amount of wasted space. With
this option, GC will avoid producing debug symbol
output for types that are nowhere used in the source
file being compiled.
Options That Control Optimization
These options control various sorts of optimizations.
Without any optimization option, the compiler's goal is to
reduce the cost of compilation and to make debugging produce
the expected results. Statements are independent: if you
stop the program with a breakpoint between statements, you
can then assign a new value to any variable or change the
program counter to any other statement in the function and
get exactly the results you would expect from the source
code.
Turning on optimization flags makes the compiler attempt to
improve the performance and/or code size at the expense of
compilation time and possibly the ability to debug the
program.
The compiler performs optimization based on the knowledge it
has of the program. Using the -funit-at-a-time flag will
allow the compiler to consider information gained from later
functions in the file when compiling a function. Compiling
multiple files at once to a single output file (and using
-funit-at-a-time) will allow the compiler to use information
gained from all of the files when compiling each of them.
Not all optimizations are controlled directly by a flag.
Only optimizations that have a flag are listed.
-O
-O1 Optimize. Optimizing compilation takes somewhat more
time, and a lot more memory for a large function.
With -O, the compiler tries to reduce code size and
gcc-3.4.3 Last change: 2004-11-05 61
GNU GC(1)
execution time, without performing any optimizations
that take a great deal of compilation time.
-O turns on the following optimization flags:
-fdefer-pop -fmerge-constants -fthread-jumps
-floop-optimize -fif-conversion -fif-conversion2
-fdelayed-branch -fguess-branch-probability
-fcprop-registers
-O also turns on -fomit-frame-pointer on machines where
doing so does not interfere with debugging.
-O2 Optimize even more. GC performs nearly all supported
optimizations that do not involve a space-speed
tradeoff. The compiler does not perform loop unrolling
or function inlining when you specify -O2. As compared
to -O, this option increases both compilation time and
the performance of the generated code.
-O2 turns on all optimization flags specified by -O. It
also turns on the following optimization flags:
-fforce-mem -foptimize-sibling-calls -fstrength-reduce
-fcse-follow-jumps -fcse-skip-blocks
-frerun-cse-after-loop -frerun-loop-opt -fgcse
-fgcse-lm -fgcse-sm -fgcse-las
-fdelete-null-pointer-checks -fexpensive-optimizations
-fregmove -fschedule-insns -fschedule-insns2
-fsched-interblock -fsched-spec -fcaller-saves
-fpeephole2 -freorder-blocks -freorder-functions
-fstrict-aliasing -funit-at-a-time -falign-functions
-falign-jumps -falign-loops -falign-labels
-fcrossjumping
Please note the warning under -fgcse about invoking -O2
on programs that use computed gotos.
-O3 Optimize yet more. -O3 turns on all optimizations
specified by -O2 and also turns on the
-finline-functions, -fweb and -frename-registers
options.
-O0 Do not optimize. This is the default.
-Os Optimize for size. -Os enables all -O2 optimizations
that do not typically increase code size. It also
performs further optimizations designed to reduce code
size.
-Os disables the following optimization flags:
-falign-functions -falign-jumps -falign-loops
-falign-labels -freorder-blocks -fprefetch-loop-arrays
gcc-3.4.3 Last change: 2004-11-05 62
GNU GC(1)
If you use multiple -O options, with or without level
numbers, the last such option is the one that is
effective.
Options of the form -fflag specify machine-independent
flags. Most flags have both positive and negative forms;
the negative form of -ffoo would be -fno-foo. In the table
below, only one of the forms is listed---the one you
typically will use. You can figure out the other form by
either removing no- or adding it.
The following options control specific optimizations. They
are either activated by -O options or are related to ones
that are. You can use the following flags in the rare cases
when ``fine-tuning'' of optimizations to be performed is
desired.
-fno-default-inline
Do not make member functions inline by default merely
because they are defined inside the class scope (C]
only). Otherwise, when you specify -O, member functions
defined inside class scope are compiled inline by
default; i.e., you don't need to add inline in front of
the member function name.
-fno-defer-pop
Always pop the arguments to each function call as soon
as that function returns. For machines which must pop
arguments after a function call, the compiler normally
lets arguments accumulate on the stack for several
function calls and pops them all at once.
Disabled at levels -O, -O2, -O3, -Os.
-fforce-mem
Force memory operands to be copied into registers before
doing arithmetic on them. This produces better code by
making all memory references potential common
subexpressions. When they are not common
subexpressions, instruction combination should eliminate
the separate register-load.
Enabled at levels -O2, -O3, -Os.
-fforce-addr
Force memory address constants to be copied into
registers before doing arithmetic on them. This may
produce better code just as -fforce-mem may.
-fomit-frame-pointer
Don't keep the frame pointer in a register for functions
that don't need one. This avoids the instructions to
gcc-3.4.3 Last change: 2004-11-05 63
GNU GC(1)
save, set up and restore frame pointers; it also makes
an extra register available in many functions. It also
makes debugging impossible on some machines.
On some machines, such as the VAX, this flag has no
effect, because the standard calling sequence
automatically handles the frame pointer and nothing is
saved by pretending it doesn't exist. The machine-
description macro "FRAMEPOINTEREQUIRED" controls
whether a target machine supports this flag.
Enabled at levels -O, -O2, -O3, -Os.
-foptimize-sibling-calls
Optimize sibling and tail recursive calls.
Enabled at levels -O2, -O3, -Os.
-fno-inline
Don't pay attention to the "inline" keyword. Normally
this option is used to keep the compiler from expanding
any functions inline. Note that if you are not
optimizing, no functions can be expanded inline.
-finline-functions
Integrate all simple functions into their callers. The
compiler heuristically decides which functions are
simple enough to be worth integrating in this way.
If all calls to a given function are integrated, and the
function is declared "static", then the function is
normally not output as assembler code in its own right.
Enabled at level -O3.
-finline-limit=n
By default, GC limits the size of functions that can be
inlined. This flag allows the control of this limit for
functions that are explicitly marked as inline (i.e.,
marked with the inline keyword or defined within the
class definition in c]). n is the size of functions
that can be inlined in number of pseudo instructions
(not counting parameter handling). The default value of
n is 600. Increasing this value can result in more
inlined code at the cost of compilation time and memory
consumption. Decreasing usually makes the compilation
faster and less code will be inlined (which presumably
means slower programs). This option is particularly
useful for programs that use inlining heavily such as
those based on recursive templates with C].
Inlining is actually controlled by a number of
gcc-3.4.3 Last change: 2004-11-05 64
GNU GC(1)
parameters, which may be specified individually by using
--param name=value. The -finline-limit=n option sets
some of these parameters as follows:
@item max-inline-insns-single
is set to I/2.
@item max-inline-insns-auto
is set to I/2.
@item min-inline-insns
is set to 130 or I/4, whichever is smaller.
@item max-inline-insns-rtl
is set to I.
See below for a documentation of the individual
parameters controlling inlining.
Note: pseudo instruction represents, in this particular
context, an abstract measurement of function's size. In
no way, it represents a count of assembly instructions
and as such its exact meaning might change from one
release to an another.
-fkeep-inline-functions
Even if all calls to a given function are integrated,
and the function is declared "static", nevertheless
output a separate run-time callable version of the
function. This switch does not affect "extern inline"
functions.
-fkeep-static-consts
Emit variables declared "static const" when optimization
isn't turned on, even if the variables aren't
referenced.
GC enables this option by default. If you want to
force the compiler to check if the variable was
referenced, regardless of whether or not optimization is
turned on, use the -fno-keep-static-consts option.
-fmerge-constants
Attempt to merge identical constants (string constants
and floating point constants) across compilation units.
This option is the default for optimized compilation if
the assembler and linker support it. Use
-fno-merge-constants to inhibit this behavior.
Enabled at levels -O, -O2, -O3, -Os.
-fmerge-all-constants
Attempt to merge identical constants and identical
variables.
gcc-3.4.3 Last change: 2004-11-05 65
GNU GC(1)
This option implies -fmerge-constants. In addition to
-fmerge-constants this considers e.g. even constant
initialized arrays or initialized constant variables
with integral or floating point types. Languages like C
or C] require each non-automatic variable to have
distinct location, so using this option will result in
non-conforming behavior.
-fnew-ra
Use a graph coloring register allocator. Currently this
option is meant only for testing. Users should not
specify this option, since it is not yet ready for
production use.
-fno-branch-count-reg
Do not use ``decrement and branch'' instructions on a
count register, but instead generate a sequence of
instructions that decrement a register, compare it
against zero, then branch based upon the result. This
option is only meaningful on architectures that support
such instructions, which include x86, PowerPC, IA-64 and
S/390.
The default is -fbranch-count-reg, enabled when
-fstrength-reduce is enabled.
-fno-function-cse
Do not put function addresses in registers; make each
instruction that calls a constant function contain the
function's address explicitly.
This option results in less efficient code, but some
strange hacks that alter the assembler output may be
confused by the optimizations performed when this option
is not used.
The default is -ffunction-cse
-fno-zero-initialized-in-bss
If the target supports a BS section, GC by default
puts variables that are initialized to zero into BS.
This can save space in the resulting code.
This option turns off this behavior because some
programs explicitly rely on variables going to the data
section. E.g., so that the resulting executable can
find the beginning of that section and/or make
assumptions based on that.
The default is -fzero-initialized-in-bss.
-fstrength-reduce
gcc-3.4.3 Last change: 2004-11-05 66
GNU GC(1)
Perform the optimizations of loop strength reduction and
elimination of iteration variables.
Enabled at levels -O2, -O3, -Os.
-fthread-jumps
Perform optimizations where we check to see if a jump
branches to a location where another comparison subsumed
by the first is found. If so, the first branch is
redirected to either the destination of the second
branch or a point immediately following it, depending on
whether the condition is known to be true or false.
Enabled at levels -O, -O2, -O3, -Os.
-fcse-follow-jumps
In common subexpression elimination, scan through jump
instructions when the target of the jump is not reached
by any other path. For example, when CSE encounters an
"if" statement with an "else" clause, CSE will follow
the jump when the condition tested is false.
Enabled at levels -O2, -O3, -Os.
-fcse-skip-blocks
This is similar to -fcse-follow-jumps, but causes CSE to
follow jumps which conditionally skip over blocks. When
CSE encounters a simple "if" statement with no else
clause, -fcse-skip-blocks causes CSE to follow the jump
around the body of the "if".
Enabled at levels -O2, -O3, -Os.
-frerun-cse-after-loop
Re-run common subexpression elimination after loop
optimizations has been performed.
Enabled at levels -O2, -O3, -Os.
-frerun-loop-opt
Run the loop optimizer twice.
Enabled at levels -O2, -O3, -Os.
-fgcse
Perform a global common subexpression elimination pass.
This pass also performs global constant and copy
propagation.
Note: When compiling a program using computed gotos, a
GC extension, you may get better runtime performance if
you disable the global common subexpression elimination
gcc-3.4.3 Last change: 2004-11-05 67
GNU GC(1)
pass by adding -fno-gcse to the command line.
Enabled at levels -O2, -O3, -Os.
-fgcse-lm
When -fgcse-lm is enabled, global common subexpression
elimination will attempt to move loads which are only
killed by stores into themselves. This allows a loop
containing a load/store sequence to be changed to a load
outside the loop, and a copy/store within the loop.
Enabled by default when gcse is enabled.
-fgcse-sm
When -fgcse-sm is enabled, a store motion pass is run
after global common subexpression elimination. This
pass will attempt to move stores out of loops. When
used in conjunction with -fgcse-lm, loops containing a
load/store sequence can be changed to a load before the
loop and a store after the loop.
Enabled by default when gcse is enabled.
-fgcse-las
When -fgcse-las is enabled, the global common
subexpression elimination pass eliminates redundant
loads that come after stores to the same memory location
(both partial and full redundancies).
Enabled by default when gcse is enabled.
-floop-optimize
Perform loop optimizations: move constant expressions
out of loops, simplify exit test conditions and
optionally do strength-reduction and loop unrolling as
well.
Enabled at levels -O, -O2, -O3, -Os.
-fcrossjumping
Perform cross-jumping transformation. This
transformation unifies equivalent code and save code
size. The resulting code may or may not perform better
than without cross-jumping.
Enabled at levels -O, -O2, -O3, -Os.
-fif-conversion
Attempt to transform conditional jumps into branch-less
equivalents. This include use of conditional moves,
min, max, set flags and abs instructions, and some
tricks doable by standard arithmetics. The use of
gcc-3.4.3 Last change: 2004-11-05 68
GNU GC(1)
conditional execution on chips where it is available is
controlled by "if-conversion2".
Enabled at levels -O, -O2, -O3, -Os.
-fif-conversion2
Use conditional execution (where available) to transform
conditional jumps into branch-less equivalents.
Enabled at levels -O, -O2, -O3, -Os.
-fdelete-null-pointer-checks
Use global dataflow analysis to identify and eliminate
useless checks for null pointers. The compiler assumes
that dereferencing a null pointer would have halted the
program. If a pointer is checked after it has already
been dereferenced, it cannot be null.
In some environments, this assumption is not true, and
programs can safely dereference null pointers. Use
-fno-delete-null-pointer-checks to disable this
optimization for programs which depend on that behavior.
Enabled at levels -O2, -O3, -Os.
-fexpensive-optimizations
Perform a number of minor optimizations that are
relatively expensive.
Enabled at levels -O2, -O3, -Os.
-foptimize-register-move
-fregmove
Attempt to reassign register numbers in move
instructions and as operands of other simple
instructions in order to maximize the amount of register
tying. This is especially helpful on machines with
two-operand instructions.
Note -fregmove and -foptimize-register-move are the same
optimization.
Enabled at levels -O2, -O3, -Os.
-fdelayed-branch
If supported for the target machine, attempt to reorder
instructions to exploit instruction slots available
after delayed branch instructions.
Enabled at levels -O, -O2, -O3, -Os.
-fschedule-insns
gcc-3.4.3 Last change: 2004-11-05 69
GNU GC(1)
If supported for the target machine, attempt to reorder
instructions to eliminate execution stalls due to
required data being unavailable. This helps machines
that have slow floating point or memory load
instructions by allowing other instructions to be issued
until the result of the load or floating point
instruction is required.
Enabled at levels -O2, -O3, -Os.
-fschedule-insns2
Similar to -fschedule-insns, but requests an additional
pass of instruction scheduling after register allocation
has been done. This is especially useful on machines
with a relatively small number of registers and where
memory load instructions take more than one cycle.
Enabled at levels -O2, -O3, -Os.
-fno-sched-interblock
Don't schedule instructions across basic blocks. This
is normally enabled by default when scheduling before
register allocation, i.e. with -fschedule-insns or at
-O2 or higher.
-fno-sched-spec
Don't allow speculative motion of non-load instructions.
This is normally enabled by default when scheduling
before register allocation, i.e. with -fschedule-insns
or at -O2 or higher.
-fsched-spec-load
Allow speculative motion of some load instructions.
This only makes sense when scheduling before register
allocation, i.e. with -fschedule-insns or at -O2 or
higher.
-fsched-spec-load-dangerous
Allow speculative motion of more load instructions.
This only makes sense when scheduling before register
allocation, i.e. with -fschedule-insns or at -O2 or
higher.
-fsched-stalled-insns=n
Define how many insns (if any) can be moved prematurely
from the queue of stalled insns into the ready list,
during the second scheduling pass.
-fsched-stalled-insns-dep=n
Define how many insn groups (cycles) will be examined
for a dependency on a stalled insn that is candidate for
premature removal from the queue of stalled insns. Has
gcc-3.4.3 Last change: 2004-11-05 70
GNU GC(1)
an effect only during the second scheduling pass, and
only if -fsched-stalled-insns is used and its value is
not zero.
-fsched2-use-superblocks
When scheduling after register allocation, do use
superblock scheduling algorithm. Superblock scheduling
allows motion across basic block boundaries resulting on
faster schedules. This option is experimental, as not
all machine descriptions used by GC model the CPU
closely enough to avoid unreliable results from the
algorithm.
This only makes sense when scheduling after register
allocation, i.e. with -fschedule-insns2 or at -O2 or
higher.
-fsched2-use-traces
Use -fsched2-use-superblocks algorithm when scheduling
after register allocation and additionally perform code
duplication in order to increase the size of superblocks
using tracer pass. See -ftracer for details on trace
formation.
This mode should produce faster but significantly longer
programs. Also without "-fbranch-probabilities" the
traces constructed may not match the reality and hurt
the performance. This only makes sense when scheduling
after register allocation, i.e. with -fschedule-insns2
or at -O2 or higher.
-fcaller-saves
Enable values to be allocated in registers that will be
clobbered by function calls, by emitting extra
instructions to save and restore the registers around
such calls. Such allocation is done only when it seems
to result in better code than would otherwise be
produced.
This option is always enabled by default on certain
machines, usually those which have no call-preserved
registers to use instead.
Enabled at levels -O2, -O3, -Os.
-fmove-all-movables
Forces all invariant computations in loops to be moved
outside the loop.
-freduce-all-givs
Forces all general-induction variables in loops to be
strength-reduced.
gcc-3.4.3 Last change: 2004-11-05 71
GNU GC(1)
Note: When compiling programs written in Fortran,
-fmove-all-movables and -freduce-all-givs are enabled by
default when you use the optimizer.
These options may generate better or worse code; results
are highly dependent on the structure of loops within
the source code.
These two options are intended to be removed someday,
once they have helped determine the efficacy of various
approaches to improving loop optimizations.
Please contact , and describe how use
of these options affects the performance of your
production code. Examples of code that runs slower when
these options are enabled are very valuable.
-fno-peephole
-fno-peephole2
Disable any machine-specific peephole optimizations.
The difference between -fno-peephole and -fno-peephole2
is in how they are implemented in the compiler; some
targets use one, some use the other, a few use both.
-fpeephole is enabled by default. -fpeephole2 enabled
at levels -O2, -O3, -Os.
-fno-guess-branch-probability
Do not guess branch probabilities using a randomized
model.
Sometimes GC will opt to use a randomized model to
guess branch probabilities, when none are available from
either profiling feedback (-fprofile-arcs) or
builtinexpect. This means that different runs of the
compiler on the same program may produce different
object code.
In a hard real-time system, people don't want different
runs of the compiler to produce code that has different
behavior; minimizing non-determinism is of paramount
import. This switch allows users to reduce
non-determinism, possibly at the expense of inferior
optimization.
The default is -fguess-branch-probability at levels -O,
-O2, -O3, -Os.
-freorder-blocks
Reorder basic blocks in the compiled function in order
to reduce number of taken branches and improve code
locality.
gcc-3.4.3 Last change: 2004-11-05 72
GNU GC(1)
Enabled at levels -O2, -O3.
-freorder-functions
Reorder basic blocks in the compiled function in order
to reduce number of taken branches and improve code
locality. This is implemented by using special
subsections ".text.hot" for most frequently executed
functions and ".text.unlikely" for unlikely executed
functions. Reordering is done by the linker so object
file format must support named sections and linker must
place them in a reasonable way.
Also profile feedback must be available in to make this
option effective. See -fprofile-arcs for details.
Enabled at levels -O2, -O3, -Os.
-fstrict-aliasing
Allows the compiler to assume the strictest aliasing
rules applicable to the language being compiled. For C
(and C]), this activates optimizations based on the
type of expressions. In particular, an object of one
type is assumed never to reside at the same address as
an object of a different type, unless the types are
almost the same. For example, an "unsigned int" can
alias an "int", but not a "void*" or a "double". A
character type may alias any other type.
Pay special attention to code like this:
union aunion {
int i;
double d;
};
int f() {
aunion t;
t.d = 3.0;
return t.i;
}
The practice of reading from a different union member
than the one most recently written to (called
``type-punning'') is common. Even with
-fstrict-aliasing, type-punning is allowed, provided the
memory is accessed through the union type. So, the code
above will work as expected. However, this code might
not:
gcc-3.4.3 Last change: 2004-11-05 73
GNU GC(1)
int f() {
aunion t;
int* ip;
t.d = 3.0;
ip = &t.i;
return *ip;
}
Every language that wishes to perform language-specific
alias analysis should define a function that computes,
given an "tree" node, an alias set for the node. Nodes
in different alias sets are not allowed to alias. For
an example, see the C front-end function
"cgetaliasset".
Enabled at levels -O2, -O3, -Os.
-falign-functions
-falign-functions=n
Align the start of functions to the next power-of-two
greater than n, skipping up to n bytes. For instance,
-falign-functions=32 aligns functions to the next
32-byte boundary, but -falign-functions=24 would align
to the next 32-byte boundary only if this can be done by
skipping 23 bytes or less.
-fno-align-functions and -falign-functions=1 are
equivalent and mean that functions will not be aligned.
Some assemblers only support this flag when n is a power
of two; in that case, it is rounded up.
If n is not specified or is zero, use a machine-
dependent default.
Enabled at levels -O2, -O3.
-falign-labels
-falign-labels=n
Align all branch targets to a power-of-two boundary,
skipping up to n bytes like -falign-functions. This
option can easily make code slower, because it must
insert dummy operations for when the branch target is
reached in the usual flow of the code.
-fno-align-labels and -falign-labels=1 are equivalent
and mean that labels will not be aligned.
If -falign-loops or -falign-jumps are applicable and are
greater than this value, then their values are used
instead.
gcc-3.4.3 Last change: 2004-11-05 74
GNU GC(1)
If n is not specified or is zero, use a machine-
dependent default which is very likely to be 1, meaning
no alignment.
Enabled at levels -O2, -O3.
-falign-loops
-falign-loops=n
Align loops to a power-of-two boundary, skipping up to n
bytes like -falign-functions. The hope is that the loop
will be executed many times, which will make up for any
execution of the dummy operations.
-fno-align-loops and -falign-loops=1 are equivalent and
mean that loops will not be aligned.
If n is not specified or is zero, use a machine-
dependent default.
Enabled at levels -O2, -O3.
-falign-jumps
-falign-jumps=n
Align branch targets to a power-of-two boundary, for
branch targets where the targets can only be reached by
jumping, skipping up to n bytes like -falign-functions.
In this case, no dummy operations need be executed.
-fno-align-jumps and -falign-jumps=1 are equivalent and
mean that loops will not be aligned.
If n is not specified or is zero, use a machine-
dependent default.
Enabled at levels -O2, -O3.
-frename-registers
Attempt to avoid false dependencies in scheduled code by
making use of registers left over after register
allocation. This optimization will most benefit
processors with lots of registers. It can, however,
make debugging impossible, since variables will no
longer stay in a ``home register''.
-fweb
Constructs webs as commonly used for register allocation
purposes and assign each web individual pseudo register.
This allows the register allocation pass to operate on
pseudos directly, but also strengthens several other
optimization passes, such as CSE, loop optimizer and
trivial dead code remover. It can, however, make
debugging impossible, since variables will no longer
gcc-3.4.3 Last change: 2004-11-05 75
GNU GC(1)
stay in a ``home register''.
Enabled at levels -O3.
-fno-cprop-registers
After register allocation and post-register allocation
instruction splitting, we perform a copy-propagation
pass to try to reduce scheduling dependencies and
occasionally eliminate the copy.
Disabled at levels -O, -O2, -O3, -Os.
-fprofile-generate
Enable options usually used for instrumenting
application to produce profile useful for later
recompilation with profile feedback based optimization.
You must use "-fprofile-generate" both when compiling
and when linking your program.
The following options are enabled: "-fprofile-arcs",
"-fprofile-values", "-fvpt".
-fprofile-use
Enable profile feedback directed optimizations, and
optimizations generally profitable only with profile
feedback available.
The following options are enabled:
"-fbranch-probabilities", "-fvpt", "-funroll-loops",
"-fpeel-loops", "-ftracer".
The following options control compiler behavior regarding
floating point arithmetic. These options trade off between
speed and correctness. All must be specifically enabled.
-ffloat-store
Do not store floating point variables in registers, and
inhibit other options that might change whether a
floating point value is taken from a register or memory.
This option prevents undesirable excess precision on
machines such as the 68000 where the floating registers
(of the 68881) keep more precision than a "double" is
supposed to have. Similarly for the x86 architecture.
For most programs, the excess precision does only good,
but a few programs rely on the precise definition of
IE floating point. Use -ffloat-store for such
programs, after modifying them to store all pertinent
intermediate computations into variables.
-ffast-math
Sets -fno-math-errno, -funsafe-math-optimizations,
gcc-3.4.3 Last change: 2004-11-05 76
GNU GC(1)
-fno-trapping-math, -ffinite-math-only,
-fno-rounding-math and -fno-signaling-nans.
This option causes the preprocessor macro
"FASTMATH" to be defined.
This option should never be turned on by any -O option
since it can result in incorrect output for programs
which depend on an exact implementation of IE or ISO
rules/specifications for math functions.
-fno-math-errno
Do not set ERNO after calling math functions that are
executed with a single instruction, e.g., sqrt. A
program that relies on IE exceptions for math error
handling may want to use this flag for speed while
maintaining IE arithmetic compatibility.
This option should never be turned on by any -O option
since it can result in incorrect output for programs
which depend on an exact implementation of IE or ISO
rules/specifications for math functions.
The default is -fmath-errno.
-funsafe-math-optimizations
Allow optimizations for floating-point arithmetic that
(a) assume that arguments and results are valid and (b)
may violate IE or ANSI standards. When used at
link-time, it may include libraries or startup files
that change the default FPU control word or other
similar optimizations.
This option should never be turned on by any -O option
since it can result in incorrect output for programs
which depend on an exact implementation of IE or ISO
rules/specifications for math functions.
The default is -fno-unsafe-math-optimizations.
-ffinite-math-only
Allow optimizations for floating-point arithmetic that
assume that arguments and results are not NaNs or
]-Infs.
This option should never be turned on by any -O option
since it can result in incorrect output for programs
which depend on an exact implementation of IE or ISO
rules/specifications.
The default is -fno-finite-math-only.
gcc-3.4.3 Last change: 2004-11-05 77
GNU GC(1)
-fno-trapping-math
Compile code assuming that floating-point operations
cannot generate user-visible traps. These traps include
division by zero, overflow, underflow, inexact result
and invalid operation. This option implies
-fno-signaling-nans. Setting this option may allow
faster code if one relies on ``non-stop'' IE
arithmetic, for example.
This option should never be turned on by any -O option
since it can result in incorrect output for programs
which depend on an exact implementation of IE or ISO
rules/specifications for math functions.
The default is -ftrapping-math.
-frounding-math
Disable transformations and optimizations that assume
default floating point rounding behavior. This is
round-to-zero for all floating point to integer
conversions, and round-to-nearest for all other
arithmetic truncations. This option should be specified
for programs that change the FP rounding mode
dynamically, or that may be executed with a non-default
rounding mode. This option disables constant folding of
floating point expressions at compile-time (which may be
affected by rounding mode) and arithmetic
transformations that are unsafe in the presence of
sign-dependent rounding modes.
The default is -fno-rounding-math.
This option is experimental and does not currently
guarantee to disable all GC optimizations that are
affected by rounding mode. Future versions of GC may
provide finer control of this setting using C99's
"FENVACES" pragma. This command line option will be
used to specify the default state for "FENVACES".
-fsignaling-nans
Compile code assuming that IE signaling NaNs may
generate user-visible traps during floating-point
operations. Setting this option disables optimizations
that may change the number of exceptions visible with
signaling NaNs. This option implies -ftrapping-math.
This option causes the preprocessor macro
"SUPORTSNAN" to be defined.
The default is -fno-signaling-nans.
This option is experimental and does not currently
gcc-3.4.3 Last change: 2004-11-05 78
GNU GC(1)
guarantee to disable all GC optimizations that affect
signaling NaN behavior.
-fsingle-precision-constant
Treat floating point constant as single precision
constant instead of implicitly converting it to double
precision constant.
The following options control optimizations that may improve
performance, but are not enabled by any -O options. This
section includes experimental options that may produce
broken code.
-fbranch-probabilities
After running a program compiled with -fprofile-arcs,
you can compile it a second time using
-fbranch-probabilities, to improve optimizations based
on the number of times each branch was taken. When the
program compiled with -fprofile-arcs exits it saves arc
execution counts to a file called sourcename.gcda for
each source file The information in this data file is
very dependent on the structure of the generated code,
so you must use the same source code and the same
optimization options for both compilations.
With -fbranch-probabilities, GC puts a REGBRPROB note
on each JUMPINSN and CALINSN. These can be used to
improve optimization. Currently, they are only used in
one place: in reorg.c, instead of guessing which path a
branch is mostly to take, the REGBRPROB values are
used to exactly determine which path is taken more
often.
-fprofile-values
If combined with -fprofile-arcs, it adds code so that
some data about values of expressions in the program is
gathered.
With -fbranch-probabilities, it reads back the data
gathered from profiling values of expressions and adds
REGVALUEPROFILE notes to instructions for their later
usage in optimizations.
-fvpt
If combined with -fprofile-arcs, it instructs the
compiler to add a code to gather information about
values of expressions.
With -fbranch-probabilities, it reads back the data
gathered and actually performs the optimizations based
on them. Currently the optimizations include
specialization of division operation using the knowledge
gcc-3.4.3 Last change: 2004-11-05 79
GNU GC(1)
about the value of the denominator.
-fnew-ra
Use a graph coloring register allocator. Currently this
option is meant for testing, so we are interested to
hear about miscompilations with -fnew-ra.
-ftracer
Perform tail duplication to enlarge superblock size.
This transformation simplifies the control flow of the
function allowing other optimizations to do better job.
-funit-at-a-time
Parse the whole compilation unit before starting to
produce code. This allows some extra optimizations to
take place but consumes more memory.
-funroll-loops
Unroll loops whose number of iterations can be
determined at compile time or upon entry to the loop.
-funroll-loops implies -frerun-cse-after-loop. It also
turns on complete loop peeling (i.e. complete removal of
loops with small constant number of iterations). This
option makes code larger, and may or may not make it run
faster.
-funroll-all-loops
Unroll all loops, even if their number of iterations is
uncertain when the loop is entered. This usually makes
programs run more slowly. -funroll-all-loops implies
the same options as -funroll-loops.
-fpeel-loops
Peels the loops for that there is enough information
that they do not roll much (from profile feedback). It
also turns on complete loop peeling (i.e. complete
removal of loops with small constant number of
iterations).
-funswitch-loops
Move branches with loop invariant conditions out of the
loop, with duplicates of the loop on both branches
(modified according to result of the condition).
-fold-unroll-loops
Unroll loops whose number of iterations can be
determined at compile time or upon entry to the loop,
using the old loop unroller whose loop recognition is
based on notes from frontend. -fold-unroll-loops
implies both -fstrength-reduce and
-frerun-cse-after-loop. This option makes code larger,
and may or may not make it run faster.
gcc-3.4.3 Last change: 2004-11-05 80
GNU GC(1)
-fold-unroll-all-loops
Unroll all loops, even if their number of iterations is
uncertain when the loop is entered. This is done using
the old loop unroller whose loop recognition is based on
notes from frontend. This usually makes programs run
more slowly. -fold-unroll-all-loops implies the same
options as -fold-unroll-loops.
-funswitch-loops
Move branches with loop invariant conditions out of the
loop, with duplicates of the loop on both branches
(modified according to result of the condition).
-funswitch-loops
Move branches with loop invariant conditions out of the
loop, with duplicates of the loop on both branches
(modified according to result of the condition).
-fprefetch-loop-arrays
If supported by the target machine, generate
instructions to prefetch memory to improve the
performance of loops that access large arrays.
Disabled at level -Os.
-ffunction-sections
-fdata-sections
Place each function or data item into its own section in
the output file if the target supports arbitrary
sections. The name of the function or the name of the
data item determines the section's name in the output
file.
Use these options on systems where the linker can
perform optimizations to improve locality of reference
in the instruction space. Most systems using the ELF
object format and SPARC processors running Solaris 2
have linkers with such optimizations. AIX may have
these optimizations in the future.
Only use these options when there are significant
benefits from doing so. When you specify these options,
the assembler and linker will create larger object and
executable files and will also be slower. You will not
be able to use "gprof" on all systems if you specify
this option and you may have problems with debugging if
you specify both this option and -g.
-fbranch-target-load-optimize
Perform branch target register load optimization before
prologue / epilogue threading. The use of target
registers can typically be exposed only during reload,
gcc-3.4.3 Last change: 2004-11-05 81
GNU GC(1)
thus hoisting loads out of loops and doing inter-block
scheduling needs a separate optimization pass.
-fbranch-target-load-optimize2
Perform branch target register load optimization after
prologue / epilogue threading.
--param name=value
In some places, GC uses various constants to control
the amount of optimization that is done. For example,
GC will not inline functions that contain more that a
certain number of instructions. You can control some of
these constants on the command-line using the --param
option.
The names of specific parameters, and the meaning of the
values, are tied to the internals of the compiler, and
are subject to change without notice in future releases.
In each case, the value is an integer. The allowable
choices for name are given in the following table:
max-crossjump-edges
The maximum number of incoming edges to consider for
crossjumping. The algorithm used by -fcrossjumping
is O(N^2) in the number of edges incoming to each
block. Increasing values mean more aggressive
optimization, making the compile time increase with
probably small improvement in executable size.
max-delay-slot-insn-search
The maximum number of instructions to consider when
looking for an instruction to fill a delay slot. If
more than this arbitrary number of instructions is
searched, the time savings from filling the delay
slot will be minimal so stop searching. Increasing
values mean more aggressive optimization, making the
compile time increase with probably small
improvement in executable run time.
max-delay-slot-live-search
When trying to fill delay slots, the maximum number
of instructions to consider when searching for a
block with valid live register information.
Increasing this arbitrarily chosen value means more
aggressive optimization, increasing the compile
time. This parameter should be removed when the
delay slot code is rewritten to maintain the
control-flow graph.
max-gcse-memory
The approximate maximum amount of memory that will
gcc-3.4.3 Last change: 2004-11-05 82
GNU GC(1)
be allocated in order to perform the global common
subexpression elimination optimization. If more
memory than specified is required, the optimization
will not be done.
max-gcse-passes
The maximum number of passes of GCSE to run.
max-pending-list-length
The maximum number of pending dependencies
scheduling will allow before flushing the current
state and starting over. Large functions with few
branches or calls can create excessively large lists
which needlessly consume memory and resources.
max-inline-insns-single
Several parameters control the tree inliner used in
gcc. This number sets the maximum number of
instructions (counted in GC's internal
representation) in a single function that the tree
inliner will consider for inlining. This only
affects functions declared inline and methods
implemented in a class declaration (C]). The
default value is 500.
max-inline-insns-auto
When you use -finline-functions (included in -O3), a
lot of functions that would otherwise not be
considered for inlining by the compiler will be
investigated. To those functions, a different (more
restrictive) limit compared to functions declared
inline can be applied. The default value is 100.
large-function-insns
The limit specifying really large functions. For
functions greater than this limit inlining is
constrained by --param large-function-growth. This
parameter is useful primarily to avoid extreme
compilation time caused by non-linear algorithms
used by the backend. This parameter is ignored when
-funit-at-a-time is not used. The default value is
3000.
large-function-growth
Specifies maximal growth of large function caused by
inlining in percents. This parameter is ignored
when -funit-at-a-time is not used. The default
value is 200.
inline-unit-growth
Specifies maximal overall growth of the compilation
unit caused by inlining. This parameter is ignored
gcc-3.4.3 Last change: 2004-11-05 83
GNU GC(1)
when -funit-at-a-time is not used. The default
value is 150.
max-inline-insns-rtl
For languages that use the RTL inliner (this happens
at a later stage than tree inlining), you can set
the maximum allowable size (counted in RTL
instructions) for the RTL inliner with this
parameter. The default value is 600.
max-unrolled-insns
The maximum number of instructions that a loop
should have if that loop is unrolled, and if the
loop is unrolled, it determines how many times the
loop code is unrolled.
max-average-unrolled-insns
The maximum number of instructions biased by
probabilities of their execution that a loop should
have if that loop is unrolled, and if the loop is
unrolled, it determines how many times the loop code
is unrolled.
max-unroll-times
The maximum number of unrollings of a single loop.
max-peeled-insns
The maximum number of instructions that a loop
should have if that loop is peeled, and if the loop
is peeled, it determines how many times the loop
code is peeled.
max-peel-times
The maximum number of peelings of a single loop.
max-completely-peeled-insns
The maximum number of insns of a completely peeled
loop.
max-completely-peel-times
The maximum number of iterations of a loop to be
suitable for complete peeling.
max-unswitch-insns
The maximum number of insns of an unswitched loop.
max-unswitch-level
The maximum number of branches unswitched in a
single loop.
hot-bb-count-fraction
Select fraction of the maximal count of repetitions
gcc-3.4.3 Last change: 2004-11-05 84
GNU GC(1)
of basic block in program given basic block needs to
have to be considered hot.
hot-bb-frequency-fraction
Select fraction of the maximal frequency of
executions of basic block in function given basic
block needs to have to be considered hot
tracer-dynamic-coverage
tracer-dynamic-coverage-feedback
This value is used to limit superblock formation
once the given percentage of executed instructions
is covered. This limits unnecessary code size
expansion.
The tracer-dynamic-coverage-feedback is used only
when profile feedback is available. The real
profiles (as opposed to statically estimated ones)
are much less balanced allowing the threshold to be
larger value.
tracer-max-code-growth
Stop tail duplication once code growth has reached
given percentage. This is rather hokey argument, as
most of the duplicates will be eliminated later in
cross jumping, so it may be set to much higher
values than is the desired code growth.
tracer-min-branch-ratio
Stop reverse growth when the reverse probability of
best edge is less than this threshold (in percent).
tracer-min-branch-ratio
tracer-min-branch-ratio-feedback
Stop forward growth if the best edge do have
probability lower than this threshold.
Similarly to tracer-dynamic-coverage two values are
present, one for compilation for profile feedback
and one for compilation without. The value for
compilation with profile feedback needs to be more
conservative (higher) in order to make tracer
effective.
max-cse-path-length
Maximum number of basic blocks on path that cse
considers.
ggc-min-expand
GC uses a garbage collector to manage its own
memory allocation. This parameter specifies the
minimum percentage by which the garbage collector's
gcc-3.4.3 Last change: 2004-11-05 85
GNU GC(1)
heap should be allowed to expand between
collections. Tuning this may improve compilation
speed; it has no effect on code generation.
The default is 30% ] 70% * (RAM/1GB) with an upper
bound of 100% when RAM >= 1GB. If "getrlimit" is
available, the notion of "RAM" is the smallest of
actual RAM, RLIMITRS, RLIMITDATA and RLIMITAS.
If GC is not able to calculate RAM on a particular
platform, the lower bound of 30% is used. Setting
this parameter and ggc-min-heapsize to zero causes a
full collection to occur at every opportunity. This
is extremely slow, but can be useful for debugging.
ggc-min-heapsize
Minimum size of the garbage collector's heap before
it begins bothering to collect garbage. The first
collection occurs after the heap expands by ggc-
min-expand% beyond ggc-min-heapsize. Again, tuning
this may improve compilation speed, and has no
effect on code generation.
The default is RAM/8, with a lower bound of 4096
(four megabytes) and an upper bound of 131072 (128
megabytes). If "getrlimit" is available, the notion
of "RAM" is the smallest of actual RAM, RLIMITRS,
RLIMITDATA and RLIMITAS. If GC is not able to
calculate RAM on a particular platform, the lower
bound is used. Setting this parameter very large
effectively disables garbage collection. Setting
this parameter and ggc-min-expand to zero causes a
full collection to occur at every opportunity.
max-reload-search-insns
The maximum number of instruction reload should look
backward for equivalent register. Increasing values
mean more aggressive optimization, making the
compile time increase with probably slightly better
performance. The default value is 100.
max-cselib-memory-location
The maximum number of memory locations cselib should
take into acount. Increasing values mean more
aggressive optimization, making the compile time
increase with probably slightly better performance.
The default value is 500.
reorder-blocks-duplicate
reorder-blocks-duplicate-feedback
Used by basic block reordering pass to decide
whether to use unconditional branch or duplicate the
code on its destination. Code is duplicated when
gcc-3.4.3 Last change: 2004-11-05 86
GNU GC(1)
its estimated size is smaller than this value
multiplied by the estimated size of unconditional
jump in the hot spots of the program.
The reorder-block-duplicate-feedback is used only
when profile feedback is available and may be set to
higher values than reorder-block-duplicate since
information about the hot spots is more accurate.
Options Controlling the Preprocessor
These options control the C preprocessor, which is run on
each C source file before actual compilation.
If you use the -E option, nothing is done except
preprocessing. Some of these options make sense only
together with -E because they cause the preprocessor output
to be unsuitable for actual compilation.
You can use -Wp,option to bypass the compiler driver and
pass option directly through to the preprocessor. If
option contains commas, it is split into multiple
options at the commas. However, many options are
modified, translated or interpreted by the compiler
driver before being passed to the preprocessor, and -Wp
forcibly bypasses this phase. The preprocessor's direct
interface is undocumented and subject to change, so
whenever possible you should avoid using -Wp and let the
driver handle the options instead.
-Xpreprocessor option
Pass option as an option to the preprocessor. You can
use this to supply system-specific preprocessor options
which GC does not know how to recognize.
If you want to pass an option that takes an argument,
you must use -Xpreprocessor twice, once for the option
and once for the argument.
-D name
Predefine name as a macro, with definition 1.
-D name=definition
Predefine name as a macro, with definition definition.
The contents of definition are tokenized and processed
as if they appeared during translation phase three in a
#define directive. In particular, the definition will
be truncated by embedded newline characters.
If you are invoking the preprocessor from a shell or
shell-like program you may need to use the shell's
quoting syntax to protect characters such as spaces that
gcc-3.4.3 Last change: 2004-11-05 87
GNU GC(1)
have a meaning in the shell syntax.
If you wish to define a function-like macro on the
command line, write its argument list with surrounding
parentheses before the equals sign (if any).
Parentheses are meaningful to most shells, so you will
need to quote the option. With sh and csh,
-D'name(args...)=definition' works.
-D and -U options are processed in the order they are
given on the command line. All -imacros file and
-include file options are processed after all -D and -U
options.
-U name
Cancel any previous definition of name, either built in
or provided with a -D option.
-undef
Do not predefine any system-specific or GC-specific
macros. The standard predefined macros remain defined.
-I dir
Add the directory dir to the list of directories to be
searched for header files. Directories named by -I are
searched before the standard system include directories.
If the directory dir is a standard system include
directory, the option is ignored to ensure that the
default search order for system directories and the
special treatment of system headers are not defeated .
-o file
Write output to file. This is the same as specifying
file as the second non-option argument to cpp. gcc has
a different interpretation of a second non-option
argument, so you must use -o to specify the output file.
-Wall
Turns on all optional warnings which are desirable for
normal code. At present this is -Wcomment, -Wtrigraphs,
-Wmultichar and a warning about integer promotion
causing a change of sign in "#if" expressions. Note
that many of the preprocessor's warnings are on by
default and have no options to control them.
-Wcomment
-Wcomments
Warn whenever a comment-start sequence /* appears in a
/* comment, or whenever a backslash-newline appears in a
/ comment. (Both forms have the same effect.)
-Wtrigraphs
gcc-3.4.3 Last change: 2004-11-05 88
GNU GC(1)
@anchor{Wtrigraphs} Most trigraphs in comments cannot
affect the meaning of the program. However, a trigraph
that would form an escaped newline (??/ at the end of a
line) can, by changing where the comment begins or ends.
Therefore, only trigraphs that would form escaped
newlines produce warnings inside a comment.
This option is implied by -Wall. If -Wall is not given,
this option is still enabled unless trigraphs are
enabled. To get trigraph conversion without warnings,
but get the other -Wall warnings, use -trigraphs -Wall
-Wno-trigraphs.
-Wtraditional
Warn about certain constructs that behave differently in
traditional and ISO C. Also warn about ISO C constructs
that have no traditional C equivalent, and problematic
constructs which should be avoided.
-Wimport
Warn the first time #import is used.
-Wundef
Warn whenever an identifier which is not a macro is
encountered in an #if directive, outside of defined.
Such identifiers are replaced with zero.
-Wunused-macros
Warn about macros defined in the main file that are
unused. A macro is used if it is expanded or tested for
existence at least once. The preprocessor will also
warn if the macro has not been used at the time it is
redefined or undefined.
Built-in macros, macros defined on the command line, and
macros defined in include files are not warned about.
Note: If a macro is actually used, but only used in
skipped conditional blocks, then CP will report it as
unused. To avoid the warning in such a case, you might
improve the scope of the macro's definition by, for
example, moving it into the first skipped block.
Alternatively, you could provide a dummy use with
something like:
#if defined themacrocausingthewarning
#endif
-Wendif-labels
Warn whenever an #else or an #endif are followed by
text. This usually happens in code of the form
gcc-3.4.3 Last change: 2004-11-05 89
GNU GC(1)
#if FO
...
#else FO
...
#endif FO
The second and third "FO" should be in comments, but
often are not in older programs. This warning is on by
default.
-Werror
Make all warnings into hard errors. Source code which
triggers warnings will be rejected.
-Wsystem-headers
Issue warnings for code in system headers. These are
normally unhelpful in finding bugs in your own code,
therefore suppressed. If you are responsible for the
system library, you may want to see them.
-w Suppress all warnings, including those which GNU CP
issues by default.
-pedantic
Issue all the mandatory diagnostics listed in the C
standard. Some of them are left out by default, since
they trigger frequently on harmless code.
-pedantic-errors
Issue all the mandatory diagnostics, and make all
mandatory diagnostics into errors. This includes
mandatory diagnostics that GC issues without -pedantic
but treats as warnings.
-M Instead of outputting the result of preprocessing,
output a rule suitable for make describing the
dependencies of the main source file. The preprocessor
outputs one make rule containing the object file name
for that source file, a colon, and the names of all the
included files, including those coming from -include or
-imacros command line options.
Unless specified explicitly (with -MT or -MQ), the
object file name consists of the basename of the source
file with any suffix replaced with object file suffix.
If there are many included files then the rule is split
into several lines using \-newline. The rule has no
commands.
This option does not suppress the preprocessor's debug
output, such as -dM. To avoid mixing such debug output
with the dependency rules you should explicitly specify
gcc-3.4.3 Last change: 2004-11-05 90
GNU GC(1)
the dependency output file with -MF, or use an
environment variable like DEPENDENCIESOUTPUT. Debug
output will still be sent to the regular output stream
as normal.
Passing -M to the driver implies -E, and suppresses
warnings with an implicit -w.
-M Like -M but do not mention header files that are found
in system header directories, nor header files that are
included, directly or indirectly, from such a header.
This implies that the choice of angle brackets or double
quotes in an #include directive does not in itself
determine whether that header will appear in -M
dependency output. This is a slight change in semantics
from GC versions 3.0 and earlier.
@anchor{dashMF}
-MF file
When used with -M or -M, specifies a file to write the
dependencies to. If no -MF switch is given the
preprocessor sends the rules to the same place it would
have sent preprocessed output.
When used with the driver options -MD or -MD, -MF
overrides the default dependency output file.
-MG In conjunction with an option such as -M requesting
dependency generation, -MG assumes missing header files
are generated files and adds them to the dependency list
without raising an error. The dependency filename is
taken directly from the "#include" directive without
prepending any path. -MG also suppresses preprocessed
output, as a missing header file renders this useless.
This feature is used in automatic updating of makefiles.
-MP This option instructs CP to add a phony target for each
dependency other than the main file, causing each to
depend on nothing. These dummy rules work around errors
make gives if you remove header files without updating
the Makefile to match.
This is typical output:
test.o: test.c test.h
test.h:
-MT target
gcc-3.4.3 Last change: 2004-11-05 91
GNU GC(1)
Change the target of the rule emitted by dependency
generation. By default CP takes the name of the main
input file, including any path, deletes any file suffix
such as .c, and appends the platform's usual object
suffix. The result is the target.
An -MT option will set the target to be exactly the
string you specify. If you want multiple targets, you
can specify them as a single argument to -MT, or use
multiple -MT options.
For example, -MT '$(objpfx)foo.o' might give
$(objpfx)foo.o: foo.c
-MQ target
Same as -MT, but it quotes any characters which are
special to Make. -MQ '$(objpfx)foo.o' gives
$$(objpfx)foo.o: foo.c
The default target is automatically quoted, as if it
were given with -MQ.
-MD -MD is equivalent to -M -MF file, except that -E is not
implied. The driver determines file based on whether an
-o option is given. If it is, the driver uses its
argument but with a suffix of .d, otherwise it take the
basename of the input file and applies a .d suffix.
If -MD is used in conjunction with -E, any -o switch is
understood to specify the dependency output file (but
@pxref{dashMF,,-MF}), but if used without -E, each -o is
understood to specify a target object file.
Since -E is not implied, -MD can be used to generate a
dependency output file as a side-effect of the
compilation process.
-MD
Like -MD except mention only user header files, not
system -header files.
-fpch-deps
When using precompiled headers, this flag will cause the
dependency-output flags to also list the files from the
precompiled header's dependencies. If not specified
only the precompiled header would be listed and not the
files that were used to create it because those files
are not consulted when a precompiled header is used.
-x c
gcc-3.4.3 Last change: 2004-11-05 92
GNU GC(1)
-x c]
-x objective-c
-x assembler-with-cpp
Specify the source language: C, C], Objective-C, or
assembly. This has nothing to do with standards
conformance or extensions; it merely selects which base
syntax to expect. If you give none of these options,
cpp will deduce the language from the extension of the
source file: .c, .cc, .m, or .S. Some other common
extensions for C] and assembly are also recognized. If
cpp does not recognize the extension, it will treat the
file as C; this is the most generic mode.
Note: Previous versions of cpp accepted a -lang option
which selected both the language and the standards
conformance level. This option has been removed,
because it conflicts with the -l option.
-std=standard
-ansi
Specify the standard to which the code should conform.
Currently CP knows about C and C] standards; others
may be added in the future.
standard may be one of:
"iso9899:1990"
"c89"
The ISO C standard from 1990. c89 is the customary
shorthand for this version of the standard.
The -ansi option is equivalent to -std=c89.
"iso9899:199409"
The 1990 C standard, as amended in 1994.
"iso9899:1999"
"c99"
"iso9899:199x"
"c9x"
The revised ISO C standard, published in December
1999. Before publication, this was known as C9X.
"gnu89"
The 1990 C standard plus GNU extensions. This is
the default.
"gnu99"
"gnu9x"
The 1999 C standard plus GNU extensions.
"c]98"
gcc-3.4.3 Last change: 2004-11-05 93
GNU GC(1)
The 1998 ISO C] standard plus amendments.
"gnu]98"
The same as -std=c]98 plus GNU extensions. This is
the default for C] code.
-I- Split the include path. Any directories specified with
-I options before -I- are searched only for headers
requested with "#include "file""; they are not searched
for "#include ". If additional directories are
specified with -I options after the -I-, those
directories are searched for all #include directives.
In addition, -I- inhibits the use of the directory of
the current file directory as the first search directory
for "#include "file"".
-nostdinc
Do not search the standard system directories for header
files. Only the directories you have specified with -I
options (and the directory of the current file, if
appropriate) are searched.
-nostdinc]
Do not search for header files in the C]-specific
standard directories, but do still search the other
standard directories. (This option is used when
building the C] library.)
-include file
Process file as if "#include "file"" appeared as the
first line of the primary source file. However, the
first directory searched for file is the preprocessor's
working directory instead of the directory containing
the main source file. If not found there, it is
searched for in the remainder of the "#include "...""
search chain as normal.
If multiple -include options are given, the files are
included in the order they appear on the command line.
-imacros file
Exactly like -include, except that any output produced
by scanning file is thrown away. Macros it defines
remain defined. This allows you to acquire all the
macros from a header without also processing its
declarations.
All files specified by -imacros are processed before all
files specified by -include.
-idirafter dir
gcc-3.4.3 Last change: 2004-11-05 94
GNU GC(1)
Search dir for header files, but do it after all
directories specified with -I and the standard system
directories have been exhausted. dir is treated as a
system include directory.
-iprefix prefix
Specify prefix as the prefix for subsequent -iwithprefix
options. If the prefix represents a directory, you
should include the final /.
-iwithprefix dir
-iwithprefixbefore dir
Append dir to the prefix specified previously with
-iprefix, and add the resulting directory to the include
search path. -iwithprefixbefore puts it in the same
place -I would; -iwithprefix puts it where -idirafter
would.
-isystem dir
Search dir for header files, after all directories
specified by -I but before the standard system
directories. Mark it as a system directory, so that it
gets the same special treatment as is applied to the
standard system directories.
-fdollars-in-identifiers
@anchor{fdollars-in-identifiers} Accept $ in
identifiers.
-fpreprocessed
Indicate to the preprocessor that the input file has
already been preprocessed. This suppresses things like
macro expansion, trigraph conversion, escaped newline
splicing, and processing of most directives. The
preprocessor still recognizes and removes comments, so
that you can pass a file preprocessed with -C to the
compiler without problems. In this mode the integrated
preprocessor is little more than a tokenizer for the
front ends.
-fpreprocessed is implicit if the input file has one of
the extensions .i, .ii or .mi. These are the extensions
that GC uses for preprocessed files created by
-save-temps.
-ftabstop=width
Set the distance between tab stops. This helps the
preprocessor report correct column numbers in warnings
or errors, even if tabs appear on the line. If the
value is less than 1 or greater than 100, the option is
ignored. The default is 8.
gcc-3.4.3 Last change: 2004-11-05 95
GNU GC(1)
-fexec-charset=charset
Set the execution character set, used for string and
character constants. The default is UTF-8. charset can
be any encoding supported by the system's "iconv"
library routine.
-fwide-exec-charset=charset
Set the wide execution character set, used for wide
string and character constants. The default is UTF-32
or UTF-16, whichever corresponds to the width of
"wchart". As with -ftarget-charset, charset can be any
encoding supported by the system's "iconv" library
routine; however, you will have problems with encodings
that do not fit exactly in "wchart".
-finput-charset=charset
Set the input character set, used for translation from
the character set of the input file to the source
character set used by GC. If the locale does not
specify, or GC cannot get this information from the
locale, the default is UTF-8. This can be overridden by
either the locale or this command line option. Currently
the command line option takes precedence if there's a
conflict. charset can be any encoding supported by the
system's "iconv" library routine.
-fworking-directory
Enable generation of linemarkers in the preprocessor
output that will let the compiler know the current
working directory at the time of preprocessing. When
this option is enabled, the preprocessor will emit,
after the initial linemarker, a second linemarker with
the current working directory followed by two slashes.
GC will use this directory, when it's present in the
preprocessed input, as the directory emitted as the
current working directory in some debugging information
formats. This option is implicitly enabled if debugging
information is enabled, but this can be inhibited with
the negated form -fno-working-directory. If the -P flag
is present in the command line, this option has no
effect, since no "#line" directives are emitted
whatsoever.
-fno-show-column
Do not print column numbers in diagnostics. This may be
necessary if diagnostics are being scanned by a program
that does not understand the column numbers, such as
dejagnu.
-A predicate=answer
Make an assertion with the predicate predicate and
answer answer. This form is preferred to the older form
gcc-3.4.3 Last change: 2004-11-05 96
GNU GC(1)
-A predicate(answer), which is still supported, because
it does not use shell special characters.
-A -predicate=answer
Cancel an assertion with the predicate predicate and
answer answer.
-dCHARS
CHARS is a sequence of one or more of the following
characters, and must not be preceded by a space. Other
characters are interpreted by the compiler proper, or
reserved for future versions of GC, and so are silently
ignored. If you specify characters whose behavior
conflicts, the result is undefined.
M Instead of the normal output, generate a list of
#define directives for all the macros defined during
the execution of the preprocessor, including
predefined macros. This gives you a way of finding
out what is predefined in your version of the
preprocessor. Assuming you have no file foo.h, the
command
touch foo.h; cpp -dM foo.h
will show all the predefined macros.
D Like M except in two respects: it does not include
the predefined macros, and it outputs both the
#define directives and the result of preprocessing.
Both kinds of output go to the standard output file.
N Like D, but emit only the macro names, not their
expansions.
I Output #include directives in addition to the result
of preprocessing.
-P Inhibit generation of linemarkers in the output from the
preprocessor. This might be useful when running the
preprocessor on something that is not C code, and will
be sent to a program which might be confused by the
linemarkers.
-C Do not discard comments. All comments are passed
through to the output file, except for comments in
processed directives, which are deleted along with the
directive.
You should be prepared for side effects when using -C;
it causes the preprocessor to treat comments as tokens
in their own right. For example, comments appearing at
gcc-3.4.3 Last change: 2004-11-05 97
GNU GC(1)
the start of what would be a directive line have the
effect of turning that line into an ordinary source
line, since the first token on the line is no longer a
#.
-C Do not discard comments, including during macro
expansion. This is like -C, except that comments
contained within macros are also passed through to the
output file where the macro is expanded.
In addition to the side-effects of the -C option, the
-C option causes all C]-style comments inside a macro
to be converted to C-style comments. This is to prevent
later use of that macro from inadvertently commenting
out the remainder of the source line.
The -C option is generally used to support lint
comments.
-traditional-cpp
Try to imitate the behavior of old-fashioned C
preprocessors, as opposed to ISO C preprocessors.
-trigraphs
Process trigraph sequences. These are three-character
sequences, all starting with ??, that are defined by ISO
C to stand for single characters. For example, ??/
stands for \, so '??/n' is a character constant for a
newline. By default, GC ignores trigraphs, but in
standard-conforming modes it converts them. See the
-std and -ansi options.
The nine trigraphs and their replacements are
Trigraph: ??( ??) ??< ??> ??= ??/ ??' ??! ??-
Replacement: [ ] { } # \ ^ ~
-remap
Enable special code to work around file systems which
only permit very short file names, such as MS-DOS.
--help
--target-help
Print text describing all the command line options
instead of preprocessing anything.
-v Verbose mode. Print out GNU CP's version number at the
beginning of execution, and report the final form of the
include path.
-H Print the name of each header file used, in addition to
other normal activities. Each name is indented to show
gcc-3.4.3 Last change: 2004-11-05 98
GNU GC(1)
how deep in the #include stack it is. Precompiled
header files are also printed, even if they are found to
be invalid; an invalid precompiled header file is
printed with ...x and a valid one with ...! .
-version
--version
Print out GNU CP's version number. With one dash,
proceed to preprocess as normal. With two dashes, exit
immediately.
Passing Options to the Assembler
You can pass options to the assembler.
-Wa,option
Pass option as an option to the assembler. If option
contains commas, it is split into multiple options at
the commas.
-Xassembler option
Pass option as an option to the assembler. You can use
this to supply system-specific assembler options which
GC does not know how to recognize.
If you want to pass an option that takes an argument,
you must use -Xassembler twice, once for the option and
once for the argument.
Options for Linking
These options come into play when the compiler links object
files into an executable output file. They are meaningless
if the compiler is not doing a link step.
object-file-name
A file name that does not end in a special recognized
suffix is considered to name an object file or library.
(Object files are distinguished from libraries by the
linker according to the file contents.) If linking is
done, these object files are used as input to the
linker.
-c
-S
-E If any of these options is used, then the linker is not
run, and object file names should not be used as
arguments.
-llibrary
-l library
Search the library named library when linking. (The
gcc-3.4.3 Last change: 2004-11-05 99
GNU GC(1)
second alternative with the library as a separate
argument is only for POSIX compliance and is not
recommended.)
It makes a difference where in the command you write
this option; the linker searches and processes libraries
and object files in the order they are specified. Thus,
foo.o -lz bar.o searches library z after file foo.o but
before bar.o. If bar.o refers to functions in z, those
functions may not be loaded.
The linker searches a standard list of directories for
the library, which is actually a file named
liblibrary.a. The linker then uses this file as if it
had been specified precisely by name.
The directories searched include several standard system
directories plus any that you specify with -L.
Normally the files found this way are library
files---archive files whose members are object files.
The linker handles an archive file by scanning through
it for members which define symbols that have so far
been referenced but not defined. But if the file that
is found is an ordinary object file, it is linked in the
usual fashion. The only difference between using an -l
option and specifying a file name is that -l surrounds
library with lib and .a and searches several
directories.
-lobjc
You need this special case of the -l option in order to
link an Objective-C program.
-nostartfiles
Do not use the standard system startup files when
linking. The standard system libraries are used
normally, unless -nostdlib or -nodefaultlibs is used.
-nodefaultlibs
Do not use the standard system libraries when linking.
Only the libraries you specify will be passed to the
linker. The standard startup files are used normally,
unless -nostartfiles is used. The compiler may generate
calls to memcmp, memset, and memcpy for System V (and
ISO C) environments or to bcopy and bzero for BSD
environments. These entries are usually resolved by
entries in libc. These entry points should be supplied
through some other mechanism when this option is
specified.
-nostdlib
gcc-3.4.3 Last change: 2004-11-05 100
GNU GC(1)
Do not use the standard system startup files or
libraries when linking. No startup files and only the
libraries you specify will be passed to the linker. The
compiler may generate calls to memcmp, memset, and
memcpy for System V (and ISO C) environments or to bcopy
and bzero for BSD environments. These entries are
usually resolved by entries in libc. These entry points
should be supplied through some other mechanism when
this option is specified.
One of the standard libraries bypassed by -nostdlib and
-nodefaultlibs is libgcc.a, a library of internal
subroutines that GC uses to overcome shortcomings of
particular machines, or special needs for some
languages.
In most cases, you need libgcc.a even when you want to
avoid other standard libraries. In other words, when
you specify -nostdlib or -nodefaultlibs you should
usually specify -lgcc as well. This ensures that you
have no unresolved references to internal GC library
subroutines. (For example, main, used to ensure C]
constructors will be called.)
-pie
Produce a position independent executable on targets
which support it. For predictable results, you must
also specify the same set of options that were used to
generate code (-fpie, -fPIE, or model suboptions) when
you specify this option.
-s Remove all symbol table and relocation information from
the executable.
-static
On systems that support dynamic linking, this prevents
linking with the shared libraries. On other systems,
this option has no effect.
-shared
Produce a shared object which can then be linked with
other objects to form an executable. Not all systems
support this option. For predictable results, you must
also specify the same set of options that were used to
generate code (-fpic, -fPIC, or model suboptions) when
you specify this option.[1]
-shared-libgcc
-static-libgcc
On systems that provide libgcc as a shared library,
these options force the use of either the shared or
static version respectively. If no shared version of
gcc-3.4.3 Last change: 2004-11-05 101
GNU GC(1)
libgcc was built when the compiler was configured, these
options have no effect.
There are several situations in which an application
should use the shared libgcc instead of the static
version. The most common of these is when the
application wishes to throw and catch exceptions across
different shared libraries. In that case, each of the
libraries as well as the application itself should use
the shared libgcc.
Therefore, the G] and GCJ drivers automatically add
-shared-libgcc whenever you build a shared library or a
main executable, because C] and Java programs typically
use exceptions, so this is the right thing to do.
If, instead, you use the GC driver to create shared
libraries, you may find that they will not always be
linked with the shared libgcc. If GC finds, at its
configuration time, that you have a non-GNU linker or a
GNU linker that does not support option --eh-frame-hdr,
it will link the shared version of libgcc into shared
libraries by default. Otherwise, it will take advantage
of the linker and optimize away the linking with the
shared version of libgcc, linking with the static
version of libgcc by default. This allows exceptions to
propagate through such shared libraries, without
incurring relocation costs at library load time.
However, if a library or main executable is supposed to
throw or catch exceptions, you must link it using the
G] or GCJ driver, as appropriate for the languages used
in the program, or using the option -shared-libgcc, such
that it is linked with the shared libgcc.
-symbolic
Bind references to global symbols when building a shared
object. Warn about any unresolved references (unless
overridden by the link editor option -Xlinker -z
-Xlinker defs). Only a few systems support this option.
-Xlinker option
Pass option as an option to the linker. You can use
this to supply system-specific linker options which GC
does not know how to recognize.
If you want to pass an option that takes an argument,
you must use -Xlinker twice, once for the option and
once for the argument. For example, to pass -assert
definitions, you must write -Xlinker -assert -Xlinker
definitions. It does not work to write -Xlinker
"-assert definitions", because this passes the entire
gcc-3.4.3 Last change: 2004-11-05 102
GNU GC(1)
string as a single argument, which is not what the
linker expects.
-Wl,option
Pass option as an option to the linker. If option
contains commas, it is split into multiple options at
the commas.
-u symbol
Pretend the symbol symbol is undefined, to force linking
of library modules to define it. You can use -u
multiple times with different symbols to force loading
of additional library modules.
Options for Directory Search
These options specify directories to search for header
files, for libraries and for parts of the compiler:
-Idir
Add the directory dir to the head of the list of
directories to be searched for header files. This can
be used to override a system header file, substituting
your own version, since these directories are searched
before the system header file directories. However, you
should not use this option to add directories that
contain vendor-supplied system header files (use
-isystem for that). If you use more than one -I option,
the directories are scanned in left-to-right order; the
standard system directories come after.
If a standard system include directory, or a directory
specified with -isystem, is also specified with -I, the
-I option will be ignored. The directory will still be
searched but as a system directory at its normal
position in the system include chain. This is to ensure
that GC's procedure to fix buggy system headers and the
ordering for the includenext directive are not
inadvertently changed. If you really need to change the
search order for system directories, use the -nostdinc
and/or -isystem options.
-I- Any directories you specify with -I options before the
-I- option are searched only for the case of #include
"file"; they are not searched for #include .
If additional directories are specified with -I options
after the -I-, these directories are searched for all
#include directives. (Ordinarily all -I directories are
used this way.)
In addition, the -I- option inhibits the use of the
gcc-3.4.3 Last change: 2004-11-05 103
GNU GC(1)
current directory (where the current input file came
from) as the first search directory for #include "file".
There is no way to override this effect of -I-. With
-I. you can specify searching the directory which was
current when the compiler was invoked. That is not
exactly the same as what the preprocessor does by
default, but it is often satisfactory.
-I- does not inhibit the use of the standard system
directories for header files. Thus, -I- and -nostdinc
are independent.
-Ldir
Add directory dir to the list of directories to be
searched for -l.
-Bprefix
This option specifies where to find the executables,
libraries, include files, and data files of the compiler
itself.
The compiler driver program runs one or more of the
subprograms cpp, cc1, as and ld. It tries prefix as a
prefix for each program it tries to run, both with and
without machine/version/.
For each subprogram to be run, the compiler driver first
tries the -B prefix, if any. If that name is not found,
or if -B was not specified, the driver tries two
standard prefixes, which are /usr/lib/gcc/ and
/usr/local/lib/gcc/. If neither of those results in a
file name that is found, the unmodified program name is
searched for using the directories specified in your
PATH environment variable.
The compiler will check to see if the path provided by
the -B refers to a directory, and if necessary it will
add a directory separator character at the end of the
path.
-B prefixes that effectively specify directory names
also apply to libraries in the linker, because the
compiler translates these options into -L options for
the linker. They also apply to includes files in the
preprocessor, because the compiler translates these
options into -isystem options for the preprocessor. In
this case, the compiler appends include to the prefix.
The run-time support file libgcc.a can also be searched
for using the -B prefix, if needed. If it is not found
there, the two standard prefixes above are tried, and
that is all. The file is left out of the link if it is
gcc-3.4.3 Last change: 2004-11-05 104
GNU GC(1)
not found by those means.
Another way to specify a prefix much like the -B prefix
is to use the environment variable GCEXECPREFIX.
As a special kludge, if the path provided by -B is
[dir/]stageN/, where N is a number in the range 0 to 9,
then it will be replaced by [dir/]include. This is to
help with boot-strapping the compiler.
-specs=file
Process file after the compiler reads in the standard
specs file, in order to override the defaults that the
gcc driver program uses when determining what switches
to pass to cc1, cc1plus, as, ld, etc. More than one
-specs=file can be specified on the command line, and
they are processed in order, from left to right.
Specifying Target Machine and Compiler Version
The usual way to run GC is to run the executable called
gcc, or -gcc when cross-compiling, or
-gcc- to run a version other than the one
that was installed last. Sometimes this is inconvenient, so
GC provides options that will switch to another cross-
compiler or version.
-b machine
The argument machine specifies the target machine for
compilation.
The value to use for machine is the same as was
specified as the machine type when configuring GC as a
cross-compiler. For example, if a cross-compiler was
configured with configure i386v, meaning to compile for
an 80386 running System V, then you would specify -b
i386v to run that cross compiler.
-V version
The argument version specifies which version of GC to
run. This is useful when multiple versions are
installed. For example, version might be 2.0, meaning
to run GC version 2.0.
The -V and -b options work by running the
-gcc- executable, so there's no real
reason to use them if you can just run that directly.
Hardware Models and Configurations
Earlier we discussed the standard option -b which chooses
among different installed compilers for completely different
gcc-3.4.3 Last change: 2004-11-05 105
GNU GC(1)
target machines, such as VAX vs. 68000 vs. 80386.
In addition, each of these target machine types can have its
own special options, starting with -m, to choose among
various hardware models or configurations---for example,
68010 vs 68020, floating coprocessor or none. A single
installed version of the compiler can compile for any model
or configuration, according to the options specified.
Some configurations of the compiler also support additional
special options, usually for compatibility with other
compilers on the same platform.
These options are defined by the macro "TARGETSWITCHES" in
the machine description. The default for the options is
also defined by that macro, which enables you to change the
defaults.
M680x0 Options
These are the -m options defined for the 68000 series. The
default values for these options depends on which style of
68000 was selected when the compiler was configured; the
defaults for the most common choices are given below.
-m68000
-mc68000
Generate output for a 68000. This is the default when
the compiler is configured for 68000-based systems.
Use this option for microcontrollers with a 68000 or
EC000 core, including the 68008, 68302, 68306, 68307,
68322, 68328 and 68356.
-m68020
-mc68020
Generate output for a 68020. This is the default when
the compiler is configured for 68020-based systems.
-m68881
Generate output containing 68881 instructions for
floating point. This is the default for most 68020
systems unless --nfp was specified when the compiler was
configured.
-m68030
Generate output for a 68030. This is the default when
the compiler is configured for 68030-based systems.
-m68040
Generate output for a 68040. This is the default when
the compiler is configured for 68040-based systems.
gcc-3.4.3 Last change: 2004-11-05 106
GNU GC(1)
This option inhibits the use of 68881/68882 instructions
that have to be emulated by software on the 68040. Use
this option if your 68040 does not have code to emulate
those instructions.
-m68060
Generate output for a 68060. This is the default when
the compiler is configured for 68060-based systems.
This option inhibits the use of 68020 and 68881/68882
instructions that have to be emulated by software on the
68060. Use this option if your 68060 does not have code
to emulate those instructions.
-mcpu32
Generate output for a CPU32. This is the default when
the compiler is configured for CPU32-based systems.
Use this option for microcontrollers with a CPU32 or
CPU32] core, including the 68330, 68331, 68332, 68333,
68334, 68336, 68340, 68341, 68349 and 68360.
-m5200
Generate output for a 520X ``coldfire'' family cpu.
This is the default when the compiler is configured for
520X-based systems.
Use this option for microcontroller with a 5200 core,
including the MCF5202, MCF5203, MCF5204 and MCF5202.
-m68020-40
Generate output for a 68040, without using any of the
new instructions. This results in code which can run
relatively efficiently on either a 68020/68881 or a
68030 or a 68040. The generated code does use the 68881
instructions that are emulated on the 68040.
-m68020-60
Generate output for a 68060, without using any of the
new instructions. This results in code which can run
relatively efficiently on either a 68020/68881 or a
68030 or a 68040. The generated code does use the 68881
instructions that are emulated on the 68060.
-msoft-float
Generate output containing library calls for floating
point. Warning: the requisite libraries are not
available for all m68k targets. Normally the facilities
of the machine's usual C compiler are used, but this
can't be done directly in cross-compilation. You must
make your own arrangements to provide suitable library
functions for cross-compilation. The embedded targets
gcc-3.4.3 Last change: 2004-11-05 107
GNU GC(1)
m68k-*-aout and m68k-*-coff do provide software floating
point support.
-mshort
Consider type "int" to be 16 bits wide, like "short
int".
-mnobitfield
Do not use the bit-field instructions. The -m68000,
-mcpu32 and -m5200 options imply -mnobitfield.
-mbitfield
Do use the bit-field instructions. The -m68020 option
implies -mbitfield. This is the default if you use a
configuration designed for a 68020.
-mrtd
Use a different function-calling convention, in which
functions that take a fixed number of arguments return
with the "rtd" instruction, which pops their arguments
while returning. This saves one instruction in the
caller since there is no need to pop the arguments
there.
This calling convention is incompatible with the one
normally used on Unix, so you cannot use it if you need
to call libraries compiled with the Unix compiler.
Also, you must provide function prototypes for all
functions that take variable numbers of arguments
(including "printf"); otherwise incorrect code will be
generated for calls to those functions.
In addition, seriously incorrect code will result if you
call a function with too many arguments. (Normally,
extra arguments are harmlessly ignored.)
The "rtd" instruction is supported by the 68010, 68020,
68030, 68040, 68060 and CPU32 processors, but not by the
68000 or 5200.
-malign-int
-mno-align-int
Control whether GC aligns "int", "long", "long long",
"float", "double", and "long double" variables on a
32-bit boundary (-malign-int) or a 16-bit boundary
(-mno-align-int). Aligning variables on 32-bit
boundaries produces code that runs somewhat faster on
processors with 32-bit busses at the expense of more
memory.
Warning: if you use the -malign-int switch, GC will
gcc-3.4.3 Last change: 2004-11-05 108
GNU GC(1)
align structures containing the above types differently
than most published application binary interface
specifications for the m68k.
-mpcrel
Use the pc-relative addressing mode of the 68000
directly, instead of using a global offset table. At
present, this option implies -fpic, allowing at most a
16-bit offset for pc-relative addressing. -fPIC is not
presently supported with -mpcrel, though this could be
supported for 68020 and higher processors.
-mno-strict-align
-mstrict-align
Do not (do) assume that unaligned memory references will
be handled by the system.
-msep-data
Generate code that allows the data segment to be located
in a different area of memory from the text segment.
This allows for execute in place in an environment
without virtual memory management. This option implies
-fPIC.
-mno-sep-data
Generate code that assumes that the data segment follows
the text segment. This is the default.
-mid-shared-library
Generate code that supports shared libraries via the
library ID method. This allows for execute in place and
shared libraries in an environment without virtual
memory management. This option implies -fPIC.
-mno-id-shared-library
Generate code that doesn't assume ID based shared
libraries are being used. This is the default.
-mshared-library-id=n
Specified the identification number of the ID based
shared library being compiled. Specifying a value of 0
will generate more compact code, specifying other values
will force the allocation of that number to the current
library but is no more space or time efficient than
omitting this option.
M68hc1x Options
These are the -m options defined for the 68hc11 and 68hc12
microcontrollers. The default values for these options
depends on which style of microcontroller was selected when
the compiler was configured; the defaults for the most
gcc-3.4.3 Last change: 2004-11-05 109
GNU GC(1)
common choices are given below.
-m6811
-m68hc11
Generate output for a 68HC11. This is the default when
the compiler is configured for 68HC11-based systems.
-m6812
-m68hc12
Generate output for a 68HC12. This is the default when
the compiler is configured for 68HC12-based systems.
-m68S12
-m68hcs12
Generate output for a 68HCS12.
-mauto-incdec
Enable the use of 68HC12 pre and post auto-increment and
auto-decrement addressing modes.
-minmax
-nominmax
Enable the use of 68HC12 min and max instructions.
-mlong-calls
-mno-long-calls
Treat all calls as being far away (near). If calls are
assumed to be far away, the compiler will use the "call"
instruction to call a function and the "rtc" instruction
for returning.
-mshort
Consider type "int" to be 16 bits wide, like "short
int".
-msoft-reg-count=count
Specify the number of pseudo-soft registers which are
used for the code generation. The maximum number is 32.
Using more pseudo-soft register may or may not result in
better code depending on the program. The default is 4
for 68HC11 and 2 for 68HC12.
VAX Options
These -m options are defined for the VAX:
-munix
Do not output certain jump instructions ("aobleq" and so
on) that the Unix assembler for the VAX cannot handle
across long ranges.
-mgnu
gcc-3.4.3 Last change: 2004-11-05 110
GNU GC(1)
Do output those jump instructions, on the assumption
that you will assemble with the GNU assembler.
-mg Output code for g-format floating point numbers instead
of d-format.
SPARC Options
These -m options are supported on the SPARC:
-mno-app-regs
-mapp-regs
Specify -mapp-regs to generate output using the global
registers 2 through 4, which the SPARC SVR4 ABI reserves
for applications. This is the default.
To be fully SVR4 ABI compliant at the cost of some
performance loss, specify -mno-app-regs. You should
compile libraries and system software with this option.
-mfpu
-mhard-float
Generate output containing floating point instructions.
This is the default.
-mno-fpu
-msoft-float
Generate output containing library calls for floating
point. Warning: the requisite libraries are not
available for all SPARC targets. Normally the
facilities of the machine's usual C compiler are used,
but this cannot be done directly in cross-compilation.
You must make your own arrangements to provide suitable
library functions for cross-compilation. The embedded
targets sparc-*-aout and sparclite-*-* do provide
software floating point support.
-msoft-float changes the calling convention in the
output file; therefore, it is only useful if you compile
all of a program with this option. In particular, you
need to compile libgcc.a, the library that comes with
GC, with -msoft-float in order for this to work.
-mhard-quad-float
Generate output containing quad-word (long double)
floating point instructions.
-msoft-quad-float
Generate output containing library calls for quad-word
(long double) floating point instructions. The
functions called are those specified in the SPARC ABI.
This is the default.
gcc-3.4.3 Last change: 2004-11-05 111
GNU GC(1)
As of this writing, there are no SPARC implementations
that have hardware support for the quad-word floating
point instructions. They all invoke a trap handler for
one of these instructions, and then the trap handler
emulates the effect of the instruction. Because of the
trap handler overhead, this is much slower than calling
the ABI library routines. Thus the -msoft-quad-float
option is the default.
-mno-flat
-mflat
With -mflat, the compiler does not generate save/restore
instructions and will use a ``flat'' or single register
window calling convention. This model uses %i7 as the
frame pointer and is compatible with the normal register
window model. Code from either may be intermixed. The
local registers and the input registers (0--5) are still
treated as ``call saved'' registers and will be saved on
the stack as necessary.
With -mno-flat (the default), the compiler emits
save/restore instructions (except for leaf functions)
and is the normal mode of operation.
These options are deprecated and will be deleted in a
future GC release.
-mno-unaligned-doubles
-munaligned-doubles
Assume that doubles have 8 byte alignment. This is the
default.
With -munaligned-doubles, GC assumes that doubles have
8 byte alignment only if they are contained in another
type, or if they have an absolute address. Otherwise,
it assumes they have 4 byte alignment. Specifying this
option avoids some rare compatibility problems with code
generated by other compilers. It is not the default
because it results in a performance loss, especially for
floating point code.
-mno-faster-structs
-mfaster-structs
With -mfaster-structs, the compiler assumes that
structures should have 8 byte alignment. This enables
the use of pairs of "ldd" and "std" instructions for
copies in structure assignment, in place of twice as
many "ld" and "st" pairs. However, the use of this
changed alignment directly violates the SPARC ABI.
Thus, it's intended only for use on targets where the
developer acknowledges that their resulting code will
not be directly in line with the rules of the ABI.
gcc-3.4.3 Last change: 2004-11-05 112
GNU GC(1)
-mimpure-text
-mimpure-text, used in addition to -shared, tells the
compiler to not pass -z text to the linker when linking
a shared object. Using this option, you can link
position-dependent code into a shared object.
-mimpure-text suppresses the ``relocations remain
against allocatable but non-writable sections'' linker
error message. However, the necessary relocations will
trigger copy-on-write, and the shared object is not
actually shared across processes. Instead of using
-mimpure-text, you should compile all source code with
-fpic or -fPIC.
This option is only available on SunOS and Solaris.
-mv8
-msparclite
These two options select variations on the SPARC
architecture. These options are deprecated and will be
deleted in a future GC release. They have been
replaced with -mcpu=xxx.
-mcypress
-msupersparc
-mf930
-mf934
These four options select the processor for which the
code is optimized. These options are deprecated and
will be deleted in a future GC release. They have been
replaced with -mcpu=xxx.
-mcpu=cputype
Set the instruction set, register set, and instruction
scheduling parameters for machine type cputype.
Supported values for cputype are v7, cypress, v8,
supersparc, sparclite, f930, f934, hypersparc,
sparclite86x, sparclet, tsc701, v9, ultrasparc, and
ultrasparc3.
Default instruction scheduling parameters are used for
values that select an architecture and not an
implementation. These are v7, v8, sparclite, sparclet,
v9.
Here is a list of each supported architecture and their
supported implementations.
gcc-3.4.3 Last change: 2004-11-05 113
GNU GC(1)
v7: cypress
v8: supersparc, hypersparc
sparclite: f930, f934, sparclite86x
sparclet: tsc701
v9: ultrasparc, ultrasparc3
By default (unless configured otherwise), GC generates
code for the V7 variant of the SPARC architecture. With
-mcpu=cypress, the compiler additionally optimizes it
for the Cypress CY7C602 chip, as used in the
SPARCStation/SPARCServer 3xx series. This is also
appropriate for the older SPARCStation 1, 2, IPX etc.
With -mcpu=v8, GC generates code for the V8 variant of
the SPARC architecture. The only difference from V7
code is that the compiler emits the integer multiply and
integer divide instructions which exist in SPARC-V8 but
not in SPARC-V7. With -mcpu=supersparc, the compiler
additionally optimizes it for the SuperSPARC chip, as
used in the SPARCStation 10, 1000 and 2000 series.
With -mcpu=sparclite, GC generates code for the
SPARClite variant of the SPARC architecture. This adds
the integer multiply, integer divide step and scan
("ffs") instructions which exist in SPARClite but not in
SPARC-V7. With -mcpu=f930, the compiler additionally
optimizes it for the Fujitsu MB86930 chip, which is the
original SPARClite, with no FPU. With -mcpu=f934, the
compiler additionally optimizes it for the Fujitsu
MB86934 chip, which is the more recent SPARClite with
FPU.
With -mcpu=sparclet, GC generates code for the SPARClet
variant of the SPARC architecture. This adds the
integer multiply, multiply/accumulate, integer divide
step and scan ("ffs") instructions which exist in
SPARClet but not in SPARC-V7. With -mcpu=tsc701, the
compiler additionally optimizes it for the TEMIC
SPARClet chip.
With -mcpu=v9, GC generates code for the V9 variant of
the SPARC architecture. This adds 64-bit integer and
floating-point move instructions, 3 additional
floating-point condition code registers and conditional
move instructions. With -mcpu=ultrasparc, the compiler
additionally optimizes it for the Sun UltraSPARC I/I
chips. With -mcpu=ultrasparc3, the compiler
additionally optimizes it for the Sun UltraSPARC I
chip.
-mtune=cputype
Set the instruction scheduling parameters for machine
gcc-3.4.3 Last change: 2004-11-05 114
GNU GC(1)
type cputype, but do not set the instruction set or
register set that the option -mcpu=cputype would.
The same values for -mcpu=cputype can be used for
-mtune=cputype, but the only useful values are those
that select a particular cpu implementation. Those are
cypress, supersparc, hypersparc, f930, f934,
sparclite86x, tsc701, ultrasparc, and ultrasparc3.
-mv8plus
-mno-v8plus
With -mv8plus, GC generates code for the SPARC-V8] ABI.
The difference from the V8 ABI is that the global and
out registers are considered 64-bit wide. This is
enabled by default on Solaris in 32-bit mode for all
SPARC-V9 processors.
-mvis
-mno-vis
With -mvis, GC generates code that takes advantage of
the UltraSPARC Visual Instruction Set extensions. The
default is -mno-vis.
These -m options are supported in addition to the above on
SPARC-V9 processors in 64-bit environments:
-mlittle-endian
Generate code for a processor running in little-endian
mode. It is only available for a few configurations and
most notably not on Solaris.
-m32
-m64
Generate code for a 32-bit or 64-bit environment. The
32-bit environment sets int, long and pointer to 32
bits. The 64-bit environment sets int to 32 bits and
long and pointer to 64 bits.
-mcmodel=medlow
Generate code for the Medium/Low code model: 64-bit
addresses, programs must be linked in the low 32 bits of
memory. Programs can be statically or dynamically
linked.
-mcmodel=medmid
Generate code for the Medium/Middle code model: 64-bit
addresses, programs must be linked in the low 44 bits of
memory, the text and data segments must be less than 2GB
in size and the data segment must be located within 2GB
of the text segment.
-mcmodel=medany
gcc-3.4.3 Last change: 2004-11-05 115
GNU GC(1)
Generate code for the Medium/Anywhere code model: 64-bit
addresses, programs may be linked anywhere in memory,
the text and data segments must be less than 2GB in size
and the data segment must be located within 2GB of the
text segment.
-mcmodel=embmedany
Generate code for the Medium/Anywhere code model for
embedded systems: 64-bit addresses, the text and data
segments must be less than 2GB in size, both starting
anywhere in memory (determined at link time). The
global register %g4 points to the base of the data
segment. Programs are statically linked and PIC is not
supported.
-mstack-bias
-mno-stack-bias
With -mstack-bias, GC assumes that the stack pointer,
and frame pointer if present, are offset by -2047 which
must be added back when making stack frame references.
This is the default in 64-bit mode. Otherwise, assume
no such offset is present.
These switches are supported in addition to the above on
Solaris:
-threads
Add support for multithreading using the Solaris threads
library. This option sets flags for both the
preprocessor and linker. This option does not affect
the thread safety of object code produced by the
compiler or that of libraries supplied with it.
-pthreads
Add support for multithreading using the POSIX threads
library. This option sets flags for both the
preprocessor and linker. This option does not affect
the thread safety of object code produced by the
compiler or that of libraries supplied with it.
ARM Options
These -m options are defined for Advanced RISC Machines
(ARM) architectures:
-mapcs-frame
Generate a stack frame that is compliant with the ARM
Procedure Call Standard for all functions, even if this
is not strictly necessary for correct execution of the
code. Specifying -fomit-frame-pointer with this option
will cause the stack frames not to be generated for leaf
functions. The default is -mno-apcs-frame.
gcc-3.4.3 Last change: 2004-11-05 116
GNU GC(1)
-mapcs
This is a synonym for -mapcs-frame.
-mapcs-26
Generate code for a processor running with a 26-bit
program counter, and conforming to the function calling
standards for the APCS 26-bit option.
This option is deprecated. Future releases of the GC
will only support generating code that runs in apcs-32
mode.
-mapcs-32
Generate code for a processor running with a 32-bit
program counter, and conforming to the function calling
standards for the APCS 32-bit option.
This flag is deprecated. Future releases of GC will
make this flag unconditional.
-mthumb-interwork
Generate code which supports calling between the ARM and
Thumb instruction sets. Without this option the two
instruction sets cannot be reliably used inside one
program. The default is -mno-thumb-interwork, since
slightly larger code is generated when -mthumb-interwork
is specified.
-mno-sched-prolog
Prevent the reordering of instructions in the function
prolog, or the merging of those instruction with the
instructions in the function's body. This means that
all functions will start with a recognizable set of
instructions (or in fact one of a choice from a small
set of different function prologues), and this
information can be used to locate the start if functions
inside an executable piece of code. The default is
-msched-prolog.
-mhard-float
Generate output containing floating point instructions.
This is the default.
-msoft-float
Generate output containing library calls for floating
point. Warning: the requisite libraries are not
available for all ARM targets. Normally the facilities
of the machine's usual C compiler are used, but this
cannot be done directly in cross-compilation. You must
make your own arrangements to provide suitable library
functions for cross-compilation.
gcc-3.4.3 Last change: 2004-11-05 117
GNU GC(1)
-msoft-float changes the calling convention in the
output file; therefore, it is only useful if you compile
all of a program with this option. In particular, you
need to compile libgcc.a, the library that comes with
GC, with -msoft-float in order for this to work.
-mlittle-endian
Generate code for a processor running in little-endian
mode. This is the default for all standard
configurations.
-mbig-endian
Generate code for a processor running in big-endian
mode; the default is to compile code for a little-endian
processor.
-mwords-little-endian
This option only applies when generating code for big-
endian processors. Generate code for a little-endian
word order but a big-endian byte order. That is, a byte
order of the form 32107654. Note: this option should
only be used if you require compatibility with code for
big-endian ARM processors generated by versions of the
compiler prior to 2.8.
-malignment-traps
Generate code that will not trap if the MU has
alignment traps enabled. On ARM architectures prior to
ARMv4, there were no instructions to access half-word
objects stored in memory. However, when reading from
memory a feature of the ARM architecture allows a word
load to be used, even if the address is unaligned, and
the processor core will rotate the data as it is being
loaded. This option tells the compiler that such
misaligned accesses will cause a MU trap and that it
should instead synthesize the access as a series of byte
accesses. The compiler can still use word accesses to
load half-word data if it knows that the address is
aligned to a word boundary.
This option has no effect when compiling for ARM
architecture 4 or later, since these processors have
instructions to directly access half-word objects in
memory.
-mno-alignment-traps
Generate code that assumes that the MU will not trap
unaligned accesses. This produces better code when the
target instruction set does not have half-word memory
operations (i.e. implementations prior to ARMv4).
Note that you cannot use this option to access unaligned
gcc-3.4.3 Last change: 2004-11-05 118
GNU GC(1)
word objects, since the processor will only fetch one
32-bit aligned object from memory.
The default setting is -malignment-traps, since this
produces code that will also run on processors
implementing ARM architecture version 6 or later.
This option is deprecated and will be removed in the
next release of GC.
-mcpu=name
This specifies the name of the target ARM processor.
GC uses this name to determine what kind of
instructions it can emit when generating assembly code.
Permissible names are: arm2, arm250, arm3, arm6, arm60,
arm600, arm610, arm620, arm7, arm7m, arm7d, arm7dm,
arm7di, arm7dmi, arm70, arm700, arm700i, arm710,
arm710c, arm7100, arm7500, arm7500fe, arm7tdmi, arm8,
strongarm, strongarm110, strongarm1100, arm8, arm810,
arm9, arm9e, arm920, arm920t, arm926ejs, arm940t,
arm9tdmi, arm10tdmi, arm1020t, arm1026ejs, arm1136js,
arm1136jfs ,xscale, iwmmxt, ep9312.
-mtune=name
This option is very similar to the -mcpu= option, except
that instead of specifying the actual target processor
type, and hence restricting which instructions can be
used, it specifies that GC should tune the performance
of the code as if the target were of the type specified
in this option, but still choosing the instructions that
it will generate based on the cpu specified by a -mcpu=
option. For some ARM implementations better performance
can be obtained by using this option.
-march=name
This specifies the name of the target ARM architecture.
GC uses this name to determine what kind of
instructions it can emit when generating assembly code.
This option can be used in conjunction with or instead
of the -mcpu= option. Permissible names are: armv2,
armv2a, armv3, armv3m, armv4, armv4t, armv5, armv5t,
armv5te, armv6j, iwmmxt, ep9312.
-mfpe=number
-mfp=number
This specifies the version of the floating point
emulation available on the target. Permissible values
are 2 and 3. -mfp= is a synonym for -mfpe=, for
compatibility with older versions of GC.
-mstructure-size-boundary=n
The size of all structures and unions will be rounded up
gcc-3.4.3 Last change: 2004-11-05 119
GNU GC(1)
to a multiple of the number of bits set by this option.
Permissible values are 8 and 32. The default value
varies for different toolchains. For the COF targeted
toolchain the default value is 8. Specifying the larger
number can produce faster, more efficient code, but can
also increase the size of the program. The two values
are potentially incompatible. Code compiled with one
value cannot necessarily expect to work with code or
libraries compiled with the other value, if they
exchange information using structures or unions.
-mabort-on-noreturn
Generate a call to the function "abort" at the end of a
"noreturn" function. It will be executed if the
function tries to return.
-mlong-calls
-mno-long-calls
Tells the compiler to perform function calls by first
loading the address of the function into a register and
then performing a subroutine call on this register.
This switch is needed if the target function will lie
outside of the 64 megabyte addressing range of the
offset based version of subroutine call instruction.
Even if this switch is enabled, not all function calls
will be turned into long calls. The heuristic is that
static functions, functions which have the short-call
attribute, functions that are inside the scope of a
#pragma nolongcalls directive and functions whose
definitions have already been compiled within the
current compilation unit, will not be turned into long
calls. The exception to this rule is that weak function
definitions, functions with the long-call attribute or
the section attribute, and functions that are within the
scope of a #pragma longcalls directive, will always be
turned into long calls.
This feature is not enabled by default. Specifying
-mno-long-calls will restore the default behavior, as
will placing the function calls within the scope of a
#pragma longcallsoff directive. Note these switches
have no effect on how the compiler generates code to
handle function calls via function pointers.
-mnop-fun-dllimport
Disable support for the "dllimport" attribute.
-msingle-pic-base
Treat the register used for PIC addressing as read-only,
rather than loading it in the prologue for each
function. The run-time system is responsible for
gcc-3.4.3 Last change: 2004-11-05 120
GNU GC(1)
initializing this register with an appropriate value
before execution begins.
-mpic-register=reg
Specify the register to be used for PIC addressing. The
default is R10 unless stack-checking is enabled, when R9
is used.
-mcirrus-fix-invalid-insns
Insert NOPs into the instruction stream to in order to
work around problems with invalid Maverick instruction
combinations. This option is only valid if the
-mcpu=ep9312 option has been used to enable generation
of instructions for the Cirrus Maverick floating point
co-processor. This option is not enabled by default,
since the problem is only present in older Maverick
implementations. The default can be re-enabled by use
of the -mno-cirrus-fix-invalid-insns switch.
-mpoke-function-name
Write the name of each function into the text section,
directly preceding the function prologue. The generated
code is similar to this:
t0
.ascii "armpokefunctionname", 0
.align
t1
.word 0xff000000 ] (t1 - t0)
armpokefunctionname
mov ip, sp
stmfd sp!, {fp, ip, lr, pc}
sub fp, ip, #4
When performing a stack backtrace, code can inspect the
value of "pc" stored at "fp ] 0". If the trace function
then looks at location "pc - 12" and the top 8 bits are
set, then we know that there is a function name embedded
immediately preceding this location and has length
"((pc[-3]) & 0xff000000)".
-mthumb
Generate code for the 16-bit Thumb instruction set. The
default is to use the 32-bit ARM instruction set.
-mtpcs-frame
Generate a stack frame that is compliant with the Thumb
Procedure Call Standard for all non-leaf functions. (A
leaf function is one that does not call any other
functions.) The default is -mno-tpcs-frame.
-mtpcs-leaf-frame
gcc-3.4.3 Last change: 2004-11-05 121
GNU GC(1)
Generate a stack frame that is compliant with the Thumb
Procedure Call Standard for all leaf functions. (A leaf
function is one that does not call any other functions.)
The default is -mno-apcs-leaf-frame.
-mcallee-super-interworking
Gives all externally visible functions in the file being
compiled an ARM instruction set header which switches to
Thumb mode before executing the rest of the function.
This allows these functions to be called from non-
interworking code.
-mcaller-super-interworking
Allows calls via function pointers (including virtual
functions) to execute correctly regardless of whether
the target code has been compiled for interworking or
not. There is a small overhead in the cost of executing
a function pointer if this option is enabled.
MN10300 Options
These -m options are defined for Matsushita MN10300
architectures:
-mmult-bug
Generate code to avoid bugs in the multiply instructions
for the MN10300 processors. This is the default.
-mno-mult-bug
Do not generate code to avoid bugs in the multiply
instructions for the MN10300 processors.
-mam33
Generate code which uses features specific to the AM33
processor.
-mno-am33
Do not generate code which uses features specific to the
AM33 processor. This is the default.
-mno-crt0
Do not link in the C run-time initialization object
file.
-mrelax
Indicate to the linker that it should perform a
relaxation optimization pass to shorten branches, calls
and absolute memory addresses. This option only has an
effect when used on the command line for the final link
step.
This option makes symbolic debugging impossible.
gcc-3.4.3 Last change: 2004-11-05 122
GNU GC(1)
M32R/D Options
These -m options are defined for Renesas M32R/D
architectures:
-m32r2
Generate code for the M32R/2.
-m32rx
Generate code for the M32R/X.
-m32r
Generate code for the M32R. This is the default.
-mmodel=small
Assume all objects live in the lower 16MB of memory (so
that their addresses can be loaded with the "ld24"
instruction), and assume all subroutines are reachable
with the "bl" instruction. This is the default.
The addressability of a particular object can be set
with the "model" attribute.
-mmodel=medium
Assume objects may be anywhere in the 32-bit address
space (the compiler will generate "seth/add3"
instructions to load their addresses), and assume all
subroutines are reachable with the "bl" instruction.
-mmodel=large
Assume objects may be anywhere in the 32-bit address
space (the compiler will generate "seth/add3"
instructions to load their addresses), and assume
subroutines may not be reachable with the "bl"
instruction (the compiler will generate the much slower
"seth/add3/jl" instruction sequence).
-msdata=none
Disable use of the small data area. Variables will be
put into one of .data, bss, or .rodata (unless the
"section" attribute has been specified). This is the
default.
The small data area consists of sections .sdata and
.sbss. Objects may be explicitly put in the small data
area with the "section" attribute using one of these
sections.
-msdata=sdata
Put small global and static data in the small data area,
but do not generate special code to reference them.
gcc-3.4.3 Last change: 2004-11-05 123
GNU GC(1)
-msdata=use
Put small global and static data in the small data area,
and generate special instructions to reference them.
-G num
Put global and static objects less than or equal to num
bytes into the small data or bss sections instead of the
normal data or bss sections. The default value of num
is 8. The -msdata option must be set to one of sdata or
use for this option to have any effect.
All modules should be compiled with the same -G num
value. Compiling with different values of num may or
may not work; if it doesn't the linker will give an
error message---incorrect code will not be generated.
-mdebug
Makes the M32R specific code in the compiler display
some statistics that might help in debugging programs.
-malign-loops
Align all loops to a 32-byte boundary.
-mno-align-loops
Do not enforce a 32-byte alignment for loops. This is
the default.
-missue-rate=number
Issue number instructions per cycle. number can only be
1 or 2.
-mbranch-cost=number
number can only be 1 or 2. If it is 1 then branches
will be preferred over conditional code, if it is 2,
then the opposite will apply.
-mflush-trap=number
Specifies the trap number to use to flush the cache.
The default is 12. Valid numbers are between 0 and 15
inclusive.
-mno-flush-trap
Specifies that the cache cannot be flushed by using a
trap.
-mflush-func=name
Specifies the name of the operating system function to
call to flush the cache. The default is flushcache,
but a function call will only be used if a trap is not
available.
-mno-flush-func
gcc-3.4.3 Last change: 2004-11-05 124
GNU GC(1)
Indicates that there is no OS function for flushing the
cache.
IBM RS/6000 and PowerPC Options
These -m options are defined for the IBM RS/6000 and
PowerPC:
-mpower
-mno-power
-mpower2
-mno-power2
-mpowerpc
-mno-powerpc
-mpowerpc-gpopt
-mno-powerpc-gpopt
-mpowerpc-gfxopt
-mno-powerpc-gfxopt
-mpowerpc64
-mno-powerpc64
GC supports two related instruction set architectures
for the RS/6000 and PowerPC. The POWER instruction set
are those instructions supported by the rios chip set
used in the original RS/6000 systems and the PowerPC
instruction set is the architecture of the Motorola
MPC5xx, MPC6xx, MPC8xx microprocessors, and the IBM 4xx
microprocessors.
Neither architecture is a subset of the other. However
there is a large common subset of instructions supported
by both. An MQ register is included in processors
supporting the POWER architecture.
You use these options to specify which instructions are
available on the processor you are using. The default
value of these options is determined when configuring
GC. Specifying the -mcpu=cputype overrides the
specification of these options. We recommend you use
the -mcpu=cputype option rather than the options listed
above.
The -mpower option allows GC to generate instructions
that are found only in the POWER architecture and to use
the MQ register. Specifying -mpower2 implies -power and
also allows GC to generate instructions that are
present in the POWER2 architecture but not the original
POWER architecture.
The -mpowerpc option allows GC to generate instructions
that are found only in the 32-bit subset of the PowerPC
architecture. Specifying -mpowerpc-gpopt implies
-mpowerpc and also allows GC to use the optional
gcc-3.4.3 Last change: 2004-11-05 125
GNU GC(1)
PowerPC architecture instructions in the General Purpose
group, including floating-point square root. Specifying
-mpowerpc-gfxopt implies -mpowerpc and also allows GC
to use the optional PowerPC architecture instructions in
the Graphics group, including floating-point select.
The -mpowerpc64 option allows GC to generate the
additional 64-bit instructions that are found in the
full PowerPC64 architecture and to treat GPRs as 64-bit,
doubleword quantities. GC defaults to -mno-powerpc64.
If you specify both -mno-power and -mno-powerpc, GC
will use only the instructions in the common subset of
both architectures plus some special AIX common-mode
calls, and will not use the MQ register. Specifying
both -mpower and -mpowerpc permits GC to use any
instruction from either architecture and to allow use of
the MQ register; specify this for the Motorola MPC601.
-mnew-mnemonics
-mold-mnemonics
Select which mnemonics to use in the generated assembler
code. With -mnew-mnemonics, GC uses the assembler
mnemonics defined for the PowerPC architecture. With
-mold-mnemonics it uses the assembler mnemonics defined
for the POWER architecture. Instructions defined in
only one architecture have only one mnemonic; GC uses
that mnemonic irrespective of which of these options is
specified.
GC defaults to the mnemonics appropriate for the
architecture in use. Specifying -mcpu=cputype
sometimes overrides the value of these option. Unless
you are building a cross-compiler, you should normally
not specify either -mnew-mnemonics or -mold-mnemonics,
but should instead accept the default.
-mcpu=cputype
Set architecture type, register usage, choice of
mnemonics, and instruction scheduling parameters for
machine type cputype. Supported values for cputype
are 401, 403, 405, 405fp, 440, 440fp, 505, 601, 602,
603, 603e, 604, 604e, 620, 630, 740, 7400, 7450, 750,
801, 821, 823, 860, 970, common, ec603e, G3, G4, G5,
power, power2, power3, power4, power5, powerpc,
powerpc64, rios, rios1, rios2, rsc, and rs64a.
-mcpu=common selects a completely generic processor.
Code generated under this option will run on any POWER
or PowerPC processor. GC will use only the
instructions in the common subset of both architectures,
and will not use the MQ register. GC assumes a generic
gcc-3.4.3 Last change: 2004-11-05 126
GNU GC(1)
processor model for scheduling purposes.
-mcpu=power, -mcpu=power2, -mcpu=powerpc, and
-mcpu=powerpc64 specify generic POWER, POWER2, pure
32-bit PowerPC (i.e., not MPC601), and 64-bit PowerPC
architecture machine types, with an appropriate, generic
processor model assumed for scheduling purposes.
The other options specify a specific processor. Code
generated under those options will run best on that
processor, and may not run at all on others.
The -mcpu options automatically enable or disable the
following options: -maltivec, -mhard-float, -mmfcrf,
-mmultiple, -mnew-mnemonics, -mpower, -mpower2,
-mpowerpc64, -mpowerpc-gpopt, -mpowerpc-gfxopt,
-mstring. The particular options set for any particular
CPU will vary between compiler versions, depending on
what setting seems to produce optimal code for that CPU;
it doesn't necessarily reflect the actual hardware's
capabilities. If you wish to set an individual option
to a particular value, you may specify it after the
-mcpu option, like -mcpu=970 -mno-altivec.
On AIX, the -maltivec and -mpowerpc64 options are not
enabled or disabled by the -mcpu option at present,
since AIX does not have full support for these options.
You may still enable or disable them individually if
you're sure it'll work in your environment.
-mtune=cputype
Set the instruction scheduling parameters for machine
type cputype, but do not set the architecture type,
register usage, or choice of mnemonics, as
-mcpu=cputype would. The same values for cputype are
used for -mtune as for -mcpu. If both are specified,
the code generated will use the architecture, registers,
and mnemonics set by -mcpu, but the scheduling
parameters set by -mtune.
-maltivec
-mno-altivec
These switches enable or disable the use of built-in
functions that allow access to the AltiVec instruction
set. You may also need to set -mabi=altivec to adjust
the current ABI with AltiVec ABI enhancements.
-mabi=spe
Extend the current ABI with SPE ABI extensions. This
does not change the default ABI, instead it adds the SPE
ABI extensions to the current ABI.
gcc-3.4.3 Last change: 2004-11-05 127
GNU GC(1)
-mabi=no-spe
Disable Booke SPE ABI extensions for the current ABI.
-misel=yes/no
-misel
This switch enables or disables the generation of ISEL
instructions.
-mspe=yes/no
-mspe
This switch enables or disables the generation of SPE
simd instructions.
-mfloat-gprs=yes/no
-mfloat-gprs
This switch enables or disables the generation of
floating point operations on the general purpose
registers for architectures that support it. This
option is currently only available on the MPC8540.
-mfull-toc
-mno-fp-in-toc
-mno-sum-in-toc
-mminimal-toc
Modify generation of the TOC (Table Of Contents), which
is created for every executable file. The -mfull-toc
option is selected by default. In that case, GC will
allocate at least one TOC entry for each unique non-
automatic variable reference in your program. GC will
also place floating-point constants in the TOC.
However, only 16,384 entries are available in the TOC.
If you receive a linker error message that saying you
have overflowed the available TOC space, you can reduce
the amount of TOC space used with the -mno-fp-in-toc and
-mno-sum-in-toc options. -mno-fp-in-toc prevents GC
from putting floating-point constants in the TOC and
-mno-sum-in-toc forces GC to generate code to calculate
the sum of an address and a constant at run-time instead
of putting that sum into the TOC. You may specify one
or both of these options. Each causes GC to produce
very slightly slower and larger code at the expense of
conserving TOC space.
If you still run out of space in the TOC even when you
specify both of these options, specify -mminimal-toc
instead. This option causes GC to make only one TOC
entry for every file. When you specify this option, GC
will produce code that is slower and larger but which
uses extremely little TOC space. You may wish to use
this option only on files that contain less frequently
executed code.
gcc-3.4.3 Last change: 2004-11-05 128
GNU GC(1)
-maix64
-maix32
Enable 64-bit AIX ABI and calling convention: 64-bit
pointers, 64-bit "long" type, and the infrastructure
needed to support them. Specifying -maix64 implies
-mpowerpc64 and -mpowerpc, while -maix32 disables the
64-bit ABI and implies -mno-powerpc64. GC defaults to
-maix32.
-mxl-call
-mno-xl-call
On AIX, pass floating-point arguments to prototyped
functions beyond the register save area (RSA) on the
stack in addition to argument FPRs. The AIX calling
convention was extended but not initially documented to
handle an obscure K&R C case of calling a function that
takes the address of its arguments with fewer arguments
than declared. AIX XL compilers access floating point
arguments which do not fit in the RSA from the stack
when a subroutine is compiled without optimization.
Because always storing floating-point arguments on the
stack is inefficient and rarely needed, this option is
not enabled by default and only is necessary when
calling subroutines compiled by AIX XL compilers without
optimization.
-mpe
Support IBM RS/6000 SP Parallel Environment (PE). Link
an application written to use message passing with
special startup code to enable the application to run.
The system must have PE installed in the standard
location (/usr/lpp/ppe.poe/), or the specs file must be
overridden with the -specs= option to specify the
appropriate directory location. The Parallel
Environment does not support threads, so the -mpe option
and the -pthread option are incompatible.
-malign-natural
-malign-power
On AIX, Darwin, and 64-bit PowerPC GNU/Linux, the option
-malign-natural overrides the ABI-defined alignment of
larger types, such as floating-point doubles, on their
natural size-based boundary. The option -malign-power
instructs GC to follow the ABI-specified alignment
rules. GC defaults to the standard alignment defined
in the ABI.
-msoft-float
-mhard-float
Generate code that does not use (uses) the floating-
point register set. Software floating point emulation
is provided if you use the -msoft-float option, and pass
gcc-3.4.3 Last change: 2004-11-05 129
GNU GC(1)
the option to GC when linking.
-mmultiple
-mno-multiple
Generate code that uses (does not use) the load multiple
word instructions and the store multiple word
instructions. These instructions are generated by
default on POWER systems, and not generated on PowerPC
systems. Do not use -mmultiple on little endian PowerPC
systems, since those instructions do not work when the
processor is in little endian mode. The exceptions are
PC740 and PC750 which permit the instructions usage in
little endian mode.
-mstring
-mno-string
Generate code that uses (does not use) the load string
instructions and the store string word instructions to
save multiple registers and do small block moves. These
instructions are generated by default on POWER systems,
and not generated on PowerPC systems. Do not use
-mstring on little endian PowerPC systems, since those
instructions do not work when the processor is in little
endian mode. The exceptions are PC740 and PC750 which
permit the instructions usage in little endian mode.
-mupdate
-mno-update
Generate code that uses (does not use) the load or store
instructions that update the base register to the
address of the calculated memory location. These
instructions are generated by default. If you use
-mno-update, there is a small window between the time
that the stack pointer is updated and the address of the
previous frame is stored, which means code that walks
the stack frame across interrupts or signals may get
corrupted data.
-mfused-madd
-mno-fused-madd
Generate code that uses (does not use) the floating
point multiply and accumulate instructions. These
instructions are generated by default if hardware
floating is used.
-mno-bit-align
-mbit-align
On System V.4 and embedded PowerPC systems do not (do)
force structures and unions that contain bit-fields to
be aligned to the base type of the bit-field.
For example, by default a structure containing nothing
gcc-3.4.3 Last change: 2004-11-05 130
GNU GC(1)
but 8 "unsigned" bit-fields of length 1 would be aligned
to a 4 byte boundary and have a size of 4 bytes. By
using -mno-bit-align, the structure would be aligned to
a 1 byte boundary and be one byte in size.
-mno-strict-align
-mstrict-align
On System V.4 and embedded PowerPC systems do not (do)
assume that unaligned memory references will be handled
by the system.
-mrelocatable
-mno-relocatable
On embedded PowerPC systems generate code that allows
(does not allow) the program to be relocated to a
different address at runtime. If you use -mrelocatable
on any module, all objects linked together must be
compiled with -mrelocatable or -mrelocatable-lib.
-mrelocatable-lib
-mno-relocatable-lib
On embedded PowerPC systems generate code that allows
(does not allow) the program to be relocated to a
different address at runtime. Modules compiled with
-mrelocatable-lib can be linked with either modules
compiled without -mrelocatable and -mrelocatable-lib or
with modules compiled with the -mrelocatable options.
-mno-toc
-mtoc
On System V.4 and embedded PowerPC systems do not (do)
assume that register 2 contains a pointer to a global
area pointing to the addresses used in the program.
-mlittle
-mlittle-endian
On System V.4 and embedded PowerPC systems compile code
for the processor in little endian mode. The
-mlittle-endian option is the same as -mlittle.
-mbig
-mbig-endian
On System V.4 and embedded PowerPC systems compile code
for the processor in big endian mode. The -mbig-endian
option is the same as -mbig.
-mdynamic-no-pic
On Darwin and Mac OS X systems, compile code so that it
is not relocatable, but that its external references are
relocatable. The resulting code is suitable for
applications, but not shared libraries.
gcc-3.4.3 Last change: 2004-11-05 131
GNU GC(1)
-mprioritize-restricted-insns=priority
This option controls the priority that is assigned to
dispatch-slot restricted instructions during the second
scheduling pass. The argument priority takes the value
0/1/2 to assign no/highest/second-highest priority to
dispatch slot restricted instructions.
-msched-costly-dep=dependencetype
This option controls which dependences are considered
costly by the target during instruction scheduling. The
argument dependencetype takes one of the following
values: no: no dependence is costly, all: all
dependences are costly, truestoretoload: a true
dependence from store to load is costly, storetoload:
any dependence from store to load is costly, number: any
dependence which latency >= number is costly.
-minsert-sched-nops=scheme
This option controls which nop insertion scheme will be
used during the second scheduling pass. The argument
scheme takes one of the following values: no: Don't
insert nops. pad: Pad with nops any dispatch group
which has vacant issue slots, according to the
scheduler's grouping. regroupexact: Insert nops to
force costly dependent insns into separate groups.
Insert exactly as many nops as needed to force an insn
to a new group, according to the estimated processor
grouping. number: Insert nops to force costly dependent
insns into separate groups. Insert number nops to force
an insn to a new group.
-mcall-sysv
On System V.4 and embedded PowerPC systems compile code
using calling conventions that adheres to the March 1995
draft of the System V Application Binary Interface,
PowerPC processor supplement. This is the default
unless you configured GC using powerpc-*-eabiaix.
-mcall-sysv-eabi
Specify both -mcall-sysv and -meabi options.
-mcall-sysv-noeabi
Specify both -mcall-sysv and -mno-eabi options.
-mcall-solaris
On System V.4 and embedded PowerPC systems compile code
for the Solaris operating system.
-mcall-linux
On System V.4 and embedded PowerPC systems compile code
for the Linux-based GNU system.
gcc-3.4.3 Last change: 2004-11-05 132
GNU GC(1)
-mcall-gnu
On System V.4 and embedded PowerPC systems compile code
for the Hurd-based GNU system.
-mcall-netbsd
On System V.4 and embedded PowerPC systems compile code
for the NetBSD operating system.
-maix-struct-return
Return all structures in memory (as specified by the AIX
ABI).
-msvr4-struct-return
Return structures smaller than 8 bytes in registers (as
specified by the SVR4 ABI).
-mabi=altivec
Extend the current ABI with AltiVec ABI extensions.
This does not change the default ABI, instead it adds
the AltiVec ABI extensions to the current ABI.
-mabi=no-altivec
Disable AltiVec ABI extensions for the current ABI.
-mprototype
-mno-prototype
On System V.4 and embedded PowerPC systems assume that
all calls to variable argument functions are properly
prototyped. Otherwise, the compiler must insert an
instruction before every non prototyped call to set or
clear bit 6 of the condition code register (CR) to
indicate whether floating point values were passed in
the floating point registers in case the function takes
a variable arguments. With -mprototype, only calls to
prototyped variable argument functions will set or clear
the bit.
-msim
On embedded PowerPC systems, assume that the startup
module is called sim-crt0.o and that the standard C
libraries are libsim.a and libc.a. This is the default
for powerpc-*-eabisim. configurations.
-mmvme
On embedded PowerPC systems, assume that the startup
module is called crt0.o and the standard C libraries are
libmvme.a and libc.a.
-mads
On embedded PowerPC systems, assume that the startup
module is called crt0.o and the standard C libraries are
libads.a and libc.a.
gcc-3.4.3 Last change: 2004-11-05 133
GNU GC(1)
-myellowknife
On embedded PowerPC systems, assume that the startup
module is called crt0.o and the standard C libraries are
libyk.a and libc.a.
-mvxworks
On System V.4 and embedded PowerPC systems, specify that
you are compiling for a VxWorks system.
-mwindiss
Specify that you are compiling for the WindIS
simulation environment.
-memb
On embedded PowerPC systems, set the PCEMB bit in the
ELF flags header to indicate that eabi extended
relocations are used.
-meabi
-mno-eabi
On System V.4 and embedded PowerPC systems do (do not)
adhere to the Embedded Applications Binary Interface
(eabi) which is a set of modifications to the System V.4
specifications. Selecting -meabi means that the stack
is aligned to an 8 byte boundary, a function "eabi" is
called to from "main" to set up the eabi environment,
and the -msdata option can use both "r2" and "r13" to
point to two separate small data areas. Selecting
-mno-eabi means that the stack is aligned to a 16 byte
boundary, do not call an initialization function from
"main", and the -msdata option will only use "r13" to
point to a single small data area. The -meabi option is
on by default if you configured GC using one of the
powerpc*-*-eabi* options.
-msdata=eabi
On System V.4 and embedded PowerPC systems, put small
initialized "const" global and static data in the
.sdata2 section, which is pointed to by register "r2".
Put small initialized non-"const" global and static data
in the .sdata section, which is pointed to by register
"r13". Put small uninitialized global and static data
in the .sbss section, which is adjacent to the .sdata
section. The -msdata=eabi option is incompatible with
the -mrelocatable option. The -msdata=eabi option also
sets the -memb option.
-msdata=sysv
On System V.4 and embedded PowerPC systems, put small
global and static data in the .sdata section, which is
pointed to by register "r13". Put small uninitialized
global and static data in the .sbss section, which is
gcc-3.4.3 Last change: 2004-11-05 134
GNU GC(1)
adjacent to the .sdata section. The -msdata=sysv option
is incompatible with the -mrelocatable option.
-msdata=default
-msdata
On System V.4 and embedded PowerPC systems, if -meabi is
used, compile code the same as -msdata=eabi, otherwise
compile code the same as -msdata=sysv.
-msdata-data
On System V.4 and embedded PowerPC systems, put small
global and static data in the .sdata section. Put small
uninitialized global and static data in the .sbss
section. Do not use register "r13" to address small
data however. This is the default behavior unless other
-msdata options are used.
-msdata=none
-mno-sdata
On embedded PowerPC systems, put all initialized global
and static data in the .data section, and all
uninitialized data in the .bss section.
-G num
On embedded PowerPC systems, put global and static items
less than or equal to num bytes into the small data or
bss sections instead of the normal data or bss section.
By default, num is 8. The -G num switch is also passed
to the linker. All modules should be compiled with the
same -G num value.
-mregnames
-mno-regnames
On System V.4 and embedded PowerPC systems do (do not)
emit register names in the assembly language output
using symbolic forms.
-mlongcall
-mno-longcall
Default to making all function calls via pointers, so
that functions which reside further than 64 megabytes
(67,108,864 bytes) from the current location can be
called. This setting can be overridden by the
"shortcall" function attribute, or by "#pragma
longcall(0)".
Some linkers are capable of detecting out-of-range calls
and generating glue code on the fly. On these systems,
long calls are unnecessary and generate slower code. As
of this writing, the AIX linker can do this, as can the
GNU linker for PowerPC/64. It is planned to add this
feature to the GNU linker for 32-bit PowerPC systems as
gcc-3.4.3 Last change: 2004-11-05 135
GNU GC(1)
well.
On Mach-O (Darwin) systems, this option directs the
compiler emit to the glue for every direct call, and the
Darwin linker decides whether to use or discard it.
In the future, we may cause GC to ignore all longcall
specifications when the linker is known to generate
glue.
-pthread
Adds support for multithreading with the pthreads
library. This option sets flags for both the
preprocessor and linker.
Darwin Options
These options are defined for all architectures running the
Darwin operating system. They are useful for compatibility
with other Mac OS compilers.
-allload
Loads all members of static archive libraries. See man
ld(1) for more information.
-archerrorsfatal
Cause the errors having to do with files that have the
wrong architecture to be fatal.
-bindatload
Causes the output file to be marked such that the
dynamic linker will bind all undefined references when
the file is loaded or launched.
-bundle
Produce a Mach-o bundle format file. See man ld(1) for
more information.
-bundleloader executable
This specifies the executable that will be loading the
build output file being linked. See man ld(1) for more
information.
-allowableclient clientname
-archonly
-clientname
-compatibilityversion
-currentversion
-dependency-file
-dylibfile
-dylinkerinstallname
-dynamic
gcc-3.4.3 Last change: 2004-11-05 136
GNU GC(1)
-dynamiclib
-exportedsymbolslist
-filelist
-flatnamespace
-forcecpusubtypeAL
-forceflatnamespace
-headerpadmaxinstallnames
-imagebase
-init
-installname
-keepprivateexterns
-multimodule
-multiplydefined
-multiplydefinedunused
-noallload
-nofixprebinding
-nomultidefs
-noprebind
-noseglinkedit
-pagezerosize
-prebind
-prebindalltwolevelmodules
-privatebundle
-readonlyrelocs
-sectalign
-sectobjectsymbols
-whyload
-seg1addr
-sectcreate
-sectobjectsymbols
-sectorder
-segaddrtable
-segaddrtablefilename
-seglinkedit
-segprot
-segsreadonlyaddr
-segsreadwriteaddr
-singlemodule
-static
-sublibrary
-subumbrella
-twolevelnamespace
-umbrella
-undefined
-unexportedsymbolslist
-weakreferencemismatches
-whatsloaded
These options are available for Darwin linker. Darwin
linker man page describes them in detail.
MIPS Options
gcc-3.4.3 Last change: 2004-11-05 137
GNU GC(1)
-EB Generate big-endian code.
-EL Generate little-endian code. This is the default for
mips*el-*-* configurations.
-march=arch
Generate code that will run on arch, which can be the
name of a generic MIPS ISA, or the name of a particular
processor. The ISA names are: mips1, mips2, mips3,
mips4, mips32, mips32r2, and mips64. The processor
names are: 4kc, 4kp, 5kc, 20kc, m4k, r2000, r3000,
r3900, r4000, r4400, r4600, r4650, r6000, r8000, rm7000,
rm9000, orion, sb1, vr4100, vr4111, vr4120, vr4300,
vr5000, vr5400 and vr5500. The special value from-abi
selects the most compatible architecture for the
selected ABI (that is, mips1 for 32-bit ABIs and mips3
for 64-bit ABIs).
In processor names, a final 000 can be abbreviated as k
(for example, -march=r2k). Prefixes are optional, and
vr may be written r.
GC defines two macros based on the value of this
option. The first is MIPSARCH, which gives the name
of target architecture, as a string. The second has the
form MIPSARCHfoo, where foo is the capitalized value
of MIPSARCH. For example, -march=r2000 will set
MIPSARCH to "r2000" and define the macro
MIPSARCHR2000.
Note that the MIPSARCH macro uses the processor names
given above. In other words, it will have the full
prefix and will not abbreviate 000 as k. In the case of
from-abi, the macro names the resolved architecture
(either "mips1" or "mips3"). It names the default
architecture when no -march option is given.
-mtune=arch
Optimize for arch. Among other things, this option
controls the way instructions are scheduled, and the
perceived cost of arithmetic operations. The list of
arch values is the same as for -march.
When this option is not used, GC will optimize for the
processor specified by -march. By using -march and
-mtune together, it is possible to generate code that
will run on a family of processors, but optimize the
code for one particular member of that family.
-mtune defines the macros MIPSTUNE and MIPSTUNEfoo,
which work in the same way as the -march ones described
above.
gcc-3.4.3 Last change: 2004-11-05 138
GNU GC(1)
-mips1
Equivalent to -march=mips1.
-mips2
Equivalent to -march=mips2.
-mips3
Equivalent to -march=mips3.
-mips4
Equivalent to -march=mips4.
-mips32
Equivalent to -march=mips32.
-mips32r2
Equivalent to -march=mips32r2.
-mips64
Equivalent to -march=mips64.
-mips16
-mno-mips16
Use (do not use) the MIPS16 ISA.
-mabi=32
-mabi=o64
-mabi=n32
-mabi=64
-mabi=eabi
Generate code for the given ABI.
Note that the EABI has a 32-bit and a 64-bit variant.
GC normally generates 64-bit code when you select a
64-bit architecture, but you can use -mgp32 to get
32-bit code instead.
-mabicalls
-mno-abicalls
Generate (do not generate) SVR4-style position-
independent code. -mabicalls is the default for
SVR4-based systems.
-mxgot
-mno-xgot
Lift (do not lift) the usual restrictions on the size of
the global offset table.
GC normally uses a single instruction to load values
from the GOT. While this is relatively efficient, it
will only work if the GOT is smaller than about 64k.
Anything larger will cause the linker to report an error
gcc-3.4.3 Last change: 2004-11-05 139
GNU GC(1)
such as:
relocation truncated to fit: RMIPSGOT16 foobar
If this happens, you should recompile your code with
-mxgot. It should then work with very large GOTs,
although it will also be less efficient, since it will
take three instructions to fetch the value of a global
symbol.
Note that some linkers can create multiple GOTs. If you
have such a linker, you should only need to use -mxgot
when a single object file accesses more than 64k's worth
of GOT entries. Very few do.
These options have no effect unless GC is generating
position independent code.
-membedded-pic
-mno-embedded-pic
Generate (do not generate) position-independent code
suitable for some embedded systems. All calls are made
using PC relative addresses, and all data is addressed
using the $gp register. No more than 65536 bytes of
global data may be used. This requires GNU as and GNU
ld, which do most of the work.
-mgp32
Assume that general-purpose registers are 32 bits wide.
-mgp64
Assume that general-purpose registers are 64 bits wide.
-mfp32
Assume that floating-point registers are 32 bits wide.
-mfp64
Assume that floating-point registers are 64 bits wide.
-mhard-float
Use floating-point coprocessor instructions.
-msoft-float
Do not use floating-point coprocessor instructions.
Implement floating-point calculations using library
calls instead.
-msingle-float
Assume that the floating-point coprocessor only supports
single-precision operations.
-mdouble-float
gcc-3.4.3 Last change: 2004-11-05 140
GNU GC(1)
Assume that the floating-point coprocessor supports
double-precision operations. This is the default.
-mint64
Force "int" and "long" types to be 64 bits wide. See
-mlong32 for an explanation of the default and the way
that the pointer size is determined.
-mlong64
Force "long" types to be 64 bits wide. See -mlong32 for
an explanation of the default and the way that the
pointer size is determined.
-mlong32
Force "long", "int", and pointer types to be 32 bits
wide.
The default size of "int"s, "long"s and pointers depends
on the ABI. All the supported ABIs use 32-bit "int"s.
The n64 ABI uses 64-bit "long"s, as does the 64-bit
EABI; the others use 32-bit "long"s. Pointers are the
same size as "long"s, or the same size as integer
registers, whichever is smaller.
-G num
Put global and static items less than or equal to num
bytes into the small data or bss section instead of the
normal data or bss section. This allows the data to be
accessed using a single instruction.
All modules should be compiled with the same -G num
value.
-membedded-data
-mno-embedded-data
Allocate variables to the read-only data section first
if possible, then next in the small data section if
possible, otherwise in data. This gives slightly slower
code than the default, but reduces the amount of RAM
required when executing, and thus may be preferred for
some embedded systems.
-muninit-const-in-rodata
-mno-uninit-const-in-rodata
Put uninitialized "const" variables in the read-only
data section. This option is only meaningful in
conjunction with -membedded-data.
-msplit-addresses
-mno-split-addresses
Enable (disable) use of the "%hi()" and "%lo()"
assembler relocation operators. This option has been
gcc-3.4.3 Last change: 2004-11-05 141
GNU GC(1)
superceded by -mexplicit-relocs but is retained for
backwards compatibility.
-mexplicit-relocs
-mno-explicit-relocs
Use (do not use) assembler relocation operators when
dealing with symbolic addresses. The alternative,
selected by -mno-explicit-relocs, is to use assembler
macros instead.
-mexplicit-relocs is usually the default if GC was
configured to use an assembler that supports relocation
operators. However, there are two exceptions:
]o GC is not yet able to generate explicit relocations
for the combination of -mabi=64 and -mno-abicalls.
This will be addressed in a future release.
]o The combination of -mabicalls and
-fno-unit-at-a-time implies -mno-explicit-relocs
unless explicitly overridden. This is because, when
generating abicalls, the choice of relocation
depends on whether a symbol is local or global. In
some rare cases, GC will not be able to decide this
until the whole compilation unit has been read.
-mrnames
-mno-rnames
Generate (do not generate) code that refers to registers
using their software names. The default is -mno-rnames,
which tells GC to use hardware names like $4 instead of
software names like a0. The only assembler known to
support -rnames is the Algorithmics assembler.
-mcheck-zero-division
-mno-check-zero-division
Trap (do not trap) on integer division by zero. The
default is -mcheck-zero-division.
-mmemcpy
-mno-memcpy
Force (do not force) the use of "memcpy()" for non-
trivial block moves. The default is -mno-memcpy, which
allows GC to inline most constant-sized copies.
-mlong-calls
-mno-long-calls
Disable (do not disable) use of the "jal" instruction.
Calling functions using "jal" is more efficient but
requires the caller and callee to be in the same 256
megabyte segment.
gcc-3.4.3 Last change: 2004-11-05 142
GNU GC(1)
This option has no effect on abicalls code. The default
is -mno-long-calls.
-mmad
-mno-mad
Enable (disable) use of the "mad", "madu" and "mul"
instructions, as provided by the R4650 ISA.
-mfused-madd
-mno-fused-madd
Enable (disable) use of the floating point multiply-
accumulate instructions, when they are available. The
default is -mfused-madd.
When multiply-accumulate instructions are used, the
intermediate product is calculated to infinite precision
and is not subject to the FCSR Flush to Zero bit. This
may be undesirable in some circumstances.
-nocpp
Tell the MIPS assembler to not run its preprocessor over
user assembler files (with a .s suffix) when assembling
them.
-mfix-sb1
-mno-fix-sb1
Work around certain SB-1 CPU core errata. (This flag
currently works around the SB-1 revision 2 ``F1'' and
``F2'' floating point errata.)
-mflush-func=func
-mno-flush-func
Specifies the function to call to flush the I and D
caches, or to not call any such function. If called,
the function must take the same arguments as the common
"flushfunc()", that is, the address of the memory
range for which the cache is being flushed, the size of
the memory range, and the number 3 (to flush both
caches). The default depends on the target GC was
configured for, but commonly is either flushfunc or
cpuflush.
-mbranch-likely
-mno-branch-likely
Enable or disable use of Branch Likely instructions,
regardless of the default for the selected architecture.
By default, Branch Likely instructions may be generated
if they are supported by the selected architecture. An
exception is for the MIPS32 and MIPS64 architectures and
processors which implement those architectures; for
those, Branch Likely instructions will not be generated
by default because the MIPS32 and MIPS64 architectures
gcc-3.4.3 Last change: 2004-11-05 143
GNU GC(1)
specifically deprecate their use.
Intel 386 and AMD x86-64 Options
These -m options are defined for the i386 and x86-64 family
of computers:
-mtune=cpu-type
Tune to cpu-type everything applicable about the
generated code, except for the ABI and the set of
available instructions. The choices for cpu-type are:
i386
Original Intel's i386 CPU.
i486
Intel's i486 CPU. (No scheduling is implemented for
this chip.)
i586, pentium
Intel Pentium CPU with no MX support.
pentium-mmx
Intel PentiumMX CPU based on Pentium core with MX
instruction set support.
i686, pentiumpro
Intel PentiumPro CPU.
pentium2
Intel Pentium2 CPU based on PentiumPro core with MX
instruction set support.
pentium3, pentium3m
Intel Pentium3 CPU based on PentiumPro core with MX
and SE instruction set support.
pentium-m
Low power version of Intel Pentium3 CPU with MX,
SE and SE2 instruction set support. Used by
Centrino notebooks.
pentium4, pentium4m
Intel Pentium4 CPU with MX, SE and SE2
instruction set support.
prescott
Improved version of Intel Pentium4 CPU with MX,
SE, SE2 and SE3 instruction set support.
nocona
Improved version of Intel Pentium4 CPU with 64-bit
gcc-3.4.3 Last change: 2004-11-05 144
GNU GC(1)
extensions, MX, SE, SE2 and SE3 instruction set
support.
k6 AMD K6 CPU with MX instruction set support.
k6-2, k6-3
Improved versions of AMD K6 CPU with MX and 3dNOW!
instruction set support.
athlon, athlon-tbird
AMD Athlon CPU with MX, 3dNOW!, enhanced 3dNOW! and
SE prefetch instructions support.
athlon-4, athlon-xp, athlon-mp
Improved AMD Athlon CPU with MX, 3dNOW!, enhanced
3dNOW! and full SE instruction set support.
k8, opteron, athlon64, athlon-fx
AMD K8 core based CPUs with x86-64 instruction set
support. (This supersets MX, SE, SE2, 3dNOW!,
enhanced 3dNOW! and 64-bit instruction set
extensions.)
winchip-c6
IDT Winchip C6 CPU, dealt in same way as i486 with
additional MX instruction set support.
winchip2
IDT Winchip2 CPU, dealt in same way as i486 with
additional MX and 3dNOW! instruction set support.
c3 Via C3 CPU with MX and 3dNOW! instruction set
support. (No scheduling is implemented for this
chip.)
c3-2
Via C3-2 CPU with MX and SE instruction set
support. (No scheduling is implemented for this
chip.)
While picking a specific cpu-type will schedule things
appropriately for that particular chip, the compiler
will not generate any code that does not run on the i386
without the -march=cpu-type option being used.
-march=cpu-type
Generate instructions for the machine type cpu-type.
The choices for cpu-type are the same as for -mtune.
Moreover, specifying -march=cpu-type implies
-mtune=cpu-type.
-mcpu=cpu-type
gcc-3.4.3 Last change: 2004-11-05 145
GNU GC(1)
A deprecated synonym for -mtune.
-m386
-m486
-mpentium
-mpentiumpro
These options are synonyms for -mtune=i386, -mtune=i486,
-mtune=pentium, and -mtune=pentiumpro respectively.
These synonyms are deprecated.
-mfpmath=unit
Generate floating point arithmetics for selected unit
unit. The choices for unit are:
387 Use the standard 387 floating point coprocessor
present majority of chips and emulated otherwise.
Code compiled with this option will run almost
everywhere. The temporary results are computed in
80bit precision instead of precision specified by
the type resulting in slightly different results
compared to most of other chips. See -ffloat-store
for more detailed description.
This is the default choice for i386 compiler.
sse Use scalar floating point instructions present in
the SE instruction set. This instruction set is
supported by Pentium3 and newer chips, in the AMD
line by Athlon-4, Athlon-xp and Athlon-mp chips.
The earlier version of SE instruction set supports
only single precision arithmetics, thus the double
and extended precision arithmetics is still done
using 387. Later version, present only in Pentium4
and the future AMD x86-64 chips supports double
precision arithmetics too.
For i387 you need to use -march=cpu-type, -msse or
-msse2 switches to enable SE extensions and make
this option effective. For x86-64 compiler, these
extensions are enabled by default.
The resulting code should be considerably faster in
the majority of cases and avoid the numerical
instability problems of 387 code, but may break some
existing code that expects temporaries to be 80bit.
This is the default choice for the x86-64 compiler.
sse,387
Attempt to utilize both instruction sets at once.
This effectively double the amount of available
registers and on chips with separate execution units
gcc-3.4.3 Last change: 2004-11-05 146
GNU GC(1)
for 387 and SE the execution resources too. Use
this option with care, as it is still experimental,
because the GC register allocator does not model
separate functional units well resulting in instable
performance.
-masm=dialect
Output asm instructions using selected dialect.
Supported choices are intel or att (the default one).
-mieee-fp
-mno-ieee-fp
Control whether or not the compiler uses IE floating
point comparisons. These handle correctly the case
where the result of a comparison is unordered.
-msoft-float
Generate output containing library calls for floating
point. Warning: the requisite libraries are not part of
GC. Normally the facilities of the machine's usual C
compiler are used, but this can't be done directly in
cross-compilation. You must make your own arrangements
to provide suitable library functions for
cross-compilation.
On machines where a function returns floating point
results in the 80387 register stack, some floating point
opcodes may be emitted even if -msoft-float is used.
-mno-fp-ret-in-387
Do not use the FPU registers for return values of
functions.
The usual calling convention has functions return values
of types "float" and "double" in an FPU register, even
if there is no FPU. The idea is that the operating
system should emulate an FPU.
The option -mno-fp-ret-in-387 causes such values to be
returned in ordinary CPU registers instead.
-mno-fancy-math-387
Some 387 emulators do not support the "sin", "cos" and
"sqrt" instructions for the 387. Specify this option to
avoid generating those instructions. This option is the
default on FreeBSD, OpenBSD and NetBSD. This option is
overridden when -march indicates that the target cpu
will always have an FPU and so the instruction will not
need emulation. As of revision 2.6.1, these
instructions are not generated unless you also use the
-funsafe-math-optimizations switch.
gcc-3.4.3 Last change: 2004-11-05 147
GNU GC(1)
-malign-double
-mno-align-double
Control whether GC aligns "double", "long double", and
"long long" variables on a two word boundary or a one
word boundary. Aligning "double" variables on a two
word boundary will produce code that runs somewhat
faster on a Pentium at the expense of more memory.
Warning: if you use the -malign-double switch,
structures containing the above types will be aligned
differently than the published application binary
interface specifications for the 386 and will not be
binary compatible with structures in code compiled
without that switch.
-m96bit-long-double
-m128bit-long-double
These switches control the size of "long double" type.
The i386 application binary interface specifies the size
to be 96 bits, so -m96bit-long-double is the default in
32 bit mode.
Modern architectures (Pentium and newer) would prefer
"long double" to be aligned to an 8 or 16 byte boundary.
In arrays or structures conforming to the ABI, this
would not be possible. So specifying a
-m128bit-long-double will align "long double" to a 16
byte boundary by padding the "long double" with an
additional 32 bit zero.
In the x86-64 compiler, -m128bit-long-double is the
default choice as its ABI specifies that "long double"
is to be aligned on 16 byte boundary.
Notice that neither of these options enable any extra
precision over the x87 standard of 80 bits for a "long
double".
Warning: if you override the default value for your
target ABI, the structures and arrays containing "long
double" variables will change their size as well as
function calling convention for function taking "long
double" will be modified. Hence they will not be binary
compatible with arrays or structures in code compiled
without that switch.
-msvr3-shlib
-mno-svr3-shlib
Control whether GC places uninitialized local variables
into the "bss" or "data" segments. -msvr3-shlib places
them into "bss". These options are meaningful only on
System V Release 3.
gcc-3.4.3 Last change: 2004-11-05 148
GNU GC(1)
-mrtd
Use a different function-calling convention, in which
functions that take a fixed number of arguments return
with the "ret" num instruction, which pops their
arguments while returning. This saves one instruction
in the caller since there is no need to pop the
arguments there.
You can specify that an individual function is called
with this calling sequence with the function attribute
stdcall. You can also override the -mrtd option by
using the function attribute cdecl.
Warning: this calling convention is incompatible with
the one normally used on Unix, so you cannot use it if
you need to call libraries compiled with the Unix
compiler.
Also, you must provide function prototypes for all
functions that take variable numbers of arguments
(including "printf"); otherwise incorrect code will be
generated for calls to those functions.
In addition, seriously incorrect code will result if you
call a function with too many arguments. (Normally,
extra arguments are harmlessly ignored.)
-mregparm=num
Control how many registers are used to pass integer
arguments. By default, no registers are used to pass
arguments, and at most 3 registers can be used. You can
control this behavior for a specific function by using
the function attribute regparm.
Warning: if you use this switch, and num is nonzero,
then you must build all modules with the same value,
including any libraries. This includes the system
libraries and startup modules.
-mpreferred-stack-boundary=num
Attempt to keep the stack boundary aligned to a 2 raised
to num byte boundary. If -mpreferred-stack-boundary is
not specified, the default is 4 (16 bytes or 128 bits),
except when optimizing for code size (-Os), in which
case the default is the minimum correct alignment (4
bytes for x86, and 8 bytes for x86-64).
On Pentium and PentiumPro, "double" and "long double"
values should be aligned to an 8 byte boundary (see
-malign-double) or suffer significant run time
performance penalties. On Pentium I, the Streaming
SIMD Extension (SE) data type "m128" suffers similar
gcc-3.4.3 Last change: 2004-11-05 149
GNU GC(1)
penalties if it is not 16 byte aligned.
To ensure proper alignment of this values on the stack,
the stack boundary must be as aligned as that required
by any value stored on the stack. Further, every
function must be generated such that it keeps the stack
aligned. Thus calling a function compiled with a higher
preferred stack boundary from a function compiled with a
lower preferred stack boundary will most likely misalign
the stack. It is recommended that libraries that use
callbacks always use the default setting.
This extra alignment does consume extra stack space, and
generally increases code size. Code that is sensitive
to stack space usage, such as embedded systems and
operating system kernels, may want to reduce the
preferred alignment to -mpreferred-stack-boundary=2.
-mmmx
-mno-mmx
-msse
-mno-sse
-msse2
-mno-sse2
-msse3
-mno-sse3
-m3dnow
-mno-3dnow
These switches enable or disable the use of built-in
functions that allow direct access to the MX, SE,
SE2, SE3 and 3Dnow extensions of the instruction set.
To have SE/SE2 instructions generated automatically
from floating-point code, see -mfpmath=sse.
-mpush-args
-mno-push-args
Use PUSH operations to store outgoing parameters. This
method is shorter and usually equally fast as method
using SUB/MOV operations and is enabled by default. In
some cases disabling it may improve performance because
of improved scheduling and reduced dependencies.
-maccumulate-outgoing-args
If enabled, the maximum amount of space required for
outgoing arguments will be computed in the function
prologue. This is faster on most modern CPUs because of
reduced dependencies, improved scheduling and reduced
stack usage when preferred stack boundary is not equal
to 2. The drawback is a notable increase in code size.
This switch implies -mno-push-args.
gcc-3.4.3 Last change: 2004-11-05 150
GNU GC(1)
-mthreads
Support thread-safe exception handling on Mingw32. Code
that relies on thread-safe exception handling must
compile and link all code with the -mthreads option.
When compiling, -mthreads defines -DMT; when linking,
it links in a special thread helper library -lmingwthrd
which cleans up per thread exception handling data.
-mno-align-stringops
Do not align destination of inlined string operations.
This switch reduces code size and improves performance
in case the destination is already aligned, but GC
doesn't know about it.
-minline-all-stringops
By default GC inlines string operations only when
destination is known to be aligned at least to 4 byte
boundary. This enables more inlining, increase code
size, but may improve performance of code that depends
on fast memcpy, strlen and memset for short lengths.
-momit-leaf-frame-pointer
Don't keep the frame pointer in a register for leaf
functions. This avoids the instructions to save, set up
and restore frame pointers and makes an extra register
available in leaf functions. The option
-fomit-frame-pointer removes the frame pointer for all
functions which might make debugging harder.
-mtls-direct-seg-refs
-mno-tls-direct-seg-refs
Controls whether TLS variables may be accessed with
offsets from the TLS segment register (%gs for 32-bit,
%fs for 64-bit), or whether the thread base pointer must
be added. Whether or not this is legal depends on the
operating system, and whether it maps the segment to
cover the entire TLS area.
For systems that use GNU libc, the default is on.
These -m switches are supported in addition to the above on
AMD x86-64 processors in 64-bit environments.
-m32
-m64
Generate code for a 32-bit or 64-bit environment. The
32-bit environment sets int, long and pointer to 32 bits
and generates code that runs on any i386 system. The
64-bit environment sets int to 32 bits and long and
pointer to 64 bits and generates code for AMD's x86-64
architecture.
gcc-3.4.3 Last change: 2004-11-05 151
GNU GC(1)
-mno-red-zone
Do not use a so called red zone for x86-64 code. The
red zone is mandated by the x86-64 ABI, it is a 128-byte
area beyond the location of the stack pointer that will
not be modified by signal or interrupt handlers and
therefore can be used for temporary data without
adjusting the stack pointer. The flag -mno-red-zone
disables this red zone.
-mcmodel=small
Generate code for the small code model: the program and
its symbols must be linked in the lower 2 GB of the
address space. Pointers are 64 bits. Programs can be
statically or dynamically linked. This is the default
code model.
-mcmodel=kernel
Generate code for the kernel code model. The kernel
runs in the negative 2 GB of the address space. This
model has to be used for Linux kernel code.
-mcmodel=medium
Generate code for the medium model: The program is
linked in the lower 2 GB of the address space but
symbols can be located anywhere in the address space.
Programs can be statically or dynamically linked, but
building of shared libraries are not supported with the
medium model.
-mcmodel=large
Generate code for the large model: This model makes no
assumptions about addresses and sizes of sections.
Currently GC does not implement this model.
HPA Options
These -m options are defined for the HPA family of
computers:
-march=architecture-type
Generate code for the specified architecture. The
choices for architecture-type are 1.0 for PA 1.0, 1.1
for PA 1.1, and 2.0 for PA 2.0 processors. Refer to
/usr/lib/sched.models on an HP-UX system to determine
the proper architecture option for your machine. Code
compiled for lower numbered architectures will run on
higher numbered architectures, but not the other way
around.
PA 2.0 support currently requires gas snapshot 19990413
or later. The next release of binutils (current is
2.9.1) will probably contain PA 2.0 support.
gcc-3.4.3 Last change: 2004-11-05 152
GNU GC(1)
-mpa-risc-1-0
-mpa-risc-1-1
-mpa-risc-2-0
Synonyms for -march=1.0, -march=1.1, and -march=2.0
respectively.
-mbig-switch
Generate code suitable for big switch tables. Use this
option only if the assembler/linker complain about out
of range branches within a switch table.
-mjump-in-delay
Fill delay slots of function calls with unconditional
jump instructions by modifying the return pointer for
the function call to be the target of the conditional
jump.
-mdisable-fpregs
Prevent floating point registers from being used in any
manner. This is necessary for compiling kernels which
perform lazy context switching of floating point
registers. If you use this option and attempt to
perform floating point operations, the compiler will
abort.
-mdisable-indexing
Prevent the compiler from using indexing address modes.
This avoids some rather obscure problems when compiling
MIG generated code under MACH.
-mno-space-regs
Generate code that assumes the target has no space
registers. This allows GC to generate faster indirect
calls and use unscaled index address modes.
Such code is suitable for level 0 PA systems and
kernels.
-mfast-indirect-calls
Generate code that assumes calls never cross space
boundaries. This allows GC to emit code which performs
faster indirect calls.
This option will not work in the presence of shared
libraries or nested functions.
-mlong-load-store
Generate 3-instruction load and store sequences as
sometimes required by the HP-UX 10 linker. This is
equivalent to the ]k option to the HP compilers.
-mportable-runtime
gcc-3.4.3 Last change: 2004-11-05 153
GNU GC(1)
Use the portable calling conventions proposed by HP for
ELF systems.
-mgas
Enable the use of assembler directives only GAS
understands.
-mschedule=cpu-type
Schedule code according to the constraints for the
machine type cpu-type. The choices for cpu-type are 700
7100, 7100LC, 7200, 7300 and 8000. Refer to
/usr/lib/sched.models on an HP-UX system to determine
the proper scheduling option for your machine. The
default scheduling is 8000.
-mlinker-opt
Enable the optimization pass in the HP-UX linker. Note
this makes symbolic debugging impossible. It also
triggers a bug in the HP-UX 8 and HP-UX 9 linkers in
which they give bogus error messages when linking some
programs.
-msoft-float
Generate output containing library calls for floating
point. Warning: the requisite libraries are not
available for all HPA targets. Normally the facilities
of the machine's usual C compiler are used, but this
cannot be done directly in cross-compilation. You must
make your own arrangements to provide suitable library
functions for cross-compilation. The embedded target
hppa1.1-*-pro does provide software floating point
support.
-msoft-float changes the calling convention in the
output file; therefore, it is only useful if you compile
all of a program with this option. In particular, you
need to compile libgcc.a, the library that comes with
GC, with -msoft-float in order for this to work.
-msio
Generate the predefine, "SIO", for server IO. The
default is -mwsio. This generates the predefines,
"hp9000s700", "hp9000s700" and "WSIO", for
workstation IO. These options are available under HP-UX
and HI-UX.
-mgnu-ld
Use GNU ld specific options. This passes -shared to ld
when building a shared library. It is the default when
GC is configured, explicitly or implicitly, with the
GNU linker. This option does not have any affect on
which ld is called, it only changes what parameters are
gcc-3.4.3 Last change: 2004-11-05 154
GNU GC(1)
passed to that ld. The ld that is called is determined
by the --with-ld configure option, GC's program search
path, and finally by the user's PATH. The linker used
by GC can be printed using which `gcc
-print-prog-name=ld`.
-mhp-ld
Use HP ld specific options. This passes -b to ld when
building a shared library and passes ]Accept
TypeMismatch to ld on all links. It is the default when
GC is configured, explicitly or implicitly, with the HP
linker. This option does not have any affect on which
ld is called, it only changes what parameters are passed
to that ld. The ld that is called is determined by the
--with-ld configure option, GC's program search path,
and finally by the user's PATH. The linker used by GC
can be printed using which `gcc -print-prog-name=ld`.
-mlong-calls
Generate code that uses long call sequences. This
ensures that a call is always able to reach linker
generated stubs. The default is to generate long calls
only when the distance from the call site to the
beginning of the function or translation unit, as the
case may be, exceeds a predefined limit set by the
branch type being used. The limits for normal calls are
7,600,000 and 240,000 bytes, respectively for the PA 2.0
and PA 1.X architectures. Sibcalls are always limited
at 240,000 bytes.
Distances are measured from the beginning of functions
when using the -ffunction-sections option, or when using
the -mgas and -mno-portable-runtime options together
under HP-UX with the SOM linker.
It is normally not desirable to use this option as it
will degrade performance. However, it may be useful in
large applications, particularly when partial linking is
used to build the application.
The types of long calls used depends on the capabilities
of the assembler and linker, and the type of code being
generated. The impact on systems that support long
absolute calls, and long pic symbol-difference or pc-
relative calls should be relatively small. However, an
indirect call is used on 32-bit ELF systems in pic code
and it is quite long.
-nolibdld
Suppress the generation of link options to search
libdld.sl when the -static option is specified on HP-UX
10 and later.
gcc-3.4.3 Last change: 2004-11-05 155
GNU GC(1)
-static
The HP-UX implementation of setlocale in libc has a
dependency on libdld.sl. There isn't an archive version
of libdld.sl. Thus, when the -static option is
specified, special link options are needed to resolve
this dependency.
On HP-UX 10 and later, the GC driver adds the necessary
options to link with libdld.sl when the -static option
is specified. This causes the resulting binary to be
dynamic. On the 64-bit port, the linkers generate
dynamic binaries by default in any case. The -nolibdld
option can be used to prevent the GC driver from adding
these link options.
-threads
Add support for multithreading with the dce thread
library under HP-UX. This option sets flags for both
the preprocessor and linker.
Intel 960 Options
These -m options are defined for the Intel 960
implementations:
-mcpu-type
Assume the defaults for the machine type cpu-type for
some of the other options, including instruction
scheduling, floating point support, and addressing
modes. The choices for cpu-type are ka, kb, mc, ca, cf,
sa, and sb. The default is kb.
-mnumerics
-msoft-float
The -mnumerics option indicates that the processor does
support floating-point instructions. The -msoft-float
option indicates that floating-point support should not
be assumed.
-mleaf-procedures
-mno-leaf-procedures
Do (or do not) attempt to alter leaf procedures to be
callable with the "bal" instruction as well as "call".
This will result in more efficient code for explicit
calls when the "bal" instruction can be substituted by
the assembler or linker, but less efficient code in
other cases, such as calls via function pointers, or
using a linker that doesn't support this optimization.
-mtail-call
-mno-tail-call
Do (or do not) make additional attempts (beyond those of
gcc-3.4.3 Last change: 2004-11-05 156
GNU GC(1)
the machine-independent portions of the compiler) to
optimize tail-recursive calls into branches. You may
not want to do this because the detection of cases where
this is not valid is not totally complete. The default
is -mno-tail-call.
-mcomplex-addr
-mno-complex-addr
Assume (or do not assume) that the use of a complex
addressing mode is a win on this implementation of the
i960. Complex addressing modes may not be worthwhile on
the K-series, but they definitely are on the C-series.
The default is currently -mcomplex-addr for all
processors except the CB and C.
-mcode-align
-mno-code-align
Align code to 8-byte boundaries for faster fetching (or
don't bother). Currently turned on by default for
C-series implementations only.
-mic-compat
-mic2.0-compat
-mic3.0-compat
Enable compatibility with iC960 v2.0 or v3.0.
-masm-compat
-mintel-asm
Enable compatibility with the iC960 assembler.
-mstrict-align
-mno-strict-align
Do not permit (do permit) unaligned accesses.
-mold-align
Enable structure-alignment compatibility with Intel's
gcc release version 1.3 (based on gcc 1.37). This
option implies -mstrict-align.
-mlong-double-64
Implement type long double as 64-bit floating point
numbers. Without the option long double is implemented
by 80-bit floating point numbers. The only reason we
have it because there is no 128-bit long double support
in fp-bit.c yet. So it is only useful for people using
soft-float targets. Otherwise, we should recommend
against use of it.
DEC Alpha Options
These -m options are defined for the DEC Alpha
implementations:
gcc-3.4.3 Last change: 2004-11-05 157
GNU GC(1)
-mno-soft-float
-msoft-float
Use (do not use) the hardware floating-point
instructions for floating-point operations. When
-msoft-float is specified, functions in libgcc.a will be
used to perform floating-point operations. Unless they
are replaced by routines that emulate the floating-point
operations, or compiled in such a way as to call such
emulations routines, these routines will issue
floating-point operations. If you are compiling for an
Alpha without floating-point operations, you must ensure
that the library is built so as not to call them.
Note that Alpha implementations without floating-point
operations are required to have floating-point
registers.
-mfp-reg
-mno-fp-regs
Generate code that uses (does not use) the floating-
point register set. -mno-fp-regs implies -msoft-float.
If the floating-point register set is not used, floating
point operands are passed in integer registers as if
they were integers and floating-point results are passed
in $0 instead of $f0. This is a non-standard calling
sequence, so any function with a floating-point argument
or return value called by code compiled with
-mno-fp-regs must also be compiled with that option.
A typical use of this option is building a kernel that
does not use, and hence need not save and restore, any
floating-point registers.
-mieee
The Alpha architecture implements floating-point
hardware optimized for maximum performance. It is
mostly compliant with the IE floating point standard.
However, for full compliance, software assistance is
required. This option generates code fully IE
compliant code except that the inexact-flag is not
maintained (see below). If this option is turned on,
the preprocessor macro "IEFP" is defined during
compilation. The resulting code is less efficient but
is able to correctly support denormalized numbers and
exceptional IE values such as not-a-number and
plus/minus infinity. Other Alpha compilers call this
option -ieeewithnoinexact.
-mieee-with-inexact
This is like -mieee except the generated code also
maintains the IE inexact-flag. Turning on this option
causes the generated code to implement fully-compliant
gcc-3.4.3 Last change: 2004-11-05 158
GNU GC(1)
IE math. In addition to "IEFP", "IEFPEXACT"
is defined as a preprocessor macro. On some Alpha
implementations the resulting code may execute
significantly slower than the code generated by default.
Since there is very little code that depends on the
inexact-flag, you should normally not specify this
option. Other Alpha compilers call this option
-ieeewithinexact.
-mfp-trap-mode=trap-mode
This option controls what floating-point related traps
are enabled. Other Alpha compilers call this option
-fptm trap-mode. The trap mode can be set to one of
four values:
n This is the default (normal) setting. The only
traps that are enabled are the ones that cannot be
disabled in software (e.g., division by zero trap).
u In addition to the traps enabled by n, underflow
traps are enabled as well.
su Like su, but the instructions are marked to be safe
for software completion (see Alpha architecture
manual for details).
sui Like su, but inexact traps are enabled as well.
-mfp-rounding-mode=rounding-mode
Selects the IE rounding mode. Other Alpha compilers
call this option -fprm rounding-mode. The rounding-mode
can be one of:
n Normal IE rounding mode. Floating point numbers
are rounded towards the nearest machine number or
towards the even machine number in case of a tie.
m Round towards minus infinity.
c Chopped rounding mode. Floating point numbers are
rounded towards zero.
d Dynamic rounding mode. A field in the floating
point control register (fpcr, see Alpha architecture
reference manual) controls the rounding mode in
effect. The C library initializes this register for
rounding towards plus infinity. Thus, unless your
program modifies the fpcr, d corresponds to round
towards plus infinity.
-mtrap-precision=trap-precision
In the Alpha architecture, floating point traps are
gcc-3.4.3 Last change: 2004-11-05 159
GNU GC(1)
imprecise. This means without software assistance it is
impossible to recover from a floating trap and program
execution normally needs to be terminated. GC can
generate code that can assist operating system trap
handlers in determining the exact location that caused a
floating point trap. Depending on the requirements of
an application, different levels of precisions can be
selected:
p Program precision. This option is the default and
means a trap handler can only identify which program
caused a floating point exception.
f Function precision. The trap handler can determine
the function that caused a floating point exception.
i Instruction precision. The trap handler can
determine the exact instruction that caused a
floating point exception.
Other Alpha compilers provide the equivalent options
called -scopesafe and -resumptionsafe.
-mieee-conformant
This option marks the generated code as IE conformant.
You must not use this option unless you also specify
-mtrap-precision=i and either -mfp-trap-mode=su or
-mfp-trap-mode=sui. Its only effect is to emit the line
.eflag 48 in the function prologue of the generated
assembly file. Under DEC Unix, this has the effect that
IE-conformant math library routines will be linked in.
-mbuild-constants
Normally GC examines a 32- or 64-bit integer constant
to see if it can construct it from smaller constants in
two or three instructions. If it cannot, it will output
the constant as a literal and generate code to load it
from the data segment at runtime.
Use this option to require GC to construct all integer
constants using code, even if it takes more instructions
(the maximum is six).
You would typically use this option to build a shared
library dynamic loader. Itself a shared library, it
must relocate itself in memory before it can find the
variables and constants in its own data segment.
-malpha-as
-mgas
Select whether to generate code to be assembled by the
vendor-supplied assembler (-malpha-as) or by the GNU
gcc-3.4.3 Last change: 2004-11-05 160
GNU GC(1)
assembler -mgas.
-mbwx
-mno-bwx
-mcix
-mno-cix
-mfix
-mno-fix
-mmax
-mno-max
Indicate whether GC should generate code to use the
optional BWX, CIX, FIX and MAX instruction sets. The
default is to use the instruction sets supported by the
CPU type specified via -mcpu= option or that of the CPU
on which GC was built if none was specified.
-mfloat-vax
-mfloat-ieee
Generate code that uses (does not use) VAX F and G
floating point arithmetic instead of IE single and
double precision.
-mexplicit-relocs
-mno-explicit-relocs
Older Alpha assemblers provided no way to generate
symbol relocations except via assembler macros. Use of
these macros does not allow optimal instruction
scheduling. GNU binutils as of version 2.12 supports a
new syntax that allows the compiler to explicitly mark
which relocations should apply to which instructions.
This option is mostly useful for debugging, as GC
detects the capabilities of the assembler when it is
built and sets the default accordingly.
-msmall-data
-mlarge-data
When -mexplicit-relocs is in effect, static data is
accessed via gp-relative relocations. When -msmall-data
is used, objects 8 bytes long or smaller are placed in a
small data area (the ".sdata" and ".sbss" sections) and
are accessed via 16-bit relocations off of the $gp
register. This limits the size of the small data area
to 64KB, but allows the variables to be directly
accessed via a single instruction.
The default is -mlarge-data. With this option the data
area is limited to just below 2GB. Programs that
require more than 2GB of data must use "malloc" or
"mmap" to allocate the data in the heap instead of in
the program's data segment.
When generating code for shared libraries, -fpic implies
gcc-3.4.3 Last change: 2004-11-05 161
GNU GC(1)
-msmall-data and -fPIC implies -mlarge-data.
-msmall-text
-mlarge-text
When -msmall-text is used, the compiler assumes that the
code of the entire program (or shared library) fits in
4MB, and is thus reachable with a branch instruction.
When -msmall-data is used, the compiler can assume that
all local symbols share the same $gp value, and thus
reduce the number of instructions required for a
function call from 4 to 1.
The default is -mlarge-text.
-mcpu=cputype
Set the instruction set and instruction scheduling
parameters for machine type cputype. You can specify
either the EV style name or the corresponding chip
number. GC supports scheduling parameters for the EV4,
EV5 and EV6 family of processors and will choose the
default values for the instruction set from the
processor you specify. If you do not specify a
processor type, GC will default to the processor on
which the compiler was built.
Supported values for cputype are
ev4
ev45
21064
Schedules as an EV4 and has no instruction set
extensions.
ev5
21164
Schedules as an EV5 and has no instruction set
extensions.
ev56
21164a
Schedules as an EV5 and supports the BWX extension.
pca56
21164pc
21164PC
Schedules as an EV5 and supports the BWX and MAX
extensions.
ev6
21264
Schedules as an EV6 and supports the BWX, FIX, and
MAX extensions.
gcc-3.4.3 Last change: 2004-11-05 162
GNU GC(1)
ev67
21264a
Schedules as an EV6 and supports the BWX, CIX, FIX,
and MAX extensions.
-mtune=cputype
Set only the instruction scheduling parameters for
machine type cputype. The instruction set is not
changed.
-mmemory-latency=time
Sets the latency the scheduler should assume for typical
memory references as seen by the application. This
number is highly dependent on the memory access patterns
used by the application and the size of the external
cache on the machine.
Valid options for time are
number
A decimal number representing clock cycles.
L1
L2
L3
main
The compiler contains estimates of the number of
clock cycles for ``typical'' EV4 & EV5 hardware for
the Level 1, 2 & 3 caches (also called Dcache,
Scache, and Bcache), as well as to main memory.
Note that L3 is only valid for EV5.
DEC Alpha/VMS Options
These -m options are defined for the DEC Alpha/VMS
implementations:
-mvms-return-codes
Return VMS condition codes from main. The default is to
return POSIX style condition (e.g. error) codes.
H8/300 Options
These -m options are defined for the H8/300 implementations:
-mrelax
Shorten some address references at link time, when
possible; uses the linker option -relax.
-mh Generate code for the H8/300H.
-ms Generate code for the H8S.
gcc-3.4.3 Last change: 2004-11-05 163
GNU GC(1)
-mn Generate code for the H8S and H8/300H in the normal
mode. This switch must be used either with -mh or -ms.
-ms2600
Generate code for the H8S/2600. This switch must be
used with -ms.
-mint32
Make "int" data 32 bits by default.
-malign-300
On the H8/300H and H8S, use the same alignment rules as
for the H8/300. The default for the H8/300H and H8S is
to align longs and floats on 4 byte boundaries.
-malign-300 causes them to be aligned on 2 byte
boundaries. This option has no effect on the H8/300.
SH Options
These -m options are defined for the SH implementations:
-m1 Generate code for the SH1.
-m2 Generate code for the SH2.
-m2e
Generate code for the SH2e.
-m3 Generate code for the SH3.
-m3e
Generate code for the SH3e.
-m4-nofpu
Generate code for the SH4 without a floating-point unit.
-m4-single-only
Generate code for the SH4 with a floating-point unit
that only supports single-precision arithmetic.
-m4-single
Generate code for the SH4 assuming the floating-point
unit is in single-precision mode by default.
-m4 Generate code for the SH4.
-mb Compile code for the processor in big endian mode.
-ml Compile code for the processor in little endian mode.
-mdalign
Align doubles at 64-bit boundaries. Note that this
gcc-3.4.3 Last change: 2004-11-05 164
GNU GC(1)
changes the calling conventions, and thus some functions
from the standard C library will not work unless you
recompile it first with -mdalign.
-mrelax
Shorten some address references at link time, when
possible; uses the linker option -relax.
-mbigtable
Use 32-bit offsets in "switch" tables. The default is
to use 16-bit offsets.
-mfmovd
Enable the use of the instruction "fmovd".
-mhitachi
Comply with the calling conventions defined by Renesas.
-mnomacsave
Mark the "MAC" register as call-clobbered, even if
-mhitachi is given.
-mieee
Increase IE-compliance of floating-point code.
-misize
Dump instruction size and location in the assembly code.
-mpadstruct
This option is deprecated. It pads structures to
multiple of 4 bytes, which is incompatible with the SH
ABI.
-mspace
Optimize for space instead of speed. Implied by -Os.
-mprefergot
When generating position-independent code, emit function
calls using the Global Offset Table instead of the
Procedure Linkage Table.
-musermode
Generate a library function call to invalidate
instruction cache entries, after fixing up a trampoline.
This library function call doesn't assume it can write
to the whole memory address space. This is the default
when the target is "sh-*-linux*".
Options for System V
These additional options are available on System V Release 4
for compatibility with other compilers on those systems:
gcc-3.4.3 Last change: 2004-11-05 165
GNU GC(1)
-G Create a shared object. It is recommended that
-symbolic or -shared be used instead.
-Qy Identify the versions of each tool used by the compiler,
in a ".ident" assembler directive in the output.
-Qn Refrain from adding ".ident" directives to the output
file (this is the default).
-YP,dirs
Search the directories dirs, and no others, for
libraries specified with -l.
-Ym,dir
Look in the directory dir to find the M4 preprocessor.
The assembler uses this option.
TMS320C3x/C4x Options
These -m options are defined for TMS320C3x/C4x
implementations:
-mcpu=cputype
Set the instruction set, register set, and instruction
scheduling parameters for machine type cputype.
Supported values for cputype are c30, c31, c32, c40,
and c44. The default is c40 to generate code for the
TMS320C40.
-mbig-memory
-mbig
-msmall-memory
-msmall
Generates code for the big or small memory model. The
small memory model assumed that all data fits into one
64K word page. At run-time the data page (DP) register
must be set to point to the 64K page containing the .bss
and .data program sections. The big memory model is the
default and requires reloading of the DP register for
every direct memory access.
-mbk
-mno-bk
Allow (disallow) allocation of general integer operands
into the block count register BK.
-mdb
-mno-db
Enable (disable) generation of code using decrement and
branch, DBcond(D), instructions. This is enabled by
default for the C4x. To be on the safe side, this is
disabled for the C3x, since the maximum iteration count
gcc-3.4.3 Last change: 2004-11-05 166
GNU GC(1)
on the C3x is 2^{23 ] 1} (but who iterates loops more
than 2^{23} times on the C3x?). Note that GC will try
to reverse a loop so that it can utilize the decrement
and branch instruction, but will give up if there is
more than one memory reference in the loop. Thus a loop
where the loop counter is decremented can generate
slightly more efficient code, in cases where the RPTB
instruction cannot be utilized.
-mdp-isr-reload
-mparanoid
Force the DP register to be saved on entry to an
interrupt service routine (ISR), reloaded to point to
the data section, and restored on exit from the ISR.
This should not be required unless someone has violated
the small memory model by modifying the DP register, say
within an object library.
-mmpyi
-mno-mpyi
For the C3x use the 24-bit MPYI instruction for integer
multiplies instead of a library call to guarantee 32-bit
results. Note that if one of the operands is a
constant, then the multiplication will be performed
using shifts and adds. If the -mmpyi option is not
specified for the C3x, then squaring operations are
performed inline instead of a library call.
-mfast-fix
-mno-fast-fix
The C3x/C4x FIX instruction to convert a floating point
value to an integer value chooses the nearest integer
less than or equal to the floating point value rather
than to the nearest integer. Thus if the floating point
number is negative, the result will be incorrectly
truncated an additional code is necessary to detect and
correct this case. This option can be used to disable
generation of the additional code required to correct
the result.
-mrptb
-mno-rptb
Enable (disable) generation of repeat block sequences
using the RPTB instruction for zero overhead looping.
The RPTB construct is only used for innermost loops that
do not call functions or jump across the loop
boundaries. There is no advantage having nested RPTB
loops due to the overhead required to save and restore
the RC, RS, and RE registers. This is enabled by
default with -O2.
-mrpts=count
gcc-3.4.3 Last change: 2004-11-05 167
GNU GC(1)
-mno-rpts
Enable (disable) the use of the single instruction
repeat instruction RPTS. If a repeat block contains a
single instruction, and the loop count can be guaranteed
to be less than the value count, GC will emit a RPTS
instruction instead of a RPTB. If no value is
specified, then a RPTS will be emitted even if the loop
count cannot be determined at compile time. Note that
the repeated instruction following RPTS does not have to
be reloaded from memory each iteration, thus freeing up
the CPU buses for operands. However, since interrupts
are blocked by this instruction, it is disabled by
default.
-mloop-unsigned
-mno-loop-unsigned
The maximum iteration count when using RPTS and RPTB
(and DB on the C40) is 2^{31 ] 1} since these
instructions test if the iteration count is negative to
terminate the loop. If the iteration count is unsigned
there is a possibility than the 2^{31 ] 1} maximum
iteration count may be exceeded. This switch allows an
unsigned iteration count.
-mti
Try to emit an assembler syntax that the TI assembler
(asm30) is happy with. This also enforces compatibility
with the API employed by the TI C3x C compiler. For
example, long doubles are passed as structures rather
than in floating point registers.
-mregparm
-mmemparm
Generate code that uses registers (stack) for passing
arguments to functions. By default, arguments are
passed in registers where possible rather than by
pushing arguments on to the stack.
-mparallel-insns
-mno-parallel-insns
Allow the generation of parallel instructions. This is
enabled by default with -O2.
-mparallel-mpy
-mno-parallel-mpy
Allow the generation of MPYAD and MPYSUB parallel
instructions, provided -mparallel-insns is also
specified. These instructions have tight register
constraints which can pessimize the code generation of
large functions.
gcc-3.4.3 Last change: 2004-11-05 168
GNU GC(1)
V850 Options
These -m options are defined for V850 implementations:
-mlong-calls
-mno-long-calls
Treat all calls as being far away (near). If calls are
assumed to be far away, the compiler will always load
the functions address up into a register, and call
indirect through the pointer.
-mno-ep
-mep
Do not optimize (do optimize) basic blocks that use the
same index pointer 4 or more times to copy pointer into
the "ep" register, and use the shorter "sld" and "sst"
instructions. The -mep option is on by default if you
optimize.
-mno-prolog-function
-mprolog-function
Do not use (do use) external functions to save and
restore registers at the prologue and epilogue of a
function. The external functions are slower, but use
less code space if more than one function saves the same
number of registers. The -mprolog-function option is on
by default if you optimize.
-mspace
Try to make the code as small as possible. At present,
this just turns on the -mep and -mprolog-function
options.
-mtda=n
Put static or global variables whose size is n bytes or
less into the tiny data area that register "ep" points
to. The tiny data area can hold up to 256 bytes in
total (128 bytes for byte references).
-msda=n
Put static or global variables whose size is n bytes or
less into the small data area that register "gp" points
to. The small data area can hold up to 64 kilobytes.
-mzda=n
Put static or global variables whose size is n bytes or
less into the first 32 kilobytes of memory.
-mv850
Specify that the target processor is the V850.
-mbig-switch
gcc-3.4.3 Last change: 2004-11-05 169
GNU GC(1)
Generate code suitable for big switch tables. Use this
option only if the assembler/linker complain about out
of range branches within a switch table.
-mapp-regs
This option will cause r2 and r5 to be used in the code
generated by the compiler. This setting is the default.
-mno-app-regs
This option will cause r2 and r5 to be treated as fixed
registers.
-mv850e1
Specify that the target processor is the V850E1. The
preprocessor constants v850e1 and v850e will be
defined if this option is used.
-mv850e
Specify that the target processor is the V850E. The
preprocessor constant v850e will be defined if this
option is used.
If neither -mv850 nor -mv850e nor -mv850e1 are defined
then a default target processor will be chosen and the
relevant v850* preprocessor constant will be
defined.
The preprocessor constants v850 and v851 are
always defined, regardless of which processor variant is
the target.
-mdisable-callt
This option will suppress generation of the CALT
instruction for the v850e and v850e1 flavors of the v850
architecture. The default is -mno-disable-callt which
allows the CALT instruction to be used.
ARC Options
These options are defined for ARC implementations:
-EL Compile code for little endian mode. This is the
default.
-EB Compile code for big endian mode.
-mmangle-cpu
Prepend the name of the cpu to all public symbol names.
In multiple-processor systems, there are many ARC
variants with different instruction and register set
characteristics. This flag prevents code compiled for
one cpu to be linked with code compiled for another. No
gcc-3.4.3 Last change: 2004-11-05 170
GNU GC(1)
facility exists for handling variants that are ``almost
identical''. This is an all or nothing option.
-mcpu=cpu
Compile code for ARC variant cpu. Which variants are
supported depend on the configuration. All variants
support -mcpu=base, this is the default.
-mtext=text-section
-mdata=data-section
-mrodata=readonly-data-section
Put functions, data, and readonly data in text-section,
data-section, and readonly-data-section respectively by
default. This can be overridden with the "section"
attribute.
NS32K Options
These are the -m options defined for the 32000 series. The
default values for these options depends on which style of
32000 was selected when the compiler was configured; the
defaults for the most common choices are given below.
-m32032
-m32032
Generate output for a 32032. This is the default when
the compiler is configured for 32032 and 32016 based
systems.
-m32332
-m32332
Generate output for a 32332. This is the default when
the compiler is configured for 32332-based systems.
-m32532
-m32532
Generate output for a 32532. This is the default when
the compiler is configured for 32532-based systems.
-m32081
Generate output containing 32081 instructions for
floating point. This is the default for all systems.
-m32381
Generate output containing 32381 instructions for
floating point. This also implies -m32081. The 32381
is only compatible with the 32332 and 32532 cpus. This
is the default for the pc532-netbsd configuration.
-mmulti-add
Try and generate multiply-add floating point
instructions "polyF" and "dotF". This option is only
gcc-3.4.3 Last change: 2004-11-05 171
GNU GC(1)
available if the -m32381 option is in effect. Using
these instructions requires changes to register
allocation which generally has a negative impact on
performance. This option should only be enabled when
compiling code particularly likely to make heavy use of
multiply-add instructions.
-mnomulti-add
Do not try and generate multiply-add floating point
instructions "polyF" and "dotF". This is the default on
all platforms.
-msoft-float
Generate output containing library calls for floating
point. Warning: the requisite libraries may not be
available.
-mieee-compare
-mno-ieee-compare
Control whether or not the compiler uses IE floating
point comparisons. These handle correctly the case
where the result of a comparison is unordered. Warning:
the requisite kernel support may not be available.
-mnobitfield
Do not use the bit-field instructions. On some machines
it is faster to use shifting and masking operations.
This is the default for the pc532.
-mbitfield
Do use the bit-field instructions. This is the default
for all platforms except the pc532.
-mrtd
Use a different function-calling convention, in which
functions that take a fixed number of arguments return
pop their arguments on return with the "ret"
instruction.
This calling convention is incompatible with the one
normally used on Unix, so you cannot use it if you need
to call libraries compiled with the Unix compiler.
Also, you must provide function prototypes for all
functions that take variable numbers of arguments
(including "printf"); otherwise incorrect code will be
generated for calls to those functions.
In addition, seriously incorrect code will result if you
call a function with too many arguments. (Normally,
extra arguments are harmlessly ignored.)
gcc-3.4.3 Last change: 2004-11-05 172
GNU GC(1)
This option takes its name from the 680x0 "rtd"
instruction.
-mregparam
Use a different function-calling convention where the
first two arguments are passed in registers.
This calling convention is incompatible with the one
normally used on Unix, so you cannot use it if you need
to call libraries compiled with the Unix compiler.
-mnoregparam
Do not pass any arguments in registers. This is the
default for all targets.
-msb
It is OK to use the sb as an index register which is
always loaded with zero. This is the default for the
pc532-netbsd target.
-mnosb
The sb register is not available for use or has not been
initialized to zero by the run time system. This is the
default for all targets except the pc532-netbsd. It is
also implied whenever -mhimem or -fpic is set.
-mhimem
Many ns32000 series addressing modes use displacements
of up to 512MB. If an address is above 512MB then
displacements from zero can not be used. This option
causes code to be generated which can be loaded above
512MB. This may be useful for operating systems or ROM
code.
-mnohimem
Assume code will be loaded in the first 512MB of virtual
address space. This is the default for all platforms.
AVR Options
These options are defined for AVR implementations:
-mmcu=mcu
Specify ATMEL AVR instruction set or MCU type.
Instruction set avr1 is for the minimal AVR core, not
supported by the C compiler, only for assembler programs
(MCU types: at90s1200, attiny10, attiny11, attiny12,
attiny15, attiny28).
Instruction set avr2 (default) is for the classic AVR
core with up to 8K program memory space (MCU types:
gcc-3.4.3 Last change: 2004-11-05 173
GNU GC(1)
at90s2313, at90s2323, attiny22, at90s2333, at90s2343,
at90s4414, at90s4433, at90s4434, at90s8515, at90c8534,
at90s8535).
Instruction set avr3 is for the classic AVR core with up
to 128K program memory space (MCU types: atmega103,
atmega603, at43usb320, at76c711).
Instruction set avr4 is for the enhanced AVR core with
up to 8K program memory space (MCU types: atmega8,
atmega83, atmega85).
Instruction set avr5 is for the enhanced AVR core with
up to 128K program memory space (MCU types: atmega16,
atmega161, atmega163, atmega32, atmega323, atmega64,
atmega128, at43usb355, at94k).
-msize
Output instruction sizes to the asm file.
-minit-stack=N
Specify the initial stack address, which may be a symbol
or numeric value, stack is the default.
-mno-interrupts
Generated code is not compatible with hardware
interrupts. Code size will be smaller.
-mcall-prologues
Functions prologues/epilogues expanded as call to
appropriate subroutines. Code size will be smaller.
-mno-tablejump
Do not generate tablejump insns which sometimes increase
code size.
-mtiny-stack
Change only the low 8 bits of the stack pointer.
MCore Options
These are the -m options defined for the Motorola M*Core
processors.
-mhardlit
-mno-hardlit
Inline constants into the code stream if it can be done
in two instructions or less.
-mdiv
-mno-div
Use the divide instruction. (Enabled by default).
gcc-3.4.3 Last change: 2004-11-05 174
GNU GC(1)
-mrelax-immediate
-mno-relax-immediate
Allow arbitrary sized immediates in bit operations.
-mwide-bitfields
-mno-wide-bitfields
Always treat bit-fields as int-sized.
-m4byte-functions
-mno-4byte-functions
Force all functions to be aligned to a four byte
boundary.
-mcallgraph-data
-mno-callgraph-data
Emit callgraph information.
-mslow-bytes
-mno-slow-bytes
Prefer word access when reading byte quantities.
-mlittle-endian
-mbig-endian
Generate code for a little endian target.
-m210
-m340
Generate code for the 210 processor.
IA-64 Options
These are the -m options defined for the Intel IA-64
architecture.
-mbig-endian
Generate code for a big endian target. This is the
default for HP-UX.
-mlittle-endian
Generate code for a little endian target. This is the
default for AIX5 and GNU/Linux.
-mgnu-as
-mno-gnu-as
Generate (or don't) code for the GNU assembler. This is
the default.
-mgnu-ld
-mno-gnu-ld
Generate (or don't) code for the GNU linker. This is
the default.
gcc-3.4.3 Last change: 2004-11-05 175
GNU GC(1)
-mno-pic
Generate code that does not use a global pointer
register. The result is not position independent code,
and violates the IA-64 ABI.
-mvolatile-asm-stop
-mno-volatile-asm-stop
Generate (or don't) a stop bit immediately before and
after volatile asm statements.
-mb-step
Generate code that works around Itanium B step errata.
-mregister-names
-mno-register-names
Generate (or don't) in, loc, and out register names for
the stacked registers. This may make assembler output
more readable.
-mno-sdata
-msdata
Disable (or enable) optimizations that use the small
data section. This may be useful for working around
optimizer bugs.
-mconstant-gp
Generate code that uses a single constant global pointer
value. This is useful when compiling kernel code.
-mauto-pic
Generate code that is self-relocatable. This implies
-mconstant-gp. This is useful when compiling firmware
code.
-minline-float-divide-min-latency
Generate code for inline divides of floating point
values using the minimum latency algorithm.
-minline-float-divide-max-throughput
Generate code for inline divides of floating point
values using the maximum throughput algorithm.
-minline-int-divide-min-latency
Generate code for inline divides of integer values using
the minimum latency algorithm.
-minline-int-divide-max-throughput
Generate code for inline divides of integer values using
the maximum throughput algorithm.
-mno-dwarf2-asm
-mdwarf2-asm
gcc-3.4.3 Last change: 2004-11-05 176
GNU GC(1)
Don't (or do) generate assembler code for the DWARF2
line number debugging info. This may be useful when not
using the GNU assembler.
-mfixed-range=register-range
Generate code treating the given register range as fixed
registers. A fixed register is one that the register
allocator can not use. This is useful when compiling
kernel code. A register range is specified as two
registers separated by a dash. Multiple register ranges
can be specified separated by a comma.
-mearly-stop-bits
-mno-early-stop-bits
Allow stop bits to be placed earlier than immediately
preceding the instruction that triggered the stop bit.
This can improve instruction scheduling, but does not
always do so.
D30V Options
These -m options are defined for D30V implementations:
-mextmem
Link the .text, .data, .bss, .strings, .rodata,
.rodata1, .data1 sections into external memory, which
starts at location 0x80000000.
-mextmemory
Same as the -mextmem switch.
-monchip
Link the .text section into onchip text memory, which
starts at location 0x0. Also link .data, .bss,
.strings, .rodata, .rodata1, .data1 sections into onchip
data memory, which starts at location 0x20000000.
-mno-asm-optimize
-masm-optimize
Disable (enable) passing -O to the assembler when
optimizing. The assembler uses the -O option to
automatically parallelize adjacent short instructions
where possible.
-mbranch-cost=n
Increase the internal costs of branches to n. Higher
costs means that the compiler will issue more
instructions to avoid doing a branch. The default is 2.
-mcond-exec=n
Specify the maximum number of conditionally executed
instructions that replace a branch. The default is 4.
gcc-3.4.3 Last change: 2004-11-05 177
GNU GC(1)
S/390 and zSeries Options
These are the -m options defined for the S/390 and zSeries
architecture.
-mhard-float
-msoft-float
Use (do not use) the hardware floating-point
instructions and registers for floating-point
operations. When -msoft-float is specified, functions
in libgcc.a will be used to perform floating-point
operations. When -mhard-float is specified, the
compiler generates IE floating-point instructions.
This is the default.
-mbackchain
-mno-backchain
Generate (or do not generate) code which maintains an
explicit backchain within the stack frame that points to
the caller's frame. This may be needed to allow
debugging using tools that do not understand DWARF-2
call frame information. The default is not to generate
the backchain.
-msmall-exec
-mno-small-exec
Generate (or do not generate) code using the "bras"
instruction to do subroutine calls. This only works
reliably if the total executable size does not exceed
64k. The default is to use the "basr" instruction
instead, which does not have this limitation.
-m64
-m31
When -m31 is specified, generate code compliant to the
GNU/Linux for S/390 ABI. When -m64 is specified,
generate code compliant to the GNU/Linux for zSeries
ABI. This allows GC in particular to generate 64-bit
instructions. For the s390 targets, the default is
-m31, while the s390x targets default to -m64.
-mzarch
-mesa
When -mzarch is specified, generate code using the
instructions available on z/Architecture. When -mesa is
specified, generate code using the instructions
available on ESA/390. Note that -mesa is not possible
with -m64. When generating code compliant to the
GNU/Linux for S/390 ABI, the default is -mesa. When
generating code compliant to the GNU/Linux for zSeries
ABI, the default is -mzarch.
gcc-3.4.3 Last change: 2004-11-05 178
GNU GC(1)
-mmvcle
-mno-mvcle
Generate (or do not generate) code using the "mvcle"
instruction to perform block moves. When -mno-mvcle is
specified, use a "mvc" loop instead. This is the
default.
-mdebug
-mno-debug
Print (or do not print) additional debug information
when compiling. The default is to not print debug
information.
-march=cpu-type
Generate code that will run on cpu-type, which is the
name of a system representing a certain processor type.
Possible values for cpu-type are g5, g6, z900, and z990.
When generating code using the instructions available on
z/Architecture, the default is -march=z900. Otherwise,
the default is -march=g5.
-mtune=cpu-type
Tune to cpu-type everything applicable about the
generated code, except for the ABI and the set of
available instructions. The list of cpu-type values is
the same as for -march. The default is the value used
for -march.
-mfused-madd
-mno-fused-madd
Generate code that uses (does not use) the floating
point multiply and accumulate instructions. These
instructions are generated by default if hardware
floating point is used.
CRIS Options
These options are defined specifically for the CRIS ports.
-march=architecture-type
-mcpu=architecture-type
Generate code for the specified architecture. The
choices for architecture-type are v3, v8 and v10 for
respectively ETRAX 4, ETRAX 100, and ETRAX 100 LX.
Default is v0 except for cris-axis-linux-gnu, where the
default is v10.
-mtune=architecture-type
Tune to architecture-type everything applicable about
the generated code, except for the ABI and the set of
available instructions. The choices for architecture-
type are the same as for -march=architecture-type.
gcc-3.4.3 Last change: 2004-11-05 179
GNU GC(1)
-mmax-stack-frame=n
Warn when the stack frame of a function exceeds n bytes.
-melinux-stacksize=n
Only available with the cris-axis-aout target. Arranges
for indications in the program to the kernel loader that
the stack of the program should be set to n bytes.
-metrax4
-metrax100
The options -metrax4 and -metrax100 are synonyms for
-march=v3 and -march=v8 respectively.
-mmul-bug-workaround
-mno-mul-bug-workaround
Work around a bug in the "muls" and "mulu" instructions
for CPU models where it applies. This option is active
by default.
-mpdebug
Enable CRIS-specific verbose debug-related information
in the assembly code. This option also has the effect
to turn off the #NOAP formatted-code indicator to the
assembler at the beginning of the assembly file.
-mcc-init
Do not use condition-code results from previous
instruction; always emit compare and test instructions
before use of condition codes.
-mno-side-effects
Do not emit instructions with side-effects in addressing
modes other than post-increment.
-mstack-align
-mno-stack-align
-mdata-align
-mno-data-align
-mconst-align
-mno-const-align
These options (no-options) arranges (eliminate
arrangements) for the stack-frame, individual data and
constants to be aligned for the maximum single data
access size for the chosen CPU model. The default is to
arrange for 32-bit alignment. ABI details such as
structure layout are not affected by these options.
-m32-bit
-m16-bit
-m8-bit
Similar to the stack- data- and const-align options
above, these options arrange for stack-frame, writable
gcc-3.4.3 Last change: 2004-11-05 180
GNU GC(1)
data and constants to all be 32-bit, 16-bit or 8-bit
aligned. The default is 32-bit alignment.
-mno-prologue-epilogue
-mprologue-epilogue
With -mno-prologue-epilogue, the normal function
prologue and epilogue that sets up the stack-frame are
omitted and no return instructions or return sequences
are generated in the code. Use this option only
together with visual inspection of the compiled code: no
warnings or errors are generated when call-saved
registers must be saved, or storage for local variable
needs to be allocated.
-mno-gotplt
-mgotplt
With -fpic and -fPIC, don't generate (do generate)
instruction sequences that load addresses for functions
from the PLT part of the GOT rather than (traditional on
other architectures) calls to the PLT. The default is
-mgotplt.
-maout
Legacy no-op option only recognized with the cris-axis-
aout target.
-melf
Legacy no-op option only recognized with the cris-axis-
elf and cris-axis-linux-gnu targets.
-melinux
Only recognized with the cris-axis-aout target, where it
selects a GNU/linux-like multilib, include files and
instruction set for -march=v8.
-mlinux
Legacy no-op option only recognized with the cris-axis-
linux-gnu target.
-sim
This option, recognized for the cris-axis-aout and
cris-axis-elf arranges to link with input-output
functions from a simulator library. Code, initialized
data and zero-initialized data are allocated
consecutively.
-sim2
Like -sim, but pass linker options to locate initialized
data at 0x40000000 and zero-initialized data at
0x80000000.
gcc-3.4.3 Last change: 2004-11-05 181
GNU GC(1)
MIX Options
These options are defined for the MIX:
-mlibfuncs
-mno-libfuncs
Specify that intrinsic library functions are being
compiled, passing all values in registers, no matter the
size.
-mepsilon
-mno-epsilon
Generate floating-point comparison instructions that
compare with respect to the "rE" epsilon register.
-mabi=mmixware
-mabi=gnu
Generate code that passes function parameters and return
values that (in the called function) are seen as
registers $0 and up, as opposed to the GNU ABI which
uses global registers $231 and up.
-mzero-extend
-mno-zero-extend
When reading data from memory in sizes shorter than 64
bits, use (do not use) zero-extending load instructions
by default, rather than sign-extending ones.
-mknuthdiv
-mno-knuthdiv
Make the result of a division yielding a remainder have
the same sign as the divisor. With the default,
-mno-knuthdiv, the sign of the remainder follows the
sign of the dividend. Both methods are arithmetically
valid, the latter being almost exclusively used.
-mtoplevel-symbols
-mno-toplevel-symbols
Prepend (do not prepend) a : to all global symbols, so
the assembly code can be used with the "PREFIX" assembly
directive.
-melf
Generate an executable in the ELF format, rather than
the default mmo format used by the mmix simulator.
-mbranch-predict
-mno-branch-predict
Use (do not use) the probable-branch instructions, when
static branch prediction indicates a probable branch.
-mbase-addresses
gcc-3.4.3 Last change: 2004-11-05 182
GNU GC(1)
-mno-base-addresses
Generate (do not generate) code that uses base
addresses. Using a base address automatically generates
a request (handled by the assembler and the linker) for
a constant to be set up in a global register. The
register is used for one or more base address requests
within the range 0 to 255 from the value held in the
register. The generally leads to short and fast code,
but the number of different data items that can be
addressed is limited. This means that a program that
uses lots of static data may require
-mno-base-addresses.
-msingle-exit
-mno-single-exit
Force (do not force) generated code to have a single
exit point in each function.
PDP-11 Options
These options are defined for the PDP-11:
-mfpu
Use hardware FP floating point. This is the default.
(FIS floating point on the PDP-11/40 is not supported.)
-msoft-float
Do not use hardware floating point.
-mac0
Return floating-point results in ac0 (fr0 in Unix
assembler syntax).
-mno-ac0
Return floating-point results in memory. This is the
default.
-m40
Generate code for a PDP-11/40.
-m45
Generate code for a PDP-11/45. This is the default.
-m10
Generate code for a PDP-11/10.
-mbcopy-builtin
Use inline "movstrhi" patterns for copying memory. This
is the default.
-mbcopy
Do not use inline "movstrhi" patterns for copying
gcc-3.4.3 Last change: 2004-11-05 183
GNU GC(1)
memory.
-mint16
-mno-int32
Use 16-bit "int". This is the default.
-mint32
-mno-int16
Use 32-bit "int".
-mfloat64
-mno-float32
Use 64-bit "float". This is the default.
-mfloat32
-mno-float64
Use 32-bit "float".
-mabshi
Use "abshi2" pattern. This is the default.
-mno-abshi
Do not use "abshi2" pattern.
-mbranch-expensive
Pretend that branches are expensive. This is for
experimenting with code generation only.
-mbranch-cheap
Do not pretend that branches are expensive. This is the
default.
-msplit
Generate code for a system with split I&D.
-mno-split
Generate code for a system without split I&D. This is
the default.
-munix-asm
Use Unix assembler syntax. This is the default when
configured for pdp11-*-bsd.
-mdec-asm
Use DEC assembler syntax. This is the default when
configured for any PDP-11 target other than pdp11-*-bsd.
Xstormy16 Options
These options are defined for Xstormy16:
-msim
gcc-3.4.3 Last change: 2004-11-05 184
GNU GC(1)
Choose startup files and linker script suitable for the
simulator.
FRV Options
-mgpr-32
Only use the first 32 general purpose registers.
-mgpr-64
Use all 64 general purpose registers.
-mfpr-32
Use only the first 32 floating point registers.
-mfpr-64
Use all 64 floating point registers
-mhard-float
Use hardware instructions for floating point operations.
-msoft-float
Use library routines for floating point operations.
-malloc-cc
Dynamically allocate condition code registers.
-mfixed-cc
Do not try to dynamically allocate condition code
registers, only use "icc0" and "fcc0".
-mdword
Change ABI to use double word insns.
-mno-dword
Do not use double word instructions.
-mdouble
Use floating point double instructions.
-mno-double
Do not use floating point double instructions.
-mmedia
Use media instructions.
-mno-media
Do not use media instructions.
-mmuladd
Use multiply and add/subtract instructions.
-mno-muladd
gcc-3.4.3 Last change: 2004-11-05 185
GNU GC(1)
Do not use multiply and add/subtract instructions.
-mlibrary-pic
Enable PIC support for building libraries
-macc-4
Use only the first four media accumulator registers.
-macc-8
Use all eight media accumulator registers.
-mpack
Pack VLIW instructions.
-mno-pack
Do not pack VLIW instructions.
-mno-eflags
Do not mark ABI switches in eflags.
-mcond-move
Enable the use of conditional-move instructions
(default).
This switch is mainly for debugging the compiler and
will likely be removed in a future version.
-mno-cond-move
Disable the use of conditional-move instructions.
This switch is mainly for debugging the compiler and
will likely be removed in a future version.
-mscc
Enable the use of conditional set instructions
(default).
This switch is mainly for debugging the compiler and
will likely be removed in a future version.
-mno-scc
Disable the use of conditional set instructions.
This switch is mainly for debugging the compiler and
will likely be removed in a future version.
-mcond-exec
Enable the use of conditional execution (default).
This switch is mainly for debugging the compiler and
will likely be removed in a future version.
gcc-3.4.3 Last change: 2004-11-05 186
GNU GC(1)
-mno-cond-exec
Disable the use of conditional execution.
This switch is mainly for debugging the compiler and
will likely be removed in a future version.
-mvliw-branch
Run a pass to pack branches into VLIW instructions
(default).
This switch is mainly for debugging the compiler and
will likely be removed in a future version.
-mno-vliw-branch
Do not run a pass to pack branches into VLIW
instructions.
This switch is mainly for debugging the compiler and
will likely be removed in a future version.
-mmulti-cond-exec
Enable optimization of "&&" and "" in conditional
execution (default).
This switch is mainly for debugging the compiler and
will likely be removed in a future version.
-mno-multi-cond-exec
Disable optimization of "&&" and "" in conditional
execution.
This switch is mainly for debugging the compiler and
will likely be removed in a future version.
-mnested-cond-exec
Enable nested conditional execution optimizations
(default).
This switch is mainly for debugging the compiler and
will likely be removed in a future version.
-mno-nested-cond-exec
Disable nested conditional execution optimizations.
This switch is mainly for debugging the compiler and
will likely be removed in a future version.
-mtomcat-stats
Cause gas to print out tomcat statistics.
-mcpu=cpu
Select the processor type for which to generate code.
gcc-3.4.3 Last change: 2004-11-05 187
GNU GC(1)
Possible values are simple, tomcat, fr500, fr400, fr300,
frv.
Xtensa Options
These options are supported for Xtensa targets:
-mconst16
-mno-const16
Enable or disable use of "CONST16" instructions for
loading constant values. The "CONST16" instruction is
currently not a standard option from Tensilica. When
enabled, "CONST16" instructions are always used in place
of the standard "L32R" instructions. The use of
"CONST16" is enabled by default only if the "L32R"
instruction is not available.
-mfused-madd
-mno-fused-madd
Enable or disable use of fused multiply/add and
multiply/subtract instructions in the floating-point
option. This has no effect if the floating-point option
is not also enabled. Disabling fused multiply/add and
multiply/subtract instructions forces the compiler to
use separate instructions for the multiply and
add/subtract operations. This may be desirable in some
cases where strict IE 754-compliant results are
required: the fused multiply add/subtract instructions
do not round the intermediate result, thereby producing
results with more bits of precision than specified by
the IE standard. Disabling fused multiply
add/subtract instructions also ensures that the program
output is not sensitive to the compiler's ability to
combine multiply and add/subtract operations.
-mtext-section-literals
-mno-text-section-literals
Control the treatment of literal pools. The default is
-mno-text-section-literals, which places literals in a
separate section in the output file. This allows the
literal pool to be placed in a data RAM/ROM, and it also
allows the linker to combine literal pools from separate
object files to remove redundant literals and improve
code size. With -mtext-section-literals, the literals
are interspersed in the text section in order to keep
them as close as possible to their references. This may
be necessary for large assembly files.
-mtarget-align
-mno-target-align
When this option is enabled, GC instructs the assembler
to automatically align instructions to reduce branch
gcc-3.4.3 Last change: 2004-11-05 188
GNU GC(1)
penalties at the expense of some code density. The
assembler attempts to widen density instructions to
align branch targets and the instructions following call
instructions. If there are not enough preceding safe
density instructions to align a target, no widening will
be performed. The default is -mtarget-align. These
options do not affect the treatment of auto-aligned
instructions like "LOP", which the assembler will
always align, either by widening density instructions or
by inserting no-op instructions.
-mlongcalls
-mno-longcalls
When this option is enabled, GC instructs the assembler
to translate direct calls to indirect calls unless it
can determine that the target of a direct call is in the
range allowed by the call instruction. This translation
typically occurs for calls to functions in other source
files. Specifically, the assembler translates a direct
"CAL" instruction into an "L32R" followed by a "CALX"
instruction. The default is -mno-longcalls. This
option should be used in programs where the call target
can potentially be out of range. This option is
implemented in the assembler, not the compiler, so the
assembly code generated by GC will still show direct
call instructions---look at the disassembled object code
to see the actual instructions. Note that the assembler
will use an indirect call for every cross-file call, not
just those that really will be out of range.
Options for Code Generation Conventions
These machine-independent options control the interface
conventions used in code generation.
Most of them have both positive and negative forms; the
negative form of -ffoo would be -fno-foo. In the table
below, only one of the forms is listed---the one which is
not the default. You can figure out the other form by
either removing no- or adding it.
-fbounds-check
For front-ends that support it, generate additional code
to check that indices used to access arrays are within
the declared range. This is currently only supported by
the Java and Fortran 77 front-ends, where this option
defaults to true and false respectively.
-ftrapv
This option generates traps for signed overflow on
addition, subtraction, multiplication operations.
gcc-3.4.3 Last change: 2004-11-05 189
GNU GC(1)
-fwrapv
This option instructs the compiler to assume that signed
arithmetic overflow of addition, subtraction and
multiplication wraps around using twos-complement
representation. This flag enables some optimizations
and disables other. This option is enabled by default
for the Java front-end, as required by the Java language
specification.
-fexceptions
Enable exception handling. Generates extra code needed
to propagate exceptions. For some targets, this implies
GC will generate frame unwind information for all
functions, which can produce significant data size
overhead, although it does not affect execution. If you
do not specify this option, GC will enable it by
default for languages like C] which normally require
exception handling, and disable it for languages like C
that do not normally require it. However, you may need
to enable this option when compiling C code that needs
to interoperate properly with exception handlers written
in C]. You may also wish to disable this option if you
are compiling older C] programs that don't use
exception handling.
-fnon-call-exceptions
Generate code that allows trapping instructions to throw
exceptions. Note that this requires platform-specific
runtime support that does not exist everywhere.
Moreover, it only allows trapping instructions to throw
exceptions, i.e. memory references or floating point
instructions. It does not allow exceptions to be thrown
from arbitrary signal handlers such as "SIGALRM".
-funwind-tables
Similar to -fexceptions, except that it will just
generate any needed static data, but will not affect the
generated code in any other way. You will normally not
enable this option; instead, a language processor that
needs this handling would enable it on your behalf.
-fasynchronous-unwind-tables
Generate unwind table in dwarf2 format, if supported by
target machine. The table is exact at each instruction
boundary, so it can be used for stack unwinding from
asynchronous events (such as debugger or garbage
collector).
-fpcc-struct-return
Return ``short'' "struct" and "union" values in memory
like longer ones, rather than in registers. This
convention is less efficient, but it has the advantage
gcc-3.4.3 Last change: 2004-11-05 190
GNU GC(1)
of allowing intercallability between GC-compiled files
and files compiled with other compilers, particularly
the Portable C Compiler (pcc).
The precise convention for returning structures in
memory depends on the target configuration macros.
Short structures and unions are those whose size and
alignment match that of some integer type.
Warning: code compiled with the -fpcc-struct-return
switch is not binary compatible with code compiled with
the -freg-struct-return switch. Use it to conform to a
non-default application binary interface.
-freg-struct-return
Return "struct" and "union" values in registers when
possible. This is more efficient for small structures
than -fpcc-struct-return.
If you specify neither -fpcc-struct-return nor
-freg-struct-return, GC defaults to whichever
convention is standard for the target. If there is no
standard convention, GC defaults to
-fpcc-struct-return, except on targets where GC is the
principal compiler. In those cases, we can choose the
standard, and we chose the more efficient register
return alternative.
Warning: code compiled with the -freg-struct-return
switch is not binary compatible with code compiled with
the -fpcc-struct-return switch. Use it to conform to a
non-default application binary interface.
-fshort-enums
Allocate to an "enum" type only as many bytes as it
needs for the declared range of possible values.
Specifically, the "enum" type will be equivalent to the
smallest integer type which has enough room.
Warning: the -fshort-enums switch causes GC to generate
code that is not binary compatible with code generated
without that switch. Use it to conform to a non-default
application binary interface.
-fshort-double
Use the same size for "double" as for "float".
Warning: the -fshort-double switch causes GC to
generate code that is not binary compatible with code
generated without that switch. Use it to conform to a
non-default application binary interface.
gcc-3.4.3 Last change: 2004-11-05 191
GNU GC(1)
-fshort-wchar
Override the underlying type for wchart to be short
unsigned int instead of the default for the target.
This option is useful for building programs to run under
WINE.
Warning: the -fshort-wchar switch causes GC to generate
code that is not binary compatible with code generated
without that switch. Use it to conform to a non-default
application binary interface.
-fshared-data
Requests that the data and non-"const" variables of this
compilation be shared data rather than private data.
The distinction makes sense only on certain operating
systems, where shared data is shared between processes
running the same program, while private data exists in
one copy per process.
-fno-common
In C, allocate even uninitialized global variables in
the data section of the object file, rather than
generating them as common blocks. This has the effect
that if the same variable is declared (without "extern")
in two different compilations, you will get an error
when you link them. The only reason this might be
useful is if you wish to verify that the program will
work on other systems which always work this way.
-fno-ident
Ignore the #ident directive.
-finhibit-size-directive
Don't output a ".size" assembler directive, or anything
else that would cause trouble if the function is split
in the middle, and the two halves are placed at
locations far apart in memory. This option is used when
compiling crtstuff.c; you should not need to use it for
anything else.
-fverbose-asm
Put extra commentary information in the generated
assembly code to make it more readable. This option is
generally only of use to those who actually need to read
the generated assembly code (perhaps while debugging the
compiler itself).
-fno-verbose-asm, the default, causes the extra
information to be omitted and is useful when comparing
two assembler files.
-fpic
gcc-3.4.3 Last change: 2004-11-05 192
GNU GC(1)
Generate position-independent code (PIC) suitable for
use in a shared library, if supported for the target
machine. Such code accesses all constant addresses
through a global offset table (GOT). The dynamic loader
resolves the GOT entries when the program starts (the
dynamic loader is not part of GC; it is part of the
operating system). If the GOT size for the linked
executable exceeds a machine-specific maximum size, you
get an error message from the linker indicating that
-fpic does not work; in that case, recompile with -fPIC
instead. (These maximums are 8k on the SPARC and 32k on
the m68k and RS/6000. The 386 has no such limit.)
Position-independent code requires special support, and
therefore works only on certain machines. For the 386,
GC supports PIC for System V but not for the Sun 386i.
Code generated for the IBM RS/6000 is always
position-independent.
-fPIC
If supported for the target machine, emit position-
independent code, suitable for dynamic linking and
avoiding any limit on the size of the global offset
table. This option makes a difference on the m68k and
the SPARC.
Position-independent code requires special support, and
therefore works only on certain machines.
-fpie
-fPIE
These options are similar to -fpic and -fPIC, but
generated position independent code can be only linked
into executables. Usually these options are used when
-pie GC option will be used during linking.
-ffixed-reg
Treat the register named reg as a fixed register;
generated code should never refer to it (except perhaps
as a stack pointer, frame pointer or in some other fixed
role).
reg must be the name of a register. The register names
accepted are machine-specific and are defined in the
"REGISTERNAMES" macro in the machine description macro
file.
This flag does not have a negative form, because it
specifies a three-way choice.
-fcall-used-reg
Treat the register named reg as an allocable register
gcc-3.4.3 Last change: 2004-11-05 193
GNU GC(1)
that is clobbered by function calls. It may be
allocated for temporaries or variables that do not live
across a call. Functions compiled this way will not
save and restore the register reg.
It is an error to used this flag with the frame pointer
or stack pointer. Use of this flag for other registers
that have fixed pervasive roles in the machine's
execution model will produce disastrous results.
This flag does not have a negative form, because it
specifies a three-way choice.
-fcall-saved-reg
Treat the register named reg as an allocable register
saved by functions. It may be allocated even for
temporaries or variables that live across a call.
Functions compiled this way will save and restore the
register reg if they use it.
It is an error to used this flag with the frame pointer
or stack pointer. Use of this flag for other registers
that have fixed pervasive roles in the machine's
execution model will produce disastrous results.
A different sort of disaster will result from the use of
this flag for a register in which function values may be
returned.
This flag does not have a negative form, because it
specifies a three-way choice.
-fpack-struct
Pack all structure members together without holes.
Warning: the -fpack-struct switch causes GC to generate
code that is not binary compatible with code generated
without that switch. Additionally, it makes the code
suboptimal. Use it to conform to a non-default
application binary interface.
-finstrument-functions
Generate instrumentation calls for entry and exit to
functions. Just after function entry and just before
function exit, the following profiling functions will be
called with the address of the current function and its
call site. (On some platforms,
"builtinreturnaddress" does not work beyond the
current function, so the call site information may not
be available to the profiling functions otherwise.)
gcc-3.4.3 Last change: 2004-11-05 194
GNU GC(1)
void cygprofilefuncenter (void *thisfn,
void *callsite);
void cygprofilefuncexit (void *thisfn,
void *callsite);
The first argument is the address of the start of the
current function, which may be looked up exactly in the
symbol table.
This currently disables function inlining. This
restriction is expected to be removed in future
releases.
A function may be given the attribute
"noinstrumentfunction", in which case this
instrumentation will not be done. This can be used, for
example, for the profiling functions listed above,
high-priority interrupt routines, and any functions from
which the profiling functions cannot safely be called
(perhaps signal handlers, if the profiling routines
generate output or allocate memory).
-fstack-check
Generate code to verify that you do not go beyond the
boundary of the stack. You should specify this flag if
you are running in an environment with multiple threads,
but only rarely need to specify it in a single-threaded
environment since stack overflow is automatically
detected on nearly all systems if there is only one
stack.
Note that this switch does not actually cause checking
to be done; the operating system must do that. The
switch causes generation of code to ensure that the
operating system sees the stack being extended.
-fstack-limit-register=reg
-fstack-limit-symbol=sym
-fno-stack-limit
Generate code to ensure that the stack does not grow
beyond a certain value, either the value of a register
or the address of a symbol. If the stack would grow
beyond the value, a signal is raised. For most targets,
the signal is raised before the stack overruns the
boundary, so it is possible to catch the signal without
taking special precautions.
For instance, if the stack starts at absolute address
0x80000000 and grows downwards, you can use the flags
-fstack-limit-symbol=stacklimit and
-Wl,--defsym,stacklimit=0x7ffe0000 to enforce a stack
limit of 128KB. Note that this may only work with the
gcc-3.4.3 Last change: 2004-11-05 195
GNU GC(1)
GNU linker.
-fargument-alias
-fargument-noalias
-fargument-noalias-global
Specify the possible relationships among parameters and
between parameters and global data.
-fargument-alias specifies that arguments (parameters)
may alias each other and may alias global
storage.-fargument-noalias specifies that arguments do
not alias each other, but may alias global
storage.-fargument-noalias-global specifies that
arguments do not alias each other and do not alias
global storage.
Each language will automatically use whatever option is
required by the language standard. You should not need
to use these options yourself.
-fleading-underscore
This option and its counterpart,
-fno-leading-underscore, forcibly change the way C
symbols are represented in the object file. One use is
to help link with legacy assembly code.
Warning: the -fleading-underscore switch causes GC to
generate code that is not binary compatible with code
generated without that switch. Use it to conform to a
non-default application binary interface. Not all
targets provide complete support for this switch.
-ftls-model=model
Alter the thread-local storage model to be used. The
model argument should be one of "global-dynamic",
"local-dynamic", "initial-exec" or "local-exec".
The default without -fpic is "initial-exec"; with -fpic
the default is "global-dynamic".
ENVIRONMENT
This section describes several environment variables that
affect how GC operates. Some of them work by specifying
directories or prefixes to use when searching for various
kinds of files. Some are used to specify other aspects of
the compilation environment.
Note that you can also specify places to search using
options such as -B, -I and -L. These take precedence over
places specified using environment variables, which in turn
take precedence over those specified by the configuration of
GC.
gcc-3.4.3 Last change: 2004-11-05 196
GNU GC(1)
LANG
LCTYPE
LCMESAGES
LCAL
These environment variables control the way that GC
uses localization information that allow GC to work
with different national conventions. GC inspects the
locale categories LCTYPE and LCMESAGES if it has
been configured to do so. These locale categories can
be set to any value supported by your installation. A
typical value is enGB.UTF-8 for English in the United
Kingdom encoded in UTF-8.
The LCTYPE environment variable specifies character
classification. GC uses it to determine the character
boundaries in a string; this is needed for some
multibyte encodings that contain quote and escape
characters that would otherwise be interpreted as a
string end or escape.
The LCMESAGES environment variable specifies the
language to use in diagnostic messages.
If the LCAL environment variable is set, it overrides
the value of LCTYPE and LCMESAGES; otherwise,
LCTYPE and LCMESAGES default to the value of the
LANG environment variable. If none of these variables
are set, GC defaults to traditional C English behavior.
TMPDIR
If TMPDIR is set, it specifies the directory to use for
temporary files. GC uses temporary files to hold the
output of one stage of compilation which is to be used
as input to the next stage: for example, the output of
the preprocessor, which is the input to the compiler
proper.
GCEXECPREFIX
If GCEXECPREFIX is set, it specifies a prefix to use
in the names of the subprograms executed by the
compiler. No slash is added when this prefix is
combined with the name of a subprogram, but you can
specify a prefix that ends with a slash if you wish.
If GCEXECPREFIX is not set, GC will attempt to
figure out an appropriate prefix to use based on the
pathname it was invoked with.
If GC cannot find the subprogram using the specified
prefix, it tries looking in the usual places for the
subprogram.
gcc-3.4.3 Last change: 2004-11-05 197
GNU GC(1)
The default value of GCEXECPREFIX is prefix/lib/gcc/
where prefix is the value of "prefix" when you ran the
configure script.
Other prefixes specified with -B take precedence over
this prefix.
This prefix is also used for finding files such as
crt0.o that are used for linking.
In addition, the prefix is used in an unusual way in
finding the directories to search for header files. For
each of the standard directories whose name normally
begins with /usr/local/lib/gcc (more precisely, with the
value of GCINCLUDEDIR), GC tries replacing that
beginning with the specified prefix to produce an
alternate directory name. Thus, with -Bfoo/, GC will
search foo/bar where it would normally search
/usr/local/lib/bar. These alternate directories are
searched first; the standard directories come next.
COMPILERPATH
The value of COMPILERPATH is a colon-separated list of
directories, much like PATH. GC tries the directories
thus specified when searching for subprograms, if it
can't find the subprograms using GCEXECPREFIX.
LIBRARYPATH
The value of LIBRARYPATH is a colon-separated list of
directories, much like PATH. When configured as a
native compiler, GC tries the directories thus
specified when searching for special linker files, if it
can't find them using GCEXECPREFIX. Linking using
GC also uses these directories when searching for
ordinary libraries for the -l option (but directories
specified with -L come first).
LANG
This variable is used to pass locale information to the
compiler. One way in which this information is used is
to determine the character set to be used when character
literals, string literals and comments are parsed in C
and C]. When the compiler is configured to allow
multibyte characters, the following values for LANG are
recognized:
C-JIS
Recognize JIS characters.
C-SJIS
Recognize SJIS characters.
gcc-3.4.3 Last change: 2004-11-05 198
GNU GC(1)
C-EUCJP
Recognize EUCJP characters.
If LANG is not defined, or if it has some other value,
then the compiler will use mblen and mbtowc as defined
by the default locale to recognize and translate
multibyte characters.
Some additional environments variables affect the behavior
of the preprocessor.
CPATH
CINCLUDEPATH
CPLUSINCLUDEPATH
OBJCINCLUDEPATH
Each variable's value is a list of directories separated
by a special character, much like PATH, in which to look
for header files. The special character,
"PATHSEPARATOR", is target-dependent and determined at
GC build time. For Microsoft Windows-based targets it
is a semicolon, and for almost all other targets it is a
colon.
CPATH specifies a list of directories to be searched as
if specified with -I, but after any paths given with -I
options on the command line. This environment variable
is used regardless of which language is being
preprocessed.
The remaining environment variables apply only when
preprocessing the particular language indicated. Each
specifies a list of directories to be searched as if
specified with -isystem, but after any paths given with
-isystem options on the command line.
In all these variables, an empty element instructs the
compiler to search its current working directory. Empty
elements can appear at the beginning or end of a path.
For instance, if the value of CPATH is
":/special/include", that has the same effect as
-I. -I/special/include.
DEPENDENCIESOUTPUT
If this variable is set, its value specifies how to
output dependencies for Make based on the non-system
header files processed by the compiler. System header
files are ignored in the dependency output.
The value of DEPENDENCIESOUTPUT can be just a file
name, in which case the Make rules are written to that
file, guessing the target name from the source file
name. Or the value can have the form file target, in
gcc-3.4.3 Last change: 2004-11-05 199
GNU GC(1)
which case the rules are written to file file using
target as the target name.
In other words, this environment variable is equivalent
to combining the options -M and -MF, with an optional
-MT switch too.
SUNPRODEPENDENCIES
This variable is the same as DEPENDENCIESOUTPUT (see
above), except that system header files are not ignored,
so it implies -M rather than -M. However, the
dependence on the main input file is omitted.
BUGS
For instructions on reporting bugs, see
. Use of the gccbug script to
report bugs is recommended.
FOTNOTES
1. On some systems, gcc -shared needs to build
supplementary stub code for constructors to work. On
multi-libbed systems, gcc -shared must select the
correct support libraries to link against. Failing to
supply the correct flags may lead to subtle defects.
Supplying them in cases where they are not necessary is
innocuous.
SEE ALSO
gpl(7), gfdl(7), fsf-funding(7), cpp(1), gcov(1), g77(1),
as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1) and the Info
entries for gcc, cpp, g77, as, ld, binutils and gdb.
AUTHOR
See the Info entry for gcc, or
, for
contributors to GC.
COPYRIGHT
Copyright (c) 1988, 1989, 1992, 1993, 1994, 1995, 1996,
1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software
Foundation, Inc.
Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation
License, Version 1.2 or any later version published by the
Free Software Foundation; with the Invariant Sections being
``GNU General Public License'' and ``Funding Free
Software'', the Front-Cover texts being (a) (see below), and
with the Back-Cover Texts being (b) (see below). A copy of
the license is included in the gfdl(7) man page.
gcc-3.4.3 Last change: 2004-11-05 200
GNU GC(1)
(a) The FSF's Front-Cover Text is:
A GNU Manual
(b) The FSF's Back-Cover Text is:
You have freedom to copy and modify this GNU Manual, like GNU
software. Copies published by the Free Software Foundation raise
funds for GNU development.
ATRIBUTES
See attributes(5) for descriptions of the following
attributes:
ATRIBUTE TYPE ATRIBUTE VALUE
Availability SUNWgcc
Interface Stability External
NOTES
Source for gcc is available on http:/opensolaris.org.
gcc-3.4.3 Last change: 2004-11-05 201
|