Questo è il comando powerpc64-linux-gnu-g++ che può essere eseguito nel provider di hosting gratuito OnWorks utilizzando una delle nostre molteplici workstation online gratuite come Ubuntu Online, Fedora Online, emulatore online Windows o emulatore online MAC OS
PROGRAMMA:
NOME
gcc - compilatore C e C++ del progetto GNU
SINOSSI
gcc [-c|-S|-E] [-std=Standard]
[-g] [-pag] [-Olivello]
[-Wavvertire...] [-Wpedante]
[-Idir...] [-Ldir...]
[-Dmacro[=def] ...] [-Umacro]
[-fopzione...] [-mmacchina-opzione...]
[-o file di uscita] [@filetto] infilare...
Qui sono elencate solo le opzioni più utili; vedi sotto per il resto. g ++ accetta
per lo più le stesse opzioni di gcc.
DESCRIZIONE
Quando invochi GCC, normalmente esegue la preelaborazione, la compilazione, l'assemblaggio e il collegamento.
Le "opzioni generali" consentono di interrompere questo processo in una fase intermedia. Per
esempio, il -c opzione dice di non eseguire il linker. Quindi l'output è costituito da oggetto
file emessi dall'assemblatore.
Altre opzioni vengono trasferite a una fase dell'elaborazione. Alcune opzioni controllano il
preprocessore e altri il compilatore stesso. Ancora altre opzioni controllano l'assemblatore e
linker; la maggior parte di questi non sono documentati qui, poiché raramente è necessario utilizzarli.
La maggior parte delle opzioni della riga di comando che puoi usare con GCC sono utili per i programmi C; quando
un'opzione è utile solo con un altro linguaggio (di solito C++), la spiegazione dice così
esplicitamente. Se la descrizione di una particolare opzione non menziona una fonte
lingua, è possibile utilizzare tale opzione con tutte le lingue supportate.
Le gcc il programma accetta opzioni e nomi di file come operandi. Molte opzioni hanno multi-
nomi di lettere; quindi più opzioni a lettera singola possono non è un essere raggruppato: -dv è molto
diversa da -d -v.
Puoi combinare opzioni e altri argomenti. Per la maggior parte, l'ordine che usi non lo fa
questione. L'ordine è importante quando si utilizzano più opzioni dello stesso tipo; per esempio, se
si specifica -L più di una volta, le directory vengono cercate nell'ordine specificato. Anche,
il posizionamento del -l l'opzione è significativa.
Molte opzioni hanno nomi lunghi che iniziano con -f o con -W---Per esempio,
-fmove-loop-invarianti, -Formato W e così via. La maggior parte di questi ha sia positivi che negativi
forme; la forma negativa di -foo is -fno-pippo. Questo manuale documenta solo uno di questi
due moduli, qualunque dei due non sia quello predefinito.
VERSIONI
Opzione Sommario
Ecco un riepilogo di tutte le opzioni, raggruppate per tipologia. Le spiegazioni sono nelle seguenti
.
Totale Opzioni
-c -S -E -o filetto -nessun-prefisso-canonico -tubo -pass-exit-code -x Lingua -v
-### --Aiuto[=classe[, ...]] --target-aiuto --versione -involucro @filetto -fplugin=filetto
-fplugin-arg-Nome=arg -fdump-ada-spec[-sottile] -fada-spec-genitore=unità
-fdump-go-spec =filetto
C Lingua Opzioni
-ansi -std=Standard -fgnu89-in linea -aux-info Nome del file
-funzioni-variadiche-senza-parametri -fno-asm -fno-integrato -fno-integrato-function
-ospitato -autoportante -fonacc -fopenmp -fopenmp-simd -fms-estensioni
-fplan9-estensioni -trigrafie -tradizionale -tradizionale-cpp -Fallow-single-precision
-fcond-mancata corrispondenza -conversioni-vettoriali-di-lino -fcampi-bitfirmati -fsigned-carattere
-campi di bit con segno divertente -funsigned-carattere
C++ Lingua Opzioni
-fabi-versione=n -fno-controllo-accesso -fcheck-nuovo -fconstexpr-profondità=n
-ffriend-iniezione -fno-elide-costruttori -fno-enforce-eh-spec -per-scopo
-fno-per-scope -fno-gnu-parole chiave -fno-modelli-impliciti
-fno-modelli-inline-impliciti -fno-implementare-inline -fms-estensioni
-fno-nonansi-integrati -fnothrow-opt -fno-nomi-operatore -fno-opzionale-diags
-fpermissivo -fno-pretty-modelli -frepo -fno-rtti -fsized-deallocazione -fstats
-ftemplate-backtrace-limit=n -ftemplate-profondità=n -fno-threadsafe-statics
-fuse-cxa-uscita -fno-debole -nostdin++ -fvisibility-inlines-nascosto
-fvtable-verifica=[std|preiniziale|nessuna] -fvtv-conteggi -fvtv-debug -fvisibility-ms-compat
-fext-numeric-letterali -Wabi=n -Tag Wabi -Wconversione-null -Wctor-dtor-privacy
-Wdelete-non-virtuale-dtor -Wliteral-suffisso -Stringendo -Non tranne -Wnon-virtuale-dtor
-Riordina -Weffc++ -Wstrict-null-sentinella -Wno-non-modello-amico -Wold-stile-cast
-Woverloaded-virtuale -Wno-pmf-conversioni -Wsign-promozione
Objective-C e Obiettivo-C++ Lingua Opzioni
-fclasse-stringa-costante=nome della classe -fgnu-runtime -fnext-runtime -fno-nil-ricevitori
-fobjc-abi-versione=n -fobjc-call-cxx-cdtors -fobjc-invio-diretto -fobjc-eccezioni
-fobjc-gc -fobjc-nilcheck -fobjc-std=objc1 -fno-ivar-locale
-fivar-visibilità=[la percezione|protetta|un bagno|pacchetto] -classi-freplace-objc
-fzero-collegamento -gen-decl -Wassign-intercetta -Wno-protocollo -Wselettore
-Wstrict-selettore-match -Selettore-dichiarato-wund
Lingua Competenza Opzioni
-flunghezza-messaggio=n -fdiagnostics-show-location=[una volta|ogni riga]
-fdiagnostics-color=[auto|mai|sempre] -fno-diagnostica-show-option
-fno-diagnostics-show-caret
Avvertenza Opzioni
-fsintassi solo -fmax-errori=n -Wpedante -errori-pedanti -w -Wextra -Parete
-Indirizzo -Waggregato-ritorno -Ottimizzazioni del ciclo Waggressive -Warray-limiti
-Warray-limiti=n -Wbool-confronta -Wno-attributi -Wno-built-in-macro-redefined
-Wc90-c99-comp -Wc99-c11-comp -Wc++-compatibile -Wc++11-compatibile -Wc++14-compatibile
-Allineamento Wcast -Wcast-qual -Wchar-pedici -Wobbed -Wcommento
-Wcondizionatamente-supportato -Conversione -Wcoverage-mancata corrispondenza -Wdata-ora
-Wcancella-incompleto -No-cpp -Wno-deprecato -Wno-deprecato-dichiarazioni
-No-designato-init -Wdisabled-ottimizzazione -Wno-scartato-qualificazioni
-Wno-scartato-qualificatori-array -Wno-div-per-zero -Wdoppia-promozione -Wempty-corpo
-Wenum-confronta -Wno-endif-etichette -Errore -Errore=* -Errori fatali -Wfloat-uguale
-Formato W -Wformato=2 -Wno-formato-contiene-nul -Wno-format-extra-args
-Wformat-non letterale -Wformat-sicurezza -Wformato-firma -Wformato-y2k
-Wframe-maggiore-di=len -Wno-free-non-oggetto-heap -Wjump-miss-init
-Qualificatori senza nome -Tipi-puntatore-wincompatibili - Wimplicit
-Dichiarazione-funzione-Wimplicit -Wimplicit-int -Winit-auto -Linea vincente
-No-int-conversione -Wno-int-to-puntatore-cast -No-compensazione-non-valida -Winvalid-pch
-Wmaggiore-di=len -Ottimizzazioni del ciclo Wunsafe -Wlogico-op -Wlogiche-non-parentesi
-Wlong-lungo -Wprincipale -Wforse-non inizializzato -Wmemset-trasposto-args -Wmissing-bretelle
-Wmissing-field-inizializzatori -Wmissing-include-dirs -No-multichar -Non nullo
-Wnormalizzato=[nessuna|id|nfc|nfkc]
-Wodr -No-overflow -Wopenmp-simd -Stringhe di lunghezza totale -Imballato
-Wpacked-bitfield-compatibile -Imbottito -Wparentesi -Wpedantic-ms-formato
-Wno-pedante-ms-formato -Wpointer-arith -Wno-pointer-to-int-cast -Wredundant-dichiarazioni
-No-ritorno-indirizzo-locale -Tipo Wreturn -Wpunto-sequenza -Ombra -Wno-ombra-ivar
-Wshift-count-negativo -Woverflow conteggio turni -Wsign-confronta -Wsign-conversione
-Wfloat-conversione -Wsizeof-pointer-memaccess -Wsizeof-array-argoment
-Wstack-protezione -Wstack-utilizzo=len -Wstrict-alias -Wstrict-alias=n
-Wstrict-overflow -Wstrict-overflow=n -Wsuggest-attributo=[puro|const|senza ritorno|formato]
-Suggerimenti-finali-tipi -Suggerisci-metodi-finali -Wsuggerisci-override
-Attributo-formato-mancante -Winterruttore -Wswitch-predefinito -Wswitch-enumerazione -Wswitch-bool
-Wsync-nand -Wsystem-header -Wtrampolini -Scritte -Wtype-limiti -Wundef
-Non inizializzato -Wunknown-pragma -Wno-pragma -Wuncostanti-float suffissi
-Wunusato -Funzione Wunused -Etichetta-Wunused -Wdefinizioni di tipo locale non utilizzate -Wunused-parametro
-Risultato-non-utilizzato -Valore-inutilizzato -Variabile-Wunused -Parametro-non-utilizzato-ma-impostato
-Wunused-ma-set-variable - Cast inutile -Wvariadic-macro
-Wvettore-operazione-prestazioni -Wvla -W registro-volatile-var -Wwrite-stringhe
-Wzero-as-null-pointer-costante
C e Solo obiettivo C Avvertenza Opzioni
-Wbad-funzione-cast -Dichiarazioni-mancanti -Wmissing-tipo-parametro
-Wmissing-prototipi -Wnned-externs -Dichiarazione in stile Wold -Definizione in stile Wold
-Wstrict-prototipi -Wtradizionale -Conversione-tradizionale
-Wdichiarazione-dopo-dichiarazione -Wpointer-segno
Debug Opzioni
-dlettere -spec -macchina del dump -versione dump -fsanitizzare=style -fsanitize-recupera
-fsanitize-recupera=style -fasan-offset-ombra=numero
-fsanitize-unfine-trap-on-error -fcheck-pointer-limits -fchkp-check-tipo-incompleto
-fchkp-first-field-ha-proprio-limiti -fchkp-limiti-stretti
-fchkp-array-stretto-to-più-interno -fchkp-ottimizzare -fchkp-usa-funzioni-stringa-veloce
-fchkp-usa-le-funzioni-stringa-nochk -fchkp-usa-limiti-statici
-fchkp-use-static-const-bounds -fchkp-tratta-zero-dimensione-dinamica-come-infinito
-fchkp-controlla-leggi -fchkp-controlla-leggi -fchkp-verifica-scrittura -fchkp-store-limiti
-fchkp-instrument call -fchkp-strumento-solo contrassegnato -fchkp-use-wrapper
-fdbg-cnt-elenco -fdbg-cnt=lista-controvalore -fdisable-ipa-nome_pass
-fdisable-rtl-nome_pass -fdisable-rtl-nome-pass=elenco-gamma -fdisable-albero-nome_pass
-fdisable-albero-nome-pass=elenco-gamma -fdump-noaddr -fdump-non numerato
-fdump-link-non-numerati -fdump-unità-di-traduzione[-n] -fdump-classe-gerarchia[-n]
-fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline -fdump-pass -fdump-statistiche
-fdump-albero-tutto -fdump-tree-originale[-n] -fdump-tree-ottimizzato[-n] -fdump-albero-cfg
-fdump-albero-alias -fdump-albero-ch -fdump-albero-ssa[-n] -fdump-albero-pre[-n]
-fdump-albero-ccp[-n] -fdump-albero-dce[-n] -fdump-albero-gimple[-crudo] -fdump-albero-dom[-n]
-fdump-albero-dse[-n] -fdump-albero-phiprop[-n] -fdump-albero-phiopt[-n]
-fdump-albero-forwprop[-n] -fdump-tree-copyrename[-n] -fdump-albero-nrv -fdump-albero-vect
-fdump-albero-lavello -fdump-albero-sra[-n] -fdump-albero-forwprop[-n] -fdump-albero-fre[-n]
-fdump-tree-vtable-verifica -fdump-albero-vrp[-n] -fdump-tree-storeccp[-n]
-fdump-final-insns=filetto -fcompare-debug[=opta] -fcompare-debug-secondo
-feliminate-nano2-dups -fno-elimina-tipi-di-debug-inutilizzati
-feliminare-simboli-debug-inutilizzati -femit-class-debug-sempre -accettabile-tipo-passare
-accettabile-tipo-passare=elenco-gamma -fdebug-types-sezione -fmem-report-wpa -fmem-rapporto
-fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-archi -fopt-info
-fopt-info-Opzioni[=filetto] -frandom-seme=numero -fsched-verbose=n -fsel-sched-verboso
-fsel-sched-dump-cfg -fsel-sched-pipelining-verbose -fstack-uso -ftest-copertura
-ftime-rapporto -fvar-tracciamento -fvar-tracciamento-assegnazioni
-fvar-tracciamento-assegnazioni-toggle -g -glivello -gattiva/disattiva -gcoff -gnano-versione -ggdb
-grecord-gcc-switch -gno-record-gcc-switch -gstabs -gstabs+ -gstrict-nano
-gno-severo-nano -gvms -gxcoff -gxcoff+ -gz[=Digitare] -fno-merge-debug-stringhe
-fno-nano2-cfi-asm -fdebug-prefisso-mappa=vecchio=nuovi -femit-struct-debug-baseonly
-femit-struct-debug-ridotto -femit-struct-debug-dettagliato[=lista-specifiche] -p -pag
-stampa-nome-file=biblioteca -print-libgcc-nome-file -stampa-multi-directory
-stampa-multi-lib -stampa-directory-multi-os -print-nome-programma=Programma
-stampa-dir-ricerca -Q -print-sysroot -print-sysroot-headers-suffisso -salva-temps
-save-temps=cwd -salva-temps=obj -tempo[=filetto]
OTTIMIZZAZIONE Opzioni
-ottimizzazioni-loop faggressive -funzioni-false[=n] -falsi-salti[=n]
-etichette-false[=n] -falign-loop[=n] -math-fassociativo -fauto-profilo
-fauto-profilo[=sentiero] -fauto-inc-dec -fbranch-probabilità
-fbranch-target-load-ottimizzare -fbranch-target-load-optimize2 -fbtr-bb-esclusiva
-fcaller-salva -fcheck-data-deps -fcombine-stack-regolazioni -fconserve-stack
-fcompare-elimina -fcprop-registri -salto incrociato -fcse-segue-salti -fcse-salta-blocchi
-fcx-fortran-regole -fcx-intervallo limitato -fdata-sezioni -fdce -framo-ritardato
-fdelete-controlli-puntatore-null -fdevirtualizza -fdevirtualize-speculativamente
-fdevirtualizza-at-ltrans -fdse -fearly-inline -fipa-sra -ottimizzazioni-economiche
-ffat-lto-oggetti -fast-matematica -finite-math-only -float-negozio
-fexcess-precisione=style -in avanti-propagare -ffp-contratto=style -ffunzioni-sezioni
-fgcse -fgcse-dopo-reload -fgcse-las -fgcse-lm -fgraphite-identità -fgcse-sm
-fhoist-carichi-adiacenti -fif-conversione -fif-conversione2 -findirect-inline
-funzioni-finline -funzioni-finline-chiamate-una volta -fine-limit=n
-finline-piccole-funzioni -fipa-cp -fipa-cp-clone -fipa-cp-allineamento -fipa-pta
-fipa-profilo -fipa-puro-const -fipa-riferimento -fipa-icf -fira-algoritmo=algoritmo
-regione-fira=regione -fira-paranco-pressione -fira-loop-pressione -fno-ira-share-save-slot
-fno-ira-share-spill-slot -fira-verboso=n -fisolate-erroneous-path-dereference
-attributo-percorsi-erronei-fisolate -cinque punti -fkeep-inline-funzioni
-fkeep-static-const -flive-range-restringimento -blocco floop -floop-interscambio
-flop-strip-mio -floop-srotolare-e-jam -floop-nido-ottimizzare -floop-parallelizza-tutto
-fla-remat -flto -flto-livello-di-compressione -flto-partizione=alg -flto-report
-flto-report-wpa -funisci-tutte-costanti -fmerge-costanti -fmodulo-sched
-fmodulo-sched-to-regys -fmove-loop-invarianti -fno-ramo-conteggio-reg
-fno-defer-pop -fno-funzione-cse -fno-indovina-ramo-probabilità -fno-in linea
-fno-matematica-errno -fno-spioncino -fno-spioncino2 -fno-sched-interblocco -fno-sched-spec
-fno-signed-zero -fno-toplevel-riordina -fno-trapping-matematica
-fno-zero-inizializzato-in-bss -puntatore-frame-fomit -A-CALLS FOPTIMIZZAZIONE
-fpartial-inline -fpeel-loop -fpredictive-comune -fprefetch-loop-array
-fprofile-rapporto -fcorrezione del profilo -fdir-profilo=sentiero -fprofile-genera
-fprofile-genera=sentiero -fprofile-uso -fuso-profilo=sentiero -fprofile-valori
-fprofile-reorder-funzioni - matematica-freciproca Senza -frename-registri
-blocchi-freddo -blocchi-e-partizioni di freorder -funzioni-freorder
-frerun-cse-dopo-loop -Freschedule-moduli-schemate -matematica-fondamentale
-fsched2-usa-superblocchi -fsched-pressione -fsched-spec-load
-fsched-spec-carico-pericoloso -fsched-stallo-insns-dep[=n] -fsched-stallo-insns[=n]
-fsched-gruppo-euristico -fsched-percorso-critico-euristico -fsched-spec-insn-euristica
-fsched-rank-euristico -fsched-last-insn-euristica -fsched-dep-count-euristico
-fschedule-fusione -fschedule-insns -fschedule-insns2 -fsection-ancore
-fprogrammazione-selettiva -fprogrammazione-selettiva2 -fsel-sched-pipelining
-fsel-sched-pipelining-outer-loop -interposizione-fsemantica -finvolucro termoretraibile
-fsegnalazione-nans -fcostante-di-precisione-singola -fsplit-ivs-in-unroller
-fsplit-wide-tipi -fssa-phiopt -fstack-protettore -fstack-protettore-tutto
-fstack-protettore-forte -fstack-protector-esplicito -fstdarg-opz -fstrict-alias
-fstrict-overflow -fthread-salta -tracer -ftree-bit-ccp -ftree-built-in-call-dce
-ftree-ccp -ftree-ch -ftree-coalesce-inline-vars -ftree-coalesce-vars -ftree-copia-prop
-ftree-rinominacopia -ftree-dce -ftree-dominatore-opt -ftree-dse -ftree-forwprop
-ftree-fre -ftree-loop-se-converti -ftree-loop-if-convert-stores -ftree-loop-im
-ftree-phiprop -distribuzione-ftree-loop -ftree-loop-distribuire-pattern
-ftree-loop-ivcanon -ftree-loop-lineare -ftree-loop-ottimizzare -ftree-loop-vettorizza
-ftree-parallelizza-loop=n -ftree-pre -ftree-parziale-pre -ftree-pta -ftree-riassoc
-ftree-lavello -ftree-slsr -ftree-sra -ftree-switch-conversione -fusione a coda di albero
-ftree-ter -ftree-vettorizzare -ftree-vrp -divertimento alla volta -funroll-tutti i loop
-funroll-loop -ottimizzazioni funsafe-loop -funsafe-math-ottimizzazioni
-funswitch-loop -fipa-ra -fespansione-variabile-in-unroller -fvect-cost-modello -fvpt
-fweb -fintero-programma -fwpa -plug-in-fuse-linker --parami Nome=APPREZZIAMO -O -O0 -O1 -O2
-O3 -Voi - Veloce -Ogg
preprocessore Opzioni
-Adomanda=rispondere -UN-domanda[=rispondere] -C -dd -dI -dM -dN -Dmacro[=def] -E -H
-idirafter dir -includere filetto -imacro filetto -iprefisso filetto -icon prefisso dir
-icon prefisso prima dir -isistema dir -imultilib dir -isysroot dir -M -MM -MF -MG
-deputato -MQ - MT -nostdin -P -fdebug-cpp -ftrack-macro-espansione -fdirectory-di-lavoro
-rimappa -trigrafie -undif -Umacro -Wp,opzione -Xpreprocessore opzione -no-integrato-cpp
Assembler Opzione
-Wa,opzione -Xassemblatore opzione
link Opzioni
nome-file-oggetto -fuse-ld=Links -lbiblioteca -nostartfiles -nodefaultlibs -nostdlib
-torta -rdinamico -s -statico -static-libgcc -static-libstdc++ -statico-libasan
-statico-libtsan -static-liblsan -statico-libubsan -static-libmpx -static-libmpxwrapper
-condiviso -libgcc-condivisa -simbolico -T copione -Wl,opzione -Xlinker opzione -u simbolo -z
parola chiave
elenco Opzioni
-Bprefisso -Idir -iplugindir=dir -quotodir -Ldir -specifiche=filetto -IO- --sysroot=dir
--no-sysroot-suffisso
Confezionatrici Verticali VFFS Dipendente Opzioni
AAArch64 Opzioni -mabi=Nome -big endian -mittle-endian -mgeneral-regs-only
-mcmodel=piccolo -mcmodel=piccolo -mcmodel=grande -mstrict-align -puntatore-cornice-foglia-momit
-mno-omit-leaf-frame pointer -mtls-dialetto=desc -mtls-dialect=tradizionale
-mfix-corteccia-a53-835769 -mno-fix-corteccia-a53-835769 -mfix-corteccia-a53-843419
-mno-fix-corteccia-a53-843419 -marzo=Nome -mcpu=Nome -mtune=Nome
Adatta Epifania Opzioni -metà-file-reg -mprefer-breve-insn-regs -mbranch-costo=num
-mcsposta -mnop=num -msoft-cmpsf -msplit-lohi -mpost-inc -mpost-modifica
-mstack-offset=num -mround-più vicino -mlong-chiamate -mshort-call -mpiccolo16 -modalità-mfp=modo
-mvect-doppio -max-vect-align=num -msplit-vecmove-presto -m1reg-reg
ARC Opzioni -barrel-shifter -mcpu=cpu -mA6 -mARC600 -mA7 -mARC700 -mdpfp
-mdpfp-compatto -mdpfp-veloce -mno-dpfp-lrsr -mea -mno-mpy -mm32x16 -mmul64 -mnorma
-mspfp -mspfp-compatto -mspfp-veloce -msimd -msoft-flottante -mswap -mcrc -mdsp-pacchetto -mdvbf
-Mlock -mmac-d16 -MMAC-24 -mrtc -mswape -mtelefonia -mxy -dimensione -mannotate-allineare
-marclinox -marclinux_prof -mepilogo-cfi -mlong-chiamate -medium-chiamate -msdata
-mucb-mcount -mcache volatile -chiamata-maligna -mauto-modifica-reg -mbbit-spioncino -mno-brcc
-mcase-vettore-pcrel -mcompact-casesi -mno-cond-exec -mearly-cbranchsi -meexpand-addi
-carichi-minded -mlra -mlra-priorità-nessuna -mlra-priority-compatto mlra-priorità-
non compatto -mno-millicodice -codice-misto -mq-classe -Mrcq -mRcw -msize-livello=livello
-mtune=cpu -costo multiplo=num -munalign-prob-soglia=probabilità
ARM Opzioni -mapcs-frame -mno-aps-frame -mabi=Nome -mapcs-stack-check
-mno-apc-stack-check -mapcs-flottante -mno-apc-float -mapcs-rientrante
-mno-apc-rientrante -msched-prologo -mno-sched-prolog -mittle-endian -big endian
-mfloat-abi=Nome -mfp16-formato=Nome -mthumb-interazione -mno-pollice-interwork -mcpu=Nome
-marzo=Nome -mfpu=Nome -mtune=Nome -mprint-tune-info -mstruttura-dimensione-confine=n
-mabort-su-mancato ritorno -mlong-chiamate -mno-chiamate lunghe -mssingle-pic-base
-mno-singola-pic-base -registro-mpic=reg -mnop-fun-dllimport -nome-funzione-mpoke
- pollice -marma -mtpcs-telaio -mtpcs-foglia-frame -mcaller-super-interazione
-mcallee-super-interazione -mtp=Nome -mtls-dialetto=dialetto -mword-rilocazioni
-mfix-corteccia-m3-ldrd -accesso-munitario -mneon-per-64bit -mslow-flash-dati
-masm-sintassi-unificata -mlimitarlo
AVR Opzioni -mmcu=MCU -macculate-args -mbranch-costo=costo -mcall-prologhi -menta8
-mn_flash=Taglia -mno-interrupt -rilassati -mrmw -mstrict-X -pila piccola -nodevicelib
-Waddr-spazio-convertito
Blackfin Opzioni -mcpu=cpu[-sirevisione] -msim -puntatore-cornice-foglia-momit
-mno-omit-leaf-frame pointer -mspecld-anomalia -mno-specld-anomalia -mcsync-anomalia
-mno-csync-anomalia -mbasso-64k -mno-low64k -mstack-check-l1 -mid-libreria-condivisa
-mno-id-libreria-condivisa -m-id-libreria condivisa=n -mleaf-id-libreria-condivisa
-mno-leaf-id-libreria-condivisa -msep-dati -mno-set-data -mlong-chiamate -mno-chiamate lunghe
-mfast-fp -minline-plt -multicore -mcorea -mcoreb -msdram -microfono
C6X Opzioni -big endian -mittle-endian -marzo=cpu -msim -msdati=sdata-tipo
CRIS Opzioni -mcpu=cpu -marzo=cpu -mtune=cpu -mmax-stack-frame=n
-melinux-stacksize=n -metrax4 -metrax100 -mpdebug -mcc-init -mno-effetti collaterali
-mstack-align -mdata-align -mconst-align -m32 bit -m16 bit -m8 bit
-mno-prologo-epilogo -mno-gotplt -melf -maut -Melinux -mlinux -sim -sim2
-mmul-bug-soluzione alternativa -mno-mul-bug-soluzione
CR16 Opzioni -mmac -mcr16cplus -mcr16c -msim -menta32 -mbit-ops -mdata-modello=modello
Darwin Opzioni -tutto_carico -client_consentito -arco -arch_errors_fatale -solo_arco
-bind_at_load -fascio -caricatore_bundle -nome del cliente -versione_compatibilità
-Versione corrente -striscia_morta -file-di-dipendenza -dylib_file -dylinker_nome_installazione
-dinamico -libreria dinamica -elenco_simboli_esportati -elenco file -spazio dei nomi_piatto
-force_cpusubtype_ALL -force_flat_namespace -headerpad_max_install_names -iframework
-base_immagine -dentro -nome_installazione -keep_private_externs -multi_modulo
-moltiplicare_definito -moltiplicare_definito_non utilizzato -noall_load
-no_dead_strip_inits_and_terms -nofix preassociazione -nomultidef -nessun previncolo
-noseglinkedit -dimensione_paginazero -prelegare -prebind_all_twolevel_modules -Private_Bundle
-read_only_relocas -settalign -settooggettisimboli -perché -seg1ind -setta creare
-settooggettisimboli -settore -segadr -segs_read_only_addr -segs_read_write_addr
-seg_addr_tabella -seg_addr_nome_file_tabella -Seglinkedit -segprot -segs_read_only_addr
-segs_read_write_addr -modulo_singolo -statico -sub_libreria -sub_ombrello
-spazio dei nomi a due livelli -ombrello -non definito -lista_simboli_non esportati
-weak_reference_dismatches -cosa è stato caricato -F -gusto -pieno -mmacosx-versione-min=versione
-mkernel -monete-byte-bool
Dicembre Alpha Opzioni -mno-fp-regs -msoft-flottante -mieee -mieee-con-inesatto
-mieee-conforme -mfp-modalità trap=modo -mfp-modalità-arrotondamento=modo -mtrap-precisione=modo
-mbuild-costanti -mcpu=tipo di CPU -mtune=tipo di CPU -mbwx -mmax -mfix -mcix
-mfloat-vax -mfloat-ieee -Mexplicit-relocs -msmall-data -mlarge-dati -mtesto-piccolo
-mlarge-testo -memoria-latenza=tempo
FR30 Opzioni -mpiccolo-modello -mno-lsim
VRF Opzioni -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 -mhard-flottante -msoft-flottante
-maloc-cc -mfisso-cc -mdparola -mno-dword -mdoppio -mno-doppio -media -mno-media
-mmulad -mno-mulad -mfdpic -minline-plt -mgprel-ro -multilib-libreria-pic
-mlinked-fp -mlong-chiamate -etichette-maligne -mlibrary-pic -mac-4 -mac-8 -mpack
-mno-pacchetto -mno-flag -mcond-mossa -mno-cond-mossa -moptimize-membar
-mno-ottimizzare-membar -mscc -mno-scc -mcond-exec -mno-cond-exec -mvliw-ramo
-mno-vliw-ramo -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec
-mno-nested-cond-exec -mtomcat-statistiche -mTLS -ml -mcpu=cpu
GNU / Linux Opzioni -mglibc -muclibc -mbionico -mandroide -tno-android-cc -tno-android-ld
H8 / 300 Opzioni -rilassati -mh -SM -min -mexr -mno-esr -menta32 -maligno-300
HPPA Opzioni -marzo=tipo di architettura -mdisable-fpregs -mdisable-indicizzazione
-mfast-chiamate-indirette -mgas -mgnu-ld -mhp-ld -mintervallo-fisso=registro-intervallo
-m salto in ritardo -mlinker-opz -mlong-chiamate -mlong-load-store -mno-disabilita-fpregs
-mno-disable-indicizzazione -mno-chiamate-indirette-veloci -mnogas -mno-salto-in-ritardo
-mno-archivio-caricamento-lungo -mno-runtime-portatile -mno-morbido-flottante -mno-spazio-regs
-msoft-flottante -MPA-RISC-1-0 -MPA-RISC-1-1 -MPA-RISC-2-0 -portable-runtime
-msprogramma=tipo di CPU -mspace-reg -msio -mwsio -Munix =unix-std -nolibldl -statico
-threads
IA-64 Opzioni -big endian -mittle-endian -mgnu-as -mgnu-ld -mno-foto
-mvolatile-asm-stop -mregister-nomi -msdata -mno-sdata -mcostante-gp -mauto-pic
-mfuso-pazzo -minline-float-divide-min-latenza -minline-float-divide-max-throughput
-mno-inline-float-divide -minline-int-divide-min-latenza
-minline-int-divide-max-throughput -mno-inline-int-divide -minline-sqrt-min-latenza
-minline-sqrt-max-throughput -mno-inline-sqrt -mdwarf2-asm -merda-stop-bit
-mintervallo-fisso=registro-intervallo -mtls-dimensione=dimensione tls -mtune=tipo di CPU -milp32 -mlp64
-msched-br-data-spec -msched-ar-data-spec -spec-controllo-msched -msched-br-in-data-spec
-msched-ar-in-data-spec -msched-in-control-spec -msched-spec-ldc
-msched-spec-controllo-ldc -msched-prefer-non-data-spec-insns
-msched-prefer-non-spec-insns -msched-stop-bits-dopo-ogni-ciclo
-msched-count-spec-in-critical-path -msel-sched-dont-check-control-spec
-msched-fp-mem-deps-a-costo-zero -msched-max-memory-insns-hard-limit
-msched-max-memoria-insns=max-insns
LM32 Opzioni -mbarrel-shift-abilitato -mdivide abilitato -mmultiply-abilitato
-msign-extend-abilitato -abilitato per l'utente
M32R/D Opzioni -m32r2 -m32rx -m32r -mdebug -maligno-loop -mno-align-loop
-tasso di emissione=numero -mbranch-costo=numero -mmodello=codice-dimensione-modello-tipo -msdati=sdata-
Digitare -mno-flush-funzione -mflush-funzione=Nome -mno-trappola-incasso -mflush-trappola=numero -G num
M32C Opzioni -mcpu=cpu -msim -memreg=numero
M680x0 Opzioni -marzo=arco -mcpu=cpu -mtune=sintonizzare -M68000 -M68020 -m68020-40
-m68020-60 -M68030 -M68040 -M68060 -mcpu32 -M5200 -m5206e -m528x -M5307 -M5407
-mcfv4e -mbitfield -mno-campo di bit -mc68000 -mc68020 -mnobitfield -mrtd -mno-rtd
-div -mno-div -mbreve -mno-corto -mhard-flottante -M68881 -msoft-flottante -mpcrel
-maligno-int -mstrict-align -msep-dati -mno-set-data -m-id-libreria-condivisa=n
-mid-libreria-condivisa -mno-id-libreria-condivisa -Mxgot -mno-xgot
MCore Opzioni -illuminato -mno-illuminato -div -mno-div -mrelax-immediati
-mno-relax-immediato -mwide-bitfield -mno-bitfields -m4byte-funzioni
-mno-4byte-funzioni -mcallgraph-dati -mno-callgraph-dati -mslow-byte
-mno-lento-byte -mno-lsim -mittle-endian -big endian -M210 -M340
-mstack-incremento
MeP Opzioni -mabsdiff -centro commerciale -la media -mbasato=n -mbitop -mc=n -mclip
-mconfig=Nome -mcp -mcop32 -mcop64 -mivc2 -mcc -div -meb -mel -mio-volatile -ml
-mleadz -mm -minmax -multiplo -mno-opt -ripetere -SM -msatur -msdram -msim -msimnovec
-mtf -minuscolo=n
Microfiamma Opzioni -msoft-flottante -mhard-flottante -msmall-divide -mcpu=cpu -Mmmpy
-mxl-morbido-mul -mxl-soft-div -mxl-barile-shift -mxl-pattern-confronta -mxl-stack-check
-mxl-gp-opz -mno-clearbss -mxl-moltiplica-alto -mxl-float-convert -mxl-float-sqrt
-big endian -mittle-endian -mxl-riordina -modalità-mxl-modello di app
MIPS Opzioni -IL -EB -marzo=arco -mtune=arco -mips1 -mips2 -mips3 -mips4
-mips32 -mips32r2 -mips32r3 -mips32r5 -mips32r6 -mips64 -mips64r2 -mips64r3
-mips64r5 -mips64r6 -mips16 -mno-mips16 -mflip-mips16 -minterlink-compresso
-mno-interlink-compresso -minterlink-mips16 -mno-interlink-mips16 -mabi=abi
-mabicalls -mno-abicali -mcondiviso -mno-condiviso -plt -mno-plt -Mxgot -mno-xgot
-mgp32 -mgp64 -mfp32 -mfpxx -mfp64 -mhard-flottante -msoft-flottante -mno-flottante
-msingle-flottante -mdouble-flottante -modd-spreg -mno-strano-spreg -mabs=modo -mnan=codifica
-mdsp -mno-dsp -mdspr2 -mno-dspr2 -mmcu -mmno-mcu -meva -mno-eva -virt -mnovirt
-mxp -mno-xpa -mmicromips -mno-micromi -mfpu=tipo fpu -msmartmips -mno-smartmips
-single-deteriorato -mno-singolo-accoppiato -mdmx -mno-mdmx -mips3d -mno-mips3d -mm
-mno-mt -mlsc -mno-llsc -mlungo64 -mlungo32 -msim32 -mno-sim32 -Gnum
-mlocal-sdata -mno-local-sdata -mextern-sdata -mno-extern-sdata -mgpopt -mno-gopt
-dati-membri -mno-dati-incorporati -muninit-const-in-rodata
-mno-uninit-const-in-rodata -mcode-leggibile=regolazione -msplit-indirizzi
-mno-split-indirizzi -Mexplicit-relocs -mno-reloc-esplicito -mcheck-divisione-zero
-mno-check-zero-divisione -mdivide-trappole -mdivide-interruzioni -Mmmpy -mno-memcpy
-mlong-chiamate -mno-chiamate lunghe -mamma -mno-pazzo -mimad -mno-imaddd -mfuso-pazzo
-mno-fuso-madd -nocpp -mfix-24k -mno-fix-24k -mfix-r4000 -mno-fix-r4000
-mfix-r4400 -mno-fix-r4400 -mfix-r10000 -mno-fix-r10000 -mfix-rm7000 -mno-fix-rm7000
-mfix-vr4120 -mno-fix-vr4120 -mfix-vr4130 -mno-fix-vr4130 -mfix-sb1 -mno-correzione-sb1
-mflush-funzione=func -mno-flush-funzione -mbranch-costo=num -mbranch-probabile
-mno-ramo-probabile -eccezioni-mfp -mno-fp-eccezioni -mvr4130-align -mno-vr4130-align
-msynci -mno-synci -mrelax-pic-chiamate -mno-relax-pic-chiamate -mmcount-ra-indirizzo
MMIX Opzioni -mlibfuncs -mno-libfuncs -mepsilon -mno-epsilon -mabi = gnu
-mabi=mixware -mzero-estendere -mknuthdiv -mtoplevel-simboli -melf -mbranch-prevedere
-mno-ramo-previsione -indirizzi-base -mno-indirizzi-base -msuscita singola
-mno-uscita singola
MN10300 Opzioni -Mult-bug -mno-multi-bug -Mno-Am33 -mam33 -mam33-2 -mam34 -mtune=processore-
Digitare -mpuntatore-di-ritorno-su-d0 -mno-crt0 -rilassati -miw -msetlb
Moxie Opzioni -meb -mel -mmul.x -mno-crt0
MSP430 Opzioni -msim -masm-esadecimale -mmcu= -mcpu= -mgrande -mpiccolo -rilassati -mhwmult= -mint
NDS32 Opzioni -big endian -mittle-endian -regs-ridotti -mfull-regs -mcmov -mno-cmov
-mperf-est -mno-perf-est -mv3push -mno-v3push -m16bit -mno-16 bit -misr-dimensione-vettoriale=num
-mcache-dimensione-blocco=num -marzo=arco -mcmodello=codice-modello -mctor-dtor -rilassati
Nios II Opzioni -G num -mgpopt=opzione -mgpopt -mno-gpopt -mel -meb -mno-bypass-cache
-mbypass-cache -mno-cache-volatile -mcache-volatile -mno-fast-sw-div -mfast-sw-div
-mhw-mul -mno-hw-mul -mhw-mulx -mno-hw-mulx -mno-hw-div -MHW-div -mpersonalizzato-locanda=N
-mno-personalizzato-locanda -mcustom-fpu-cfg=Nome -mal -mpiccolo -msys-crt0=Nome -msys-lib=Nome
Nvidia PTX Opzioni -M32 -M64 -mmainkernel
PDP-11 Opzioni -mfpu -msoft-flottante -mac0 -mno-ac0 -M40 -M45 -M10 -mbcopia
-mbcopy-integrato -menta32 -mno-int16 -menta16 -mno-int32 -mfloat32 -mno-flottante64
-mfloat64 -mno-flottante32 -mabshi -mno-abshi -mbranch-costoso -mbranch-economico
-munix-asm -mdec-asm
picoChip Opzioni -mae=ae_type -mvliw-lookahead=N -msimbolo-come-indirizzo
-mno-inefficiente-avvisi
PowerPC Opzioni Vedere Opzioni RS/6000 e PowerPC.
RL78 Opzioni -msim -mmul=nessuno -mmul=g13 -mmul=rl78 -m64bit-raddoppia -m32bit-raddoppia
RS/6000 e PowerPC Opzioni -mcpu=tipo di CPU -mtune=tipo di CPU -mcmodello=codice-modello
-mpowerpc64 -maltivec -mno-altivoc -mpowerpc-gpopt -mno-powerpc-gpopt
-mpowerpc-gfxopt -mno-powerpc-gfxopt -mmfcrf -mno-mfcrf -mpocntb -mno-popcntb
-mpocntd -mno-popcntd -mfprnd -mno-fprnd -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr
-mhard-dfp -mno-hard-dfp -mfull-toc -minimal-toc -mno-fp-in-toc -mno-somma-in-toc
-M64 -M32 -mxl-comp -mno-xl-comp -mpe -potere-maligno -maligno-naturale
-msoft-flottante -mhard-flottante -mmultiplo -mno-multiplo -msingle-flottante -mdouble-flottante
-msemplice-fpu -mstringa -mno-stringa -aggiornamento -mno-aggiornamento -mavoid-indirizzi-indicizzati
-mno-evita-indirizzi-indicizzati -mfuso-pazzo -mno-fuso-madd -mbit-align
-mno-bit-align -mstrict-align -mno-strict-align -mrilocabile -mno-rilocabile
-mrelocatable-lib -mno-relocatable-lib -toc -mno-toc -poco -mittle-endian
-grande -big endian -mdynamic-no-pic -maltivec -mswdiv -mssingle-pic-base
-prioritize-restricted-insns=priorità -msched-costoso-dep=dipendenza_tipo
-minsert-sched-nops=schema -mcall-sysv -mcall-netbsd -maix-struct-ritorno
-msvr4-struct-ritorno -mabi=abi-tipo -msecure-plt -mbss-plt
-mblock-move-inline-limit=num -Misel -mno-isel -misel=sì -Misel=n -mspe -mno-spe
-mspe=sì -mspe=n - deteriorato -mgen-cell-microcodice -mwarn-cell-microcodice -mvrsave
-mno-vrsave -mmhw -mno-mulhw -mdlmzb -mno-dlmzb -mfloat-gprs=sì -mfloat-gprs=no
-mfloat-gprs=singolo -mfloat-gprs=doppio -mprototipo -mno-prototipo -msim -MMvme
-pazzi - coltello giallo -membro -msdata -msdati=optare -mvxworks -G num -pthread -mrecip
-mrecip=optare -mno-ricetta -mrecip-precisione -mno-recip-precisione -mveclibabi=Digitare -mfriz
-mno-friz -punti-di-funzioni-annidate -mno-puntatori-a-funzioni-annidate
-msave-toc-indiretto -mno-salva-toc-indiretto -mpower8-fusione -mno-mpower8-fusione
-mpower8-vettore -mno-power8-vettore -mcrypto -mno-cripto -mmovimento diretto -mno-movimento-diretto
-mquad-memoria -mno-quad-memoria -mquad-memoria-atomica -mno-quad-memoria-atomica
-mcompat-align-parm -mno-compat-align-parm -mupper-regs-df -mno-regs-superiori-df
-mupper-regs-sf -mno-regs-superiori-sf -mupper-reg -mno-reg-superiori
RX Opzioni -m64bit-raddoppia -m32bit-raddoppia -fpu -nofpu -mcpu= -bbig-endian-data
-mlittle-endian-dati -msmall-data -msim -mno-sim -mas100-sintassi -mno-as100-syntassi
-rilassati -mmax-dimensione-costante= -registro-menta= -pid -mno-warn-multiple-fast-interrupt
-msave-acc-in-interrupt
S / 390 e zSerie Opzioni -mtune=tipo di CPU -marzo=tipo di CPU -mhard-flottante -msoft-flottante
-mhard-dfp -mno-hard-dfp -mlong-doppio-64 -mlong-doppio-128 -mbackchain
-mno-backchain -packed-stack -pila-mno-imballata -msmall-exec -mno-piccolo-exec
-mmvcle -mno-mvcle -M64 -M31 -mdebug -mno-debug -mesa -mzarca -mtpf-traccia
-mno-tpf-traccia -mfuso-pazzo -mno-fuso-madd -mwarn-dimensione-frame -mwarn-stack dinamico
-mstack-dimensioni -mstack-guardia -mhotpatch=mezze parole,mezze parole
Punti Opzioni -meb -mel -mnhwloop -mul -mmac -punteggio 5 -mscore5u -punteggio 7 -mscore7d
SH Opzioni -M1 -M2 -m2e -m2a-nofpu -m2a-solo-singolo -m2a-singolo -m2a -M3 -m3e
-m4-nofpu -m4-solo-singolo -m4-singolo -M4 -m4a-nofpu -m4a-solo-singolo -m4a-singolo
-m4a -m4al -m5-64media -m5-64media-nofpu -m5-32media -m5-32media-nofpu -m5-compatto
-m5-compatto-nofpu -mb -ml -mdalign -rilassati -migtable -mfmovd -mitachi -mrenesa
-mno-renesas -mnomac salva -mieee -mno-ieee -mbitop -dimensione -minline-ic_invalidate
-mpdstruct -mspazio -prefergot -modalità utente -multicosto=numero -mdiv=strategia
-mdivsi3_libfunc=Nome -mintervallo-fisso=registro-intervallo -indirizzamento mirato
-mgettrcosto=numero -mpt-fisso -maccumulate-in-uscita-args -minvalid-simboli
-modello-matomic=modello-atomico -mbranch-costo=num -mzdcramo -mno-zdcramo
-mcbranch-forza-ritardo-slot -mfuso-pazzo -mno-fuso-madd -mfsca -mno-fsca -mfsrra
-mno-fsrra -pretendere-cmove -mtas
Solaris 2 Opzioni -mclear-hwcap -mno-clear-hwcap -testo-impuro -mno-testo-impuro
-pthread -pthread
SPARC Opzioni -mcpu=tipo di CPU -mtune=tipo di CPU -mcmodello=codice-modello -memory-model=me-
modello -M32 -M64 -mapp-regs -mno-app-regs -mfaster-struct -mno-strutture-più veloci
-mpiatto -mno-piatto -mfpu -mno-fpu -mhard-flottante -msoft-flottante -mhard-quad-flottante
-msoft-quad-float -mstack-bias -mno-stack-bias -munaligned-doppi
-mno-non-allineato-doppio -modalità muser -mno-modalità-utente -mv8plus -mno-v8plus -mvis
-mno-vis -mvis2 -mno-vis2 -mvis3 -mno-vis3 -mcbcond -mno-cbcond -mfmf -mno-fmaf
-mpocc -mno-popc -mfix-at697f -mfix-ut699
SPU Opzioni -mwarn-reloc -errore-reloc -msafe-dma -munsafe-dma -mbranch-suggerimenti
-mpiccolo-mem -mgrande-mem -mstdmain -mintervallo-fisso=registro-intervallo -mea32 -mea64
-conversione-spazio-indirizzo -conversione-spazio-indirizzo-mno -dimensione-mcache=dimensione della cache
-aggiornamenti-matomic -aggiornamenti mno-atomici
Sistema V Opzioni -Qy -Qn -SI,percorsi -Ym,dir
TILE-Gx Opzioni -mcpu=CPU -M32 -M64 -big endian -mittle-endian -mcmodello=codice-modello
TILEPro Opzioni -mcpu=cpu -M32
V850 Opzioni -mlong-chiamate -mno-chiamate lunghe -mep -mno-ep -funzione-mprolog
-mno-prolog-funzione -mspazio -mtda=n -msda=n -mzda=n -mapp-regs -mno-app-regs
-mdisable-chiamata -mno-disabilita-callt -mv850e2v3 -mv850e2 -mv850e1 -mv850es -mv850e
-mv850 -mv850e3v5 -Mloop -rilassati -mlong-salti -msoft-flottante -mhard-flottante -mgcc-abi
-mrh850-abi -grande-interruttore
VAX Opzioni -mg -mgnu -munix
Visium Opzioni -mdebug -msim -mfpu -mno-fpu -mhard-flottante -msoft-flottante -mcpu=tipo di CPU
-mtune=tipo di CPU -modalità msv -modalità muser
VMS Opzioni -codici-di-ritorno-mvms -mdebug-main=prefisso -mmalloc64 -mpointer-dimensione=Taglia
VxWorks Opzioni -mrtp -non statico -Bstatico -Bdinamica -Xbind-pigro -Xbind-ora
x86 Opzioni -mtune=tipo di CPU -marzo=tipo di CPU -mtune-ctrl=Elenco delle caratteristiche
-mdump-tune-caratteristiche -mno-predefinito -mfpmth=unità -masm=dialetto -mno-fantasia-matematica-387
-mno-fp-ret-in-387 -msoft-flottante -mno-wide-moltiplicazione -mrtd -maligno-doppio
-preferred-stack-boundary=num -confine-stack-minima=num -mld -mcx16 -msaf
-Movbe -mcrc32 -mrecip -mrecip=optare -mvzeroupper -mprefer-avx128 -mmmmx -msse -msse2
-msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -max -mavx2 -mavx512f -mavx512pf -mavx512er
-mavx512cd -msha -maes -mpclmul -mfsgsbase -signorrnd -mf16c -mfma -mprefetchwt1
-mcflushopt -mxsavec -mxsave -msse4a -m3dora -mpocnt -mamm -mbmi -mtbm -mfma4 -mxop
-mlzcnt -mbmi2 -mfxr -mxsalva -mxsaveopz -mrtm -mlwp -mmpx -mmaspettax -mthread
-mno-align-stringops -minline-all-stringops -minline-stringops-dinamicamente
-mstringop-strategia=alg -strategia-mmemcpy=strategia -mmemset-strategia=strategia
-mpush-args -maccumulate-in-uscita-args -m128bit-lungo-doppio -m96bit-lungo-doppio
-mlong-doppio-64 -mlong-doppio-80 -mlong-doppio-128 -mregparm=num -msseregparm
-mveclibabi=Digitare -mvect8-ret-in-mem -mpc32 -mpc64 -mpc80 -mstackrealign
-puntatore-cornice-foglia-momit -mno-zona-rossa -mno-tls-direct-seg-refs -mcmodello=codice-modello
-mabi=Nome -modalità-madre=modo -M32 -M64 -mx32 -M16 -mlarge-data-soglia=num
-msse2avx -mfentry -mrecord-mcount -mnop-mcount -m8bit-idiv
-mavx256-split-carico non allineato -mavx256-split-negozio-non-allineato -dati-maligni=Digitare
-mstack-protezione-guardia=guardia
x86 Windows Opzioni -mconsole -Mcygwin -mno-cygwin -mdll -mnop-fun-dllimport -mthread
-municodice -mwin32 -mfinestre -fno-set-stack-eseguibile
Xstormy16 Opzioni -msim
Xtensa Opzioni -mconst16 -mno-const16 -mfuso-pazzo -mno-fuso-madd -mforce-nessuna-immagine
-mserializzare-volatile -mno-serializza-volatile -mtext-sezione-letterali
-mno-testo-sezione-letterali -mtarget-align -mno-target-align -chiamate lunghe
-mno-chiamate lunghe
zSerie Opzioni Vedere Opzioni S/390 e zSeries.
Code Generazione Opzioni
-fcall-salvato-reg -fcall-usato-reg -fissa-reg -feccezioni -fnon-chiamata-eccezioni
-fdelete-dead-eccezioni -funwind-tavoli -tabelle-svolgimento-fasincrono -fno-gnu-unico
-direttiva-dimensione-finhibit -funzioni-strumento
-funzioni-strumento-exclude-function-list=sym,sym, ...
-funzioni-strumento-escludi-elenco-file=filetto,filetto, ... -fno-comune -fno-identificatore
-fpcc-struct-ritorno -fpic -fPIC -fpie -fPIE -fno-salto-tabelle -interruttori frecord-gcc
-freg-struct-ritorno -fshort-enum -fshort-doppio -fshort-wchar -fverboso-asm
-fpack-struttura[=n] -fstack-controllo -fstack-limite-register=reg -fstack-limit-simbolo=sym
-fno-stack-limite -fsplit-stack -sottolineatura-sottolineatura -ftls-modello=modello
-fstack-riutilizzo=livello_riuso -ftrapv -fwrapv -fbounds-check
-fvisibilità=[difetto|interno|nascosto|protetta] -fstrict-bitfield-volatili
-fsync-libcalls
Opzioni Controllo , il Genere of Uscita
La compilazione può comportare fino a quattro fasi: pre-elaborazione, compilazione vera e propria, montaggio e
collegamento, sempre in quest'ordine. GCC è in grado di pre-elaborare e compilare diversi
file in più file di input dell'assemblatore o in un file di input dell'assemblatore; poi
ogni file di input dell'assemblatore produce un file oggetto e il collegamento combina tutto l'oggetto
file (quelli appena compilati e quelli specificati come input) in un file eseguibile.
Per ogni dato file di input, il suffisso del nome del file determina che tipo di compilazione è
fatto:
filetto.c
Codice sorgente C che deve essere preelaborato.
filetto.i
Codice sorgente C che non deve essere preelaborato.
filetto.ii
Codice sorgente C++ che non deve essere preelaborato.
filetto.m
Codice sorgente Objective-C. Nota che devi collegarti con il liobjc libreria per fare un
Programma di lavoro Objective-C.
filetto.mi
Codice sorgente Objective-C che non deve essere preelaborato.
filetto.mm
filetto.M
Codice sorgente Objective-C++. Nota che devi collegarti con il liobjc libreria da fare
un programma Objective-C++ funziona. Notare che .M si riferisce a una lettera maiuscola M.
filetto.mii
Codice sorgente Objective-C++ che non deve essere preelaborato.
filetto.h
File di intestazione C, C++, Objective-C o Objective-C++ da trasformare in un file di intestazione precompilato
header (predefinito) o file di intestazione C, C++ da trasformare in una specifica Ada (tramite il
-fdump-ada-spec interruttore).
filetto. Cc
filetto.cp
filetto.cxx
filettocpp
filettocpp
filetto.c++
filetto.C
Codice sorgente C++ che deve essere preelaborato. Nota che in .cxx, le ultime due lettere
devono essere entrambi letteralmente x. Allo stesso modo, .C si riferisce a una lettera maiuscola C.
filetto.mm
filetto.M
Codice sorgente Objective-C++ che deve essere preelaborato.
filetto.mii
Codice sorgente Objective-C++ che non deve essere preelaborato.
filetto.H H
filetto.H
filetto.cv
filetto.hxx
filetto.hpp
filetto.hpp
filetto.h++
filetto.tcc
File di intestazione C++ da trasformare in un'intestazione precompilata o in una specifica Ada.
filetto.f
filetto.per
filetto.ftn
Risolto il problema con il codice sorgente Fortran che non doveva essere preelaborato.
filetto.F
filetto.PER
filetto.fpp
filetto.FPP
filetto.FTN
Risolto il problema con il codice sorgente Fortran che deve essere preelaborato (con il tradizionale
preprocessore).
filetto.f90
filetto.f95
filetto.f03
filetto.f08
Codice sorgente Fortran in formato libero che non deve essere preelaborato.
filetto.F90
filetto.F95
filetto.F03
filetto.F08
Codice sorgente Fortran in formato libero che deve essere preelaborato (con il tradizionale
preprocessore).
filetto.andare
Vai al codice sorgente.
filetto.Annunci
File di codice sorgente Ada che contiene una dichiarazione di unità di libreria (una dichiarazione di a
pacchetto, sottoprogramma o generico o un'istanza generica) o un'unità di libreria
dichiarazione di ridenominazione (una dichiarazione di ridenominazione di pacchetto, generico o sottoprogramma). Tale
i file sono anche chiamati occhiali.
filetto.adb
File di codice sorgente Ada contenente un corpo dell'unità di libreria (un sottoprogramma o un corpo del pacchetto).
Tali file sono anche chiamati corpi.
filetto.s
Codice assemblatore.
filetto.S
filetto.sx
Codice assemblatore che deve essere preelaborato.
Altro
Un file oggetto da inserire direttamente nel collegamento. Qualsiasi nome di file senza riconoscimento
il suffisso viene trattato in questo modo.
È possibile specificare la lingua di input in modo esplicito con il -x opzione:
-x Lingua
Specificare esplicitamente il Lingua per i seguenti file di input (piuttosto che lasciare che
compilatore sceglie un valore predefinito in base al suffisso del nome del file). Questa opzione si applica a tutti
seguenti file di input fino al prossimo -x opzione. Valori possibili per Lingua siamo:
c c-intestazione cpp-output
c++ c++-intestazione c++-cpp-output
obiettivo-c obiettivo-c-intestazione obiettivo-c-cpp-output
obiettivo-c++ obiettivo-c++-intestazione obiettivo-c++-cpp-output
assembler assembler-con-cpp
ada
f77 ingresso f77-cpp f95 ingresso f95-cpp
go
Giava
-x nessuna
Disattiva qualsiasi specifica di una lingua, in modo che vengano gestiti i file successivi
in base ai suffissi dei loro nomi di file (come sono se -x non è stato utilizzato affatto).
-pass-exit-code
Normalmente il gcc il programma esce con il codice 1 se una qualsiasi fase del compilatore ritorna
un codice di ritorno non riuscito. Se specifichi -pass-exit-code, l' gcc programma invece
restituisce con l'errore numericamente più alto prodotto da qualsiasi fase che restituisce un errore
indicazione. I front-end C, C++ e Fortran restituiscono 4 se un errore interno del compilatore
è stato incontrato.
Se vuoi solo alcune delle fasi della compilazione, puoi usare -x (o suffissi dei nomi dei file)
per raccontare gcc da dove cominciare e una delle opzioni -c, -S, o -E per dire dove gcc è
fermare. Si noti che alcune combinazioni (ad esempio, -x cpp-output -E) istruire gcc fare
niente di niente.
-c Compilare o assemblare i file di origine, ma non collegare. La fase di collegamento è semplicemente
non fatto. L'output finale è sotto forma di un file oggetto per ogni file sorgente.
Per impostazione predefinita, il nome del file oggetto per un file sorgente viene creato sostituendo il suffisso .c,
.i, .s, ecc., con .o.
I file di input non riconosciuti, che non richiedono la compilazione o l'assemblaggio, vengono ignorati.
-S Stop dopo la fase di compilazione vera e propria; non montare. L'uscita è in
forma di un file di codice assembler per ogni file di input non assembler specificato.
Per impostazione predefinita, il nome del file assembler per un file sorgente viene creato sostituendo il suffisso
.c, .i, ecc., con .s.
I file di input che non richiedono la compilazione vengono ignorati.
-E Stop dopo la fase di pre-elaborazione; non eseguire il compilatore corretto. L'uscita è in
la forma di codice sorgente preelaborato, che viene inviato allo standard output.
I file di input che non richiedono la preelaborazione vengono ignorati.
-o filetto
Inserisci l'output nel file filetto. Questo vale per qualunque tipo di output venga prodotto,
che si tratti di un file eseguibile, un file oggetto, un file assembler o C . preelaborato
codice.
If -o non è specificato, l'impostazione predefinita è inserire un file eseguibile in a. fuori, l'oggetto
file per source.suffisso in fonte.o, il suo file assembler in fonti, un precompilato
file di intestazione in source.suffisso.gche tutta la sorgente C preelaborata sullo standard output.
-v Stampa (su standard error output) i comandi eseguiti per eseguire le fasi di
compilazione. Stampa anche il numero di versione del programma driver del compilatore e del
preprocessore e il compilatore vero e proprio.
-###
Come -v tranne che i comandi non vengono eseguiti e gli argomenti vengono citati a meno che non siano
contenere solo caratteri alfanumerici o "./-_". Questo è utile per gli script di shell per
acquisire le righe di comando generate dal driver.
-tubo
Utilizzare pipe piuttosto che file temporanei per la comunicazione tra le varie fasi di
compilazione. Questo non funziona su alcuni sistemi in cui l'assemblatore non è in grado di leggere
da un tubo; ma l'assemblatore GNU non ha problemi.
--Aiuto
Stampa (sullo standard output) una descrizione delle opzioni della riga di comando comprese da
gcc. Se il -v l'opzione è anche specificata allora --Aiuto è passato anche ai vari
processi invocati da gcc, in modo che possano visualizzare le opzioni della riga di comando che
accettare. Se la -Wextra è stata specificata anche l'opzione (prima del --Aiuto opzione),
quindi anche le opzioni della riga di comando a cui non è associata alcuna documentazione
visualizzato.
--target-aiuto
Stampa (sullo standard output) una descrizione delle opzioni della riga di comando specifiche del target
per ogni strumento. Per alcuni obiettivi potrebbero essere disponibili anche informazioni aggiuntive specifiche per il target
stampato.
--aiuto={classe|[^]qualificarsi}[, ...]
Stampa (sullo standard output) una descrizione delle opzioni della riga di comando comprese da
il compilatore che si adatta a tutte le classi e ai qualificatori specificati. Queste sono le
classi supportate:
ottimizzatori
Visualizza tutte le opzioni di ottimizzazione supportate dal compilatore.
avvertenze
Visualizza tutte le opzioni che controllano i messaggi di avviso prodotti dal compilatore.
bersaglio
Visualizza le opzioni specifiche del target. non mi piace il --target-aiuto opzione tuttavia, target-
le opzioni specifiche del linker e dell'assemblatore non vengono visualizzate. Questo è perché
questi strumenti attualmente non supportano l'estensione --aiuto= sintassi.
params
Visualizza i valori riconosciuti dal --parami opzione.
Lingua
Visualizza le opzioni supportate per Lingua, Dove Lingua è il nome di uno di
le lingue supportate in questa versione di GCC.
comune
Visualizza le opzioni comuni a tutte le lingue.
Questi sono i qualificatori supportati:
senza documenti
Visualizza solo le opzioni non documentate.
congiunto
Opzioni di visualizzazione che prendono un argomento che appare dopo un segno di uguale nello stesso
pezzo di testo continuo, come: --help=obiettivo.
separato
Opzioni di visualizzazione che prendono un argomento che appare come una parola separata dopo il
opzione originale, come: -o file di uscita.
Così, ad esempio, per visualizzare tutti gli switch specifici del target non documentati supportati da
il compilatore, usa:
--help=obiettivo, non documentato
Il senso di un qualificatore può essere invertito anteponendolo al prefisso ^ carattere, quindi per
esempio per visualizzare tutte le opzioni di avviso binario (cioè quelle che sono attive o disattivate
e che non accettano argomenti) che hanno una descrizione, utilizzare:
--help=avvertenze,^unito,^non documentato
L'argomento a --aiuto= non dovrebbe consistere esclusivamente di qualificatori invertiti.
È possibile combinare più classi, sebbene ciò di solito limiti l'output così
tanto che non c'è niente da mostrare. Un caso in cui funziona, tuttavia, è quando
una delle classi è bersaglio. Ad esempio, per visualizzare tutti i target specifici
opzioni di ottimizzazione, utilizzare:
--help=target, ottimizzatori
Le --aiuto= l'opzione può essere ripetuta sulla riga di comando. Ad ogni utilizzo successivo viene visualizzato
la classe di opzioni richiesta, saltando quelle che sono già state visualizzate.
Se l' -Q l'opzione appare sulla riga di comando prima di --aiuto= opzione, quindi il
testo descrittivo visualizzato da --aiuto= è cambiato. Invece di descrivere il visualizzato
opzioni, viene data indicazione se l'opzione è abilitata, disabilitata o impostata
ad un valore specifico (assumendo che il compilatore lo sappia nel punto in cui il
--aiuto= viene utilizzata l'opzione).
Ecco un esempio troncato dalla porta ARM di gcc:
% gcc -Q -mabi=2 --help=obiettivo -c
Le seguenti opzioni sono specifiche per il target:
-mabi=2
-mabort-on-noreturn [disabilitato]
-mapcs [disabilitato]
L'output è sensibile agli effetti delle precedenti opzioni della riga di comando, quindi per
esempio è possibile scoprire quali ottimizzazioni sono abilitate su -O2 usando:
-Q -O2 --help=ottimizzatori
In alternativa puoi scoprire quali ottimizzazioni binarie sono abilitate da -O3 usando:
gcc -c -Q -O3 --help=ottimizzatori > /tmp/O3-opts
gcc -c -Q -O2 --help=ottimizzatori > /tmp/O2-opts
diff /tmp/opzioni O2 /tmp/opzioni O3 | grep abilitato
-nessun-prefisso-canonico
Non espandere alcun collegamento simbolico, risolvere i riferimenti a /../ or /./, o fai il percorso
assoluto quando si genera un prefisso relativo.
--versione
Visualizza il numero di versione e i diritti d'autore del GCC invocato.
-involucro
Richiama tutti i sottocomandi in un programma wrapper. Il nome del programma wrapper e
i suoi parametri vengono passati come un elenco separato da virgole.
gcc -c tc -wrapper gdb,--args
Questo richiama tutti i sottoprogrammi di gcc per gdb --arg, quindi l'invocazione di cc1 is
gdb --arg cc1 ....
-fplugin=Nome.così
Carica il codice del plugin nel file Nome.quindi, si presume che sia un oggetto condiviso da dlopen'd by
il compilatore. Il nome di base del file oggetto condiviso viene utilizzato per identificare il plugin
ai fini dell'analisi degli argomenti (vedi -fplugin-arg-Nome-chiave=APPREZZIAMO sotto). Ogni
plugin dovrebbe definire le funzioni di callback specificate nell'API Plugin.
-fplugin-arg-Nome-chiave=APPREZZIAMO
Definire un argomento chiamato chiave con un valore di APPREZZIAMO per il plugin chiamato Nome.
-fdump-ada-spec[-sottile]
Per i file di origine e di inclusione C e C++, generare le specifiche Ada corrispondenti.
-fada-spec-genitore=unità
Insieme a -fdump-ada-spec[-sottile] sopra, genera le specifiche Ada come unità figlio di
genitore unità.
-fdump-go-spec =filetto
Per i file di input in qualsiasi lingua, genera le dichiarazioni Go corrispondenti in filetto. Questo
genera dichiarazioni Go "const", "type", "var" e "func" che possono essere un modo utile
per iniziare a scrivere un'interfaccia Go per codice scritto in qualche altra lingua.
@filetto
Leggi le opzioni della riga di comando da filetto. Le opzioni lette vengono inserite al posto di
originale @filetto opzione. Se filetto non esiste o non può essere letto, allora l'opzione
saranno trattati letteralmente e non rimossi.
opzioni in filetto sono separati da spazi bianchi. Può essere incluso un carattere di spazio bianco
in un'opzione racchiudendo l'intera opzione tra virgolette singole o doppie. Qualunque
carattere (inclusa una barra rovesciata) può essere incluso anteponendo il carattere a essere
incluso con una barra rovesciata. Il filetto può contenere a sua volta @ aggiuntivifiletto opzioni; qualunque
tali opzioni verranno elaborate in modo ricorsivo.
compilazione C++ Programmi
I file sorgente C++ usano convenzionalmente uno dei suffissi .C, . Cc, cpp, cpp, .c++, .cp, o
.cxx; I file di intestazione C++ usano spesso .H H, .hpp, .H, o (per codice modello condiviso) .tcc, E
i file C++ preelaborati usano il suffisso .ii. GCC riconosce i file con questi nomi e
li compila come programmi C++ anche se chiami il compilatore allo stesso modo della compilazione
programmi C (di solito con il nome gcc).
Tuttavia, l'uso di gcc non aggiunge la libreria C++. g ++ è un programma che chiama GCC e
specifica automaticamente il collegamento alla libreria C++. si tratta .c, .h e .i file come
File sorgente C++ invece di file sorgente C a meno che -x viene utilizzato. Anche questo programma è utile
durante la precompilazione di un file di intestazione C con a .h estensione per l'uso nelle compilazioni C++. Sopra
molti sistemi, g ++ è anche installato con il nome c ++.
Quando compili programmi C++, puoi specificare molte delle stesse opzioni della riga di comando che
usi per compilare programmi in qualsiasi lingua; o opzioni della riga di comando significative per C
e relative lingue; o opzioni che sono significative solo per i programmi C++.
Opzioni Controllo C Dialetto
Le seguenti opzioni controllano il dialetto del C (o i linguaggi derivati dal C, come C++,
Objective-C e Objective-C++) che il compilatore accetta:
-ansi
In modalità C, questo è equivalente a -std=c90. In modalità C++, è equivalente a
-std = c ++ 98.
Questo disattiva alcune funzioni di GCC che sono incompatibili con ISO C90 (quando
compilazione di codice C), o di C++ standard (durante la compilazione di codice C++), come "asm" e
parole chiave "typeof" e macro predefinite come "unix" e "vax" che identificano il
tipo di sistema che stai utilizzando. Consente inoltre l'indesiderabile e raramente utilizzato ISO
funzione trigrafica. Per il compilatore C, disabilita il riconoscimento dello stile C++ //
commenti e la parola chiave "inline".
Le parole chiave alternative "__asm__", "__extension__", "__inline__" e "__typeof__"
continuare a lavorare nonostante -ansi. Non vorrai usarli in un programma ISO C,
certo, ma è utile inserirli in file di intestazione che potrebbero essere inclusi in
compilation fatte con -ansi. Macro predefinite alternative come "__unix__" e
Sono disponibili anche "__vax__", con o senza -ansi.
Le -ansi L'opzione non fa sì che i programmi non ISO vengano rifiutati gratuitamente. Per
quella, -Wpedante è richiesto in aggiunta a -ansi.
La macro "__STRICT_ANSI__" è predefinita quando il -ansi viene utilizzata l'opzione. Qualche intestazione
i file possono notare questa macro e astenersi dal dichiarare determinate funzioni o definire
alcune macro che lo standard ISO non richiede; questo per evitare di interferire
con tutti i programmi che potrebbero usare questi nomi per altre cose.
Funzioni che sono normalmente integrate ma non hanno una semantica definita da ISO C (come
come "alloca" e "ffs") non sono funzioni integrate quando -ansi viene utilizzato.
-std=
Determina lo standard linguistico. Questa opzione è attualmente supportata solo quando
compilare C o C++.
Il compilatore può accettare diversi standard di base, come c90 or c ++ 98e dialetti GNU
di tali standard, come gnu90 or gnu++98. Quando viene specificato uno standard di base, il
il compilatore accetta tutti i programmi che seguono quello standard più quelli che usano estensioni GNU
che non lo contraddicono. Per esempio, -std=c90 disattiva alcune funzionalità di GCC
che sono incompatibili con ISO C90, come le parole chiave "asm" e "typeof", ma non
altre estensioni GNU che non hanno significato in ISO C90, come l'omissione di
termine medio di un'espressione "?:". D'altra parte, quando un dialetto GNU di uno standard
è specificato, tutte le funzionalità supportate dal compilatore sono abilitate, anche quando quelle
caratteristiche cambiano il significato dello standard di base. Di conseguenza, alcuni rigorosamente conformi
programmi possono essere rifiutati. Lo standard particolare è utilizzato da -Wpedante identificare
quali caratteristiche sono estensioni GNU data quella versione dello standard. Per esempio
-std=gnu90 -Wpedante avverte dello stile C++ // commenti, mentre -std=gnu99 -Wpedante
non.
È necessario fornire un valore per questa opzione; i valori possibili sono
c90
c89
iso9899: 1990
Supporta tutti i programmi ISO C90 (alcune estensioni GNU che sono in conflitto con ISO C90
sono disabilitati). Uguale a -ansi per il codice C.
iso9899: 199409
ISO C90 come modificata nell'emendamento 1.
c99
c9x
iso9899: 1999
iso9899:199x
ISOC99. Questo standard è sostanzialmente completamente supportato, modulo bug e
problemi in virgola mobile (principalmente, ma non interamente, relativi alle funzionalità opzionali del C99
dagli allegati F e G). Vederehttp://gcc.gnu.org/c99status.html> per saperne di più
informazione. I nomi c9x e iso9899:199x sono deprecati.
c11
c1x
iso9899: 2011
ISO C11, la revisione 2011 della norma ISO C. Questo standard è sostanzialmente
completamente supportato, bug modulo, problemi in virgola mobile (principalmente ma non del tutto
relative alle caratteristiche opzionali C11 degli allegati F e G) e degli allegati opzionali K
(Interfacce di controllo dei limiti) e L (Analizzabilità). Il nome c1x è deprecato.
gnu90
gnu89
Dialetto GNU di ISO C90 (incluse alcune funzionalità di C99).
gnu99
gnu9x
Dialetto GNU di ISO C99. Il nome gnu9x è deprecato.
gnu11
gnu1x
Dialetto GNU di ISO C11. Questa è l'impostazione predefinita per il codice C. Il nome gnu1x is
deprecato.
c ++ 98
c ++ 03
Lo standard ISO C++ del 1998 più la rettifica tecnica del 2003 e alcuni ulteriori
segnalazioni di difetti. Uguale a -ansi per il codice C++.
gnu++98
gnu++03
dialetto GNU di -std = c ++ 98. Questa è l'impostazione predefinita per il codice C++.
c ++ 11
c++ 0x
Lo standard ISO C++ 2011 più gli emendamenti. Il nome c++ 0x è deprecato.
gnu++11
gnu++0x
dialetto GNU di -std = c ++ 11. Il nome gnu++0x è deprecato.
c ++ 14
c++1a
Lo standard ISO C++ 2014 più gli emendamenti. Il nome c++1a è deprecato.
gnu++14
gnu++1y
dialetto GNU di -std = c ++ 14. Il nome gnu++1y è deprecato.
c++ 1z
La prossima revisione dello standard ISO C++, pianificata provvisoriamente per il 2017. Supporto
è altamente sperimentale, e quasi certamente cambierà in modi incompatibili in
futuri rilasci.
gnu++1z
dialetto GNU di -std=c++1z. Il supporto è altamente sperimentale e sarà quasi
certamente cambierà in modi incompatibili nelle versioni future.
-fgnu89-in linea
L'opzione -fgnu89-in linea dice a GCC di usare la tradizionale semantica GNU per "inline"
funziona in modalità C99.
L'uso di questa opzione equivale all'incirca all'aggiunta dell'attributo della funzione "gnu_inline"
a tutte le funzioni in linea.
L'opzione -fno-gnu89-in linea dice esplicitamente a GCC di usare la semantica C99 per
"in linea" quando è in modalità C99 o gnu99 (ovvero, specifica il comportamento predefinito). Questo
l'opzione non è supportata in -std=c90 or -std=gnu90 modalità.
Si possono usare le macro del preprocessore "__GNUC_GNU_INLINE__" e "__GNUC_STDC_INLINE__"
per verificare quale semantica è attiva per le funzioni "inline".
-aux-info Nome del file
Output al nome file specificato dichiarazioni prototipate per tutte le funzioni dichiarate e/o
definiti in un'unità di traduzione, inclusi quelli nei file di intestazione. Questa opzione è
silenziosamente ignorato in qualsiasi lingua diversa da C.
Oltre alle dichiarazioni, il file indica, nei commenti, l'origine di ciascuna dichiarazione
(file e riga sorgente), se la dichiarazione era implicita, prototipata o
non prototipo (I, N per nuovo o O per il vecchio, rispettivamente, nel primo carattere dopo
il numero di riga e i due punti), e se provenga da una dichiarazione o da una definizione
(C or F, rispettivamente, nel carattere seguente). In caso di funzione
definizioni, è anche un elenco di argomenti in stile K&R seguito dalle loro dichiarazioni
fornito, all'interno dei commenti, dopo la dichiarazione.
-funzioni-variadiche-senza-parametri
Accetta funzioni variadiche senza parametri denominati.
Sebbene sia possibile definire tale funzione, questa non è molto utile in quanto è
non è possibile leggere gli argomenti. Questo è supportato solo per C poiché questo costrutto è
consentito dal C++.
-fno-asm
Non riconoscere "asm", "inline" o "typeof" come parole chiave, in modo che il codice possa utilizzarle
parole come identificatori. Puoi usare le parole chiave "__asm__", "__inline__" e
"__typeof__" invece. -ansi implica -fno-asm.
In C++, questa opzione riguarda solo la parola chiave "typeof", poiché "asm" e "inline" sono
parole chiave standard. Potresti voler usare il -fno-gnu-parole chiave bandiera invece, che ha
lo stesso effetto. In modalità C99 (-std=c99 or -std=gnu99), questo interruttore ha effetto solo sul
parole chiave "asm" e "typeof", poiché "inline" è una parola chiave standard in ISO C99.
-fno-integrato
-fno-integrato-function
Non riconoscere le funzioni integrate che non iniziano con __incorporato_ come prefisso.
GCC normalmente genera codice speciale per gestire alcune funzioni integrate di più
efficiente; ad esempio, le chiamate ad "alloca" possono diventare singole istruzioni che
regolare direttamente lo stack e le chiamate a "memcpy" potrebbero diventare cicli di copia in linea. Il
il codice risultante è spesso sia più piccolo che più veloce, ma poiché la funzione chiama no
appaiono più come tali, non è possibile impostare un punto di interruzione su quelle chiamate, né è possibile modificare
il comportamento delle funzioni collegandosi a una libreria diversa. Inoltre, quando
una funzione è riconosciuta come funzione incorporata, GCC può utilizzare informazioni al riguardo
funzione per segnalare problemi con le chiamate a quella funzione o per generare altro
codice efficiente, anche se il codice risultante contiene ancora chiamate a quella funzione. Per
esempio, gli avvertimenti sono forniti con -Formato W per cattive chiamate a "printf" quando "printf" è
built in e "strlen" è noto per non modificare la memoria globale.
Grazie alla -fno-integrato-function opzione solo la funzione integrata function è disabilitato.
function non deve iniziare con __incorporato_. Se viene denominata una funzione che non è incorporata
in questa versione di GCC, questa opzione viene ignorata. Non c'è corrispondenza
-fintegrato-function opzione; se si desidera abilitare le funzioni integrate in modo selettivo quando
utilizzando -fno-integrato or -autoportante, puoi definire macro come:
#define abs(n) __abs_integrato ((n))
#define strcpy(d, s) __builtin_strcpy ((d), (s))
-ospitato
Affermare che la compilazione è destinata a un ambiente ospitato. Ciò implica -fintegrato. UN
ambiente ospitato è quello in cui è disponibile l'intera libreria standard e in
quale "main" ha un tipo restituito di "int". Gli esempi sono quasi tutto tranne a
nocciolo. Questo è equivalente a -fno-autoportante.
-autoportante
Affermare che la compilazione è destinata a un ambiente indipendente. Ciò implica
-fno-integrato. Un ambiente indipendente è uno in cui la libreria standard potrebbe non essere
esiste e l'avvio del programma potrebbe non essere necessariamente "principale". L'esempio più ovvio
è un kernel del sistema operativo. Questo è equivalente a -fno-ospitato.
-fonacc
Abilita la gestione delle direttive OpenACC "#pragma acc" in C/C++ e "!$acc" in Fortran.
Quando -fonacc è specificato, il compilatore genera codice accelerato secondo il
Interfaccia di programmazione dell'applicazione OpenACC v2.0http://www.openacc.org/>. Questa opzione
implica -pthread, e quindi è supportato solo su obiettivi che hanno il supporto per
-pthread.
Tieni presente che questa è una funzionalità sperimentale, incompleta e soggetta a modifiche in futuro
versioni di GCC. Vederehttps://gcc.gnu.org/wiki/OpenACC> per maggiori informazioni.
-fopenmp
Abilita la gestione delle direttive OpenMP "#pragma omp" in C/C++ e "!$omp" in Fortran.
Quando -fopenmp è specificato, il compilatore genera il codice parallelo secondo il
Interfaccia del programma applicativo OpenMP v4.0http://www.openmp.org/>. Questa opzione
implica -pthread, e quindi è supportato solo su obiettivi che hanno il supporto per
-pthread. -fopenmp implica -fopenmp-simd.
-fopenmp-simd
Abilita la gestione delle direttive SIMD di OpenMP con "#pragma omp" in C/C++ e "!$omp" in
Fortran. Le altre direttive OpenMP vengono ignorate.
-fcilkplus
Abilita l'utilizzo delle funzionalità di estensione del linguaggio Cilk Plus per C/C++. Quando l'opzione
-fcilkplus è specificato, abilitare l'utilizzo delle funzionalità dell'estensione Cilk Plus Language
per C/C++. La presente implementazione segue la versione ABI 1.2. Questo è un
caratteristica sperimentale che è solo parzialmente completa e la cui interfaccia può cambiare
nelle versioni future di GCC quando le specifiche ufficiali cambiano. Attualmente, tutti
caratteristiche ma "_Cilk_for" sono state implementate.
-fgnu-tm
Quando l'opzione -fgnu-tm è specificato, il compilatore genera il codice per Linux
variante dell'attuale documento di specifica ABI per la memoria transazionale di Intel (Revisione
1.1, 6 maggio 2009). Questa è una funzionalità sperimentale la cui interfaccia potrebbe cambiare in
future versioni di GCC, poiché le specifiche ufficiali cambiano. Si prega di notare che non
tutte le architetture sono supportate per questa funzione.
Per ulteriori informazioni sul supporto di GCC per la memoria transazionale,
Si noti che la funzione di memoria transazionale non è supportata con eccezioni non chiamate
(-fnon-chiamata-eccezioni).
-fms-estensioni
Accetta alcuni costrutti non standard utilizzati nei file di intestazione di Microsoft.
Nel codice C++, ciò consente ai nomi dei membri nelle strutture di essere simili ai tipi precedenti
dichiarazioni.
typedef int UOW;
struttura ABC {
UOW UOW;
};
Alcuni casi di campi senza nome in strutture e unioni sono accettati solo con questo
opzione.
Si noti che questa opzione è disattivata per tutti i target tranne i target x86 che utilizzano ms-abi.
-fplan9-estensioni
Accetta alcuni costrutti non standard utilizzati nel codice Plan 9.
Ciò consente -fms-estensioni, permette di passare puntatori a strutture con anonimi
campi a funzioni che si aspettano puntatori a elementi del tipo del campo, e
permessi riferiti a campi anonimi dichiarati utilizzando un typedef. Questo è solo
supportato per C, non C++.
-trigrafie
Supporta i trigrafi ISO C. Il -ansi opzione (e -std opzioni per ISO C . rigoroso
conformità) implica -trigrafie.
-tradizionale
-tradizionale-cpp
In precedenza, queste opzioni facevano sì che GCC tentasse di emulare un compilatore C pre-standard.
Ora sono supportati solo con il -E interruttore. Il preprocessore continua a supportare
una modalità pre-standard. Vedere il manuale GNU CPP per i dettagli.
-fcond-mancata corrispondenza
Consenti espressioni condizionali con tipi non corrispondenti nel secondo e nel terzo argomento.
Il valore di tale espressione è nullo. Questa opzione non è supportata per C++.
-conversioni-vettoriali-di-lino
Consenti conversioni implicite tra vettori con diversi numeri di elementi e/o
tipi di elementi incompatibili. Questa opzione non deve essere utilizzata per il nuovo codice.
-funsigned-carattere
Lascia che il tipo "char" sia unsigned, come "unsigned char".
Ogni tipo di macchina ha un valore predefinito per quello che dovrebbe essere "char". O è come
"unsigned char" per impostazione predefinita o come "signed char" per impostazione predefinita.
Idealmente, un programma portabile dovrebbe sempre usare "carattere firmato" o "carattere non firmato" quando
dipende dalla firma di un oggetto. Ma molti programmi sono stati scritti per essere usati
semplice "char" e aspettati che sia firmato, o aspettati che non sia firmato, a seconda del
macchine per cui sono stati scritti. Questa opzione, e il suo inverso, ti permettono di fare un tale
il programma funziona con l'impostazione predefinita opposta.
Il tipo "char" è sempre un tipo distinto da ciascuno di "signed char" o "unsigned
char", anche se il suo comportamento è sempre uguale a uno di quei due.
-fsigned-carattere
Lascia che il tipo "char" sia firmato, come "signed char".
Nota che questo è equivalente a -fno-unsigned-char, che è la forma negativa di
-funsigned-carattere. Allo stesso modo, l'opzione -fno-carattere-firmato è equivalente
-funsigned-carattere.
-fcampi-bitfirmati
-campi di bit con segno divertente
-fno-campi-di-bit con segno
-fno-bitfields senza segno
Queste opzioni controllano se un campo di bit è firmato o non firmato, quando la dichiarazione
non usa né "firmato" né "non firmato". Per impostazione predefinita, tale campo di bit è firmato,
perché questo è coerente: i tipi interi di base come "int" sono tipi con segno.
Opzioni Controllo C++ Dialetto
Questa sezione descrive le opzioni della riga di comando che sono significative solo per i programmi C++.
Puoi anche usare la maggior parte delle opzioni del compilatore GNU indipendentemente dalla lingua del tuo programma
è dentro. Ad esempio, potresti compilare un file primaClasse.C come questo:
g++ -g -frepo -O -c primaClasse.C
In questo esempio, solo -frepo è un'opzione pensata solo per i programmi C++; puoi usare il
altre opzioni con qualsiasi lingua supportata da GCC.
Ecco un elenco di opzioni che sono esclusivamente per la compilazione di programmi C++:
-fabi-versione=n
Usa la versione n dell'ABI C++. L'impostazione predefinita è la versione 0.
La versione 0 si riferisce alla versione più conforme alla specifica C++ ABI.
Pertanto, l'ABI ottenuto utilizzando la versione 0 cambierà nelle diverse versioni di G++
poiché i bug ABI sono stati corretti.
La versione 1 è la versione dell'ABI C++ che è apparsa per la prima volta in G++ 3.2.
La versione 2 è la versione dell'ABI C++ che è apparsa per la prima volta in G++ 3.4 ed è stata la
predefinito tramite G++ 4.9.
La versione 3 corregge un errore nella manipolazione di un indirizzo costante come argomento del modello.
La versione 4, apparsa per la prima volta in G++ 4.5, implementa un mangling standard per vector
tipi.
La versione 5, apparsa per la prima volta in G++ 4.6, corregge l'alterazione degli attributi
const/volatile sui tipi di puntatore a funzione, decltype di un decl semplice e uso di a
parametro della funzione nella dichiarazione di un altro parametro.
La versione 6, apparsa per la prima volta in G++ 4.7, corregge il comportamento di promozione di C++ 11
enumerazioni con scope e manipolazione dei pacchetti di argomenti del modello, const/static_cast, prefisso ++
e --, e una funzione di ambito di classe utilizzata come argomento del modello.
Versione 7, apparsa per la prima volta in G++ 4.8, che tratta nullptr_t come un tipo incorporato
e corregge la manipolazione dei lambda nell'ambito dell'argomento predefinito.
La versione 8, apparsa per la prima volta in G++ 4.9, corregge il comportamento di sostituzione di
tipi di funzione con qualificatori function-cv.
Vedi anche -Wabi.
-fabi-compat-versione=n
Sui target che supportano alias forti, G++ aggira i cambiamenti creando
un alias con il nome alterato corretto quando si definisce un simbolo con un nome errato
nome storpiato. Questa opzione specifica quale versione ABI utilizzare per l'alias.
Con -fabi-versione=0 (l'impostazione predefinita), questo valore predefinito è 2. Se un'altra versione ABI è
selezionato esplicitamente, il valore predefinito è 0.
La versione di compatibilità è impostata anche da -Wabi=n.
-fno-controllo-accesso
Disattiva tutti i controlli di accesso. Questo interruttore è utile principalmente per aggirare i bug in
il codice di controllo accessi.
-fcheck-nuovo
Verificare che il puntatore restituito da "operator new" non sia null prima di tentare di
modificare la memoria allocata. Questo controllo non è normalmente necessario perché il C++
lo standard specifica che "operator new" restituisce 0 solo se è dichiarato "throw()", in
nel qual caso il compilatore controlla sempre il valore restituito anche senza questa opzione. In
tutti gli altri casi, quando "operatore nuovo" ha una specifica di eccezione non vuota, memoria
l'esaurimento viene segnalato lanciando "std::bad_alloc". Guarda anche nuovi (notro).
-fconstexpr-profondità=n
Imposta la profondità di valutazione nidificata massima per le funzioni constexpr C++ 11 su n. un limite
è necessario per rilevare la ricorsione infinita durante la valutazione dell'espressione costante. Il
minimo specificato dallo standard è 512.
-fdeduce-elenco-init
Abilita la deduzione di un parametro del tipo di modello come "std::initializer_list" da un brace-
elenco di inizializzatori racchiuso, ad es
modello auto forward(T t) -> decltype (realfn (t))
{
restituire realfn (t);
}
vuoto f()
{
avanti({1,2}); //chiama in avanti >
}
Tale detrazione è stata attuata come possibile estensione di quanto originariamente proposto
semantica per lo standard C++ 11, ma non faceva parte dello standard finale, quindi lo è
disabilitato per impostazione predefinita. Questa opzione è deprecata e potrebbe essere rimossa in futuro
versione di G++.
-ffriend-iniezione
Inietta funzioni friend nello spazio dei nomi che le racchiude, in modo che siano visibili all'esterno
l'ambito della classe in cui sono dichiarati. Le funzioni degli amici sono state documentate
per lavorare in questo modo nel vecchio Manuale di riferimento C++ con annotazioni. Tuttavia, in ISO C++ a
la funzione friend che non è dichiarata in un ambito di inclusione può essere trovata solo usando
ricerca dipendente dall'argomento. GCC utilizza il comportamento standard per impostazione predefinita.
Questa opzione è per compatibilità e potrebbe essere rimossa in una versione futura di G++.
-fno-elide-costruttori
Lo standard C++ consente a un'implementazione di omettere la creazione di un temporaneo che è solo
utilizzato per inizializzare un altro oggetto dello stesso tipo. Specificando questa opzione si disabilita
tale ottimizzazione e costringe G++ a chiamare il costruttore di copie in tutti i casi.
-fno-enforce-eh-spec
Non generare codice per verificare la violazione delle specifiche dell'eccezione in fase di esecuzione.
Questa opzione viola lo standard C++, ma può essere utile per ridurre la dimensione del codice in
build di produzione, proprio come definire "NDEBUG". Questo non fornisce il codice utente
permesso di lanciare eccezioni in violazione delle specifiche di eccezione; il
il compilatore ottimizza ancora in base alle specifiche, quindi lanciando un imprevisto
l'eccezione determina un comportamento indefinito in fase di esecuzione.
-fextern-tls-init
-fno-extern-tls-init
Gli standard C++ 11 e OpenMP consentono alle variabili "thread_local" e "threadprivate" di
avere un'inizializzazione dinamica (runtime). Per supportare ciò, qualsiasi uso di tale variabile
passa attraverso una funzione wrapper che esegue l'inizializzazione necessaria. Quando il
l'uso e la definizione della variabile sono nella stessa unità di traduzione, questo sovraccarico può
essere ottimizzato, ma quando l'uso è in un'unità di traduzione diversa c'è
sovraccarico significativo anche se la variabile non ha effettivamente bisogno di dinamica
inizializzazione. Se il programmatore può essere sicuro che nessun uso della variabile in un
la definizione di TU deve attivare l'inizializzazione dinamica (o perché la variabile è
inizializzato staticamente, o verrà eseguito un uso della variabile nella TU definente
prima di qualsiasi utilizzo in un'altra TU), possono evitare questo sovraccarico con il
-fno-extern-tls-init opzione.
Sulle destinazioni che supportano gli alias dei simboli, l'impostazione predefinita è -fextern-tls-init. sugli obiettivi
che non supportano gli alias dei simboli, l'impostazione predefinita è -fno-extern-tls-init.
-per-scopo
-fno-per-scope
If -per-scopo è specificato, l'ambito delle variabili dichiarate in a istruzione-for-init
è limitato al ciclo "for" stesso, come specificato dallo standard C++. Se
-fno-per-scope è specificato, l'ambito delle variabili dichiarate in a istruzione-for-init
si estende fino alla fine dell'ambito di inclusione, come nel caso delle vecchie versioni di G++, e
altre implementazioni (tradizionali) del C++.
Se non viene dato nessun flag, l'impostazione predefinita è seguire lo standard, ma consentire e dare
un avviso per il codice vecchio stile che altrimenti non sarebbe valido o sarebbe diverso
comportamento.
-fno-gnu-parole chiave
Non riconoscere "typeof" come parola chiave, quindi il codice può usare questa parola come un
identificatore. Puoi invece usare la parola chiave "__typeof__". -ansi implica
-fno-gnu-parole chiave.
-fno-modelli-impliciti
Non emettere mai codice per modelli non in linea che sono istanziati implicitamente (cioè da
utilizzo); emette codice solo per istanze esplicite.
-fno-modelli-inline-impliciti
Non emettere nemmeno codice per le istanze implicite dei modelli in linea. Il predefinito
è gestire le righe in modo diverso in modo che vengano compilate con e senza necessità di ottimizzazione
lo stesso insieme di istanze esplicite.
-fno-implementare-inline
Per risparmiare spazio, non emettere copie fuori linea delle funzioni in linea controllate da
"implementazione #pragma". Ciò causa errori del linker se queste funzioni non lo sono
inline ovunque vengano chiamati.
-fms-estensioni
Disabilita gli avvisi Wpedantic sui costrutti utilizzati in MFC, come int implicito e
ottenere un puntatore alla funzione membro tramite sintassi non standard.
-fno-nonansi-integrati
Disabilita le dichiarazioni integrate di funzioni che non sono richieste da ANSI/ISO C. Queste
includono "ffs", "alloca", "_exit", "index", "bzero", "conjf" e altri
funzioni.
-fnothrow-opt
Tratta una specifica di eccezione "throw()" come se fosse una specifica "noeccezione" per
ridurre o eliminare l'overhead delle dimensioni del testo relativo a una funzione senza eccezioni
specifica. Se la funzione ha variabili locali di tipo con non banale
distruttori, la specifica dell'eccezione in realtà rende la funzione più piccola perché
le pulizie EH per quelle variabili possono essere ottimizzate. L'effetto semantico è
che un'eccezione espulsa da una funzione con tale specifica di eccezione
si traduce in una chiamata a "terminare" piuttosto che "inaspettata".
-fno-nomi-operatore
Non trattare le parole chiave del nome dell'operatore "and", "bitand", "bitor", "compl", "not", "or"
e "xor" come sinonimi come parole chiave.
-fno-opzionale-diags
Disabilita la diagnostica che lo standard dice che un compilatore non deve emettere.
Attualmente, l'unica diagnostica di questo tipo emessa da G++ è quella per un nome che ha
molteplici significati all'interno di una classe.
-fpermissivo
Eseguire il downgrade di alcune diagnostiche relative al codice non conforme da errori ad avvisi. Così,
utilizzando -fpermissivo consente la compilazione di codice non conforme.
-fno-pretty-modelli
Quando un messaggio di errore fa riferimento a una specializzazione di un modello di funzione, il compilatore
normalmente stampa la firma del modello seguita dagli argomenti del modello e
qualsiasi typedef o typename nella firma (ad esempio "void f(T) [with T = int]" piuttosto
di "void f(int)") in modo che sia chiaro quale modello è coinvolto. Quando un errore
messaggio si riferisce a una specializzazione di un modello di classe, il compilatore omette qualsiasi
argomenti del modello che corrispondono agli argomenti del modello predefinito per quel modello. Se
uno di questi comportamenti rende più difficile capire il messaggio di errore piuttosto che
più facile, puoi usare -fno-pretty-modelli per disabilitarli.
-frepo
Abilita l'istanza automatica del modello al momento del collegamento. Questa opzione implica anche
-fno-modelli-impliciti.
-fno-rtti
Disabilita la generazione di informazioni su ogni classe con funzioni virtuali per l'uso da
le funzionalità di identificazione del tipo runtime C++ ("dynamic_cast" e "typeid"). Se tu
non usare quelle parti della lingua, puoi risparmiare spazio usando questo flag.
Nota che la gestione delle eccezioni utilizza le stesse informazioni, ma G++ le genera come
necessario. L'operatore "dynamic_cast" può ancora essere utilizzato per i cast che non richiedono
informazioni sul tipo di runtime, ad esempio cast su "void *" o su classi base non ambigue.
-fsized-deallocazione
Abilita le dichiarazioni globali integrate
operatore void delete (void *, std::size_t) noException;
operatore void delete[] (void *, std::size_t) noeccetto;
come introdotto in C++14. Questo è utile per la deallocazione della sostituzione definita dall'utente
funzioni che, ad esempio, utilizzano la dimensione dell'oggetto per rendere più rapida la deallocazione.
Abilitato per impostazione predefinita sotto -std = c ++ 14 e al di sopra. La bandiera -Wdimensionato-deallocation mette in guardia
sui luoghi che potrebbero voler aggiungere una definizione.
-fstats
Emetti statistiche sull'elaborazione front-end alla fine della compilazione. Questo
le informazioni sono generalmente utili solo al team di sviluppo di G++.
-fstrict-enum
Consenti al compilatore di ottimizzare utilizzando il presupposto che un valore di tipo enumerato
può essere solo uno dei valori dell'enumerazione (come definito nello standard C++;
in sostanza, un valore che può essere rappresentato nel numero minimo di bit necessari per
rappresentano tutti gli enumeratori). Questa ipotesi potrebbe non essere valida se il programma utilizza
un cast per convertire un valore intero arbitrario nel tipo enumerato.
-ftemplate-backtrace-limit=n
Imposta il numero massimo di note di istanza del modello per un singolo avviso o errore
a n. Il valore predefinito è 10.
-ftemplate-profondità=n
Imposta la profondità massima di istanziazione per le classi modello su n. Un limite al
la profondità dell'istanza del modello è necessaria per rilevare ricorsioni infinite durante il modello
istanziazione di classe. I programmi conformi ad ANSI/ISO C++ non devono fare affidamento su un massimo
profondità maggiore di 17 (modificato in 1024 in C++11). Il valore predefinito è 900, poiché il
il compilatore può esaurire lo spazio dello stack prima di raggiungere 1024 in alcune situazioni.
-fno-threadsafe-statics
Non emettere il codice aggiuntivo per utilizzare le routine specificate nell'ABI C++ per thread-
inizializzazione sicura della statica locale. Puoi usare questa opzione per ridurre la dimensione del codice
leggermente nel codice che non ha bisogno di essere thread-safe.
-fuse-cxa-uscita
Registra distruttori per oggetti con durata di archiviazione statica con "__cxa_atexit"
funzione piuttosto che la funzione "atexit". Questa opzione è necessaria per completamente
gestione conforme agli standard dei distruttori statici, ma funziona solo se la tua libreria C
supporta "__cxa_atexit".
-fno-use-cxa-get-exception-ptr
Non utilizzare la routine di runtime "__cxa_get_exception_ptr". Questo causa
"std::uncaught_exception" non è corretto, ma è necessario se la routine di runtime è
non disponibile.
-fvisibility-inlines-nascosto
Questa opzione dichiara che l'utente non tenta di confrontare i puntatori con inline
funzioni o metodi in cui gli indirizzi delle due funzioni sono presi in modo diverso
oggetti condivisi.
L'effetto di ciò è che GCC può, in modo efficace, contrassegnare i metodi in linea con
"__attribute__ ((visibility ("nascosto")))" in modo che non appaiano nell'esportazione
tabella di un DSO e non richiedono un riferimento indiretto PLT se utilizzato all'interno del DSO.
L'abilitazione di questa opzione può avere un effetto drammatico sui tempi di caricamento e collegamento di un DSO in quanto
riduce enormemente la dimensione della tabella di esportazione dinamica quando la libreria diventa pesante
uso di modelli.
Il comportamento di questo interruttore non è esattamente lo stesso di contrassegnare i metodi come nascosti
direttamente, perché non influisce sulle variabili statiche locali alla funzione o alla causa
il compilatore per dedurre che la funzione è definita in un solo oggetto condiviso.
Puoi contrassegnare un metodo come avente una visibilità in modo esplicito per negare l'effetto del
passare a quel metodo. Ad esempio, se vuoi confrontare i puntatori con a
particolare metodo in linea, potresti contrassegnarlo come con visibilità predefinita. Segnando il
racchiudere la classe con visibilità esplicita non ha alcun effetto.
I metodi in linea esplicitamente istanziati non sono interessati da questa opzione in quanto il loro collegamento
potrebbe altrimenti attraversare un confine di libreria condivisa.
-fvisibility-ms-compat
Questo flag tenta di utilizzare le impostazioni di visibilità per creare il modello di collegamento C++ di GCC
compatibile con quello di Microsoft Visual Studio.
Il flag apporta queste modifiche al modello di collegamento di GCC:
1. Imposta la visibilità predefinita su "nascosta", come -fvisibilità=nascosto.
2. I tipi, ma non i relativi membri, non sono nascosti per impostazione predefinita.
3. La regola di una definizione è rilassata per i tipi senza visibilità esplicita
specifiche che sono definite in più di un oggetto condiviso: quelle dichiarazioni
sono consentiti se sono consentiti quando questa opzione non è utilizzata.
Nel nuovo codice è meglio usare -fvisibilità=nascosto ed esporta quelle classi che sono
destinato ad essere visibile dall'esterno. Sfortunatamente è possibile che il codice faccia affidamento,
forse accidentalmente, sul comportamento di Visual Studio.
Tra le conseguenze di questi cambiamenti vi sono i membri di dati statici dello stesso tipo
con lo stesso nome ma definiti in oggetti condivisi diversi sono diversi, quindi cambiano
uno non cambia l'altro; e che puntatori ai membri della funzione definiti in
oggetti condivisi diversi potrebbero non essere uguali. Quando viene dato questo flag, è a
violazione dell'ODR per definire diversamente i tipi con lo stesso nome.
-fvtable-verifica=[std|preiniziale|nessuna]
Accendere (o spegnere, se si utilizza -fvtable-verify=nessuno) la caratteristica di sicurezza che verifica a
run time, per ogni chiamata virtuale, che il puntatore vtable attraverso il quale la chiamata è
made è valido per il tipo di oggetto e non è stato danneggiato o sovrascritto.
Se viene rilevato un puntatore vtable non valido in fase di esecuzione, viene segnalato un errore e
l'esecuzione del programma viene immediatamente interrotta.
Questa opzione fa sì che le strutture dati di runtime vengano costruite all'avvio del programma, che sono
utilizzato per verificare i puntatori vtable. Le opzioni std e preiniziale controllare il
tempi di costruzione di queste strutture di dati. In entrambi i casi le strutture dati sono
costruito prima che l'esecuzione raggiunga "main". Usando -fvtable-verify=std causa i dati
strutture da costruire dopo che le librerie condivise sono state caricate e inizializzate.
-fvtable-verify=preinit fa sì che vengano costruite prima che le librerie condivise siano state
caricato e inizializzato.
Se questa opzione appare più volte nella riga di comando con valori diversi
specificato, nessuna ha la massima priorità su entrambi std e preiniziale; preiniziale prende
priorità su std.
-fvtv-debug
Se utilizzato in combinazione con -fvtable-verify=std or -fvtable-verify=preinit, cause
versioni di debug delle funzioni di runtime per la funzione di verifica vtable da
chiamato. Questo flag fa in modo che il compilatore registri le informazioni su quale vtable
puntatori che trova per ogni classe. Queste informazioni vengono scritte in un file denominato
vtv_set_ptr_data.log nella directory denominata dalla variabile d'ambiente VTV_LOGS_DIR
se è definito o altrimenti la directory di lavoro corrente.
Nota: questa funzione aggiunge dati nel file di registro. Se vuoi un nuovo file di log, be
assicurati di eliminare quelli esistenti.
-fvtv-conteggi
Questo è un flag di debug. Se utilizzato in combinazione con -fvtable-verify=std or
-fvtable-verify=preinit, questo fa sì che il compilatore tenga traccia del numero totale di
chiamate virtuali che incontra e il numero di verifiche che inserisce. È anche
conta il numero di chiamate a determinate funzioni di libreria di runtime che inserisce e
registra queste informazioni per ogni unità di compilazione. Il compilatore scrive queste informazioni
in un file chiamato vtv_count_data.log nella directory denominata dalla variabile d'ambiente
VTV_LOGS_DIR se è definito o altrimenti la directory di lavoro corrente. È anche
conta la dimensione dei set di puntatori vtable per ogni classe e scrive queste informazioni
a vtv_class_set_sizes.log Nella stessa directory.
Nota: questa funzione aggiunge dati ai file di registro. Per ottenere nuovi file di registro, assicurati di
eliminare quelli esistenti.
-fno-debole
Non utilizzare un supporto debole per i simboli, anche se fornito dal linker. Per impostazione predefinita, G++
usa simboli deboli se disponibili. Questa opzione esiste solo per il test e
non dovrebbe essere utilizzato dagli utenti finali; si traduce in codice inferiore e non ha vantaggi.
Questa opzione potrebbe essere rimossa in una futura versione di G++.
-nostdin++
Non cercare i file di intestazione nelle directory standard specifiche del C++, ma fallo
cerca ancora nelle altre directory standard. (Questa opzione viene utilizzata quando si costruisce il
libreria C++.)
Inoltre, queste opzioni di ottimizzazione, avviso e generazione di codice hanno solo un significato
per i programmi C++:
-Wabi (solo C, Objective-C, C++ e Objective-C++)
Quando un esplicito -fabi-versione=n viene utilizzata l'opzione, fa in modo che G++ avverta quando viene generato
codice che probabilmente non è compatibile con l'ABI C++ indipendente dal fornitore. Da G++ ora
il valore predefinito è -fabi-versione=0, -Wabi non ha alcun effetto a meno che non sia una versione ABI precedente
selezionato (con -fabi-versione=n) o è stata selezionata una versione di compatibilità precedente (con
-Wabi=n or -fabi-compat-versione=n).
Sebbene sia stato fatto uno sforzo per mettere in guardia su tutti questi casi, probabilmente ce ne sono alcuni
casi di cui non si è avvisati, anche se G++ genera codice incompatibile.
Ci possono essere anche casi in cui vengono emessi avvisi anche se il codice che è
generato è compatibile.
Dovresti riscrivere il tuo codice per evitare questi avvisi se sei preoccupato per il
fatto che il codice generato da G++ potrebbe non essere compatibile a livello binario con il codice generato da
altri compilatori.
-Wabi può essere utilizzato anche con un numero di versione esplicito per avvisare della compatibilità
con un particolare -versione-fabi livello, ad es -Wabi=2 per avvertire dei cambiamenti relativi a
-fabi-versione=2. Imposta anche la specifica di un numero di versione -fabi-compat-versione=n.
Le note incompatibilità in -fabi-versione=2 (che era l'impostazione predefinita da GCC 3.4 a
4.9) includono:
* Un modello con un parametro modello non di tipo di tipo di riferimento è stato mutilato
in modo errato:
esterno interno N;
modello struttura S {};
vuoto n (S ) {2}
Questo è stato risolto in -fabi-versione=3.
* I tipi di vettore SIMD dichiarati usando "__attribute ((vector_size))" sono stati alterati in a
modo non standard che non consente il sovraccarico delle funzioni che prendono vettori
di diverse dimensioni.
Il mangling è stato cambiato in -fabi-versione=4.
* "__attribute ((const))" e "noreturn" sono stati alterati come qualificatori di tipo e
"decltype" di una semplice dichiarazione è stato ripiegato.
Questi problemi di manipolazione sono stati risolti in -fabi-versione=5.
* Gli enumeratori con ambito passati come argomenti a una funzione variadica vengono promossi come
enumeratori senza ambito, causando il reclamo di "va_arg". Sulla maggior parte dei bersagli questo no
effettivamente influenzare il parametro che passa ABI, poiché non c'è modo di passare un argomento
minore di "int".
Inoltre, l'ABI ha modificato la manipolazione dei pacchetti di argomenti del modello, "const_cast",
"static_cast", prefisso incremento/decremento e una funzione di ambito di classe usata come a
argomento modello.
Questi problemi sono stati corretti in -fabi-versione=6.
* I Lambda nell'ambito dell'argomento predefinito sono stati modificati in modo errato e l'ABI è cambiato
la storpiatura di "nullptr_t".
Questi problemi sono stati corretti in -fabi-versione=7.
* Quando si manipola un tipo di funzione con i qualificatori function-cv, il non qualificato
il tipo di funzione è stato erroneamente trattato come candidato alla sostituzione.
Questo è stato risolto in -fabi-versione=8.
Avverte anche sui cambiamenti relativi a psABI. Il noto psABI cambia a questo punto
includono:
* Per SysV/x86-64, le unioni con membri "long double" vengono passate in memoria come
specificato in psABI. Per esempio:
unione U {
lungo doppio ld;
int i;
};
"union U" è sempre passato in memoria.
-Tag Wabi (solo C++ e Objective-C++)
Avvisa quando un tipo con un tag ABI viene utilizzato in un contesto che non ha quel tag ABI.
See C++ Attributi per ulteriori informazioni sui tag ABI.
-Wctor-dtor-privacy (solo C++ e Objective-C++)
Avvisa quando una classe sembra inutilizzabile perché tutti i costruttori o distruttori in essa
sono private e non ha né amici né funzioni membro statiche pubbliche.
Avvisa anche se non ci sono metodi non privati e c'è almeno un membro privato
funzione che non è un costruttore o un distruttore.
-Wdelete-non-virtuale-dtor (solo C++ e Objective-C++)
Avvisa quando "delete" viene utilizzato per distruggere un'istanza di una classe che ha virtual
funzioni e distruttore non virtuale. Non è sicuro eliminare un'istanza di un derivato
class tramite un puntatore a una classe base se la classe base non ha un virtual
distruttore. Questo avviso è abilitato da -Parete.
-Wliteral-suffisso (solo C++ e Objective-C++)
Avvisa quando una stringa o un carattere letterale è seguito da un suffisso ud che non lo fa
iniziare con un carattere di sottolineatura. Come estensione conforme, GCC tratta tali suffissi come
token di pre-elaborazione separati per mantenere la retrocompatibilità con il codice
che utilizza macro di formattazione da " ". Per esempio:
#definisci __STDC_FORMAT_MACROS
#includere
#includere
int main () {
int64_t i64 = 123;
printf("Il mio int64: %"PRId64"\n", i64);
}
In questo caso, "PRId64" viene trattato come un token di preelaborazione separato.
Questo avviso è abilitato per impostazione predefinita.
-Stringendo (solo C++ e Objective-C++)
Avvisa quando si verifica una conversione restrittiva vietata da C++11 all'interno { }, per esempio
int io = { 2.2 }; // errore: restringimento da double a int
Questo flag è incluso in -Parete e -Wc++11-compatibile.
Con -std = c ++ 11, -Non-restringimento sopprime la diagnostica richiesta dalla norma.
Si noti che ciò non influisce sul significato del codice ben formato; restringendo le conversioni
sono ancora considerati mal formati nel contesto SFINAE.
-Non tranne (solo C++ e Objective-C++)
Avvisa quando un'espressione noeccezione restituisce false a causa di una chiamata a una funzione
che non ha una specifica di eccezione senza lancio (cioè "throw()" o
"noException") ma è noto al compilatore per non generare mai un'eccezione.
-Wnon-virtuale-dtor (solo C++ e Objective-C++)
Avvisa quando una classe ha funzioni virtuali e un distruttore non virtuale accessibile
stesso o in una classe base polimorfa accessibile, nel qual caso è possibile ma
non sicuro eliminare un'istanza di una classe derivata tramite un puntatore alla classe stessa
o classe base. Questo avviso viene abilitato automaticamente se -Weffc++ è specificato.
-Riordina (solo C++ e Objective-C++)
Avvisa quando l'ordine degli inizializzatori dei membri fornito nel codice non corrisponde all'ordine
in cui devono essere eseguiti. Ad esempio:
struttura A {
int i;
intj;
A(): j (0), io (1) { }
};
Il compilatore riorganizza gli inizializzatori dei membri per "i" e "j" in modo che corrispondano a
ordine di dichiarazione dei soci, emettendo una diffida in tal senso. Questo avviso è
abilitato da -Parete.
-fext-numeric-letterali (solo C++ e Objective-C++)
Accetta suffissi numerici immaginari, a virgola fissa o definiti dalla macchina come GNU
estensioni. Quando questa opzione è disattivata, questi suffissi vengono trattati come utente C++ 11
suffissi numerici letterali definiti. Questo è attivo per impostazione predefinita per tutti i dialetti pre-C++ 11
e tutti i dialetti GNU: -std = c ++ 98, -std=gnu++98, -std=gnu++11, -std=gnu++14. Questo
l'opzione è disattivata per impostazione predefinita da ISO C++ 11 in poi (-std = c ++ 11, ...).
Le seguenti -W... le opzioni non sono influenzate da -Parete.
-Weffc++ (solo C++ e Objective-C++)
Avvisa delle violazioni delle seguenti linee guida di stile da parte di Scott Meyers Efficace
C++ serie di libri:
* Definire un costruttore di copie e un operatore di assegnazione per le classi con dinamicamente-
memoria allocata.
* Preferire l'inizializzazione all'assegnazione nei costruttori.
* Fai in modo che "operator=" restituisca un riferimento a *questo.
* Non provare a restituire un riferimento quando devi restituire un oggetto.
* Distinguere tra forme prefisse e postfisse di operatori di incremento e decremento.
* Non sovraccaricare mai "&&", "||", o ",".
Questa opzione abilita anche -Wnon-virtuale-dtor, che è anche uno dei C++ . effettivi
raccomandazioni. Tuttavia, il controllo viene esteso per avvertire della mancanza di virtual
distruttore anche in classi di basi non polimorfiche accessibili.
Quando si seleziona questa opzione, tenere presente che le intestazioni della libreria standard non obbediscono a tutte
di queste linee guida; utilizzo grep -v per filtrare quegli avvisi.
-Wstrict-null-sentinella (solo C++ e Objective-C++)
Avvisa dell'uso di un "NULL" non cast come sentinella. Quando si compila solo con GCC
questa è una sentinella valida, poiché "NULL" è definito su "__null". Anche se è un nulla
puntatore costante piuttosto che un puntatore nullo, è garantito che abbia la stessa dimensione
come puntatore. Ma questo uso non è portabile su diversi compilatori.
-Wno-non-modello-amico (solo C++ e Objective-C++)
Disabilita gli avvisi quando vengono dichiarate funzioni amiche non basate su modelli all'interno di un modello.
Dall'avvento del supporto per le specifiche esplicite dei modelli in G++, se il nome del
amico è un ID non qualificato (cioè, Amico pippo (int)), la specifica del linguaggio C++
richiede che l'amico dichiari o definisca una funzione ordinaria, non modello. (Sezione
14.5.3). Prima che G++ implementasse la specifica esplicita, gli ID non qualificati potevano essere
interpretata come una particolare specializzazione di una funzione modellizzata. Perchè questo
il comportamento non conforme non è più il comportamento predefinito per G++,
-Wnon-modello-amico consente al compilatore di controllare il codice esistente per potenziali problemi
spot ed è attivo per impostazione predefinita. Questo nuovo comportamento del compilatore può essere disattivato con
-Wno-non-modello-amico, che mantiene il codice del compilatore conforme ma disabilita il
avviso utile.
-Wold-stile-cast (solo C++ e Objective-C++)
Avvisa se un cast vecchio stile (stile C) a un tipo non void viene utilizzato all'interno di un programma C++.
I cast di nuovo stile ("dynamic_cast", "static_cast", "reinterpret_cast" e
"const_cast") sono meno vulnerabili agli effetti indesiderati e molto più facili da cercare.
-Woverloaded-virtuale (solo C++ e Objective-C++)
Avvisa quando una dichiarazione di funzione nasconde funzioni virtuali da una classe base. Per
esempio, in:
struttura A {
vuoto virtuale f();
};
struttura B: pubblico A {
vuoto f(int);
};
la versione di classe "A" di "f" è nascosta in "B" e codice come:
B*b;
b->f();
non riesce a compilare.
-Wno-pmf-conversioni (solo C++ e Objective-C++)
Disabilitare la diagnostica per convertire un puntatore associato alla funzione membro in un semplice
puntatore.
-Wsign-promozione (solo C++ e Objective-C++)
Avvisa quando la risoluzione del sovraccarico sceglie una promozione dal tipo non firmato o enumerato a
un tipo firmato, su una conversione in un tipo senza segno della stessa dimensione. Precedente
le versioni di G++ hanno cercato di preservare l'assenza di segno, ma lo standard impone l'attuale
comportamento.
Opzioni Controllo Objective-C e Obiettivo-C++ dialetti
(NOTA: questo manuale non descrive i linguaggi Objective-C e Objective-C++
loro stessi.
Questa sezione descrive le opzioni della riga di comando che sono significative solo per Objective-C
e programmi Objective-C++. Puoi anche usare la maggior parte degli GNU . indipendenti dalla lingua
opzioni del compilatore. Ad esempio, potresti compilare un file qualche_classe.m come questo:
gcc -g -fgnu-runtime -O -c qualche_classe.m
In questo esempio, -fgnu-runtime è un'opzione pensata solo per Objective-C e Objective-C++
programmi; puoi utilizzare le altre opzioni con qualsiasi lingua supportata da GCC.
Nota che poiché Objective-C è un'estensione del linguaggio C, le compilazioni Objective-C
può anche utilizzare opzioni specifiche per il front-end C (ad es. -Wtradizionale). Allo stesso modo,
Le compilazioni Objective-C++ possono utilizzare opzioni specifiche di C++ (ad es. -Wabi).
Ecco un elenco di opzioni che sono esclusivamente per compilare Objective-C e Objective-C++
programmi:
-fclasse-stringa-costante=nome della classe
Usa il nome della classe come nome della classe da istanziare per ogni stringa letterale
specificato con la sintassi "@"..."". Il nome della classe predefinito è "NXConstantString" se
viene utilizzato il runtime GNU e "NSConstantString" se viene utilizzato il runtime NeXT
usato (vedi sotto). Il -fstringhe-cfcostanti opzione, se presente, prevale sul
-fcostante-classe-stringa impostazione e fare in modo che i letterali "@"..."" siano disposti come costanti
Stringhe CoreFoundation.
-fgnu-runtime
Genera codice oggetto compatibile con il runtime standard di GNU Objective-C. Questo è
l'impostazione predefinita per la maggior parte dei tipi di sistemi.
-fnext-runtime
Genera output compatibile con il runtime NeXT. Questa è l'impostazione predefinita per i dispositivi basati su NeXT
sistemi, inclusi Darwin e Mac OS X. La macro "__NEXT_RUNTIME__" è predefinita se
(e solo se) viene utilizzata questa opzione.
-fno-nil-ricevitori
Supponiamo che tutti i messaggi Objective-C vengano inviati ("[receiver message:arg]") in questo
l'unità di traduzione assicura che il destinatario non sia "zero". Questo permette di più
punti di ingresso efficienti nel runtime da utilizzare. Questa opzione è disponibile solo in
in combinazione con il runtime NeXT e ABI versione 0 o 1.
-fobjc-abi-versione=n
Usa la versione n dell'ABI Objective-C per il runtime selezionato. Questa opzione è
attualmente supportato solo per il runtime NeXT. In tal caso, la versione 0 è la
ABI tradizionale (32 bit) senza supporto per proprietà e altri Objective-C 2.0
aggiunte. La versione 1 è l'ABI tradizionale (32 bit) con supporto per proprietà e
altre aggiunte di Objective-C 2.0. La versione 2 è la moderna ABI (64 bit). Se niente è
specificato, l'impostazione predefinita è Versione 0 su macchine di destinazione a 32 bit e Versione 2 su 64 bit
macchine bersaglio.
-fobjc-call-cxx-cdtors
Per ogni classe Objective-C, controlla se una delle sue variabili di istanza è un oggetto C++
con un costruttore predefinito non banale. In tal caso, sintetizza uno speciale "- (id)
.cxx_construct" metodo di istanza che esegue costruttori predefiniti non banali su qualsiasi
tali variabili di istanza, nell'ordine, e quindi restituiscono "self". Allo stesso modo, controlla se ce ne sono
la variabile di istanza è un oggetto C++ con un distruttore non banale e, in tal caso, sintetizza
uno speciale metodo "- (void) .cxx_destruct" che esegue tutti questi distruttori predefiniti, in
ordine inverso.
I metodi "- (id) .cxx_construct" e "- (void) .cxx_destruct" quindi generati solo
operare su variabili di istanza dichiarate nella classe Objective-C corrente, e non su quelle
ereditato dalle superclassi. È responsabilità del runtime di Objective-C
invocare tutti questi metodi nella gerarchia di ereditarietà di un oggetto. Il "- (id)
I metodi .cxx_construct" vengono invocati dal runtime subito dopo un nuovo oggetto
l'istanza è allocata; i metodi "- (void) .cxx_destruct" sono invocati immediatamente
prima che il runtime rilasci un'istanza di oggetto.
Al momento della stesura di questo documento, solo il runtime NeXT su Mac OS X 10.4 e versioni successive ha il supporto per
invocando i metodi "- (id) .cxx_construct" e "- (void) .cxx_destruct".
-fobjc-invio-diretto
Consenti salti veloci al dispatcher di messaggi. Su Darwin questo si realizza tramite il
pagina com.
-fobjc-eccezioni
Abilita il supporto sintattico per la gestione strutturata delle eccezioni in Objective-C, simile a
ciò che viene offerto da C++ e Java. Questa opzione è necessaria per utilizzare Objective-C
parole chiave @try, @throw, @catch, @finally e @synchronized. Questa opzione è disponibile
sia con il runtime GNU che con il runtime NeXT (ma non disponibile insieme a
il runtime NeXT su Mac OS X 10.2 e versioni precedenti).
-fobjc-gc
Abilita la garbage collection (GC) nei programmi Objective-C e Objective-C++. Questa opzione
è disponibile solo con il runtime NeXT; il runtime GNU ha una spazzatura diversa
implementazione della raccolta che non richiede flag speciali del compilatore.
-fobjc-nilcheck
Per il runtime NeXT con la versione 2 dell'ABI, verifica la presenza di un metodo di ricezione nullo
invocazioni prima di eseguire la chiamata al metodo effettiva. Questa è l'impostazione predefinita e può essere
disabilitato usando -fno-objc-nilcheck. I metodi di classe e le super chiamate non vengono mai controllati
per zero in questo modo, non importa su cosa sia impostato questo flag. Attualmente questo flag funziona
nulla quando viene utilizzato il runtime GNU o una versione precedente dell'ABI runtime NeXT.
-fobjc-std=objc1
Conforme alla sintassi del linguaggio di Objective-C 1.0, il linguaggio riconosciuto da GCC 4.0.
Ciò riguarda solo le aggiunte di Objective-C al linguaggio C/C++; non influisce
conformità agli standard C/C++, che è controllata dal dialetto C/C++ separato
flag di opzione. Quando questa opzione viene utilizzata con Objective-C o Objective-C++
compilatore, qualsiasi sintassi Objective-C non riconosciuta da GCC 4.0 viene rifiutata. Questo
è utile se devi assicurarti che il tuo codice Objective-C possa essere compilato con
versioni precedenti di GCC.
-classi-freplace-objc
Emetti un indicatore speciale che istruisce ld(1) non collegare staticamente nell'oggetto risultante
file e consenti dovrebbe(1) per caricarlo invece in fase di esecuzione. Questo è usato in
insieme alla modalità di debug Fix-and-Continue, in cui il file oggetto in
la domanda può essere ricompilata e ricaricata dinamicamente nel corso del programma
esecuzione, senza la necessità di riavviare il programma stesso. Attualmente, Fix-and-
La funzionalità Continua è disponibile solo in combinazione con il runtime NeXT su Mac
OS X 10.3 e versioni successive.
-fzero-collegamento
Quando si compila per il runtime NeXT, il compilatore normalmente sostituisce le chiamate a
"objc_getClass("...")" (quando il nome della classe è noto in fase di compilazione) con
riferimenti di classe statici che vengono inizializzati al momento del caricamento, il che migliora il runtime
prestazione. Specificando il -fzero-collegamento flag sopprime questo comportamento e causa
le chiamate a "objc_getClass("...")" da mantenere. Questo è utile in Zero-Link
modalità di debug, poiché consente di modificare le implementazioni delle singole classi
durante l'esecuzione del programma. Il runtime GNU attualmente conserva sempre le chiamate a
"objc_get_class("...")" indipendentemente dalle opzioni della riga di comando.
-fno-ivar-locale
Per impostazione predefinita, è possibile accedere alle variabili di istanza in Objective-C come se fossero locali
variabili all'interno dei metodi della classe in cui sono dichiarate. Questo può portare a
shadowing tra variabili di istanza e altre variabili dichiarate localmente
all'interno di un metodo di classe o globalmente con lo stesso nome. Specificando il -fno-ivar-locale
flag disabilita questo comportamento evitando così problemi di shadowing variabile.
-fivar-visibilità=[la percezione|protetta|un bagno|pacchetto]
Imposta la visibilità della variabile di istanza predefinita sull'opzione specificata in modo che l'istanza
variabili dichiarate al di fuori dell'ambito di qualsiasi direttiva del modificatore di accesso per impostazione predefinita al
visibilità specificata.
-gen-decl
Scarica le dichiarazioni dell'interfaccia per tutte le classi viste nel file sorgente in un file denominato
nomeorigine.decl.
-Wassign-intercetta (solo Object-C e Objective-C++)
Avvisa ogni volta che un'assegnazione Objective-C viene intercettata dal Garbage Collector.
-Wno-protocollo (solo Object-C e Objective-C++)
Se una classe viene dichiarata per implementare un protocollo, viene emesso un avviso per ogni metodo
nel protocollo non implementato dalla classe. Il comportamento predefinito è di
emettere un avviso per ogni metodo non implementato esplicitamente nella classe, anche se a
l'implementazione del metodo è ereditata dalla superclasse. Se usi il -Wno-protocollo
opzione, quindi i metodi ereditati dalla superclasse sono considerati implementati,
e per loro non viene emesso alcun avviso.
-Wselettore (solo Object-C e Objective-C++)
Avvisa se vengono trovati più metodi di tipo diverso per lo stesso selettore durante
compilazione. Il controllo viene eseguito sull'elenco dei metodi nella fase finale di
compilazione. Inoltre, viene eseguito un controllo per ogni selettore che appare in a
Espressione "@selector(...)" e un metodo corrispondente per quel selettore è stato
trovato durante la compilazione. Perché questi controlli scansionano la tabella dei metodi solo alla fine
di compilazione, questi avvisi non vengono prodotti se la fase finale della compilazione è
non raggiunto, ad esempio perché viene rilevato un errore durante la compilazione, oppure perché il
-fsintassi solo l'opzione è in uso.
-Wstrict-selettore-match (solo Object-C e Objective-C++)
Avvisa se vengono trovati più metodi con argomenti e/o tipi restituiti diversi per a
dato selettore quando si tenta di inviare un messaggio utilizzando questo selettore a un destinatario di
digitare "id" o "Classe". Quando questo flag è disattivato (che è il comportamento predefinito), il
il compilatore omette tali avvisi se le differenze trovate sono limitate ai tipi che condividono
la stessa dimensione e allineamento.
-Selettore-dichiarato-wund (solo Object-C e Objective-C++)
Avvisa se viene trovata un'espressione "@selector(...)" che fa riferimento a un selettore non dichiarato. UN
selettore è considerato non dichiarato se nessun metodo con quel nome è stato dichiarato prima
l'espressione "@selector(...)", esplicitamente in una @interface o @protocol
dichiarazione o implicitamente in una sezione @implementation. Questa opzione funziona sempre
i suoi controlli non appena viene trovata un'espressione "@selector(...)", mentre -Wselettore esclusivamente
effettua le sue verifiche nella fase finale della compilazione. Questo rafforza anche la codifica
convenzione di stile secondo cui metodi e selettori devono essere dichiarati prima di essere utilizzati.
-print-objc-runtime-info
Genera un'intestazione C che descrive la struttura più grande passata per valore, se presente.
Opzioni a Controllo Diagnosi Messaggi formattazione
Tradizionalmente, i messaggi di diagnostica sono stati formattati indipendentemente dal dispositivo di output
aspetto (ad es. la sua larghezza, ...). È possibile utilizzare le opzioni descritte di seguito per controllare il
algoritmo di formattazione per i messaggi di diagnostica, ad es. quanti caratteri per riga, con quale frequenza
le informazioni sulla posizione di origine devono essere riportate. Nota che alcuni front-end di lingua potrebbero
non onorare queste opzioni.
-flunghezza-messaggio=n
Prova a formattare i messaggi di errore in modo che si adattino alle righe di circa n caratteri. Se n is
zero, quindi non viene eseguito il ritorno a capo; ogni messaggio di errore viene visualizzato su una singola riga.
Questa è l'impostazione predefinita per tutti i front-end.
-fdiagnostics-show-location=una volta
Significativo solo in modalità a capo automatico. Incarica il reporter dei messaggi diagnostici di
emetti informazioni sulla posizione di origine una volta; cioè, nel caso in cui il messaggio sia troppo lungo per adattarsi
su una singola linea fisica e deve essere avvolto, la posizione di origine non verrà emessa
(come prefisso) di nuovo, più e più volte, nelle successive righe di continuazione. Questo è il
comportamento predefinito.
-fdiagnostics-show-location=ogni-riga
Significativo solo in modalità a capo automatico. Incarica il reporter dei messaggi diagnostici di
emettono le stesse informazioni sulla posizione di origine (come prefisso) per le linee fisiche risultanti
dal processo di rottura di un messaggio che è troppo lungo per stare su una sola riga.
-fdiagnostics-colore[=QUANDO]
-fno-diagnostica-colore
Usa il colore nella diagnostica. QUANDO is mai, sempre, o auto. L'impostazione predefinita dipende da come
il compilatore è stato configurato, può essere uno dei precedenti QUANDO opzioni o anche
mai if GCC_COLORI la variabile di ambiente non è presente nell'ambiente e auto
altrimenti. auto significa usare il colore solo quando l'errore standard è un terminale. Il
forme -fdiagnostics-colore e -fno-diagnostica-colore sono alias per
-fdiagnostics-color=sempre e -fdiagnostics-color=mai, Rispettivamente.
I colori sono definiti dalla variabile d'ambiente GCC_COLORI. Il suo valore è due punti
elenco separato di funzionalità e sottostringhe Select Graphic Rendition (SGR). SGR
i comandi vengono interpretati dal terminale o dall'emulatore di terminale. (Vedi la sezione in
la documentazione del terminale di testo per i valori consentiti e i loro significati come
attributi di carattere.) Questi valori di sottostringa sono numeri interi nella rappresentazione decimale
e può essere concatenato con il punto e virgola. I valori comuni da concatenare includono 1 per
grassetto, 4 per sottolineare, 5 per lampeggiare, 7 per inverso, 39 per il colore di primo piano predefinito, 30
a 37 per i colori di primo piano, 90 a 97 per i colori di primo piano in modalità a 16 colori, 38, 5, 0 a
38, 5, 255 per le modalità a 88 colori e 256 colori colori di primo piano, 49 per lo sfondo predefinito
colore, 40 a 47 per i colori di sfondo, 100 a 107 per i colori di sfondo in modalità a 16 colori,
e 48, 5, 0 a 48, 5, 255 per le modalità a 88 colori e 256 colori colori di sfondo.
Il predefinito GCC_COLORI is
error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01
where 01; 31 è rosso vivo, 01; 35 è grassetto magenta, 01; 36 è ciano in grassetto, 01; 32 è in grassetto
verde e 01 è audace. Collocamento GCC_COLORI alla stringa vuota disabilita i colori.
Le funzionalità supportate sono le seguenti.
"errore="
Sottostringa SGR per errore: marker.
"avviso="
Sottostringa SGR per avviso: marcatori.
"nota="
Sottostringa SGR per nota: marcatori.
"caret="
Sottostringa SGR per la linea caret.
"luogo="
Sottostringa SGR per informazioni sulla posizione, file: riga or file:riga:colonna ecc.
"citazione="
Sottostringa SGR per le informazioni stampate tra virgolette.
-fno-diagnostica-show-option
Per impostazione predefinita, ogni diagnostica emessa include il testo che indica l'opzione della riga di comando
che controlla direttamente la diagnostica (se tale opzione è nota al diagnostico
macchinari). Specificando il -fno-diagnostica-show-option la bandiera lo sopprime
comportamento.
-fno-diagnostics-show-caret
Per impostazione predefinita, ogni diagnostica emessa include la riga di origine originale e un accento circonflesso '^'
indicando la colonna. Questa opzione elimina queste informazioni. La linea di origine è
troncato a n caratteri, se il -flunghezza-messaggio=n l'opzione è data. Quando l'uscita
è fatto al terminale, la larghezza è limitata alla larghezza data dal COLONNE
variabile d'ambiente o, se non impostata, alla larghezza del terminale.
Opzioni a RICHIEDI or Sopprimi Avvertenze
Gli avvisi sono messaggi diagnostici che segnalano costruzioni che non sono intrinsecamente
errati ma che sono rischiosi o suggeriscono che potrebbe esserci stato un errore.
Le seguenti opzioni indipendenti dalla lingua non abilitano avvisi specifici ma controllano il
tipi di diagnostica prodotti da GCC.
-fsintassi solo
Controlla il codice per errori di sintassi, ma non fare nulla oltre.
-fmax-errori=n
Limita il numero massimo di messaggi di errore a n, a quel punto GCC si salva piuttosto
piuttosto che tentare di continuare a elaborare il codice sorgente. Se n è 0 (il valore predefinito),
non c'è limite al numero di messaggi di errore prodotti. Se -Errori fatali è altresì
specificato, quindi -Errori fatali ha la precedenza su questa opzione.
-w Inibire tutti i messaggi di avviso.
-Errore
Trasforma tutti gli avvisi in errori.
-Errore=
Trasforma l'avviso specificato in un errore. Viene aggiunto l'identificatore per un avviso;
per esempio -Errore=interruttore trasforma gli avvisi controllati da -Winterruttore in errori.
Questo interruttore assume una forma negativa, da usare per negare -Errore per avvisi specifici;
per esempio -No-errore=interruttore fa -Winterruttore gli avvisi non sono errori, anche quando -Errore
è in vigore.
Il messaggio di avviso per ogni avviso controllabile include l'opzione che controlla
L'avviso. Tale opzione può quindi essere utilizzata con -Errore= e -No-errore= come descritto
sopra. (La stampa dell'opzione nel messaggio di avviso può essere disabilitata utilizzando il tasto
-fno-diagnostica-show-option bandiera.)
Nota che specificando -Errore=foo implica automaticamente -Wfoo. Tuttavia, -No-errore=foo
non implica nulla.
-Errori fatali
Questa opzione fa sì che il compilatore interrompa la compilazione al primo errore che si verifica
piuttosto che cercare di continuare e stampare ulteriori messaggi di errore.
Puoi richiedere molti avvisi specifici con opzioni che iniziano con -Wdi strumenti adatti, questi
- Wimplicit per richiedere avvisi su dichiarazioni implicite. Ciascuno di questi avvertimenti specifici
opzioni ha anche una forma negativa che inizia -No- disattivare gli avvisi; Per esempio,
-Non-implicito. Questo manuale elenca solo uno dei due moduli, qualunque non sia quello predefinito.
Per ulteriori opzioni specifiche della lingua fare riferimento anche a C++ Dialetto Opzioni e Objective-C
e Obiettivo-C++ Dialetto Opzioni.
Alcune opzioni, come -Parete e -Wextra, attiva altre opzioni, come -Wunusato, quale
può attivare ulteriori opzioni, come -Valore-inutilizzato. L'effetto combinato di positivo e
forme negative è che le opzioni più specifiche hanno la priorità su quelle meno specifiche,
indipendentemente dalla loro posizione nella riga di comando. Per opzioni della stessa specificità,
l'ultimo ha effetto. Le opzioni abilitate o disabilitate tramite pragma hanno effetto come se
apparso alla fine della riga di comando.
Quando viene richiesta un'opzione di avviso non riconosciuta (ad es. -Wunknown-avviso), GCC emette a
diagnostica che indica che l'opzione non è stata riconosciuta. Tuttavia, se il -No- viene utilizzata la forma,
il comportamento è leggermente diverso: non viene prodotta alcuna diagnostica per -Wno-sconosciuto-avviso
a meno che non vengano prodotte altre diagnosi. Ciò consente l'uso di nuovi -No- Opzioni
con vecchi compilatori, ma se qualcosa va storto, il compilatore avverte che un messaggio non riconosciuto
l'opzione è presente.
-Wpedante
-pedante
Emettere tutti gli avvertimenti richiesti dalla rigorosa ISO C e ISO C++; rifiuta tutti i programmi che
utilizzare estensioni vietate e alcuni altri programmi che non seguono ISO C e ISO
C++. Per ISO C, segue la versione dello standard ISO C specificato da any -std
opzione utilizzata.
I programmi ISO C e ISO C++ validi dovrebbero essere compilati correttamente con o senza questa opzione
(anche se pochi rari richiedono -ansi o -std opzione che specifica la versione richiesta di
ISOC). Tuttavia, senza questa opzione, alcune estensioni GNU e i tradizionali C e
Sono supportate anche le funzionalità C++. Con questa opzione vengono rifiutati.
-Wpedante non causa messaggi di avviso per l'uso delle parole chiave alternative la cui
i nomi iniziano e finiscono con __. Anche gli avvisi pedanti sono disabilitati nell'espressione
che segue "__estensione__". Tuttavia, solo i file di intestazione di sistema dovrebbero usarli
vie di fuga; i programmi applicativi dovrebbero evitarli.
Alcuni utenti provano a usare -Wpedante per controllare i programmi per la rigorosa conformità ISO C. Essi
presto scoprono che non fa esattamente quello che vogliono: trova alcune pratiche non ISO,
ma non tutti --- solo quelli per i quali ISO C richiede una diagnostica, e alcuni altri per
quale diagnostica è stata aggiunta.
In alcuni casi potrebbe essere utile una funzione per segnalare qualsiasi mancata conformità alla ISO C,
ma richiederebbe un notevole lavoro aggiuntivo e sarebbe molto diverso da
-Wpedante. Non abbiamo in programma di supportare tale funzionalità nel prossimo futuro.
Dove lo standard specificato con -std rappresenta un dialetto GNU esteso di C, come
gnu90 or gnu99, c'è un corrispondente base Standard, la versione di ISO C su cui
si basa il dialetto esteso GNU. Avvertenze da -Wpedante sono dati dove sono
richiesto dalla norma di base. (Non ha senso dare tali avvertimenti
solo per caratteristiche non nel dialetto GNU C specificato, poiché per definizione il GNU
i dialetti del C includono tutte le funzionalità supportate dal compilatore con l'opzione data, e
non ci sarebbe nulla da avvertire.)
-errori-pedanti
Dare un errore ogni volta che il base Standard (Vedi -Wpedante) richiede una diagnosi, in
alcuni casi in cui c'è un comportamento indefinito in fase di compilazione e in alcuni altri casi
che non impediscono la compilazione di programmi validi secondo lo standard.
Questo non è equivalente a -Errore=pedante, poiché ci sono errori abilitati da questo
opzione e non abilitata da quest'ultima e viceversa.
-Parete
Ciò abilita tutti gli avvisi sulle costruzioni che alcuni utenti considerano
discutibili, e che sono facili da evitare (o modificare per evitare l'avvertimento), anche in
combinazione con le macro. Ciò abilita anche alcuni avvisi specifici della lingua descritti
in C++ Dialetto Opzioni e Objective-C e Obiettivo-C++ Dialetto Opzioni.
-Parete attiva i seguenti flag di avviso:
-Indirizzo -Limiti di guerra=1 (solo con -O2) -Wc++11-compatibile -Wc++14-compatibile
-Wchar-pedici -Wenum-confronta (in C/ObjC; questo è attivo per impostazione predefinita in C++)
-Wimplicit-int (solo C e Objective-C) -Dichiarazione-funzione-Wimplicit (C e
Solo Obiettivo-C) -Wcommento -Formato W -Wprincipale (solo per C/ObjC e a meno che
-autoportante) -Wforse-non inizializzato -Wmissing-bretelle (solo per C/ObjC) -Non nullo
-Wopenmp-simd -Wparentesi -Wpointer-segno -Riordina -Tipo Wreturn -Wpunto-sequenza
-Wsign-confronta (solo in C++) -Wstrict-alias -Wstrict-overflow=1 -Winterruttore
-Scritte -Non inizializzato -Wunknown-pragma -Funzione Wunused -Etichetta-Wunused
-Valore-inutilizzato -Variabile-Wunused -W registro-volatile-var
Nota che alcuni flag di avviso non sono implicati da -Parete. Alcuni di loro mettono in guardia su
costruzioni che gli utenti generalmente non considerano discutibili, ma che
occasionalmente potresti voler controllare; altri mettono in guardia su costruzioni che sono
necessario o difficile da evitare in alcuni casi, e non esiste un modo semplice per modificare il
codice per eliminare l'avviso. Alcuni di loro sono abilitati da -Wextra ma molti di loro
devono essere abilitati singolarmente.
-Wextra
Ciò abilita alcuni flag di avviso extra che non sono abilitati da -Parete. (Questa opzione è stata utilizzata
da chiamare -W. Il nome precedente è ancora supportato, ma il nome più recente è più
descrittivo.)
-Wobbed -Wempty-corpo -Qualificatori senza nome -Wmissing-field-inizializzatori
-Wmissing-tipo-parametro (solo C) -Dichiarazione in stile Wold (solo C) -Woverride-init
-Wsign-confronta -Wtype-limiti -Non inizializzato -Wunused-parametro (solo con -Wunusato or
-Parete) -Parametro-non-utilizzato-ma-impostato (solo con -Wunusato or -Parete)
L'opzione -Wextra stampa anche messaggi di avviso per i seguenti casi:
* Un puntatore viene confrontato con l'intero zero con "<", "<=", ">" o ">=".
* (solo C++) Un enumeratore e un non enumeratore appaiono entrambi in un condizionale
espressione.
* (solo C++) Basi virtuali ambigue.
* (solo C++) Sottoscrizione di un array che è stato dichiarato "register".
* (solo C++) Prendendo l'indirizzo di una variabile che è stata dichiarata "register".
* (Solo C++) Una classe base non è inizializzata nel costruttore di copie di una classe derivata.
-Wchar-pedici
Avvisa se un indice di array ha il tipo "char". Questa è una causa comune di errore, in quanto
i programmatori spesso dimenticano che questo tipo è firmato su alcune macchine. Questo avviso è
abilitato da -Parete.
-Wcommento
Avvisa ogni volta che una sequenza di inizio commento /* appare in a /* commento, o ogni volta che a
Barra rovesciata-Newline appare in a // commento. Questo avviso è abilitato da -Parete.
-No-copertura-mancata corrispondenza
Avvisa se i profili di feedback non corrispondono quando si utilizza il -fprofile-uso opzione. Se un
il file sorgente viene modificato tra la compilazione con -fprofile-gen e con -fprofile-uso,
i file con il feedback del profilo possono non corrispondere al file di origine e GCC non può
utilizzare le informazioni di feedback del profilo. Per impostazione predefinita, questo avviso è abilitato ed è
trattato come un errore. -No-copertura-mancata corrispondenza può essere utilizzato per disabilitare l'avviso o
-Wno-error=mancata corrispondenza di copertura può essere utilizzato per disabilitare l'errore. Disabilitare l'errore
per questo avviso può risultare in codice mal ottimizzato ed è utile solo in caso di
modifiche molto minori come correzioni di bug a una base di codice esistente. Completamente disabilitante
l'avviso non è raccomandato.
-No-cpp
(solo C, Objective-C, C++, Objective-C++ e Fortran)
Sopprime i messaggi di avviso emessi dalle direttive "#warning".
-Wdoppia-promozione (solo C, C++, Objective-C e Objective-C++)
Dare un avviso quando un valore di tipo "float" viene implicitamente promosso a "double". CPU
con un'unità a virgola mobile a "precisione singola" a 32 bit implementare "float" nell'hardware,
ma emula "doppio" nel software. Su una macchina del genere, facendo calcoli usando
i valori "doppi" sono molto più costosi a causa del sovraccarico richiesto per il software
emulazione.
È facile fare calcoli accidentalmente con "doppio" perché in virgola mobile
i letterali sono implicitamente di tipo "doppio". Ad esempio, in:
area di galleggiamento (raggio di galleggiamento)
{
restituisce 3.14159 * raggio * raggio;
}
il compilatore esegue l'intero calcolo con "double" perché la virgola mobile
letterale è un "doppio".
-Formato W
-Wformato=n
Controlla le chiamate a "printf" e "scanf", ecc., per assicurarti che gli argomenti forniti
avere tipi appropriati alla stringa di formato specificata e che le conversioni
specificato nella stringa di formato ha senso. Ciò include funzioni standard e
altri specificati dagli attributi di formato, nei campi "printf", "scanf", "strftime" e
famiglie "strfmon" (un'estensione X/Open, non nello standard C) (o altri target-
famiglie specifiche). Quali funzioni vengono controllate senza che gli attributi di formato siano stati
specificato dipende dalla versione standard selezionata, e tali controlli delle funzioni
senza l'attributo specificato sono disabilitati da -autoportante or -fno-integrato.
I formati sono confrontati con le caratteristiche del formato supportate dalla GNU libc versione 2.2.
Questi includono tutte le funzionalità ISO C90 e C99, nonché le funzionalità di Single Unix
Specifiche e alcune estensioni BSD e GNU. Altre implementazioni di librerie potrebbero non esserlo
supportare tutte queste funzionalità; GCC non supporta gli avvisi sulle funzionalità che vanno oltre
i limiti di una particolare biblioteca. Tuttavia, se -Wpedante è usato con -Formato W,
vengono fornite avvertenze sulle caratteristiche del formato non nella versione standard selezionata (ma non
per i formati "strfmon", poiché questi non sono in nessuna versione dello standard C).
-Wformato=1
-Formato W
Opzione -Formato W è equivalente -Wformato=1e -Wno-formato è equivalente
-Wformato=0. Da -Formato W controlla anche gli argomenti di formato nullo per diversi
-Formato W implica anche -Non nullo. Alcuni aspetti di questo livello di formato
il controllo può essere disabilitato dalle opzioni: -Wno-formato-contiene-nul,
-Wno-format-extra-argse -Wno-formato-lunghezza zero. -Formato W è abilitato da
-Parete.
-Wno-formato-contiene-nul
If -Formato W è specificato, non avvisare delle stringhe di formato che contengono byte NUL.
-Wno-format-extra-args
If -Formato W è specificato, non avvisare degli argomenti in eccesso a un "printf" o
funzione di formato "scansione". Lo standard C specifica che tali argomenti sono
ignorato.
Dove gli argomenti non utilizzati si trovano tra gli argomenti utilizzati specificati con $
specifiche del numero dell'operando, normalmente vengono ancora forniti avvisi, poiché il
l'implementazione non poteva sapere quale tipo passare a "va_arg" per saltare l'inutilizzato
argomenti. Tuttavia, nel caso dei formati "scanf", questa opzione sopprime il
avviso se gli argomenti non utilizzati sono tutti puntatori, poiché Single Unix
La specifica dice che tali argomenti non utilizzati sono consentiti.
-Wno-formato-lunghezza zero
If -Formato W è specificato, non avvisare sui formati di lunghezza zero. Lo standard C
specifica che sono consentiti formati di lunghezza zero.
-Wformato=2
permettere -Formato W più controlli di formato aggiuntivi. Attualmente equivalente a -Formato W
-Wformat-non letterale -Wformat-sicurezza -Wformato-y2k.
-Wformat-non letterale
If -Formato W è specificato, avvisa anche se la stringa di formato non è una stringa letterale
e quindi non può essere verificato, a meno che la funzione di formato non prenda i suoi argomenti di formato come
un "va_list".
-Wformat-sicurezza
If -Formato W è specificato, avvisa anche sugli usi delle funzioni di formato che rappresentano
possibili problemi di sicurezza. Al momento, questo avverte delle chiamate a "printf" e
"scanf" funzioni in cui la stringa di formato non è una stringa letterale e non ci sono
argomenti di formato, come in "printf (foo);". Questo potrebbe essere un buco di sicurezza se il
la stringa di formato proviene da un input non attendibile e contiene %n. (Questo è attualmente un
sottoinsieme di cosa -Wformat-non letterale mette in guardia, ma in futuro gli avvertimenti potrebbero essere
aggiunto a -Wformat-sicurezza che non sono inclusi in -Wformat-non letterale.)
-Wformato-firma
If -Formato W è specificato, avvisa anche se la stringa di formato richiede un unsigned
argomento e l'argomento è firmato e viceversa.
NOTA: in Ubuntu 8.10 e versioni successive questa opzione è abilitata per impostazione predefinita per C,
C++, ObjC, ObjC++. Per disabilitare, utilizzare -Wno-formato-sicurezza, o disabilita tutti i formati
avvisi con -Wformato=0. Per rendere fatali gli avvisi di sicurezza del formato, specificare
-Errore=formato-sicurezza.
-Wformato-y2k
If -Formato W è specificato, avvisa anche dei formati "strftime" che possono produrre solo a
anno a due cifre.
-Non nullo
Avvisa di passare un puntatore nullo per gli argomenti contrassegnati come richiedenti un valore non nullo
dall'attributo della funzione "non null".
-Non nullo è incluso in -Parete e -Formato W. Può essere disabilitato con il -No-non nullo
opzione.
-Winit-auto (solo C, C++, Objective-C e Objective-C++)
Avvisa delle variabili non inizializzate che vengono inizializzate con se stesse. Nota questo
l'opzione può essere utilizzata solo con -Non inizializzato opzione.
Ad esempio, GCC avverte che "i" non è stata inizializzata solo nel seguente frammento
quando -Winit-auto è stato specificato:
intero f()
{
int io = io;
ritorno i;
}
Questo avviso è abilitato da -Parete in C ++.
-Wimplicit-int (solo C e Objective-C)
Avvisa quando una dichiarazione non specifica un tipo. Questo avviso è abilitato da -Parete.
-Dichiarazione-funzione-Wimplicit (solo C e Objective-C)
Dare un avviso ogni volta che una funzione viene utilizzata prima di essere dichiarata. In modalità C99
(-std=c99 or -std=gnu99), questo avviso è abilitato per impostazione predefinita e viene trasformato in un
errore di -errori-pedanti. Questo avviso è abilitato anche da -Parete.
- Wimplicit (solo C e Objective-C)
Uguale a -Wimplicit-int e -Dichiarazione-funzione-Wimplicit. Questo avviso è abilitato
by -Parete.
-Qualificatori senza nome (solo C e C++)
Avvisa se il tipo restituito di una funzione ha un qualificatore di tipo come "const". Per ISO C
tale qualificatore di tipo non ha effetto, poiché il valore restituito da una funzione non è un
lvalue. Per C++, l'avviso viene emesso solo per i tipi scalari o "void". ISO C
proibisce i tipi di ritorno "void" qualificati sulle definizioni di funzione, quindi tali tipi di ritorno
ricevere sempre un avviso anche senza questa opzione.
Questo avviso è abilitato anche da -Wextra.
-Wprincipale
Avvisa se il tipo di "principale" è sospetto. "main" dovrebbe essere una funzione con external
linkage, restituendo int, prendendo zero argomenti, due o tre argomenti di
tipi appropriati. Questo avviso è abilitato per impostazione predefinita in C++ ed è abilitato da entrambi
-Parete or -Wpedante.
-Wmissing-bretelle
Avvisa se un inizializzatore di aggregazione o unione non è completamente tra parentesi. Nel seguente
esempio, l'inizializzatore per "a" non è completamente tra parentesi, ma quello per "b" è completamente
tra parentesi. Questo avviso è abilitato da -Parete in c.
int a[2][2] = { 0, 1, 2, 3 };
int b[2][2] = { { 0, 1 }, { 2, 3 } };
Questo avviso è abilitato da -Parete.
-Wmissing-include-dirs (solo C, C++, Objective-C e Objective-C++)
Avvisa se non esiste una directory di inclusione fornita dall'utente.
-Wparentesi
Avvisa se le parentesi vengono omesse in determinati contesti, ad esempio quando c'è un
assegnazione in un contesto in cui è previsto un valore di verità o quando gli operatori sono annidati
la cui precedenza le persone spesso si confondono.
Avvisa anche se appare un confronto come "x<=y<=z"; questo è equivalente a "(x<=y ? 1 :
0) <= z", che è un'interpretazione diversa da quella della matematica ordinaria
notazione.
Avvisa anche di costruzioni in cui potrebbe esserci confusione su quale istruzione "if" e
"altro" ramo appartiene. Ecco un esempio di un caso del genere:
{
se un)
se (b)
pippo ();
altro
sbarra ();
}
In C/C++, ogni ramo "else" appartiene all'istruzione "if" più interna possibile, che
in questo esempio è "se (b)". Questo spesso non è quello che il programmatore si aspettava, come
illustrato nell'esempio sopra dal rientro scelto dal programmatore. Quando c'è
il potenziale per questa confusione, GCC emette un avviso quando viene specificato questo flag.
Per eliminare l'avviso, aggiungi parentesi graffe esplicite attorno all'istruzione "if" più interna così
non c'è modo che l'"altro" possa appartenere al "se" che lo racchiude. Il codice risultante sembra
come questo:
{
se un)
{
se (b)
pippo ();
altro
sbarra ();
}
}
Avvisa anche per usi pericolosi dell'estensione GNU a "?:" con operando centrale omesso.
Quando la condizione nell'operatore "?": è un'espressione booleana, il valore omesso è
sempre 1. Spesso i programmatori si aspettano che sia un valore calcolato all'interno del condizionale
espressione invece.
Questo avviso è abilitato da -Parete.
-Wpunto-sequenza
Avvisa del codice che potrebbe avere una semantica indefinita a causa di violazioni della sequenza
regole punto negli standard C e C++.
Gli standard C e C++ definiscono l'ordine in cui le espressioni in un programma C/C++ sono
valutato in termini di sequenza punti, che rappresentano un ordinamento parziale tra i
esecuzione di parti del programma: quelle eseguite prima del punto di sequenza e quelle
eseguito dopo di esso. Questi si verificano dopo la valutazione di un'espressione completa (una che
non fa parte di un'espressione più grande), dopo la valutazione del primo operando di a
Operatore "&&", "||", "? :" o "," (virgola), prima che venga chiamata una funzione (ma dopo il
valutazione dei suoi argomenti e dell'espressione che denota la funzione chiamata), e in
certi altri luoghi. Oltre a quanto espresso dalle regole del punto di sequenza, l'ordine
di valutazione delle sottoespressioni di un'espressione non è specificato. Tutte queste regole
descrivere solo un ordine parziale piuttosto che un ordine totale, poiché, ad esempio, se due
le funzioni vengono chiamate all'interno di un'espressione senza punti di sequenza tra di loro, il
l'ordine in cui vengono chiamate le funzioni non è specificato. Tuttavia, gli standard
comitato hanno stabilito che le chiamate di funzione non si sovrappongono.
Non è specificato quando tra punti sequenza modifiche ai valori di
gli oggetti hanno effetto. I programmi il cui comportamento dipende da questo hanno un comportamento indefinito;
gli standard C e C++ specificano che "Tra il punto di sequenza precedente e successivo e
oggetto deve avere il suo valore memorizzato modificato al massimo una volta dalla valutazione di un
espressione. Inoltre, il valore precedente deve essere letto solo per determinare il valore a
essere memorizzato.". Se un programma infrange queste regole, i risultati su qualsiasi particolare
implementazione sono del tutto imprevedibili.
Esempi di codice con comportamento indefinito sono "a = a++;", "a[n] = b[n++]" e "a[i++] =
i;". Alcuni casi più complicati non vengono diagnosticati da questa opzione e può dare un
risultato falso positivo occasionale, ma in generale è stato trovato abbastanza efficace a
rilevare questo tipo di problema nei programmi.
Lo standard è formulato in modo confuso, quindi c'è qualche dibattito sul preciso
significato delle regole del punto di sequenza in casi sottili. Link alle discussioni del
problema, comprese le definizioni formali proposte, può essere trovato nella pagina delle letture del GCC,
ahttp://gcc.gnu.org/readings.html>.
Questo avviso è abilitato da -Parete per C e C++.
-No-ritorno-indirizzo-locale
Non avvisare di restituire un puntatore (o in C++, un riferimento) a una variabile che va
fuori ambito dopo il ritorno della funzione.
-Tipo Wreturn
Avvisa ogni volta che una funzione viene definita con un tipo restituito che per impostazione predefinita è "int". Anche
avvisare di qualsiasi istruzione "return" senza valore restituito in una funzione il cui tipo restituito
non è "vuoto" (la caduta dalla fine del corpo della funzione è considerata un ritorno
senza un valore), e su un'istruzione "return" con un'espressione in una funzione
il cui tipo restituito è "void".
Per C++, una funzione senza tipo restituito produce sempre un messaggio diagnostico, anche
quando -Wno-ritorno-tipo è specificato. Le uniche eccezioni sono "principale" e funzioni
definito nelle intestazioni di sistema.
Questo avviso è abilitato da -Parete.
-Wshift-count-negativo
Avvisa se il conteggio dei turni è negativo. Questo avviso è abilitato per impostazione predefinita.
-Woverflow conteggio turni
Avvisa se conteggio turni >= larghezza del tipo. Questo avviso è abilitato per impostazione predefinita.
-Winterruttore
Avvisa ogni volta che un'istruzione "switch" ha un indice di tipo enumerato e manca di un "case"
per uno o più dei codici citati di tale enumerazione. (La presenza di un "default"
etichetta impedisce questo avviso.) anche le etichette "case" al di fuori dell'intervallo di enumerazione
provoca avvisi quando viene utilizzata questa opzione (anche se è presente un'etichetta "predefinita"). Questo
l'avviso è abilitato da -Parete.
-Wswitch-predefinito
Avvisa ogni volta che un'istruzione "switch" non ha un caso "predefinito".
-Wswitch-enumerazione
Avvisa ogni volta che un'istruzione "switch" ha un indice di tipo enumerato e manca di un "case"
per uno o più dei codici citati di tale enumerazione. etichette "caso" all'esterno del
L'intervallo di enumerazione provoca anche avvisi quando viene utilizzata questa opzione. L'unica differenza
fra -Winterruttore e questa opzione è che questa opzione fornisce un avviso su un'omissione
codice di enumerazione anche se è presente un'etichetta "predefinita".
-Wswitch-bool
Avvisa ogni volta che un'istruzione "switch" ha un indice di tipo booleano. È possibile
sopprimere questo avviso lanciando l'espressione di controllo su un tipo diverso da
"bollo". Per esempio:
interruttore ((int) (a == 4))
{
...
}
Questo avviso è abilitato per impostazione predefinita per i programmi C e C++.
-Wsync-nand (solo C e C++)
Avvisa quando le funzioni integrate "__sync_fetch_and_nand" e "__sync_nand_and_fetch" sono
Usato. Queste funzioni hanno cambiato la semantica in GCC 4.4.
-Scritte
Avvisa se si incontrano trigrafi che potrebbero cambiare il significato del programma
(i trigrafi all'interno dei commenti non sono avvisati). Questo avviso è abilitato da -Parete.
-Parametro-non-utilizzato-ma-impostato
Avvisa ogni volta che un parametro di funzione è assegnato a, ma altrimenti inutilizzato (a parte
sua dichiarazione).
Per eliminare questo avviso, utilizzare l'attributo "non utilizzato".
Questo avviso è abilitato anche da -Wunusato insieme -Wextra.
-Wunused-ma-set-variable
Avvisa ogni volta che viene assegnata una variabile locale, ma altrimenti inutilizzata (a parte la sua
dichiarazione). Questo avviso è abilitato da -Parete.
Per eliminare questo avviso, utilizzare l'attributo "non utilizzato".
Questo avviso è abilitato anche da -Wunusato, che è abilitato da -Parete.
-Funzione Wunused
Avvisa ogni volta che una funzione statica viene dichiarata ma non definita o una statica non in linea
la funzione non è utilizzata. Questo avviso è abilitato da -Parete.
-Etichetta-Wunused
Avvisa ogni volta che un'etichetta viene dichiarata ma non utilizzata. Questo avviso è abilitato da -Parete.
Per eliminare questo avviso, utilizzare l'attributo "non utilizzato".
-Wdefinizioni di tipo locale non utilizzate (solo C, Objective-C, C++ e Objective-C++)
Avvisa quando un typedef definito localmente in una funzione non viene utilizzato. Questo avviso è
abilitato da -Parete.
-Wunused-parametro
Avvisa ogni volta che un parametro di funzione non è utilizzato a parte la sua dichiarazione.
Per eliminare questo avviso, utilizzare l'attributo "non utilizzato".
-Risultato-non-utilizzato
Non avvisare se un chiamante di una funzione contrassegnata con l'attributo "warn_unused_result" lo fa
non utilizzare il suo valore di ritorno. L'impostazione predefinita è -Risultato-non utilizzato.
-Variabile-Wunused
Avvisa ogni volta che una variabile locale o una variabile statica non costante non viene utilizzata a parte
sua dichiarazione. Questo avviso è abilitato da -Parete.
Per eliminare questo avviso, utilizzare l'attributo "non utilizzato".
-Valore-inutilizzato
Avvisa ogni volta che un'istruzione calcola un risultato esplicitamente non utilizzato. Sopprimere
questo avviso converte l'espressione inutilizzata in "void". Ciò include un'espressione-
o il lato sinistro di un'espressione virgola che non contiene effetti collaterali.
Ad esempio, un'espressione come "x[i,j]" provoca un avviso, mentre "x[(void)i,j]"
non.
Questo avviso è abilitato da -Parete.
-Wunusato
Tutto quanto sopra -Wunusato opzioni combinate.
Per ricevere un avviso su un parametro di funzione non utilizzato, è necessario specificare
-Wextra -Wunusato (nota che -Parete implica -Wunusato), o specificare separatamente
-Wunused-parametro.
-Non inizializzato
Avvisa se viene utilizzata una variabile automatica senza prima essere inizializzata o se una variabile
può essere bloccato da una chiamata "setjmp". In C++, avvisa se un riferimento non statico o non
il membro "const" statico viene visualizzato in una classe senza costruttori.
Se vuoi avvisare del codice che usa il valore non inizializzato della variabile in
il proprio inizializzatore, usa il -Winit-auto opzione.
Questi avvertimenti si verificano per singoli elementi della struttura non inizializzati o disturbati,
variabili union o array, nonché per variabili non inizializzate o clobbed
nel complesso. Non si verificano per variabili o elementi dichiarati "volatili". Perché
questi avvertimenti dipendono dall'ottimizzazione, dalle variabili o dagli elementi esatti per i quali non esistono
gli avvisi dipendono dalle precise opzioni di ottimizzazione e dalla versione di GCC utilizzata.
Nota che potrebbe non esserci alcun avviso su una variabile che viene utilizzata solo per calcolare a
valore che di per sé non viene mai utilizzato, perché tali calcoli possono essere cancellati dal flusso di dati
analisi prima della stampa degli avvisi.
-Wforse-non inizializzato
Per una variabile automatica, se esiste un percorso dalla voce della funzione a un uso di
la variabile che viene inizializzata, ma esistono altri percorsi per i quali il
variabile non è inizializzata, il compilatore emette un avviso se non può provare il
i percorsi non inizializzati non vengono eseguiti in fase di esecuzione. Questi avvisi sono resi facoltativi
perché GCC non è abbastanza intelligente da vedere tutti i motivi per cui il codice potrebbe essere corretto
nonostante sembri avere un errore. Ecco un esempio di come ciò può accadere:
{
int x;
interruttore (y)
{
caso 1: x = 1;
break;
caso 2: x = 4;
break;
caso 3: x = 5;
}
pippo (x);
}
Se il valore di "y" è sempre 1, 2 o 3, allora "x" è sempre inizializzato, ma GCC
questo non lo sa. Per eliminare l'avviso, è necessario fornire un caso predefinito con
affermare(0) o codice simile.
Questa opzione avverte anche quando una variabile automatica non volatile potrebbe essere modificata da a
chiamata a "longjmp". Anche questi avvertimenti sono possibili solo in fase di ottimizzazione
compilazione.
Il compilatore vede solo le chiamate a "setjmp". Non può sapere dove sarà "longjmp"
chiamato; infatti, un gestore di segnale potrebbe chiamarlo in qualsiasi punto del codice. Come un
risultato, potresti ricevere un avviso anche quando in realtà non ci sono problemi perché "longjmp"
non può infatti essere chiamato nel luogo che creerebbe un problema.
Alcuni avvertimenti spuri possono essere evitati se dichiari tutte le funzioni che usi
non tornare mai come "noreturn".
Questo avviso è abilitato da -Parete or -Wextra.
-Wunknown-pragma
Avvisa quando viene rilevata una direttiva "#pragma" non compresa da GCC. Se questo
viene utilizzata l'opzione della riga di comando, vengono persino emessi avvisi per pragma sconosciuti nel sistema
file di intestazione. Questo non è il caso se gli avvisi sono abilitati solo dal -Parete
opzione della riga di comando.
-Wno-pragma
Non avvisare di usi impropri di pragma, come parametri errati, sintassi non valida o
conflitti tra pragma. Guarda anche -Wunknown-pragma.
-Wstrict-alias
Questa opzione è attiva solo quando -fstrict-alias è attivo. Avverte del codice che
potrebbe violare le rigide regole di aliasing utilizzate dal compilatore per l'ottimizzazione.
L'avviso non rileva tutti i casi, ma tenta di rilevare i più comuni
insidie. È incluso in -Parete. È equivalente a -Wstrict-alias=3
-Wstrict-alias=n
Questa opzione è attiva solo quando -fstrict-alias è attivo. Avverte del codice che
potrebbe violare le rigide regole di aliasing utilizzate dal compilatore per l'ottimizzazione.
Livelli più alti corrispondono a una maggiore precisione (meno falsi positivi). Livelli più alti
corrispondono anche a uno sforzo maggiore, simile al modo -O . -Wstrict-alias is
equivalente -Wstrict-alias=3.
Livello 1: Più aggressivo, veloce, meno preciso. Forse utile quando i livelli sono più alti
non avvisare ma -fstrict-alias rompe ancora il codice, poiché ha pochissimi falsi
negativi. Tuttavia, ha molti falsi positivi. Avvisa per tutte le conversioni del puntatore
tra tipi eventualmente incompatibili, anche se mai dereferenziati. Corre davanti
solo fine.
Livello 2: Aggressivo, veloce, non troppo preciso. Potrebbe avere ancora molti falsi positivi (non
fino al livello 1) e pochi falsi negativi (ma forse più del livello 1).
A differenza del livello 1, avvisa solo quando viene preso un indirizzo. Avverte sui tipi incompleti.
Funziona solo nella parte anteriore.
Livello 3 (predefinito per -Wstrict-alias): Dovrebbe avere pochissimi falsi positivi e pochi
falsi negativi. Leggermente più lento dei livelli 1 o 2 quando l'ottimizzazione è abilitata.
Si occupa del modello comune di gioco di parole + dereference nel front-end:
"*(int*)&some_float". Se l'ottimizzazione è abilitata, viene eseguita anche nel back-end, dove
si occupa di più casi di istruzione utilizzando informazioni point-to sensibili al flusso.
Avvisa solo quando il puntatore convertito viene dereferenziato. Non avverte di incompleto
tipi.
-Wstrict-overflow
-Wstrict-overflow=n
Questa opzione è attiva solo quando -fstrict-overflow è attivo. Avverte sui casi
dove il compilatore ottimizza in base al presupposto che l'overflow con segno non lo fa
verificarsi. Nota che non avverte di tutti i casi in cui il codice potrebbe traboccare: è
avverte solo dei casi in cui il compilatore implementa alcune ottimizzazioni. Così questo
avviso dipende dal livello di ottimizzazione.
Un'ottimizzazione che presuppone che non si verifichi un overflow con segno è perfettamente sicura se
i valori delle variabili in gioco sono tali che l'overflow non fa mai, infatti,
verificarsi. Pertanto questo avviso può facilmente dare un falso positivo: un avviso sul codice
questo non è in realtà un problema. Per aiutare a concentrarsi su questioni importanti, diversi avvertimenti
i livelli sono definiti. Non vengono emessi avvisi per l'uso di overflow firmato indefinito
quando si stima quante iterazioni richiede un ciclo, in particolare quando si determina
se verrà eseguito un ciclo.
-Wstrict-overflow=1
Avverti dei casi discutibili e facili da evitare. Ad esempio, con
-fstrict-overflow, il compilatore semplifica "x + 1 > x" a 1. Questo livello di
-Wstrict-overflow è abilitato da -Parete; i livelli più alti non sono, e devono essere
esplicitamente richiesto.
-Wstrict-overflow=2
Avvisa anche di altri casi in cui un confronto è semplificato a una costante. Per
esempio: "abs (x) >= 0". Questo può essere semplificato solo quando -fstrict-overflow è in
effetto, perché "abs (INT_MIN)" va in overflow a "INT_MIN", che è minore di zero.
-Wstrict-overflow (senza livello) è lo stesso di -Wstrict-overflow=2.
-Wstrict-overflow=3
Avvisa anche di altri casi in cui il confronto è semplificato. Ad esempio: "x + 1
> 1" è semplificato in "x > 0".
-Wstrict-overflow=4
Avvertire anche su altre semplificazioni non contemplate dai casi di cui sopra. Per
esempio: "(x * 10) / 5" è semplificato in "x * 2".
-Wstrict-overflow=5
Avvisa anche dei casi in cui il compilatore riduce la grandezza di una costante
coinvolti in un confronto. Ad esempio: "x + 2 > y" è semplificato in "x + 1 >= y".
Questo viene segnalato solo al livello di allerta più alto perché questa semplificazione
si applica a molti confronti, quindi questo livello di avviso fornisce un numero molto elevato di
falsi positivi.
-Wsuggest-attributo=[puro|const|senza ritorno|formato]
Avvisa per i casi in cui l'aggiunta di un attributo può essere utile. Gli attributi attualmente
supportati sono elencati di seguito.
-Wsuggest-attributo=puro
-Wsuggest-attributo=const
-Wsuggest-attributo=noreturn
Avvisa delle funzioni che potrebbero essere candidate per gli attributi "puro", "const" o
"senza ritorno". Il compilatore avverte solo delle funzioni visibili in altre compilazioni
unità o (nel caso di "puro" e "const") se non può dimostrare che la funzione
ritorna normalmente. Una funzione restituisce normalmente se non contiene un infinito
loop o ritorno in modo anomalo lanciando, chiamando "abort" o trapping. Questa analisi
richiede l'opzione -fipa-puro-const, che è abilitato per impostazione predefinita in -O e più in alto.
Livelli di ottimizzazione più elevati migliorano l'accuratezza dell'analisi.
-Wsuggest-attributo=formato
-Attributo-formato-mancante
Avvisa dei puntatori a funzione che potrebbero essere candidati per gli attributi di "formato".
Nota che questi sono solo possibili candidati, non quelli assoluti. GCC suppone che
puntatori a funzione con attributi di "formato" utilizzati nell'assegnazione,
l'inizializzazione, il passaggio di parametri o le istruzioni di ritorno dovrebbero avere un corrispondente
attributo "format" nel tipo risultante. Cioè il lato sinistro del
assegnazione o inizializzazione, il tipo della variabile parametro o il ritorno
il tipo della funzione contenitore rispettivamente dovrebbe avere anche un attributo "formato"
per evitare l'avvertimento.
GCC mette in guardia anche sulle definizioni di funzione che potrebbero essere candidate per "formato"
attributi. Anche in questo caso, questi sono solo possibili candidati. GCC suppone che "formato"
gli attributi potrebbero essere appropriati per qualsiasi funzione che chiama una funzione come
"vprintf" o "vscanf", ma potrebbe non essere sempre così, e alcune funzioni
per i quali gli attributi di "formato" sono appropriati potrebbero non essere rilevati.
-Suggerimenti-finali-tipi
Avvisa dei tipi con metodi virtuali in cui la qualità del codice sarebbe migliorata se il tipo
sono stati dichiarati con l'identificatore "finale" C++11 o, se possibile, dichiarati in an
spazio dei nomi anonimo. Ciò consente a GCC di devitualizzare in modo più aggressivo il polimorfico
chiamate. Questo avviso è più efficace con l'ottimizzazione del tempo di collegamento, dove il
le informazioni sul grafico della gerarchia delle classi sono più complete.
-Suggerisci-metodi-finali
Avvisa dei metodi virtuali in cui la qualità del codice sarebbe migliorata se il metodo lo fosse
dichiarato con l'identificatore "final" del C++11 o, se possibile, il suo tipo è stato dichiarato in
uno spazio dei nomi anonimo o con l'identificatore "final". Questo avviso è più efficace
con l'ottimizzazione del tempo di collegamento, dove le informazioni sul grafico della gerarchia delle classi sono
più completo. Si consiglia di considerare prima i suggerimenti di
-Suggerimenti-finali-tipi e poi ricostruire con nuove annotazioni.
-Wsuggerisci-override
Avvisa dell'override delle funzioni virtuali che non sono contrassegnate con la parola chiave override.
-Warray-limiti
-Warray-limiti=n
Questa opzione è attiva solo quando -ftree-vrp è attivo (predefinito per -O2 e al di sopra). Esso
avverte sugli indici degli array che sono sempre fuori dai limiti. Questo avviso è
abilitato da -Parete.
-Limiti di guerra=1
Questo è il livello di avviso di -Warray-limiti ed è abilitato da -Parete; livelli più alti
non lo sono e devono essere esplicitamente richiesti.
-Limiti di guerra=2
Questo livello di avviso avverte anche dell'accesso fuori dai limiti per gli array alla fine di
una struttura e per gli array a cui si accede tramite puntatori. Questo livello di avviso può dare un
numero maggiore di falsi positivi ed è disattivato per impostazione predefinita.
-Wbool-confronta
Avvisa dell'espressione booleana rispetto a un valore intero diverso da
"vero falso". Ad esempio, il seguente confronto è sempre falso:
intn = 5;
...
if ((n > 1) == 2) { ... }
Questo avviso è abilitato da -Parete.
-Wno-scartato-qualificazioni (solo C e Objective-C)
Non avvisare se i qualificatori di tipo sui puntatori vengono eliminati. In genere, il
il compilatore avverte se una variabile "const char *" viene passata a una funzione che accetta un "char
Parametro *". Questa opzione può essere utilizzata per sopprimere tale avviso.
-Wno-scartato-qualificatori-array (solo C e Objective-C)
Non avvisare se i qualificatori di tipo su array che sono destinazioni puntatore sono in corso
scartato. In genere, il compilatore avverte se viene passata una variabile "const int (*)[]" a
una funzione che accetta un parametro "int (*)[]". Questa opzione può essere utilizzata per sopprimere
un tale avvertimento.
-Wno-incompatibili-tipi-puntatore (solo C e Objective-C)
Non avvisare quando c'è una conversione tra puntatori che hanno tipi incompatibili.
Questo avviso è per i casi non coperti da -Wno-puntatore-segno, che avverte per il puntatore
passaggio di argomenti o assegnazione con segno diverso.
-No-int-conversione (solo C e Objective-C)
Non avvisare di conversioni da intero a puntatore e da puntatore a intero incompatibili.
Questo avviso riguarda le conversioni implicite; per le conversioni esplicite gli avvisi
-Wno-int-to-puntatore-cast e -Wno-pointer-to-int-cast può essere usato.
-Wno-div-per-zero
Non avvisare della divisione intera in fase di compilazione per zero. Divisione in virgola mobile per
zero non viene avvertito, in quanto può essere un modo legittimo per ottenere infiniti e
NaN.
-Wsystem-header
Stampa messaggi di avviso per i costrutti trovati nei file di intestazione del sistema. Avvertenze da
le intestazioni di sistema sono normalmente soppresse, partendo dal presupposto che di solito non lo fanno
indicano problemi reali e renderebbero solo l'output del compilatore più difficile da leggere. Usando
questa opzione della riga di comando dice a GCC di emettere avvisi dalle intestazioni di sistema come se
avvenuta nel codice utente. Tuttavia, tieni presente che usando -Parete in combinazione con questa opzione
effettua non è un avvisare di pragma sconosciuti nelle intestazioni di sistema --- per questo, -Wunknown-pragma
deve essere utilizzato anche.
-Wtrampolini
Avvisa dei trampolini generati per i puntatori a funzioni nidificate. Un trampolino è un
piccolo pezzo di dati o codice che viene creato in fase di esecuzione sullo stack quando l'indirizzo
di una funzione nidificata viene preso e viene utilizzato per chiamare indirettamente la funzione nidificata.
Per alcuni target, è costituito solo da dati e quindi non richiede alcun trattamento speciale.
Ma, per la maggior parte degli obiettivi, è costituito da codice e quindi richiede la creazione dello stack
eseguibile per il corretto funzionamento del programma.
-Wfloat-uguale
Avvisa se i valori a virgola mobile vengono utilizzati nei confronti di uguaglianza.
L'idea alla base di questo è che a volte è conveniente (per il programmatore)
considerare i valori in virgola mobile come approssimazioni a numeri reali infinitamente precisi.
Se lo stai facendo, allora devi calcolare (analizzando il codice, o in qualche
in altro modo) l'errore massimo o probabile massimo che il calcolo introduce, e
consentirlo quando si eseguono confronti (e quando si produce output, ma questo è un
problema diverso). In particolare, invece di verificare l'uguaglianza, dovresti controllare
per vedere se i due valori hanno intervalli che si sovrappongono; e questo è fatto con il
operatori relazionali, quindi i confronti di uguaglianza sono probabilmente errati.
-Wtradizionale (solo C e Objective-C)
Avvisa di alcuni costrutti che si comportano in modo diverso in C tradizionale e ISO. Inoltre
mettere in guardia sui costrutti ISO C che non hanno un equivalente C tradizionale e/o problematici
costrutti da evitare.
* Parametri macro che appaiono all'interno di stringhe letterali nel corpo della macro. In
la tradizionale sostituzione delle macro C avviene all'interno di stringhe letterali, ma in ISO C
non è così.
* Nel C tradizionale, alcune direttive del preprocessore non esistevano. Tradizionale
i preprocessori consideravano una linea una direttiva solo se # apparso in colonna
1 sulla linea. Perciò -Wtradizionale mette in guardia sulle direttive che il C . tradizionale
capisce ma ignora perché il # non appare come primo carattere su
la linea. Suggerisce anche di nascondere direttive come "#pragma" non comprese da
C tradizionale facendoli rientrare. Alcune implementazioni tradizionali no
riconoscere "#elif", quindi questa opzione suggerisce di evitarlo del tutto.
* Una macro simile a una funzione che appare senza argomenti.
* L'operatore unario più.
* L' U suffisso della costante intera, o il F or L suffissi costanti in virgola mobile.
(Il C tradizionale supporta il L suffisso sulle costanti intere.) Nota, questi
i suffissi appaiono nelle macro definite nelle intestazioni di sistema della maggior parte dei sistemi moderni,
ad esempio il _Min/_MASSIMO macro in " ". L'uso di queste macro nel codice utente potrebbe
normalmente portano ad avvertimenti spuri, tuttavia il preprocessore integrato di GCC ha
contesto sufficiente per evitare di avvertire in questi casi.
* Una funzione dichiarata esterna in un blocco e quindi utilizzata dopo la fine del
blocco.
* Un'istruzione "switch" ha un operando di tipo "long".
* Una dichiarazione di funzione non "statica" segue una "statica". Questo costrutto non è
accettato da alcuni compilatori C tradizionali.
* Il tipo ISO di una costante intera ha una larghezza o un segno diverso dal suo
tipo tradizionale. Questo avviso viene emesso solo se la base della costante è dieci.
Ad esempio, i valori esadecimali o ottali, che in genere rappresentano modelli di bit, non lo sono
avvertito.
* Viene rilevato l'utilizzo della concatenazione di stringhe ISO.
* Inizializzazione di aggregati automatici.
* L'identificatore è in conflitto con le etichette. Il C tradizionale non ha uno spazio dei nomi separato per
etichette.
* Inizializzazione dei sindacati. Se l'inizializzatore è zero, l'avviso viene omesso.
Questo viene fatto partendo dal presupposto che appaia l'inizializzatore zero nel codice utente
condizionato ad es. "__STDC__" per evitare di perdere gli avvisi dell'inizializzatore e si basa su
inizializzazione predefinita a zero nel caso C tradizionale.
* Conversioni da prototipi tra valori a virgola fissa/mobile e viceversa. Il
l'assenza di questi prototipi durante la compilazione con il C tradizionale causa gravi
i problemi. Questo è un sottoinsieme dei possibili avvisi di conversione; per il set completo
uso -Conversione-tradizionale.
* Utilizzo di definizioni di funzioni in stile ISO C. Questo avviso è intenzionalmente non è un rilasciato
per dichiarazioni di prototipi o funzioni variadic perché queste funzionalità ISO C
appaiono nel codice quando si utilizzano le tradizionali macro di compatibilità C di libiberty,
"PARAM" e "VPARAM". Questo avviso viene ignorato anche per le funzioni nidificate
perché quella funzione è già un'estensione GCC e quindi non è rilevante per
compatibilità C tradizionale.
-Conversione-tradizionale (solo C e Objective-C)
Avvisa se un prototipo provoca una conversione di tipo diversa da quella che accadrebbe
allo stesso argomento in assenza di un prototipo. Ciò include le conversioni di
punto fisso a mobile e viceversa, e conversioni modificando la larghezza o
firma di un argomento a virgola fissa tranne quando è uguale alla promozione predefinita.
-Wdichiarazione-dopo-dichiarazione (solo C e Objective-C)
Avvisa quando viene trovata una dichiarazione dopo un'istruzione in un blocco. Questo costrutto, noto
da C++, è stato introdotto con ISO C99 ed è consentito per impostazione predefinita in GCC. Non è
supportato da ISO C90.
-Wundef
Avvisa se un identificatore non definito viene valutato in una direttiva "#if".
-Wno-endif-etichette
Non avvisare ogni volta che un "#else" o un "#endif" sono seguiti da testo.
-Ombra
Avvisa ogni volta che una variabile locale o una dichiarazione di tipo nasconde un'altra variabile,
parametro, tipo, membro di classe (in C++) o variabile di istanza (in Objective-C) o
ogni volta che una funzione incorporata viene oscurata. Nota che in C++, il compilatore avverte se a
la variabile locale nasconde un typedef esplicito, ma non se nasconde una struct/class/enum.
-Wno-ombra-ivar (solo Obiettivo-C)
Non avvisare ogni volta che una variabile locale nasconde una variabile di istanza in un Objective-C
metodo.
-Wmaggiore-di=len
Avvisa ogni volta che un oggetto di dimensioni maggiori di len byte è definito.
-Wframe-maggiore-di=len
Avvisa se la dimensione di un frame di funzione è maggiore di len byte. Il calcolo fatto
determinare la dimensione dello stack frame è approssimativo e non conservativo. L'attuale
i requisiti possono essere leggermente superiori a len anche se non ricevi un avviso. In
inoltre, qualsiasi spazio allocato tramite "alloca", array di lunghezza variabile o correlati
costrutti non è incluso dal compilatore nel determinare se emettere o meno a
avvertimento.
-Wno-free-non-oggetto-heap
Non avvisare quando si tenta di liberare un oggetto che non è stato allocato nell'heap.
-Wstack-utilizzo=len
Avvisa se l'utilizzo dello stack di una funzione potrebbe essere maggiore di len byte. Il calcolo
fatto per determinare l'utilizzo dello stack è conservativo. Qualsiasi spazio assegnato tramite "alloca",
array a lunghezza variabile o costrutti correlati sono inclusi dal compilatore quando
determinare se emettere o meno un avvertimento.
Il messaggio è in linea con l'output di -fstack-uso.
* Se l'utilizzo dello stack è completamente statico ma supera l'importo specificato, è:
avviso: l'utilizzo dello stack è 1120 byte
* Se l'utilizzo dello stack è (parzialmente) dinamico ma limitato, è:
avviso: l'utilizzo dello stack potrebbe essere di 1648 byte
* Se l'utilizzo dello stack è (parzialmente) dinamico e non limitato, è:
avviso: l'utilizzo dello stack potrebbe essere illimitato
-Ottimizzazioni del ciclo Wunsafe
Avvisa se il ciclo non può essere ottimizzato perché il compilatore non può assumere nulla su
i limiti degli indici di loop. Insieme a -ottimizzazioni funsafe-loop avvisa se il compilatore
fa tali ipotesi.
-Wno-pedante-ms-formato (solo obiettivi MinGW)
Se usato in combinazione con -Formato W e -pedante senza estensioni GNU, questo
l'opzione disabilita gli avvisi sugli identificatori di larghezza del formato "printf" / "scanf" non ISO
"I32", "I64" e "I" utilizzati su destinazioni Windows, che dipendono dal runtime di MS.
-Wpointer-arith
Avvisa di tutto ciò che dipende dalla "dimensione" di un tipo di funzione o da "void". GNU C
assegna a questi tipi una dimensione di 1, per comodità nei calcoli con "void *"
puntatori e puntatori a funzioni. In C++, avvisa anche quando un'operazione aritmetica
coinvolge "NULL". Questo avviso è abilitato anche da -Wpedante.
-Wtype-limiti
Avvisa se un confronto è sempre vero o sempre falso a causa dell'intervallo limitato del
tipo di dati, ma non avvisare per le espressioni costanti. Ad esempio, avvisa se un non firmato
la variabile viene confrontata con zero con "<" o ">=". Questo avviso è abilitato anche da
-Wextra.
-Wbad-funzione-cast (solo C e Objective-C)
Avvisa quando viene eseguito il cast di una chiamata di funzione a un tipo non corrispondente. Ad esempio, avvisa in caso di chiamata
a una funzione che restituisce un tipo intero viene eseguito il cast a un tipo puntatore.
-Wc90-c99-comp (solo C e Objective-C)
Avvisa di funzioni non presenti in ISO C90, ma presenti in ISO C99. Ad esempio,
avvertire dell'uso di array a lunghezza variabile, tipo "long long", tipo "bool", composto
letterali, inizializzatori designati e così via. Questa opzione è indipendente dal
modalità standard. Gli avvisi sono disabilitati nell'espressione che segue "__extension__".
-Wc99-c11-comp (solo C e Objective-C)
Avvisa di funzioni non presenti in ISO C99, ma presenti in ISO C11. Ad esempio,
avvisare sull'uso di strutture e unioni anonime, qualificatore di tipo "_Atomic",
Identificatore della classe di archiviazione "_Thread_local", identificatore "_Alignas", operatore "Alignof",
Parola chiave "_Generic" e così via. Questa opzione è indipendente dalla modalità standard.
Gli avvisi sono disabilitati nell'espressione che segue "__extension__".
-Wc++-compatibile (solo C e Objective-C)
Avvisa dei costrutti ISO C che sono al di fuori del sottoinsieme comune di ISO C e ISO
C++, ad esempio richiesta di conversione implicita da "void *" a un puntatore a non "void"
tipo.
-Wc++11-compatibile (solo C++ e Objective-C++)
Avvisa dei costrutti C++ il cui significato differisce tra ISO C++ 1998 e ISO C++ 2011,
ad es. identificatori in ISO C++ 1998 che sono parole chiave in ISO C++ 2011. Questo avviso
si accende -Stringendo ed è abilitato da -Parete.
-Wc++14-compatibile (solo C++ e Objective-C++)
Avvisa dei costrutti C++ il cui significato differisce tra ISO C++ 2011 e ISO C++ 2014.
Questo avviso è abilitato da -Parete.
-Wcast-qual
Avvisa ogni volta che viene lanciato un puntatore in modo da rimuovere un qualificatore di tipo dal tipo di destinazione.
Ad esempio, avvisa se un "const char *" viene convertito in un normale "char *".
Avvisa anche quando si esegue un cast che introduce un qualificatore di tipo in modo non sicuro. Per
esempio, trasmettere "char **" a "const char **" non è sicuro, come in questo esempio:
/* p è char ** valore. */
const carattere **q = (const carattere **) p;
/* L'assegnazione della stringa di sola lettura a const char * è OK. */
*q = "stringa";
/* Ora il puntatore char** punta alla memoria di sola lettura. */
**p = 'b';
-Allineamento Wcast
Avvisa ogni volta che un puntatore viene lanciato in modo tale che l'allineamento richiesto del bersaglio sia
è aumentato. Ad esempio, avvisa se un "char *" viene lanciato su un "int *" su macchine dove
gli interi sono accessibili solo ai limiti di due o quattro byte.
-Wwrite-stringhe
Quando si compila C, dare alle costanti di stringa il tipo "const char[lunghezza]" in modo che la copia
l'indirizzo di uno in un puntatore "char *" non "const" produce un avviso. Queste
gli avvisi ti aiutano a trovare in fase di compilazione il codice che può provare a scrivere in una stringa
costante, ma solo se sei stato molto attento a usare "const" nelle dichiarazioni
e prototipi. Altrimenti è solo un fastidio. Questo è il motivo per cui non abbiamo fatto -Parete
richiedere questi avvisi.
Quando si compila C++, avvisare della conversione deprecata da letterali stringa a "char
*". Questo avviso è abilitato per impostazione predefinita per i programmi C++.
-Wobbed
Avvisa per le variabili che potrebbero essere modificate da "longjmp" o "vfork". Questo avviso è
abilitato anche da -Wextra.
-Wcondizionatamente-supportato (solo C++ e Objective-C++)
Avvisa per i costrutti supportati in modo condizionale (C++ 11 [intro.defs]).
-Conversione
Avvisa per le conversioni implicite che possono alterare un valore. Questo include le conversioni
tra reale e intero, come "abs (x)" quando "x" è "doppio"; conversioni tra
firmato e non firmato, come "unsigned ui = -1"; e conversioni in tipi più piccoli, come
"sqrtf (M_PI)". Non avvisare per cast espliciti come "abs ((int) x)" e "ui =
(unsigned) -1", o se il valore non viene modificato dalla conversione come in "abs (2.0)".
Gli avvisi sulle conversioni tra interi con segno e senza segno possono essere disabilitati da
utilizzando -Wno-sign-conversione.
Per C++, avvisa anche per la risoluzione dell'overload confusa per le conversioni definite dall'utente; e
conversioni che non utilizzano mai un operatore di conversione di tipo: conversioni a "void", lo stesso
tipo, una classe base o un riferimento ad essi. Avvertenze sulle conversioni tra firmate
e gli interi senza segno sono disabilitati per impostazione predefinita in C++ a meno che -Wsign-conversione is
esplicitamente abilitato.
-Wno-conversione-null (solo C++ e Objective-C++)
Non avvisare per le conversioni tra i tipi "NULL" e non puntatore. -Wconversione-null is
abilitato per impostazione predefinita.
-Wzero-as-null-pointer-costante (solo C++ e Objective-C++)
Avvisa quando viene utilizzato uno '0' letterale come costante del puntatore nullo. Questo può essere utile per
facilitare la conversione in "nullptr" in C++11.
-Wdata-ora
Avvisa quando vengono rilevate le macro "__TIME__", "__DATE__" o "__TIMESTAMP__" mentre si trovano
potrebbe impedire compilazioni riproducibili bit per bit.
-Wcancella-incompleto (solo C++ e Objective-C++)
Avvisa quando si elimina un puntatore a un tipo incompleto, che potrebbe causare un comportamento indefinito a
tempo di esecuzione. Questo avviso è abilitato per impostazione predefinita.
- Cast inutile (solo C++ e Objective-C++)
Avvisa quando viene eseguito il cast di un'espressione sul proprio tipo.
-Wempty-corpo
Avvisa se si verifica un corpo vuoto in un'istruzione "if", "else" o "do while". questo avvertimento
è abilitato anche da -Wextra.
-Wenum-confronta
Avvisa di un confronto tra valori di diversi tipi enumerati. In C++ enumerativo
vengono diagnosticate anche le discrepanze nelle espressioni condizionali e l'avviso è abilitato da
predefinito. In C questo avviso è abilitato da -Parete.
-Wjump-miss-init (C, solo Obiettivo-C)
Avvisa se un'istruzione "goto" o un'istruzione "switch" salta in avanti attraverso il
inizializzazione di una variabile, o salta indietro a un'etichetta dopo che la variabile è stata
inizializzato. Questo avverte solo delle variabili che vengono inizializzate quando lo sono
dichiarato. Questo avviso è supportato solo per C e Objective-C; in C++ questo tipo di
ramo è un errore in ogni caso.
-Wjump-miss-init è incluso in -Wc++-compatibile. Può essere disabilitato con il
-Wno-jump-miss-init opzione.
-Wsign-confronta
Avvisa quando un confronto tra valori con segno e senza segno potrebbe produrre un errore
risultato quando il valore con segno viene convertito in unsigned. Anche questo avviso è abilitato
by -Wextra; per ricevere gli altri avvisi di -Wextra senza questo avviso, usa -Wextra
-Wno-sign-confronta.
-Wsign-conversione
Avvisa per le conversioni implicite che possono cambiare il segno di un valore intero, come
assegnazione di un'espressione intera con segno a una variabile intera senza segno. Un esplicito
cast mette a tacere l'avvertimento. In C, questa opzione è abilitata anche da -Conversione.
-Wfloat-conversione
Avvisa per le conversioni implicite che riducono la precisione di un valore reale. Questo
include conversioni da reale a intero e da reale a precisione maggiore a inferiore
valori reali di precisione. Questa opzione è abilitata anche da -Conversione.
-Wdimensionato-deallocation (solo C++ e Objective-C++)
Avvisa di una definizione di funzione di deallocazione non dimensionata
operatore void delete (void *) noException;
operatore void delete[] (void *) noException;
senza una definizione della corrispondente funzione di deallocazione dimensionale
operatore void delete (void *, std::size_t) noException;
operatore void delete[] (void *, std::size_t) noeccetto;
o vice versa. Abilitato da -Wextra con -fsized-deallocazione.
-Wsizeof-pointer-memaccess
Avvisa per parametri di lunghezza sospetti per determinate funzioni di stringa e memoria integrate
se l'argomento usa "sizeof". Questo avviso avverte ad esempio di "memset (ptr, 0, sizeof
(ptr));" se "ptr" non è un array, ma un puntatore e suggerisce una possibile correzione, oppure
su "memcpy (&foo, ptr, sizeof (&foo));". Questo avviso è abilitato da -Parete.
-Wsizeof-array-argoment
Avvisa quando l'operatore "sizeof" viene applicato a un parametro dichiarato come array
in una definizione di funzione. Questo avviso è abilitato per impostazione predefinita per i programmi C e C++.
-Wmemset-trasposto-args
Avvisa per chiamate sospette alla funzione integrata "memset", se il secondo argomento è
non zero e il terzo argomento è zero. Questo avverte ad esempio@ di "memset (buf, sizeof
buf, 0)" dove molto probabilmente si intendeva invece "memset (buf, 0, sizeof buf)".
diagnostics viene emesso solo se il terzo argomento è zero letterale. Se è un po'
un'espressione piegata a zero, un cast da zero a qualche tipo, ecc., è molto meno
probabile che l'utente abbia scambiato erroneamente gli argomenti e non venga emesso alcun avviso.
Questo avviso è abilitato da -Parete.
-Indirizzo
Avvisa in caso di usi sospetti degli indirizzi di memoria. Questi includono l'utilizzo dell'indirizzo di a
funzione in un'espressione condizionale, come "void func(void); if (func)", e
confronti con l'indirizzo di memoria di una stringa letterale, ad esempio "if (x == "abc")".
Tali usi indicano tipicamente un errore del programmatore: l'indirizzo di una funzione sempre
restituisce true, quindi il loro uso in un condizionale di solito indica che il programmatore
dimenticato le parentesi in una chiamata di funzione; e confronti con stringhe letterali
comportano un comportamento non specificato e non sono portabili in C, quindi di solito indicano
che il programmatore intendeva utilizzare "strcmp". Questo avviso è abilitato da -Parete.
-Wlogico-op
Avvisa sugli usi sospetti degli operatori logici nelle espressioni. Questo include l'uso
operatori logici in contesti in cui è probabile che sia previsto un operatore bit per bit.
-Wlogiche-non-parentesi
Avvisa di logica non utilizzata sull'operando sul lato sinistro di un confronto. Questo
L'opzione non avvisa se l'operando RHS è di tipo booleano. Il suo scopo è quello di
rilevare codice sospetto come il seguente:
int a;
...
se (!a > 1) { ... }
È possibile sopprimere l'avviso avvolgendo il lato sinistro tra parentesi:
se ((!a) > 1) { ... }
Questo avviso è abilitato da -Parete.
-Waggregato-ritorno
Avvisa se vengono definite o chiamate funzioni che restituiscono strutture o unioni. (In
lingue in cui è possibile restituire un array, questo suscita anche un avviso.)
-Ottimizzazioni del ciclo non aggressive
Avvisa se in un ciclo con numero costante di iterazioni il compilatore rileva undefined
comportamento in qualche istruzione durante una o più iterazioni.
-Wno-attributi
Non avvisare se viene utilizzato un "__attribute__" imprevisto, come attributi non riconosciuti,
attributi di funzione applicati alle variabili, ecc. Questo non ferma gli errori per
uso errato degli attributi supportati.
-Wno-built-in-macro-redefined
Non avvisare se alcune macro integrate vengono ridefinite. Questo sopprime gli avvisi per
ridefinizione di "__TIMESTAMP__", "__TIME__", "__DATE__", "__FILE__", e
"__BASE_FILE__".
-Wstrict-prototipi (solo C e Objective-C)
Avvisa se una funzione è dichiarata o definita senza specificare i tipi di argomento. (Un
la definizione di funzione vecchio stile è consentita senza preavviso se preceduta da a
dichiarazione che specifica i tipi di argomento.)
-Dichiarazione in stile Wold (solo C e Objective-C)
Avvertire per usi obsoleti, secondo la norma C, in una dichiarazione. Per
esempio, avvisa se gli identificatori di classe di archiviazione come "statico" non sono le prime cose in a
dichiarazione. Questo avviso è abilitato anche da -Wextra.
-Definizione in stile Wold (solo C e Objective-C)
Avvisa se viene utilizzata una definizione di funzione vecchio stile. Viene dato un avvertimento anche se c'è
un prototipo precedente.
-Wmissing-tipo-parametro (solo C e Objective-C)
Un parametro di funzione viene dichiarato senza un identificatore di tipo nelle funzioni in stile K&R:
vuoto foo(bar) { }
Questo avviso è abilitato anche da -Wextra.
-Wmissing-prototipi (solo C e Objective-C)
Avvisa se una funzione globale è definita senza una precedente dichiarazione di prototipo. Questo
viene emesso un avviso anche se la definizione stessa fornisce un prototipo. Usa questa opzione
per rilevare funzioni globali che non hanno una dichiarazione di prototipo corrispondente in a
file di intestazione. Questa opzione non è valida per C++ perché tutte le dichiarazioni di funzione
fornire prototipi e una dichiarazione non corrispondente dichiara un sovraccarico anziché
conflitto con una precedente dichiarazione. Utilizzo -Dichiarazioni-mancanti per rilevare la mancanza
dichiarazioni in C++.
-Dichiarazioni-mancanti
Avvisa se una funzione globale è definita senza una dichiarazione precedente. Fallo anche se
la definizione stessa fornisce un prototipo. Usa questa opzione per rilevare globale
funzioni che non sono dichiarate nei file di intestazione. In C, non vengono emessi avvisi per
funzioni con precedenti dichiarazioni non prototipali; utilizzo -Wmissing-prototipi per rilevare
prototipi mancanti. In C++, non vengono emessi avvisi per i modelli di funzione o per
funzioni inline o per funzioni in spazi dei nomi anonimi.
-Wmissing-field-inizializzatori
Avvisa se l'inizializzatore di una struttura ha alcuni campi mancanti. Ad esempio, il seguente
il codice causa un tale avviso, perché "xh" è implicitamente zero:
struttura s { int f, g, h; };
struttura sx = { 3, 4 };
Questa opzione non avvisa degli inizializzatori designati, quindi la seguente modifica
non attiva un avviso:
struttura s { int f, g, h; };
struttura sx = { .f = 3, .g = 4 };
In C++ questa opzione non avvisa nemmeno dell'inizializzatore { } vuoto, ad esempio:
struttura s { int f, g, h; };
sx = { };
Questo avviso è incluso in -Wextra. Per ottenere altro -Wextra avvisi senza questo,
uso -Wextra -Wno-mancanti-inizializzatori di campo.
-No-multichar
Non avvisa se una costante multicarattere ('FOO') viene utilizzato. Di solito indicano a
errore di battitura nel codice dell'utente, in quanto hanno valori definiti dall'implementazione e non dovrebbero essere
utilizzato nel codice portatile.
-Wnormalizzato[=<nessuna|id|nfc|nfkc>]
In ISO C e ISO C++, due identificatori sono diversi se sono sequenze diverse di
caratteri. Tuttavia, a volte quando i caratteri sono al di fuori del set di caratteri ASCII di base
vengono utilizzati, è possibile avere due diverse sequenze di caratteri che hanno lo stesso aspetto. Evitare
confusione, lo standard ISO 10646 stabilisce alcuni normalizzazione norme che quando applicato
assicurarsi che due sequenze che sembrano uguali vengano trasformate nella stessa sequenza. GCC
può avvisarti se stai utilizzando identificatori che non sono stati normalizzati; questa opzione
controlla quell'avviso.
Ci sono quattro livelli di avviso supportati da GCC. L'impostazione predefinita è -Wnormalizzato=nfc,
che avverte di qualsiasi identificatore che non sia nella forma normalizzata ISO 10646 "C",
NFC. NFC è la forma consigliata per la maggior parte degli usi. È equivalente a -Wnormalizzato.
Sfortunatamente, ci sono alcuni caratteri consentiti negli identificatori da ISO C e ISO C++
che, una volta trasformati in NFC, non sono ammessi negli identificatori. Cioè, non c'è modo
per utilizzare questi simboli in ISO C o C++ portatile e avere tutti i tuoi identificatori in NFC.
-Wnormalizzato=id sopprime l'avviso per questi caratteri. Si spera che il futuro
le versioni degli standard coinvolti correggeranno questo problema, motivo per cui questa opzione non lo è
il predefinito.
Puoi disattivare l'avviso per tutti i caratteri scrivendo -Wnormalizzato=nessuno or
-Wno-normalizzato. Dovresti farlo solo se stai usando qualche altra normalizzazione
schema (come "D"), perché altrimenti puoi facilmente creare bug che sono letteralmente
impossibile da vedere.
Alcuni caratteri in ISO 10646 hanno significati distinti ma sembrano identici in alcuni caratteri
o metodologie di visualizzazione, soprattutto una volta applicata la formattazione. Ad esempio
"\u207F", "SUPERSCRIPT LATIN SMALL LETTER N", viene visualizzato come una normale "n" che
è stato messo in apice. ISO 10646 definisce il NFKC schema di normalizzazione a
converti anche tutti questi in un modulo standard e GCC avvisa se il tuo codice non è in
NFKC se usi -Wnormalizzato=nfkc. Questo avvertimento è paragonabile all'avvertimento su ogni
identificatore che contiene la lettera O perché potrebbe essere confuso con la cifra 0,
e quindi non è l'impostazione predefinita, ma può essere utile come convenzione di codifica locale se il
l'ambiente di programmazione non può essere corretto per visualizzare distintamente questi caratteri.
-Wno-deprecato
Non avvisare dell'utilizzo di funzionalità deprecate.
-Wno-deprecato-dichiarazioni
Non avvisare dell'uso di funzioni, variabili e tipi contrassegnati come deprecati da
utilizzando l'attributo "deprecato".
-No-overflow
Non avvisare dell'overflow in fase di compilazione nelle espressioni costanti.
-No-odr
Avvisa delle violazioni della regola di una definizione durante l'ottimizzazione del tempo di collegamento. Richiede
-fusione-tipo-flto-odr essere abilitato. Abilitato per impostazione predefinita.
-Wopenmp-simd
Avvisa se il modello di costo del vectorizer sovrascrive la direttiva OpenMP o Cilk Plus simd
impostato dall'utente. Il -fsimd-cost-model=illimitato l'opzione può essere utilizzata per ridurre il costo
modello.
-Woverride-init (solo C e Objective-C)
Avvisa se un campo inizializzato senza effetti collaterali viene sovrascritto quando si utilizza designato
inizializzatori.
Questo avviso è incluso in -Wextra. Per ottenere altro -Wextra avvisi senza questo,
uso -Wextra -Wno-override-init.
-Imballato
Avvisa se a una struttura viene assegnato l'attributo compresso, ma l'attributo compresso non ha
effetto sulla disposizione o sulle dimensioni della struttura. Tali strutture possono essere disallineate per
piccolo beneficio. Ad esempio, in questo codice, la variabile "fx" in "struct bar" è
disallineato anche se "struct bar" non ha di per sé l'attributo compresso:
struttura foo {
int x;
carattere a, b, c, d;
} __attribute __ ((impacchettato));
barra della struttura {
carattere z;
struttura foo f;
};
-Wpacked-bitfield-compatibile
Le serie 4.1, 4.2 e 4.3 di GCC ignorano l'attributo "packed" sui campi di bit di tipo
"cara". Questo è stato corretto in GCC 4.4 ma la modifica può portare a differenze nel
disposizione della struttura. GCC ti informa quando l'offset di tale campo è cambiato in GCC
4.4. Ad esempio non c'è più un riempimento a 4 bit tra il campo "a" e "b" in questo
struttura:
struttura foo
{
carattere a:4;
carattere b:8;
} __attributo__ ((confezionato));
Questo avviso è abilitato per impostazione predefinita. Utilizzo -Wno-packed-bitfield-compat per disabilitarlo
avvertimento.
-Imbottito
Avvisa se il padding è incluso in una struttura, sia per allineare un elemento del
struttura o per allineare l'intera struttura. A volte quando questo accade è possibile
riorganizzare i campi della struttura per ridurre l'imbottitura e quindi rendere il
struttura più piccola.
-Wredundant-dichiarazioni
Avvisare se qualcosa è dichiarato più di una volta nello stesso ambito, anche nei casi in cui
la dichiarazione multipla è valida e non cambia nulla.
-Wnned-externs (solo C e Objective-C)
Avvisa se viene rilevata una dichiarazione "extern" all'interno di una funzione.
-Wno-ereditato-varidica-ctor
Sopprimere gli avvisi sull'uso di costruttori ereditari C++ 11 quando la classe base
ereditato da ha un costruttore variadico C; l'avviso è attivo per impostazione predefinita perché il
i puntini di sospensione non sono ereditati.
-Linea vincente
Avvisa se una funzione dichiarata come inline non può essere inline. Anche con questo
opzione, il compilatore non avverte degli errori nelle funzioni inline dichiarate in
intestazioni di sistema.
Il compilatore utilizza una varietà di euristiche per determinare se inserire o meno a
funzione. Ad esempio, il compilatore tiene conto della dimensione della funzione essendo
inline e la quantità di inline già eseguita nella funzione corrente.
Pertanto, cambiamenti apparentemente insignificanti nel programma sorgente possono causare il
avvisi prodotti da -Linea vincente apparire o scomparire.
-No-compensazione-non-valida (solo C++ e Objective-C++)
Elimina gli avvisi dall'applicazione della macro "offsetof" a un tipo non POD. Secondo
lo standard ISO C++ del 2014, l'applicazione di "offsetof" a un tipo di layout non standard è
non definito. Nelle implementazioni C++ esistenti, tuttavia, "offsetof" in genere dà
risultati significativi. Questo flag è per gli utenti che sono consapevoli di scrivere
codice non portatile e che hanno deliberatamente scelto di ignorare l'avvertimento al riguardo.
Le restrizioni su "offsetof" potrebbero essere allentate in una versione futura dello standard C++.
-Wno-int-to-puntatore-cast
Elimina gli avvisi dai cast al tipo di puntatore di un numero intero di dimensioni diverse. In
C++, la trasmissione a un tipo di puntatore di dimensioni inferiori è un errore. Wint-to-puntatore-cast is
abilitato per impostazione predefinita.
-Wno-pointer-to-int-cast (solo C e Objective-C)
Elimina gli avvisi dai cast da un puntatore a un tipo intero di dimensioni diverse.
-Winvalid-pch
Avvisa se un'intestazione precompilata viene trovata nel percorso di ricerca ma non può essere utilizzata.
-Wlong-lungo
Avvisa se viene utilizzato il tipo "lungo lungo". Questo è abilitato da entrambi -Wpedante or
-Wtradizionale nelle modalità ISO C90 e C++98. Per inibire i messaggi di avviso, utilizzare
-Wno-lungo-lungo.
-Wvariadic-macro
Avvisa se vengono utilizzate macro variadiche in modalità ISO C90 o se la sintassi alternativa GNU è
utilizzato in modalità ISO C99. Questo è abilitato da entrambi -Wpedante or -Wtradizionale. A
inibire i messaggi di avviso, utilizzare -Wno-macro-variadiche.
-Wvararg
Avvisa in caso di utilizzo discutibile delle macro utilizzate per gestire argomenti variabili come
"va_start". Questa è l'impostazione predefinita. Per inibire i messaggi di avviso, utilizzare -No-varargs.
-Wvettore-operazione-prestazioni
Avvisa se il funzionamento del vettore non è implementato tramite le funzionalità SIMD dell'architettura.
Utile principalmente per l'ottimizzazione delle prestazioni. È possibile implementare l'operazione vettoriale
"a tratti", il che significa che l'operazione scalare viene eseguita su ogni vettore
elemento; "in parallelo", il che significa che l'operazione vettoriale è implementata usando
scalari di tipo più ampio, che normalmente è più efficiente in termini di prestazioni; e "da single
scalare", il che significa che il vettore si adatta a un tipo scalare.
-No-virtuale-mossa-assegnare
Elimina gli avvisi sull'ereditarietà da una base virtuale con una mossa C++ 11 non banale
operatore di assegnazione. Questo è pericoloso perché se la base virtuale è raggiungibile lungo
più di un percorso, viene spostato più volte, il che può significare che entrambi gli oggetti finiscono in
lo stato spostato da. Se l'operatore di assegnazione dello spostamento è scritto per evitare di spostarsi da
un oggetto spostato da, questo avviso può essere disabilitato.
-Wvla
Avvisa se nel codice viene utilizzato un array di lunghezza variabile. -Wno-vla impedisce il -Wpedante
avviso dell'array a lunghezza variabile.
-W registro-volatile-var
Avvisa se una variabile di registro è dichiarata volatile. Il modificatore volatile no
inibire tutte le ottimizzazioni che possono eliminare le letture e/o le scritture nel registro
variabili. Questo avviso è abilitato da -Parete.
-Wdisabled-ottimizzazione
Avvisa se un passaggio di ottimizzazione richiesto è disabilitato. Questo avviso generalmente non funziona
indicare che c'è qualcosa di sbagliato nel tuo codice; indica semplicemente che i GCC
gli ottimizzatori non sono in grado di gestire il codice in modo efficace. Spesso il problema è che il tuo
il codice è troppo grande o troppo complesso; GCC si rifiuta di ottimizzare i programmi quando l'ottimizzazione
stesso è probabile che richieda una quantità eccessiva di tempo.
-Wpointer-segno (solo C e Objective-C)
Avvisa per il passaggio o l'assegnazione di argomenti del puntatore con un segno diverso. Questo
L'opzione è supportata solo per C e Objective-C. È implicito da -Parete e
-Wpedante, che può essere disabilitato con -Wno-puntatore-segno.
-Wstack-protezione
Questa opzione è attiva solo quando -fstack-protettore è attivo. Avverte sulle funzioni
che non sono protetti contro la rottura della pila.
-Stringhe di lunghezza totale
Avvisa delle costanti di stringa più lunghe della lunghezza "minima massima"
specificato nella norma C. I compilatori moderni generalmente consentono costanti stringa che
sono molto più lunghi del limite minimo dello standard, ma i programmi molto portabili dovrebbero
evitare di utilizzare stringhe più lunghe.
Il limite si applica dopo stringa concatenazione costante e non conta il finale
NULLA. In C90, il limite era di 509 caratteri; in C99, è stato portato a 4095. C++98 lo fa
non specifichiamo un minimo normativo massimo, quindi non diagnostichiamo stringhe di lunghezza eccessiva in
C ++.
Questa opzione è implicata da -Wpedante, e può essere disabilitato con
-No-stringhe di lunghezza eccessiva.
-Wuncostanti-float suffissi (solo C e Objective-C)
Invia un avviso per qualsiasi costante mobile che non ha un suffisso. Quando usato
insieme -Wsystem-header avverte di tali costanti nei file di intestazione del sistema.
Questo può essere utile quando si prepara il codice da utilizzare con il pragma "FLOAT_CONST_DECIMAL64"
dall'estensione decimale in virgola mobile a C99.
-No-designato-init (solo C e Objective-C)
Sopprimere gli avvisi quando viene utilizzato un inizializzatore posizionale per inizializzare una struttura che
è stato contrassegnato con l'attributo "designated_init".
Opzioni per Debug Trasferimento da aeroporto a Sharm Programma or GCC
GCC ha varie opzioni speciali che vengono utilizzate per il debug del tuo programma o di GCC:
-g Produrre informazioni di debug nel formato nativo del sistema operativo (stabs, COFF,
XCOFF, o NANO 2). GDB può lavorare con queste informazioni di debug.
Sulla maggior parte dei sistemi che utilizzano il formato stabs, -g consente l'uso di ulteriori informazioni di debug
che solo GDB può utilizzare; queste informazioni extra fanno funzionare meglio il debug in GDB ma
probabilmente fa crashare altri debugger o si rifiutano di leggere il programma. Se lo desidera
controllare per certo se generare le informazioni extra, utilizzare -gstabs+, -gstabs,
-gxcoff+, -gxcoff, o -gvms (vedi sotto).
GCC ti permette di usare -g con -O. Le scorciatoie prese dal codice ottimizzato possono
a volte producono risultati sorprendenti: alcune variabili che hai dichiarato potrebbero non esistere in
Tutti; il flusso di controllo può spostarsi brevemente dove non te lo aspettavi; alcune affermazioni possono
non essere eseguiti perché calcolano risultati costanti o i loro valori sono già a
mano; alcune istruzioni possono essere eseguite in posti diversi perché sono state spostate
di loop.
Tuttavia è possibile eseguire il debug dell'output ottimizzato. Questo lo rende ragionevole
per utilizzare l'ottimizzatore per programmi che potrebbero contenere bug.
Le seguenti opzioni sono utili quando GCC viene generato con la capacità di più
di un formato di debug.
-gsplit-nano
Separare quante più informazioni di debug nane possibili in un file di output separato
con estensione .dwo. Questa opzione consente al sistema di compilazione di evitare il collegamento dei file
con informazioni di debug. Per essere utile, questa opzione richiede un debugger in grado di
lettura di file .dwo.
-ggdb
Produrre informazioni di debug per l'utilizzo da parte di GDB. Questo significa usare il più espressivo
formato disponibile (DWARF 2, stabs o il formato nativo se nessuno di questi lo è
supportato), comprese le estensioni GDB, se possibile.
-gpubnames
Genera sezioni nane .debug_pubnames e .debug_pubtypes.
-ggnu-nomi-pub
Genera sezioni .debug_pubnames e .debug_pubtypes in un formato adatto a
conversione in un indice GDB. Questa opzione è utile solo con un linker che può
produrre indice GDB versione 7.
-gstabs
Produrre informazioni di debug in formato stabs (se supportato), senza GDB
estensioni. Questo è il formato utilizzato da DBX sulla maggior parte dei sistemi BSD. Su MIPS, Alpha e
Sistemi System V Release 4 questa opzione produce output di debug di stab che non lo è
compreso da DBX o SDB. Sui sistemi System V Release 4 questa opzione richiede GNU
assemblatore.
-feliminare-simboli-debug-inutilizzati
Produrre informazioni di debug in formato stabs (se supportato), solo per simboli
che vengono effettivamente utilizzati.
-femit-class-debug-sempre
Invece di emettere informazioni di debug per una classe C++ in un solo file oggetto,
emetterlo in tutti i file oggetto utilizzando la classe. Questa opzione dovrebbe essere utilizzata solo con
debugger che non sono in grado di gestire il modo in cui GCC emette normalmente le informazioni di debug
per le classi perché l'uso di questa opzione aumenta la dimensione delle informazioni di debug di
tanto quanto un fattore due.
-fdebug-types-sezione
Quando si utilizza DWARF versione 4 o successiva, i DIE di tipo possono essere inseriti nei propri
sezione ".debug_types" invece di renderli parte della sezione ".debug_info". Esso
è più efficiente metterli in sezioni comdat separate poiché il linker può quindi
rimuovere i duplicati. Ma non tutti i consumatori DWARF supportano ancora le sezioni ".debug_types"
e su alcuni oggetti ".debug_types" produce debug più grandi anziché più piccoli
informazioni.
-gstabs+
Produrre informazioni di debug in formato stabs (se supportato), utilizzando GNU
estensioni comprese solo dal debugger GNU (GDB). L'uso di queste estensioni è
è probabile che altri debugger si blocchino o si rifiutino di leggere il programma.
-gcoff
Produrre informazioni di debug in formato COFF (se supportato). Questo è il
formato utilizzato da SDB sulla maggior parte dei sistemi System V prima di System V Release 4.
-gxcoff
Produce informazioni di debug in formato XCOFF (se supportato). Questo è il
formato utilizzato dal debugger DBX sui sistemi IBM RS/6000.
-gxcoff+
Produrre informazioni di debug in formato XCOFF (se supportato), utilizzando GNU
estensioni comprese solo dal debugger GNU (GDB). L'uso di queste estensioni è
rischia di causare l'arresto anomalo di altri debugger o il rifiuto di leggere il programma e può causare
assemblatori diversi dall'assemblatore GNU (GAS) falliscono con un errore.
-gnano-versione
Produce informazioni di debug in formato DWARF (se supportato). Il valore di
versione può essere 2, 3, 4 o 5; la versione predefinita per la maggior parte dei target è 4. DWARF
La versione 5 è solo sperimentale.
Nota che con DWARF versione 2, alcune porte richiedono e usano sempre alcune non conflittuali
DWARF 3 prolunghe nei tavoli di svolgimento.
La versione 4 potrebbe richiedere GDB 7.0 e -fvar-tracciamento-assegnazioni per il massimo beneficio.
-grecord-gcc-switch
Questa opzione fa sì che le opzioni della riga di comando utilizzate per invocare il compilatore che potrebbe
influenzare la generazione del codice da aggiungere all'attributo DW_AT_producer in DWARF
informazioni di debug. Le opzioni sono concatenate con spazi che le separano da
tra loro e dalla versione del compilatore. Guarda anche -interruttori frecord-gcc per un altro
modo di memorizzare le opzioni del compilatore nel file oggetto. Questa è l'impostazione predefinita.
-gno-record-gcc-switch
Non consentire l'aggiunta di opzioni della riga di comando all'attributo DW_AT_producer in DWARF
informazioni di debug.
-gstrict-nano
Non consentire l'utilizzo di estensioni della versione standard DWARF successiva rispetto a quella selezionata con
-gnano-versione. Sulla maggior parte dei bersagli che utilizzano estensioni DWARF non in conflitto da successive
sono consentite le versioni standard.
-gno-severo-nano
Consenti l'utilizzo di estensioni della versione standard DWARF successiva rispetto a quella selezionata con
-gnano-versione.
-gz[=Digitare]
Produci sezioni di debug compresse in formato DWARF, se supportato. Se Digitare is
non specificato, il tipo predefinito dipende dalle capacità dell'assemblatore e del linker
Usato. Digitare potrebbe essere uno di nessuna (non comprimere le sezioni di debug), zlib (usa zlib
compressione in formato ELF gABI), oppure Zlib-GNU (usa la compressione zlib nel tradizionale GNU
formato). Se il linker non supporta la scrittura di sezioni di debug compresse, l'opzione
viene rifiutato. Altrimenti, se l'assemblatore non li supporta, -gz è in silenzio
ignorato durante la produzione di file oggetto.
-gvms
Produce informazioni di debug in formato di debug Alpha/VMS (se supportato). Questo
è il formato utilizzato da DEBUG sui sistemi Alpha/VMS.
-glivello
-ggdblivello
-gstabslivello
-gcofflivello
-gxcofflivello
-gvmslivello
Richiedi informazioni di debug e usa anche livello per specificare quante informazioni. Il
il livello predefinito è 2.
Il livello 0 non produce alcuna informazione di debug. Così, -g0 nega -g.
Il livello 1 produce informazioni minime, sufficienti per fare backtrace in parti del
programma di cui non intendi eseguire il debug. Ciò include le descrizioni delle funzioni e
variabili esterne e tabelle dei numeri di riga, ma nessuna informazione sulle variabili locali.
Il livello 3 include informazioni extra, come tutte le definizioni macro presenti nel
programma. Alcuni debugger supportano l'espansione delle macro quando si utilizza -g3.
-gnano-2 non accetta un livello di debug concatenato, perché GCC era solito supportare un
opzione -gnano che significava generare informazioni di debug nella versione 1 di DWARF
format (che è molto diverso dalla versione 2), e sarebbe stato troppo confuso.
Quel formato di debug è obsoleto da tempo, ma l'opzione non può essere modificata ora. Invece usa
un ulteriore -glivello opzione per modificare il livello di debug per DWARF.
-gattiva/disattiva
Disattiva la generazione delle informazioni di debug, se tralasciando questa opzione la genera, o disattivala
su al livello 2 altrimenti. La posizione di questo argomento nella riga di comando no
questione; ha effetto dopo che tutte le altre opzioni sono state elaborate e lo fa solo
una volta, non importa quante volte viene dato. Questo è principalmente destinato ad essere utilizzato con
-fcompare-debug.
-fsanitize=indirizzo
Abilita AddressSanitizer, un rilevatore di errori di memoria veloce. Le istruzioni per l'accesso alla memoria sono
strumentati per rilevare bug out-of-bounds e use-after-free. Vedere
<https://github.com/google/sanitizers/wiki/AddressSanitizer> per maggiori dettagli. Il
il comportamento in fase di esecuzione può essere influenzato utilizzando il OPZIONI_ASAN variabile d'ambiente. quando
impostato su "help=1", le opzioni disponibili sono mostrate all'avvio di strumended
programma. Vedere
<https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags> per a
elenco delle opzioni supportate.
-fsanitize=indirizzo-kernel
Abilita AddressSanitizer per il kernel Linux. Vederehttps://github.com/google/kasan/wiki>
per ulteriori dettagli.
-fsanitize=filo
Abilita ThreadSanitizer, un rilevatore di corse di dati veloce. Le istruzioni per l'accesso alla memoria sono
strumentato per rilevare bug di gara di dati. Vedere
<https://github.com/google/sanitizers/wiki#threadsanitizer> per maggiori dettagli. La corsa-
il comportamento temporale può essere influenzato utilizzando il OPZIONI_TSAN variabile d'ambiente; vedere
<https://github.com/google/sanitizers/wiki/ThreadSanitizerFlags> per un elenco di
opzioni supportate.
-fsanitize=perdita
Abilita LeakSanitizer, un rilevatore di perdite di memoria. Questa opzione è importante solo per il collegamento di
eseguibili e se nessuno dei due -fsanitize=indirizzo né -fsanitize=filo viene utilizzato. In ciò
caso in cui l'eseguibile sia collegato a una libreria che sovrascrive "malloc" e altro
funzioni di allocatore. Vedere
<https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer> per saperne di più
particolari. Il comportamento in fase di esecuzione può essere influenzato utilizzando il OPZIONI_LSAN Industria XNUMX
variabile.
-fsanitize=non definito
Abilita UndefinedBehaviorSanitizer, un rilevatore rapido di comportamenti indefiniti. Varie
i calcoli sono strumentati per rilevare comportamenti non definiti in fase di esecuzione. Attuale
le subopzioni sono:
-fsanitize=sposta
Questa opzione consente di verificare che il risultato di un'operazione di turno non sia
non definito. Nota che ciò che è esattamente considerato indefinito differisce leggermente
tra C e C++, nonché tra ISO C90 e C99, ecc.
-fsanitize=numero-divisione-per-zero
Rileva la divisione intera per zero e la divisione "INT_MIN / -1".
-fsanitize=irraggiungibile
Con questa opzione, il compilatore trasforma la chiamata "__builtin_unreachable" in a
chiamata del messaggio di diagnostica invece. Quando si raggiunge la chiamata "__builtin_unreachable",
il comportamento è indefinito.
-fsanitize = vla-bound
Questa opzione indica al compilatore di verificare che la dimensione di una lunghezza variabile
matrice è positivo.
-fsanitize=nullo
Questa opzione abilita il controllo del puntatore. In particolare, l'applicazione realizzata con
questa opzione attivata genererà un messaggio di errore quando tenta di dereferenziare a
puntatore NULL, o se un riferimento (possibilmente un riferimento rvalue) è associato a un NULL
puntatore o se viene invocato un metodo su un oggetto puntato da un puntatore NULL.
-fsanitize=ritorno
Questa opzione abilita il controllo dell'istruzione di ritorno. Programmi creati con questa opzione
attivato emetterà un messaggio di errore quando la fine di una funzione non-void è
raggiunto senza restituire effettivamente un valore. Questa opzione funziona solo in C++.
-fsanitize=overflow intero con segno
Questa opzione abilita il controllo dell'overflow di interi con segno. Verifichiamo che il risultato di
"+", "*", e sia unario che binario "-" non traboccano nel segno
aritmetica. Nota, le regole di promozione dei numeri interi devono essere prese in considerazione. Questo è,
quanto segue non è un overflow:
carattere firmato a = SCHAR_MAX;
a++;
-fsanitize=limiti
Questa opzione abilita la strumentazione dei limiti dell'array. Vari fuori limite
vengono rilevati gli accessi. Membri di array flessibili, array flessibili simili a membri di array,
e gli inizializzatori di variabili con memorizzazione statica non sono strumentati.
-fsanitize=allineamento
Questa opzione consente di verificare l'allineamento dei puntatori quando vengono dereferenziati,
o quando un riferimento è legato a un bersaglio non sufficientemente allineato, o quando un metodo o
costruttore viene invocato su un oggetto non sufficientemente allineato.
-fsanitize=dimensione-oggetto
Questa opzione abilita la strumentazione dei riferimenti di memoria utilizzando il
Funzione "__builtin_object_size". Vari accessi al puntatore fuori dai limiti sono
rilevato.
-fsanitize=float-divide-per-zero
Rileva la divisione in virgola mobile per zero. A differenza di altre opzioni simili,
-fsanitize=float-divide-per-zero non è abilitato da -fsanitize=non definito, da
la divisione in virgola mobile per zero può essere un modo legittimo per ottenere infiniti
e NaN.
-fsanitize=float-cast-overflow
Questa opzione abilita il tipo a virgola mobile al controllo della conversione di interi. controlliamo
che il risultato della conversione non trabocchi. A differenza di altri simili
opzioni, -fsanitize=float-cast-overflow non è abilitato da -fsanitize=non definito.
Questa opzione non funziona bene con le eccezioni "FE_INVALID" abilitate.
-fsanitize=attributo non nullo
Questa opzione abilita la strumentazione delle chiamate, controllando se i valori nulli non lo sono
passato agli argomenti contrassegnati come richiedenti un valore non nullo dalla funzione "non null"
attributo.
-fsanitize=restituisce-attributo-non-null
Questa opzione abilita la strumentazione delle dichiarazioni di ritorno nelle funzioni contrassegnate con
Attributo della funzione "returns_nonnull", per rilevare la restituzione di valori nulli da tali
funzioni.
-fsanitize=bool
Questa opzione abilita la strumentazione dei carichi da bool. Se un valore diverso da 0/1
viene caricato, viene emesso un errore di runtime.
-fsanitize=enumerazione
Questa opzione abilita la strumentazione dei carichi da un tipo enum. Se un valore
al di fuori dell'intervallo di valori per il tipo enum viene caricato, viene visualizzato un errore di runtime
rilasciato.
-fsanitize=vptr
Questa opzione abilita la strumentazione di chiamate di funzioni membro C++, accessi ai membri
e alcune conversioni tra puntatori a classi base e derivate, per verificare il
l'oggetto a cui si fa riferimento ha il tipo dinamico corretto.
Mentre -ftrapv provoca l'emissione di trappole per gli overflow firmati, -fsanitize=non definito
dà un messaggio diagnostico. Attualmente funziona solo per la famiglia di lingue C.
-fno-sanitize=tutto
Questa opzione disabilita tutti i disinfettanti precedentemente abilitati. -fsanitize=tutto non è
consentito, in quanto alcuni disinfettanti non possono essere utilizzati insieme.
-fasan-offset-ombra=numero
Questa opzione impone a GCC di utilizzare l'offset dell'ombra personalizzato nei controlli AddressSanitizer. è
utile per sperimentare diversi layout di memoria ombra nel kernel
Disinfettante per indirizzi.
-fsanitize-recupera[=opta]
-fsanitize-recupera= controlla la modalità di ripristino degli errori per i disinfettanti menzionati nella virgola
elenco separato di opta. L'abilitazione di questa opzione per un componente disinfettante fa sì che
tentare di continuare a eseguire il programma come se non si fosse verificato alcun errore. Questo significa multiplo
gli errori di runtime possono essere segnalati in una singola esecuzione del programma e il codice di uscita del
programma può indicare il successo anche quando sono stati segnalati errori. Il
-fno-sanitize-recover= l'opzione può essere utilizzata per modificare questo comportamento: solo il primo
viene segnalato l'errore rilevato e il programma esce con un codice di uscita diverso da zero.
Attualmente questa funzione funziona solo per -fsanitize=non definito (e le sue subopzioni eccetto
per -fsanitize=irraggiungibile e -fsanitize=ritorno), -fsanitize=float-cast-overflow,
-fsanitize=float-divide-per-zero e -fsanitize=indirizzo-kernel. Per questi disinfettanti
il ripristino degli errori è attivato per impostazione predefinita. -fsanitize-recover=tutto e
-fno-sanitize-recover=tutto è anche accettato, il primo consente il recupero per tutti
igienizzanti che lo supportano, quest'ultimo disabilita il recupero per tutti gli igienizzanti che
supportalo.
Sintassi senza esplicita opta parametro è deprecato. È equivalente a
-fsanitize-recover = indefinito, galleggiante a getto di overflow, galleggiante a divisione per zero
Allo stesso modo -fno-sanitize-recupera è equivalente
-fno-sanitize-recover=undefined,float-cast-overflow,float-dividi-per-zero
-fsanitize-unfine-trap-on-error
Le -fsanitize-unfine-trap-on-error opzione indica al compilatore di segnalare
comportamento non definito utilizzando "__builtin_trap" piuttosto che una routine di libreria "libubsan".
Il vantaggio di questo è che la libreria "libubsan" non è necessaria e non è collegata
in, quindi utilizzabile anche in ambienti freestanding.
-fcheck-pointer-limits
Abilita la strumentazione Pointer Bounds Checker. Ogni riferimento di memoria è strumentato
con controlli del puntatore utilizzato per l'accesso alla memoria rispetto ai limiti associati a quello
puntatore.
Attualmente è disponibile solo un'implementazione per Intel MPX, quindi x86 target e
-mmpx sono necessari per abilitare questa funzione. La strumentazione basata su MPX richiede un
libreria runtime per abilitare MPX nell'hardware e gestire i segnali di violazione dei limiti. Di
predefinito quando -fcheck-pointer-limits e -mmpx le opzioni vengono utilizzate per collegare un programma, le
Collegamenti del driver GCC contro il libmpx libreria runtime e libmpxwrapper biblioteca. Esso
passa anche '-z bndplt' a un linker nel caso in cui supporti questa opzione (cheèselezionata
nella configurazione di libmpx). Nota che le vecchie versioni del linker potrebbero ignorare l'opzione. Oro
il linker non supporta l'opzione '-z bndplt'. Senza supporto '-z bndplt' nel linker all
le chiamate alle librerie dinamiche perdono i limiti passati riducendo il livello di protezione generale. È
altamente consigliato di utilizzare il linker con il supporto '-z bndplt'. Nel caso in cui tale linker non lo sia
disponibile si consiglia di utilizzare sempre -static-libmpxwrapper per una migliore protezione
livello o uso -statico per evitare completamente chiamate esterne a librerie dinamiche. MPX-
la strumentazione basata può essere utilizzata per il debug e può anche essere inclusa nella produzione
codice per aumentare la sicurezza del programma. A seconda dell'utilizzo, potresti avere diversi
requisiti per la libreria runtime. La versione corrente della libreria runtime MPX
è più orientato all'uso come strumento di debug. L'utilizzo della libreria runtime MPX implica
-lpthread. Vedi anche -static-libmpx. Il comportamento della libreria di runtime può essere influenzato
utilizzando vari CHKP_RT_* variabili ambientali. Vedere
<https://gcc.gnu.org/wiki/Intel%20MPX%20support%20in%20the%20GCC%20compiler> per saperne di più
dettagli.
La strumentazione generata può essere controllata da vari -fchkp-* opzioni e dal
Attributo del campo struttura "bnd_variable_size" e "bnd_legacy" e "bnd_instrument"
attributi della funzione. GCC fornisce anche una serie di funzioni integrate per il controllo
il correttore dei limiti del puntatore.
-fchkp-check-tipo-incompleto
Genera controlli dei limiti del puntatore per le variabili con tipo incompleto. Abilitato da
predefinito.
-fchkp-limiti-stretti
Controlla i limiti utilizzati da Pointer Bounds Checker per i puntatori ai campi oggetto. Se
il restringimento è abilitato, quindi vengono utilizzati i limiti del campo. In caso contrario, vengono utilizzati i limiti dell'oggetto.
Vedi anche -fchkp-array-stretto-to-più-interno e -fchkp-first-field-ha-proprio-limiti.
Abilitato per impostazione predefinita.
-fchkp-first-field-ha-proprio-limiti
Forza Pointer Bounds Checker a usare limiti ristretti per l'indirizzo del primo
campo nella struttura. Per impostazione predefinita, un puntatore al primo campo ha gli stessi limiti
come punto di riferimento per l'intera struttura.
-fchkp-array-stretto-to-più-interno
Forza Pointer Bounds Checker a usare i limiti degli array più interni in caso di annidamento
accesso statico all'array. Per impostazione predefinita questa opzione è disabilitata e limita il più esterno
matrice sono utilizzati.
-fchkp-ottimizzare
Abilita le ottimizzazioni del correttore dei limiti del puntatore. Abilitato per impostazione predefinita all'ottimizzazione
livelli -O, -O2, -O3.
-fchkp-usa-funzioni-stringa-veloce
Consente l'uso delle versioni *_nobnd delle funzioni stringa (senza copiare i limiti) da Pointer
Controllore dei limiti. Disabilitato per impostazione predefinita.
-fchkp-usa-le-funzioni-stringa-nochk
Consente l'uso delle versioni *_nochk delle funzioni stringa (non controllando i limiti) da Pointer
Controllore dei limiti. Disabilitato per impostazione predefinita.
-fchkp-usa-limiti-statici
Consenti a Pointer Bounds Checker di generare limiti statici che tengono i limiti di statico
variabili. Abilitato per impostazione predefinita.
-fchkp-use-static-const-bounds
Usa i limiti inizializzati staticamente per i limiti costanti invece di generarli ciascuno
tempo sono richiesti. Abilitato per impostazione predefinita quando -fchkp-usa-limiti-statici è abilitato.
-fchkp-tratta-zero-dimensione-dinamica-come-infinito
Con questa opzione, oggetti con tipo incompleto la cui dimensione ottenuta dinamicamente è zero
sono trattati come aventi dimensione infinita invece da Pointer Bounds Checker. Questa opzione
può essere utile se un programma è collegato a una libreria senza informazioni sulla dimensione per alcuni
simboli. Disabilitato per impostazione predefinita.
-fchkp-controlla-leggi
Indica a Pointer Bounds Checker di generare controlli per tutti gli accessi in lettura alla memoria.
Abilitato per impostazione predefinita.
-fchkp-verifica-scrittura
Indica a Pointer Bounds Checker di generare controlli per tutti gli accessi in scrittura alla memoria.
Abilitato per impostazione predefinita.
-fchkp-store-limiti
Indica a Pointer Bounds Checker di generare archivi di limiti per le scritture del puntatore.
Abilitato per impostazione predefinita.
-fchkp-instrument call
Indica a Pointer Bounds Checker di passare i limiti del puntatore alle chiamate. Abilitato per impostazione predefinita.
-fchkp-strumento-solo contrassegnato
Indica a Pointer Bounds Checker solo le funzioni dello strumento contrassegnate con
attributo "bnd_instrument". Disabilitato per impostazione predefinita.
-fchkp-use-wrapper
Consente a Pointer Bounds Checker di sostituire le chiamate a funzioni integrate con chiamate a
funzioni di involucro. quando -fchkp-use-wrapper è usato per collegare un programma, il driver GCC
si collega automaticamente contro libmpxwrapper. Vedi anche -static-libmpxwrapper. Abilitato
per impostazione predefinita.
-fdump-final-insns[=filetto]
Scarica la rappresentazione interna finale (RTL) su filetto. Se l'argomento opzionale è
omesso (o se filetto è "."), il nome del file di dump è determinato aggiungendo
".gkd" al nome del file di output della compilazione.
-fcompare-debug[=opta]
Se non si verifica alcun errore durante la compilazione, eseguire il compilatore una seconda volta, aggiungendo opta e
-fcompare-debug-secondo agli argomenti passati alla seconda compilazione. scarica il
rappresentazione interna finale in entrambe le compilazioni e stampa un errore se differiscono.
Se il segno di uguale viene omesso, il valore predefinito -gattiva/disattiva viene utilizzato.
La variabile d'ambiente GCC_COMPARE_DEBUG, se definito, non vuoto e diverso da zero,
implicitamente abilita -fcompare-debug. Se GCC_COMPARE_DEBUG è definito da una stringa
inizia con un trattino, quindi viene utilizzato per opta, altrimenti il default -gattiva/disattiva is
Usato.
-fcompare-debug=, con il segno di uguale ma senza opta, è equivalente a
-fno-confronta-debug, che disabilita il dumping della rappresentazione finale e il
seconda compilazione, impedendo anche GCC_COMPARE_DEBUG dall'entrata in vigore.
Per verificare la copertura completa durante -fcompare-debug test, set GCC_COMPARE_DEBUG dire
-fcompare-debug-not-override, che GCC rifiuta come opzione non valida in qualsiasi effettiva
compilazione (piuttosto che pre-elaborazione, assemblaggio o collegamento). Per avere solo un avvertimento,
regolazione GCC_COMPARE_DEBUG a -w%n-fcompare-debug non è un sovrascritto andrà bene.
-fcompare-debug-secondo
Questa opzione viene implicitamente passata al compilatore per la seconda compilazione richiesta
by -fcompare-debug, insieme alle opzioni per disattivare gli avvisi e omettere altre opzioni
ciò causerebbe output del compilatore con effetti collaterali su file o sullo standard output.
I file dump e i file temporanei conservati vengono rinominati in modo da contenere il ".gk"
estensione aggiuntiva durante la seconda compilazione, per evitare di sovrascriverli
generato dal primo.
Quando questa opzione viene passata al driver del compilatore, provoca il prima di tutto compilazione a
essere ignorato, il che lo rende utile per poco altro che per il debug del compilatore vero e proprio.
-feliminate-nano2-dups
Comprimi le informazioni di debug di DWARF 2 eliminando le informazioni duplicate su
ogni simbolo. Questa opzione ha senso solo quando si genera il debug di DWARF 2
informazioni con -gnano-2.
-femit-struct-debug-baseonly
Emette informazioni di debug per i tipi struct-like solo quando il nome di base del
il file di origine della compilazione corrisponde al nome di base del file in cui è definita la struttura.
Questa opzione riduce sostanzialmente la dimensione delle informazioni di debug, ma a
significativa perdita potenziale di informazioni sul tipo per il debugger. Vedere
-femit-struct-debug-ridotto per un'opzione meno aggressiva. Vedere
-femit-struct-debug-dettagliato per un controllo più dettagliato.
Questa opzione funziona solo con DWARF 2.
-femit-struct-debug-ridotto
Emette informazioni di debug per i tipi struct-like solo quando il nome di base del
il file di origine della compilazione corrisponde al nome di base del file in cui è definito il tipo,
a meno che la struttura non sia un modello o definita in un'intestazione di sistema.
Questa opzione riduce significativamente la dimensione delle informazioni di debug, con alcuni
potenziale perdita di informazioni sul tipo per il debugger. Vedere -femit-struct-debug-baseonly
per un'opzione più aggressiva. Vedere -femit-struct-debug-dettagliato per maggiori dettagli
controllare.
Questa opzione funziona solo con DWARF 2.
-femit-struct-debug-dettagliato[=lista-specifiche]
Specificare i tipi di tipo struct per cui il compilatore genera le informazioni di debug. Il
l'intento è ridurre le informazioni di debug della struttura duplicate tra diversi file oggetto
all'interno dello stesso programma.
Questa opzione è una versione dettagliata di -femit-struct-debug-ridotto e
-femit-struct-debug-baseonly, che serve per la maggior parte delle esigenze.
Una specifica ha la sintassi[direzione:|ind:][ordine:|genere:](in qualsiasi|sys|base|nessuna)
La prima parola facoltativa limita la specifica alle strutture che vengono utilizzate direttamente
(direzione:) o utilizzato indirettamente (ind:). Un tipo struct viene utilizzato direttamente quando è il tipo
di una variabile, membro. Gli usi indiretti derivano da puntatori a struct. Questo è,
quando l'uso di una struttura incompleta è valido, l'uso è indiretto. Un esempio è struct
prima diretto; struct Tutto * indiretto;.
La seconda parola facoltativa limita la specifica alle strutture ordinarie (ordine:) o puoi
strutture generiche (genere:). Le strutture generiche sono un po' complicate da spiegare. Per C++,
queste sono specializzazioni non esplicite di classi modello o classi non modello
all'interno di quanto sopra. Altri linguaggi di programmazione hanno generici, ma
-femit-struct-debug-dettagliato non li attua ancora.
La terza parola specifica i file sorgente per quelle strutture per le quali il compilatore
dovrebbe emettere informazioni di debug. I valori nessuna e in qualsiasi hanno il significato normale. Il
APPREZZIAMO base significa che la base del nome del file in cui la dichiarazione del tipo
appare deve corrispondere alla base del nome del file di compilazione principale. In pratica,
questo significa che durante la compilazione foo.c, le informazioni di debug vengono generate per i tipi
dichiarato in quel file e foo.h, ma non altri file di intestazione. Il valore sys si intende
quei tipi soddisfacenti base o dichiarato nelle intestazioni di sistema o del compilatore.
Potrebbe essere necessario sperimentare per determinare le impostazioni migliori per la tua applicazione.
L'impostazione predefinita è -femit-struct-debug-detailed=tutto.
Questa opzione funziona solo con DWARF 2.
-fno-merge-debug-stringhe
Indica al linker di non unire le stringhe nelle informazioni di debug che sono
identici in diversi file oggetto. La fusione non è supportata da tutti gli assemblatori o
collegatori. L'unione riduce la dimensione delle informazioni di debug nel file di output in
il costo dell'aumento del tempo di elaborazione del collegamento. L'unione è abilitata per impostazione predefinita.
-fdebug-prefisso-mappa=vecchio=nuovi
Quando si compilano file nella directory vecchio, registra le informazioni di debug descrivendole come
in nuovi anziché.
-fno-nano2-cfi-asm
Emetti le informazioni di svolgimento di DWARF 2 come sezione ".eh_frame" generata dal compilatore invece di usare
Direttive GAS ".cfi_*".
-p Genera codice aggiuntivo per scrivere informazioni sul profilo adatte al programma di analisi
prof. È necessario utilizzare questa opzione durante la compilazione dei file di origine di cui si desiderano i dati,
e devi anche usarlo durante il collegamento.
-pag Genera codice aggiuntivo per scrivere informazioni sul profilo adatte al programma di analisi
gprof. È necessario utilizzare questa opzione durante la compilazione dei file di origine di cui si desiderano i dati,
e devi anche usarlo durante il collegamento.
-Q Fa in modo che il compilatore stampi ogni nome di funzione mentre viene compilato e ne stampa alcuni
statistiche su ogni passaggio quando finisce.
-ftime-rapporto
Fa in modo che il compilatore stampi alcune statistiche sul tempo consumato da ogni passaggio quando lo fa
finiture.
-fmem-rapporto
Fa in modo che il compilatore stampi alcune statistiche sull'allocazione permanente della memoria quando
finiture.
-fmem-report-wpa
Fa in modo che il compilatore stampi alcune statistiche sull'allocazione della memoria permanente per il WPA
solo fase.
-fpre-ipa-mem-report
-fpost-ipa-mem-report
Fa in modo che il compilatore stampi alcune statistiche sull'allocazione permanente della memoria prima di o
dopo l'ottimizzazione interprocedurale.
-fprofile-rapporto
Fa in modo che il compilatore stampi alcune statistiche sulla consistenza del profilo (stimato)
ed effetto dei singoli passaggi.
-fstack-uso
Rende le informazioni sull'utilizzo dello stack di output del compilatore per il programma, su una funzione
base. Il nome del file per il dump viene creato aggiungendo .SU ai nome aux. nome aux is
generato dal nome del file di output, se specificato esplicitamente e non è un
eseguibile, altrimenti è il nome di base del file sorgente. Una voce è composta da
tre campi:
* Il nome della funzione.
* Un numero di byte.
* Uno o più qualificatori: "statico", "dinamico", "limitato".
Il qualificatore "static" significa che la funzione manipola lo stack staticamente: a
numero fisso di byte vengono assegnati per il frame all'ingresso della funzione e rilasciati su
uscita dalla funzione; altrimenti non vengono effettuate regolazioni dello stack nella funzione. Il secondo
campo è questo numero fisso di byte.
Il qualificatore "dinamico" significa che la funzione manipola lo stack dinamicamente: in
Oltre all'allocazione statica sopra descritta, le regolazioni dello stack vengono effettuate nel
corpo della funzione, ad esempio per eseguire il push/pop degli argomenti attorno alle chiamate di funzione. Se la
è presente anche il qualificatore "limitato", l'importo di queste rettifiche è limitato a
tempo di compilazione e il secondo campo è un limite superiore della quantità totale di stack utilizzato
dalla funzione. Se non è presente, l'importo di tali rettifiche non è limitato
in fase di compilazione e il secondo campo rappresenta solo la parte delimitata.
-fprofile-archi
Aggiungi codice in modo che il programma scorra archi sono strumentati. Durante l'esecuzione il programma
registra quante volte ogni ramo e chiamata viene eseguita e quante volte viene presa
o ritorna. Quando il programma compilato esce salva questi dati in un file chiamato
nomeaux.gcda per ogni file sorgente. I dati possono essere utilizzati per il profilo diretto
ottimizzazioni (-fbranch-probabilità), o per l'analisi della copertura del test
(-ftest-copertura). Ogni file oggetto nome aux è generato dal nome del
file di output, se specificato esplicitamente e non è l'eseguibile finale, altrimenti lo è
è il nome di base del file sorgente. In entrambi i casi viene rimosso qualsiasi suffisso (es
foo.gcda per il file di input dir/foo.c, o dir/foo.gcda per il file di output specificato come -o
dir/foo.o).
--copertura
Questa opzione viene utilizzata per compilare e collegare il codice strumentato per l'analisi della copertura. Il
opzione è sinonimo di -fprofile-archi -ftest-copertura (durante la compilazione) e -lgcov
(durante il collegamento). Vedere la documentazione per queste opzioni per maggiori dettagli.
* Compila i file sorgente con -fprofile-archi oltre a ottimizzazione e generazione di codice
opzioni. Per l'analisi della copertura del test, utilizzare l'addizionale -ftest-copertura opzione.
Non è necessario profilare ogni file sorgente in un programma.
* Collega i tuoi file oggetto con -lgcov or -fprofile-archi (quest'ultimo implica il
ex).
* Eseguire il programma su un carico di lavoro rappresentativo per generare il profilo dell'arco
informazione. Questo può essere ripetuto un numero qualsiasi di volte. Puoi correre contemporaneamente
istanze del programma e, a condizione che il file system supporti il blocco,
i file di dati verranno aggiornati correttamente. Vengono rilevate anche le chiamate "fork" e
gestito correttamente (il doppio conteggio non avverrà).
* Per le ottimizzazioni orientate al profilo, compila nuovamente i file sorgente con lo stesso
opzioni di ottimizzazione e generazione del codice plus -fbranch-probabilità.
* Per l'analisi della copertura del test, utilizzare gcov per produrre informazioni leggibili dall'uomo da
, il .gcno e .gcda File. Fare riferimento a gcov documentazione per ulteriori informazioni
informazioni.
Con -fprofile-archi, per ogni funzione del tuo programma GCC crea un flusso di programma
graph, quindi trova un albero ricoprente per il grafico. Solo archi che non sono sul
spanning tree devono essere strumentati: il compilatore aggiunge il codice per contare il numero di
volte che questi archi vengono eseguiti. Quando un arco è l'unica uscita o l'unico ingresso a
un blocco, il codice della strumentazione può essere aggiunto al blocco; altrimenti, una nuova base
deve essere creato un blocco per contenere il codice della strumentazione.
-ftest-copertura
Produrre un file di note che il gcov l'utilità di copertura del codice può essere utilizzata per mostrare il programma
copertura. Viene chiamato il file delle note di ogni file sorgente nomeaux.gcno. Fare riferimento a
-fprofile-archi opzione sopra per una descrizione di nome aux e istruzioni su come
generare dati di copertura del test. I dati di copertura corrispondono maggiormente ai file di origine se
non ottimizzi.
-fdbg-cnt-elenco
Stampa il nome e il limite superiore del contatore per tutti i contatori di debug.
-fdbg-cnt=lista-controvalore
Imposta il limite superiore del contatore di debug interno. lista-controvalore è separato da virgole
lista di Nome:APPREZZIAMO coppie che imposta il limite superiore di ogni contatore di debug Nome a
APPREZZIAMO. Tutti i contatori di debug hanno il limite superiore iniziale di "UINT_MAX"; quindi "dbg_cnt"
restituisce sempre true a meno che il limite superiore non sia impostato da questa opzione. Ad esempio, con
-fdbg-cnt=dce:10,tail_call:0, "dbg_cnt(dce)" restituisce true solo per i primi 10
invocazioni.
-accettabile-tipo-passare
-fdisabilita-tipo-passare=elenco-gamma
Questo è un insieme di opzioni che vengono utilizzate per disabilitare/abilitare esplicitamente l'ottimizzazione
passa. Queste opzioni sono destinate all'uso per il debug di GCC. Gli utenti del compilatore dovrebbero
utilizzare invece le normali opzioni per abilitare/disabilitare i pass.
-fdisable-ipa-passare
Disabilita il pass IPA passare. passare è il nome del passaggio. Se lo stesso passaggio è statico
invocato nel compilatore più volte, il nome del passaggio dovrebbe essere aggiunto con a
numero progressivo a partire da 1.
-fdisable-rtl-passare
-fdisable-rtl-passare=elenco-gamma
Disabilita il pass RTL passare. passare è il nome del passaggio. Se lo stesso passaggio è statico
invocato nel compilatore più volte, il nome del passaggio dovrebbe essere aggiunto con a
numero progressivo a partire da 1. elenco-gamma è un elenco separato da virgole di
intervalli di funzioni o nomi di assembler. Ogni intervallo è una coppia di numeri separati da a
colon. La gamma è inclusiva in entrambe le estremità. Se l'intervallo è banale, il numero
coppia può essere semplificata come un singolo numero. Se il nodo del grafico di chiamata della funzione è
uid rientra in uno degli intervalli specificati, il passare è disabilitato per questo
funzione. Il uid è mostrato nell'intestazione della funzione di un file dump e il pass
i nomi possono essere scaricati usando l'opzione -fdump-pass.
-fdisable-albero-passare
-fdisable-albero-passare=elenco-gamma
Disabilita il passaggio dell'albero passare. Vedere -fdisable-rtl per la descrizione dell'opzione
argomenti.
-fenable-ipa-passare
Abilita il pass IPA passare. passare è il nome del passaggio. Se lo stesso passaggio è statico
invocato nel compilatore più volte, il nome del passaggio dovrebbe essere aggiunto con a
numero progressivo a partire da 1.
-fenable-rtl-passare
-fenable-rtl-passare=elenco-gamma
Abilita il passaggio RTL passare. Vedere -fdisable-rtl per la descrizione dell'argomento opzione e
esempi.
-albero-fenable-passare
-albero-fenable-passare=elenco-gamma
Abilita passaggio albero passare. Vedere -fdisable-rtl per la descrizione degli argomenti delle opzioni.
Ecco alcuni esempi che mostrano gli usi di queste opzioni.
# disabilita ccp1 per tutte le funzioni
-fdisable-albero-ccp1
# disabilita lo srotolamento completo per la funzione il cui uid del nodo cgraph è 1
-fenable-tree-cunroll=1
# disabilita gcse2 per le funzioni nei seguenti intervalli [1,1],
# [300,400] e [400,1000]
# disabilita gcse2 per le funzioni foo e foo2
-fdisable-rtl-gcse2=pippo,pippo2
# disabilita l'inserimento anticipato
-fdisable-albero-einline
# disabilita l'inline ipa
-fdisable-ipa-inline
# abilita lo srotolamento completo dell'albero
-fenable-albero-srotolare
-dlettere
-fdump-rtl-passare
-fdump-rtl-passare=Nome del file
Dice di eseguire dump di debug durante la compilazione nei momenti specificati da lettere. Questo
viene utilizzato per il debug dei passaggi basati su RTL del compilatore. I nomi dei file per la maggior parte
delle discariche vengono effettuate aggiungendo un numero di pass e una parola al nome dump, e il
i file vengono creati nella directory del file di output. In caso di =Nome del file opzione,
il dump viene emesso sul file dato invece dei file dump numerati. Nota
che il numero di pass viene calcolato staticamente man mano che i pass vengono registrati nel pass
manager. Quindi la numerazione non è correlata all'ordine dinamico di esecuzione di
passa. In particolare, un pass installato da un plugin potrebbe avere un numero superiore a 200 pari
se è stato eseguito abbastanza presto. nome dump viene generato dal nome del file di output,
se specificato esplicitamente e non è un eseguibile, altrimenti è il nome base di
il file sorgente. Questi interruttori possono avere effetti diversi quando -E è usato per
preelaborazione.
I dump di debug possono essere abilitati con a -fdump-rtl interruttore o qualcosa del genere -d opzione lettere. Qui
sono le possibili lettere da usare in passare e letteree il loro significato:
-fdump-rtl-allineamenti
Scarica dopo che sono stati calcolati gli allineamenti dei rami.
-fdump-rtl-asmcons
Eseguire il dump dopo aver corretto le istruzioni rtl che hanno vincoli in/out non soddisfatti.
-fdump-rtl-auto_inc_dec
Eseguire il dump dopo il rilevamento di auto-inc-dec. Questo passaggio viene eseguito solo su architetture che
avere istruzioni auto inc o auto dec.
-fdump-rtl-barriere
Scarica dopo aver ripulito le istruzioni della barriera.
-fdump-rtl-bbpart
Eseguire il dump dopo il partizionamento dei blocchi di base caldi e freddi.
-fdump-rtl-bbro
Dump dopo il riordino dei blocchi.
-fdump-rtl-btl1
-fdump-rtl-btl2
-fdump-rtl-btl1 e -fdump-rtl-btl2 abilitare il dumping dopo il target dei due rami
passaggi di ottimizzazione del carico.
-fdump-rtl-bypass
Scarico dopo il bypass del salto e ottimizzazione del flusso di controllo.
-fdump-rtl-combina
Dump dopo il passaggio della combinazione di istruzioni RTL.
-fdump-rtl-compgotos
Scarica dopo aver duplicato i goto calcolati.
-fdump-rtl-ce1
-fdump-rtl-ce2
-fdump-rtl-ce3
-fdump-rtl-ce1, -fdump-rtl-ce2e -fdump-rtl-ce3 abilitare il dumping dopo le tre
se la conversione passa.
-fdump-rtl-cprop_hardreg
Dump dopo la propagazione della copia del registro cartaceo.
-fdump-rtl-csa
Scarica dopo aver combinato le regolazioni dello stack.
-fdump-rtl-cse1
-fdump-rtl-cse2
-fdump-rtl-cse1 e -fdump-rtl-cse2 abilitare il dumping dopo i due comuni
passaggi di eliminazione della sottoespressione.
-fdump-rtl-dce
Eseguire il dump dopo l'eliminazione del codice morto autonomo.
-fdump-rtl-dbr
Dump dopo la pianificazione della filiale ritardata.
-fdump-rtl-dce1
-fdump-rtl-dce2
-fdump-rtl-dce1 e -fdump-rtl-dce2 abilitare il dumping dopo i due negozi morti
passaggi di eliminazione.
-fdump-rtl-eh
Dump dopo la finalizzazione del codice di gestione EH.
-fdump-rtl-eh_range
Dump dopo la conversione delle regioni dell'intervallo di gestione EH.
-fdump-rtl-espandi
Dump dopo la generazione di RTL.
-fdump-rtl-fwprop1
-fdump-rtl-fwprop2
-fdump-rtl-fwprop1 e -fdump-rtl-fwprop2 abilitare il dumping dopo i due forward
passaggi di propagazione.
-fdump-rtl-gcse1
-fdump-rtl-gcse2
-fdump-rtl-gcse1 e -fdump-rtl-gcse2 abilitare il dumping dopo il comune globale
eliminazione della sottoespressione.
-fdump-rtl-init-regs
Dump dopo l'inizializzazione dei registri.
-fdump-rtl-initvals
Dump dopo il calcolo dei set di valori iniziali.
-fdump-rtl-into_cfglayout
Scarica dopo la conversione in modalità cfglayout.
-fdump-rtl-ira
Dump dopo l'allocazione del registro iterata.
-fdump-rtl-salto
Scarica dopo la seconda ottimizzazione del salto.
-fdump-rtl-loop2
-fdump-rtl-loop2 abilita il dump dopo che l'ottimizzazione del ciclo rtl è passata.
-fdump-rtl-mach
Eseguire il dump dopo aver eseguito il passaggio di riorganizzazione dipendente dalla macchina, se tale passaggio
esiste.
-fdump-rtl-mode_sw
Eseguire il dump dopo aver rimosso gli interruttori di modalità ridondanti.
-fdump-rtl-rnreg
Dump dopo la rinumerazione del registro.
-fdump-rtl-outof_cfglayout
Scarica dopo la conversione dalla modalità cfglayout.
-fdump-rtl-spioncino2
Discarica dopo il passaggio dello spioncino.
-fdump-rtl-postreload
Scarica dopo le ottimizzazioni post-ricarica.
-fdump-rtl-pro_and_epilogo
Eseguire il dump dopo aver generato la funzione prologhi ed epiloghi.
-fdump-rtl-sched1
-fdump-rtl-sched2
-fdump-rtl-sched1 e -fdump-rtl-sched2 abilitare il dump dopo il blocco di base
pass di programmazione.
-fdump-rtl-ree
Dump dopo l'eliminazione dell'estensione segno/zero.
-fdump-rtl-seqabstr
Dump dopo il rilevamento della sequenza comune.
-fdump-rtl-accorcia
Scarica dopo aver accorciato i rami.
-fdump-rtl-fratello
Eseguire il dump dopo l'ottimizzazione delle chiamate tra fratelli.
-fdump-rtl-split1
-fdump-rtl-split2
-fdump-rtl-split3
-fdump-rtl-split4
-fdump-rtl-split5
Queste opzioni consentono il dumping dopo cinque cicli di suddivisione delle istruzioni.
-fdump-rtl-sms
Dump dopo la pianificazione del modulo. Questo passaggio viene eseguito solo su alcune architetture.
-fdump-rtl-stack
Scarica dopo la conversione dai registri "flat register file" di GCC agli x87
registri a pila. Questo passaggio viene eseguito solo su varianti x86.
-fdump-rtl-sottoreg1
-fdump-rtl-sottoreg2
-fdump-rtl-sottoreg1 e -fdump-rtl-sottoreg2 abilitare il dumping dopo i due subreg
passaggi di espansione.
-fdump-rtl-unshare
Scarica dopo che tutto rtl è stato annullato.
-fdump-rtl-vartrack
Dump dopo l'inseguimento variabile.
-fdump-rtl-vregs
Eseguire il dump dopo aver convertito i registri virtuali in registri rigidi.
-fdump-rtl-web
Dump dopo la suddivisione dell'intervallo in tempo reale.
-fdump-rtl-regclass
-fdump-rtl-subregs_of_mode_init
-fdump-rtl-subregs_of_mode_finish
-fdump-rtl-dfinit
-fdump-rtl-finish
Questi dump sono definiti ma producono sempre file vuoti.
-in
-fdump-rtl-tutto
Produci tutte le discariche sopra elencate.
-da Annota l'output dell'assemblatore con varie informazioni di debug.
-dd Scarica tutte le definizioni macro, alla fine della preelaborazione, oltre al normale
produzione.
-dH Produce un core dump ogni volta che si verifica un errore.
-dp Annota l'output dell'assemblatore con un commento che indica quale modello e
viene utilizzata l'alternativa. Viene stampata anche la lunghezza di ciascuna istruzione.
-dP Scarica l'RTL nell'output dell'assemblatore come commento prima di ogni istruzione. Anche
si accende -dp annotazione.
-dx Basta generare RTL per una funzione invece di compilarla. Solitamente utilizzato con
-fdump-rtl-espandi.
-fdump-noaddr
Quando si eseguono dump di debug, eliminare l'output dell'indirizzo. Questo rende più fattibile
usa diff sui dump di debug per le chiamate del compilatore con diversi binari del compilatore
e/o diverse posizioni di inizio testo / bss / data / heap / stack / dso.
-segnala-bug
Raccogli e scarica le informazioni di debug in un file temporaneo se ICE nel compilatore C/C++
si è verificato.
-fdump-non numerato
Quando si eseguono dump di debug, eliminare i numeri di istruzione e l'output degli indirizzi. Questo
rende più fattibile l'uso di diff sui dump di debug per le chiamate del compilatore con
diverse opzioni, in particolare con e senza -g.
-fdump-link-non-numerati
Quando si eseguono dump di debug (vedere -d opzione sopra), sopprimere i numeri di istruzione per il
collegamenti alle istruzioni precedenti e successive in sequenza.
-fdump-unità-di-traduzione (solo C++)
-fdump-unità-di-traduzione-Opzioni (solo C++)
Scarica una rappresentazione della struttura ad albero per l'intera unità di traduzione in un file.
Il nome del file viene creato aggiungendo .Voi al nome del file di origine e il file è
creato nella stessa directory del file di output. Se la -Opzioni viene utilizzata la forma,
Opzioni controlla i dettagli del dump come descritto per il -fdump-albero opzioni.
-fdump-classe-gerarchia (solo C++)
-fdump-gerarchia-classi-Opzioni (solo C++)
Scarica una rappresentazione della gerarchia di ogni classe e del layout della tabella delle funzioni virtuali in a
file. Il nome del file viene creato aggiungendo .classe al nome del file sorgente e il file
viene creato nella stessa directory del file di output. Se la -Opzioni viene utilizzata la forma,
Opzioni controlla i dettagli del dump come descritto per il -fdump-albero opzioni.
-fdump-ipa-interruttore
Controllare il dumping nelle varie fasi dell'albero linguistico di analisi interprocedurale per a
file. Il nome del file viene generato aggiungendo un suffisso specifico per lo switch alla sorgente
nome file e il file viene creato nella stessa directory del file di output. Il
sono possibili i seguenti dump:
contro tutti i Abilita tutti i dump di analisi interprocedurali.
cgrafico
Scarica le informazioni sull'ottimizzazione del grafico delle chiamate, la rimozione delle funzioni inutilizzate e
decisioni in linea.
inline
Dump dopo l'inlining della funzione.
-fdump-pass
Scarica l'elenco dei passaggi di ottimizzazione attivati e disattivati dalla corrente
opzioni della riga di comando.
-statistiche-fdump-opzione
Abilita e controlla il dump delle statistiche sui passaggi in un file separato. Il nome del file è
generato aggiungendo un suffisso che termina in .statistiche al nome del file di origine e
file viene creato nella stessa directory del file di output. Se la -opzione la forma è
Usato, -statistiche fa sì che i contatori vengano sommati su tutta l'unità di compilazione mentre
-dettagli scarica tutti gli eventi man mano che i passaggi li generano. L'impostazione predefinita senza opzione è
sommare i contatori per ogni funzione compilata.
-fdump-albero-interruttore
-fdump-albero-interruttore-Opzioni
-fdump-albero-interruttore-Opzioni=Nome del file
Controllare il dumping nelle varie fasi dell'elaborazione dell'albero linguistico intermedio per
un file. Il nome del file viene generato aggiungendo un suffisso specifico dello switch al
nome del file di origine e il file viene creato nella stessa directory del file di output. In
caso di =Nome del file opzione, il dump viene emesso sul file dato invece dell'auto
file di dump denominati. Se la -Opzioni viene utilizzata la forma, Opzioni è un elenco di - diviso
opzioni che controllano i dettagli del dump. Non tutte le opzioni sono applicabili a tutti
discariche; quelli che non sono significativi vengono ignorati. Sono disponibili le seguenti opzioni
indirizzo
Stampa l'indirizzo di ogni nodo. Di solito questo non è significativo in quanto cambia
in base all'ambiente e al file sorgente. Il suo uso principale è per legare a
dump con un ambiente di debug.
nomenome
Se "DECL_ASSEMBLER_NAME" è stato impostato per un determinato decl, utilizzalo nel dump
invece di "DECL_NAME". Il suo uso principale è la facilità d'uso lavorando a ritroso da
nomi alterati nel file di assieme.
sottile
Quando si scaricano rappresentazioni intermedie front-end, inibire il dumping dei membri di
un ambito o un corpo di una funzione semplicemente perché tale ambito è stato raggiunto. Soltanto
scarica tali elementi quando sono direttamente raggiungibili da qualche altro percorso.
Quando si scaricano alberi con belle stampe, questa opzione inibisce lo scarico dei corpi di
strutture di controllo.
Quando si esegue il dump di RTL, stampare l'RTL in formato ridotto (condensato) anziché quello predefinito
Rappresentazione simile a LISP.
crudo Stampa una rappresentazione grezza dell'albero. Per impostazione predefinita, gli alberi sono stampati in modo grazioso
una rappresentazione tipo C.
dettagli
Abilita dump più dettagliati (non rispettato da ogni opzione di dump). Includere anche
informazioni dai passaggi di ottimizzazione.
stats
Abilita il dump di varie statistiche sul pass (non onorato da ogni dump
opzione).
blocchi
Abilita la visualizzazione dei limiti di blocco di base (disabilitato nei dump non elaborati).
grafico
Per ciascuno degli altri file di dump indicati (-fdump-rtl-passare), discarica a
rappresentazione del grafico del flusso di controllo adatto per la visualizzazione con GraphViz per
file.passid.pass.dot. Ogni funzione nel file è graziosamente stampata come un sottografo,
in modo che GraphViz possa renderli tutti in un unico grafico.
Questa opzione attualmente funziona solo per i dump RTL e l'RTL viene sempre scaricato in
forma sottile.
vop
Abilita la visualizzazione degli operandi virtuali per ogni istruzione.
lino
Abilita la visualizzazione dei numeri di riga per le istruzioni.
uid Abilita la visualizzazione dell'ID univoco ("DECL_UID") per ogni variabile.
verboso
Abilita la visualizzazione del dump dell'albero per ogni istruzione.
eh Abilita la visualizzazione del numero di regione EH che contiene ogni istruzione.
scev
Abilita la visualizzazione dei dettagli dell'analisi dell'evoluzione scalare.
ottimizzati
Abilita la visualizzazione delle informazioni di ottimizzazione (disponibile solo in alcuni passaggi).
perse
Abilita la visualizzazione delle informazioni di ottimizzazione perse (disponibile solo in alcuni passaggi).
Nota
Abilita altre informazioni dettagliate sull'ottimizzazione (disponibile solo in alcuni passaggi).
=Nome del file
Invece di un file dump con nome automatico, esegui l'output nel nome file specificato. Il file
nomi stdout e stderr sono trattati in modo speciale e sono considerati già aperti
flussi standard. Per esempio,
gcc -O2 -ftree-vettorizzare -fdump-tree-vect-blocks=foo.dump
-fdump-tree-pre=file stderr.c
emette il dump del vectorizer in foo.discarica, mentre PRE dump viene emesso su stderr.
Se vengono dati due nomi di file dump in conflitto per lo stesso passaggio, allora quest'ultimo
opzione sovrascrive quella precedente.
contro tutti i Attiva tutte le opzioni, tranne crudo, sottile, verboso e lino.
optall
Attiva tutte le opzioni di ottimizzazione, ad es. ottimizzati, persee Nota.
Sono possibili i seguenti dump dell'albero:
i
Eseguire il dump prima di qualsiasi ottimizzazione basata su albero, a file.originale.
ottimizzati
Scarica dopo tutta l'ottimizzazione basata sugli alberi, a file.ottimizzato.
mentire
Scarica ogni funzione prima e dopo il passaggio di gimplificazione in un file. Il file
il nome è fatto aggiungendo .gimple al nome del file di origine.
CFG Scarica il grafico del flusso di controllo di ciascuna funzione in un file. Il nome del file è creato da
aggiungendo .cfg al nome del file di origine.
ch Scarica ogni funzione dopo aver copiato le intestazioni del ciclo. Il nome del file viene creato aggiungendo
. Ch al nome del file di origine.
ssa Scarica le informazioni relative alla SSA in un file. Il nome del file viene creato aggiungendo . Ssa
al nome del file di origine.
alias
Scarica le informazioni sull'aliasing per ogni funzione. Il nome del file viene creato aggiungendo
.alias al nome del file di origine.
ccp Scarica ogni funzione dopo CCP. Il nome del file viene creato aggiungendo .ccp ai
nome del file di origine.
storeccp
Scarica ogni funzione dopo STORE-CCP. Il nome del file viene creato aggiungendo .storeccp
al nome del file di origine.
pre Alberi di scarico dopo l'eliminazione parziale della ridondanza. Il nome del file è creato da
aggiungendo .pre al nome del file di origine.
fre Scaricare gli alberi dopo l'eliminazione completa della ridondanza. Il nome del file viene creato aggiungendo
.fre al nome del file di origine.
copyprop
Scarica gli alberi dopo la propagazione della copia. Il nome del file viene creato aggiungendo .copyprop
al nome del file di origine.
store_copyprop
Scarica gli alberi dopo la propagazione della copia del negozio. Il nome del file viene creato aggiungendo
.store_copyprop al nome del file di origine.
dc Scarica ogni funzione dopo l'eliminazione del codice morto. Il nome del file è creato da
aggiungendo .dce al nome del file di origine.
SRA Scarica ogni funzione dopo aver eseguito la sostituzione scalare degli aggregati. Il file
il nome è fatto aggiungendo .sra al nome del file di origine.
Lavello
Scarica ogni funzione dopo aver eseguito l'affondamento del codice. Il nome del file è creato da
aggiungendo .Lavello al nome del file di origine.
dom Scarica ogni funzione dopo aver applicato le ottimizzazioni dell'albero del dominatore. Il nome del file è
fatto aggiungendo .dom al nome del file di origine.
dire Scarica ogni funzione dopo aver applicato l'eliminazione dei depositi morti. Il nome del file è fatto
aggiungendo .dse al nome del file di origine.
phiopt
Scarica ogni funzione dopo aver ottimizzato i nodi PHI in codice straightline. Il file
il nome è fatto aggiungendo .phiopt al nome del file di origine.
elica di prua
Scarica ogni funzione dopo aver propagato in avanti le variabili monouso. Il nome del file
è fatto aggiungendo .elica di prua al nome del file di origine.
rinomina
Scarica ogni funzione dopo aver applicato l'ottimizzazione della ridenominazione della copia. Il nome del file è
fatto aggiungendo .copyrename al nome del file di origine.
NRV Scarica ogni funzione dopo aver applicato l'ottimizzazione del valore restituito denominato su generic
alberi. Il nome del file viene creato aggiungendo .nv al nome del file di origine.
vect
Scarica ogni funzione dopo aver applicato la vettorizzazione dei loop. Il nome del file è fatto
aggiungendo .vet al nome del file di origine.
slp Scarica ogni funzione dopo aver applicato la vettorizzazione dei blocchi di base. Il nome del file è
fatto aggiungendo .slp al nome del file di origine.
VRP Scarica ogni funzione dopo la propagazione dell'intervallo di valori (VRP). Il nome del file è creato da
aggiungendo .vrp al nome del file di origine.
contro tutti i Abilita tutti i dump dell'albero disponibili con i flag forniti in questa opzione.
-fopt-info
-fopt-info-Opzioni
-fopt-info-Opzioni=Nome del file
Controlla i dump di ottimizzazione da vari passaggi di ottimizzazione. Se la -Opzioni la forma è
Usato, Opzioni è un elenco di - parole chiave opzione separate per selezionare i dettagli del dump e
ottimizzazioni.
Le Opzioni possono essere divisi in due gruppi: opzioni che descrivono la verbosità del
dump e opzioni che descrivono quali ottimizzazioni dovrebbero essere incluse. Le opzioni da
entrambi i gruppi possono essere liberamente miscelati in quanto non sovrapposti. Tuttavia, in caso di
eventuali conflitti, le opzioni successive sovrascrivono le opzioni precedenti sulla riga di comando.
Le seguenti opzioni controllano la verbosità del dump:
ottimizzati
Stampa le informazioni quando un'ottimizzazione viene applicata correttamente. Dipende da un passaggio
per decidere quali informazioni sono rilevanti. Ad esempio, il vectorizer passa la stampa
la posizione di origine dei loop che sono stati vettorizzati con successo.
perse
Stampa informazioni sulle ottimizzazioni mancate. Controllo individuale dei passaggi che
informazioni da includere nell'output.
Nota
Stampa informazioni dettagliate sulle ottimizzazioni, come determinate trasformazioni,
messaggi più dettagliati sulle decisioni ecc.
contro tutti i Stampa informazioni dettagliate sull'ottimizzazione. Ciò comprende ottimizzati, persee
Nota.
È possibile utilizzare una o più delle seguenti parole chiave di opzione per descrivere un gruppo di
ottimizzazioni:
ipa Abilita i dump da tutte le ottimizzazioni interprocedurali.
loop
Abilita i dump da tutte le ottimizzazioni del ciclo.
inline
Abilita dump da tutte le ottimizzazioni inline.
vec Abilita i dump da tutte le ottimizzazioni di vettorizzazione.
optall
Abilita i dump da tutte le ottimizzazioni. Questo è un superset dei gruppi di ottimizzazione
elencati sopra.
If Opzioni è omesso, il valore predefinito è ottimizzato-optall, che significa scaricare tutte le informazioni
sulle ottimizzazioni di successo da tutti i passaggi.
Se l' Nome del file è fornito, quindi i dump di tutte le ottimizzazioni applicabili sono
concatenato in Nome del file. Altrimenti il dump viene emesso su stderr. Anche se
multiplo -fopt-info le opzioni sono accettate, solo una di esse può includere a Nome del file. Se
vengono forniti altri nomi di file, quindi tutti tranne la prima di tali opzioni vengono ignorati.
Si noti che l'uscita Nome del file viene sovrascritto in caso di più unità di traduzione. Se
si desidera un output combinato da più unità di traduzione, stderr dovrebbe essere usato
anziché.
Nell'esempio seguente, le informazioni di ottimizzazione vengono emesse in stderr:
gcc -O3 -fopt-info
Questo esempio:
gcc -O3 -fopt-info-missed=missed.all
emette il rapporto di ottimizzazione mancata da tutti i passaggi in miss.all, e questo:
gcc -O2 -ftree-vettorizzare -fopt-info-vec-missed
stampa informazioni sulle opportunità di ottimizzazione mancate dai pass di vettorizzazione
on stderr. Nota che -fopt-info-vec-mancato è equivalente -fopt-info-mancato-vec.
Come altro esempio,
gcc -O3 -fopt-info-inline-ottimizzato-mancato=inline.txt
emette informazioni sulle ottimizzazioni mancate e sulle posizioni ottimizzate da tutti
l'inlining passa in inline.txt.
Infine, considera:
gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt
Qui i due nomi dei file di output vec.miss e loop.opz sono in conflitto poiché solo uno
file di output è consentito. In questo caso ha effetto solo la prima opzione e la
le opzioni successive vengono ignorate. Così solo vec.miss viene prodotto che contiene discariche
dal vectorizer sulle opportunità mancate.
-frandom-seme=numero
Questa opzione fornisce un seme che GCC usa al posto dei numeri casuali nella generazione
alcuni nomi di simboli che devono essere diversi in ogni file compilato. È altresì
utilizzato per inserire timbri univoci nei file di dati di copertura e nei file oggetto che producono
loro. Puoi usare il -frandom-seme possibilità di produrre oggetti riproducibili identici
File.
Le numero dovrebbe essere diverso per ogni file che compili.
-fsched-verbose=n
Sui target che utilizzano la pianificazione delle istruzioni, questa opzione controlla la quantità di
l'output di debug viene stampato dallo scheduler. Queste informazioni vengono scritte nell'errore standard,
salvo che -fdump-rtl-sched1 or -fdump-rtl-sched2 è specificato, nel qual caso viene emesso
al solito file di elenco dei dump, .sched1 or .sched2 rispettivamente. Tuttavia per n
maggiore di nove, l'output viene sempre stampato con l'errore standard.
Per n maggiore di zero, -fsched-verboso emette le stesse informazioni di
-fdump-rtl-sched1 e -fdump-rtl-sched2. For n maggiore di uno, emette anche basic
probabilità di blocco, informazioni dettagliate sull'elenco pronto e informazioni su unità/insn. Per n
maggiore di due, include RTL al punto di interruzione, flusso di controllo e informazioni sulle regioni. e
per n più di quattro, -fsched-verboso include anche informazioni sulla dipendenza.
-salva-temps
-save-temps=cwd
Memorizza permanentemente i soliti file intermedi "temporanei"; mettili nella corrente
directory e denominarli in base al file di origine. Quindi, compilando foo.c con -c
-salva-temps produce file foo.i e foo.s, così come foo.o. Questo crea un file
preelaborato foo.i file di output anche se il compilatore ora normalmente usa an
preprocessore integrato.
Se utilizzato in combinazione con il -x opzione della riga di comando, -salva-temps è ragionevole
abbastanza per evitare di sovrascrivere un file sorgente di input con la stessa estensione di un
file intermedio. Il file intermedio corrispondente può essere ottenuto rinominandolo
il file sorgente prima dell'uso -salva-temps.
Se invochi GCC in parallelo, compilando diversi file sorgente che condividono a
nome di base comune in diverse sottodirectory o lo stesso file sorgente compilato per
più destinazioni di output, è probabile che i diversi compilatori paralleli lo facciano
interferiscono tra loro e sovrascrivono i file temporanei. Ad esempio:
gcc -save-temps -o outdir1/foo.o indir1/foo.c&
gcc -save-temps -o outdir2/foo.o indir2/foo.c&
può comportare foo.i e foo.o essere scritti contemporaneamente da entrambi i compilatori.
-salva-temps=obj
Memorizza permanentemente i soliti file intermedi "temporanei". Se la -o viene utilizzata l'opzione,
i file temporanei sono basati sul file oggetto. Se la -o l'opzione non è utilizzata, il
-salva-temps=obj l'interruttore si comporta come -salva-temps.
Per esempio:
gcc -save-temps=obj -c foo.c
gcc -save-temps=obj -c bar.c -o dir/xbar.o
gcc -save-temps=obj foobar.c -o dir2/yfoobar
crea foo.i, foo.s, dir/xbar.i, dir/xbar.s, dir2/yfoobar.i, dir2/yfoobar.se
dir2/yfoobar.o.
-tempo[=filetto]
Riporta il tempo di CPU impiegato da ogni sottoprocesso nella sequenza di compilazione. Per C
file sorgente, questo è il compilatore corretto e l'assemblatore (più il linker se il collegamento è
fatto).
Senza la specifica di un file di output, l'output ha questo aspetto:
# cc1 0.12 0.01
# come 0.00 0.01
Il primo numero su ogni riga è il "tempo utente", ovvero il tempo impiegato per eseguire il
programma stesso. Il secondo numero è "tempo di sistema", il tempo impiegato per l'esecuzione dell'operazione
routine di sistema per conto del programma. Entrambi i numeri sono in secondi.
Con la specifica di un file di output, l'output viene aggiunto al file denominato,
e sembra così:
0.12 0.01 cc1
0.00 0.01 as
L'"ora dell'utente" e l'"ora del sistema" vengono spostate prima del nome del programma e il
vengono visualizzate le opzioni passate al programma, in modo che si possa in seguito dire quale file era
in fase di compilazione e con quali opzioni.
-fvar-tracciamento
Esegui il passaggio di monitoraggio della variabile. Calcola dove sono memorizzate le variabili in ogni posizione
nel codice. Vengono quindi generate migliori informazioni di debug (se le informazioni di debug)
formato supporta queste informazioni).
È abilitato di default quando si compila con l'ottimizzazione (-Voi, -O, -O2, ...),
informazioni di debug (-g) e il formato delle informazioni di debug lo supporta.
-fvar-tracciamento-assegnazioni
Annotare le assegnazioni alle variabili utente all'inizio della compilazione e tentare di portarle
le annotazioni su tutta la compilation fino alla fine, nel tentativo
per migliorare le informazioni di debug durante l'ottimizzazione. Uso di -gnano-4 è consigliato insieme
con esso.
Può essere abilitato anche se il var-tracking è disabilitato, nel qual caso le annotazioni sono
creato e mantenuto, ma scartato alla fine. Per impostazione predefinita, questo flag è abilitato
insieme -fvar-tracciamento, tranne quando è abilitata la pianificazione selettiva.
-fvar-tracciamento-assegnazioni-toggle
Toggle -fvar-tracciamento-assegnazioni, allo stesso modo -gattiva/disattiva alterna -g.
-stampa-nome-file=biblioteca
Stampa il nome assoluto completo del file della libreria biblioteca che verrebbe usato quando
collegamento --- e non fare nient'altro. Con questa opzione, GCC non compila né collega
nulla; stampa solo il nome del file.
-stampa-multi-directory
Stampa il nome della directory corrispondente alla multilib selezionata da qualsiasi altro switch
presente nella riga di comando. Questa directory dovrebbe esistere in GCC_EXEC_PREFIX.
-stampa-multi-lib
Stampa la mappatura dai nomi delle directory multilib alle opzioni del compilatore che li abilitano.
Il nome della directory è separato dagli interruttori da ;, e ogni interruttore inizia con un
@ invece del -, senza spazi tra più interruttori. Questo dovrebbe
facilità di elaborazione della shell.
-stampa-directory-multi-os
Stampa il percorso delle librerie del sistema operativo per la multilib selezionata, relativa ad alcune lib
sottodirectory. Se le librerie del sistema operativo sono presenti nel lib sottodirectory e nessuna multilibs
sono usati, questo di solito è solo ., se le librerie del sistema operativo sono presenti in libsuffisso fratello
directory che vengono stampate, ad es ../lib64, ../ lib or ../lib32, o se le librerie del sistema operativo sono
presente in lib/sottodirectory sottodirectory che stampa ad es amd64, sparcv9 or ev6.
-stampa-multiarcata
Stampa il percorso delle librerie del sistema operativo per il multiarch selezionato, relativo ad alcuni lib
sottodirectory.
-print-nome-programma=Programma
Come -stampa-nome-file, ma cerca un programma come cpp.
-print-libgcc-nome-file
Uguale a -nome-file-stampa=libgcc.a.
Questo è utile quando usi -nostdlib or -nodefaultlibs ma vuoi collegarti con
libgcc.a. Tu puoi fare:
gcc -nostdlib ... `gcc -print-libgcc-nome-file`
-stampa-dir-ricerca
Stampa il nome della directory di installazione configurata e un elenco di programmi e
directory delle biblioteche gcc ricerche --- e non fare nient'altro.
Questo è utile quando gcc stampa il messaggio di errore installazione problema, non può exec
cpp0: Non tale filetto or elenco. Per risolvere questo è necessario mettere CPP0 e il
altri componenti del compilatore dove gcc si aspetta di trovarli, oppure puoi impostare il
variabile d'ambiente GCC_EXEC_PREFIX nella directory in cui li hai installati. non farlo
dimentica il finale /.
-print-sysroot
Stampa la directory sysroot di destinazione utilizzata durante la compilazione. Questo è il
sysroot di destinazione specificato al momento della configurazione o utilizzando il --sysroot opzione,
possibilmente con un suffisso extra che dipende dalle opzioni di compilazione. Se nessun obiettivo
sysroot è specificato, l'opzione non stampa nulla.
-print-sysroot-headers-suffisso
Stampa il suffisso aggiunto alla sysroot di destinazione durante la ricerca di intestazioni, o dai un
errore se il compilatore non è configurato con un tale suffisso --- e non fa nulla
altro.
-macchina del dump
Stampa la macchina di destinazione del compilatore (ad esempio, i686-pc-linux-gnu)---e non farlo
qualunque altra cosa.
-versione dump
Stampa la versione del compilatore (ad esempio 3.0)---e non fare nient'altro.
-spec
Stampa le specifiche integrate del compilatore --- e non fare nient'altro. (Questo è usato quando
GCC stesso è in costruzione.)
-fno-elimina-tipi-di-debug-inutilizzati
Normalmente, quando si produce l'output DWARF 2, GCC evita di produrre l'output del simbolo di debug per
tipi che non vengono utilizzati da nessuna parte nel file sorgente in fase di compilazione. A volte è utile
per fare in modo che GCC emetta informazioni di debug per tutti i tipi dichiarati in un'unità di compilazione,
indipendentemente dal fatto che siano effettivamente utilizzati o meno in quell'unità di compilazione, per
esempio se, nel debugger, si desidera eseguire il cast di un valore su un tipo che non è effettivamente
usato nel tuo programma (ma è dichiarato). Più spesso, tuttavia, ciò si traduce in a
notevole quantità di spazio sprecato.
Opzioni Che Controllo OTTIMIZZAZIONE
Queste opzioni controllano vari tipi di ottimizzazioni.
Senza alcuna opzione di ottimizzazione, l'obiettivo del compilatore è ridurre il costo di compilazione
e per fare in modo che il debug produca i risultati attesi. Le dichiarazioni sono indipendenti: se tu
arrestare il programma con un punto di interruzione tra le istruzioni, è quindi possibile assegnare un nuovo valore a
qualsiasi variabile o cambia il contatore del programma in qualsiasi altra istruzione nella funzione e ottieni
esattamente i risultati che ti aspetti dal codice sorgente.
L'attivazione dei flag di ottimizzazione fa sì che il compilatore tenti di migliorare le prestazioni e/o
dimensione del codice a scapito del tempo di compilazione ed eventualmente della possibilità di eseguire il debug del
.
Il compilatore esegue l'ottimizzazione in base alla conoscenza che ha del programma.
La compilazione di più file contemporaneamente in una singola modalità file di output consente al compilatore di utilizzare
informazioni ottenute da tutti i file durante la compilazione di ciascuno di essi.
Non tutte le ottimizzazioni sono controllate direttamente da un flag. Solo ottimizzazioni che hanno a
flag sono elencati in questa sezione.
La maggior parte delle ottimizzazioni sono abilitate solo se un -O livello è impostato sulla riga di comando. Altrimenti
sono disattivati, anche se vengono specificati singoli flag di ottimizzazione.
A seconda del target e di come è stato configurato GCC, un insieme leggermente diverso di
le ottimizzazioni possono essere abilitate ad ogni -O livello rispetto a quelli qui elencati. Puoi invocare GCC
con -Q --help=ottimizzatori per scoprire l'esatto insieme di ottimizzazioni abilitate su
ogni livello.
-O
-O1 Ottimizzare. L'ottimizzazione della compilazione richiede un po' più di tempo e molta più memoria per
una grande funzione.
Con -O, il compilatore cerca di ridurre la dimensione del codice e il tempo di esecuzione, senza eseguire
tutte le ottimizzazioni che richiedono molto tempo per la compilazione.
-O attiva i seguenti flag di ottimizzazione:
-fauto-inc-dec -framo-count-reg -fcombine-stack-regolazioni -fcompare-elimina
-fcprop-registri -fdce -fdefer-pop -framo-ritardato -fdse -in avanti-propagare
-fguess-ramo-probabilità -fif-conversione2 -fif-conversione
-funzioni-finline-chiamate-una volta -fipa-puro-const -fipa-profilo -fipa-riferimento
-fmerge-costanti -fmove-loop-invarianti -finvolucro termoretraibile -fsplit-wide-tipi
-ftree-bit-ccp -ftree-ccp -fssa-phiopt -ftree-ch -ftree-copia-prop -ftree-rinominacopia
-ftree-dce -ftree-dominatore-opt -ftree-dse -ftree-forwprop -ftree-fre -ftree-phiprop
-ftree-lavello -ftree-slsr -ftree-sra -ftree-pta -ftree-ter -divertimento alla volta
-O si accende anche -puntatore-frame-fomit su macchine dove ciò non interferisce
con debug.
-O2 Ottimizza ancora di più. GCC esegue quasi tutte le ottimizzazioni supportate che non lo fanno
comportano un compromesso spazio-velocità. Paragonato a -O, questa opzione aumenta entrambi
tempo di compilazione e le prestazioni del codice generato.
-O2 attiva tutti i flag di ottimizzazione specificati da -O. Si accende anche quanto segue
flag di ottimizzazione: -fthread-salta -funzioni-false -falsi-salti -falign-loop
-etichette-false -fcaller-salva -salto incrociato -fcse-segue-salti -fcse-salta-blocchi
-fdelete-controlli-puntatore-null -fdevirtualizza -fdevirtualize-speculativamente
-ottimizzazioni-economiche -fgcse -fgcse-lm -fhoist-carichi-adiacenti
-finline-piccole-funzioni -findirect-inline -fipa-cp -fipa-cp-allineamento -fipa-sra
-fipa-icf -fisolate-erroneous-path-dereference -fla-remat -A-CALLS FOPTIMIZZAZIONE
-foptimize-strlen -fpartial-inline -fspioncino2 -blocchi-freddo
-blocchi-e-partizioni di freorder -funzioni-freorder -frerun-cse-dopo-loop
-fsched-interblocco -fsched-spec -fschedule-insns -fschedule-insns2 -fstrict-alias
-fstrict-overflow -ftree-built-in-call-dce -ftree-switch-conversione -fusione a coda di albero
-ftree-pre -ftree-vrp -fipa-ra
Si prega di notare l'avviso sotto -fgcse sull'invocazione -O2 su programmi che utilizzano computer
andare a S.
NOTA: in Ubuntu 8.10 e versioni successive, -D_FORTIFY_SOURCE=2 è impostato di default, ed è
attivato quando -O è impostato su 2 o più. Ciò consente ulteriore tempo di compilazione e
il runtime controlla diverse funzioni libc. Per disabilitare, specificare sia
-U_FORTIFY_SOURCE or -D_FORTIFY_SOURCE=0.
-O3 Ottimizza ancora di più. -O3 attiva tutte le ottimizzazioni specificate da -O2 e si accende anche
, il -funzioni-finline, -funswitch-loop, -fpredictive-comune, -fgcse-dopo-reload,
-ftree-loop-vettorizza, -ftree-loop-distribuire-pattern, -ftree-slp-vettorizza,
-fvect-cost-modello, -ftree-parziale-pre e -fipa-cp-clone opzioni.
-O0 Riduci i tempi di compilazione e fai in modo che il debug produca i risultati previsti. Questo è il
predefinito.
-Voi Ottimizza per le dimensioni. -Voi abilita tutti -O2 ottimizzazioni che in genere non aumentano
dimensione del codice. Esegue inoltre ulteriori ottimizzazioni progettate per ridurre le dimensioni del codice.
-Voi disabilita i seguenti flag di ottimizzazione: -funzioni-false -falsi-salti
-falign-loop -etichette-false -blocchi-freddo -blocchi-e-partizioni di freorder
-fprefetch-loop-array
- Veloce
Ignora il rispetto degli standard rigorosi. - Veloce abilita tutti -O3 ottimizzazioni. È anche
consente ottimizzazioni non valide per tutti i programmi conformi agli standard. Esso
si accende -fast-matematica e il Fortran-specifico -fno-protect-parents e -fstack-array.
-Ogg Ottimizza l'esperienza di debug. -Ogg consente ottimizzazioni che non interferiscono con
debug. Dovrebbe essere il livello di ottimizzazione prescelto per l'editing standard.
ciclo di compilazione-debug, offrendo un ragionevole livello di ottimizzazione pur mantenendo
compilazione veloce e una buona esperienza di debug.
Se usi più -O opzioni, con o senza numeri di livello, l'ultima di queste opzioni è
quello che è efficace.
Opzioni del modulo -fbandiera specificare flag indipendenti dalla macchina. La maggior parte delle bandiere ha entrambi
forme positive e negative; la forma negativa di -foo is -fno-pippo. Nella tabella sottostante,
è elencato solo uno dei moduli --- quello che si usa di solito. Puoi capire l'altro
forma rimuovendo no- o aggiungendolo.
Le seguenti opzioni controllano ottimizzazioni specifiche. Sono attivati da -O
opzioni o sono correlati a quelli che lo sono. Puoi usare le seguenti bandiere nel raro
casi in cui si desidera una "messa a punto" delle ottimizzazioni da eseguire.
-fno-defer-pop
Inserisci sempre gli argomenti per ogni chiamata di funzione non appena quella funzione ritorna. Per
macchine che devono visualizzare argomenti dopo una chiamata di funzione, il compilatore normalmente consente
gli argomenti si accumulano nello stack per diverse chiamate di funzione e li fa apparire tutti a
una volta.
Disabilitato ai livelli -O, -O2, -O3, -Voi.
-in avanti-propagare
Eseguire un passaggio di propagazione in avanti su RTL. Il pass cerca di combinare due istruzioni
e verifica se il risultato può essere semplificato. Se lo svolgimento del ciclo è attivo, due passaggi
vengono eseguiti e il secondo è programmato dopo lo srotolamento del ciclo.
Questa opzione è abilitata per impostazione predefinita ai livelli di ottimizzazione -O, -O2, -O3, -Voi.
-ffp-contratto=style
-ffp-contratto=off disabilita la contrazione delle espressioni in virgola mobile. -ffp-contratto=veloce
consente la contrazione dell'espressione in virgola mobile come la formazione di moltiplicazione aggiunta fusa
operazioni se la destinazione dispone del supporto nativo per esse. -ffp-contratto=on al
contrazione dell'espressione in virgola mobile se consentita dallo standard del linguaggio. Questo è
attualmente non implementato e trattato pari a -ffp-contratto=off.
L'impostazione predefinita è -ffp-contratto=veloce.
-puntatore-frame-fomit
Non tenere il puntatore del frame in un registro per le funzioni che non ne hanno bisogno. Questo
evita le istruzioni per salvare, impostare e ripristinare i puntatori dei frame; fa anche un
registro extra disponibile in molte funzioni. It anche fa debug impossibile on
alcuni e molti altri.
Su alcune macchine, come il VAX, questo flag non ha effetto, perché lo standard
la sequenza di chiamata gestisce automaticamente il puntatore al frame e nulla viene salvato da
facendo finta che non esista. La macro di descrizione della macchina "FRAME_POINTER_REQUIRED"
controlla se una macchina di destinazione supporta questo flag.
L'impostazione predefinita (quando non si esegue l'ottimizzazione per le dimensioni) per GNU/Linux x32 a 86 bit e 32 bit
Gli obiettivi Darwin x86 sono -puntatore-frame-fomit. Puoi configurare GCC con il
--enable-frame-pointer configure opzione per modificare l'impostazione predefinita.
Abilitato ai livelli -O, -O2, -O3, -Voi.
-A-CALLS FOPTIMIZZAZIONE
Ottimizza le chiamate ricorsive di pari livello e di coda.
Abilitato ai livelli -O2, -O3, -Voi.
-foptimize-strlen
Ottimizza varie funzioni standard per le stringhe C (ad es. "strlen", "strchr" o "strcpy") e
le loro controparti "_FORTIFY_SOURCE" in alternative più veloci.
Abilitato ai livelli -O2, -O3.
-fno-in linea
Non espandere alcuna funzione in linea a parte quelle contrassegnate con "always_inline"
attributo. Questa è l'impostazione predefinita quando non si esegue l'ottimizzazione.
Le singole funzioni possono essere esentate dall'inline contrassegnandole con la "noinline"
attributo.
-finline-piccole-funzioni
Integra le funzioni nei chiamanti quando il loro corpo è più piccolo del previsto
codice di chiamata della funzione (quindi la dimensione complessiva del programma si riduce). Il compilatore
decide euristicamente quali funzioni sono abbastanza semplici da valere la pena di essere integrate in
Da questa parte. Questo inline si applica a tutte le funzioni, anche a quelle non dichiarate inline.
Abilitato a livello -O2.
-findirect-inline
Inline anche chiamate indirette che si scoprono conosciute in fase di compilazione grazie a
inline precedente. Questa opzione ha effetto solo quando l'inline stesso è attivato
dal -funzioni-finline or -finline-piccole-funzioni opzioni.
Abilitato a livello -O2.
-funzioni-finline
Considera tutte le funzioni per l'inline, anche se non sono dichiarate inline. Il
Il compilatore decide euristicamente quali funzioni vale la pena integrare in questo modo.
Se tutte le chiamate a una data funzione sono integrate e la funzione è dichiarata
"static", quindi la funzione non viene normalmente emessa come codice assembler a sé stante.
Abilitato a livello -O3.
-funzioni-finline-chiamate-una volta
Considera tutte le funzioni "statiche" chiamate una volta per essere incorporate nel chiamante anche se
non sono contrassegnati come "in linea". Se una chiamata a una data funzione è integrata, allora il
la funzione non viene emessa come codice assembler a sé stante.
Abilitato ai livelli -O1, -O2, -O3 e -Voi.
-fearly-inline
Funzioni in linea contrassegnate da "always_inline" e funzioni il cui corpo sembra più piccolo di
l'overhead della chiamata di funzione prima di farlo -fprofile-genera strumentazione e
vero passaggio in linea. Ciò rende la profilazione significativamente più economica e di solito
inline più velocemente su programmi con grandi catene di funzioni wrapper annidate.
Abilitato per impostazione predefinita.
-fipa-sra
Eseguire la sostituzione scalare interprocedurale degli aggregati, la rimozione dei parametri non utilizzati
e sostituzione dei parametri passati per riferimento con parametri passati per valore.
Abilitato ai livelli -O2, -O3 e -Voi.
-fine-limit=n
Per impostazione predefinita, GCC limita la dimensione delle funzioni che possono essere incorporate. Questo flag permette
controllo grossolano di questo limite. n è la dimensione delle funzioni che possono essere inline in
numero di pseudo istruzioni.
L'inlining è effettivamente controllato da una serie di parametri, che possono essere specificati
individualmente usando --parami Nome=APPREZZIAMO. -fine-limit=n opzione imposta alcuni di
questi parametri come segue:
max-inline-insns-singolo
è impostato su n/ 2.
Max-Inline-Insns-Auto
è impostato su n/ 2.
Vedi sotto per una documentazione dei singoli parametri che controllano l'inlining e
per i valori di default di questi parametri.
Nota: potrebbe non esserci alcun valore per -limite-finline che si traduce in un comportamento predefinito.
Nota: la pseudo istruzione rappresenta, in questo particolare contesto, un abstract
misurazione della dimensione della funzione. Non rappresenta in alcun modo un conteggio di assemblaggio
istruzioni e come tale il suo significato esatto potrebbe cambiare da una versione a un'altra
un'altra.
-fno-keep-inline-dllexport
Questa è una versione più fine di -fkeep-inline-funzioni, che si applica solo a
funzioni che vengono dichiarate utilizzando l'attributo "dllexport" o declspec
-fkeep-inline-funzioni
In C, emetti funzioni "statiche" che sono dichiarate "in linea" nel file oggetto, anche se
la funzione è stata incorporata in tutti i suoi chiamanti. Questo interruttore non ha effetto
funzioni utilizzando l'estensione "extern inline" in GNU C90. In C++, emetti qualsiasi cosa
funzioni in linea nel file oggetto.
-fkeep-static-const
Emetti variabili dichiarate "static const" quando l'ottimizzazione non è attivata, anche se il
le variabili non sono referenziate.
GCC abilita questa opzione per impostazione predefinita. Se vuoi forzare il compilatore a controllare se a
si fa riferimento alla variabile, indipendentemente dal fatto che l'ottimizzazione sia attivata o meno, utilizzare
, il -fno-keep-static-const opzione.
-fmerge-costanti
Tentativo di unire costanti identiche (costanti stringa e costanti in virgola mobile)
tra le unità di compilazione.
Questa opzione è l'impostazione predefinita per la compilazione ottimizzata se l'assemblatore e il linker
supportalo. Utilizzo -fno-unisci-costanti per inibire questo comportamento.
Abilitato ai livelli -O, -O2, -O3, -Voi.
-funisci-tutte-costanti
Tentativo di unire costanti identiche e variabili identiche.
Questa opzione implica -fmerge-costanti. Inoltre -fmerge-costanti questo
considera ad esempio anche array inizializzati costanti o variabili costanti inizializzate con
tipi integrali o a virgola mobile. Linguaggi come C o C++ richiedono ogni variabile,
includendo più istanze della stessa variabile in chiamate ricorsive, per avere distinte
posizioni, quindi l'utilizzo di questa opzione comporta un comportamento non conforme.
-fmodulo-sched
Eseguire la pianificazione del modulo swing immediatamente prima del primo passaggio di pianificazione. Questo
pass guarda i loop più interni e riordina le loro istruzioni sovrapponendo diversi
iterazioni.
-fmodulo-sched-to-regys
Esegui una pianificazione modulo più aggressiva basata su SMS con movimenti di registro consentiti. Di
impostando questo flag alcuni bordi anti-dipendenza vengono eliminati, il che attiva il
generazione di reg-mosse basate sull'analisi del range di vita. Questa opzione è efficace
solo con -fmodulo-sched abilitato.
-fno-ramo-conteggio-reg
Non utilizzare le istruzioni "decrementa e dirama" su un registro di conteggio, ma invece
generare una sequenza di istruzioni che decrementano un registro, confrontarlo con
zero, quindi ramificare in base al risultato. Questa opzione è significativa solo su
architetture che supportano tali istruzioni, che includono x86, PowerPC, IA-64 e
S/390.
Abilitato per impostazione predefinita su -O1 e più in alto.
L'impostazione predefinita è -framo-count-reg.
-fno-funzione-cse
Non inserire indirizzi di funzione nei registri; rendere ogni istruzione che chiama a
la funzione costante contiene esplicitamente l'indirizzo della funzione.
Questa opzione si traduce in un codice meno efficiente, ma in alcuni strani hack che alterano il
l'output dell'assemblatore può essere confuso dalle ottimizzazioni eseguite quando questa opzioneè
non usato.
L'impostazione predefinita è -ffunzione-cse
-fno-zero-inizializzato-in-bss
Se il target supporta una sezione BSS, GCC per impostazione predefinita mette le variabili che sono
inizializzato a zero in BSS. Questo può risparmiare spazio nel codice risultante.
Questa opzione disattiva questo comportamento perché alcuni programmi si basano esplicitamente su variabili
andando alla sezione dei dati --- ad esempio, in modo che l'eseguibile risultante possa trovare il
all'inizio di quella sezione e/o fare ipotesi basate su di essa.
L'impostazione predefinita è -fzero-inizializzato-in-bss.
-fthread-salta
Esegui ottimizzazioni che controllano se un salto si dirama in una posizione in cui un altro
si trova il confronto sussunto dal primo. In tal caso, il primo ramo viene reindirizzato a
o la destinazione del secondo ramo o un punto immediatamente successivo ad esso,
a seconda che si sappia che la condizione è vera o falsa.
Abilitato ai livelli -O2, -O3, -Voi.
-fsplit-wide-tipi
Quando si utilizza un tipo che occupa più registri, come "long long" su un 32 bit
sistema, suddividere i registri e assegnarli in modo indipendente. Questo normalmente
genera codice migliore per quei tipi, ma può rendere più difficile il debug.
Abilitato ai livelli -O, -O2, -O3, -Voi.
-fcse-segue-salti
Nell'eliminazione della sottoespressione comune (CSE), eseguire la scansione delle istruzioni di salto quando
l'obiettivo del salto non è raggiunto da nessun altro percorso. Ad esempio, quando CSE incontra
un'istruzione "if" con una clausola "else", CSE segue il salto quando la condizione
testato è falso.
Abilitato ai livelli -O2, -O3, -Voi.
-fcse-salta-blocchi
Questo è simile a -fcse-segue-salti, ma fa sì che CSE segua i salti che
saltare condizionalmente i blocchi. Quando CSE incontra una semplice istruzione "if" con no
altra clausola, -fcse-salta-blocchi fa sì che CSE segua il salto intorno al corpo del
"Se".
Abilitato ai livelli -O2, -O3, -Voi.
-frerun-cse-dopo-loop
Riesegui l'eliminazione della sottoespressione comune dopo aver eseguito le ottimizzazioni del ciclo.
Abilitato ai livelli -O2, -O3, -Voi.
-fgcse
Eseguire un passaggio di eliminazione della sottoespressione comune globale. Questo passaggio funziona anche
costante globale e propagazione della copia.
Nota: Quando compili un programma usando goto calcolati, un'estensione GCC, potresti ottenere
migliori prestazioni in fase di esecuzione se si disabilita l'eliminazione della sottoespressione comune globale
passa aggiungendo -fno-gcse alla riga di comando.
Abilitato ai livelli -O2, -O3, -Voi.
-fgcse-lm
Quando -fgcse-lm è abilitato, l'eliminazione della sottoespressione comune globale tenta di spostarsi
carichi che vengono uccisi solo dai negozi in se stessi. Ciò consente un ciclo contenente a
sequenza di caricamento/memorizzazione da modificare in un caricamento all'esterno del ciclo e una copia/memorizzazione all'interno
il cappio.
Abilitato per impostazione predefinita quando -fgcse è abilitato.
-fgcse-sm
Quando -fgcse-sm è abilitato, viene eseguito un passaggio di movimento del negozio dopo il comune globale
eliminazione della sottoespressione. Questo passaggio tenta di spostare i negozi fuori dai cicli. Quando usato
insieme a -fgcse-lm, i loop contenenti una sequenza di caricamento/memorizzazione possono essere modificati
a un carico prima del ciclo e a un negozio dopo il ciclo.
Non abilitato a nessun livello di ottimizzazione.
-fgcse-las
Quando -fgcse-las è abilitato, il passaggio di eliminazione della sottoespressione comune globale
elimina i carichi ridondanti che vengono dopo i negozi nella stessa posizione di memoria (entrambi
licenziamenti parziali e totali).
Non abilitato a nessun livello di ottimizzazione.
-fgcse-dopo-reload
Quando -fgcse-dopo-reload è abilitato, viene eseguito un passaggio di eliminazione del carico ridondante
dopo la ricarica. Lo scopo di questo passaggio è quello di ripulire le fuoriuscite ridondanti.
-ottimizzazioni-loop faggressive
Questa opzione dice all'ottimizzatore del ciclo di usare i vincoli del linguaggio per derivare i limiti per
il numero di iterazioni di un ciclo. Ciò presuppone che il codice del ciclo non venga richiamato
comportamento indefinito causando, ad esempio, overflow di interi con segno o out-of-bound
accessi alla matrice. I limiti per il numero di iterazioni di un ciclo sono usati per guidare
srotolamento e peeling del ciclo e ottimizzazioni del test di uscita dal ciclo. Questa opzione è abilitata
per impostazione predefinita.
-ottimizzazioni funsafe-loop
Questa opzione dice all'ottimizzatore di loop di presumere che gli indici di loop non trabocchino, e
che i loop con una condizione di uscita non banale non sono infiniti. Ciò consente una più ampia
gamma di ottimizzazioni del ciclo anche se l'ottimizzatore del ciclo stesso non può dimostrare che queste
le ipotesi sono valide. Se usi -Ottimizzazioni del ciclo Wunsafe, il compilatore ti avverte
se trova questo tipo di loop.
-salto incrociato
Esegui la trasformazione del salto incrociato. Questa trasformazione unifica codice equivalente e
salva la dimensione del codice. Il codice risultante può o non può funzionare meglio che senza cross-
salto.
Abilitato ai livelli -O2, -O3, -Voi.
-fauto-inc-dec
Combina incrementi o decrementi di indirizzi con accessi alla memoria. Questo passaggio è
sempre saltato su architetture che non hanno istruzioni per supportare questo.
Abilitato per impostazione predefinita su -O e superiori su architetture che supportano questo.
-fdce
Esegui l'eliminazione del codice morto (DCE) su RTL. Abilitato per impostazione predefinita su -O e più in alto.
-fdse
Esegui l'eliminazione del punto morto (DSE) su RTL. Abilitato per impostazione predefinita su -O e più in alto.
-fif-conversione
Tentativo di trasformare i salti condizionali in equivalenti senza rami. Ciò comprende
uso di mosse condizionali, min, max, set flag e istruzioni addominali e alcuni trucchi
fattibile con l'aritmetica standard. L'uso dell'esecuzione condizionale sui chip dove si trova
disponibile è controllato da -fif-conversione2.
Abilitato ai livelli -O, -O2, -O3, -Voi.
-fif-conversione2
Usa l'esecuzione condizionale (ove disponibile) per trasformare i salti condizionali in
equivalenti senza branch.
Abilitato ai livelli -O, -O2, -O3, -Voi.
-fdeclone-ctor-dtor
L'ABI C++ richiede più punti di ingresso per costruttori e distruttori: uno per a
suboggetto di base, uno per un oggetto completo e uno per un distruttore virtuale che chiama
operatore cancella in seguito. Per una gerarchia con basi virtuali, la base e completa
le varianti sono cloni, il che significa due copie della funzione. Con questa opzione, il
le varianti base e complete vengono modificate per essere thunk che chiamano un'implementazione comune.
Abilitato da -Voi.
-fdelete-controlli-puntatore-null
Supponiamo che i programmi non possano dereferenziare in modo sicuro i puntatori nulli e che nessun codice o dati
l'elemento risiede lì. Ciò consente semplici ottimizzazioni di piegatura costanti a tutti
livelli di ottimizzazione. Inoltre, altri passaggi di ottimizzazione in GCC utilizzano questo flag per
controllare le analisi del flusso di dati globali che eliminano i controlli inutili per i puntatori nulli;
questi presuppongono che se un puntatore viene controllato dopo che è già stato dereferenziato,
non può essere nullo.
Si noti tuttavia che in alcuni ambienti questa ipotesi non è vera. Utilizzo
-fno-cancella-null-controlli-puntatore per disabilitare questa ottimizzazione per i programmi che dipendono
su quel comportamento.
Alcuni target, specialmente quelli incorporati, disabilitano questa opzione a tutti i livelli. Altrimenti
è abilitato a tutti i livelli: -O0, -O1, -O2, -O3, -Voi. Pass che utilizzano le informazioni
sono abilitati indipendentemente a diversi livelli di ottimizzazione.
-fdevirtualizza
Tentativo di convertire le chiamate in funzioni virtuali in chiamate dirette. Questo è fatto entrambi
all'interno di una procedura e interprocedurale come parte dell'inlining indiretto
(-findirect-inline) e propagazione interprocedurale costante (-fipa-cp). Abilitato a
livelli -O2, -O3, -Voi.
-fdevirtualize-speculativamente
Tentativo di convertire le chiamate in funzioni virtuali in chiamate dirette speculative. Basato su
l'analisi del grafo di ereditarietà del tipo, determinare per una data chiamata l'insieme di
probabili obiettivi. Se il set è piccolo, preferibilmente di taglia 1, cambia la chiamata in a
decisione condizionale tra chiamate dirette e indirette. Le chiamate speculative consentono
più ottimizzazioni, come l'inlining. Quando sembrano inutili dopo oltre
ottimizzazione, vengono riconvertiti nella forma originale.
-fdevirtualizza-at-ltrans
Trasmetti in streaming le informazioni aggiuntive necessarie per una devirtualizzazione aggressiva durante l'esecuzione del collegamento-
ottimizzatore di tempo in modalità di trasformazione locale. Questa opzione consente di più
devirtualizzazione ma aumenta significativamente la dimensione dei dati in streaming. Per questo
motivo per cui è disabilitato per impostazione predefinita.
-ottimizzazioni-economiche
Eseguire una serie di ottimizzazioni minori relativamente costose.
Abilitato ai livelli -O2, -O3, -Voi.
Senza
Tentativo di rimuovere le istruzioni di estensione ridondanti. Questo è particolarmente utile per
l'architettura x86-64, che implicitamente si estende a zero nei registri a 64 bit dopo
scrivendo nella loro metà inferiore a 32 bit.
Abilitato per Alpha, AArch64 e x86 ai livelli -O2, -O3, -Voi.
-fno-vita-dse
In C++ il valore di un oggetto è influenzato solo dalle modifiche durante la sua durata: quando
inizia il costruttore, l'oggetto ha un valore indeterminato e qualsiasi cambiamento durante
la durata dell'oggetto è morta quando l'oggetto viene distrutto. Negozio normalmente morto
l'eliminazione ne trarrà vantaggio; se il tuo codice si basa sul valore di
archiviazione degli oggetti che persiste oltre la durata dell'oggetto, è possibile utilizzare questo flag per
disabilitare questa ottimizzazione.
-flive-range-restringimento
Tentativo di diminuire la pressione di registro attraverso il restringimento dell'intervallo di registro in tempo reale. Questo è
utile per processori veloci con set di registri di piccole o moderate dimensioni.
-fira-algoritmo=algoritmo
Utilizzare l'algoritmo di colorazione specificato per l'allocatore di registri integrato. Il
algoritmo l'argomento può essere priorità, che specifica la colorazione prioritaria di Chow, oppure CB,
che specifica la colorazione Chaitin-Briggs. La colorazione Chaitin-Briggs non è implementata
per tutte le architetture, ma per quei target che lo supportano, è l'impostazione predefinita
perché genera codice migliore.
-regione-fira=regione
Utilizzare le regioni specificate per l'allocatore di registri integrato. Il regione argomento
dovrebbe essere uno dei seguenti:
contro tutti i Usa tutti i loop come regioni di allocazione dei registri. Questo può dare i migliori risultati per
macchine con registro piccolo e/o irregolare.
misto
Utilizzare tutti i loop ad eccezione dei loop con una piccola pressione di registro come regioni. Questo
value di solito dà i migliori risultati nella maggior parte dei casi e per la maggior parte delle architetture, e
è abilitato per impostazione predefinita durante la compilazione con l'ottimizzazione per la velocità (-O, -O2, ...).
prima Usa tutte le funzioni come una singola regione. Ciò si traduce in genere nel codice più piccolo
dimensione ed è abilitato per impostazione predefinita per -Voi or -O0.
-fira-paranco-pressione
Usa l'IRA per valutare la pressione del registro nel passaggio di sollevamento del codice per le decisioni di sollevamento
espressioni. Questa opzione di solito si traduce in un codice più piccolo, ma può rallentare il
compilatore giù.
Questa opzione è abilitata a livello -Voi per tutti i bersagli.
-fira-loop-pressione
Usa IRA per valutare la pressione del registro nei cicli per le decisioni di spostare le invarianti del ciclo.
Questa opzione di solito porta alla generazione di codice più veloce e più piccolo su macchine con
file di registro di grandi dimensioni (>= 32 registri), ma può rallentare il compilatore.
Questa opzione è abilitata a livello -O3 per alcuni obiettivi.
-fno-ira-share-save-slot
Disabilita la condivisione degli slot dello stack utilizzati per salvare i registri hardware utilizzati dalle chiamate che vivono attraverso
una chiamata. Ogni registro rigido ottiene uno slot di stack separato e, di conseguenza, stack di funzioni
le cornici sono più grandi.
-fno-ira-share-spill-slot
Disabilita la condivisione degli slot dello stack allocati per gli pseudo-registri. Ogni pseudo-registro
che non ottiene un registro rigido ottiene uno slot stack separato e, di conseguenza, funzione
i frame dello stack sono più grandi.
-fira-verboso=n
Controlla la verbosità del file dump per l'allocatore di registri integrato. Il
il valore predefinito è 5. Se il valore n è maggiore o uguale a 10, viene inviato l'output del dump
a stderr utilizzando lo stesso formato di n meno 10.
-fla-remat
Abilita la rimaterializzazione sensibile alla CFG in LRA. Invece di caricare i valori di versato
pseudos, LRA cerca di rimaterializzare (ricalcolare) i valori se è redditizio.
Abilitato ai livelli -O2, -O3, -Voi.
-framo-ritardato
Se supportato per la macchina di destinazione, prova a riordinare le istruzioni per sfruttare
slot di istruzione disponibili dopo le istruzioni di salto ritardate.
Abilitato ai livelli -O, -O2, -O3, -Voi.
-fschedule-insns
Se supportato per la macchina di destinazione, provare a riordinare le istruzioni per eliminare
l'esecuzione si blocca a causa della mancata disponibilità dei dati richiesti. Questo aiuta le macchine che
avere istruzioni di caricamento in virgola mobile o memoria lente consentendo ad altre istruzioni di
essere emesso fino a quando non è richiesto il risultato dell'istruzione di caricamento o in virgola mobile.
Abilitato ai livelli -O2, -O3.
-fschedule-insns2
Simile a -fschedule-insns, ma richiede un ulteriore passaggio di programmazione delle istruzioni
dopo che è stata effettuata l'assegnazione del registro. Ciò è particolarmente utile su macchine con a
numero relativamente piccolo di registri e dove le istruzioni di caricamento della memoria richiedono più di
un ciclo.
Abilitato ai livelli -O2, -O3, -Voi.
-fno-sched-interblocco
Non programmare istruzioni su blocchi di base. Questo è normalmente abilitato per impostazione predefinita
quando si pianifica prima dell'assegnazione del registro, ovvero con -fschedule-insns o -O2 or
più alto.
-fno-sched-spec
Non consentire il movimento speculativo di istruzioni senza carico. Questo è normalmente abilitato da
impostazione predefinita durante la pianificazione prima dell'allocazione del registro, ovvero con -fschedule-insns o
-O2 o superiore.
-fsched-pressione
Abilita la programmazione insn sensibile alla pressione del registro prima dell'allocazione del registro. Questo
ha senso solo quando la pianificazione prima dell'attivazione dell'allocazione dei registri, ovvero con
-fschedule-insns o -O2 o più alto. L'utilizzo di questa opzione può migliorare il generato
codice e ridurne le dimensioni impedendo l'aumento della pressione di registro al di sopra del numero
dei registri hard disponibili e successivi sversamenti nell'allocazione dei registri.
-fsched-spec-load
Consentire il movimento speculativo di alcune istruzioni di carico. Questo ha senso solo quando
programmazione prima dell'assegnazione del registro, ovvero con -fschedule-insns o -O2 o superiore.
-fsched-spec-carico-pericoloso
Consenti il movimento speculativo di più istruzioni di carico. Questo ha senso solo quando
programmazione prima dell'assegnazione del registro, ovvero con -fschedule-insns o -O2 o superiore.
-fsched-stallo-insns
-fsched-stallo-insns=n
Definire quanti insn (se ce ne sono) possono essere spostati prematuramente dalla coda di stalled
si inserisce nella lista dei pronti durante il secondo passaggio di programmazione. -fno-sched-stallo-insns
significa che nessun insns viene spostato prematuramente, -fsched-stallo-insns=0 significa che non c'è
limite al numero di messaggi in coda che possono essere spostati prematuramente. -fsched-stallo-insns
senza un valore equivale a -fsched-stallo-insns=1.
-fsched-stallo-insns-dep
-fsched-stallo-insns-dep=n
Definire quanti gruppi insn (cicli) vengono esaminati per una dipendenza da un insn in stallo
che è un candidato per la rimozione prematura dalla coda delle locande in stallo. Questo ha
un effetto solo durante la seconda schedulazione, e solo se -fsched-stallo-insns is
Usato. -fno-sched-stallo-insns-dep è equivalente -fsched-stallo-insns-dep=0.
-fsched-stallo-insns-dep senza un valore equivale a
-fsched-stallo-insns-dep=1.
-fsched2-usa-superblocchi
Quando si pianifica dopo l'allocazione del registro, utilizzare la pianificazione del superblocco. Questo permette
movimento attraverso i confini dei blocchi di base, con conseguente pianificazione più rapida. Questa opzione è
sperimentale, poiché non tutte le descrizioni delle macchine utilizzate da GCC modellano la CPU abbastanza da vicino
per evitare risultati inaffidabili dall'algoritmo.
Questo ha senso solo quando si pianifica dopo l'allocazione del registro, cioè con
-fschedule-insns2 o -O2 o superiore.
-fsched-gruppo-euristico
Abilita l'euristica del gruppo nello scheduler. Questa euristica favorisce l'istruzione
che appartiene a un gruppo di pianificazione. Questo è abilitato per impostazione predefinita quando la pianificazione è
abilitato, cioè con -fschedule-insns or -fschedule-insns2 o -O2 o superiore.
-fsched-percorso-critico-euristico
Abilita l'euristica del percorso critico nello scheduler. Questa euristica favorisce
indicazioni sul percorso critico. Questo è abilitato per impostazione predefinita quando la pianificazione è
abilitato, cioè con -fschedule-insns or -fschedule-insns2 o -O2 o superiore.
-fsched-spec-insn-euristica
Abilitare l'euristica dell'istruzione speculativa nello scheduler. Questa euristica favorisce
istruzioni speculative con maggiore debolezza alla dipendenza. Questo è abilitato per impostazione predefinita
quando la programmazione è abilitata, ovvero con -fschedule-insns or -fschedule-insns2 o -O2
o superiore.
-fsched-rank-euristico
Abilita l'euristica del rango nello scheduler. Questa euristica favorisce l'istruzione
appartenente ad un blocco base di dimensione o frequenza maggiore. Questo è abilitato per impostazione predefinita
quando la programmazione è abilitata, ovvero con -fschedule-insns or -fschedule-insns2 o -O2
o superiore.
-fsched-last-insn-euristica
Abilita l'euristica dell'ultima istruzione nello scheduler. Questa euristica favorisce il
istruzione meno dipendente dall'ultima istruzione programmata. Questo è abilitato
per impostazione predefinita quando la pianificazione è abilitata, ovvero con -fschedule-insns or -fschedule-insns2
o -O2 o superiore.
-fsched-dep-count-euristico
Abilitare l'euristica del conteggio dipendente nell'utilità di pianificazione. Questa euristica favorisce il
istruzione che ha più istruzioni a seconda di essa. Questo è abilitato per impostazione predefinita
quando la programmazione è abilitata, ovvero con -fschedule-insns or -fschedule-insns2 o -O2
o superiore.
-Freschedule-moduli-schemate
La schedulazione Modulo viene eseguita prima della schedulazione tradizionale. Se un ciclo è modulo
programmato, gli abbonamenti successivi alla programmazione possono modificare il suo programma. Usa questa opzione per
controllare quel comportamento.
-fprogrammazione-selettiva
Pianifica le istruzioni utilizzando l'algoritmo di pianificazione selettiva. Esecuzioni di pianificazione selettiva
invece del primo passaggio dello scheduler.
-fprogrammazione-selettiva2
Pianifica le istruzioni utilizzando l'algoritmo di pianificazione selettiva. Esecuzioni di pianificazione selettiva
invece del secondo passaggio dello scheduler.
-fsel-sched-pipelining
Abilita il pipelining software dei loop più interni durante la pianificazione selettiva. Questo
l'opzione non ha effetto a meno che uno dei -fprogrammazione-selettiva or -fprogrammazione-selettiva2
è acceso.
-fsel-sched-pipelining-outer-loop
Quando si convogliano i loop durante la programmazione selettiva, anche i loop esterni della pipeline. Questo
opzione non ha effetto a meno che -fsel-sched-pipelining è acceso.
-interposizione-fsemantica
Alcuni formati di oggetti, come ELF, consentono l'interposizione di simboli tramite il linker dinamico.
Ciò significa che per i simboli esportati dal DSO, il compilatore non può eseguire
propagazione interprocedurale, inline e altre ottimizzazioni in previsione che il
la funzione o la variabile in questione possono cambiare. Sebbene questa funzione sia utile, per
esempio, per riscrivere le funzioni di allocazione della memoria mediante un'implementazione di debug, è
costoso in termini di qualità del codice. Insieme a -fno-interposizione-semantica il compilatore
presuppone che se l'interposizione avviene per le funzioni la funzione di sovrascrittura avrà
esattamente la stessa semantica (ed effetti collaterali). Allo stesso modo se avviene l'interposizione
per le variabili, il costruttore della variabile sarà lo stesso. La bandiera non ha
effetto per le funzioni dichiarate esplicitamente inline (dove non è mai consentito
interposizione per cambiare semantica) e per i simboli esplicitamente dichiarati deboli.
-finvolucro termoretraibile
Emetti prologhi di funzione solo prima di parti della funzione che ne hanno bisogno, piuttosto che a
la parte superiore della funzione. Questo flag è abilitato per impostazione predefinita su -O e più in alto.
-fcaller-salva
Abilitare l'assegnazione di valori ai registri che sono occupati da chiamate di funzione, da
emettendo istruzioni aggiuntive per salvare e ripristinare i registri attorno a tali chiamate. Tale
l'allocazione viene eseguita solo quando sembra portare a un codice migliore.
Questa opzione è sempre abilitata di default su alcune macchine, solitamente quelle che hanno
nessun registro con conservazione delle chiamate da utilizzare invece.
Abilitato ai livelli -O2, -O3, -Voi.
-fcombine-stack-regolazioni
Tiene traccia delle regolazioni dello stack (push e pop) e dei riferimenti alla memoria dello stack e quindi prova
per trovare modi per combinarli.
Abilitato per impostazione predefinita su -O1 e più in alto.
-fipa-ra
Utilizzare i registri di salvataggio del chiamante per l'assegnazione se tali registri non vengono utilizzati da alcun chiamato
funzione. In tal caso non è necessario salvarli e ripristinarli intorno alle chiamate.
Questo è possibile solo se le funzioni richiamate fanno parte della stessa unità di compilazione dell'attuale
funzione e vengono compilati prima di essa.
Abilitato ai livelli -O2, -O3, -Voi.
-fconserve-stack
Tentativo di ridurre al minimo l'utilizzo dello stack. Il compilatore tenta di utilizzare meno spazio nello stack, anche
se questo rende il programma più lento. Questa opzione implica l'impostazione di telaio-pila-grande
parametro a 100 e il crescita-frame-pila-grande parametro a 400.
-ftree-riassoc
Eseguire la riassociazione sugli alberi. Questo flag è abilitato per impostazione predefinita su -O e più in alto.
-ftree-pre
Eseguire l'eliminazione della ridondanza parziale (PRE) sugli alberi. Questo flag è abilitato da
predefinito a -O2 e -O3.
-ftree-parziale-pre
Rendi più aggressiva l'eliminazione della ridondanza parziale (PRE). Questo flag è abilitato da
predefinito a -O3.
-ftree-forwprop
Eseguire la propagazione in avanti sugli alberi. Questo flag è abilitato per impostazione predefinita su -O e
più alto.
-ftree-fre
Eseguire l'eliminazione completa della ridondanza (FRE) sugli alberi. La differenza tra FRE e
PRE è che FRE considera solo le espressioni calcolate su tutti i percorsi che portano a
il calcolo ridondante. Questa analisi è più veloce di PRE, sebbene ne esponga di meno
esuberi. Questo flag è abilitato per impostazione predefinita su -O e più in alto.
-ftree-phiprop
Eseguire il sollevamento di carichi da puntatori condizionali sugli alberi. Questo pass è abilitato da
predefinito a -O e più in alto.
-fhoist-carichi-adiacenti
Sollevare carichi speculativamente da entrambi i rami di un if-then-else se i carichi provengono da
posizioni adiacenti nella stessa struttura e l'architettura di destinazione ha un condizionale
istruzioni di movimento. Questo flag è abilitato per impostazione predefinita su -O2 e più in alto.
-ftree-copia-prop
Eseguire la propagazione della copia sugli alberi. Questo passaggio elimina le operazioni di copia non necessarie.
Questo flag è abilitato per impostazione predefinita su -O e più in alto.
-fipa-puro-const
Scopri quali funzioni sono pure o costanti. Abilitato per impostazione predefinita su -O e più in alto.
-fipa-riferimento
Scopri quali variabili statiche non sfuggono all'unità di compilazione. Abilitato da
predefinito a -O e più in alto.
-fipa-pta
Eseguire l'analisi del puntatore interprocedurale e la modifica interprocedurale e
analisi di riferimento. Questa opzione può causare un uso eccessivo della memoria e del tempo di compilazione su
grandi unità di compilazione. Non è abilitato per impostazione predefinita a nessun livello di ottimizzazione.
-fipa-profilo
Eseguire la propagazione del profilo interprocedurale. Le funzioni chiamate solo da freddo
le funzioni sono contrassegnate come fredde. Anche le funzioni eseguite una volta (come "cold",
vengono identificati "noreturn", costruttori statici o distruttori). Funzioni fredde e
loop meno parti delle funzioni eseguite una volta vengono quindi ottimizzate per le dimensioni. Abilitato da
predefinito a -O e più in alto.
-fipa-cp
Eseguire la propagazione costante interprocedurale. Questa ottimizzazione analizza il programma
per determinare quando i valori passati alle funzioni sono costanti e quindi ottimizza
di conseguenza. Questa ottimizzazione può aumentare sostanzialmente le prestazioni se il
l'applicazione ha passato le costanti alle funzioni. Questo flag è abilitato per impostazione predefinita su
-O2, -Voi e -O3.
-fipa-cp-clone
Eseguire la clonazione delle funzioni per rendere più forte la propagazione costante interprocedurale. quando
abilitata, la propagazione costante interprocedurale esegue la clonazione della funzione quando
la funzione visibile esternamente può essere chiamata con argomenti costanti. Perchè questo
l'ottimizzazione può creare più copie di funzioni, può aumentare significativamente
dimensione del codice (vedi --parami ipcp-unità-crescita=APPREZZIAMO). Questo flag è abilitato per impostazione predefinita su
-O3.
-fipa-cp-allineamento
Quando abilitata, questa ottimizzazione propaga l'allineamento dei parametri della funzione per supportare
migliore vettorizzazione e operazioni sulle stringhe.
Questo flag è abilitato per impostazione predefinita su -O2 e -Voi. Richiede che -fipa-cp è abilitato.
-fipa-icf
Eseguire lo stesso ripiegamento del codice per funzioni e variabili di sola lettura. Il
l'ottimizzazione riduce le dimensioni del codice e può disturbare gli stack di svolgimento sostituendo una funzione
da uno equivalente con un nome diverso. L'ottimizzazione funziona in modo più efficace con
ottimizzazione del tempo di collegamento abilitata.
Tuttavia il comportamento è simile all'ottimizzazione ICF di Gold Linker, su cui funziona ICF di GCC
diversi livelli e quindi le ottimizzazioni non sono le stesse - ci sono equivalenze che
vengono trovati solo da GCC e le equivalenze trovate solo da Gold.
Questo flag è abilitato per impostazione predefinita su -O2 e -Voi.
-fisolate-erroneous-path-dereference
Rileva percorsi che attivano comportamenti errati o indefiniti a causa del dereferenziamento di un valore nullo
puntatore. Isolare quei percorsi dal flusso di controllo principale e trasformare l'istruzione con
comportamento errato o indefinito in una trappola. Questo flag è abilitato per impostazione predefinita su -O2
e più in alto.
-attributo-percorsi-erronei-fisolate
Rileva percorsi che attivano comportamenti errati o non definiti a causa dell'utilizzo di un valore null
in un modo proibito da un attributo "returns_nonnull" o "nonnull". Isolare quei percorsi
dal flusso di controllo principale e trasformare l'affermazione con un comportamento errato o indefinito
in una trappola. Questo non è attualmente abilitato, ma potrebbe essere abilitato da -O2 in futuro.
-ftree-lavello
Esegui il movimento in avanti del negozio sugli alberi. Questo flag è abilitato per impostazione predefinita su -O e
più alto.
-ftree-bit-ccp
Esegui una propagazione costante bit condizionale sparsa sugli alberi e propaga il puntatore
informazioni di allineamento. Questo passaggio opera solo su variabili scalari locali ed è
abilitato per impostazione predefinita su -O e superiore. Richiede che -ftree-ccp è abilitato.
-ftree-ccp
Eseguire la propagazione costante condizionale sparsa (CCP) sugli alberi. Solo questo passaggio
opera su variabili scalari locali ed è abilitato di default a -O e più in alto.
-fssa-phiopt
Esegui il pattern matching sui nodi SSA PHI per ottimizzare il codice condizionale. Questo passaggio è
abilitato per impostazione predefinita su -O e più in alto.
-ftree-switch-conversione
Eseguire la conversione di inizializzazioni semplici in uno switch in inizializzazioni da a
matrice scalare. Questo flag è abilitato per impostazione predefinita su -O2 e più in alto.
-fusione a coda di albero
Cerca sequenze di codici identiche. Quando viene trovato, sostituisci uno con un salto all'altro.
Questa ottimizzazione è nota come unione della coda o salto incrociato. Questo flag è abilitato da
predefinito a -O2 e superiore. Il tempo di compilazione in questo passaggio può essere limitato utilizzando
max-tail-merge-confronti parametro e max-tail-merge-iterazioni parametro.
-ftree-dce
Eseguire l'eliminazione del codice morto (DCE) sugli alberi. Questo flag è abilitato per impostazione predefinita su -O
e più in alto.
-ftree-built-in-call-dce
Eseguire l'eliminazione condizionale del codice morto (DCE) per le chiamate a funzioni integrate che
possono impostare "errno" ma sono altrimenti privi di effetti collaterali. Questo flag è abilitato per impostazione predefinita
at -O2 e superiore se -Voi non è anche specificato.
-ftree-dominatore-opt
Eseguire una serie di semplici pulizie scalari (propagazione costante/copia, ridondanza
eliminazione, propagazione dell'intervallo e semplificazione dell'espressione) basata su un dominatore
attraversamento degli alberi. Questo esegue anche l'infilatura di salti (per ridurre i salti a salti). Questo
flag è abilitato per impostazione predefinita su -O e più in alto.
-ftree-dse
Esegui l'eliminazione dei depositi morti (DSE) sugli alberi. Un negozio morto è un negozio in un ricordo
posizione che viene successivamente sovrascritta da un altro negozio senza carichi intermedi. In
in questo caso è possibile eliminare l'archivio precedente. Questo flag è abilitato per impostazione predefinita su -O e
più alto.
-ftree-ch
Eseguire la copia dell'intestazione del ciclo sugli alberi. Questo è vantaggioso poiché aumenta
efficacia delle ottimizzazioni del movimento del codice. Salva anche un salto. Questa bandiera è
abilitato per impostazione predefinita su -O e superiore. Non è abilitato per -Voi, dal momento che di solito
aumenta la dimensione del codice.
-ftree-loop-ottimizzare
Eseguire ottimizzazioni del ciclo sugli alberi. Questo flag è abilitato per impostazione predefinita su -O e
più alto.
-ftree-loop-lineare
Eseguire trasformazioni di interscambio di loop sull'albero. Uguale a -floop-interscambio. Usare
questa trasformazione del codice, GCC deve essere configurato con --con-isl per abilitare il
Infrastruttura di trasformazione del ciclo di grafite.
-floop-interscambio
Eseguire trasformazioni di interscambio di loop sui loop. Scambio di due loop annidati
commuta il ciclo interno ed esterno. Ad esempio, dato un ciclo come:
FARE J = 1, M
IO = 1, N
A (j, i) = a (j, i) * c
FENDO
FENDO
loop interchange trasforma il ciclo come se fosse scritto:
IO = 1, N
FARE J = 1, M
A (j, i) = a (j, i) * c
FENDO
FENDO
che può essere utile quando "N" è più grande delle cache, perché in Fortran, il
gli elementi di un array sono archiviati in memoria in modo contiguo per colonna e l'originale
il ciclo itera sulle righe, creando potenzialmente ad ogni accesso un errore di cache. Questo
l'ottimizzazione si applica a tutte le lingue supportate da GCC e non è limitata a
Fortran. Per utilizzare questa trasformazione del codice, GCC deve essere configurato con --con-isl a
abilitare l'infrastruttura di trasformazione del ciclo di Graphite.
-flop-strip-mio
Esegui trasformazioni di estrazione di strip loop sui loop. L'estrazione mineraria divide un ciclo in
due anelli nidificati. L'anello esterno ha falcate uguali alla dimensione della striscia e all'interno
loop ha passi del loop originale all'interno di una striscia. La lunghezza della striscia può essere modificata
usando il loop-block-size-tile-size parametro. Ad esempio, dato un ciclo come:
IO = 1, N
A(I) = A(I) + C
FENDO
loop strip mining trasforma il ciclo come se fosse scritto:
DO II = 1, N, 51
DO I = II, min (II + 50, N)
A(I) = A(I) + C
FENDO
FENDO
Questa ottimizzazione si applica a tutte le lingue supportate da GCC e non è limitata a
Fortran. Per utilizzare questa trasformazione del codice, GCC deve essere configurato con --con-isl a
abilitare l'infrastruttura di trasformazione del ciclo di Graphite.
-blocco floop
Eseguire trasformazioni di blocco dei loop sui loop. La striscia di blocco estrae ogni anello nel
nidificazione di loop in modo tale che gli accessi alla memoria dei loop degli elementi si adattino alle cache. Il
la lunghezza della striscia può essere modificata utilizzando il loop-block-size-tile-size parametro. Per esempio,
dato un ciclo come:
IO = 1, N
FARE J = 1, M
A(J, I) = B(I) + C(J)
FENDO
FENDO
il blocco del ciclo trasforma il ciclo come se fosse scritto:
DO II = 1, N, 51
FARE JJ = 1, M, 51
DO I = II, min (II + 50, N)
DO J = JJ, minimo (JJ + 50, M)
A(J, I) = B(I) + C(J)
FENDO
FENDO
FENDO
FENDO
che può essere utile quando "M" è più grande delle cache, perché il ciclo più interno
itera su una quantità minore di dati che possono essere conservati nelle cache. Questo
l'ottimizzazione si applica a tutte le lingue supportate da GCC e non è limitata a
Fortran. Per utilizzare questa trasformazione del codice, GCC deve essere configurato con --con-isl a
abilitare l'infrastruttura di trasformazione del ciclo di Graphite.
-fgraphite-identità
Abilita la trasformazione dell'identità per la grafite. Per ogni SCoP generiamo il
rappresentazione poliedrica e trasformarla di nuovo in gimple. Usando -fgraphite-identità
possiamo verificare i costi o i benefici della trasformazione di GIMPLE -> GRAPHITE -> GIMPLE.
Alcune ottimizzazioni minime vengono eseguite anche dal generatore di codice ISL, come index
suddivisione ed eliminazione del codice morto nei cicli.
-floop-nido-ottimizzare
Abilita l'ottimizzatore di nidificazione del ciclo basato su ISL. Questo è un generico ottimizzatore di nidi di loop basato
sugli algoritmi di ottimizzazione di Plutone. Calcola una struttura ad anello ottimizzata per
data-località e parallelismo. Questa opzione è sperimentale.
-floop-srotolare-e-jam
Abilita srotolamento e blocco per l'ottimizzatore di nidificazione del ciclo basato su ISL. Il fattore di srotolamento può essere
cambiato usando il loop-unroll-jam-size parametro. La dimensione srotolata (contando
da quello più interno) può essere modificato utilizzando il loop-unroll-jam-profondità parametro.
.
-floop-parallelizza-tutto
Utilizzare l'analisi della dipendenza dei dati Graphite per identificare i loop che possono essere parallelizzati.
Parallelizza tutti i loop che possono essere analizzati per non contenere dipendenze trasportate dal loop
senza verificare che sia vantaggioso parallelizzare i loop.
-fcheck-data-deps
Confronta i risultati di diversi analizzatori di dipendenza dai dati. Questa opzione è usata per
debug degli analizzatori di dipendenza dei dati.
-ftree-loop-se-converti
Tentativo di trasformare i salti condizionali nei loop più interni in branch-less
equivalenti. L'intento è rimuovere il flusso di controllo dai loop più interni in ordine
per migliorare la capacità del passaggio di vettorizzazione di gestire questi cicli. Questo è
abilitato per impostazione predefinita se la vettorizzazione è abilitata.
-ftree-loop-if-convert-stores
Tenta di eseguire anche salti condizionali if-convert contenenti scritture in memoria. Questo
la trasformazione può essere pericolosa per i programmi multi-thread poiché trasforma in modo condizionale
la memoria scrive in scritture di memoria incondizionate. Per esempio,
per (i = 0; i < N; i++)
se (cond)
A[i] = espr;
si trasforma in
per (i = 0; i < N; i++)
A[i] = cond? espr: A[i];
potenzialmente produrre corse di dati.
-distribuzione-ftree-loop
Eseguire la distribuzione del ciclo. Questo flag può migliorare le prestazioni della cache su grandi loop body
e consentire ulteriori ottimizzazioni del ciclo, come la parallelizzazione o la vettorizzazione, da prendere
luogo. Ad esempio, il ciclo
IO = 1, N
A(I) = B(I) + C
D(I) = E(I) * F
FENDO
si trasforma in
IO = 1, N
A(I) = B(I) + C
FENDO
IO = 1, N
D(I) = E(I) * F
FENDO
-ftree-loop-distribuire-pattern
Eseguire la distribuzione in loop di modelli che possono essere generati dal codice con chiamate a a
biblioteca. Questo flag è abilitato per impostazione predefinita su -O3.
Questo passaggio distribuisce i cicli di inizializzazione e genera una chiamata a memset zero.
Ad esempio, il ciclo
IO = 1, N
A(io) = 0
B(I) = A(I) + I
FENDO
si trasforma in
IO = 1, N
A(io) = 0
FENDO
IO = 1, N
B(I) = A(I) + I
FENDO
e il ciclo di inizializzazione viene trasformato in una chiamata a memset zero.
-ftree-loop-im
Eseguire il movimento invariante del ciclo sugli alberi. Questo passaggio sposta solo le invarianti difficili
gestire a livello RTL (chiamate di funzione, operazioni che si espandono in sequenze non banali
di ins). Insieme a -funswitch-loop sposta anche operandi di condizioni che sono
invariante fuori dal ciclo, in modo che possiamo usare solo l'analisi di invarianza banale in
disattivazione del ciclo. Il pass include anche il movimento del negozio.
-ftree-loop-ivcanon
Crea un contatore canonico per il numero di iterazioni nei cicli per cui determinare
numero di iterazioni richiede un'analisi complicata. Le ottimizzazioni successive potrebbero quindi
determinare facilmente il numero. Utile soprattutto in relazione allo srotolamento.
-cinque punti
Eseguire ottimizzazioni delle variabili di induzione (riduzione della forza, variabile di induzione
fusione ed eliminazione delle variabili di induzione) sugli alberi.
-ftree-parallelizza-loop=n
Parallelizzare i cicli, ovvero dividere il loro spazio di iterazione per l'esecuzione in n thread. Questo è
possibile solo per i cicli le cui iterazioni sono indipendenti e possono essere arbitrariamente
riordinato. L'ottimizzazione è redditizia solo su macchine multiprocessore, per loop
che richiedono un uso intensivo della CPU, piuttosto che vincolati, ad esempio, dalla larghezza di banda della memoria. Questa opzione
implica -pthread, e quindi è supportato solo su obiettivi che hanno il supporto per
-pthread.
-ftree-pta
Eseguire l'analisi dei punti a funzione locale sugli alberi. Questo flag è abilitato per impostazione predefinita
at -O e più in alto.
-ftree-sra
Eseguire la sostituzione scalare degli aggregati. Questo passaggio sostituisce i riferimenti alla struttura
con scalari per impedire il commit delle strutture in memoria troppo presto. Questa bandiera è
abilitato per impostazione predefinita su -O e più in alto.
-ftree-rinominacopia
Eseguire la ridenominazione delle copie sugli alberi. Questo passaggio tenta di rinominare i provvisori del compilatore in
altre variabili nelle posizioni di copia, di solito risultando in nomi di variabili che più
assomigliano molto alle variabili originarie. Questo flag è abilitato per impostazione predefinita su -O e
più alto.
-ftree-coalesce-inline-vars
Dillo al copyrename pass (vedi -ftree-rinominacopia) per tentare di combinare piccoli utenti-
anche variabili definite, ma solo se sono inline da altre funzioni. È un
forma più limitata di -ftree-coalesce-vars. Ciò potrebbe danneggiare le informazioni di debug di tali
variabili inline, ma mantiene le variabili della funzione inline-in separate da ciascuna
altro, in modo tale che è più probabile che contengano i valori previsti in un debug
sessione.
-ftree-coalesce-vars
Dillo al copyrename pass (vedi -ftree-rinominacopia) per tentare di combinare piccoli utenti-
anche variabili definite, anziché solo temporanei del compilatore. Questo può limitare gravemente
la capacità di eseguire il debug di un programma ottimizzato compilato con -fno-var-inseguimento-assegnamenti.
Nella forma negata, questo flag impedisce la fusione SSA delle variabili utente, incluso
quelli in linea. Questa opzione è abilitata per impostazione predefinita.
-ftree-ter
Eseguire la sostituzione temporanea dell'espressione durante la fase SSA->normale. Separare
i temporanei use/single def vengono sostituiti nella loro posizione di utilizzo con la loro definizione
espressione. Ciò si traduce in codice non GIMPLE, ma offre molto di più agli espansori
alberi complessi su cui lavorare con conseguente migliore generazione di RTL. Questo è abilitato da
predefinito a -O e più in alto.
-ftree-slsr
Eseguire la riduzione della forza in linea retta sugli alberi. Questo riconosce correlati
espressioni che implicano moltiplicazioni e le sostituisce con calcoli meno costosi
quando possibile. Questo è abilitato per impostazione predefinita su -O e più in alto.
-ftree-vettorizzare
Eseguire la vettorizzazione sugli alberi. Questo flag abilita -ftree-loop-vettorizza e
-ftree-slp-vettorizza se non espressamente specificato.
-ftree-loop-vettorizza
Eseguire la vettorizzazione del ciclo sugli alberi. Questo flag è abilitato per impostazione predefinita su -O3 e quando
-ftree-vettorizzare è abilitato.
-ftree-slp-vettorizza
Eseguire la vettorizzazione di blocchi di base sugli alberi. Questo flag è abilitato per impostazione predefinita su -O3 e
quando -ftree-vettorizzare è abilitato.
-fvect-cost-model=modello
Modificare il modello di costo utilizzato per la vettorizzazione. Il modello l'argomento dovrebbe essere uno dei
illimitato, dinamico or economico. Con il illimitato modellare il percorso del codice vettorizzato è
si presume essere redditizio mentre con il dinamico modellare un controllo di runtime protegge il
percorso del codice vettorizzato per abilitarlo solo per i conteggi delle iterazioni che probabilmente verranno eseguiti
più veloce di quando si esegue il ciclo scalare originale. Il economico il modello disabilita
vettorizzazione di loop laddove ciò sarebbe proibitivo in termini di costi, ad esempio a causa di
i controlli di runtime richiesti per la dipendenza o l'allineamento dei dati, ma per il resto è uguale a
dinamico modello. Il modello di costo predefinito dipende da altri flag di ottimizzazione ed è
o dinamico or economico.
-fsimd-cost-modello=modello
Modificare il modello di costo utilizzato per la vettorizzazione dei loop contrassegnati con OpenMP o Cilk
Plus direttiva simd. Il modello l'argomento dovrebbe essere uno dei illimitato, dinamico, economico.
Tutti i valori di modello hanno lo stesso significato descritto in -fvect-cost-modello e
predefinito un modello di costo definito con -fvect-cost-modello viene utilizzato.
-ftree-vrp
Eseguire la propagazione dell'intervallo di valori sugli alberi. Questo è simile alla propagazione costante
pass, ma al posto dei valori vengono propagati gli intervalli di valori. Questo permette al
ottimizzatori per rimuovere i controlli di intervallo non necessari come i controlli associati all'array e il puntatore nullo
controlli. Questo è abilitato per impostazione predefinita su -O2 e superiore. Eliminazione del controllo del puntatore nullo
è fatto solo se -fdelete-controlli-puntatore-null è abilitato.
-fsplit-ivs-in-unroller
Consente l'espressione dei valori delle variabili di induzione nelle iterazioni successive del
ciclo srotolato usando il valore nella prima iterazione. Questo rompe la lunga dipendenza
catene, migliorando così l'efficienza dei passaggi di programmazione.
Una combinazione di -fweb e CSE è spesso sufficiente per ottenere lo stesso effetto.
Tuttavia, ciò non è affidabile nei casi in cui il corpo del ciclo è più complicato di a
unico blocco di base. Inoltre non funziona affatto su alcune architetture a causa di
restrizioni nel pass CSE.
Questa ottimizzazione è abilitata per impostazione predefinita.
-fespansione-variabile-in-unroller
Con questa opzione, il compilatore crea più copie di alcune variabili locali quando
srotolare un ciclo, che può risultare in codice superiore.
-fpartial-inline
Parti in linea di funzioni. Questa opzione ha effetto solo quando l'inline stesso è
acceso dal -funzioni-finline or -finline-piccole-funzioni opzioni.
Abilitato a livello -O2.
-fpredictive-comune
Eseguire l'ottimizzazione predittiva del commoning, ovvero riutilizzare i calcoli (in particolare
caricamenti e negozi di memoria) eseguiti in precedenti iterazioni di cicli.
Questa opzione è abilitata a livello -O3.
-fprefetch-loop-array
Se supportato dalla macchina di destinazione, genera istruzioni per precaricare la memoria su
migliorare le prestazioni dei loop che accedono a grandi array.
Questa opzione può generare codice migliore o peggiore; i risultati dipendono fortemente dalla
struttura dei cicli all'interno del codice sorgente.
Disabilitato a livello -Voi.
-fno-spioncino
-fno-spioncino2
Disabilita qualsiasi ottimizzazione spioncino specifica per la macchina. La differenza tra
-fno-spioncino e -fno-spioncino2 sta nel modo in cui sono implementati nel compilatore; alcuni
i bersagli usano uno, alcuni usano l'altro, alcuni usano entrambi.
-fspioncino è abilitato per impostazione predefinita. -fspioncino2 abilitato a livelli -O2, -O3, -Voi.
-fno-indovina-ramo-probabilità
Non indovinare le probabilità dei rami utilizzando l'euristica.
GCC utilizza l'euristica per indovinare le probabilità del ramo se non sono fornite da
feedback sulla profilazione (-fprofile-archi). Queste euristiche si basano sul flusso di controllo
grafico. Se alcune probabilità di branch sono specificate da "__builtin_expect", allora il
l'euristica viene utilizzata per indovinare le probabilità di ramificazione per il resto del flusso di controllo
grafico, tenendo conto delle informazioni "__builtin_expect". Le interazioni tra i
l'euristica e "__builtin_expect" possono essere complessi e, in alcuni casi, possono essere utili
per disabilitare l'euristica in modo che gli effetti di "__builtin_expect" siano più facili da
capire.
L'impostazione predefinita è -fguess-ramo-probabilità a livelli -O, -O2, -O3, -Voi.
-blocchi-freddo
Riordina i blocchi di base nella funzione compilata per ridurre il numero di prese
rami e migliorare la localizzazione del codice.
Abilitato ai livelli -O2, -O3.
-blocchi-e-partizioni di freorder
Oltre a riordinare i blocchi di base nella funzione compilata, per ridurre
numero di rami presi, partizioni blocchi di base caldi e freddi in sezioni separate
dei file assembly e .o, per migliorare le prestazioni di paging e località della cache.
Questa ottimizzazione viene disattivata automaticamente in presenza di gestione delle eccezioni,
per le sezioni linkonce, per le funzioni con un attributo di sezione definito dall'utente e su qualsiasi
architettura che non supporta le sezioni denominate.
Abilitato per x86 a livelli -O2, -O3.
-funzioni-freorder
Riordina le funzioni nel file oggetto per migliorare la localizzazione del codice. Questo è
implementato utilizzando le sottosezioni speciali ".text.hot" per le operazioni più frequenti
funzioni e ".text.unlikely" per funzioni eseguite improbabili. Il riordino viene effettuato da
il linker, quindi il formato del file oggetto deve supportare le sezioni denominate e il linker deve essere posizionato
loro in modo ragionevole.
Anche il feedback del profilo deve essere disponibile per rendere effettiva questa opzione. Vedere
-fprofile-archi per i dettagli.
Abilitato ai livelli -O2, -O3, -Voi.
-fstrict-alias
Consenti al compilatore di assumere le regole di aliasing più rigide applicabili alla lingua
essere compilato. Per C (e C++), questo attiva ottimizzazioni basate sul tipo di
espressioni. In particolare, si assume che un oggetto di un tipo non risieda mai al
stesso indirizzo di un oggetto di tipo diverso, a meno che i tipi non siano quasi gli stessi.
Ad esempio, un "int unsigned" può alias un "int", ma non un "void*" o un "double". UN
il tipo di carattere può alias qualsiasi altro tipo.
Presta particolare attenzione al codice come questo:
unione a_unione {
int i;
doppia d;
};
intero f() {
unione a_unione t;
td = 3.0;
ritorno ti;
}
La pratica di leggere da un membro del sindacato diverso da quello più recente
scritto (chiamato "tipo-punning") è comune. Anche con -fstrict-alias, genere-
il gioco di parole è consentito, a condizione che si acceda alla memoria tramite il tipo union. Così il
il codice sopra funziona come previsto. Tuttavia, questo codice potrebbe non:
intero f() {
unione a_unione t;
int*ip;
td = 3.0;
ip = &t.i;
ritorno *ip;
}
Allo stesso modo, accedi prendendo l'indirizzo, lanciando il puntatore risultante e
dereferenziare il risultato ha un comportamento indefinito, anche se il cast utilizza un tipo di unione,
per esempio:
intero f() {
doppio d = 3.0;
return ((union a_union *) &d)->i;
}
Le -fstrict-alias l'opzione è abilitata ai livelli -O2, -O3, -Voi.
-fstrict-overflow
Consenti al compilatore di assumere rigide regole di overflow firmate, a seconda della lingua
essere compilato. Per C (e C++) questo significa che overflow quando si esegue l'aritmetica con
i numeri con segno non sono definiti, il che significa che il compilatore può presumere che non lo sia
accadere. Ciò consente varie ottimizzazioni. Ad esempio, il compilatore presuppone che
un'espressione come "i + 10 > i" è sempre vera per "i" con segno. Questa ipotesi è
valido solo se l'overflow con segno non è definito, poiché l'espressione è falsa se "i + 10"
overflow quando si utilizza l'aritmetica in complemento a due. Quando questa opzione è attiva qualsiasi
tentare di determinare se un'operazione sugli overflow di numeri con segno deve essere scritta
attentamente per non coinvolgere effettivamente l'overflow.
Questa opzione consente anche al compilatore di assumere una semantica del puntatore rigorosa: dato a
puntatore a un oggetto, se l'aggiunta di un offset a quel puntatore non produce un puntatore
allo stesso oggetto, l'addizione è indefinita. Questo permette al compilatore di concludere
che "p + u > p" è sempre vero per un puntatore "p" e un intero senza segno "u". Questo
l'assunzione è valida solo perché l'avvolgimento del puntatore non è definito, poiché l'espressione è
false se "p + u" trabocca usando l'aritmetica del complemento a due.
Vedi anche il -fwrapv opzione. Usando -fwrapv significa che l'overflow intero con segno è
completamente definito: avvolge. quando -fwrapv viene utilizzato, non c'è differenza tra
-fstrict-overflow e -fno-rigore-overflow per interi. Insieme a -fwrapv alcuni tipi
di trabocco sono consentiti. Ad esempio, se il compilatore riceve un overflow durante l'esecuzione
aritmetica sulle costanti, il valore in overflow può ancora essere utilizzato con -fwrapv, Ma non
altrimenti.
Le -fstrict-overflow l'opzione è abilitata ai livelli -O2, -O3, -Voi.
-funzioni-false
-funzioni-false=n
Allineare l'inizio delle funzioni alla successiva potenza di due maggiore di n, saltando fino a n
byte. Ad esempio, -funzioni-false=32 allinea le funzioni ai successivi 32 byte
confine, ma -funzioni-false=24 si allinea al limite di 32 byte successivo solo se questo
può essere fatto saltando 23 byte o meno.
-fno-align-funzioni e -funzioni-false=1 sono equivalenti e significano che le funzioni
non sono allineati.
Alcuni assemblatori supportano questo flag solo quando n è una potenza di due; in tal caso, è
arrotondato.
If n non è specificato o è zero, utilizzare un valore predefinito dipendente dalla macchina.
Abilitato ai livelli -O2, -O3.
-etichette-false
-falign-etichette=n
Allinea tutti i bersagli del ramo a un limite di potenza di due, saltando fino a n byte come
-funzioni-false. Questa opzione può facilmente rendere il codice più lento, perché deve essere inserito
operazioni fittizie per quando il target di diramazione viene raggiunto nel consueto flusso del codice.
-fno-align-etichette e -falign-etichette=1 sono equivalenti e significano che le etichette non lo sono
allineato.
If -falign-loop or -falsi-salti sono applicabili e sono maggiori di questo valore, allora
i loro valori vengono invece utilizzati.
If n non è specificato o è zero, utilizzare un valore predefinito dipendente dalla macchina che è molto probabile
essere 1, ovvero nessun allineamento.
Abilitato ai livelli -O2, -O3.
-falign-loop
-falign-loop=n
Allinea i loop a un limite di potenza di due, saltando fino a n byte come -funzioni-false.
Se i cicli vengono eseguiti molte volte, questo compensa qualsiasi esecuzione del dummy
operazioni.
-fno-align-loop e -falign-loop=1 sono equivalenti e significano che i loop non lo sono
allineato.
If n non è specificato o è zero, utilizzare un valore predefinito dipendente dalla macchina.
Abilitato ai livelli -O2, -O3.
-falsi-salti
-falign-salta=n
Allinea i bersagli del ramo a un limite di potenza di due, per i bersagli del ramo in cui i bersagli
si raggiunge solo saltando, saltando fino a n byte come -funzioni-false. in
in questo caso, non è necessario eseguire operazioni fittizie.
-fno-align-salta e -salti-falign=1 sono equivalenti e significano che i loop non lo sono
allineato.
If n non è specificato o è zero, utilizzare un valore predefinito dipendente dalla macchina.
Abilitato ai livelli -O2, -O3.
-divertimento alla volta
Questa opzione viene lasciata per motivi di compatibilità. -divertimento alla volta non ha alcun effetto, mentre
-fno-unità-alla-volta implica -fno-toplevel-riordina e -fno-sezione-ancore.
Abilitato per impostazione predefinita.
-fno-toplevel-riordina
Non riordinare funzioni, variabili e istruzioni "asm" di primo livello. Emettili in
nello stesso ordine in cui appaiono nel file di input. Quando si utilizza questa opzione,
le variabili statiche non referenziate non vengono rimosse. Questa opzione ha lo scopo di supportare
codice esistente che si basa su un particolare ordinamento. Per il nuovo codice, è meglio usare
attributi quando possibile.
Abilitato a livello -O0. Quando disabilitato in modo esplicito, implica anche -fno-sezione-ancore,
che è altrimenti abilitato su -O0 su alcuni obiettivi.
-fweb
Costruisce i web come comunemente usati per scopi di allocazione dei registri e assegna ogni web
pseudo registro individuale. Ciò consente al pass di assegnazione del registro di operare su
pseudos direttamente, ma rafforza anche molti altri passaggi di ottimizzazione, come CSE,
ottimizzatore di loop e banale dispositivo di rimozione del codice morto. Può, tuttavia, eseguire il debug
impossibile, poiché le variabili non stanno più in un "registro di casa".
Abilitato per impostazione predefinita con -funroll-loop.
-fintero-programma
Supponiamo che l'unità di compilazione corrente rappresenti l'intero programma in fase di compilazione.
Tutte le funzioni e le variabili pubbliche ad eccezione di "principale" e quelle unite da
l'attributo "visibile_esterno" diventano funzioni statiche e in effetti vengono ottimizzate
più aggressivo dagli ottimizzatori interprocedurali.
Questa opzione non deve essere utilizzata in combinazione con -flto. Invece affidarsi a un linker
plugin dovrebbe fornire informazioni più sicure e precise.
-flto[=n]
Questa opzione esegue l'ottimizzatore del tempo di collegamento standard. Quando viene invocato con il codice sorgente, è
genera GIMPLE (una delle rappresentazioni interne di GCC) e lo scrive nell'ELF speciale
sezioni nel file oggetto. Quando i file oggetto sono collegati tra loro, tutti i
i corpi funzione vengono letti da queste sezioni ELF e istanziati come se fossero stati
parte della stessa unità di traduzione.
Per utilizzare l'ottimizzatore del tempo di collegamento, -flto e le opzioni di ottimizzazione dovrebbero essere specificate in
tempo di compilazione e durante il collegamento finale. Per esempio:
gcc -c -O2 -flto foo.c
gcc -c -O2 -flto bar.c
gcc -o mioprog -flto -O2 foo.o bar.o
Le prime due invocazioni a GCC salvano una rappresentazione bytecode di GIMPLE in special
Sezioni ELF all'interno foo.o e bar.o. L'invocazione finale legge il bytecode di GIMPLE
da foo.o e bar.o, unisce i due file in un'unica immagine interna e compila
il risultato come al solito. Dal momento che entrambi foo.o e bar.o sono uniti in un'unica immagine, questo
fa sì che tutte le analisi e le ottimizzazioni interprocedurali in GCC funzionino in tutto il
due file come se fossero uno solo. Ciò significa, ad esempio, che l'inliner è
in grado di incorporare funzioni in bar.o in funzioni in foo.o e viceversa.
Un altro modo (più semplice) per abilitare l'ottimizzazione del tempo di collegamento è:
gcc -o mioprog -flto -O2 foo.c bar.c
Quanto sopra genera bytecode per foo.c e bar.c, li fonde insieme in un unico
rappresentazione GIMPLE e li ottimizza come al solito per produrre il mio programma.
L'unica cosa importante da tenere a mente è che per abilitare l'ottimizzazione del tempo di collegamento tu
è necessario utilizzare il driver GCC per eseguire il passaggio del collegamento. GCC quindi esegue automaticamente
ottimizzazione del tempo di collegamento se uno qualsiasi degli oggetti coinvolti è stato compilato con il -flto
opzione della riga di comando. In genere dovresti specificare le opzioni di ottimizzazione da utilizzare
per l'ottimizzazione del tempo di collegamento sebbene GCC cerchi di essere intelligente nell'indovinare un'ottimizzazione
livello da utilizzare dalle opzioni utilizzate in fase di compilazione se non si riesce a specificarne uno al link-
tempo. Puoi sempre ignorare la decisione automatica di eseguire l'ottimizzazione del tempo di collegamento su
tempo di collegamento passando -fno-alto al comando di collegamento.
Per rendere efficace l'ottimizzazione dell'intero programma, è necessario creare determinati elementi
ipotesi di programma. Il compilatore deve sapere quali funzioni e variabili possono essere
accessibile da librerie e runtime al di fuori dell'unità ottimizzata per il tempo di collegamento. quando
supportato dal linker, il plugin del linker (vedi -plug-in-fuse-linker) passa
informazioni al compilatore sui simboli utilizzati e visibili esternamente. Quando il
il plug-in del linker non è disponibile, -fintero-programma dovrebbe essere usato per consentire al compilatore
per fare queste ipotesi, il che porta a decisioni di ottimizzazione più aggressive.
Quando -plug-in-fuse-linker non è abilitato quindi, quando un file viene compilato con -flto, l'
il file oggetto generato è più grande di un normale file oggetto perché contiene GIMPLE
bytecode e il solito codice finale (vedi -ffat-lto-oggetti. Ciò significa che l'oggetto
i file con informazioni LTO possono essere collegati come normali file oggetto; Se -fno-alto è passato
al linker non vengono applicate ottimizzazioni interprocedurali. Nota che quando
-fno-fat-lto-oggetti è abilitato la fase di compilazioneèpiùveloce ma non puoi eseguire a
collegamento regolare e non LTO su di essi.
Inoltre, i flag di ottimizzazione utilizzati per compilare i singoli file non lo sono
necessariamente correlati a quelli utilizzati al momento del collegamento. Ad esempio,
gcc -c -O0 -ffat-lto-oggetti -flto foo.c
gcc -c -O0 -ffat-lto-oggetti -flto bar.c
gcc -o mioprog -O3 foo.o bar.o
Questo produce file oggetto individuali con codice assembler non ottimizzato, ma
binario risultante il mio programma è ottimizzato a -O3. Se invece il binario finale è
generato con -fno-alto, poi il mio programma non è ottimizzato.
Quando si produce il binario finale, GCC applica solo ottimizzazioni del tempo di collegamento a quelli
file che contengono bytecode. Pertanto, puoi combinare e abbinare file oggetto e
librerie con bytecode GIMPLE e codice oggetto finale. GCC seleziona automaticamente
quali file ottimizzare in modalità LTO e quali file collegare senza ulteriore
trattamento.
Ci sono alcuni flag di generazione del codice conservati da GCC durante la generazione di bytecode, come
devono essere utilizzati durante la fase di collegamento finale. Generalmente le opzioni specificate in
link-time sovrascrivono quelli specificati in fase di compilazione.
Se non specifichi un'opzione per il livello di ottimizzazione -O al momento del collegamento, quindi GCC calcola
uno basato sui livelli di ottimizzazione utilizzati durante la compilazione dei file oggetto. Il
qui vince il livello di ottimizzazione più alto.
Attualmente, le seguenti opzioni e la loro impostazione sono prese dal primo file oggetto
che lo specificava espressamente: -fPIC, -fpic, -fpie, -fcomune, -feccezioni,
-fnon-chiamata-eccezioni, -fgnu-tm e tutto il -m bandiere di destinazione.
Alcuni flag di modifica ABI devono corrispondere in tutte le unità di compilazione e provare
per sovrascriverlo in fase di collegamento con un valore in conflitto viene ignorato. Ciò comprende
opzioni come -freg-struct-ritorno e -fpcc-struct-ritorno.
Altre opzioni come -ffp-contratto, -fno-rigore-overflow, -fwrapv, -fno-trapv or
-fno-strict-alias vengono passati alla fase di collegamento e uniti in modo conservativo
per unità di traduzione in conflitto. In particolare -fno-rigore-overflow, -fwrapv e
-fno-trapv avere la precedenza e per esempio -ffp-contratto=off ha la precedenza su
-ffp-contratto=veloce. Puoi sovrascriverli al linke-time.
Si consiglia di compilare tutti i file che partecipano allo stesso collegamento con
le stesse opzioni e specificare anche quelle opzioni al momento del collegamento.
Se LTO incontra oggetti con collegamento C dichiarato con tipi incompatibili in separati
unità di traslazione da collegare tra loro (comportamento indefinito secondo ISO C99
6.2.7), può essere emessa una diagnosi non fatale. Il comportamento è ancora indefinito durante l'esecuzione
tempo. Diagnostica simile può essere generata per altre lingue.
Un'altra caratteristica di LTO è che è possibile applicare ottimizzazioni interprocedurali
su file scritti in lingue diverse:
gcc -c -flto foo.c
g ++ -c -flto bar.cc
gfortran -c -flto baz.f90
g++ -o mioprog -flto -O3 foo.o bar.o baz.o -lgfortran
Notare che il collegamento finale è fatto con g ++ per ottenere le librerie runtime C++ e
-lgfortran viene aggiunto per ottenere le librerie runtime Fortran. In generale, durante la miscelazione
lingue in modalità LTO, dovresti usare le stesse opzioni di comando di collegamento come durante il missaggio
lingue in una compilazione regolare (non LTO).
Se i file oggetto contenenti il bytecode GIMPLE sono archiviati in un archivio di libreria, diciamo
libfoo.a, è possibile estrarli e utilizzarli in un collegamento LTO se si utilizza un
linker con supporto plugin. Per creare librerie statiche adatte per LTO, usa gcc-ar
e gcc-ranlib invece di ar e ranlib; per mostrare i simboli dei file oggetto con
GIMPLE bytecode, usa gcc-nm. Questi comandi lo richiedono ar, ranlib e nm sono stati
compilato con il supporto del plugin. Al momento del collegamento, usa il flag -plug-in-fuse-linker a
garantire che la biblioteca partecipi al processo di ottimizzazione LTO:
gcc -o myprog -O2 -flto -fuse-linker-plugin ao bo -lfoo
Con il plugin linker abilitato, il linker estrae i file GIMPLE necessari da
libfoo.a e li passa al GCC in esecuzione per renderli parte dell'aggregato
Immagine GIMPLE da ottimizzare.
Se non stai utilizzando un linker con supporto per plugin e/o non abiliti il linker
plugin, quindi gli oggetti all'interno libfoo.a vengono estratti e collegati come al solito, ma
non partecipano al processo di ottimizzazione LTO. Per creare una libreria statica
adatto sia per l'ottimizzazione LTO che per il normale collegamento, compila i suoi file oggetto con
-flto -ffat-lto-oggetti.
Le ottimizzazioni del tempo di collegamento non richiedono la presenza dell'intero programma per funzionare.
Se il programma non richiede l'esportazione di simboli, è possibile combinare
-flto e -fintero-programma per consentire agli ottimizzatori interprocedurali di utilizzare di più
ipotesi aggressive che possono portare a migliori opportunità di ottimizzazione. Uso di
-fintero-programma nonènecessario quando il plugin linkerèattivo (vedi -plug-in-fuse-linker).
L'attuale implementazione di LTO non tenta di generare bytecode che è
portabile tra diversi tipi di host. I file bytecode sono versionati e lì
è un rigoroso controllo della versione, quindi i file bytecode generati in una versione di GCC non lo fanno
lavorare con una versione precedente o più recente di GCC.
L'ottimizzazione del tempo di collegamento non funziona bene con la generazione di informazioni di debug.
La combinazione di -flto con -g è attualmente sperimentale e dovrebbe produrre imprevisti
risultati.
Se specifichi l'optional n, l'ottimizzazione e la generazione del codice eseguite al momento del collegamento
viene eseguito in parallelo utilizzando n lavori paralleli utilizzando un installato make .
La variabile d'ambiente FARE può essere utilizzato per sovrascrivere il programma utilizzato. Il predefinito
valore per n è 1.
Puoi anche specificare -flto=server di lavoro usare la modalità job server di GNU make per determinare
il numero di lavori paralleli. Questo è utile quando il Makefile che chiama GCC è già
esecuzione in parallelo. Devi anteporre a + alla ricetta di comando nel genitore
Makefile per farlo funzionare. Questa opzione probabilmente funziona solo se FARE è prodotto da GNU.
-flto-partizione=alg
Specificare l'algoritmo di partizionamento utilizzato dall'ottimizzatore del tempo di collegamento. Il valore è
o 1to1 per specificare un partizionamento che rispecchia i file sorgente originali o balanced
per specificare il partizionamento in blocchi di uguali dimensioni (ove possibile) o max creare
ove possibile, nuova partizione per ogni simbolo. Specificando nessuna come algoritmo
disabilita completamente il partizionamento e lo streaming. Il valore predefinito è balanced. Mentre
1to1 può essere utilizzato come soluzione alternativa per vari problemi di ordinamento del codice, il max
il partizionamento è destinato esclusivamente ai test interni. Il valore prima lo specifica
dovrebbe essere usata esattamente una partizione mentre il valore nessuna ignora il partizionamento e
esegue la fase di ottimizzazione del tempo di collegamento direttamente dalla fase WPA.
-fusione-tipo-flto-odr
Abilita lo streaming dei nomi dei tipi alterati dei tipi C++ e la loro unificazione in
tempo di collegamento. Ciò aumenta le dimensioni dei file oggetto LTO, ma consente la diagnostica su One
Definizione Violazioni delle regole.
-flto-livello-di-compressione=n
Questa opzione specifica il livello di compressione utilizzato per la lingua scritta intermedia
ai file oggetto LTO ed è significativo solo in combinazione con la modalità LTO (-flto).
I valori validi vanno da 0 (nessuna compressione) a 9 (compressione massima). Valori al di fuori di questo
sono fissati su 0 o 9. Se l'opzione non è data, un valore predefinito bilanciato
viene utilizzata l'impostazione di compressione.
-flto-report
Stampa un report con dettagli interni sul funzionamento dell'ottimizzatore del tempo di collegamento. Il
i contenuti di questo rapporto variano da versione a versione. È pensato per essere utile a GCC
sviluppatori durante l'elaborazione di file oggetto in modalità LTO (tramite -flto).
Disabilitato per impostazione predefinita.
-flto-report-wpa
Come -flto-report, ma stampa solo per la fase WPA di Link Time Optimization.
-plug-in-fuse-linker
Consente l'uso di un plug-in linker durante l'ottimizzazione del tempo di collegamento. Questa opzione si basa
sul supporto dei plugin nel linker, che è disponibile in gold o in GNU ld 2.21 o
più nuovo.
Questa opzione abilita l'estrazione di file oggetto con bytecode GIMPLE fuori dalla libreria
archivi. Ciò migliora la qualità dell'ottimizzazione esponendo più codice al link-
ottimizzatore di tempo Queste informazioni specificano a quali simboli è possibile accedere dall'esterno
(per oggetto non LTO o durante il collegamento dinamico). Miglioramenti della qualità del codice risultanti attivati
i binari (e le librerie condivise che usano la visibilità nascosta) sono simili a
-fintero-programma. Vedere -flto per una descrizione dell'effetto di questo flag e come
Usalo.
Questa opzione è abilitata per impostazione predefinita quando il supporto LTO in GCC è abilitato e GCC era
configurato per l'uso con un linker che supporta i plugin (GNU ld 2.21 o successivo o gold).
-ffat-lto-oggetti
Gli oggetti Fat LTO sono file oggetto che contengono sia il linguaggio intermedio che il
codice oggetto. Ciò li rende utilizzabili sia per il collegamento LTO che per il collegamento normale. Questo
l'opzione è efficace solo quando si compila con -flto e viene ignorato al momento del collegamento.
-fno-fat-lto-oggetti migliora il tempo di compilazione rispetto al semplice LTO, ma richiede il
toolchain completa per essere a conoscenza di LTO. Richiede un linker con supporto per il plugin linker
per le funzionalità di base. Inoltre, nm, ar e ranlib bisogno di supportare il linker
plugin per consentire un ambiente di compilazione completo (in grado di creare statico
biblioteche ecc.). GCC fornisce il gcc-ar, gcc-nm, gcc-ranlib involucri per passare il
opzioni giuste per questi strumenti. Con i makefile LTO non grassi devono essere modificati per l'uso
Loro.
L'impostazione predefinita è -fno-fat-lto-oggetti sui target con il supporto del plugin linker.
-fcompare-elimina
Dopo l'assegnazione del registro e la suddivisione delle istruzioni di assegnazione post-registrazione, identificare
istruzioni aritmetiche che calcolano i flag del processore simili a un'operazione di confronto
in base a tale aritmetica. Se possibile, eliminare l'operazione di confronto esplicito.
Questo pass si applica solo a determinati obiettivi che non possono rappresentare esplicitamente il
operazione di confronto prima che l'allocazione del registro sia completata.
Abilitato ai livelli -O, -O2, -O3, -Voi.
-fcprop-registri
Dopo l'allocazione del registro e la suddivisione dell'istruzione di assegnazione post-registrazione, eseguire
un passaggio di propagazione della copia per cercare di ridurre le dipendenze di pianificazione e occasionalmente
eliminare la copia.
Abilitato ai livelli -O, -O2, -O3, -Voi.
-fcorrezione del profilo
I profili raccolti utilizzando un binario strumentato per programmi multi-thread possono essere
incoerente a causa di mancati aggiornamenti del contatore. Quando questa opzione è specificata, GCC usa
euristiche per correggere o appianare tali incongruenze. Per impostazione predefinita, GCC emette an
messaggio di errore quando viene rilevato un profilo incoerente.
-fdir-profilo=sentiero
Imposta la directory in cui cercare i file di dati del profilo in sentiero. Questa opzione
interessa solo i dati del profilo generati da -fprofile-genera, -ftest-copertura,
-fprofile-archi e utilizzato da -fprofile-uso e -fbranch-probabilità e relativi
opzioni. Possono essere utilizzati sia percorsi assoluti che relativi. Per impostazione predefinita, GCC utilizza il
directory corrente come sentiero, quindi il file dei dati del profilo appare nella stessa directory di
il file oggetto.
-fprofile-genera
-fprofile-genera=sentiero
Abilita le opzioni solitamente utilizzate per la strumentazione dell'applicazione per produrre un profilo utile
per una successiva ricompilazione con ottimizzazione basata sul feedback del profilo. Devi usare
-fprofile-genera sia durante la compilazione che durante il collegamento del programma.
Sono abilitate le seguenti opzioni: -fprofile-archi, -fprofile-valori, -fvpt.
If sentiero è specificato, GCC guarda il sentiero per trovare i file di dati di feedback del profilo.
See -fdir-profilo.
-fprofile-uso
-fuso-profilo=sentiero
Abilita le ottimizzazioni orientate al feedback del profilo e le seguenti ottimizzazioni che
sono generalmente redditizi solo con il feedback del profilo disponibile: -fbranch-probabilità,
-fvpt, -funroll-loop, -fpeel-loop, -tracer, -ftree-vettorizzaree ftree-loop-
distribuire-pattern.
Per impostazione predefinita, GCC emette un messaggio di errore se i profili di feedback non corrispondono ai
codice sorgente. Questo errore può essere trasformato in un avviso utilizzando -Wcoverage-mancata corrispondenza.
Tieni presente che ciò potrebbe comportare un codice mal ottimizzato.
If sentiero è specificato, GCC guarda il sentiero per trovare i file di dati di feedback del profilo.
See -fdir-profilo.
-fauto-profilo
-fauto-profilo=sentiero
Abilita le ottimizzazioni dirette al feedback basate sul campionamento e le seguenti ottimizzazioni
che sono generalmente redditizi solo con il feedback del profilo disponibile:
-fbranch-probabilità, -fvpt, -funroll-loop, -fpeel-loop, -tracer,
-ftree-vettorizzare, -funzioni-finline, -fipa-cp, -fipa-cp-clone,
-fpredictive-comune, -funswitch-loop, -fgcse-dopo-reloade
-ftree-loop-distribuire-pattern.
sentiero è il nome di un file contenente le informazioni sul profilo AutoFDO. Se omesso, è
il valore predefinito è fbdata.afdo nella directory corrente.
La produzione di un file di dati del profilo AutoFDO richiede l'esecuzione del programma con il perf
utility su un sistema di destinazione GNU/Linux supportato. Per ulteriori informazioni, vedere
<https://perf.wiki.kernel.org/>.
Per esempio
record perf -e br_inst_retired:near_taken -b -o perf.data \
-- il_tuo_programma
Quindi usa il create_gcov strumento per convertire i dati grezzi del profilo in un formato che può essere
utilizzato da GCC. Devi anche fornire il binario non strippato per il tuo programma a questo
attrezzo. Vederehttps://github.com/google/autofdo>.
Per esempio
create_gcov --binary=tuo_programma.unstripped --profile=perf.data \
--gcov=profilo.afdo
Le seguenti opzioni controllano il comportamento del compilatore riguardo all'aritmetica in virgola mobile.
Queste opzioni si bilanciano tra velocità e correttezza. Tutto deve essere specificamente abilitato.
-float-negozio
Non memorizzare variabili a virgola mobile nei registri e inibire altre opzioni che
potrebbe cambiare se un valore in virgola mobile viene preso da un registro o da una memoria.
Questa opzione impedisce un'eccessiva precisione indesiderata su macchine come la 68000 dove
i registri flottanti (del 68881) mantengono più precisione di quanto si supponga un "doppio"
avere. Allo stesso modo per l'architettura x86. Per la maggior parte dei programmi, l'eccesso di precisione
fa solo bene, ma alcuni programmi si basano sulla definizione precisa di IEEE floating
punto. Utilizzo -float-negozio per tali programmi, dopo averli modificati per memorizzarli tutti
calcoli intermedi pertinenti in variabili.
-fexcess-precisione=style
Questa opzione consente un ulteriore controllo sull'eccesso di precisione su macchine in cui
i registri a punti hanno una precisione maggiore rispetto ai tipi IEEE "float" e "double" e
il processore non supporta le operazioni di arrotondamento a quei tipi. Per impostazione predefinita,
-fexcess-precision=veloce è in vigore; ciò significa che le operazioni vengono eseguite in
la precisione dei registri e che sia imprevedibile nell'arrotondamento ai tipi
specificato nel codice sorgente ha luogo. Quando si compila C, se
-fexcess-precision=standard è specificato, quindi l'eccesso di precisione segue le regole
specificato nella ISO C99; in particolare, sia i cast che le assegnazioni fanno sì che i valori siano
arrotondati ai loro tipi semantici (mentre -float-negozio riguarda solo le assegnazioni).
Questa opzione è abilitata per impostazione predefinita per C se un'opzione di conformità rigorosa come
-std=c99 viene utilizzato.
-fexcess-precision=standard non è implementato per linguaggi diversi dal C e non ha
effetto se -funsafe-math-ottimizzazioni or -fast-matematica è specificato. Su x86, è
inoltre non ha effetto se -mfpmth=sse or -mfpmath=sse+387 è specificato; nella prima
caso, la semantica IEEE si applica senza eccessiva precisione e, in quest'ultimo, l'arrotondamento è
imprevedibile.
-fast-matematica
Imposta le opzioni -fno-matematica-errno, -funsafe-math-ottimizzazioni, -finite-math-only,
-fno-arrotondamento-matematico, -fno-segnalazione-nans e -fcx-intervallo limitato.
Questa opzione determina la definizione della macro del preprocessore "__FAST_MATH__".
Questa opzione non è attivata da nessuno -O opzione inoltre - Veloce poiché può risultare in
output non corretto per programmi che dipendono da un'esatta implementazione di IEEE o ISO
regole/specifiche per le funzioni matematiche. Potrebbe, tuttavia, produrre codice più veloce per
programmi che non richiedono le garanzie di queste specifiche.
-fno-matematica-errno
Non impostare "errno" dopo aver chiamato funzioni matematiche eseguite con un singolo
istruzione, ad esempio "sqrt". Un programma che si basa su eccezioni IEEE per errori matematici
la gestione potrebbe voler utilizzare questo flag per la velocità mantenendo l'aritmetica IEEE
la compatibilità.
Questa opzione non è attivata da nessuno -O opzione poiché può causare un output errato
per programmi che dipendono da un'esatta implementazione di IEEE o ISO
regole/specifiche per le funzioni matematiche. Potrebbe, tuttavia, produrre codice più veloce per
programmi che non richiedono le garanzie di queste specifiche.
L'impostazione predefinita è -fmath-errno.
Sui sistemi Darwin, la libreria matematica non imposta mai "errno". Non c'è quindi motivo
affinché il compilatore consideri la possibilità che potrebbe, e -fno-matematica-errno Europe è
predefinito.
-funsafe-math-ottimizzazioni
Consenti ottimizzazioni per l'aritmetica in virgola mobile che (a) presuppongano argomenti e
i risultati sono validi e (b) possono violare gli standard IEEE o ANSI. Se utilizzato in fase di collegamento,
può includere librerie o file di avvio che cambiano la parola di controllo FPU predefinita o
altre ottimizzazioni simili.
Questa opzione non è attivata da nessuno -O opzione poiché può causare un output errato
per programmi che dipendono da un'esatta implementazione di IEEE o ISO
regole/specifiche per le funzioni matematiche. Potrebbe, tuttavia, produrre codice più veloce per
programmi che non richiedono le garanzie di queste specifiche. Consente
-fno-signed-zero, -fno-trapping-matematica, -math-fassociativo e - matematica-freciproca.
L'impostazione predefinita è -fno-unsafe-math-ottimizzazioni.
-math-fassociativo
Consentire la riassociazione degli operandi in serie di operazioni a virgola mobile. Questo
viola lo standard del linguaggio ISO C e C++ modificando eventualmente il risultato del calcolo.
NOTA: il riordino può cambiare il segno di zero così come ignorare i NaN e inibire o
creare underflow o overflow (e quindi non può essere utilizzato su codice che si basa sull'arrotondamento
comportamento come "(x + 2**52) - 2**52". Può anche riordinare i confronti in virgola mobile e
pertanto non può essere utilizzato quando sono richiesti confronti ordinati. Questa opzione richiede che
entrambi -fno-signed-zero e -fno-trapping-matematica essere in vigore. Inoltre, non rende
molto senso con -matematica-fondamentale. Per Fortran l'opzione viene abilitata automaticamente quando
entrambi -fno-signed-zero e -fno-trapping-matematica sono in vigore.
L'impostazione predefinita è -fno-associativo-math.
- matematica-freciproca
Consentire l'uso del reciproco di un valore invece di dividere per il valore se questo
consente le ottimizzazioni. Ad esempio "x / y" può essere sostituito con "x * (1/y)", che è
utile se "(1/y)" è soggetto all'eliminazione della sottoespressione comune. Nota che questo
perde precisione e aumenta il numero di flop operando sul valore.
L'impostazione predefinita è -fno-reciproco-math.
-finite-math-only
Consenti ottimizzazioni per l'aritmetica in virgola mobile che presuppongono che argomenti e
i risultati non sono NaN o +-Inf.
Questa opzione non è attivata da nessuno -O opzione poiché può causare un output errato
per programmi che dipendono da un'esatta implementazione di IEEE o ISO
regole/specifiche per le funzioni matematiche. Potrebbe, tuttavia, produrre codice più veloce per
programmi che non richiedono le garanzie di queste specifiche.
L'impostazione predefinita è -fno-finite-solo-matematica.
-fno-signed-zero
Consenti ottimizzazioni per l'aritmetica in virgola mobile che ignorano il segno di zero.
L'aritmetica IEEE specifica il comportamento di valori distinti +0.0 e -0.0, che quindi
proibisce la semplificazione di espressioni come x+0.0 o 0.0*x (anche con
-finite-math-only). Questa opzione implica che il segno di un risultato zero non è
significativo.
L'impostazione predefinita è -fsigned-zeri.
-fno-trapping-matematica
Compila il codice assumendo che le operazioni in virgola mobile non possano generare visibilità dall'utente
trappole. Queste trappole includono divisione per zero, overflow, underflow, risultato inesatto e
operazione non valida. Questa opzione richiede che -fno-segnalazione-nans essere in vigore.
L'impostazione di questa opzione può consentire un codice più veloce se si fa affidamento sull'aritmetica IEEE "non-stop",
per esempio.
Questa opzione non dovrebbe mai essere attivata da nessuno -O opzione poiché può risultare in
output non corretto per programmi che dipendono da un'esatta implementazione di IEEE o ISO
regole/specifiche per le funzioni matematiche.
L'impostazione predefinita è -trapping-matematica.
-matematica-fondamentale
Disabilita le trasformazioni e le ottimizzazioni che presuppongono l'arrotondamento a virgola mobile predefinito
comportamento. Questo è l'arrotondamento a zero per tutte le conversioni da virgola mobile a numero intero e
arrotondato al più vicino per tutti gli altri troncamenti aritmetici. Questa opzione dovrebbe essere
specificata per i programmi che modificano dinamicamente la modalità di arrotondamento FP o che potrebbero essere
eseguito con una modalità di arrotondamento non predefinita. Questa opzione disabilita il ripiegamento costante di
espressioni in virgola mobile in fase di compilazione (che possono essere influenzate dalla modalità di arrotondamento)
e trasformazioni aritmetiche che non sono sicure in presenza di dipendenti dal segno
modalità di arrotondamento.
L'impostazione predefinita è -fno-arrotondamento-matematico.
Questa opzione è sperimentale e al momento non garantisce la disattivazione di tutti i GCC
ottimizzazioni che sono influenzate dalla modalità di arrotondamento. Le versioni future di GCC potrebbero fornire
controllo più preciso di questa impostazione utilizzando il pragma "FENV_ACCESS" di C99. Questa riga di comando
verrà utilizzata per specificare lo stato predefinito per "FENV_ACCESS".
-fsegnalazione-nans
Compilare il codice presumendo che i NaN di segnalazione IEEE possano generare trap visibili dall'utente durante
operazioni in virgola mobile. L'impostazione di questa opzione disabilita le ottimizzazioni che potrebbero cambiare
il numero di eccezioni visibili con i NaN di segnalazione. Questa opzione implica
-trapping-matematica.
Questa opzione determina la definizione della macro del preprocessore "__SUPPORT_SNAN__".
L'impostazione predefinita è -fno-segnalazione-nans.
Questa opzione è sperimentale e al momento non garantisce la disattivazione di tutti i GCC
ottimizzazioni che influenzano il comportamento di segnalazione NaN.
-fcostante-di-precisione-singola
Tratta le costanti in virgola mobile come precisione singola invece di convertirle implicitamente
loro a costanti a precisione doppia.
-fcx-intervallo limitato
Quando abilitata, questa opzione indica che non è necessario un passaggio di riduzione dell'intervallo quando
eseguire divisioni complesse. Inoltre, non è possibile verificare se il risultato di a
moltiplicazione o divisione complessa è "NaN + I*NaN", con un tentativo di salvare il
situazione in quel caso. L'impostazione predefinita è -fno-cx-intervallo limitato, ma è abilitato da
-fast-matematica.
Questa opzione controlla l'impostazione predefinita del pragma ISO C99 "CX_LIMITED_RANGE".
Tuttavia, l'opzione si applica a tutte le lingue.
-fcx-fortran-regole
Le moltiplicazioni e le divisioni complesse seguono le regole del Fortran. La riduzione della portata viene eseguita come
parte di una divisione complessa, ma non si verifica se il risultato di un complesso
la moltiplicazione o la divisione è "NaN + I*NaN", con un tentativo di salvare la situazione
in quel caso.
L'impostazione predefinita è -fno-cx-fortran-regole.
Le seguenti opzioni controllano le ottimizzazioni che possono migliorare le prestazioni, ma non lo sono
abilitato da qualsiasi -O opzioni. Questa sezione include opzioni sperimentali che possono produrre
codice rotto.
-fbranch-probabilità
Dopo aver eseguito un programma compilato con -fprofile-archi, puoi compilarlo una seconda volta
utilizzando -fbranch-probabilità, per migliorare le ottimizzazioni in base al numero di volte
ogni ramo è stato preso. Quando un programma compilato con -fprofile-archi esce, salva
l'esecuzione di arc conta in un file chiamato nomeorigine.gcda per ogni file sorgente. Il
le informazioni in questo file di dati dipendono molto dalla struttura del generato
codice, quindi è necessario utilizzare lo stesso codice sorgente e le stesse opzioni di ottimizzazione per entrambi
compilazioni.
Con -fbranch-probabilità, GCC mette a REG_BR_PROB nota su ciascuno SALTO_INSN e
CHIAMA_INSN. Questi possono essere utilizzati per migliorare l'ottimizzazione. Attualmente vengono utilizzati solo
in un posto: in riorg.c, invece di indovinare su quale percorso è più probabile che un ramo
prendi, il REG_BR_PROB i valori vengono utilizzati per determinare esattamente quale percorso viene preso di più
spesso.
-fprofile-valori
Se abbinato a -fprofile-archi, aggiunge codice in modo che alcuni dati sui valori di
vengono raccolte le espressioni del programma.
Con -fbranch-probabilità, rilegge i dati raccolti dai valori di profilazione di
espressioni per l'utilizzo nelle ottimizzazioni.
Abilitato con -fprofile-genera e -fprofile-uso.
-fprofile-reorder-funzioni
Il riordino delle funzioni basato sulla strumentazione del profilo raccoglie la prima volta dell'esecuzione
di una funzione e ordina queste funzioni in ordine crescente.
Abilitato con -fprofile-uso.
-fvpt
Se abbinato a -fprofile-archi, questa opzione indica al compilatore di aggiungere codice a
raccogliere informazioni sui valori delle espressioni.
Con -fbranch-probabilità, rilegge i dati raccolti ed esegue effettivamente il
ottimizzazioni basate su di essi. Attualmente le ottimizzazioni includono la specializzazione di
operazioni di divisione utilizzando la conoscenza del valore del denominatore.
-frename-registri
Tentativo di evitare false dipendenze nel codice pianificato utilizzando i registri rimasti
dopo l'assegnazione del registro. Questa ottimizzazione avvantaggia maggiormente i processori con lotti
di registri. A seconda del formato delle informazioni di debug adottato dal target,
tuttavia, può rendere impossibile il debug, poiché le variabili non rimangono più in una "casa"
Registrati".
Abilitato per impostazione predefinita con -funroll-loop e -fpeel-loop.
-fschedule-fusione
Esegue un passaggio dipendente dal target sul flusso di istruzioni per pianificare le istruzioni
dello stesso tipo insieme perché la macchina di destinazione può eseguirli in modo più efficiente se
sono adiacenti tra loro nel flusso di istruzioni.
Abilitato ai livelli -O2, -O3, -Voi.
-tracer
Eseguire la duplicazione della coda per ingrandire le dimensioni del superblocco. Questa trasformazione semplifica
il flusso di controllo della funzione consentendo ad altre ottimizzazioni di svolgere un lavoro migliore.
Abilitato con -fprofile-uso.
-funroll-loop
Unroll loop il cui numero di iterazioni può essere determinato al momento della compilazione o al momento della compilazione
ingresso nel ciclo. -funroll-loop implica -frerun-cse-dopo-loop, -fweb e
-frename-registri. Attiva anche il peeling completo del ciclo (cioè la rimozione completa di
cicli con un piccolo numero costante di iterazioni). Questa opzione rende il codice più grande e
può o non può farlo funzionare più velocemente.
Abilitato con -fprofile-uso.
-funroll-tutti i loop
Srotola tutti i loop, anche se il loro numero di iterazioni è incerto quando il loop è
entrato. Questo di solito rende i programmi più lenti. -funroll-tutti i loop implica il
stesse opzioni di -funroll-loop.
-fpeel-loop
Sbuccia i loop per i quali ci sono abbastanza informazioni da non rotolare molto (da
feedback sul profilo). Attiva anche il peeling completo del ciclo (cioè la rimozione completa di
cicli con un piccolo numero costante di iterazioni).
Abilitato con -fprofile-uso.
-fmove-loop-invarianti
Abilita il passaggio di movimento invariante di loop nell'ottimizzatore di loop RTL. Abilitato a livello
-O1
-funswitch-loop
Sposta rami con condizioni invarianti di loop fuori dal loop, con duplicati di
loop su entrambi i rami (modificato in base al risultato della condizione).
-ffunzioni-sezioni
-fdata-sezioni
Posiziona ogni funzione o elemento di dati nella propria sezione nel file di output se l'obiettivo
supporta sezioni arbitrarie. Il nome della funzione o il nome del dato
determina il nome della sezione nel file di output.
Usa queste opzioni sui sistemi in cui il linker può eseguire ottimizzazioni per migliorare
località di riferimento nello spazio delle istruzioni. La maggior parte dei sistemi che utilizzano l'oggetto ELF
formato e i processori SPARC che eseguono Solaris 2 dispongono di linker con tali ottimizzazioni.
AIX potrebbe avere queste ottimizzazioni in futuro.
Utilizzare queste opzioni solo quando ci sono vantaggi significativi dal farlo. Quando tu
specifica queste opzioni, l'assemblatore e il linker creano oggetti più grandi ed eseguibili
file e sono anche più lenti. Non puoi usare gprof su tutti i sistemi se lo specifichi
e potresti avere problemi con il debug se specifichi sia questa opzione che
-g.
-fbranch-target-load-ottimizzare
Eseguire l'ottimizzazione del carico del registro di destinazione del ramo prima del threading del prologo/epilogo.
L'uso dei registri di destinazione può essere tipicamente esposto solo durante la ricarica, quindi il sollevamento
carichi fuori dai cicli e l'esecuzione della pianificazione tra blocchi richiede un'ottimizzazione separata
passaggio.
-fbranch-target-load-optimize2
Esegui l'ottimizzazione del carico del registro di destinazione del ramo dopo il threading del prologo/epilogo.
-fbtr-bb-esclusiva
Quando si esegue l'ottimizzazione del carico del registro di destinazione del ramo, non riutilizzare il target del ramo
registri all'interno di qualsiasi blocco di base.
-fstack-protettore
Emetti codice aggiuntivo per verificare la presenza di buffer overflow, come gli attacchi di distruzione dello stack. Questo
viene fatto aggiungendo una variabile guard alle funzioni con oggetti vulnerabili. Questo
include funzioni che chiamano "alloca" e funzioni con buffer maggiori di 8 byte.
Le protezioni vengono inizializzate all'inserimento di una funzione e poi verificate al
la funzione esce. Se un controllo di protezione fallisce, viene stampato un messaggio di errore e il programma
esce.
-fstack-protettore-tutto
Come -fstack-protettore tranne che tutte le funzioni sono protette.
-fstack-protettore-forte
Come -fstack-protettore ma include funzioni aggiuntive da proteggere --- quelle
che hanno definizioni di array locali o che hanno riferimenti a indirizzi di frame locali.
-fstack-protector-esplicito
Come -fstack-protettore ma protegge solo quelle funzioni che hanno il
attributo "stack_protect"
-fstdarg-opz
Ottimizza il prologo delle funzioni di argomento variadico rispetto all'uso di quelle
argomenti.
NOTA: in Ubuntu 14.10 e versioni successive, -fstack-protettore-forte è abilitato da
predefinito per C, C++, ObjC, ObjC++, se nessuno di -fno-stack-protettore, -nostdlib, né
-autoportante si trovano.
-fsection-ancore
Prova a ridurre il numero di calcoli dell'indirizzo simbolico utilizzando un "ancoraggio" condiviso
simboli per indirizzare gli oggetti vicini. Questa trasformazione può aiutare a ridurre il numero
di voci GOT e accessi GOT su alcuni target.
Ad esempio, l'implementazione della seguente funzione "pippo":
statico int a, b, c;
int foo (vuoto) { return a + b + c; }
di solito calcola gli indirizzi di tutte e tre le variabili, ma se lo compili con
-fsection-ancore, accede invece alle variabili da un punto di ancoraggio comune. Il
effetto è simile al seguente pseudocodice (che non è valido C):
int foo (vuoto)
{
registra int *xr = &x;
restituisce xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
}
Non tutti i target supportano questa opzione.
--parami Nome=APPREZZIAMO
In alcuni punti, GCC utilizza varie costanti per controllare la quantità di ottimizzazione che
è fatta. Ad esempio, GCC non include funzioni in linea che contengono più di un certo
numero di istruzioni. Puoi controllare alcune di queste costanti dalla riga di comando
usando il --parami opzione.
I nomi di parametri specifici, e il significato dei valori, sono legati al
interni del compilatore e sono soggetti a modifiche senza preavviso in futuro
stampa.
In ogni caso, il APPREZZIAMO è un numero intero. Le scelte consentite per Nome siamo:
prevedibile-ramo-risultato
Quando si prevede che il ramo venga intrapreso con probabilità inferiore a questa soglia
(in percentuale), allora è considerato ben prevedibile. Il valore predefinito è 10.
max-crossjump-edge
Il numero massimo di fronti in entrata da considerare per il salto incrociato. L'algoritmo
utilizzato da -salto incrociato è O(N^2) nel numero di archi in arrivo a ciascun blocco.
L'aumento dei valori significa un'ottimizzazione più aggressiva, rendendo il tempo di compilazione
aumentare con probabilmente un piccolo miglioramento nella dimensione dell'eseguibile.
min-crossjump-insns
Il numero minimo di istruzioni che devono essere abbinate alla fine di due blocchi
prima che su di essi venga eseguito il salto incrociato. Questo valore viene ignorato nel caso
dove tutte le istruzioni nel blocco da cui si esegue il salto incrociato sono abbinate. Il
il valore predefinito è 5.
max-grow-copy-bb-insns
Il fattore di espansione della dimensione massima del codice durante la copia di blocchi di base invece di
saltare. L'espansione è relativa a un'istruzione di salto. Il valore predefinito è
8.
max-goto-duplication-insns
Il numero massimo di istruzioni da duplicare in un blocco che salta a a
goto calcolato. Per evitare il comportamento O(N^2) in un numero di passaggi, i fattori GCC
ha calcolato i goto all'inizio del processo di compilazione e li scompone fino al più tardi
possibile. Solo salti calcolati alla fine di un blocco base con non più di max-
goto-duplication-insns non sono fattorizzati. Il valore predefinito è 8.
max-delay-slot-insn-ricerca
Il numero massimo di istruzioni da considerare quando si cerca un'istruzione da
riempire uno slot di ritardo. Se più di questo numero arbitrario di istruzioni sono
cercato, il risparmio di tempo per riempire lo slot di ritardo è minimo, quindi fermati
ricerca. Valori crescenti significano un'ottimizzazione più aggressiva, rendendo il
aumento del tempo di compilazione con probabilmente un piccolo miglioramento del tempo di esecuzione.
max-delay-slot-ricerca-live
Quando si tenta di riempire gli slot di ritardo, il numero massimo di istruzioni da considerare
durante la ricerca di un blocco con informazioni di registro live valide. Aumentando questo
valore scelto arbitrariamente significa ottimizzazione più aggressiva, aumentando il
tempo di compilazione. Questo parametro deve essere rimosso quando il codice dello slot di ritardo è
riscritto per mantenere il grafico del flusso di controllo.
max-gcse-memoria
La quantità massima approssimativa di memoria che può essere allocata per eseguire
l'ottimizzazione dell'eliminazione della sottoespressione comune globale. Se più memoria di
specificato è obbligatorio, l'ottimizzazione non viene eseguita.
rapporto di inserimento max-gcse
Se il rapporto tra inserimenti di espressioni e cancellazioni è maggiore di questo valore per
qualsiasi espressione, quindi RTL PRE inserisce o rimuove l'espressione e quindi se ne va
calcoli parzialmente ridondanti nel flusso di istruzioni. Il valore predefinito è
20
lunghezza-elenco-in attesa
Il numero massimo di dipendenze in sospeso che la pianificazione consente prima di svuotare il
stato attuale e ricominciare da capo. Grandi funzioni con pochi rami o chiamate possono
creare elenchi eccessivamente grandi che consumano inutilmente memoria e risorse.
max-modulo-backtrack-tentativi
Il numero massimo di tentativi di backtrack che lo scheduler dovrebbe fare quando modulo
pianificazione di un ciclo. Valori più grandi possono aumentare esponenzialmente il tempo di compilazione.
max-inline-insns-singolo
Diversi parametri controllano l'inliner dell'albero utilizzato in GCC. Questo numero imposta il
numero massimo di istruzioni (conteggiato nella rappresentazione interna di GCC) in a
singola funzione che l'inliner ad albero considera per l'inlining. Questo riguarda solo
funzioni dichiarate inline e metodi implementati in una dichiarazione di classe (C++).
Il valore predefinito è 400.
Max-Inline-Insns-Auto
Quando si utilizza -funzioni-finline (incluso in -O3), molte funzioni che sarebbero
in caso contrario non verranno considerati per l'inlining da parte del compilatore. Per
quelle funzioni, un limite diverso (più restrittivo) rispetto alle funzioni
dichiarato in linea può essere applicato. Il valore predefinito è 40.
accelerazione minima in linea
Quando il miglioramento stimato delle prestazioni del chiamante + del tempo di esecuzione del chiamato supera questo valore
soglia (precedentemente), la funzione può essere inlineata indipendentemente dal limite su
--parami max-inline-insns-singolo e --parami Max-Inline-Insns-Auto.
grandi funzioni-insns
Il limite che specifica funzioni veramente grandi. Per funzioni maggiori di questo limite
dopo l'inlining, l'inlining è vincolato da --parami grande-funzione-crescita. Questo
è utile principalmente per evitare tempi di compilazione estremi causati da non
algoritmi lineari utilizzati dal back-end. Il valore predefinito è 2700.
grande-funzione-crescita
Specifica la crescita massima della funzione grande causata dall'allineamento in percentuale. Il
il valore predefinito è 100 che limita la crescita della funzione di grandi dimensioni a 2.0 volte l'originale
dimensione.
grande-unità-insns
Il limite che specifica l'unità di traduzione grande. Crescita causata dall'allineamento delle unità
maggiore di questo limite è limitato da --parami crescita-unità in linea. Per piccole unità
questo potrebbe essere troppo stretto. Ad esempio, si consideri un'unità costituita dalla funzione A
che è in linea e B che chiama solo A tre volte. Se B è piccolo rispetto ad A,
la crescita dell'unità è del 300\% e tuttavia tale inline è molto sensato. Per molto grandi
unità costituite da piccole funzioni inlineabili, tuttavia, la crescita unitaria complessiva
limite è necessario per evitare l'esplosione esponenziale della dimensione del codice. Così per i più piccoli
unità, la dimensione viene aumentata a --parami grande-unità-insns prima dell'applicazione --parami
crescita-unità in linea. Il valore predefinito è 10000.
crescita-unità in linea
Specifica la crescita complessiva massima dell'unità di compilazione causata dall'inline. Il
il valore predefinito è 20 che limita la crescita dell'unità a 1.2 volte la dimensione originale. Freddo
le funzioni (segnate a freddo tramite un attributo o dal feedback del profilo) non lo sono
contabilizzato nella dimensione dell'unità.
ipcp-unità-crescita
Specifica la massima crescita complessiva dell'unità di compilazione causata da interprocedurale
propagazione costante. Il valore predefinito è 10 che limita la crescita dell'unità a 1.1
volte la dimensione originale.
telaio-pila-grande
Il limite che specifica stack frame di grandi dimensioni. Durante l'inline l'algoritmo sta provando
per non superare troppo questo limite. Il valore predefinito è 256 byte.
crescita-frame-pila-grande
Specifica la crescita massima in percentuale di stack frame di grandi dimensioni causati dall'inline.
Il valore predefinito è 1000 che limita la crescita del frame dello stack di grandi dimensioni a 11 volte il
Misura originale.
max-inline-insns-ricorsivo
max-inline-insns-ricorsiva-auto
Specifica il numero massimo di istruzioni una copia fuori linea di un
la funzione inline ricorsiva può crescere eseguendo l'inline ricorsivo.
--parami max-inline-insns-ricorsivo si applica alle funzioni dichiarate inline. Per
funzioni non dichiarate inline, l'inlining ricorsivo avviene solo quando
-funzioni-finline (incluso in -O3) è abilitato; --parami max-inline-insns-
ricorsivo-auto si applica invece. Il valore predefinito è 450.
max-inline-recursive-profondità
max-inline-profondità-ricorsiva-auto
Specifica la profondità di ricorsione massima utilizzata per l'inline ricorsivo.
--parami max-inline-recursive-profondità si applica alle funzioni dichiarate inline. Per
funzioni non dichiarate inline, l'inlining ricorsivo avviene solo quando
-funzioni-finline (incluso in -O3) è abilitato; --parami max-inline-ricorsivo-
profondità-auto si applica invece. Il valore predefinito è 8.
probabilità-minima-inline-ricorsiva
L'inlining ricorsivo è redditizio solo per la funzione che ha una ricorsione profonda in
media e può danneggiare la funzione avendo poca profondità di ricorsione aumentando il
prologo dimensione o complessità del corpo funzione ad altri ottimizzatori.
Quando il feedback del profilo è disponibile (vedi -fprofile-genera) la ricorsione effettiva
la profondità può essere indovinata dalla probabilità che la funzione ricorra tramite una data chiamata
espressione. Questo parametro limita l'inline solo alle espressioni di chiamata la cui
la probabilità supera la soglia data (in percentuale). Il valore predefinito è 10.
Early-inlining-insns
Specificare la crescita che può fare il primo inliner. In effetti aumenta la quantità
di inline per il codice che ha una grande penalità di astrazione. Il valore predefinito è 14.
iterazioni-max-early-inliner
Limite di iterazioni dell'early inliner. Questo fondamentalmente limita il numero di
le chiamate indirette nidificate possono essere risolte dall'inliner anticipato. Le catene più profonde sono ancora
gestito da inline in ritardo.
comdat-sharing-probabilità
Probabilità (in percentuale) che la funzione in linea C++ con visibilità comdat sia
condiviso tra più unità di compilazione. Il valore predefinito è 20.
profilo-funzione-id-interno
Un parametro per controllare se utilizzare l'id interno della funzione nel database dei profili
cercare. Se il valore è 0, il compilatore utilizza un id basato sulla funzione
nome dell'assemblatore e nome del file, che rende i dati del vecchio profilo più tolleranti rispetto all'origine
modifiche come il riordino delle funzioni, ecc. Il valore predefinito è 0.
vincolato al ciclo min-vect
Il numero minimo di iterazioni sotto le quali i loop non sono vettorizzati quando
-ftree-vettorizzare viene utilizzato. Il numero di iterazioni dopo la vettorizzazione deve
essere maggiore del valore specificato da questa opzione per consentire la vettorizzazione. Il
il valore predefinito è 0.
gcse-costo-distanza-rapporto
Fattore di scala nel calcolo della distanza massima di cui un'espressione può essere spostata
Ottimizzazioni GCSE. Questo è attualmente supportato solo nel passaggio di sollevamento del codice.
Maggiore è il rapporto, più aggressivo è il sollevamento del codice con simple
espressioni, cioè le espressioni che sono costate meno di gcse-senza restrizioni-
costo. Specificando 0 si disabilita il sollevamento di espressioni semplici. Il valore predefinito è
10
gcse-costo illimitato
Costo, approssimativamente misurato come il costo di una singola istruzione macchina tipica, a
quali ottimizzazioni GCSE non vincolano la distanza che un'espressione può percorrere.
Questo è attualmente supportato solo nel passaggio di sollevamento del codice. Minore è il costo,
il sollevamento del codice più aggressivo è. Specificare 0 consente a tutte le espressioni di
percorrere distanze illimitate. Il valore predefinito è 3.
max-paranco-profondità
La profondità di ricerca nell'albero del dominatore per le espressioni da issare. Questo è usato
per evitare comportamenti quadratici nell'algoritmo di sollevamento. Il valore di 0 non limita
sulla ricerca, ma può rallentare la compilazione di enormi funzioni. Il valore predefinito
è 30.
max-tail-merge-confronti
La quantità massima di pallini simili con cui confrontare un pallino. Questo è usato per evitare
comportamento quadratico nella fusione delle code degli alberi. Il valore predefinito è 10.
max-tail-merge-iterazioni
Il numero massimo di iterazioni del passaggio sulla funzione. Questo è usato per
limitare il tempo di compilazione nell'unione della coda dell'albero. Il valore predefinito è 2.
max-srotolato-insns
Il numero massimo di istruzioni che può essere necessario srotolare un ciclo. Se un ciclo
è srotolato, questo parametro determina anche quante volte è il codice del ciclo
srotolato.
max-media-srotolamento-insns
Il numero massimo di istruzioni distorte dalle probabilità della loro esecuzione che
potrebbe essere necessario srotolare un ciclo. Se viene svolto un ciclo, anche questo parametro
determina quante volte viene srotolato il codice del ciclo.
tempi-max-srotolamento
Il numero massimo di srotolamenti di un singolo loop.
max-pelati-insns
Il numero massimo di istruzioni che un ciclo potrebbe dover essere rimosso. Se un ciclo
viene rimosso, questo parametro determina anche quante volte il codice del ciclo viene rimosso.
tempi massimi di peeling
Il numero massimo di peeling di un singolo ciclo.
max-peel-rami
Il numero massimo di rami sul percorso caldo attraverso la sequenza pelata.
max-completamente-pelati-insns
Il numero massimo di insns di un loop completamente spellato.
tempi-max-completamente-peel
Il numero massimo di iterazioni di un ciclo adatto per il peeling completo.
max-completamente-peel-loop-nest-profondità
La profondità massima di un nido ad anello adatto per la pelatura completa.
max-unswitch-insns
Il numero massimo di insns di un loop non commutato.
livello di disattivazione massimo
Il numero massimo di rami non commutati in un singolo loop.
lim-costoso
Il costo minimo di un'espressione costosa nel moto invariante di loop.
iv-considera-tutti-i-candidati-vincolati
Vincolato al numero di candidati per le variabili di induzione, al di sotto del quale tutti i candidati
sono considerati per ogni uso nelle ottimizzazioni delle variabili di induzione. Se ci sono
più candidati di questo, solo quelli più rilevanti sono considerati da evitare
complessità temporale quadratica.
iv-max-usi-considerati
Le ottimizzazioni delle variabili di induzione rinunciano ai loop che contengono più induzione
usi variabili.
iv-sempre-prune-cand-set-bound
Se il numero di candidati nel set è inferiore a questo valore, prova sempre a
rimuovi gli IV non necessari dal set quando ne aggiungi uno nuovo.
scev-max-expr-dimensione
Legato alla dimensione delle espressioni usate nell'analizzatore di evoluzioni scalari. Grande
le espressioni rallentano l'analizzatore.
scev-max-expr-complessità
Legato alla complessità delle espressioni nell'analizzatore di evoluzioni scalari.
Le espressioni complesse rallentano l'analizzatore.
omega-max-var
Il numero massimo di variabili in un sistema di vincoli Omega. Il valore predefinito
è 128.
omega-max-geq
Il numero massimo di disuguaglianze in un sistema di vincoli Omega. Il predefinito
il valore è 256.
omega-max-eq
Il numero massimo di uguaglianze in un sistema di vincoli Omega. Il valore predefinito
è 128.
omega-max-carte jolly
Il numero massimo di variabili jolly che il risolutore Omega è in grado di inserire.
Il valore predefinito è 18.
omega-hash-tabella-dimensioni
La dimensione della tabella hash nel risolutore Omega. Il valore predefinito è 550.
chiavi omega-max
Il numero massimo di chiavi utilizzate dal risolutore Omega. Il valore predefinito è 500.
omega-elimina-vincoli-ridondanti
Quando è impostato su 1, utilizza metodi costosi per eliminare tutti i vincoli ridondanti. Il
il valore predefinito è 0.
vect-max-versione-per-controlli-di-allineamento
Il numero massimo di controlli in fase di esecuzione che possono essere eseguiti durante l'esecuzione del ciclo
versioning per l'allineamento nel vectorizer.
versione-vect-max-per-controlli-alias
Il numero massimo di controlli in fase di esecuzione che possono essere eseguiti durante l'esecuzione del ciclo
versioning per alias nel vectorizer.
vect-max-peeling-per-allineamento
Il numero massimo di loop peel per migliorare l'allineamento degli accessi per il vectorizer. Valore
-1 significa "nessun limite".
max-iterazioni-da-tracciare
Il numero massimo di iterazioni di un ciclo l'algoritmo della forza bruta per l'analisi
del numero di iterazioni del ciclo che tenta di valutare.
hot-bb-count-ws-permille
Un conteggio del profilo di blocco di base è considerato caldo se contribuisce al dato
permillage (cioè 0...1000) dell'intera esecuzione profilata.
hot-bb-frazione-frequenza
Seleziona frazione del blocco di ingresso frequenza delle esecuzioni del blocco base in
la funzione data il blocco di base deve essere considerata calda.
iterazioni-max-previste
Il numero massimo di iterazioni del ciclo che prevediamo staticamente. Questo è utile in
casi in cui una funzione contiene un singolo ciclo con limite noto e un altro ciclo
con limite sconosciuto. Il numero noto di iterazioni è previsto correttamente, mentre
il numero sconosciuto di iterazioni è in media approssimativamente 10. Ciò significa che il ciclo
senza limiti appare artificialmente freddo rispetto all'altro.
built-in-aspetta-probabilità
Controlla la probabilità che l'espressione abbia il valore specificato. Questo
il parametro accetta una percentuale (cioè 0 ... 100) come input. La probabilità di default
di 90 si ottiene empiricamente.
allinea-soglia
Seleziona frazione della frequenza massima di esecuzioni di un blocco base in a
funzione per allineare il blocco base.
allinea-loop-iterazioni
Viene allineato un ciclo che dovrebbe iterare almeno il numero selezionato di iterazioni.
tracciante-dinamica-copertura
tracciante-dinamica-copertura-feedback
Questo valore viene utilizzato per limitare la formazione di superblocchi una volta raggiunta la percentuale data di
istruzioni eseguite è coperto. Ciò limita l'espansione della dimensione del codice non necessaria.
Le tracciante-dinamica-copertura-feedback parametro viene utilizzato solo quando il feedback del profilo
è disponibile. I profili reali (al contrario di quelli stimati staticamente) sono
molto meno bilanciato consentendo alla soglia di avere un valore maggiore.
tracciante-max-code-crescita
Interrompi la duplicazione della coda una volta che la crescita del codice ha raggiunto una determinata percentuale. Questo è un
limite piuttosto artificiale, poiché la maggior parte dei duplicati viene eliminata successivamente in cross
saltando, quindi potrebbe essere impostato su valori molto più alti della crescita del codice desiderata.
rapporto-minimo-ramo-tracciante
Arresta la crescita inversa quando la probabilità inversa del vantaggio migliore è inferiore a questa
soglia (in percentuale).
rapporto-minimo-ramo-tracciante
tracer-min-rapporto-rapporto-feedback
Arresta la crescita in avanti se il vantaggio migliore ha una probabilità inferiore a questa soglia.
Analogamente a tracciante-dinamica-copertura sono presenti due valori, uno per la compilazione
per il feedback del profilo e uno per la compilazione senza. Il valore per la compilazione
con il feedback del profilo deve essere più conservativo (più alto) per rendere
tracciante efficace.
lunghezza-percorso-max-cse
Il numero massimo di blocchi di base sul percorso che CSE considera. Il valore predefinito è 10.
max-cse-insns
Il numero massimo di istruzioni che CSE elabora prima del flush. L'impostazione predefinita è
1000
ggc-min-espandi
GCC utilizza un garbage collector per gestire la propria allocazione di memoria. Questo parametro
specifica la percentuale minima in base alla quale dovrebbe essere l'heap del raccoglitore di rifiuti
permesso di espandersi tra le collezioni. L'ottimizzazione di questo può migliorare la velocità di compilazione;
non ha alcun effetto sulla generazione del codice.
Il valore predefinito è 30% + 70% * (RAM/1 GB) con un limite superiore del 100% quando RAM >= 1 GB.
Se "getrlimit" è disponibile, la nozione di "RAM" è la più piccola della RAM effettiva e
"RLIMIT_DATA" o "RLIMIT_AS". Se GCC non è in grado di calcolare la RAM su un particolare
piattaforma, viene utilizzato il limite inferiore del 30%. L'impostazione di questo parametro e ggc-min-
enorme a zero fa sì che si verifichi una raccolta completa in ogni occasione. Questo è
estremamente lento, ma può essere utile per il debug.
ggc-min-heapsize
Dimensione minima dell'heap del raccoglitore di rifiuti prima che inizi a preoccuparsi di raccogliere
spazzatura. La prima raccolta si verifica dopo che l'heap si espande di ggc-min-espandi%
al di là di ggc-min-heapsize. Ancora una volta, l'ottimizzazione di questo può migliorare la velocità di compilazione e
non ha alcun effetto sulla generazione del codice.
L'impostazione predefinita è il più piccolo di RAM/8, RLIMIT_RSS o un limite che cerca di garantire
che RLIMIT_DATA o RLIMIT_AS non siano superati, ma con un limite inferiore di 4096
(quattro megabyte) e un limite superiore di 131072 (128 megabyte). Se GCC non è in grado
per calcolare la RAM su una particolare piattaforma, viene utilizzato il limite inferiore. Impostazione di questo
parametro molto grande disabilita efficacemente la raccolta dei rifiuti. Impostazione di questo
parametro e ggc-min-espandi a zero fa sì che si verifichi una raccolta completa ad ogni
opportunità.
max-ricarica-ricerca-insns
Il numero massimo di ricaricamento delle istruzioni dovrebbe guardare indietro per equivalente
Registrati. Valori crescenti significano un'ottimizzazione più aggressiva, rendendo il
il tempo di compilazione aumenta con prestazioni probabilmente leggermente migliori. Il predefinito
il valore è 100.
posizioni-memoria-max-cselib
Il numero massimo di locazioni di memoria che cselib dovrebbe prendere in considerazione.
L'aumento dei valori significa un'ottimizzazione più aggressiva, rendendo il tempo di compilazione
aumentare con prestazioni probabilmente leggermente migliori. Il valore predefinito è 500.
riordina-blocchi-duplica
riordina-blocchi-duplicati-feedback
Utilizzato dal passaggio di riordino dei blocchi di base per decidere se utilizzare incondizionato
ramo o duplicare il codice sulla sua destinazione. Il codice viene duplicato quando il suo
la dimensione stimata è inferiore a questo valore moltiplicato per la dimensione stimata di
salto incondizionato nei punti caldi del programma.
Le riordina-blocco-duplicato-feedback parametro viene utilizzato solo quando il feedback del profilo
è disponibile. Potrebbe essere impostato su valori superiori a riordina-blocco-duplicato da
le informazioni sui punti caldi sono più accurate.
max-sched-ready-insns
Il numero massimo di istruzioni pronte per essere emesse dallo scheduler dovrebbe
considerare in qualsiasi momento durante il primo passaggio di programmazione. Valori in aumento
significa ricerche più approfondite, facendo aumentare il tempo di compilazione con probabilmente
piccolo beneficio. Il valore predefinito è 100.
blocchi-regione-max-sched
Il numero massimo di blocchi in una regione da considerare per l'interblocco
programmazione. Il valore predefinito è 10.
blocchi-regione-conduttura-max
Il numero massimo di blocchi in una regione da considerare per il gasdotto nel
schedulatore selettivo. Il valore predefinito è 15.
max-sched-region-insns
Il numero massimo di insns in una regione da considerare per l'interblocco
programmazione. Il valore predefinito è 100.
max-pipeline-regione-insns
Il numero massimo di insns in una regione da considerare per il gasdotto nel
schedulatore selettivo. Il valore predefinito è 200.
min-spec-prob
La probabilità minima (in percentuale) di raggiungere un blocco sorgente per interblocco
programmazione speculativa. Il valore predefinito è 40.
max-sched-extend-regioni-iter
Il numero massimo di iterazioni attraverso CFG per estendere le regioni. Un valore di 0 (il
default) disabilita le estensioni regionali.
ritardo-conflitto-max-sched-insn
Il ritardo massimo di conflitto per un insn da considerare per il movimento speculativo.
Il valore predefinito è 3.
sched-spec-prob-cutoff
La minima probabilità di successo della speculazione (in percentuale), in modo che speculativa
inns sono in programma. Il valore predefinito è 40.
sched-spec-state-edge-prob-cutoff
La probabilità minima che un arco deve avere affinché lo scheduler salvi il suo stato
attraverso di esso. Il valore predefinito è 10.
sched-mem-true-dep-costo
Distanza minima (in cicli della CPU) tra archivio e carico destinati alla stessa memoria
posizioni. Il valore predefinito è 1.
selsched-max-lookahead
La dimensione massima della finestra di previsione della pianificazione selettiva. È una profondità
di ricerca delle istruzioni disponibili. Il valore predefinito è 50.
selsched-max-tempi-programmati
Il numero massimo di volte in cui un'istruzione è schedulata durante selettiva
programmazione. Questo è il limite al numero di iterazioni attraverso le quali il
l'istruzione può essere convogliata. Il valore predefinito è 2.
selsched-max-insns-da-rinominare
Il numero massimo di migliori istruzioni nell'elenco pronto che sono considerate per
ridenominazione nello scheduler selettivo. Il valore predefinito è 2.
sms-min-sc
Il valore minimo del conteggio fasi generato dallo scheduler modulo swing. Il
il valore predefinito è 2.
max-ultimo-valore-rtl
La dimensione massima misurata come numero di RTL che possono essere registrati in un'espressione
in combinatore per uno pseudo registro come ultimo valore noto di quel registro. Il
il valore predefinito è 10000.
max-combina-insns
Il numero massimo di istruzioni che il combinatore RTL tenta di combinare. Il predefinito
il valore è 2 a -Ogg e 4 altrimenti.
limite di condivisione intera
Le piccole costanti intere possono utilizzare una struttura dati condivisa, riducendo i compiti del compilatore
utilizzo della memoria e aumentandone la velocità. Questo imposta il valore massimo di un shared
costante intera. Il valore predefinito è 256.
ssp-dimensione del buffer
La dimensione minima dei buffer (cioè gli array) che ricevono la protezione contro lo stack smashing
quando -fstack-protezione viene utilizzato.
Questa impostazione predefinita prima di Ubuntu 10.10 era "8". Attualmente è "4", per aumentare il
numero di funzioni protette dalla protezione dello stack.
dimensione-minima-per-condivisione dello stack
La dimensione minima delle variabili che prendono parte alla condivisione dello slot dello stack quando non lo è
ottimizzazione. Il valore predefinito è 32.
max-jump-thread-duplicazione-stmts
Numero massimo di istruzioni consentite in un blocco che deve essere duplicato quando
salti di filettatura.
max-fields-per-sensibile ai campi
Numero massimo di campi in una struttura trattata in modo sensibile ai campi durante
analisi del puntatore. Il valore predefinito è zero per -O0 e -O1e 100 per -Voi, -O2e
-O3.
prefetch-latenza
Stima sul numero medio di istruzioni eseguite prima del prefetch
finiture. La distanza precaricata in avanti è proporzionale a questa costante.
L'aumento di questo numero può anche portare a un minor numero di flussi precaricati (vedi
prelettura simultanea).
prelettura simultanea
Numero massimo di prelettura che possono essere eseguiti contemporaneamente.
l1-cache-line-size
La dimensione della linea della cache nella cache L1, in byte.
dimensione della cache l1
La dimensione della cache L1, in kilobyte.
dimensione della cache l2
La dimensione della cache L2, in kilobyte.
rapporto min-insn-prefetch
Il rapporto minimo tra il numero di istruzioni e il numero di prefetch
per abilitare il precaricamento in un ciclo.
prefetch-min-insn-to-mem-rapporto
Il rapporto minimo tra il numero di istruzioni e il numero di memoria
riferimenti per abilitare il precaricamento in un ciclo.
uso-tipi-canonici
Se il compilatore deve utilizzare il sistema di tipi "canonico". Per impostazione predefinita, questo
dovrebbe sempre essere 1, che utilizza un meccanismo interno più efficiente per il confronto
tipi in C++ e Objective-C++. Tuttavia, se i bug nel sistema di tipo canonico sono
causando errori di compilazione, impostare questo valore su 0 per disabilitare i tipi canonici.
interruttore-conversione-max-rapporto-diramazione
La conversione dell'inizializzazione dello switch si rifiuta di creare array più grandi di
interruttore-conversione-max-rapporto-diramazione volte il numero di rami nello switch.
max-parziale-lunghezza-antic
Lunghezza massima dell'insieme antico parziale calcolata durante l'albero parziale
ottimizzazione dell'eliminazione della ridondanza (-ftree-pre) quando si ottimizza a -O3 e al di sopra.
Per alcuni tipi di codice sorgente l'eliminazione della ridondanza parziale avanzata
l'ottimizzazione può scappare, consumando tutta la memoria disponibile sull'host
macchina. Questo parametro imposta un limite alla lunghezza degli insiemi calcolati,
che impedisce il comportamento fuggitivo. Impostando un valore di 0 per questo parametro
consente una lunghezza fissa illimitata.
dimensione-sccvn-max-scc
Dimensione massima di un componente fortemente connesso (SCC) durante l'elaborazione SCCVN. Se
questo limite viene raggiunto, l'elaborazione SCCVN per l'intera funzione non viene eseguita e
le ottimizzazioni dipendenti da esso sono disabilitate. La dimensione SCC massima predefinita è
10000
sccvn-max-alias-queries-per-accesso
Numero massimo di query alias-oracle che eseguiamo quando cerchiamo ridondanze
per carichi e magazzini. Se viene raggiunto questo limite la ricerca viene interrotta e il caricamento o
negozio non è considerato ridondante. Il numero di query è algoritmico
limitato al numero di negozi su tutti i percorsi dal carico all'ingresso della funzione.
Il numero massimo di query predefinito è 1000.
ira-max-numero-loop
L'IRA utilizza l'allocazione del registro regionale per impostazione predefinita. Se una funzione contiene più
loop rispetto al numero dato da questo parametro, solo al massimo il numero dato di
i loop più frequentemente eseguiti formano le regioni per l'allocazione al registro regionale.
Il valore predefinito del parametro è 100.
dimensione-tabella-di-conflitto-ira-max
Sebbene l'IRA utilizzi un sofisticato algoritmo per comprimere la tabella dei conflitti, il
table può ancora richiedere quantità eccessive di memoria per funzioni enormi. Se la
la tabella dei conflitti per una funzione potrebbe essere maggiore della dimensione in MB fornita da questo
parametro, l'allocatore di registro utilizza invece un più veloce, più semplice e più basso
algoritmo di qualità che non richiede la creazione di una tabella dei conflitti di pseudo-registri.
Il valore predefinito del parametro è 2000.
ira-loop-regs riservati
L'IRA può essere utilizzato per valutare una pressione di registro più accurata nei cicli decisionali
per spostare gli invarianti di ciclo (vedi -O3). Il numero di registri disponibili riservati a
qualche altro scopo è dato da questo parametro. Il valore predefinito di
il parametro è 2, che è il numero minimo di registri necessari per il tipico
Istruzioni. Questo valore è il migliore trovato da numerosi esperimenti.
lra-eredità-ebb-probabilità-cutoff
LRA cerca di riutilizzare i valori ricaricati nei registri negli inns successivi. Questo
l'ottimizzazione si chiama ereditarietà. EBB viene utilizzato come regione per farlo
ottimizzazione. Il parametro definisce una probabilità minima di fall-through edge in
percentuale utilizzata per aggiungere BB all'EBB ereditario in LRA. Il valore predefinito di
il parametro è 40. Il valore è stato scelto da numerose esecuzioni di SPEC2000 su x86-64.
loop-invariante-max-bbs-in-loop
Il movimento invariante del loop può essere molto costoso, sia in fase di compilazione che in
quantità di memoria necessaria in fase di compilazione, con cicli molto grandi. Cicli con più
i blocchi di base di questo parametro non avranno l'ottimizzazione del movimento invariante del ciclo
eseguita su di essi. Il valore predefinito del parametro è 1000 per -O1 e 10000
per -O2 e al di sopra.
loop-max-datarefs-per-datadeps
La creazione di dipendenze di dati è costosa per loop molto grandi. Questo parametro
limita il numero di riferimenti ai dati nei cicli considerati per i dati
analisi della dipendenza Questi grandi loop non sono gestiti dalle ottimizzazioni usando
dipendenze dei dati del ciclo. Il valore predefinito è 1000.
dimensione-max-vartrack
Imposta un numero massimo di slot della tabella hash da utilizzare durante il flusso di dati di monitoraggio delle variabili
analisi di qualsiasi funzione. Se questo limite viene superato con l'inseguimento variabile a
assegnazioni abilitate, l'analisi per quella funzione viene ritentata senza di essa, dopo
rimuovendo tutti i messaggi di debug dalla funzione. Se il limite viene superato anche senza
debug insns, l'analisi del tracciamento var è completamente disabilitata per la funzione.
L'impostazione del parametro a zero lo rende illimitato.
max-vartrack-expr-profondità
Imposta un numero massimo di livelli di ricorsione quando si tenta di mappare i nomi delle variabili o
eseguire il debug di temporanei per valutare le espressioni. Questo scambia il tempo di compilazione per altro
informazioni di debug complete. Se è impostato su un valore troppo basso, valuta le espressioni che sono
disponibile e potrebbe essere rappresentato nelle informazioni di debug potrebbe non essere utilizzato;
l'impostazione di questo valore più alto può consentire al compilatore di trovare un debug più complesso
espressioni, ma il tempo di compilazione e l'utilizzo della memoria possono aumentare. Il valore predefinito è 12.
min-nondebug-insn-uid
Usa uid a partire da questo parametro per insns non di debug. L'intervallo al di sotto del
parametro è riservato esclusivamente agli inns di debug creati da
-fvar-tracciamento-assegnazioni, ma debug insns potrebbe ottenere uid (non sovrapposti) sopra
it se l'intervallo riservato è esaurito.
ipa-sra-ptr-fattore-di-crescita
IPA-SRA sostituisce un puntatore a un aggregato solo con uno o più nuovi parametri
quando la loro dimensione cumulativa è inferiore o uguale a ipa-sra-ptr-fattore-di-crescita volte il
dimensione del parametro del puntatore originale.
sra-max-scalarizzazione-dimensione-Ospeed
sra-max-scalarizzazione-dimensione-Osize
I due passaggi di Riduzione Scalare degli Aggregati (SRA e IPA-SRA) mirano a sostituire
parti scalari di aggregati con usi di variabili scalari indipendenti. Queste
parametri controllano la dimensione massima, in unità di stoccaggio, di aggregato che è
considerato per la sostituzione durante la compilazione per la velocità (sra-max-dimensione-di-scalarizzazione-
Velocità) o dimensione (sra-max-scalarizzazione-dimensione-Osize) rispettivamente.
tm-max-dimensione-aggregata
Quando si effettuano copie di variabili locali del thread in una transazione, questo parametro
specifica la dimensione in byte dopo la quale le variabili vengono salvate con il logging
funzioni invece di salvare/ripristinare coppie di sequenze di codice. Solo questa opzione
si applica quando si utilizza -fgnu-tm.
grafite-max-nb-scop-params
Per evitare effetti esponenziali nelle trasformazioni del ciclo Graphite, il numero di
parametri in una parte di controllo statico (SCoP) è limitato. Il valore predefinito è 10
parametri. Una variabile il cui valore è sconosciuto al momento della compilazione e definito
al di fuori di uno SCoP è un parametro dello SCoP.
grafite-max-bbs-per-funzione
Per evitare effetti esponenziali nel rilevamento di SCoP, la dimensione delle funzioni
analizzato da Graphite è limitato. Il valore predefinito è 100 blocchi di base.
loop-block-size-tile-size
Blocco del ciclo o trasformazioni di strip mining, abilitate con -blocco floop or
-flop-strip-mio, elimina ogni loop nel nido di loop di un dato numero di
iterazioni. La lunghezza della striscia può essere modificata utilizzando il loop-block-size-tile-size
parametro. Il valore predefinito è 51 iterazioni.
loop-unroll-jam-size
Specificare il fattore di srotolamento per il -floop-srotolare-e-jam opzione. Il valore predefinito
è 4.
loop-unroll-jam-profondità
Specificare la dimensione da srotolare (contando dal ciclo più interno) per il
-floop-srotolare-e-jam. Il valore predefinito è 2.
dimensione-elenco-di-valori-ipa-cp
IPA-CP tenta di tenere traccia di tutti i possibili valori e tipi passati a una funzione
parametro per propagarli ed eseguire la devirtualizzazione. ipa-cp-valore-
dimensione-lista è il numero massimo di valori e tipi che memorizza per un formale
parametro di una funzione.
ipa-cp-eval-soglia
IPA-CP calcola il proprio punteggio dell'euristica della redditività della clonazione ed esegue
quelle opportunità di clonazione con punteggi che superano ipa-cp-eval-soglia.
ipa-cp-ricorso-penalità
Penalità percentuale che le funzioni ricorsive riceveranno quando saranno valutate
per la clonazione.
ipa-cp-penalità a chiamata singola
Le funzioni di penalità percentuale che contengono una singola chiamata a un'altra funzione saranno
ricevono quando vengono valutati per la clonazione.
ipa-max-agg-oggetti
IPA-CP è anche in grado di propagare un numero di valori scalari passati in un
aggregato. ipa-max-agg-oggetti controlla il numero massimo di tali valori per uno
parametro.
ipa-cp-loop-suggerimento-bonus
Quando IPA-CP determina che un candidato alla clonazione farebbe il numero di
iterazioni di un ciclo noto, aggiunge un bonus di ipa-cp-loop-suggerimento-bonus ai
punteggio di redditività del candidato.
ipa-cp-array-index-hint-bonus
Quando IPA-CP determina che un candidato alla clonazione farebbe l'indice di un array
accesso noto, aggiunge un bonus di ipa-cp-array-index-hint-bonus ai
punteggio di redditività del candidato.
ipa-max-aa-passi
Durante la sua analisi degli organi di funzione, IPA-CP utilizza l'analisi degli alias al fine di
tenere traccia dei valori puntati dai parametri della funzione. Per non perdere troppo tempo
analizzando enormi funzioni, si arrende e considera tutta la memoria distrutta dopo
l'esame di ipa-max-aa-passi affermazioni che modificano la memoria.
lto-partizioni
Specificare il numero desiderato di partizioni prodotte durante la compilazione WHOPR. Il
il numero di partizioni deve superare il numero di CPU utilizzate per la compilazione. Il
il valore predefinito è 32.
lto-minpartizione
Dimensione della partizione minima per WHOPR (nelle istruzioni stimate). Questo impedisce
spese per suddividere programmi molto piccoli in troppe partizioni.
cxx-max-namespaces-for-diagnostic-help
Il numero massimo di spazi dei nomi da consultare per suggerimenti durante la ricerca del nome C++
non riesce per un identificatore. Il valore predefinito è 1000.
soglia-frequenza di caduta
La massima frequenza di esecuzione relativa (in percentuale) del blocco di destinazione
relativo al blocco originale di un'istruzione per consentire l'affondamento dell'istruzione di a
dichiarazione. Numeri più grandi comportano un affondamento delle dichiarazioni più aggressivo. Il
il valore predefinito è 75. Viene applicato un piccolo aggiustamento positivo per le dichiarazioni con
gli operandi di memoria in quanto sono ancora più redditizi, quindi affondano.
max-negozi-a-sink
Il numero massimo di coppie di negozi condizionali che possono essere affondate. Imposta a 0 se
o vettorizzazione (-ftree-vettorizzare) o if-conversion (-ftree-loop-se-converti)
è disabilitato. Il valore predefinito è 2.
consentire-archivio-data-races
Consenti agli ottimizzatori di introdurre nuove corse di dati nei negozi. Impostare su 1 per consentire,
altrimenti a 0. Questa opzione è abilitata per impostazione predefinita a livello di ottimizzazione - Veloce.
caso-valori-soglia
Il minor numero di valori diversi per i quali è meglio usare una jump-table
invece di un albero di rami condizionali. Se il valore è 0, usa l'impostazione predefinita per
la macchina. Il valore predefinito è 0.
albero-reassoc-width
Imposta il numero massimo di istruzioni eseguite in parallelo nell'albero riassociato.
Questo parametro sovrascrive l'euristica dipendente dalla destinazione utilizzata per impostazione predefinita se non ha
valore zero.
algoritmo-pressione-sched
Scegli tra le due implementazioni disponibili di -fsched-pressione. Algoritmo 1
è l'implementazione originale ed è più probabile che impedisca alle istruzioni di
essere riordinato. L'algoritmo 2 è stato progettato per essere un compromesso tra il
approccio relativamente conservativo adottato dall'algoritmo 1 e piuttosto aggressivo
approccio adottato dallo scheduler predefinito. Si basa più pesantemente sull'avere un
file di registro regolare e classi di pressione di registro accurate. Vedere haifa-sched.c
nelle fonti GCC per maggiori dettagli.
La scelta predefinita dipende dal target.
max-slsr-cand-scan
Imposta il numero massimo di candidati esistenti che vengono considerati quando si cerca un
base per un nuovo candidato alla riduzione della forza in linea retta.
asan-globali
Abilita il rilevamento dell'overflow del buffer per gli oggetti globali. Questo tipo di protezione è
abilitato di default se stai usando -fsanitize=indirizzo opzione. Per disabilitare globale
uso protezione oggetti --parami asan-globali=0.
asan-stack
Abilita il rilevamento dell'overflow del buffer per gli oggetti dello stack. Questo tipo di protezione è
abilitato per impostazione predefinita quando si utilizza-fsanitize=indirizzo. Per disabilitare l'uso della protezione dello stack
--parami asan-pila=0 opzione.
asan-strumento-legge
Abilita il rilevamento dell'overflow del buffer per le letture della memoria. Questo tipo di protezione è
abilitato per impostazione predefinita quando si utilizza -fsanitize=indirizzo. Per disabilitare le letture in memoria
uso di protezione --parami asan-lettura-strumento=0.
asan-strumento-scrive
Abilita il rilevamento dell'overflow del buffer per le scritture in memoria. Questo tipo di protezione è
abilitato per impostazione predefinita quando si utilizza -fsanitize=indirizzo. Per disabilitare le scritture in memoria
uso di protezione --parami asan-strumento-scrive=0 opzione.
asan-memintrin
Abilita il rilevamento per le funzioni integrate. Questo tipo di protezione è abilitato da
predefinito quando si utilizza -fsanitize=indirizzo. Per disabilitare la protezione delle funzioni integrate
uso --parami asan-memintrina=0.
asan-uso-dopo-restituzione
Abilita il rilevamento dell'uso dopo la restituzione. Questo tipo di protezione è abilitato da
predefinito quando si utilizza -fsanitize=indirizzo opzione. Per disabilitare l'uso dopo la restituzione
uso di rilevamento --parami asan-uso-dopo-ritorno=0.
asan-strumentazione-con-soglia-di-chiamata
Se il numero di accessi alla memoria nella funzione da strumentare è maggiore o uguale a
questo numero, usa i callback invece dei controlli in linea. Ad esempio per disabilitare il codice in linea
uso --parami asan-strumentazione-con-soglia-chiamata=0.
chkp-max-dimensione-ctor
I costruttori statici generati da Pointer Bounds Checker possono diventare molto grandi e
aumentare significativamente il tempo di compilazione a livello di ottimizzazione -O1 e superiore. Questo
parametro è un numero massimo di istruzioni in un singolo costruttore generato.
Il valore predefinito è 5000.
max-fsm-percorso-thread-insns
Numero massimo di istruzioni da copiare durante la duplicazione di blocchi su uno stato finito
percorso del thread di salto dell'automa. Il valore predefinito è 100.
lunghezza-filettatura max-fsm
Numero massimo di blocchi di base su un percorso di thread di salto di automi a stati finiti. Il
il valore predefinito è 10.
percorsi-di-thread-max-fsm
Numero massimo di nuovi percorsi di thread di salto da creare per un automa a stati finiti.
L'impostazione predefinita è 50.
Opzioni Controllo , il preprocessore
Queste opzioni controllano il preprocessore C, che viene eseguito su ogni file sorgente C prima dell'effettivo
compilazione.
Se si utilizza il -E opzione, non viene eseguita alcuna operazione tranne la preelaborazione. Alcune di queste opzioni
ha senso solo insieme a -E perché fanno sì che l'uscita del preprocessore sia
inadatto alla compilazione effettiva.
-Wp,opzione
Puoi usare -Wp,opzione per bypassare il driver del compilatore e passare opzione direttamente attraverso
al preprocessore. Se opzione contiene virgole, è suddiviso in più opzioni in
le virgole. Tuttavia, molte opzioni vengono modificate, tradotte o interpretate dal
driver del compilatore prima di essere passato al preprocessore e -Wp bypassa forzatamente
questa fase. L'interfaccia diretta del preprocessore non è documentata e soggetta a
cambiare, quindi quando possibile dovresti evitare di usare -Wp e lascia che sia l'autista a gestire il
opzioni invece.
-Xpreprocessore opzione
Passare opzione come opzione per il preprocessore. Puoi usarlo per fornire sistema-
specifiche opzioni del preprocessore che GCC non riconosce.
Se vuoi passare un'opzione che accetta un argomento, devi usare -Xpreprocessore
due volte, una volta per l'opzione e una volta per l'argomento.
-no-integrato-cpp
Eseguire la preelaborazione come passaggio separato prima della compilazione. Per impostazione predefinita, GCC esegue
pre-elaborazione come parte integrante della tokenizzazione e dell'analisi dell'input. Se questa opzione
viene fornito, il front-end della lingua appropriato (cc1, cc1plus, o cc1obj per C, C++,
e Objective-C, rispettivamente) viene invece invocato due volte, una volta solo per la preelaborazione
e una volta per l'effettiva compilazione dell'input preelaborato. Questa opzione può essere utile
in combinazione con il -B or -involucro opzioni per specificare un preprocessore alternativo o
eseguire un'ulteriore elaborazione della sorgente del programma tra la normale preelaborazione e
compilazione.
-D Nome
Predefinire Nome come macro, con definizione 1.
-D Nome=definizione
Il contenuto di definizione vengono tokenizzati ed elaborati come se apparissero durante
traduzione fase tre in a #define direttiva. In particolare, la definizione sarà
troncato da caratteri di nuova riga incorporati.
Se stai invocando il preprocessore da una shell o da un programma simile a una shell potresti aver bisogno
per usare la sintassi delle virgolette della shell per proteggere caratteri come gli spazi che hanno a
significato nella sintassi della shell.
Se desideri definire una macro simile a una funzione sulla riga di comando, scrivi il suo argomento
elenco racchiuso tra parentesi prima del segno di uguale (se presente). Le parentesi sono
significativo per la maggior parte delle shell, quindi dovrai citare l'opzione. Insieme a sh e csh,
-D'Nome(argomenti...)=definizione' .
-D e -U le opzioni vengono elaborate nell'ordine in cui vengono fornite sulla riga di comando. Tutto
-imacro filetto e -includere filetto le opzioni vengono elaborate dopo tutto -D e -U opzioni.
-U Nome
Annulla qualsiasi definizione precedente di Nome, sia integrato che dotato di a -D opzione.
-undif
Non predefinire macro specifiche del sistema o GCC. Lo standard predefinito
le macro rimangono definite.
-I dir
Aggiungi la directory dir all'elenco delle directory in cui cercare i file di intestazione.
Directory nominate da -I vengono cercati prima che il sistema standard includa le directory.
Se la directory dir è una directory di inclusione standard del sistema, l'opzione viene ignorata per
garantire che l'ordine di ricerca predefinito per le directory di sistema e il trattamento speciale
degli header di sistema non vengono eliminati. Se dir inizia con "=", quindi "=" sarà
sostituito dal prefisso sysroot; vedere --sysroot e -isysroot.
-o filetto
Scrivi output su filetto. Questo è lo stesso che specificare filetto come seconda non opzione
argomento a cpp. gcc ha una diversa interpretazione di un secondo argomento di non opzione,
quindi devi usare -o per specificare il file di output.
-Parete
Attiva tutti gli avvisi facoltativi desiderabili per il codice normale. Al momento questo
is -Wcommento, -Scritte, -Wmulticar e un avviso sulla promozione di interi che causa a
cambio di segno nelle espressioni "#if". Nota che molti degli avvertimenti del preprocessore
sono attivi per impostazione predefinita e non hanno opzioni per controllarli.
-Wcommento
-Wcommenti
Avvisa ogni volta che una sequenza di inizio commento /* appare in a /* commento, o ogni volta che a
backslash-newline appare in a // commento. (Entrambe le forme hanno lo stesso effetto.)
-Scritte
La maggior parte dei trigrammi nei commenti non può influenzare il significato del programma. Tuttavia, a
trigramma che formerebbe una nuova riga con escape (??/ alla fine di una riga) può, da
cambiando dove inizia o finisce il commento. Pertanto, solo trigrammi che si formerebbero
le nuove righe con escape producono avvisi all'interno di un commento.
Questa opzione è implicata da -Parete. Se -Parete non è dato, questa opzione è ancora abilitata
a meno che i trigrafi non siano abilitati. Per ottenere la conversione del trigrafo senza avvisi, ma ottieni
l'altra -Parete avvertenze, uso -trigrafie -Parete -Wno-trigrafie.
-Wtradizionale
Avvisa di alcuni costrutti che si comportano in modo diverso in C tradizionale e ISO. Inoltre
mettere in guardia sui costrutti ISO C che non hanno un equivalente C tradizionale e problematico
costrutti che dovrebbero essere evitati.
-Wundef
Avvisa ogni volta che si incontra un identificatore che non è una macro in un #Se direttiva,
al di fuori di definito. Tali identificatori vengono sostituiti con zero.
-Wunused-macro
Avvisa delle macro definite nel file principale che non sono utilizzate. Una macro è utilizzato se è
ampliato o testato per l'esistenza almeno una volta. Il preprocessore avviserà anche se
la macro non è stata utilizzata nel momento in cui è stata ridefinita o indefinita.
Macro integrate, macro definite sulla riga di comando e macro definite in include
i file non vengono avvisati.
Nota: Se una macro viene effettivamente utilizzata, ma utilizzata solo nei blocchi condizionali ignorati, allora
CPP lo segnalerà come non utilizzato. Per evitare l'avviso in tal caso, potresti migliorare
l'ambito della definizione della macro, ad esempio, spostandola nella prima saltata
bloccare. In alternativa, potresti fornire un uso fittizio con qualcosa come:
#se definito the_macro_causing_the_warning
#endif
-Etichette Wendif
Avvisa ogni volta che #else o un #endif sono seguiti dal testo. Questo di solito accade in
codice del modulo
#se FOO
...
#altro FOO
...
#endif FOO
Il secondo e il terzo "FOO" dovrebbero essere nei commenti, ma spesso non lo sono nei programmi più vecchi.
Questo avviso è attivo per impostazione predefinita.
-Errore
Trasforma tutti gli avvisi in errori reali. Il codice sorgente che attiva gli avvisi sarà
respinto.
-Wsystem-header
Emetti avvisi per il codice nelle intestazioni di sistema. Questi sono normalmente inutili nel trovare
bug nel proprio codice, quindi soppressi. Se sei responsabile del sistema
libreria, potresti volerli vedere.
-w Sopprime tutti gli avvisi, inclusi quelli che GNU CPP emette per impostazione predefinita.
-pedante
Emettere tutte le diagnostiche obbligatorie elencate nello standard C. Alcuni di loro sono rimasti
fuori per impostazione predefinita, poiché si attivano frequentemente su codice innocuo.
-errori-pedanti
Emetti tutte le diagnostiche obbligatorie e trasforma tutte le diagnostiche obbligatorie in errori.
Ciò include la diagnostica obbligatoria che GCC emette senza -pedante ma tratta come
avvertenze.
-M Invece di emettere il risultato della pre-elaborazione, emettere una regola adatta per make
descrivendo le dipendenze del file sorgente principale. Il preprocessore emette uno
make regola contenente il nome del file oggetto per quel file sorgente, i due punti e i nomi
di tutti i file inclusi, compresi quelli provenienti da -includere or -imacro comando-
opzioni di linea.
Se non specificato esplicitamente (con - MT or -MQ), il nome del file oggetto è costituito da
nome del file sorgente con qualsiasi suffisso sostituito con il suffisso del file oggetto e con qualsiasi
parti di directory principali rimosse. Se ci sono molti file inclusi, la regola è
diviso in più righe usando \-nuova linea. La regola non ha comandi.
Questa opzione non sopprime l'output di debug del preprocessore, come -dM. Evitare
mescolando tale output di debug con le regole di dipendenza dovresti specificare esplicitamente il
file di output delle dipendenze con -MF, o usa una variabile d'ambiente come
DIPENDENZE_OUTPUT. L'output di debug verrà comunque inviato al normale flusso di output come
Normale.
Di passaggio -M al conducente implica -E, e sopprime gli avvisi con un implicito -w.
-MM Come -M ma non menzionare i file di intestazione che si trovano nelle directory di intestazione del sistema,
né file di intestazione che sono inclusi, direttamente o indirettamente, da tale intestazione.
Ciò implica che la scelta delle parentesi angolari o delle virgolette doppie in an #includere
direttiva non determina di per sé se tale intestazione apparirà in -MM
uscita di dipendenza. Questo è un leggero cambiamento nella semantica rispetto alle versioni GCC 3.0 e
in precedenza.
-MF filetto
Se usato con -M or -MM, specifica un file in cui scrivere le dipendenze. se no -MF
switch è dato il preprocessore invia le regole nello stesso posto in cui avrebbe inviato
uscita preelaborata.
Se utilizzato con le opzioni del driver -MD or -MMD, -MF sovrascrive la dipendenza predefinita
file di uscita.
-MG In combinazione con un'opzione come -M richiesta di generazione di dipendenza, -MG assume
i file di intestazione mancanti vengono generati file e li aggiunge all'elenco delle dipendenze senza
sollevando un errore. Il nome del file di dipendenza è preso direttamente da "#include"
direttiva senza anteporre alcun percorso. -MG sopprime anche l'output preelaborato, come a
file di intestazione mancante lo rende inutile.
Questa funzione viene utilizzata nell'aggiornamento automatico dei makefile.
-deputato Questa opzione indica a CPP di aggiungere un target fasullo per ogni dipendenza diversa da
main, facendo in modo che ciascuno di essi non dipenda da nulla. Queste regole fittizie aggirano gli errori
make dà se rimuovi i file di intestazione senza aggiornare il Makefile per abbinare.
Questo è un output tipico:
prova.o: prova.c prova.h
prova.h:
- MT bersaglio
Modificare la destinazione della regola emessa dalla generazione delle dipendenze. Per impostazione predefinita, CPP richiede
il nome del file di input principale, elimina qualsiasi componente della directory e qualsiasi suffisso di file
ad esempio .ce aggiunge il solito suffisso oggetto della piattaforma. Il risultato è l'obiettivo.
An - MT L'opzione imposterà la destinazione in modo che sia esattamente la stringa specificata. Se vuoi
obiettivi multipli, puoi specificarli come un singolo argomento per - MT, o usa più
- MT opzioni.
Per esempio, - MT '$(objpfx)foo.o' potrebbe dare
$(objpfx)foo.o: foo.c
-MQ bersaglio
Uguale a - MT, ma cita tutti i caratteri che sono speciali per Make.
-MQ '$(objpfx)foo.o' dà
$$(objpfx)foo.o: foo.c
Il target predefinito viene quotato automaticamente, come se fosse dato con -MQ.
-MD -MD è equivalente -M -MF filetto, salvo che -E non è implicito. L'autista
determina filetto in base al fatto che an -o l'opzione è data. Se lo è, il conducente usa il suo
argomento ma con suffisso .d, altrimenti prende il nome del file di input,
rimuove qualsiasi componente e suffisso della directory e applica a .d suffisso.
If -MD è usato insieme a -E, qualunque -o switch è inteso per specificare il
file di output delle dipendenze, ma se usato senza -E, Ciascun -o si intende specificare a
file oggetto di destinazione.
Dal -E non è implicito, -MD può essere utilizzato per generare un file di output delle dipendenze come a
effetto collaterale del processo di compilazione.
-MMD
Come -MD tranne menzionare solo i file di intestazione dell'utente, non i file di intestazione del sistema.
-fpch-deps
Quando si utilizzano intestazioni precompilate, questo flag farà sì che i flag di output delle dipendenze vengano
elenca anche i file dalle dipendenze dell'intestazione precompilata. Se non specificato solo
l'intestazione precompilata verrebbe elencata e non i file utilizzati per crearla
perché quei file non vengono consultati quando viene utilizzata un'intestazione precompilata.
-fpch-preelaborazione
Questa opzione consente l'uso di un'intestazione precompilata insieme a -E. Inserisce uno speciale
"#pragma", "#pragma GCC pch_preprocess "nome del file"" in uscita per segnare il posto
dove è stata trovata l'intestazione precompilata, e la sua Nome del file. Quando -fpreelaborato è in
uso, GCC riconosce questo "#pragma" e carica il PCH.
Questa opzione è disattivata per impostazione predefinita, perché l'output preelaborato risultante è solo
veramente adatto come input per GCC. Si accende da -salva-temps.
Non dovresti scrivere questo "#pragma" nel tuo codice, ma è sicuro modificarlo
nome file se il file PCH è disponibile in una posizione diversa. Il nome del file potrebbe essere
assoluto o può essere relativo alla directory corrente di GCC.
-x c
-x c ++
-x obiettivo-c
-x assembler-con-cpp
Specificare la lingua di origine: C, C++, Objective-C o assembly. Questo non ha niente a che fare
con conformità agli standard o estensioni; seleziona semplicemente a quale sintassi di base
aspettarsi. Se non fornisci nessuna di queste opzioni, cpp dedurrà la lingua da
estensione del file sorgente: .c, . Cc, .m, o .S. Alcune altre estensioni comuni per
Vengono riconosciuti anche C++ e assembly. Se cpp non riconosce l'estensione, è
tratterà il file come C; questa è la modalità più generica.
Nota: Versioni precedenti di cpp accettate a -Long opzione che ha selezionato sia il
lingua e il livello di conformità agli standard. Questa opzione è stata rimossa perché
è in conflitto con -l opzione.
-std=Standard
-ansi
Specificare lo standard a cui deve conformarsi il codice. Attualmente CPP conosce C
e standard C++; altri potrebbero essere aggiunti in futuro.
Standard potrebbe essere uno di:
"C90"
"C89"
"iso9899:1990"
Lo standard ISO C del 1990. c90 è la consueta abbreviazione per questa versione di
lo standard.
Le -ansi opzione è equivalente a -std=c90.
"iso9899:199409"
Lo standard C del 1990, come modificato nel 1994.
"iso9899:1999"
"C99"
"iso9899:199x"
"c9x"
Lo standard ISO C rivisto, pubblicato nel dicembre 1999. Prima della pubblicazione, questo
era conosciuto come C9X.
"iso9899:2011"
"C11"
"c1x"
Lo standard ISO C rivisto, pubblicato nel dicembre 2011. Prima della pubblicazione, questo
era conosciuto come C1X.
"gnu90"
"gnu89"
Lo standard C del 1990 più le estensioni GNU. Questa è l'impostazione predefinita.
"gnu99"
"gnu9x"
Lo standard C del 1999 più le estensioni GNU.
"gnu11"
"gnu1x"
Lo standard C del 2011 più le estensioni GNU.
"c++98"
Lo standard ISO C++ del 1998 più gli emendamenti.
"gnu++98"
Lo stesso di -std = c ++ 98 più estensioni GNU. Questa è l'impostazione predefinita per il codice C++.
-IO- Dividere il percorso di inclusione. Qualsiasi directory specificata con -I opzioni prima -IO- sono
cercato solo per le intestazioni richieste con "#include"file""; non si cercano
"#includerefile>". Se vengono specificate directory aggiuntive con -I opzioni dopo il
-IO-, quelle directory vengono cercate per tutte #includere direttive.
Inoltre, -IO- inibisce l'uso della directory della directory dei file corrente come
la prima directory di ricerca per "#include"file"". Questa opzione è stata deprecata.
-nostdin
Non cercare file di intestazione nelle directory di sistema standard. Solo le directory
hai specificato con -I opzioni (e la directory del file corrente, se
appropriato) vengono cercati.
-nostdin++
Non cercare i file di intestazione nelle directory standard specifiche di C++, ma fallo comunque
cercare nelle altre directory standard. (Questa opzione viene utilizzata durante la compilazione del C++
biblioteca.)
-includere filetto
Processo filetto come se "#include "file"" apparisse come prima riga della fonte primaria
file. Tuttavia, la prima directory cercata filetto il preprocessore sta funzionando?
elenco invece of la directory contenente il file sorgente principale. Se non trovato
lì, viene cercato nel resto della catena di ricerca "#include "..."" come
Normale.
Se multiplo -includere vengono fornite le opzioni, i file vengono inclusi nell'ordine in cui
appaiono sulla riga di comando.
-imacro filetto
Esattamente come -includere, eccetto che qualsiasi output prodotto dalla scansione filetto viene lanciato
via. Le macro che definisce rimangono definite. Questo ti permette di acquisire tutte le macro
da un'intestazione senza elaborare anche le sue dichiarazioni.
Tutti i file specificati da -imacro vengono elaborati prima di tutti i file specificati da -includere.
-idirafter dir
Cerca dir per i file di intestazione, ma fallo dopo tutte le directory specificate con -I e il
le directory di sistema standard sono state esaurite. dir viene trattato come un sistema include
directory. Se dir inizia con "=", quindi "=" sarà sostituito da sysroot
prefisso; vedere --sysroot e -isysroot.
-iprefisso prefisso
Specificare prefisso come prefisso per il successivo -icon prefisso opzioni. Se il prefisso
rappresenta una directory, dovresti includere la finale /.
-icon prefisso dir
-icon prefisso prima dir
Aggiungere dir al prefisso specificato in precedenza con -iprefisso, e aggiungi il risultato
directory al percorso di ricerca di inclusione. -icon prefisso prima lo mette nello stesso posto -I
voluto; -icon prefisso lo mette dove -idirafter voluto.
-isysroot dir
Questa opzione è come la --sysroot opzione, ma si applica solo ai file di intestazione (eccetto per
Target Darwin, dove si applica sia ai file di intestazione che alle librerie). Vedi il
--sysroot opzione per ulteriori informazioni.
-imultilib dir
Usa il dir come sottodirectory della directory contenente le intestazioni C++ specifiche della destinazione.
-isistema dir
Cerca dir per i file di intestazione, dopo tutte le directory specificate da -I ma prima del
directory di sistema standard. Contrassegnalo come directory di sistema, in modo che ottenga lo stesso
trattamento speciale applicato alle directory di sistema standard. Se dir inizia
con "=", allora "=" sarà sostituito dal prefisso sysroot; vedere --sysroot e
-isysroot.
-quoto dir
Cerca dir solo per i file di intestazione richiesti con "#include"file""; non sono
cercato "#includefile>", prima di tutte le directory specificate da -I e prima del
directory di sistema standard. Se dir inizia con "=", quindi "=" sarà sostituito da
il prefisso sysroot; vedere --sysroot e -isysroot.
-fsolo-direttive
Durante la preelaborazione, gestire le direttive, ma non espandere le macro.
Il comportamento dell'opzione dipende da -E e -fpreelaborato opzioni.
Con -E, la preelaborazione è limitata alla gestione di direttive come "#define",
"#ifdef" e "#errore". Altre operazioni del preprocessore, come espansione macro e
la conversione del trigramma non viene eseguita. Inoltre, il -dd l'opzione è implicitamente
abilitato.
Con -fpreelaborato, la predefinizione della riga di comando e la maggior parte delle macro integrate è
Disabilitato. Vengono gestite macro come "__LINE__", che dipendono dal contesto
normalmente. Ciò consente la compilazione di file precedentemente preelaborati con "-E
-fdirectives-only".
Con entrambi -E e -fpreelaborato, le regole per -fpreelaborato avere la precedenza. Questo
consente la preelaborazione completa dei file precedentemente preelaborati con "-E
-fdirectives-only".
-fdollari-in-identificatori
Accetta $ negli identificatori.
-identificatori-protesi
Accetta nomi di caratteri universali negli identificatori. Questa opzione è abilitata per impostazione predefinita
per C99 (e versioni successive C standard) e C++.
-fno-intestazioni-di-sistema-canoniche
Durante la pre-elaborazione, non abbreviare i percorsi delle intestazioni di sistema con la canonicalizzazione.
-fpreelaborato
Indica al preprocessore che il file di input è già stato preelaborato. Questo
sopprime cose come l'espansione macro, la conversione del trigrafo, la giunzione di nuova riga sfuggita,
e l'elaborazione della maggior parte delle direttive. Il preprocessore riconosce e rimuove comunque
commenti, in modo da poter passare un file preelaborato con -C al compilatore senza
i problemi. In questa modalità il preprocessore integrato è poco più di un tokenizzatore
per le estremità anteriori.
-fpreelaborato è implicito se il file di input ha una delle estensioni .i, .ii or .mi.
Queste sono le estensioni che GCC utilizza per i file preelaborati creati da -salva-temps.
-ftabstop=larghezza
Imposta la distanza tra le tabulazioni. Questo aiuta il preprocessore a riportare la colonna corretta
numeri in avvisi o errori, anche se sulla riga vengono visualizzate schede. Se il valore è inferiore
maggiore di 1 o maggiore di 100, l'opzione viene ignorata. Il valore predefinito è 8.
-fdebug-cpp
Questa opzione è utile solo per il debug di GCC. Se utilizzato con -E, scarica il debug
informazioni sulle mappe di posizione. Ogni token nell'output è preceduto dal dump di
la mappa a cui appartiene la sua posizione. Il dump della mappa che contiene la posizione di un token
sarebbe:
{"P": F ;"F":F ;"L": ;"C": ;"S": ;"M": ;"E": ,"loc": }
Se usato senza -E, questa opzione non ha effetto.
-ftrack-macro-espansione[=livello]
Tieni traccia delle posizioni dei token nelle espansioni macro. Ciò consente al compilatore di emettere
diagnostica sullo stack di espansione macro corrente quando si verifica un errore di compilazione in
una macro espansione. L'uso di questa opzione fa consumare al preprocessore e al compilatore
più memoria. Il livello parametro può essere utilizzato per scegliere il livello di precisione del token
rilevamento della posizione, riducendo così il consumo di memoria, se necessario. Valore 0 of
livello disattiva questa opzione come se no -ftrack-macro-espansione era presente il
la riga di comando. Valore 1 tiene traccia delle posizioni dei token in una modalità degradata per motivi di
sovraccarico di memoria minimo. In questa modalità tutti i token risultanti dall'espansione di an
l'argomento di una macro di tipo funzione ha la stessa posizione. Valore 2 tiene traccia dei token
posizioni completamente. Questo valore è il più affamato di memoria. Quando viene data questa opzione
nessun argomento, il valore del parametro predefinito è 2.
Nota che "-ftrack-macro-expansion=2" è attivato per impostazione predefinita.
-fexec-charset=set di caratteri
Imposta il set di caratteri di esecuzione, utilizzato per stringhe e costanti di caratteri. Il predefinito
è UTF-8. set di caratteri può essere qualsiasi codifica supportata dalla libreria "iconv" del sistema
routine.
-fwide-exec-charset=set di caratteri
Imposta il set di caratteri di esecuzione ampia, utilizzato per stringhe larghe e costanti di caratteri.
Il valore predefinito è UTF-32 o UTF-16, a seconda di quale corrisponde alla larghezza di "wchar_t". Come
con -fexec-set di caratteri, set di caratteri può essere qualsiasi codifica supportata da "iconv" del sistema
routine della biblioteca; tuttavia, avrai problemi con le codifiche che non si adattano
esattamente in "wchar_t".
-finput-charset=set di caratteri
Imposta il set di caratteri di input, utilizzato per la traduzione dal set di caratteri dell'input
file nel set di caratteri sorgente utilizzato da GCC. Se la lingua non specifica, o GCC
non è possibile ottenere queste informazioni dalla locale, l'impostazione predefinita è UTF-8. Questo può essere
sovrascritto dalle impostazioni internazionali o da questa opzione della riga di comando. Attualmente il comando-
l'opzione line ha la precedenza in caso di conflitto. set di caratteri può essere qualsiasi codifica
supportato dalla routine della libreria "iconv" del sistema.
-fdirectory-di-lavoro
Abilita la generazione di linemarker nell'output del preprocessore che consentirà al compilatore
conoscere la directory di lavoro corrente al momento della preelaborazione. Quando questa opzione è
abilitato, il preprocessore emetterà, dopo il linemarker iniziale, un secondo linemarker
con la directory di lavoro corrente seguita da due barre. GCC userà questo
directory, quando è presente nell'input preelaborato, come directory emessa come
la directory di lavoro corrente in alcuni formati di informazioni di debug. Questa opzione è
abilitato implicitamente se le informazioni di debug sono abilitate, ma questo può essere inibito con
la forma negata -fno-directory-di-lavoro. Se il -P flag è presente nel comando
line, questa opzione non ha effetto, poiché non vengono emesse direttive "#line".
-fno-show-colonna
Non stampare i numeri di colonna nella diagnostica. Questo può essere necessario se la diagnostica è
essere scansionato da un programma che non comprende i numeri di colonna, come
dejagnu.
-A predicato=rispondere
Fare un'asserzione con il predicato predicato e rispondi rispondere. Questo modulo è
preferito alla forma più antica -A predicato(rispondere), che è ancora supportato, perché
non usa caratteri speciali della shell.
-A -predicato=rispondere
Annulla un'asserzione con il predicato predicato e rispondi rispondere.
-dCARS
CAR è una sequenza di uno o più dei seguenti caratteri e non deve essere
preceduto da uno spazio. Altri caratteri sono interpretati dal compilatore vero e proprio, oppure
riservati per le versioni future di GCC, e quindi vengono ignorati silenziosamente. Se specifichi
personaggi il cui comportamento è in conflitto, il risultato è indefinito.
M Invece dell'output normale, genera un elenco di #define direttive per tutti i
macro definite durante l'esecuzione del preprocessore, incluse quelle predefinite
macro. Questo ti dà un modo per scoprire cosa è predefinito nella tua versione di
il preprocessore. Supponendo che tu non abbia file foo.h, il comando
tocca foo.h; cpp -dM foo.h
mostrerà tutte le macro predefinite.
Se si utilizza -dM senza il -E opzione, -dM è interpretato come sinonimo di
-fdump-rtl-mach.
D Come M tranne per due aspetti: lo fa non è un includere le macro predefinite e
uscite entrambi , il #define direttive e il risultato della preelaborazione. Entrambi i tipi
di output va al file di output standard.
N Come D, ma emettono solo i nomi delle macro, non le loro espansioni.
I Uscita #includere direttive oltre al risultato della preelaborazione.
U Come D tranne che solo le macro che sono espanse o la cui definizione è testata
nelle direttive del preprocessore, vengono emesse; l'uscita viene ritardata fino all'utilizzo o
prova della macro; e #indif le direttive vengono emesse anche per le macro testate ma
indefinito al momento.
-P Inibire la generazione di linemarker nell'output del preprocessore. Questo potrebbe essere
utile quando si esegue il preprocessore su qualcosa che non è codice C e verrà inviato
a un programma che potrebbe essere confuso dai linemarker.
-C Non scartare i commenti. Tutti i commenti vengono passati al file di output, tranne
per i commenti nelle direttive elaborate, che vengono eliminati insieme alla direttiva.
Dovresti essere preparato agli effetti collaterali durante l'utilizzo -C; fa sì che il preprocessore
trattare i commenti come token a sé stanti. Ad esempio, i commenti che compaiono su
l'inizio di quella che sarebbe una linea direttiva ha l'effetto di trasformare quella linea in un
linea di origine ordinaria, poiché il primo token sulla linea non è più a #.
-CC Non scartare i commenti, anche durante l'espansione della macro. Questo è come -C, ad eccezione
che i commenti contenuti nelle macro vengano passati anche al file di output dove
la macro è espansa.
Oltre agli effetti collaterali del -C opzione, il -CC opzione causa tutto lo stile C++
commenti all'interno di una macro da convertire in commenti in stile C. Questo per prevenire dopo
l'uso di quella macro per commentare inavvertitamente il resto della riga di origine.
Le -CC L'opzione viene generalmente utilizzata per supportare i commenti lint.
-tradizionale-cpp
Cerca di imitare il comportamento dei preprocessori C vecchio stile, al contrario di ISO C
preprocessori.
-trigrafie
Elabora sequenze trigrafiche. Queste sono sequenze di tre caratteri, tutte che iniziano con
??, che sono definiti da ISO C per indicare caratteri singoli. Per esempio, ??/ si
per \, Così '??/n' è un carattere costante per una nuova riga. Per impostazione predefinita, GCC ignora
trigrafi, ma in modalità conformi allo standard li converte. Vedi il -std e -ansi
opzioni.
I nove trigrafi e le loro sostituzioni sono
Trigramma: ??( ??) ??< ??> ??= ??/ ??' ??! ??-
Sostituzione: [ ] { } # \ ^ | ~
-rimappa
Abilita codice speciale per aggirare i file system che consentono solo file molto brevi
nomi, come MS-DOS.
--Aiuto
--target-aiuto
Stampa il testo che descrive tutte le opzioni della riga di comando invece di preelaborare qualsiasi cosa.
-v Modalità dettagliata. Stampa il numero di versione di GNU CPP all'inizio dell'esecuzione e
riporta la forma finale del percorso di inclusione.
-H Stampa il nome di ogni file di intestazione utilizzato, oltre alle altre normali attività. Ogni
il nome è rientrato per mostrare quanto è profondo il #includere pila è. Intestazione precompilata
vengono stampati anche i file, anche se risultano non validi; un precompilato non valido
il file di intestazione viene stampato con ...X e uno valido con ...! .
-versione
--versione
Stampa il numero di versione di GNU CPP. Con un trattino, procedi normalmente alla preelaborazione.
Con due trattini, esci immediatamente.
Di passaggio Opzioni a , il Assembler
Puoi passare le opzioni all'assemblatore.
-Wa,opzione
Passare opzione come opzione per l'assemblatore. Se opzione contiene virgole, è diviso
in più opzioni in corrispondenza delle virgole.
-Xassemblatore opzione
Passare opzione come opzione per l'assemblatore. Puoi usarlo per fornire specifiche del sistema
opzioni assembler che GCC non riconosce.
Se vuoi passare un'opzione che accetta un argomento, devi usare -Xassemblatore due volte,
una volta per l'opzione e una volta per l'argomento.
Opzioni per Collegamento
Queste opzioni entrano in gioco quando il compilatore collega i file oggetto in un eseguibile
file di uscita. Sono privi di significato se il compilatore non esegue un passaggio di collegamento.
nome-file-oggetto
Un nome di file che non termina con uno speciale suffisso riconosciuto è considerato un nome
file oggetto o libreria. (I file oggetto si distinguono dalle librerie dal linker
in base al contenuto del file.) Se il collegamento viene eseguito, questi file oggetto vengono utilizzati come
ingresso al linker.
-c
-S
-E Se viene utilizzata una di queste opzioni, il linker non viene eseguito e i nomi dei file oggetto
non dovrebbero essere usati come argomenti.
-fuse-ld=bfd
Usa il BFD linker invece del linker predefinito.
-fuse-ld=oro
Usa il oro linker invece del linker predefinito.
-lbiblioteca
-l biblioteca
Cerca nella libreria denominata biblioteca durante il collegamento. (La seconda alternativa con il
la libreria come argomento separato è solo per la conformità POSIX e non è consigliata.)
Fa differenza dove nel comando si scrive questa opzione; il linker cerca
ed elabora librerie e file oggetto nell'ordine in cui sono specificati. Così, foo.o
-lz bar.o cerca nella libreria z dopo il file foo.o ma prima bar.o. Se bar.o si riferisce
funzioni in z, tali funzioni potrebbero non essere caricate.
Il linker cerca un elenco standard di directory per la libreria, che in realtà è
un file chiamato libreria.a. Il linker utilizza quindi questo file come se fosse stato specificato
appunto per nome.
Le directory ricercate includono diverse directory di sistema standard più quelle che tu
specificare con -L.
Normalmente i file trovati in questo modo sono file di libreria --- file di archivio i cui membri sono
file oggetto. Il linker gestisce un file di archivio scansionandolo per i membri
che definiscono i simboli che sono stati finora referenziati ma non definiti. Ma se il
il file che viene trovato è un normale file oggetto, è collegato nel solito modo. Il
unica differenza tra l'uso di an -l opzione e specificare un nome di file è quello -l
circonda biblioteca con lib e .a e cerca in diverse directory.
-lobc
Hai bisogno di questo caso speciale del -l opzione per collegare un Objective-C o
Programma Objective-C++.
-nostartfiles
Non utilizzare i file di avvio del sistema standard durante il collegamento. Il sistema standard
le librerie sono usate normalmente, a meno che -nostdlib or -nodefaultlibs viene utilizzato.
-nodefaultlibs
Non utilizzare le librerie di sistema standard durante il collegamento. Solo le librerie che specifichi
vengono passate al linker e le opzioni che specificano il collegamento delle librerie di sistema, come
as -static-libgcc or -libgcc-condivisa, vengono ignorati. Vengono utilizzati i file di avvio standard
normalmente, a meno che -nostartfiles viene utilizzato.
Il compilatore può generare chiamate a "memcmp", "memset", "memcpy" e "memmove". Queste
le voci sono generalmente risolte da voci in libc. Questi punti di ingresso dovrebbero essere
fornito attraverso qualche altro meccanismo quando questa opzione è specificata.
-nostdlib
Non utilizzare i file o le librerie di avvio del sistema standard durante il collegamento. Nessun avvio
file e solo le librerie specificate vengono passate al linker e opzioni
specificando il collegamento delle librerie di sistema, come -static-libgcc or -libgcc-condivisa,
sono ignorati
Il compilatore può generare chiamate a "memcmp", "memset", "memcpy" e "memmove". Queste
le voci sono generalmente risolte da voci in libc. Questi punti di ingresso dovrebbero essere
fornito attraverso qualche altro meccanismo quando questa opzione è specificata.
Una delle librerie standard bypassate da -nostdlib e -nodefaultlibs is libgcc.a, una
libreria di sottoprogrammi interni che GCC utilizza per superare le carenze di particolari
macchine o esigenze speciali per alcune lingue.
Nella maggior parte dei casi, è necessario libgcc.a anche quando vuoi evitare altre librerie standard.
In altre parole, quando specifichi -nostdlib or -nodefaultlibs dovresti di solito
specificare -lgcc anche. Ciò garantisce di non avere riferimenti irrisolti a
subroutine interne della libreria GCC. (Un esempio di tale subroutine interna è
"__main", utilizzato per garantire che vengano chiamati i costruttori C++.)
-torta
Produrre un eseguibile indipendente dalla posizione sui target che lo supportano. Per prevedibile
risultati, è necessario specificare anche lo stesso set di opzioni utilizzato per la compilazione (-fpie,
-fPIEo opzioni secondarie del modello) quando si specifica questa opzione del linker.
-no-torta
Non produrre un eseguibile indipendente dalla posizione.
-rdinamico
Passa la bandiera -export-dinamica al linker ELF, sui target che lo supportano. Questo
indica al linker di aggiungere tutti i simboli, non solo quelli usati, al simbolo dinamico
tavolo. Questa opzione è necessaria per alcuni usi di "dlopen" o per consentire di ottenere
backtraccia dall'interno di un programma.
-s Rimuovere tutte le informazioni sulla tabella dei simboli e sulla rilocazione dall'eseguibile.
-statico
Sui sistemi che supportano il collegamento dinamico, questo impedisce il collegamento con la condivisione
biblioteche. Su altri sistemi, questa opzione non ha effetto.
-condiviso
Produrre un oggetto condiviso che può poi essere collegato con altri oggetti per formare un
eseguibile. Non tutti i sistemi supportano questa opzione. Per risultati prevedibili, devi
specificare anche lo stesso set di opzioni utilizzato per la compilazione (-fpic, -fPIC, o modello
subopzioni) quando si specifica questa opzione del linker.[1]
-libgcc-condivisa
-static-libgcc
Su sistemi che forniscono libcc come libreria condivisa, queste opzioni forzano l'uso di
rispettivamente la versione condivisa o statica. Se nessuna versione condivisa di libcc Prima
compilato quando il compilatore è stato configurato, queste opzioni non hanno effetto.
Ci sono diverse situazioni in cui un'applicazione dovrebbe usare lo shared libcc
invece della versione statica. Il più comune di questi è quando l'applicazione
desidera lanciare e catturare eccezioni tra diverse librerie condivise. In quel caso,
ciascuna delle librerie e l'applicazione stessa dovrebbero usare shared libcc.
Pertanto, i driver G++ e GCJ si aggiungono automaticamente -libgcc-condivisa ogni volta che costruisci
una libreria condivisa o un eseguibile principale, perché i programmi C++ e Java in genere usano
eccezioni, quindi questa è la cosa giusta da fare.
Se, invece, usi il driver GCC per creare librerie condivise, potresti scoprire che
non sono sempre legati al condiviso libcc. Se GCC trova, alla sua configurazione
volta, che hai un linker non GNU o un linker GNU che non supporta l'opzione
--eh-frame-hdr, collega la versione condivisa di libcc nelle biblioteche condivise da
predefinito. Altrimenti, sfrutta il linker e ottimizza il collegamento
con la versione condivisa di libcc, collegandosi alla versione statica di libgcc di
predefinito. Ciò consente alle eccezioni di propagarsi attraverso tali librerie condivise, senza
incorrere in costi di trasferimento al momento del caricamento della biblioteca.
Tuttavia, se si suppone che una libreria o un eseguibile principale generi o catturi eccezioni,
deve collegarlo utilizzando il driver G++ o GCJ, a seconda dei linguaggi utilizzati nel
programma o utilizzando l'opzione -libgcc-condivisa, in modo tale da essere collegato con il condiviso
libcc.
-statico-libasan
Quando il -fsanitize=indirizzo l'opzione viene utilizzata per collegare un programma, il driver GCC
si collega automaticamente contro libasan. Se libasan è disponibile come libreria condivisa e
, il -statico l'opzione non viene utilizzata, quindi questo si collega alla versione condivisa di libasan.
Le -statico-libasan opzione indirizza il driver GCC al collegamento libasan staticamente, senza
necessariamente collegando staticamente altre librerie.
-statico-libtsan
Quando il -fsanitize=filo l'opzione viene utilizzata per collegare un programma, il driver GCC
si collega automaticamente contro libtsan. Se libtsan è disponibile come libreria condivisa e
, il -statico l'opzione non viene utilizzata, quindi questo si collega alla versione condivisa di libtsan.
Le -statico-libtsan opzione indirizza il driver GCC al collegamento libtsan staticamente, senza
necessariamente collegando staticamente altre librerie.
-static-liblsan
Quando il -fsanitize=perdita l'opzione viene utilizzata per collegare un programma, il driver GCC
si collega automaticamente contro libsan. Se libsan è disponibile come libreria condivisa e
, il -statico l'opzione non viene utilizzata, quindi questo si collega alla versione condivisa di libsan.
Le -static-liblsan opzione indirizza il driver GCC al collegamento libsan staticamente, senza
necessariamente collegando staticamente altre librerie.
-statico-libubsan
Quando il -fsanitize=non definito l'opzione viene utilizzata per collegare un programma, il driver GCC
si collega automaticamente contro libbsan. Se libbsan è disponibile come libreria condivisa,
e il -statico l'opzione non viene utilizzata, quindi questo si collega alla versione condivisa di
libbsan. -statico-libubsan opzione indirizza il driver GCC al collegamento libbsan
staticamente, senza necessariamente collegare staticamente altre librerie.
-static-libmpx
Quando il -fcheck-puntatore limiti e -mmpx le opzioni sono usate per collegare un programma, il GCC
il driver si collega automaticamente contro libmpx. Se libmpx è disponibile come condiviso
biblioteca, e il -statico l'opzione non viene utilizzata, quindi questo si collega a shared
versione libmpx. -static-libmpx opzione indirizza il driver GCC al collegamento libmpx
staticamente, senza necessariamente collegare staticamente altre librerie.
-static-libmpxwrapper
Quando il -fcheck-puntatore limiti e -mmpx le opzioni sono usate per collegare un programma senza
anche usando -fno-chkp-use-wrapper, il driver GCC si collega automaticamente a
libmpxwrapper. Se libmpxwrapper è disponibile come libreria condivisa e il -statico
l'opzione non viene utilizzata, quindi questo si collega alla versione condivisa di libmpxwrapper.
-static-libmpxwrapper opzione indirizza il driver GCC al collegamento libmpxwrapper
staticamente, senza necessariamente collegare staticamente altre librerie.
-static-libstdc++
Quando il g ++ programma viene utilizzato per collegare un programma C++, normalmente si collega automaticamente
contro libstdc++. Se libstdc++ è disponibile come libreria condivisa e il -statico
l'opzione non viene utilizzata, quindi questo si collega alla versione condivisa di libstdc++. Questo è
normalmente bene. Tuttavia, a volte è utile congelare la versione di libstdc++
utilizzato dal programma senza arrivare fino a un collegamento completamente statico. Il
-static-libstdc++ l'opzione dirige il g ++ driver da collegare libstdc++ staticamente, senza
necessariamente collegando staticamente altre librerie.
-simbolico
Associa i riferimenti ai simboli globali durante la creazione di un oggetto condiviso. Avverti di qualsiasi
riferimenti non risolti (a meno che non vengano sovrascritti dall'opzione dell'editor dei collegamenti -Xlinker -z
-Xlinker def). Solo pochi sistemi supportano questa opzione.
-T copione
Usa il copione come script del linker. Questa opzione è supportata dalla maggior parte dei sistemi che utilizzano il
linker GNU. Su alcuni target, come target bareboard senza un sistema operativo,
, il -T L'opzione può essere richiesta durante il collegamento per evitare riferimenti a simboli non definiti.
-Xlinker opzione
Passare opzione come opzione per il linker. Puoi usarlo per fornire specifiche del sistema
opzioni del linker che GCC non riconosce.
Se vuoi passare un'opzione che accetta un argomento separato, devi usare -Xlinker
due volte, una volta per l'opzione e una volta per l'argomento. Ad esempio, per passare -affermare
definizioni, devi scrivere -Xlinker -affermare -Xlinker definizioni. Non funziona
scrivere -Xlinker "-affermare definizioni", perché questo passa l'intera stringa come a
singolo argomento, che non è quello che si aspetta il linker.
Quando si usa il linker GNU, di solito è più conveniente passare argomenti al linker
opzioni usando il opzione=APPREZZIAMO sintassi che come argomenti separati. Ad esempio, tu
può specificare -Xlinker -Mappa=output.map anziché -Xlinker -Carta geografica -Xlinker uscita.mappa.
Altri linker potrebbero non supportare questa sintassi per le opzioni della riga di comando.
-Wl,opzione
Passare opzione come opzione per il linker. Se opzione contiene virgole, è diviso in
più opzioni alle virgole. Puoi usare questa sintassi per passare un argomento al
opzione. Per esempio, -Wl,-Mappa,output.map Passi -Carta geografica uscita.mappa al linker. quando
usando il linker GNU, puoi anche ottenere lo stesso effetto con -Wl, -Map = output.map.
NOTA: in Ubuntu 8.10 e versioni successive, per LDFLAGS, l'opzione -Wl,-z,relro viene utilizzato.
Per disabilitare, utilizzare -Wl,-z,norelro.
-u simbolo
Fai finta che il simbolo simbolo non è definito, per forzare il collegamento dei moduli della libreria da definire
esso. Puoi usare -u più volte con simboli diversi per forzare il caricamento di
moduli aggiuntivi della libreria.
-z parola chiave
-z viene passato direttamente al linker insieme alla parola chiave parola chiave. Vedi la sezione
nella documentazione del tuo linker per i valori consentiti e i loro significati.
Opzioni per elenco Cerca
Queste opzioni specificano le directory in cui cercare i file di intestazione, le librerie e le parti
del compilatore:
-Idir
Aggiungi la directory dir all'inizio dell'elenco delle directory da cercare per intestazione
File. Questo può essere usato per sovrascrivere un file di intestazione di sistema, sostituendo il tuo
versione, poiché queste directory vengono cercate prima del file di intestazione del sistema
directory. Tuttavia, non dovresti usare questa opzione per aggiungere directory che contengono
file di intestazione di sistema forniti dal fornitore (usare -isistema per quello). Se ne usi più di uno
-I opzione, le directory vengono scansionate in ordine da sinistra a destra; il sistema standard
le directory vengono dopo.
Se una directory include un sistema standard o una directory specificata con -isistema, è
specificato anche con -I, l' -I l'opzione viene ignorata. La directory è ancora cercata ma
come directory di sistema nella sua posizione normale nella catena di inclusione del sistema. Questo è per
assicurarsi che la procedura di GCC per correggere le intestazioni di sistema difettose e l'ordinazione per il
La direttiva "include_next" non viene modificata inavvertitamente. Se hai davvero bisogno di cambiare
l'ordine di ricerca per le directory di sistema, utilizzare il -nostdin e / o -isistema opzioni.
-iplugindir=dir
Imposta la directory per cercare i plugin passati da -fplugin=Nome invece di
-fplugin=sentiero/Nome.così. Questa opzione non è pensata per essere utilizzata dall'utente, ma solo
passato dall'autista.
-quotodir
Aggiungi la directory dir all'inizio dell'elenco delle directory da cercare per intestazione
file solo per il caso di "#include"file""; non vengono cercati per "#include
<file>", altrimenti proprio come -I.
-Ldir
Aggiungi directory dir all'elenco delle directory da cercare -l.
-Bprefisso
Questa opzione specifica dove trovare gli eseguibili, le librerie, i file di inclusione e
file di dati del compilatore stesso.
Il programma del driver del compilatore esegue uno o più sottoprogrammi cpp, cc1, as e ld.
ci prova prefisso come prefisso per ogni programma che tenta di eseguire, sia con che senza
macchina/versione/.
Per ogni sottoprogramma da eseguire, il driver del compilatore prova prima il -B prefisso, se presente.
Se quel nome non viene trovato, o se -B non è specificato, il driver prova due standard
prefissi, /usr/lib/gcc/ e /usr/local/lib/gcc/. Se nessuno di questi risultati in a
nome del file trovato, viene cercato il nome del programma non modificato utilizzando il
directory specificate nel tuo PERCORSO variabile d'ambiente.
Il compilatore verifica se il percorso fornito da -B si riferisce a una directory e se
necessario aggiunge un carattere separatore di directory alla fine del percorso.
-B i prefissi che specificano efficacemente i nomi delle directory si applicano anche alle librerie nel
linker, perché il compilatore traduce queste opzioni in -L opzioni per il linker.
Si applicano anche per includere file nel preprocessore, perché il compilatore traduce
queste opzioni in -isistema opzioni per il preprocessore. In questo caso, il compilatore
aggiunge includere al prefisso.
Il file di supporto runtime libgcc.a può anche essere cercato utilizzando il -B prefisso, se
necessario. Se non viene trovato lì, vengono provati i due prefissi standard sopra e questo
è tutto. Il file viene escluso dal collegamento se non viene trovato con questi mezzi.
Un altro modo per specificare un prefisso molto simile a -B il prefisso è usare l'ambiente
variabile GCC_EXEC_PREFIX.
Come un kludge speciale, se il percorso fornito da -B is [dir/]palcoN/, Dove N è un numero
nell'intervallo da 0 a 9, quindi viene sostituito da [dir/]includi. Questo è per aiutare con l'avvio-
reggendo il compilatore.
-specifiche=filetto
Processo filetto dopo che il compilatore ha letto lo standard occhiali file, per sovrascrivere
le impostazioni predefinite che gcc il programma del driver utilizza per determinare quali interruttori passare
a cc1, cc1plus, as, ld, ecc. Più di uno -specifiche=filetto può essere specificato sul
riga di comando e vengono elaborati in ordine, da sinistra a destra.
--sysroot=dir
Usa il dir come directory radice logica per intestazioni e librerie. Ad esempio, se
il compilatore normalmente cerca le intestazioni in / usr / include e biblioteche in / Usr / lib, esso
invece cerca dir/usr/include e dir/usr/lib.
Se usi sia questa opzione che il -isysroot opzione, quindi il --sysroot opzione
si applica alle biblioteche, ma il -isysroot l'opzione si applica ai file di intestazione.
Il linker GNU (a partire dalla versione 2.16) ha il supporto necessario per questo
opzione. Se il tuo linker non supporta questa opzione, l'aspetto del file di intestazione di
--sysroot funziona ancora, ma l'aspetto della libreria no.
--no-sysroot-suffisso
Per alcune destinazioni, viene aggiunto un suffisso alla directory principale specificata con --sysroot,
a seconda delle altre opzioni utilizzate, in modo che le intestazioni possano essere trovate ad esempio in
dir/suffisso/usr/include invece di dir/usr/include. Questa opzione disabilita l'aggiunta
di tale suffisso.
-IO- Questa opzione è stata deprecata. Si prega di utilizzare -quoto invece per -I directory prima
, il -IO- e rimuovere il file -IO- opzione. Qualsiasi directory specificata con -I opzioni prima
, il -IO- l'opzione viene cercata solo per il caso di "#include"file""; non sono
cercato "#includefile>".
Se vengono specificate directory aggiuntive con -I opzioni dopo il -IO- opzione, questi
le directory vengono cercate per tutte le direttive "#include". (normalmente contro tutti i -I
le directory vengono utilizzate in questo modo.)
Inoltre, l' -IO- l'opzione inibisce l'uso della directory corrente (dove il
da cui proviene il file di input corrente) come prima directory di ricerca per "#include"file"".
Non c'è modo di ignorare questo effetto di -IO-. Con -IO. puoi specificare la ricerca
la directory corrente quando viene richiamato il compilatore. Non è esattamente quello
uguale a quello che fa il preprocessore per impostazione predefinita, ma spesso è soddisfacente.
-IO- non inibisce l'uso delle directory di sistema standard per i file di intestazione.
Così, -IO- e -nostdin sono indipendenti.
specificando Target Confezionatrici Verticali VFFS e Compiler Versione
Il modo normale per eseguire GCC è eseguire l'eseguibile chiamato gcc, o macchina-gcc quando cross-
compilazione, o macchina-gcc-versione per eseguire una versione diversa da quella installata
ultimo.
Hardware Modelli e Configurazioni
Ogni tipo di macchina di destinazione può avere le proprie opzioni speciali, a partire da -m, scegliere
tra vari modelli o configurazioni hardware --- ad esempio, 68010 vs 68020, flottante
coprocessore o nessuno. Una singola versione installata del compilatore può compilare per qualsiasi modello
o configurazione, secondo le opzioni specificate.
Alcune configurazioni del compilatore supportano anche opzioni speciali aggiuntive, solitamente per
compatibilità con altri compilatori sulla stessa piattaforma.
AAArch64 Opzioni
Queste opzioni sono definite per le implementazioni di AArch64:
-mabi=Nome
Genera codice per il modello di dati specificato. I valori consentiti sono ilp32 per SysV-
come il modello di dati in cui int, long int e pointer sono a 32 bit e lp64 per SysV-like
modello di dati dove int è a 32 bit, ma long int e pointer sono a 64 bit.
L'impostazione predefinita dipende dalla configurazione di destinazione specifica. Notare che l'LP64 e
Gli ABI ILP32 non sono compatibili con il collegamento; devi compilare l'intero programma con lo stesso
ABI e collegamento con un set di librerie compatibile.
-big endian
Genera codice big-endian. Questa è l'impostazione predefinita quando GCC è configurato per un
aarch64_be-*-* bersaglio.
-mgeneral-regs-only
Genera codice che utilizza solo i registri generali.
-mittle-endian
Genera codice little-endian. Questa è l'impostazione predefinita quando GCC è configurato per un
aarch64-*-* ma non un aarch64_be-*-* bersaglio.
-mcmodel=piccolo
Genera codice per il modello di codice minuscolo. Il programma e i suoi simboli staticamente definiti
devono trovarsi entro 1 GB l'uno dall'altro. I puntatori sono a 64 bit. I programmi possono essere staticamente
o collegati dinamicamente. Questo modello non è completamente implementato e per lo più trattato come
piccole.
-mcmodel=piccolo
Genera codice per il modello a codice piccolo. Il programma e la sua definizione statica
i simboli devono trovarsi entro 4 GB l'uno dall'altro. I puntatori sono a 64 bit. I programmi possono essere
collegati staticamente o dinamicamente. Questo è il modello di codice predefinito.
-mcmodel=grande
Genera codice per il modello di codice grande. Questo non fa supposizioni su indirizzi e
dimensioni delle sezioni. I puntatori sono a 64 bit. I programmi possono essere collegati solo staticamente.
-mstrict-align
Non presumere che i riferimenti di memoria non allineati siano gestiti dal sistema.
-puntatore-cornice-foglia-momit
-mno-omit-leaf-frame pointer
Ometti o mantieni il puntatore a cornice nelle funzioni foglia. Il primo comportamento è il
predefinito.
-mtls-dialetto=desc
Utilizzare i descrittori TLS come meccanismo di archiviazione locale del thread per gli accessi dinamici di TLS
variabili. Questa è l'impostazione predefinita.
-mtls-dialect=tradizionale
Usa TLS tradizionale come meccanismo di archiviazione locale del thread per gli accessi dinamici di TLS
variabili.
-mfix-corteccia-a53-835769
-mno-fix-corteccia-a53-835769
Abilitare o disabilitare la soluzione alternativa per il numero di errore ARM Cortex-A53 835769. Questo
comporta l'inserimento di un'istruzione NOP tra le istruzioni di memoria e l'intero a 64 bit
istruzioni ad accumulazione multipla.
-mfix-corteccia-a53-843419
-mno-fix-corteccia-a53-843419
Abilitare o disabilitare la soluzione alternativa per il numero di errore ARM Cortex-A53 843419. Questo
la soluzione erratum viene eseguita al momento del collegamento e questo passerà solo il flag corrispondente
al linker.
-marzo=Nome
Specificare il nome dell'architettura di destinazione, facoltativamente suffisso da uno o più
modificatori di funzionalità. Questa opzione ha la forma -marzo=arco{+[no]caratteristica}*, dove il
solo valore ammissibile per arco is armv8-a. I valori ammissibili per caratteristica sono
documentato nella sottosezione sottostante.
Laddove vengono specificati modificatori di funzionalità in conflitto, viene utilizzata la funzionalità più a destra.
GCC usa questo nome per determinare che tipo di istruzioni può emettere durante la generazione
codice montaggio.
Dove -marzo è specificato senza nessuno dei due -mtune or -mcpu anche essere specificato, il
il codice è sintonizzato per funzionare bene su una gamma di processori di destinazione che implementano il
architettura di destinazione.
-mtune=Nome
Specificare il nome del processore di destinazione per il quale GCC dovrebbe ottimizzare le prestazioni di
il codice. I valori consentiti per questa opzione sono: generico, corteccia-a53, corteccia-a57,
corteccia-a72, exynos-m1, tuono, xgene1.
Inoltre, questa opzione può specificare che GCC dovrebbe ottimizzare le prestazioni del codice
per un sistema big.LITTLE. I valori consentiti per questa opzione sono:
corteccia-a57.corteccia-a53, corteccia-a72.corteccia-a53.
dove nessuno di -mtune=, -mcpu= or -marzo= sono specificati, il codice è sintonizzato per eseguire
bene su una vasta gamma di processori di destinazione.
Questa opzione non può essere suffissata da modificatori di funzionalità.
-mcpu=Nome
Specificare il nome del processore di destinazione, facoltativamente suffisso da una o più funzionalità
modificatori. Questa opzione ha la forma -mcpu=cpu{+[no]caratteristica}*, dove il permesso
valori per cpu sono gli stessi di quelli disponibili per -mtune.
I valori ammissibili per caratteristica sono documentati nella sottosezione sottostante.
Laddove vengono specificati modificatori di funzionalità in conflitto, viene utilizzata la funzionalità più a destra.
GCC usa questo nome per determinare che tipo di istruzioni può emettere durante la generazione
codice assembly (come se da -marzo) e per determinare il processore di destinazione per il quale
accordare per le prestazioni (come se da -mtune). Se questa opzione viene utilizzata insieme a
-marzo or -mtune, quelle opzioni hanno la precedenza sulla parte appropriata di questo
opzione.
-marzo e -mcpu Modificatori di funzionalità
Modificatori di funzionalità utilizzati con -marzo e -mcpu può essere uno dei seguenti:
crc Abilita estensione CRC.
crypto
Abilita l'estensione Crypto. Ciò implica che la SIMD avanzata sia abilitata.
fp Abilita le istruzioni in virgola mobile.
sim
Abilita le istruzioni SIMD avanzate. Ciò implica che le istruzioni in virgola mobile siano
abilitato. Questa è l'impostazione predefinita per tutti i valori possibili correnti per le opzioni -marzo e
-mcpu=.
Adatta Epifania Opzioni
Alcuni degli -m le opzioni sono definite per Adapteva Epiphany:
-metà-file-reg
Non allocare alcun registro nell'intervallo "r32"..."r63". Ciò consente l'esecuzione del codice
varianti hardware prive di questi registri.
-mprefer-breve-insn-regs
Allocare preferibilmente i registri che consentono la generazione di istruzioni brevi. questo può
comporta un aumento del numero di istruzioni, quindi questo può ridurre o aumentare complessivamente
dimensione del codice.
-mbranch-costo=num
Imposta il costo delle filiali a circa num istruzioni "semplici". Questo costo è solo un
euristico e non è garantito che produca risultati coerenti tra le versioni.
-mcsposta
Abilita la generazione di mosse condizionali.
-mnop=num
Emettere num NOP prima di ogni altra istruzione generata.
-mno-soft-cmpsf
Per i confronti a virgola mobile a precisione singola, emettere un'istruzione "fsub" e testare
le bandiere. Questo è più veloce di un confronto software, ma può ottenere risultati errati
in presenza di NaN, o quando si confrontano due diversi piccoli numeri tali che
la loro differenza è calcolata come zero. L'impostazione predefinita è -msoft-cmpsf, Che utilizza
confronti software più lenti, ma conformi a IEEE.
-mstack-offset=num
Imposta l'offset tra la parte superiore dello stack e il puntatore dello stack. Ad esempio, un valore di 8
significa che gli otto byte nell'intervallo "sp+0...sp+7" possono essere utilizzati dalle funzioni foglia
senza allocazione dello stack. Valori diversi da 8 or 16 non sono testati ed è improbabile che lo facciano
opera. Nota anche che questa opzione cambia l'ABI; compilare un programma con a
un offset dello stack diverso da quello con cui le librerie sono state compilate generalmente non lo fa
opera. Questa opzione può essere utile se vuoi valutare se un diverso offset dello stack
ti darebbe un codice migliore, ma usare effettivamente un diverso offset dello stack per costruire
programmi funzionanti, si consiglia di configurare la toolchain con l'apposito
--con-stack-offset=num opzione.
-mno-rotondo-più vicino
Fare in modo che l'utilità di pianificazione presupponga che la modalità di arrotondamento sia stata impostata sul troncamento. Il
l'impostazione predefinita è -mround-più vicino.
-mlong-chiamate
Se non diversamente specificato da un attributo, supponi che tutte le chiamate possano essere oltre il
offset delle istruzioni "b" / "bl", e quindi caricare l'indirizzo della funzione
in un registro prima di effettuare una chiamata (altrimenti diretta). Questa è l'impostazione predefinita.
-mshort-call
Se non diversamente specificato da un attributo, supponiamo che tutte le chiamate dirette siano nell'intervallo
delle istruzioni "b" / "bl", quindi utilizzare queste istruzioni per le chiamate dirette. Il
l'impostazione predefinita è -mlong-chiamate.
-mpiccolo16
Si supponga che gli indirizzi possano essere caricati come valori senza segno a 16 bit. Questo non si applica a
indirizzi di funzione per i quali -mlong-chiamate semantica è in vigore.
-modalità-mfp=modo
Imposta la modalità prevalente dell'unità a virgola mobile. Questo determina il galleggiante-
modalità punto fornita e prevista alla chiamata della funzione e all'ora di ritorno. Fabbricazione
questa modalità corrisponde alla modalità di cui hai prevalentemente bisogno all'avvio della funzione può rendere il tuo
programmi più piccoli e veloci evitando cambi di modalità non necessari.
modo può essere impostato su uno dei seguenti valori:
visitatore
Qualsiasi modalità all'immissione della funzione è valida e viene mantenuta o ripristinata quando la funzione
restituisce e quando chiama altre funzioni. Questa modalità è utile per la compilazione
librerie o altre unità di compilazione che potresti voler incorporare in diverse
programmi con diverse modalità FPU prevalenti e la comodità di poterlo
l'uso di un singolo file oggetto supera le dimensioni e la velocità del sovraccarico per qualsiasi modalità aggiuntiva
commutazione che potrebbe essere necessaria, rispetto a quella che sarebbe necessaria con un più
scelta specifica della modalità FPU prevalente.
troncare
Questaèla modalità usata per i calcoli in virgola mobile con troncamento (cioè round
verso lo zero) modalità di arrotondamento. Ciò include la conversione da virgola mobile a
numero intero.
il più vicino
Questa è la modalità utilizzata per i calcoli in virgola mobile con arrotondamento al più vicino o
modalità di arrotondamento uniforme.
int Questa è la modalità utilizzata per eseguire calcoli interi nella FPU, ad esempio intero
moltiplicare o moltiplicare-e-accumulare intero.
L'impostazione predefinita è -mfp-mode=chiamante
-Mnosplit-lohi
-mno-postin
-mno-postmodifica
Modifiche alla generazione del codice che disabilitano, rispettivamente, la suddivisione dei carichi a 32 bit,
generazione di indirizzi post-incremento e generazione di indirizzi post-modifica. Il
le impostazioni predefinite sono mssplit-lohi, -mpost-ince -mpost-modifica.
-mnovect-doppio
Cambia la modalità SIMD preferita in SImode. L'impostazione predefinita è -mvect-doppio, Che utilizza
DImode come modalità SIMD preferita.
-max-vect-align=num
L'allineamento massimo per i tipi di modalità vettoriale SIMD. num può essere 4 o 8. Il valore predefinito è
8. Si noti che questa è una modifica ABI, anche se molte interfacce di funzioni di libreria lo sono
inalterato se non utilizzano le modalità vettoriali SIMD in luoghi che influiscono sulle dimensioni e/o
allineamento dei tipi rilevanti.
-msplit-vecmove-presto
Il vettore diviso si sposta in singole parole prima di ricaricare. In teoria questo può dare
migliore allocazione dei registri, ma finora sembra essere generalmente il contrario.
-m1reg-reg
Specificare un registro per mantenere la costante -1, il che rende il caricamento piccolo negativo
costanti e alcune maschere di bit più velocemente. Valori ammissibili per reg sono r43 e r63,
che specificano l'uso di quel registro come registro fisso, e nessuna, il che significa che no
registro è utilizzato per questo scopo. L'impostazione predefinita è -m1reg-nessuno.
ARC Opzioni
Le seguenti opzioni controllano la variante di architettura per la quale viene compilato il codice:
-barrel-shifter
Genera istruzioni supportate da barile shifter. Questa è l'impostazione predefinita a meno che
-mcpu=ARC601 è in vigore.
-mcpu=cpu
Imposta il tipo di architettura, l'utilizzo del registro e i parametri di pianificazione delle istruzioni per cpu.
Sono disponibili anche opzioni di alias di scelta rapida per la compatibilità con le versioni precedenti e
convenienza. Valori supportati per cpu sono
ARC600
Compila per ARC600. Alias: -mA6, -mARC600.
ARC601
Compila per ARC601. Alias: -mARC601.
ARC700
Compila per ARC700. Alias: -mA7, -mARC700. Questa è l'impostazione predefinita quando è configurata
con --con-cpu=arc700.
-mdpfp
-mdpfp-compatto
FPX: Genera istruzioni FPX a doppia precisione, ottimizzate per l'implementazione compatta.
-mdpfp-veloce
FPX: Genera istruzioni FPX a doppia precisione, ottimizzate per l'implementazione rapida.
-mno-dpfp-lrsr
Disabilita le istruzioni LR e SR dall'uso dei registri ausiliari dell'estensione FPX.
-mea
Genera istruzioni aritmetiche estese. Attualmente solo "divaw", "add", "subs",
e "sat16" sono supportati. Questo è sempre abilitato per -mcpu=ARC700.
-mno-mpy
Non generare istruzioni mpy per ARC700.
-mm32x16
Genera moltiplicazione a 32x16 bit e istruzioni mac.
-mmul64
Genera istruzioni mul64 e mulu64. Valido solo per -mcpu=ARC600.
-mnorma
Genera istruzioni per le norme. Questa è l'impostazione predefinita se -mcpu=ARC700 è in vigore.
-mspfp
-mspfp-compatto
FPX: Genera istruzioni FPX a precisione singola, ottimizzate per l'implementazione compatta.
-mspfp-veloce
FPX: Genera istruzioni FPX a precisione singola, ottimizzate per l'implementazione rapida.
-msimd
Abilita la generazione di istruzioni ARC SIMD tramite built-in specifici del target. Valido solo
per -mcpu=ARC700.
-msoft-flottante
Questa opzione è stata ignorata; è fornito solo a scopo di compatibilità. Software
il codice in virgola mobile viene emesso per impostazione predefinita e questo valore predefinito può essere sovrascritto da FPX
opzioni; mspfp, mspfp-compatto, o mspfp-veloce per singola precisione, e mdpfp, mdpfp-
compatto, o mdpfp-veloce per doppia precisione.
-mswap
Genera istruzioni di scambio.
Le seguenti opzioni vengono passate all'assemblatore e definiscono anche il preprocessore
simboli macro.
-mdsp-pacchetto
Passato all'assemblatore per abilitare le estensioni DSP Pack A. Imposta anche il
simbolo del preprocessore "__Xdsp_packa".
-mdvbf
Tramandato all'assemblatore per abilitare la doppia estensione a farfalla viterbi. Anche
imposta il simbolo del preprocessore "__Xdvbf".
-Mlock
Trasmesso all'assemblatore per abilitare l'estensione del carico bloccato/condizione del magazzino.
Imposta anche il simbolo del preprocessore "__Xlock".
-mmac-d16
Passato all'assemblatore. Imposta anche il simbolo del preprocessore "__Xxmac_d16".
-MMAC-24
Passato all'assemblatore. Imposta anche il simbolo del preprocessore "__Xxmac_24".
-mrtc
Passato all'assemblatore per abilitare l'estensione Time-Stamp Counter a 64 bit
istruzione. Imposta anche il simbolo del preprocessore "__Xrtsc".
-mswape
Passato all'assemblatore per abilitare l'istruzione di estensione dell'ordine di scambio dei byte.
Imposta anche il simbolo del preprocessore "__Xswape".
-mtelefonia
Trasmesso all'assemblatore per abilitare le istruzioni a doppio e singolo operando per
telefonia. Imposta anche il simbolo del preprocessore "__Xtelephony".
-mxy
Passato all'assemblatore per abilitare l'estensione XY Memory. Imposta anche il
simbolo del preprocessore "__Xxy".
Le seguenti opzioni controllano come viene annotato il codice dell'assieme:
-dimensione
Annota le istruzioni dell'assemblatore con gli indirizzi stimati.
-mannotate-allineare
Spiegare quali considerazioni sull'allineamento portano alla decisione di dare un'istruzione
breve o lungo.
Le seguenti opzioni vengono passate al linker:
-marclinox
Passato al linker, per specificare l'uso dell'emulazione "arclinux". Questa opzione
è abilitato per impostazione predefinita nelle catene di strumenti create per "arc-linux-uclibc" e
"arceb-linux-uclibc" si rivolge quando la profilazione non è richiesta.
-marclinux_prof
Passato al linker, per specificare l'uso dell'emulazione "arclinux_prof". Questo
l'opzione è abilitata per impostazione predefinita nelle catene di strumenti create per "arc-linux-uclibc" e
"arceb-linux-uclibc" si rivolge quando è richiesta la profilazione.
Le seguenti opzioni controllano la semantica del codice generato:
-mepilogo-cfi
Abilita la generazione di informazioni sul frame di chiamata per gli epiloghi.
-mno-epilogo-cfi
Disabilita la generazione di informazioni sul frame di chiamata per gli epiloghi.
-mlong-chiamate
Genera chiamate in entrata come chiamate indirette del registro, fornendo così l'accesso completo
Intervallo di indirizzi a 32 bit.
-medium-chiamate
Non utilizzare un intervallo di indirizzamento inferiore a 25 bit per le chiamate, che è l'offset disponibile
per un'istruzione branch-and-link incondizionata. Esecuzione condizionale della funzione
le chiamate vengono soppresse, per consentire l'uso dell'intervallo a 25 bit, anziché a 21 bit
con branch-and-link condizionale. Questa è l'impostazione predefinita per le catene di strumenti create per
Target "arc-linux-uclibc" e "arceb-linux-uclibc".
-mno-sdata
Non generare riferimenti sdata. Questa è l'impostazione predefinita per le catene di strumenti create per
Target "arc-linux-uclibc" e "arceb-linux-uclibc".
-mucb-mcount
Strumento con chiamate mcount come utilizzato nel codice UCB. Vale a dire fare il conteggio nel chiamato,
non il chiamante. Per impostazione predefinita, la strumentazione ARC conta nel chiamante.
-mcache volatile
Utilizzare gli accessi alla memoria normalmente memorizzati nella cache per i riferimenti volatili. Questa è l'impostazione predefinita.
-mno-cache volatile
Abilita il bypass della cache per i riferimenti volatili.
Le seguenti opzioni ottimizzano la generazione del codice:
-chiamata-maligna
Esegui ottimizzazioni di allineamento per le istruzioni di chiamata.
-mauto-modifica-reg
Abilita l'uso della pre/post modifica con spostamento di registro.
-mbbit-spioncino
Abilita spioncino bbit2.
-mno-brcc
Questa opzione disabilita un passaggio specifico per il target arc_reorg per generare "BRcc"
Istruzioni. Non ha effetto sulla generazione "BRcc" guidata dal pass combinatore.
-mcase-vettore-pcrel
Usa tabelle di casi di commutazione relative al PC: questo consente l'accorciamento della tabella dei casi. Questo è il
predefinito per -Voi.
-mcompact-casesi
Abilita il modello casei compatto. Questa è l'impostazione predefinita per -Voi.
-mno-cond-exec
Disabilita il passaggio specifico di ARCompact per generare istruzioni di esecuzione condizionale. Dovuto
ritardare la pianificazione degli slot e le interazioni tra i numeri degli operandi, le dimensioni letterali,
lunghezze delle istruzioni e il supporto per l'esecuzione condizionale, indipendente dal target
spesso manca il pass per generare l'esecuzione condizionale, quindi la porta ARC ha mantenuto a
pass around speciale che cerca di trovare una generazione di esecuzioni più condizionali
opportunità dopo l'assegnazione dei registri, l'accorciamento delle filiali e la pianificazione degli slot di ritardo
è stato fatto. Questo passaggio generalmente, ma non sempre, migliora le prestazioni e il codice
dimensione, al costo di tempi di compilazione extra, motivo per cui esiste un'opzione per cambiare
spento. Se hai un problema con le istruzioni di chiamata che superano il loro offset consentito
intervallo perché sono condizionati, dovresti prendere in considerazione l'uso -medium-chiamate
anziché.
-mearly-cbranchsi
Abilita l'uso pre-ricaricamento del pattern cbranchsi.
-meexpand-addi
Espandi "adddi3" e "subdi3" al momento della generazione rtl in "add.f", "adc" ecc.
-carichi-minded
Abilitare l'uso di carichi indicizzati. Questo può essere problematico perché alcuni ottimizzatori quindi
supponiamo che esistano negozi indicizzati, il che non è il caso.
-mlra
Abilita l'allocazione del registro locale. Questo è ancora sperimentale per ARC, quindi per impostazione predefinita
il compilatore usa il reload standard (cioè -mno-lra).
-mlra-priorità-nessuna
Non indicare alcuna priorità per i registri di destinazione.
-mlra-priority-compatto
Indicare la priorità del registro di destinazione per r0..r3 / r12..r15.
-mlra-priority-non compatto
Ridurre la priorità del registro di destinazione per r0..r3 / r12..r15.
-mno-millicodice
Quando si ottimizza per le dimensioni (usando -Voi), prologhi ed epiloghi che devono salvare o
ripristinare un gran numero di registri sono spesso abbreviati utilizzando la chiamata a uno speciale
funzione in libgcc; questo è indicato come a millicodice chiamata. Poiché queste chiamate possono rappresentare
problemi di prestazioni e/o causare problemi di collegamento durante il collegamento in modo non standard,
questa opzione viene fornita per disattivare la generazione di chiamate millicode.
-codice-misto
Modifica l'allocazione del registro per aiutare la generazione di istruzioni a 16 bit. Questo generalmente ha
l'effetto di diminuire la dimensione media dell'istruzione aumentando l'istruzione
contare.
-mq-classe
Abilita le alternative all'istruzione 'q'. Questa è l'impostazione predefinita per -Voi.
-Mrcq
Abilita la gestione dei vincoli Rcq: la maggior parte della generazione di codici brevi dipende da questo. Questo è
il predefinito.
-mRcw
Abilita la gestione dei vincoli Rcw - ccfsm condexec dipende principalmente da questo. Questo è il
predefinito.
-msize-livello=livello
Ottimizzazione delle dimensioni per quanto riguarda la lunghezza delle istruzioni e l'allineamento. Il
valori riconosciuti per livello siamo:
0 Nessuna ottimizzazione delle dimensioni. Questo livello è deprecato e trattato come 1.
1 Le istruzioni brevi sono usate opportunisticamente.
2 Inoltre, l'allineamento dei loop e del codice dopo le barriere viene eliminato.
3 Inoltre, l'allineamento dei dati facoltativo viene eliminato e l'opzione Os è abilitato.
Questa impostazione predefinita è 3 quando -Voi è in vigore. Altrimenti, il comportamento quando questo non lo è
set è equivalente a level 1.
-mtune=cpu
Imposta i parametri di pianificazione delle istruzioni per cpu, ignorando qualsiasi implicato da -mcpu=.
Valori supportati per cpu sono
ARC600
Sintonizzare per CPU ARC600.
ARC601
Sintonizzare per CPU ARC601.
ARC700
Tune per cpu ARC700 con blocco moltiplicatore standard.
ARC700-xmac
Sintonizzare la CPU ARC700 con il blocco XMAC.
ARC725D
Sintonizzare la CPU ARC725D.
ARC750D
Sintonizzare la CPU ARC750D.
-costo multiplo=num
Costo da assumere per un'istruzione moltiplicata, con 4 essere uguale a una normale istruzione.
-munalign-prob-soglia=probabilità
Imposta la soglia di probabilità per il disallineamento dei rami. Quando si sintonizza per ARC700 e
ottimizzando per la velocità, vengono preferibilmente emessi rami senza slot di ritardo pieno
non allineato e lungo, a meno che la profilatura non indichi che la probabilità per il ramo di
essere preso è sotto probabilità. Il valore predefinito è (REG_BR_PROB_BASE/2), ovvero 5000.
Le seguenti opzioni sono mantenute per compatibilità con le versioni precedenti, ma ora sono deprecate
e verrà rimosso in una versione futura:
-margonauta
FPX obsoleto.
-big endian
-EB Compila il codice per obiettivi big endian. L'uso di queste opzioni è ora deprecato. Utenti
volendo codice big-endian, dovrebbe usare i target "arceb-elf32" e "arceb-linux-uclibc"
durante la creazione della catena di strumenti, per la quale big-endian è l'impostazione predefinita.
-mittle-endian
-IL Compila il codice per i target little endian. L'uso di queste opzioni è ora deprecato.
Gli utenti che desiderano codice little-endian dovrebbero utilizzare "arc-elf32" e "arc-linux-uclibc"
obiettivi durante la creazione della catena di strumenti, per cui little-endian è l'impostazione predefinita.
-barrel_shifter
Sostituito da -barrel-shifter.
-mdpfp_compatto
Sostituito da -mdpfp-compatto.
-mdpfp_veloce
Sostituito da -mdpfp-veloce.
-mdsp_packa
Sostituito da -mdsp-pacchetto.
-meA
Sostituito da -mea.
-mmac_24
Sostituito da -MMAC-24.
-mmac_d16
Sostituito da -mmac-d16.
-mspfp_compatto
Sostituito da -mspfp-compatto.
-mspfp_veloce
Sostituito da -mspfp-veloce.
-mtune=cpu
Valori arc600, arc601, arc700 e arc700-xmac per cpu sono sostituiti da ARC600, ARC601,
ARC700 e ARC700-xmac rispettivamente
-multicosto=num
Sostituito da -costo multiplo.
ARM Opzioni
Alcuni degli -m le opzioni sono definite per la porta ARM:
-mabi=Nome
Genera codice per l'ABI specificato. I valori ammessi sono: apcs-gnu, atpc, aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,
aapcs-linux e iwmmxt.
-mapcs-frame
Genera uno stack frame conforme allo standard ARM Procedure Call per tutti
funzioni, anche se ciò non è strettamente necessario per la corretta esecuzione del codice.
specificando -puntatore-frame-fomit con questa opzione fa sì che gli stack frame non siano
generato per le funzioni foglia. L'impostazione predefinita è -mno-aps-frame. Questa opzione è
deprecato.
-mapc
Questo è sinonimo di -mapcs-frame ed è deprecato.
-mthumb-interazione
Genera codice che supporti la chiamata tra i set di istruzioni ARM e Thumb.
Senza questa opzione, su architetture pre-v5, i due set di istruzioni non possono essere
utilizzato in modo affidabile all'interno di un programma. L'impostazione predefinita è -mno-pollice-interwork, poiché leggermente
codice più grande viene generato quando -mthumb-interazione è specificato. Nelle configurazioni AAPCS
questa opzione non ha senso.
-mno-sched-prolog
Impedire il riordino delle istruzioni nel prologo della funzione, o la fusione di
quelle istruzioni con le istruzioni nel corpo della funzione. Questo significa che tutto
le funzioni iniziano con un insieme riconoscibile di istruzioni (o di fatto una a scelta
da un piccolo insieme di diversi prologhi di funzioni), e queste informazioni possono essere utilizzate per
individuare l'inizio delle funzioni all'interno di un pezzo di codice eseguibile. L'impostazione predefinita è
-msched-prologo.
-mfloat-abi=Nome
Specifica quale ABI a virgola mobile utilizzare. I valori ammessi sono: morbido, Softfp e
difficile.
specificando morbido fa sì che GCC generi un output contenente chiamate di libreria per floating-
operazioni puntuali. Softfp consente la generazione di codice utilizzando hardware in virgola mobile
istruzioni, ma utilizza ancora le convenzioni di chiamata soft-float. difficile consente
generazione di istruzioni in virgola mobile e utilizza convenzioni di chiamata specifiche della FPU.
L'impostazione predefinita dipende dalla configurazione di destinazione specifica. Nota che l'hard-float
e gli ABI soft-float non sono compatibili con il collegamento; devi compilare l'intero programma con
lo stesso ABI e collegarsi a un set di librerie compatibile.
-mittle-endian
Genera codice per un processore in esecuzione in modalità little-endian. Questa è l'impostazione predefinita per
tutte le configurazioni standard.
-big endian
Genera codice per un processore in esecuzione in modalità big-endian; l'impostazione predefinita è compilare
codice per un processore little-endian.
-marzo=Nome
Specifica il nome dell'architettura ARM di destinazione. GCC usa questo nome per
determinare il tipo di istruzioni che può emettere durante la generazione del codice assembly. Questo
l'opzione può essere utilizzata insieme o al posto di -mcpu= opzione. ammissibile
i nomi sono: armv2, armv2a, armv3, armv3m, armv4, armv4t, armv5, armv5t, armv5e,
armv5te, armv6, armv6j, armv6t2, armv6z, armv6zk, armv6-m, armv7, armv7-a, armv7-r,
armv7-m, armv7e-m, armv7ve, armv8-a, armv8-a+crc, iwmmxt, iwmmxt2, ep9312.
-marzo=armv7ve è l'architettura armv7-a con estensioni di virtualizzazione.
-marzo=armv8-a+crc consente la generazione del codice per l'architettura ARMv8-A insieme a
le estensioni CRC32 opzionali.
-marzo=nativo fa sì che il compilatore rilevi automaticamente l'architettura della build
computer. Al momento, questa funzione è supportata solo su GNU/Linux e non su tutti
si riconoscono le architetture. Se il rilevamento automatico non ha successo, l'opzione non ha
effetto.
-mtune=Nome
Questa opzione specifica il nome del processore ARM di destinazione per il quale GCC dovrebbe sintonizzarsi
l'esecuzione del codice. Per alcune implementazioni ARM possono essere migliori prestazioni
ottenuto utilizzando questa opzione. I nomi consentiti sono: arm2, arm250, arm3, arm6,
arm60, arm600, arm610, arm620, arm7, braccio7m, braccio7d, braccio7dm, arm7di, arm7dmi, arm70,
arm700, braccio700i, arm710, ARM710C, arm7100, arm720, arm7500, braccio7500fe, arm7tdmi,
arm7tdmi-s, braccio710t, braccio720t, braccio740t, braccio forte, braccio forte110, braccio forte1100,
braccio forte1110, arm8, arm810, arm9, braccio9e, arm920, braccio920t, braccio922t, arm946e-s,
arm966e-s, arm968e-s, arm926ej-s, braccio940t, arm9tdmi, arm10tdmi, braccio1020t, arm1026ej-s,
braccio10e, braccio1020e, braccio1022e, braccio1136j-s, braccio1136jf-s, mpcore, mpcorenovfp, braccio1156t2-s,
braccio1156t2f-s, braccio1176jz-s, braccio1176jzf-s, corteccia-a5, corteccia-a7, corteccia-a8, corteccia-a9,
corteccia-a12, corteccia-a15, corteccia-a53, corteccia-a57, corteccia-a72, corteccia-r4, corteccia-r4f,
corteccia-r5, corteccia-r7, corteccia-m7, corteccia-m4, corteccia-m3, corteccia-m1, corteccia-m0,
corteccia-m0plus, corteccia-m1.piccolo-moltiplicato, corteccia-m0.piccolo-moltiplicato,
cortex-m0plus.piccolo-moltiplicato, exynos-m1, Marvel-pj4, xscala, iwmmxt, iwmmxt2, ep9312,
fa526, fa626, fa606te, fa626te, fmp626, fa726te, xgene1.
Inoltre, questa opzione può specificare che GCC dovrebbe ottimizzare le prestazioni del codice
per un sistema big.LITTLE. I nomi consentiti sono: corteccia-a15.corteccia-a7,
corteccia-a57.corteccia-a53, corteccia-a72.corteccia-a53.
-mtune=generico-arco specifica che GCC dovrebbe ottimizzare le prestazioni per una miscela di
processori all'interno dell'architettura arco. L'obiettivo è generare codice che funzioni bene sul
gli attuali processori più popolari, bilanciando tra le ottimizzazioni che avvantaggiano alcuni
CPU della gamma ed evitando le insidie delle prestazioni di altre CPU. Gli effetti di
questa opzione potrebbe cambiare nelle future versioni di GCC man mano che i modelli di CPU vanno e vengono.
-mtune=nativo fa sì che il compilatore rilevi automaticamente la CPU del computer di compilazione. In
presente, questa funzionalità è supportata solo su GNU/Linux e non tutte le architetture lo sono
riconosciuto. Se il rilevamento automatico non ha successo, l'opzione non ha effetto.
-mcpu=Nome
Specifica il nome del processore ARM di destinazione. GCC usa questo nome per derivare il
nome dell'architettura ARM di destinazione (come se specificato da -marzo) e il processore ARM
tipo per il quale eseguire l'ottimizzazione per le prestazioni (come se specificato da -mtune). Dove questa opzione
è usato insieme a -marzo or -mtune, queste opzioni hanno la precedenza su
parte appropriata di questa opzione.
I nomi consentiti per questa opzione sono gli stessi di quelli per -mtune.
-mcpu=generico-arco è anche ammissibile, ed è equivalente a -marzo=arco
-mtune=generico-arco. Vedere -mtune per maggiori informazioni.
-mcpu=nativo fa sì che il compilatore rilevi automaticamente la CPU del computer di compilazione. In
presente, questa funzionalità è supportata solo su GNU/Linux e non tutte le architetture lo sono
riconosciuto. Se il rilevamento automatico non ha successo, l'opzione non ha effetto.
-mfpu=Nome
Questo specifica su quale hardware a virgola mobile (o emulazione hardware) è disponibile
il bersaglio. I nomi consentiti sono: vfp, vfpv3, vfpv3-fp16, vfpv3-d16, vfpv3-d16-fp16,
vfpv3xd, vfpv3xd-fp16, neon, neon-FP16, vfpv4, vfpv4-d16, fpv4-sp-d16, neon-vfpv4,
FPV5-D16, fpv5-sp-d16, fp-armv8, neon-fp-armv8e cripto-neon-fp-armv8.
If -msoft-flottante è specificato questo specifica il formato dei valori a virgola mobile.
Se l'hardware in virgola mobile selezionato include l'estensione NEON (ad es -mfpu=neon),
nota che le operazioni in virgola mobile non sono generate dal passaggio di vettorizzazione automatica di GCC
salvo che -funsafe-math-ottimizzazioni è anche specificato. Questo perché l'hardware NEON
non implementa completamente lo standard IEEE 754 per l'aritmetica in virgola mobile (in
particolari valori denormali sono trattati come zero), quindi l'uso di istruzioni NEON può
portare a una perdita di precisione.
-mfp16-formato=Nome
Specificare il formato del tipo a virgola mobile a mezza precisione "__fp16". ammissibile
i nomi sono nessuna, ieee alternativa; l'impostazione predefinita è nessuna, nel qual caso il "__fp16"
il tipo non è definito.
-mstruttura-dimensione-confine=n
Le dimensioni di tutte le strutture e le unioni sono arrotondate al multiplo del numero di
bit impostati da questa opzione. I valori consentiti sono 8, 32 e 64. Il valore predefinito
varia per le diverse toolchain. Per la toolchain mirata COFF il valore predefinito è
8. Un valore di 64 è consentito solo se l'ABI sottostante lo supporta.
Specificare un numero maggiore può produrre codice più veloce ed efficiente, ma può anche
aumentare le dimensioni del programma. Valori diversi sono potenzialmente incompatibili.
Il codice compilato con un valore non può necessariamente aspettarsi di funzionare con codice o librerie
compilati con un altro valore, se si scambiano informazioni tramite strutture o sindacati.
-mabort-su-mancato ritorno
Genera una chiamata alla funzione "abort" alla fine di una funzione "noreturn". è
eseguito se la funzione tenta di restituire.
-mlong-chiamate
-mno-chiamate lunghe
Dice al compilatore di eseguire chiamate di funzione caricando prima l'indirizzo del
funzione in un registro e quindi eseguire una chiamata di subroutine su questo registro. Questo
l'interruttore è necessario se la funzione di destinazione si trova al di fuori dell'indirizzamento da 64 megabyte
intervallo della versione basata sull'offset dell'istruzione di chiamata della subroutine.
Anche se questo interruttore è abilitato, non tutte le chiamate di funzione vengono trasformate in chiamate lunghe.
L'euristica è che le funzioni statiche, funzioni che hanno lo "short_call"
attributo, funzioni che rientrano nell'ambito di una direttiva "#pragma no_long_calls",
e funzioni le cui definizioni sono già state compilate all'interno del corrente
unità di compilazione non vengono trasformate in lunghe chiamate. Le eccezioni a questa regola sono che
definizioni di funzioni deboli, funzioni con l'attributo "long_call" o la "sezione"
attributo e funzioni che rientrano nell'ambito di una direttiva "#pragma long_calls"
si trasformano sempre in lunghe chiamate.
Questa funzione non è abilitata per impostazione predefinita. Specificando -mno-chiamate lunghe ripristina il
comportamento predefinito, così come l'inserimento delle chiamate di funzione nell'ambito di un "#pragma
direttiva long_calls_off". Nota che queste opzioni non hanno effetto sul modo in cui il compilatore
genera codice per gestire le chiamate di funzione tramite puntatori a funzione.
-mssingle-pic-base
Tratta il registro utilizzato per l'indirizzamento PIC come di sola lettura, piuttosto che caricarlo nel
prologo per ogni funzione. Il sistema di runtime è responsabile dell'inizializzazione di questo
registrarsi con un valore appropriato prima dell'inizio dell'esecuzione.
-registro-mpic=reg
Specificare il registro da utilizzare per l'indirizzamento PIC. Per la custodia base PIC standard, il
il valore predefinito è qualsiasi registro adatto determinato dal compilatore. Per singolo caso base PIC,
l'impostazione predefinita è R9 se il target è basato su EABI o è abilitato il controllo dello stack, altrimenti il
l'impostazione predefinita è R10.
-mpic-data-è-testo-relativo
Supponiamo che ogni segmento di dati sia relativo al segmento di testo al momento del caricamento. Perciò,
consente l'indirizzamento dei dati tramite operazioni relative al PC. Questa opzione è attiva per impostazione predefinita
per obiettivi diversi da VxWorks RTP.
-nome-funzione-mpoke
Scrivi il nome di ogni funzione nella sezione di testo, direttamente prima della funzione
prologo. Il codice generato è simile a questo:
t0
.ascii "arm_poke_function_name", 0
.allineare
t1
.parola 0xff000000 + (t1 - t0)
arm_poke_nome_funzione
movimento ip, sp
stmfd sp!, {fp, ip, lr, pc}
sub fp, IP, #4
Quando si esegue un backtrace dello stack, il codice può ispezionare il valore di "pc" memorizzato in "fp +
0". Se la funzione di traccia guarda quindi alla posizione "pc - 12" e i primi 8 bit sono
set, allora sappiamo che c'è un nome di funzione incorporato immediatamente prima di questo
posizione e ha lunghezza "((pc[-3]) & 0xff000000)".
- pollice
-marma
Seleziona tra la generazione di codice che viene eseguito negli stati ARM e Thumb. L'impostazione predefinita per
la maggior parte delle configurazioni consiste nel generare codice che viene eseguito nello stato ARM, ma l'impostazione predefinita
può essere modificato configurando GCC con il --con-modalità=stato configurare l'opzione.
-mtpcs-telaio
Genera uno stack frame conforme allo standard Thumb Procedure Call per
tutte le funzioni non fogliari. (Una funzione foglia è una che non ne chiama altre
funzioni.) L'impostazione predefinita è -mno-tpcs-frame.
-mtpcs-foglia-frame
Genera uno stack frame conforme allo standard Thumb Procedure Call per
tutte le funzioni fogliari. (Una funzione foglia è una funzione che non chiama altre funzioni.)
L'impostazione predefinita è -mno-apc-cornice-foglia.
-mcallee-super-interazione
Fornisce a tutte le funzioni visibili esternamente nel file in fase di compilazione un'istruzione ARM
set header che passa alla modalità Thumb prima di eseguire il resto della funzione.
Ciò consente di chiamare queste funzioni da codice non interoperativo. Questa opzione è
non valido nelle configurazioni AAPCS perché l'interworking è abilitato per impostazione predefinita.
-mcaller-super-interazione
Consente l'esecuzione corretta delle chiamate tramite puntatori a funzione (incluse le funzioni virtuali)
indipendentemente dal fatto che il codice di destinazione sia stato compilato per l'interazione o meno.
C'è un piccolo sovraccarico nel costo di esecuzione di un puntatore a funzione se questa opzione
è abilitato. Questa opzione non è valida nelle configurazioni AAPCS perché l'interoperabilità è
abilitato per impostazione predefinita.
-mtp=Nome
Specificare il modello di accesso per il puntatore di archiviazione locale del thread. I modelli validi sono
morbido, che genera chiamate a "__aeabi_read_tp", cp15, che recupera il filo
puntatore direttamente da "cp15" (supportato nell'architettura arm6k), e auto, quale
utilizza il miglior metodo disponibile per il processore selezionato. L'impostazione predefinita è
auto.
-mtls-dialetto=dialetto
Specificare il dialetto da utilizzare per accedere all'archiviazione locale del thread. Due dialettos sono
supportato---gnu e gnu2. gnu dialetto seleziona lo schema GNU originale per
supportare modelli TLS dinamici locali e globali. Il gnu2 il dialetto seleziona lo GNU
schema descrittore, che fornisce prestazioni migliori per le librerie condivise. Il GNU
schema descrittore è compatibile con lo schema originale, ma richiede nuove
assembler, linker e supporto per librerie. I modelli TLS di esecuzione iniziale e locale sono
non interessati da questa opzione e utilizzare sempre lo schema originale.
-mword-rilocazioni
Genera solo rilocazioni assolute su valori delle dimensioni di una parola (es. R_ARM_ABS32). Questo è
abilitato di default sui target (uClinux, SymbianOS) dove il runtime loader impone
questa restrizione, e quando -fpic or -fPIC è specificato.
-mfix-corteccia-m3-ldrd
Alcuni core Cortex-M3 possono causare la corruzione dei dati quando le istruzioni "ldrd" con
vengono utilizzati registri di destinazione e base sovrapposti. Questa opzione evita di generare
queste istruzioni. Questa opzione è abilitata per impostazione predefinita quando -mcpu=corteccia-m3 is
specificato.
-accesso-munitario
-mno-accesso-non allineato
Abilita (o disabilita) la lettura e la scrittura di valori a 16 e 32 bit da indirizzi
che non sono allineati a 16 o 32 bit. Per impostazione predefinita, l'accesso non allineato è disabilitato per tutti
pre-ARMv6 e tutte le architetture ARMv6-M e abilitato per tutte le altre architetture. Se
l'accesso non allineato non è abilitato quindi si accede alle parole nelle strutture dati impacchettate a
byte alla volta.
L'attributo ARM "Tag_CPU_unaligned_access" è impostato nel file oggetto generato su
vero o falso, a seconda dell'impostazione di questa opzione. In caso di accesso non allineato
è abilitato, viene definito anche il simbolo del preprocessore "__ARM_FEATURE_UNALIGNED".
-mneon-per-64bit
Consente di utilizzare Neon per gestire operazioni scalari a 64 bit. Questa impostazione è disabilitata per impostazione predefinita
poiché il costo per lo spostamento dei dati dai registri principali a Neon è elevato.
-mslow-flash-dati
Supponiamo che il caricamento dei dati dalla flash sia più lento del recupero delle istruzioni. quindi letterale
il carico è ridotto al minimo per prestazioni migliori. Questa opzione è supportata solo quando
compilazione per il profilo M ARMv7 e disattivato per impostazione predefinita.
-masm-sintassi-unificata
Supponiamo che l'assemblatore in linea utilizzi la sintassi asm unificata. L'impostazione predefinita è attualmente disattivata
che implica sintassi divisa. Attualmente questa opzione è disponibile solo per Thumb1 e
non ha effetto sullo stato ARM e Thumb2. Tuttavia, questo potrebbe cambiare nelle versioni future di
GCC. La sintassi divisa dovrebbe essere considerata deprecata.
-mlimitarlo
Limita la generazione di blocchi IT per conformarsi alle regole di ARMv8. I blocchi IT possono
contengono solo una singola istruzione a 16 bit da un insieme selezionato di istruzioni. Questo
l'opzione è attiva per impostazione predefinita per la modalità Thumb ARMv8.
-mprint-tune-info
Stampa le informazioni sull'ottimizzazione della CPU come commento nel file assembler. Questa è un'opzione utilizzata
solo per test di regressione del compilatore e non destinati all'uso ordinario in
codice di compilazione. Questa opzione è disabilitata di default.
AVR Opzioni
Queste opzioni sono definite per le implementazioni AVR:
-mmcu=MCU
Specificare le architetture del set di istruzioni Atmel AVR (ISA) o il tipo di MCU.
L'impostazione predefinita per questa opzione è@tie{}avr2.
GCC supporta i seguenti dispositivi AVR e ISA:
"av2"
Dispositivi "classici" con fino a 8@tie{}KiB di memoria di programma. MCU@tie{}= "attiny22",
"attiny26", "at90c8534", "at90s2313", "at90s2323", "at90s2333", "at90s2343",
"at90s4414", "at90s4433", "at90s4434", "at90s8515", "at90s8535".
"av25"
Dispositivi "classici" con fino a 8@tie{}KiB di memoria di programma e con il "MOVW"
istruzioni. MCU@tie{}= "ata5272", "ata6616c", "attiny13", "attiny13a",
"attiny2313", "attiny2313a", "attiny24", "attiny24a", "attiny25", "attiny261",
"attiny261a", "attiny43u", "attiny4313", "attiny44", "attiny44a", "attiny441",
"attiny45", "attiny461", "attiny461a", "attiny48", "attiny828", "attiny84",
"attiny84a", "attiny841", "attiny85", "attiny861", "attiny861a", "attiny87",
"attiny88", "at86rf401".
"av3"
Dispositivi "classici" con 16@tie{}KiB fino a 64@tie{}KiB di memoria di programma.
MCU@tie{}= "at43usb355", "at76c711".
"av31"
Dispositivi "classici" con 128@tie{}KiB di memoria di programma. MCU@tie{}= "atmega103",
"at43usb320".
"av35"
Dispositivi "classici" con 16@tie{}KiB fino a 64@tie{}KiB di memoria di programma e con
l'istruzione "MOVW". MCU@tie{}= "ata5505", "ata6617c", "ata664251",
"atmega16u2", "atmega32u2", "atmega8u2", "attiny1634", "attiny167", "at90usb162",
"at90usb82".
"av4"
Dispositivi "potenziati" con fino a 8@tie{}KiB di memoria di programma. MCU@tie{}= "ata6285",
"ata6286", "ata6289", "ata6612c", "atmega48", "atmega48a", "atmega48p",
"atmega48pa", "atmega8", "atmega8a", "atmega8hva", "atmega8515", "atmega8535",
"atmega88", "atmega88a", "atmega88p", "atmega88pa", "at90pwm1", "at90pwm2",
"at90pwm2b", "at90pwm3", "at90pwm3b", "at90pwm81".
"av5"
Dispositivi "potenziati" con 16@tie{}KiB fino a 64@tie{}KiB di memoria di programma.
MCU@tie{}= "ata5702m322", "ata5782", "ata5790", "ata5790n", "ata5795", "ata5831",
"ata6613c", "ata6614q", "atmega16", "atmega16a", "atmega16hva", "atmega16hva2",
"atmega16hvb", "atmega16hvbrevb", "atmega16m1", "atmega16u4", "atmega161",
"atmega162", "atmega163", "atmega164a", "atmega164p", "atmega164pa", "atmega165",
"atmega165a", "atmega165p", "atmega165pa", "atmega168", "atmega168a",
"atmega168p", "atmega168pa", "atmega169", "atmega169a", "atmega169p",
"atmega169pa", "atmega32", "atmega32a", "atmega32c1", "atmega32hvb",
"atmega32hvbrevb", "atmega32m1", "atmega32u4", "atmega32u6", "atmega323",
"atmega324a", "atmega324p", "atmega324pa", "atmega325", "atmega325a",
"atmega325p", "atmega325pa", "atmega3250", "atmega3250a", "atmega3250p",
"atmega3250pa", "atmega328", "atmega328p", "atmega329", "atmega329a",
"atmega329p", "atmega329pa", "atmega3290", "atmega3290a", "atmega3290p",
"atmega3290pa", "atmega406", "atmega64", "atmega64a", "atmega64c1", "atmega64hve",
"atmega64hve2", "atmega64m1", "atmega64rfr2", "atmega640", "atmega644",
"atmega644a", "atmega644p", "atmega644pa", "atmega644rfr2", "atmega645",
"atmega645a", "atmega645p", "atmega6450", "atmega6450a", "atmega6450p",
"atmega649", "atmega649a", "atmega649p", "atmega6490", "atmega6490a",
"atmega6490p", "at90can32", "at90can64", "at90pwm161", "at90pwm216", "at90pwm316",
"at90scr100", "at90usb646", "at90usb647", "at94k", "m3000".
"av51"
Dispositivi "potenziati" con 128@tie{}KiB di memoria di programma. MCU@tie{}= "atmega128",
"atmega128a", "atmega128rfa1", "atmega128rfr2", "atmega1280", "atmega1281",
"atmega1284", "atmega1284p", "atmega1284rfr2", "at90can128", "at90usb1286",
"at90usb1287".
"av6"
Dispositivi "potenziati" con PC a 3 byte, cioè con più di 128@tie{}KiB di programma
memoria. MCU@tie{}= "atmega256rfr2", "atmega2560", "atmega2561", "atmega2564rfr2".
"avrxmega2"
Dispositivi "XMEGA" con più di 8@tie{}KiB e fino a 64@tie{}KiB di memoria di programma.
MCU@tie{}= "atxmega16a4", "atxmega16a4u", "atxmega16c4", "atxmega16d4",
"atxmega16e5", "atxmega32a4", "atxmega32a4u", "atxmega32c3", "atxmega32c4",
"atxmega32d3", "atxmega32d4", "atxmega32e5", "atxmega8e5".
"avrxmega4"
Dispositivi "XMEGA" con più di 64@tie{}KiB e fino a 128@tie{}KiB di programma
memoria. MCU@tie{}= "atxmega64a3", "atxmega64a3u", "atxmega64a4u", "atxmega64b1",
"atxmega64b3", "atxmega64c3", "atxmega64d3", "atxmega64d4".
"avrxmega5"
Dispositivi "XMEGA" con più di 64@tie{}KiB e fino a 128@tie{}KiB di programma
memoria e più di 64@tie{}KiB di RAM. MCU@tie{}= "atxmega64a1",
"atxmega64a1u".
"avrxmega6"
Dispositivi "XMEGA" con più di 128@tie{}KiB di memoria di programma. MCU@cravatta{}=
"atxmega128a3", "atxmega128a3u", "atxmega128b1", "atxmega128b3", "atxmega128c3",
"atxmega128d3", "atxmega128d4", "atxmega192a3", "atxmega192a3u", "atxmega192c3",
"atxmega192d3", "atxmega256a3", "atxmega256a3b", "atxmega256a3bu",
"atxmega256a3u", "atxmega256c3", "atxmega256d3", "atxmega384c3", "atxmega384d3".
"avrxmega7"
Dispositivi "XMEGA" con più di 128@tie{}KiB di memoria di programma e più di
64@tie{}KiB di RAM. MCU@tie{}= "atxmega128a1", "atxmega128a1u", "atxmega128a4u".
"avrtiny"
"TINY" Piccoli dispositivi core con 512@tie{}B fino a 4@tie{}KiB di memoria di programma.
MCU@tie{}= "attiny10", "attiny20", "attiny4", "attiny40", "attiny5", "attiny9".
"av1"
Questo ISA è implementato dal core AVR minimale e supportato solo per assembler.
MCU@tie{}= "attiny11", "attiny12", "attiny15", "attiny28", "at90s1200".
-macculate-args
Accumula argomenti della funzione in uscita e acquisisci/rilascia lo spazio dello stack necessario per
argomenti della funzione in uscita una volta nel prologo/epilogo della funzione. Senza questa opzione,
gli argomenti in uscita vengono inviati prima di chiamare una funzione e visualizzati successivamente.
Il pop degli argomenti dopo la chiamata di funzione può essere costoso su AVR, quindi
accumulare lo spazio dello stack potrebbe portare a eseguibili più piccoli perché gli argomenti devono
da non rimuovere dallo stack dopo tale chiamata di funzione.
Questa opzione può ridurre la dimensione del codice per le funzioni che eseguono più chiamate a
funzioni che ottengono i loro argomenti nello stack come le chiamate a funzioni simili a printf.
-mbranch-costo=costo
Imposta i costi del ramo per le istruzioni condizionali del ramo su costo. Valori ragionevoli
per costo sono piccoli numeri interi non negativi. Il costo del ramo predefinito è 0.
-mcall-prologhi
Le funzioni prologhi/epiloghi sono espansi come chiamate a sottoprogrammi appropriati. Codice
la dimensione è più piccola.
-menta8
Supponiamo che "int" sia un intero a 8 bit. Ciò influisce sulle dimensioni di tutti i tipi: un "char" è 1
byte, un "int" è 1 byte, un "long" è 2 byte e "long long" è 4 byte. Per favore
nota che questa opzione non è conforme agli standard C, ma risulta più piccola
dimensione del codice.
-mn-flash=num
Supponiamo che la memoria flash abbia una dimensione di num volte 64@tie{}KiB.
-mno-interrupt
Il codice generato non è compatibile con gli interrupt hardware. La dimensione del codice è più piccola.
-rilassati
Prova a sostituire "CALL" risp. Istruzione "JMP" dal più breve "RCALL" risp. "RJMP"
istruzione se applicabile. Collocamento -rilassati aggiunge solo il --mlink-rilassati opzione per il
la riga di comando dell'assemblatore e il --relax opzione alla riga di comando del linker.
Il rilassamento del salto viene eseguito dal linker perché gli offset del salto non sono noti prima
codice si trova. Pertanto, il codice assembler generato dal compilatore è lo stesso,
ma le istruzioni nell'eseguibile possono differire dalle istruzioni nell'assemblatore
codice.
Il rilassamento deve essere attivato se sono necessari gli stub del linker, vedere la sezione su "EIND" e
linker stub di seguito.
-mrmw
Supponiamo che il dispositivo supporti le istruzioni Read-Modify-Write "XCH", "LAC", "LAS"
e "LAT".
-msp8
Tratta il registro del puntatore dello stack come un registro a 8 bit, cioè prendi il byte alto di
il puntatore dello stack è zero. In generale, non è necessario impostare manualmente questa opzione.
Questa opzione viene utilizzata internamente dal compilatore per selezionare e creare multilibs per
architetture "avr2" e "avr25". Queste architetture combinano dispositivi con e senza
"SPH". Per qualsiasi impostazione diversa da -mmcu=avr2 or -mmcu=avr25 il driver del compilatore aggiunge
o rimuove questa opzione dalla riga di comando del compilatore propriamente detto, perché il compilatore
quindi sa se il dispositivo o l'architettura ha uno stack pointer a 8 bit e quindi nessun "SPH"
registrarsi o meno.
-mstrict-X
Utilizzare il registro indirizzi "X" nel modo proposto dall'hardware. Ciò significa che "X" è
utilizzato solo nell'indirizzamento indiretto, post-incremento o pre-decremento.
Senza questa opzione, il registro "X" può essere utilizzato allo stesso modo di "Y" o "Z" che
quindi viene emulato da istruzioni aggiuntive. Ad esempio, caricando un valore con
Indirizzamento "X+const" con un piccolo "const < 64" non negativo a un registro Rn is
eseguito come
adiw r26, cost ; X += cost
ld , X ; = *X
sbiw r26, cost ; X -= cost
-pila piccola
Cambia solo gli 8@tie{}bit inferiori del puntatore dello stack.
-nodevicelib
Non collegarsi alla libreria specifica del dispositivo di AVR-LibC "libdev.a".
-Waddr-spazio-convertito
Avvisa delle conversioni tra spazi di indirizzi nel caso in cui l'indirizzo risultante
lo spazio non è contenuto nello spazio degli indirizzi in entrata.
"EIND" e dispositivi con più di 128 Ki Byte di Flash
I puntatori nell'implementazione sono larghi 16@tie{}bit. L'indirizzo di una funzione o etichetta
è rappresentato come indirizzo di parola in modo che i salti e le chiamate indiretti possano indirizzare qualsiasi codice
indirizzo nell'intervallo di 64@tie{}parole Ki.
Per facilitare il salto indiretto su dispositivi con più di 128@tie{}Ki byte di
spazio di memoria del programma, c'è un registro di funzione speciale chiamato "EIND" che funge da
parte più significativa dell'indirizzo di destinazione quando le istruzioni "EICALL" o "EIJMP" sono
Usato.
I salti e le chiamate indiretti su questi dispositivi sono gestiti come segue dal compilatore e sono:
soggetto ad alcune limitazioni:
* Il compilatore non imposta mai "EIND".
* Il compilatore usa implicitamente "EIND" nelle istruzioni "EICALL"/"EIJMP" o potrebbe leggere
"EIND" direttamente per emulare un richiamo/salto indiretto tramite un "RET"
istruzioni.
* Il compilatore presuppone che "EIND" non cambi mai durante il codice di avvio o durante il
applicazione. In particolare, "EIND" non viene salvato/ripristinato in funzione o interruzione
prologo/epilogo di routine del servizio.
* Per le chiamate indirette a funzioni e goto calcolato, il linker genera stub. mozziconi
a volte vengono anche chiamati jump pad trampolini. Pertanto, la chiamata/salto indiretta passa a
un tale stuzzichino. Lo stub contiene un salto diretto all'indirizzo desiderato.
* Il rilassamento del linker deve essere attivato in modo che il linker generi correttamente gli stub
in tutte le situazioni. Vedi l'opzione del compilatore -rilassati e l'opzione del linker --relax.
Ci sono casi angolari in cui il linker dovrebbe generare stub ma si interrompe
senza relax e senza un utile messaggio di errore.
* Lo script del linker predefinito è predisposto per il codice con "EIND = 0". Se si suppone il codice
per lavorare per una configurazione con "EIND != 0", è necessario utilizzare uno script linker personalizzato nell'ordine
per posizionare le sezioni il cui nome inizia con ".trampolines" nel segmento in cui
"EIND" indica.
* Il codice di avvio di libgcc non imposta mai "EIND". Nota che il codice di avvio è una miscela
di codice da libgcc e AVR-LibC. Per l'impatto di AVR-LibC su "EIND", vedere l'AVR-
LibC manuale utente ("http://nongnu.org/avr-libc/user-manual/").
* È legittimo che il codice di avvio specifico dell'utente configuri "EIND" in anticipo, ad esempio tramite
mezzo di codice di inizializzazione situato nella sezione ".init3". Tale codice viene eseguito prima di
codice di avvio generale che inizializza la RAM e chiama i costruttori, ma dopo il bit of
codice di avvio da AVR-LibC che imposta "EIND" al segmento in cui si trova la tabella vettoriale
trova.
#includere
vuoto statico
__attributo__((sezione(".init3"),nudo,usato,nessuna_funzione_strumento))
init3_set_eind (vuoto)
{
__asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t"
"out %i0,r24" :: "n" (&EIND): "r24","memoria");
}
Il simbolo "__trampolines_start" è definito nello script del linker.
* Gli stub sono generati automaticamente dal linker se le seguenti due condizioni sono
con:
-
(Corto per generare stub) così:
LDI r24, lo8(gs( ))
LDI r25, hi8(gs( ))
-
al di fuori il segmento in cui si trovano gli stub.
* Il compilatore emette tali modificatori "gs" per le etichette di codice nelle seguenti situazioni:
-
-
- -mcall-prologhi>
opzione della riga di comando.
-
tabelle è possibile specificare il -fno-salto-tabelle opzione della riga di comando.
-
-
* Passare a indirizzi non simbolici è così non è un supportati:
int main (vuoto)
{
/* Richiama la funzione all'indirizzo word 0x2 */
return ((int(*)(void)) 0x2)();
}
Occorre invece impostare uno stub, ovvero la funzione deve essere richiamata tramite un simbolo
("func_4" nell'esempio):
int main (vuoto)
{
extern int func_4 (vuoto);
/* Richiama la funzione all'indirizzo byte 0x4 */
return fun_4();
}
e l'applicazione essere collegata con -Wl, --defsym,func_4=0x4. In alternativa, "func_4"
può essere definito nello script del linker.
Gestione dei registri delle funzioni speciali "RAMPD", "RAMPX", "RAMPY" e "RAMPZ"
Alcuni dispositivi AVR supportano memorie più grandi della gamma di 64@tie{}KiB a cui è possibile accedere
con puntatori a 16 bit. Per accedere a posizioni di memoria al di fuori di questa gamma di 64@tie{}KiB, il
il contenuto di un registro "RAMP" è usato come parte alta dell'indirizzo: La "X", "Y", "Z"
il registro indirizzi è concatenato con la funzione speciale "RAMPX", "RAMPY", "RAMPZ"
registrarsi, rispettivamente, per ottenere un indirizzo ampio. Allo stesso modo, "RAMPD" è usato insieme a
indirizzamento diretto.
* Il codice di avvio inizializza i registri della funzione speciale "RAMP" con zero.
* Se un AVR Detto Indirizzo Spazi, denominati indirizzo spazio diverso da generico o "__flash" è
utilizzato, quindi "RAMPZ" viene impostato come necessario prima dell'operazione.
* Se il dispositivo supporta RAM maggiore di 64@tie{}KiB e il compilatore deve cambiare
"RAMPZ" per eseguire un'operazione, "RAMPZ" viene azzerato dopo l'operazione.
* Se il dispositivo è dotato di un registro "RAMP" specifico, il prologo/epilogo ISR
salva/ripristina quell'SFR e lo inizializza con zero nel caso in cui il codice ISR possa
(implicitamente) usarlo.
* La RAM maggiore di 64@tie{}KiB non è supportata da GCC per i target AVR. Se usi
assemblatore in linea per leggere da posizioni al di fuori dell'intervallo di indirizzi a 16 bit e modificare
uno dei registri "RAMP", è necessario azzerarlo dopo l'accesso.
Macro integrate nell'AVR
GCC definisce diverse macro integrate in modo che il codice utente possa verificare la presenza o
assenza di caratteristiche. Quasi tutte le seguenti macro integrate vengono dedotte dal dispositivo
capacità e quindi innescato dal -mmcu= opzione della riga di comando.
Per ulteriori macro integrate specifiche per AVR, vedere AVR Detto Indirizzo Spazi e AVR Built-in
funzioni.
"__AVR_ARCH__"
Macro incorporata che si risolve in un numero decimale che identifica l'architettura e
dipende dal -mmcu=MCU opzione. I valori possibili sono:
2, 25, 3, 31, 35, 4, 5, 51, 6
per MCU="avr2", "avr25", "avr3", "avr31", "avr35", "avr4", "avr5", "avr51", "avr6",
rispettivamente e
100, 102, 104, 105, 106, 107
per MCU="avrtiny", "avrxmega2", "avrxmega4", "avrxmega5", "avrxmega6", "avrxmega7",
rispettivamente. Se MCU specifica un dispositivo, questa macro incorporata è impostata di conseguenza. Per
esempio, con -mmcu=atmega8 la macro è definita a 4.
"__AVR_Dispositivo__"
Configurazione -mmcu=dispositivo definisce questa macro incorporata che riflette il nome del dispositivo. Per
esempio, -mmcu=atmega8 definisce la macro integrata "__AVR_ATmega8__", -mmcu=attiny261a
definisce "__AVR_ATtiny261A__", ecc.
I nomi delle macro integrate seguono lo schema "__AVR_Dispositivo__" where Dispositivo Europe è
nome del dispositivo come dal manuale utente dell'AVR. La differenza tra Dispositivo nel built-in
macro e dispositivo in -mmcu=dispositivo è che quest'ultimo è sempre minuscolo.
If dispositivo non è un dispositivo ma solo un'architettura di base come avr51, questa macro non lo è
definito.
"__AVR_DEVICE_NAME__"
Configurazione -mmcu=dispositivo definisce questa macro incorporata sul nome del dispositivo. Per esempio,
con -mmcu=atmega8 la macro è definita "atmega8".
If dispositivo non è un dispositivo ma solo un'architettura di base come avr51, questa macro non lo è
definito.
"__AVR_XMEGA__"
Il dispositivo/architettura appartiene alla famiglia di dispositivi XMEGA.
"__AVR_HAVE_ELPM__"
Il dispositivo ha l'istruzione "ELPM".
"__AVR_HAVE_ELPMX__"
Il dispositivo ha il "ELPM Rn, Z" e "ELPM Rn,Z+" istruzioni.
"__AVR_HAVE_MOVW__"
Il dispositivo ha l'istruzione "MOVW" per eseguire spostamenti di registro-registro a 16 bit.
"__AVR_HAVE_LPMX__"
Il dispositivo ha il "LPM Rn, Z" e "LPM Rn,Z+" istruzioni.
"__AVR_HAVE_MUL__"
Il dispositivo ha un moltiplicatore hardware.
"__AVR_HAVE_JMP_CALL__"
Il dispositivo ha le istruzioni "JMP" e "CALL". Questo è il caso dei dispositivi con
almeno 16@tie{}KiB di memoria del programma.
"__AVR_HAVE_EIJMP_EICALL__"
"__AVR_3_BYTE_PC__"
Il dispositivo ha le istruzioni "EIJMP" e "EICALL". Questo è il caso dei dispositivi
con più di 128@tie{}KiB di memoria di programma. Questo significa anche che il programma
contatore (PC) è largo 3@tie{}byte.
"__AVR_2_BYTE_PC__"
Il contatore del programma (PC) è largo 2@tie{}byte. Questo è il caso di dispositivi fino a
128@tie{}KiB di memoria del programma.
"__AVR_HAVE_8BIT_SP__"
"__AVR_HAVE_16BIT_SP__"
Il registro del puntatore dello stack (SP) viene trattato come registro a 8 bit rispettivamente a 16 bit da
il compilatore. La definizione di queste macro è influenzata da -pila piccola.
"__AVR_HAVE_SPH__"
"__AVR_SP8__"
Il dispositivo ha il registro di funzione speciale SPH (high part of stack pointer) o ha
un puntatore allo stack a 8 bit, rispettivamente. La definizione di queste macro è influenzata da
-mmcu= e nei casi di -mmcu=avr2 e -mmcu=avr25 anche da -msp8.
"__AVR_HAVE_RAMPD__"
"__AVR_HAVE_RAMPX__"
"__AVR_HAVE_RAMPY__"
"__AVR_HAVE_RAMPZ__"
Il dispositivo ha il registro delle funzioni speciali "RAMPD", "RAMPX", "RAMPY", "RAMPZ",
rispettivamente.
"__NO_INTERRUZIONI__"
Questa macro riflette il -mno-interrupt opzione della riga di comando.
"__AVR_ERRATA_SKIP__"
"__AVR_ERRATA_SKIP_JMP_CALL__"
Alcuni dispositivi AVR (AT90S8515, ATmega103) non devono saltare le istruzioni a 32 bit a causa di a
errore hardware. Le istruzioni di salto sono "SBRS", "SBRC", "SBIS", "SBIC" e "CPSE".
La seconda macro è definita solo se è impostato anche "__AVR_HAVE_JMP_CALL__".
"__AVR_ISA_RMW__"
Il dispositivo dispone di istruzioni di lettura-modifica-scrittura (XCH, LAC, LAS e LAT).
"__AVR_SFR_OFFSET__=compensare"
Istruzioni che possono indirizzare direttamente i registri di funzioni speciali di I/O come "IN",
"OUT", "SBI", ecc. possono utilizzare un indirizzo diverso come se fosse indirizzato da un'istruzione a
accedere alla RAM come "LD" o "STS". Questo offset dipende dall'architettura del dispositivo e ha
da sottrarre all'indirizzo RAM per ottenere il rispettivo indirizzo I/O@tie{}.
"__WITH_AVRLIBC__"
Il compilatore è configurato per essere utilizzato insieme ad AVR-Libc. Vedi il --con-avrlibc
configurare l'opzione.
Blackfin Opzioni
-mcpu=cpu[-sirevisione]
Specifica il nome del processore Blackfin di destinazione. Attualmente, cpu può essere uno di
bf512, bf514, bf516, bf518, bf522, bf523, bf524, bf525, bf526, bf527, bf531, bf532,
bf533, bf534, bf536, bf537, bf538, bf539, bf542, bf544, bf547, bf548, bf549, bf542m,
bf544m, bf547m, bf548m, bf549m, bf561, bf592.
Facoltativo sirevisione specifica la revisione del silicio del target Blackfin
processore. Eventuali soluzioni alternative disponibili per la revisione del silicio di destinazione sono abilitate.
If sirevisione is nessuna, non sono abilitate soluzioni alternative. Se sirevisione is in qualsiasi, tutti
le soluzioni alternative per il processore di destinazione sono abilitate. La macro "__SILICON_REVISION__"
è definito da due cifre esadecimali che rappresentano i numeri maggiore e minore nel
revisione del silicio. Se sirevisione is nessuna, "__SILICON_REVISION__" non è definito.
If sirevisione is in qualsiasi, "__SILICON_REVISION__" è definito come 0xffff. Se questo
opzionale sirevisione non viene utilizzato, GCC presuppone l'ultima revisione nota del silicio del
processore Blackfin mirato.
GCC definisce una macro del preprocessore per lo specificato cpu. Per l' bfin-elfo catena degli attrezzi,
questa opzione fa sì che il BSP hardware fornito da libgloss sia collegato in if -msim is
non data.
Senza questa opzione, bf532 viene utilizzato come processore per impostazione predefinita.
Nota che il supporto per bf561 è incompleto. Per bf561, solo la macro del preprocessore è
definito.
-msim
Specifica che il programma verrà eseguito sul simulatore. Questo causa il simulatore
BSP fornito da libgloss da collegare. Questa opzione ha effetto solo per bfin-elfo
catena degli strumenti. Alcune altre opzioni, come -mid-libreria-condivisa e -mfdpic, implicare
-msim.
-puntatore-cornice-foglia-momit
Non tenere il puntatore a frame in un registro per le funzioni foglia. Questo evita il
istruzioni per salvare, impostare e ripristinare i puntatori dei frame e creare un registro aggiuntivo
disponibile nelle funzioni foglia. L'opzione -puntatore-frame-fomit rimuove il telaio
puntatore per tutte le funzioni, il che potrebbe rendere più difficile il debug.
-mspecld-anomalia
Quando abilitato, il compilatore assicura che il codice generato non contenga
carichi speculativi dopo le istruzioni di salto. Se si utilizza questa opzione,
"__WORKAROUND_SPECULATIVE_LOADS" è definito.
-mno-specld-anomalia
Non generare codice aggiuntivo per evitare che si verifichino carichi speculativi.
-mcsync-anomalia
Quando abilitato, il compilatore assicura che il codice generato non contenga CSYNC o
Istruzioni SSYNC troppo presto dopo i rami condizionali. Se si utilizza questa opzione,
"__WORKAROUND_SPECULATIVE_SYNCS" è definito.
-mno-csync-anomalia
Non generare codice aggiuntivo per evitare che si verifichino anche istruzioni CSYNC o SSYNC
subito dopo un ramo condizionale.
-mbasso-64k
Quando abilitato, il compilatore è libero di sfruttare la consapevolezza che l'intero
programma si inserisce nel basso 64k di memoria.
-mno-basso-64k
Supponiamo che il programma sia arbitrariamente grande. Questa è l'impostazione predefinita.
-mstack-check-l1
Eseguire il controllo dello stack utilizzando le informazioni inserite nella memoria scratchpad L1 da uClinux
kernel.
-mid-libreria-condivisa
Genera codice che supporti le librerie condivise tramite il metodo dell'ID libreria. Questo permette
per eseguire librerie sul posto e condivise in un ambiente senza memoria virtuale
gestione. Questa opzione implica -fPIC. Con un bfin-elfo target, questa opzione implica
-msim.
-mno-id-libreria-condivisa
Genera codice che non presuppone l'utilizzo di librerie condivise basate su ID. Questo è
il predefinito.
-mleaf-id-libreria-condivisa
Genera codice che supporti le librerie condivise tramite il metodo dell'ID libreria, ma presuppone
che questa libreria o eseguibile non si collegherà a nessun'altra libreria condivisa ID.
Ciò consente al compilatore di utilizzare codice più veloce per salti e chiamate.
-mno-leaf-id-libreria-condivisa
Non dare per scontato che il codice in fase di compilazione non si colleghi a nessuna libreria condivisa ID.
Viene generato un codice più lento per jump e call insns.
-m-id-libreria-condivisa=n
Specifica il numero di identificazione della libreria condivisa basata su ID in fase di compilazione.
Specificare un valore di 0 genera un codice più compatto; specificando altri valori forze
l'assegnazione di quel numero alla libreria corrente ma non è più spazio- o tempo-
efficiente rispetto all'omissione di questa opzione.
-msep-dati
Genera codice che consente di posizionare il segmento di dati in un'area di memoria diversa
dal segmento di testo. Ciò consente di eseguire sul posto in un ambiente senza
gestione della memoria virtuale eliminando le rilocazioni contro la sezione di testo.
-mno-set-data
Genera codice che presuppone che il segmento di dati segua il segmento di testo. Questo è
il predefinito.
-mlong-chiamate
-mno-chiamate lunghe
Dice al compilatore di eseguire chiamate di funzione caricando prima l'indirizzo del
funzione in un registro e quindi eseguire una chiamata di subroutine su questo registro. Questo
l'interruttore è necessario se la funzione di destinazione si trova al di fuori dell'intervallo di indirizzamento a 24 bit di
la versione basata sull'offset dell'istruzione di chiamata della subroutine.
Questa funzione non è abilitata per impostazione predefinita. Specificando -mno-chiamate lunghe ripristina il
comportamento predefinito. Nota che queste opzioni non hanno effetto su come il compilatore genera
codice per gestire le chiamate di funzione tramite puntatori a funzione.
-mfast-fp
Collegamento con la libreria in virgola mobile veloce. Questa libreria rilassa parte dell'IEEE
regole dello standard in virgola mobile per il controllo degli input rispetto a Not-a-Number (NAN), nel
interesse di prestazione.
-minline-plt
Abilita l'inlining delle voci PLT nelle chiamate di funzione a funzioni che non sono note
legarsi localmente. Non ha effetto senza -mfdpic.
-multicore
Crea un'applicazione standalone per processori Blackfin multicore. Questa opzione fa sì che
file di avvio corretti e script di collegamento che supportano il multicore da utilizzare e definisce il
macro "__BFIN_MULTICORE". Può essere utilizzato solo con -mcpu=bf561[-sirevisione].
Questa opzione può essere utilizzata con -mcorea or -mcoreb, che seleziona l'unica applicazione-
modello di programmazione per core. Privo di -mcorea or -mcoreb, l'
viene utilizzato il modello di programmazione single-application/dual-core. In questo modello, il principale
la funzione di Core B dovrebbe essere denominata "coreb_main".
Se questa opzione non viene utilizzata, viene utilizzato il modello di programmazione dell'applicazione single-core.
-mcorea
Creare un'applicazione autonoma per Core A di BF561 quando si utilizza un'applicazione per
modello di programmazione di base. File di avvio corretti e script di collegamento vengono utilizzati per supportare Core
A, e viene definita la macro "__BFIN_COREA". Questa opzione può essere utilizzata solo in
congiunzione con -multicore.
-mcoreb
Creare un'applicazione autonoma per Core B di BF561 quando si utilizza un'applicazione per
modello di programmazione di base. File di avvio corretti e script di collegamento vengono utilizzati per supportare Core
B e viene definita la macro "__BFIN_COREB". Quando viene utilizzata questa opzione, "coreb_main"
dovrebbe essere usato al posto di "main". Questa opzione può essere utilizzata solo in combinazione con
-multicore.
-msdram
Crea un'applicazione autonoma per SDRAM. Vengono utilizzati file di avvio e script di collegamento corretti
per inserire l'applicazione in SDRAM e viene definita la macro "__BFIN_SDRAM". Il
loader dovrebbe inizializzare la SDRAM prima di caricare l'applicazione.
-microfono
Si supponga che gli ICPLB siano abilitati in fase di esecuzione. Questo ha un effetto su alcune anomalie
soluzioni alternative. Per i target Linux, l'impostazione predefinita prevede che gli ICPLB siano abilitati; per
applicazioni autonome l'impostazione predefinita è disattivata.
C6X Opzioni
-marzo=Nome
Specifica il nome dell'architettura di destinazione. GCC usa questo nome per determinare
che tipo di istruzioni può emettere durante la generazione del codice assembly. ammissibile
i nomi sono: c62x, c64x, c64x+, c67x, c67x+, c674x.
-big endian
Genera codice per un target big-endian.
-mittle-endian
Genera codice per un target little-endian. Questa è l'impostazione predefinita.
-msim
Scegli i file di avvio e lo script del linker adatti al simulatore.
-msdata=predefinito
Metti piccoli dati globali e statici nella sezione ".neardata", a cui punta
registrare "B14". Metti piccoli dati globali e statici non inizializzati nella sezione ".bss",
che è adiacente alla sezione ".neardata". Inserisci piccoli dati di sola lettura nel
sezione ".rodata". Le sezioni corrispondenti usate per grandi pezzi di dati sono
".fardata", ".far" e ".const".
-msdata=tutto
Metti tutti i dati, non solo i piccoli oggetti, nelle sezioni riservate ai piccoli dati, e
utilizzare l'indirizzamento relativo al registro "B14" per accedervi.
-msdata=nessuno
Non utilizzare le sezioni riservate ai piccoli dati e utilizzare indirizzi assoluti per
accedere a tutti i dati. Metti tutti i dati globali e statici inizializzati nel ".fardata"
sezione e tutti i dati non inizializzati nella sezione ".far". Metti tutti i dati costanti in
la sezione ".const".
CRIS Opzioni
Queste opzioni sono definite specificamente per le porte CRIS.
-marzo=tipo di architettura
-mcpu=tipo di architettura
Genera codice per l'architettura specificata. Le scelte per tipo di architettura sono
v3, v8 e v10 rispettivamente per ETRAX 4, ETRAX 100 e ETRAX 100 LX. L'impostazione predefinita è v0
ad eccezione di cris-axis-linux-gnu, dove il valore predefinito è v10.
-mtune=tipo di architettura
Sintonizzati su tipo di architettura tutto ciò che riguarda il codice generato, ad eccezione di
l'ABI e l'insieme delle istruzioni disponibili. Le scelte per tipo di architettura sono
lo stesso che per -marzo=tipo di architettura.
-mmax-stack-frame=n
Avvisa quando lo stack frame di una funzione supera n byte.
-metrax4
-metrax100
Le opzioni -metrax4 e -metrax100 sono sinonimi di -marzo=v3 e -marzo=v8
rispettivamente.
-mmul-bug-soluzione alternativa
-mno-mul-bug-soluzione
Risolvere un bug nelle istruzioni "mul" e "mulu" per i modelli di CPU in cui
si applica. Questa opzione è attiva per impostazione predefinita.
-mpdebug
Abilitare le informazioni dettagliate relative al debug specifiche di CRIS nel codice assembly. Questo
l'opzione ha anche l'effetto di disattivare il #NO_APP indicatore di codice formattato per il
assembler all'inizio del file assembly.
-mcc-init
Non utilizzare i risultati del codice di condizione dall'istruzione precedente; emetti sempre confronta e
istruzioni di prova prima dell'uso dei codici di condizione.
-mno-effetti collaterali
Non emettere istruzioni con effetti collaterali in modalità di indirizzamento diverse da quelle post-
incremento.
-mstack-align
-mno-stack-align
-mdata-align
-mno-data-align
-mconst-align
-mno-const-align
Queste opzioni (no- opzioni) organizzare (eliminare disposizioni) per lo stack frame,
dati individuali e costanti da allineare per la dimensione massima di accesso singolo ai dati
per il modello di CPU scelto. L'impostazione predefinita prevede l'allineamento a 32 bit. ABI
dettagli come il layout della struttura non sono interessati da queste opzioni.
-m32 bit
-m16 bit
-m8 bit
Simile alle opzioni stack-data- e const-align sopra, queste opzioni organizzano
stack frame, dati scrivibili e costanti a 32 bit, 16 bit o 8 bit allineati.
L'impostazione predefinita è l'allineamento a 32 bit.
-mno-prologo-epilogo
-mprologue-epilogo
Con -mno-prologo-epilogo, la normale funzione prologo ed epilogo che istituiscono
lo stack frame viene omesso e non vengono restituite istruzioni o sequenze di ritorno
generato nel codice. Utilizzare questa opzione solo insieme all'ispezione visiva del
codice compilato: non vengono generati avvisi o errori quando i registri salvati in chiamata devono essere
salvato o è necessario allocare lo spazio di archiviazione per le variabili locali.
-mno-gotplt
-Mgotplt
Con -fpic e -fPIC, non generare (generare) sequenze di istruzioni che si caricano
indirizzi per le funzioni dalla parte PLT del GOT piuttosto che (tradizionale su altro
architetture) chiamate al PLT. L'impostazione predefinita è -Mgotplt.
-melf
Opzione no-op legacy riconosciuta solo con cris-axis-elf e cris-axis-linux-gnu
obiettivi.
-mlinux
Opzione no-op legacy riconosciuta solo con il target cris-axis-linux-gnu.
-sim
Questa opzione, riconosciuta per il cris-axis-elf, fa in modo di collegarsi con input-output
funzioni da una libreria del simulatore. Codice, dati inizializzati e dati inizializzati a zero
sono assegnati consecutivamente.
-sim2
Come -sim, ma passa le opzioni del linker per individuare i dati inizializzati a 0x40000000 e zero-
dati inizializzati a 0x80000000.
CR16 Opzioni
Queste opzioni sono definite specificamente per le porte CR16.
-mmac
Consentire l'uso di istruzioni di accumulo multiplo. Disabilitato per impostazione predefinita.
-mcr16cplus
-mcr16c
Genera codice per l'architettura CR16C o CR16C+. L'architettura CR16C+ è predefinita.
-msim
Collega la libreria libsim.a che è compatibile con simulator. Applicabile a ELF
solo compilatore.
-menta32
Scegli il tipo intero con larghezza a 32 bit.
-mbit-ops
Genera istruzioni "sbit"/"cbit" per la manipolazione dei bit.
-mdata-modello=modello
Scegli un modello di dati. Le scelte per modello sono vicino, lontano or medie. medie è l'impostazione predefinita.
Però, lontano non è valido con -mcr16c, poiché l'architettura CR16C non supporta il
modello di dati lontano.
Darwin Opzioni
Queste opzioni sono definite per tutte le architetture che eseguono il sistema operativo Darwin.
FSF GCC su Darwin non crea file oggetto "grassi"; crea un file oggetto per il
un'unica architettura per cui GCC è stato creato. Il GCC di Apple su Darwin crea "grasso"
file se multipli -arco vengono utilizzate le opzioni; lo fa eseguendo il compilatore o il linker
più volte e unendo i risultati insieme a lipo.
Il sottotipo del file creato (come ppc7400 or ppc970 or i686) è determinato da
flag che specificano l'ISA a cui si rivolge GCC, come -mcpu or -marzo.
-force_cpusubtype_ALL l'opzione può essere utilizzata per sovrascriverlo.
Gli strumenti Darwin variano nel loro comportamento quando vengono presentati con una mancata corrispondenza ISA. Il
assemblatore, as, consente solo l'utilizzo di istruzioni valide per il sottotipo di
file che sta generando, quindi non puoi inserire istruzioni a 64 bit in a ppc750 file oggetto. Il
linker per librerie condivise, /usr/bin/libtool, fallisce e stampa un errore se richiesto
creare una libreria condivisa con un sottotipo meno restrittivo rispetto ai suoi file di input (per
esempio, cercando di mettere a ppc970 file oggetto in a ppc7400 biblioteca). Il linker per
eseguibili, ld, assegna silenziosamente all'eseguibile il sottotipo più restrittivo di uno qualsiasi dei suoi
file di input.
-Fdir
Aggiungi la directory del framework dir all'inizio dell'elenco delle directory da cercare
per i file di intestazione. Queste directory sono intercalate con quelle specificate da -I
opzioni e vengono scansionati in ordine da sinistra a destra.
Una directory framework è una directory con i framework al suo interno. Un quadro è un
directory con a Headers e / o Intestazioni private directory contenuta direttamente in essa che
finisce dentro .struttura. Il nome di un framework è il nome di questa directory escludendo
, il .struttura. Le intestazioni associate al framework si trovano in una di queste due
directory, con Headers essere cercato per primo. Un sottoquadro è un quadro
directory che si trova in un framework quadri directory. Include del sottoquadro
le intestazioni possono apparire solo in un'intestazione di un framework che contiene il sottoframework, oppure
in un'intestazione del sottoframework di pari livello. Due sottoquadri sono fratelli se si verificano nel
stesso quadro. Un sottoframework non dovrebbe avere lo stesso nome di un framework; un
viene emesso un avviso in caso di violazione. Attualmente un sottoquadro non può avere
sottoquadri; in futuro, il meccanismo potrebbe essere esteso a tale scopo. Il
quadri standard possono essere trovati in / System / Library / Frameworks e
/ Library / Frameworks. Un esempio include sembra "#include ",
where Contesto denota il nome del framework e intestazione.h si trova in
Intestazioni private or Headers directory.
-iframeworkdir
Come -F tranne che la directory è trattata come una directory di sistema. La differenza principale
tra questo -iframework e -F è quello con -iframework il compilatore non avvisa
sui costrutti contenuti nei file di intestazione trovati tramite dir. Questa opzione è valida
solo per la famiglia di lingue C.
-gusto
Emetti informazioni di debug per i simboli utilizzati. Per il formato di debug di stabs,
questo abilita -feliminare-simboli-debug-inutilizzati. Questo è attivato per impostazione predefinita.
-pieno
Emetti informazioni di debug per tutti i simboli e i tipi.
-mmacosx-versione-min=versione
La prima versione di MacOS X su cui verrà eseguito questo eseguibile è versione. Tipico
valori di versione includere 10.1, 10.2 e 10.3.9.
Se il compilatore è stato creato per utilizzare le intestazioni del sistema per impostazione predefinita, l'impostazione predefinita per
questa opzione è la versione del sistema su cui è in esecuzione il compilatore, altrimenti il
l'impostazione predefinita è fare scelte compatibili con tanti sistemi e basi di codice quanti sono
possibile.
-mkernel
Abilita la modalità di sviluppo del kernel. Il -mkernel set di opzioni -statico, -fno-comune,
-fno-use-cxa-atexit, -fno-eccezioni, -fno-non-chiamata-eccezioni, -fapple-kext,
-fno-debole e -fno-rtti ove applicabile. Anche questa modalità imposta -mno-altivoc,
-msoft-flottante, -fno-integrato e -mlong-ramo per obiettivi PowerPC.
-monete-byte-bool
Sostituisci le impostazioni predefinite per "bool" in modo che "sizeof(bool)==1". Per impostazione predefinita "sizeof(bool)"
è 4 durante la compilazione per Darwin/PowerPC e 1 durante la compilazione per Darwin/x86, quindi questo
l'opzione non ha effetto su x86.
Attenzione: Le -monete-byte-bool switch fa sì che GCC generi codice non binario
compatibile con il codice generato senza quell'interruttore. L'utilizzo di questo interruttore potrebbe richiedere
ricompilare tutti gli altri moduli in un programma, incluse le librerie di sistema. Usa questo
passare per conformarsi a un modello di dati non predefinito.
-mfix-e-continua
-correggi-e-continua
-findirect-dati
Generare codice adatto per uno sviluppo rapido, ad esempio per consentire a GDB di
caricare dinamicamente .o file in programmi già in esecuzione. -findirect-dati e
-correggi-e-continua sono forniti per compatibilità con le versioni precedenti.
-tutto_carico
Carica tutti i membri delle librerie di archivi statici. vedi uomo ld(1) per maggiori informazioni.
-arch_errors_fatale
Causa gli errori che hanno a che fare con i file che hanno l'architettura sbagliata per essere fatali.
-bind_at_load
Fa in modo che il file di output venga contrassegnato in modo tale che il linker dinamico leghi tutto
riferimenti non definiti quando il file viene caricato o avviato.
-fascio
Produci un file in formato bundle Mach-o. vedi uomo ld(1) per maggiori informazioni.
-caricatore_bundle eseguibile
Questa opzione specifica il eseguibile che caricherà il file di output della build in corso
collegato. vedi uomo ld(1) per maggiori informazioni.
-libreria dinamica
Quando viene passata questa opzione, GCC produce una libreria dinamica invece di un eseguibile quando
collegamento, utilizzando il Darwin libtool comando.
-force_cpusubtype_ALL
Questo fa sì che il file di output di GCC abbia il TUTTO sottotipo, invece di uno controllato da
, il -mcpu or -marzo opzione.
-client_consentito nome del cliente
-nome del cliente
-versione_compatibilità
-Versione corrente
-striscia_morta
-file-di-dipendenza
-dylib_file
-dylinker_nome_installazione
-dinamico
-elenco_simboli_esportati
-elenco file
-spazio dei nomi_piatto
-force_flat_namespace
-headerpad_max_install_names
-base_immagine
-dentro
-nome_installazione
-keep_private_externs
-multi_modulo
-moltiplicare_definito
-moltiplicare_definito_non utilizzato
-noall_load
-no_dead_strip_inits_and_terms
-nofix preassociazione
-nomultidef
-nessun previncolo
-noseglinkedit
-dimensione_paginazero
-prelegare
-prebind_all_twolevel_modules
-Private_Bundle
-read_only_relocas
-settalign
-settooggettisimboli
-perché
-seg1ind
-setta creare
-settooggettisimboli
-settore
-segadr
-segs_read_only_addr
-segs_read_write_addr
-seg_addr_tabella
-seg_addr_nome_file_tabella
-Seglinkedit
-segprot
-segs_read_only_addr
-segs_read_write_addr
-modulo_singolo
-statico
-sub_libreria
-sub_ombrello
-spazio dei nomi a due livelli
-ombrello
-non definito
-lista_simboli_non esportati
-weak_reference_dismatches
-cosa è stato caricato
Queste opzioni vengono passate al linker Darwin. La pagina man del linker Darwin descrive
loro in dettaglio.
Dicembre Alpha Opzioni
Alcuni degli -m le opzioni sono definite per le implementazioni DEC Alpha:
-mno-morbido-flottante
-msoft-flottante
Utilizzare (non utilizzare) le istruzioni hardware in virgola mobile per la virgola mobile
operazioni. quando -msoft-flottante è specificato, funziona in libgcc.a sono usati per eseguire
operazioni in virgola mobile. A meno che non vengano sostituiti da routine che emulano il
operazioni in virgola mobile, o compilato in modo tale da chiamare tali emulazioni
routine, queste routine emettono operazioni a virgola mobile. Se stai compilando per
un Alpha senza operazioni in virgola mobile, devi assicurarti che la libreria sia compilata
per non chiamarli.
Nota che le implementazioni Alpha senza operazioni in virgola mobile devono avere
registri in virgola mobile.
-mfp-reg
-mno-fp-regs
Genera codice che utilizza (non utilizza) il set di registri a virgola mobile. -mno-fp-regs
implica -msoft-flottante. Se il set di registri a virgola mobile non viene utilizzato, a virgola mobile
gli operandi vengono passati nei registri interi come se fossero interi e in virgola mobile
i risultati vengono passati in $0 invece di $f0. Questa è una sequenza di chiamate non standard, quindi
qualsiasi funzione con un argomento in virgola mobile o un valore restituito chiamato dal codice compilato
con -mno-fp-regs deve essere compilato anche con tale opzione.
Un uso tipico di questa opzione è la creazione di un kernel che non utilizza e quindi necessita
non salvare e ripristinare, eventuali registri a virgola mobile.
-mieee
L'architettura Alpha implementa hardware in virgola mobile ottimizzato per il massimo
prestazione. È per lo più conforme allo standard a virgola mobile IEEE. Però,
per la piena conformità, è necessaria l'assistenza del software. Questa opzione genera codice
codice completamente conforme a IEEE con l’esclusione di che l' bandiera-inesatta non viene mantenuto (vedi sotto).
Se questa opzione è attivata, la macro del preprocessore "_IEEE_FP" viene definita durante
compilazione. Il codice risultante è meno efficiente ma è in grado di supportare correttamente
numeri denormalizzati e valori IEEE eccezionali come not-a-number e plus/minus
infinito. Altri compilatori Alpha chiamano questa opzione -ieee_con_no_inesatti.
-mieee-con-inesatto
Questo è come -mieee tranne che il codice generato mantiene anche l'IEEE bandiera-inesatta.
L'attivazione di questa opzione fa sì che il codice generato implementi IEEE completamente conforme
matematica. Oltre a "_IEEE_FP", "_IEEE_FP_EXACT" è definito come macro del preprocessore.
Su alcune implementazioni Alpha, il codice risultante potrebbe essere eseguito significativamente più lentamente di
il codice generato di default. Poiché c'è pochissimo codice che dipende dal
bandiera-inesatta, normalmente non dovresti specificare questa opzione. Altri compilatori Alpha chiamano
questa opzione -ieee_with_inesact.
-mfp-modalità trap=modalità trappola
Questa opzione controlla quali trap correlati a virgola mobile sono abilitati. Altro Alfa
i compilatori chiamano questa opzione -ftm modalità trappola. La modalità trappola può essere impostata su una delle quattro
valori:
n Questa è l'impostazione predefinita (normale). Le uniche trappole abilitate sono le
quelli che non possono essere disabilitati nel software (ad esempio, divisione per zero trap).
u Oltre alle trappole abilitate da n, sono abilitate anche le trappole di underflow.
su Come u, ma le istruzioni sono contrassegnate per essere sicure per il completamento del software (vedi
manuale dell'architettura Alpha per i dettagli).
sui Come su, ma sono abilitati anche i trap inesatti.
-mfp-modalità-arrotondamento=modalità di arrotondamento
Seleziona la modalità di arrotondamento IEEE. Altri compilatori Alpha chiamano questa opzione -fprm
modalità di arrotondamento. modalità di arrotondamento può essere uno di:
n Normale modalità di arrotondamento IEEE. I numeri in virgola mobile sono arrotondati al più vicino
numero macchina o verso il numero macchina pari in caso di parità.
m Arrotonda verso meno infinito.
c Modalità arrotondamento tritato. I numeri in virgola mobile vengono arrotondati allo zero.
d Modalità di arrotondamento dinamico. Un campo nel registro di controllo a virgola mobile (fpcr, Vedere
Manuale di riferimento dell'architettura Alpha) controlla la modalità di arrotondamento in vigore. il C
la libreria inizializza questo registro per l'arrotondamento verso più infinito. Così,
a meno che il tuo programma non modifichi il fpcr, d corrisponde a arrotondare verso il più
infinito.
-mtrap-precisione=trappola di precisione
Nell'architettura Alpha, le trappole a virgola mobile sono imprecise. Questo significa senza
assistenza software è impossibile recuperare da una trappola galleggiante e programma
l'esecuzione normalmente deve essere terminata. GCC può generare codice che può aiutare
gestori di trap del sistema operativo nel determinare la posizione esatta che ha causato un
trappola a virgola mobile. A seconda dei requisiti di un'applicazione, diversi
i livelli di precisione possono essere selezionati:
p Precisione del programma. Questa opzione è l'impostazione predefinita e significa che un gestore di trap può solo
identificare quale programma ha causato un'eccezione in virgola mobile.
f Precisione della funzione. Il gestore trap può determinare la funzione che ha causato un
eccezione in virgola mobile.
i Precisione dell'istruzione. Il gestore della trappola può determinare l'istruzione esatta che
ha causato un'eccezione a virgola mobile.
Altri compilatori Alpha forniscono le opzioni equivalenti chiamate -ambito_sicuro e
-ripresa_sicura.
-mieee-conforme
Questa opzione contrassegna il codice generato come conforme a IEEE. Non devi usare questa opzione
a meno che non specifichi anche tu -mtrap-precisione=i e nemmeno -mfp-modalità trap=su or
-mfp-trap-mode=sui. Il suo unico effetto è quello di emettere la linea .flag 48 nella funzione
prologo del file assembly generato.
-mbuild-costanti
Normalmente GCC esamina una costante intera a 32 o 64 bit per vedere se può costruirla
da costanti più piccole in due o tre istruzioni. Se non può, emette il
costante come letterale e genera il codice per caricarlo dal segmento di dati in fase di esecuzione.
Usa questa opzione per richiedere la costruzione di GCC contro tutti i costanti intere usando il codice, anche se
ci vogliono più istruzioni (il massimo è sei).
In genere si utilizza questa opzione per creare un caricatore dinamico di librerie condivise. stesso un
libreria condivisa, deve riposizionarsi in memoria prima di poter trovare le variabili e
costanti nel proprio segmento di dati.
-mbwx
-mno-bwx
-mcix
-mno-cix
-mfix
-mno-correzione
-mmax
-mno-max
Indica se GCC deve generare codice per utilizzare BWX, CIX, FIX e MAX opzionali
set di istruzioni. L'impostazione predefinita è utilizzare i set di istruzioni supportati dalla CPU
tipo specificato tramite -mcpu= opzione o quella della CPU su cui è stato costruito GCC se nessuna lo è
specificato.
-mfloat-vax
-mfloat-ieee
Genera codice che usa (non usa) VAX F e G aritmetica a virgola mobile invece
di IEEE a singola e doppia precisione.
-Mexplicit-relocs
-mno-reloc-esplicito
I vecchi assemblatori Alpha non fornivano alcun modo per generare rilocazioni di simboli se non tramite
macro assembler. L'uso di queste macro non consente una pianificazione ottimale delle istruzioni.
GNU binutils dalla versione 2.12 supporta una nuova sintassi che consente al compilatore di
contrassegnare esplicitamente quali trasferimenti dovrebbero applicarsi a quali istruzioni. Questa opzione è
per lo più utile per il debug, poiché GCC rileva le capacità dell'assemblatore quando
è costruito e imposta il valore predefinito di conseguenza.
-msmall-data
-mlarge-dati
Quando -Mexplicit-relocs è in effetti, si accede ai dati statici tramite parente gp
traslochi. quando -msmall-data viene utilizzato, vengono inseriti oggetti di lunghezza pari o inferiore a 8 byte
a piccole dati area (le sezioni ".sdata" e ".sbss") e vi si accede tramite 16 bit
traslochi al di fuori del registro $gp. Ciò limita la dimensione della piccola area dati a
64KB, ma permette di accedere direttamente alle variabili tramite un'unica istruzione.
L'impostazione predefinita è -mlarge-dati. Con questa opzione l'area dati è limitata appena sotto
2GB. I programmi che richiedono più di 2 GB di dati devono utilizzare "malloc" o "mmap" per
allocare i dati nell'heap anziché nel segmento di dati del programma.
Quando si genera codice per librerie condivise, -fpic implica -msmall-data e -fPIC
implica -mlarge-dati.
-mtesto-piccolo
-mlarge-testo
Quando -mtesto-piccolo viene utilizzato, il compilatore assume che il codice dell'intero programma
(o libreria condivisa) si adatta a 4 MB ed è quindi raggiungibile con un'istruzione branch.
Quando -msmall-data viene utilizzato, il compilatore può assumere che tutti i simboli locali condividano il
stesso valore $gp, e quindi ridurre il numero di istruzioni richieste per una funzione
chiamare dalle 4 alle 1.
L'impostazione predefinita è -mlarge-testo.
-mcpu=tipo_cpu
Impostare il set di istruzioni e i parametri di pianificazione delle istruzioni per il tipo di macchina
tipo_cpu. È possibile specificare sia il EV nome dello stile o il numero del chip corrispondente.
GCC supporta i parametri di pianificazione per la famiglia di processori EV4, EV5 ed EV6 e
sceglie i valori predefiniti per il set di istruzioni dal processore specificato. Se
non si specifica un tipo di processore, il valore predefinito di GCC è il processore su cui il
compilatore è stato costruito.
Valori supportati per tipo_cpu sono
ev4
ev45
21064
Pianifica come EV4 e non ha estensioni del set di istruzioni.
ev5
21164
Pianifica come EV5 e non ha estensioni del set di istruzioni.
ev56
21164a
Pianifica come EV5 e supporta l'estensione BWX.
pca56
21164pc
21164PC
Pianifica come EV5 e supporta le estensioni BWX e MAX.
ev6
21264
Pianifica come EV6 e supporta le estensioni BWX, FIX e MAX.
ev67
21264a
Pianifica come EV6 e supporta le estensioni BWX, CIX, FIX e MAX.
Anche le toolchain native supportano il valore nativo, che seleziona la migliore architettura
opzione per il processore host. -mcpu=nativo non ha alcun effetto se GCC non riconosce
il processore.
-mtune=tipo_cpu
Imposta solo i parametri di pianificazione delle istruzioni per il tipo di macchina tipo_cpu.
il set di istruzioni non viene modificato.
Anche le toolchain native supportano il valore nativo, che seleziona la migliore architettura
opzione per il processore host. -mtune=nativo non ha alcun effetto se GCC non riconosce
il processore.
-memoria-latenza=tempo
Imposta la latenza che lo scheduler dovrebbe assumere per i riferimenti di memoria tipici visti da
l'applicazione. Questo numero dipende fortemente dai modelli di accesso alla memoria utilizzati
dall'applicazione e dalla dimensione della cache esterna sulla macchina.
Opzioni valide per tempo sono
numero
Un numero decimale che rappresenta i cicli di clock.
L1
L2
L3
principale
Il compilatore contiene stime del numero di cicli di clock per EV4 "tipici" e
Hardware EV5 per le cache di livello 1, 2 e 3 (chiamate anche Dcache, Scache e
Bcache), nonché alla memoria principale. Nota che L3 è valido solo per EV5.
FR30 Opzioni
Queste opzioni sono definite specificamente per la porta FR30.
-mpiccolo-modello
Utilizzare il modello dello spazio degli indirizzi ridotto. Questo può produrre codice più piccolo, ma presuppone
che tutti i valori simbolici e gli indirizzi rientrino in un intervallo di 20 bit.
-mno-lsim
Supponiamo che sia stato fornito il supporto per il runtime e quindi non è necessario includere il
libreria del simulatore (libsim.a) sulla riga di comando del linker.
VRF Opzioni
-mgpr-32
Utilizzare solo i primi 32 registri generici.
-mgpr-64
Usa tutti i 64 registri generici.
-mfpr-32
Utilizzare solo i primi 32 registri a virgola mobile.
-mfpr-64
Usa tutti i 64 registri a virgola mobile.
-mhard-flottante
Utilizzare le istruzioni hardware per le operazioni in virgola mobile.
-msoft-flottante
Utilizzare le routine di libreria per le operazioni in virgola mobile.
-maloc-cc
Allocare dinamicamente i registri del codice di condizione.
-mfisso-cc
Non provare ad allocare dinamicamente i registri del codice di condizione, usa solo "icc0" e
"fcc0".
-mdparola
Modificare l'ABI per utilizzare la doppia parola insns.
-mno-dword
Non utilizzare istruzioni a doppia parola.
-mdoppio
Utilizzare le doppie istruzioni in virgola mobile.
-mno-doppio
Non utilizzare doppie istruzioni in virgola mobile.
-media
Usa le istruzioni per i media.
-mno-media
Non utilizzare le istruzioni dei supporti.
-mmulad
Usa le istruzioni di moltiplicazione e addizione/sottrazione.
-mno-mulad
Non utilizzare le istruzioni di moltiplicazione e aggiunta/sottrazione.
-mfdpic
Selezionare l'ABI FDPIC, che utilizza i descrittori di funzione per rappresentare i puntatori a
funzioni. Senza alcuna opzione relativa a PIC/PIE, implica -fPIE. Con -fpic or
-fpie, presuppone che le voci GOT e i piccoli dati rientrino in un intervallo di 12 bit dal GOT
indirizzo di base; insieme a -fPIC or -fPIE, gli offset GOT sono calcolati con 32 bit. Con un
bfin-elfo target, questa opzione implica -msim.
-minline-plt
Abilita l'inlining delle voci PLT nelle chiamate di funzione a funzioni che non sono note
legarsi localmente. Non ha effetto senza -mfdpic. È abilitato di default se
l'ottimizzazione per la velocità e la compilazione per le librerie condivise (ad es. -fPIC or -fpic), o
quando un'opzione di ottimizzazione come -O3 o superiore è presente nella riga di comando.
-mTLS
Assumere un segmento TLS di grandi dimensioni durante la generazione di codice locale del thread.
-ml
Non presumere un segmento TLS di grandi dimensioni durante la generazione di codice locale del thread.
-mgprel-ro
Consentire l'uso delle rilocazioni "GPREL" nell'IFPDT ABI per i dati noti per essere in
sezioni di sola lettura. È abilitato per impostazione predefinita, tranne che per -fpic or -fpie: nonostante
può aiutare a ridurre la tabella di offset globale, scambia 1 istruzione per 4. Con
-fPIC or -fPIE, scambia 3 istruzioni per 4, una delle quali può essere condivisa da più
simboli, ed evita la necessità di una voce GOT per il simbolo di riferimento, quindi è
più probabile che sia una vittoria. Se non è, -mno-gprel-ro può essere utilizzato per disabilitarlo.
-multilib-libreria-pic
Collegamento con le librerie di immagini (libreria, non FD). È implicito da -mlibrary-pic, anche
come da -fPIC e -fpic senza -mfdpic. Non dovresti mai usarlo esplicitamente.
-mlinked-fp
Segui il requisito EABI di creare sempre un puntatore a frame ogni volta che uno stack frame
è assegnato. Questa opzione è abilitata per impostazione predefinita e può essere disabilitata con
-mno-collegato-fp.
-mlong-chiamate
Utilizzare l'indirizzamento indiretto per chiamare funzioni al di fuori dell'unità di compilazione corrente. Questo
consente di posizionare le funzioni ovunque all'interno dello spazio degli indirizzi a 32 bit.
-etichette-maligne
Prova ad allineare le etichette a un limite di 8 byte inserendo NOP nel pacchetto precedente.
Questa opzione ha effetto solo quando l'impacchettamento VLIW è abilitato. Non crea nuovo
pacchetti; aggiunge semplicemente NOP a quelli esistenti.
-mlibrary-pic
Genera codice EABI indipendente dalla posizione.
-mac-4
Utilizzare solo i primi quattro registri dell'accumulatore di supporti.
-mac-8
Utilizzare tutti e otto i registri dell'accumulatore dei supporti.
-mpack
Pack istruzioni VLIW.
-mno-pacchetto
Non imballare le istruzioni VLIW.
-mno-flag
Non contrassegnare gli switch ABI in e_flags.
-mcond-mossa
Abilita l'uso delle istruzioni di spostamento condizionale (impostazione predefinita).
Questa opzione serve principalmente per il debug del compilatore e probabilmente verrà rimossa in a
versione futura.
-mno-cond-mossa
Disabilitare l'uso delle istruzioni di spostamento condizionale.
Questa opzione serve principalmente per il debug del compilatore e probabilmente verrà rimossa in a
versione futura.
-mscc
Abilita l'uso delle istruzioni di set condizionale (impostazione predefinita).
Questa opzione serve principalmente per il debug del compilatore e probabilmente verrà rimossa in a
versione futura.
-mno-scc
Disabilitare l'uso delle istruzioni degli insiemi condizionali.
Questa opzione serve principalmente per il debug del compilatore e probabilmente verrà rimossa in a
versione futura.
-mcond-exec
Abilita l'uso dell'esecuzione condizionale (impostazione predefinita).
Questa opzione serve principalmente per il debug del compilatore e probabilmente verrà rimossa in a
versione futura.
-mno-cond-exec
Disabilitare l'uso dell'esecuzione condizionale.
Questa opzione serve principalmente per il debug del compilatore e probabilmente verrà rimossa in a
versione futura.
-mvliw-ramo
Esegui un passaggio per comprimere i rami nelle istruzioni VLIW (impostazione predefinita).
Questa opzione serve principalmente per il debug del compilatore e probabilmente verrà rimossa in a
versione futura.
-mno-vliw-ramo
Non eseguire un passaggio per comprimere i rami nelle istruzioni VLIW.
Questa opzione serve principalmente per il debug del compilatore e probabilmente verrà rimossa in a
versione futura.
-mmulti-cond-exec
Abilita l'ottimizzazione di "&&" e "||" in esecuzione condizionale (predefinito).
Questa opzione serve principalmente per il debug del compilatore e probabilmente verrà rimossa in a
versione futura.
-mno-multi-cond-exec
Disabilita l'ottimizzazione di "&&" e "||" nell'esecuzione condizionale.
Questa opzione serve principalmente per il debug del compilatore e probabilmente verrà rimossa in a
versione futura.
-mnested-cond-exec
Abilita le ottimizzazioni dell'esecuzione condizionale annidate (impostazione predefinita).
Questa opzione serve principalmente per il debug del compilatore e probabilmente verrà rimossa in a
versione futura.
-mno-nested-cond-exec
Disabilita le ottimizzazioni dell'esecuzione condizionale annidate.
Questa opzione serve principalmente per il debug del compilatore e probabilmente verrà rimossa in a
versione futura.
-moptimize-membar
Questa opzione rimuove le istruzioni "membar" ridondanti dal codice generato dal compilatore.
Si è abilitata di default.
-mno-ottimizzare-membar
Questo interruttore disabilita la rimozione automatica delle istruzioni "membar" ridondanti dal
codice generato.
-mtomcat-statistiche
Fai in modo che il gas stampi le statistiche di Tomcat.
-mcpu=cpu
Seleziona il tipo di processore per cui generare il codice. I valori possibili sono fr, fr550,
micio, fr500, fr450, fr405, fr400, fr300 e semplice.
GNU / Linux Opzioni
Alcuni degli -m le opzioni sono definite per i target GNU/Linux:
-mglibc
Usa la libreria GNU C. Questa è l'impostazione predefinita tranne che su *-*-linux-*uclibc* e
*-*-linux-*android* obiettivi.
-muclibc
Usa la libreria uClibc C. Questa è l'impostazione predefinita attivata *-*-linux-*uclibc* obiettivi.
-mbionico
Usa la libreria Bionic C. Questa è l'impostazione predefinita attivata *-*-linux-*android* obiettivi.
-mandroide
Compila il codice compatibile con la piattaforma Android. Questa è l'impostazione predefinita attivata
*-*-linux-*android* obiettivi.
Durante la compilazione, questa opzione abilita -mbionico, -fPIC, -fno-eccezioni e -fno-rtti by
predefinito. Durante il collegamento, questa opzione fa in modo che il driver GCC passi le opzioni specifiche di Android
al linker. Infine, questa opzione fa sì che la macro del preprocessore "__ANDROID__" sia
definito.
-tno-android-cc
Disabilita gli effetti di compilazione di -mandroide, ovvero non abilitare -mbionico, -fPIC,
-fno-eccezioni e -fno-rtti per impostazione predefinita.
-tno-android-ld
Disabilita gli effetti di collegamento di -mandroide, ovvero passare le opzioni di collegamento standard di Linux al
linker.
H8 / 300 Opzioni
Alcuni degli -m le opzioni sono definite per le implementazioni H8/300:
-rilassati
Accorciare alcuni riferimenti di indirizzo al momento del collegamento, quando possibile; usa l'opzione del linker
-rilassare.
-mh Genera codice per H8/300H.
-SM Genera codice per H8S.
-min Genera codice per H8S e H8/300H in modalità normale. Questo interruttore deve essere utilizzato
o con -mh or -SM.
-ms2600
Genera codice per H8S/2600. Questo interruttore deve essere utilizzato con -SM.
-mexr
I registri estesi vengono memorizzati nello stack prima dell'esecuzione della funzione con monitor
attributo. L'opzione predefinita è -mexr. Questa opzione è valida solo per i bersagli H8S.
-mno-esr
I registri estesi non vengono memorizzati nello stack prima dell'esecuzione della funzione con monitor
attributo. L'opzione predefinita è -mno-esr. Questa opzione è valida solo per i bersagli H8S.
-menta32
Rendi i dati "int" a 32 bit per impostazione predefinita.
-maligno-300
Sull'H8/300H e sull'H8S, utilizzare le stesse regole di allineamento dell'H8/300. Il predefinito
per H8/300H e H8S è di allineare long e float su limiti di 4 byte.
-maligno-300 li fa allineare su limiti di 2 byte. Questa opzione non ha effetto
sull'H8/300.
HPPA Opzioni
Alcuni degli -m le opzioni sono definite per la famiglia di computer HPPA:
-marzo=tipo di architettura
Genera codice per l'architettura specificata. Le scelte per tipo di architettura sono
1.0 per PA 1.0, 1.1 per PA 1.1, e 2.0 per processori PA 2.0. Fare riferimento a
/usr/lib/sched.models su un sistema HP-UX per determinare l'opzione di architettura corretta
per la tua macchina Il codice compilato per architetture con numeri inferiori viene eseguito su un livello superiore
architetture numerate, ma non viceversa.
-MPA-RISC-1-0
-MPA-RISC-1-1
-MPA-RISC-2-0
Sinonimi per -marzo=1.0, -marzo=1.1e -marzo=2.0 rispettivamente.
-m salto in ritardo
Questa opzione viene ignorata e fornita solo per motivi di compatibilità.
-mdisable-fpregs
Impedire che i registri a virgola mobile vengano utilizzati in alcun modo. Questo è necessario per
compilazione di kernel che eseguono il cambio di contesto pigro di registri a virgola mobile. Se
si usa questa opzione e si tenta di eseguire operazioni in virgola mobile, il compilatore
abortisce.
-mdisable-indicizzazione
Impedisce al compilatore di utilizzare le modalità di indicizzazione degli indirizzi. Questo evita alcuni piuttosto
problemi oscuri durante la compilazione del codice generato da MIG in MACH.
-mno-spazio-regs
Genera codice che presuppone che il target non abbia registri di spazio. Ciò consente a GCC di
generare chiamate indirette più veloci e utilizzare modalità di indirizzo indice non scalabili.
Tale codice è adatto per sistemi PA e kernel di livello 0.
-mfast-chiamate-indirette
Genera codice che presuppone che le chiamate non superino mai i limiti dello spazio. Ciò consente a GCC di
emetti codice che esegue chiamate indirette più veloci.
Questa opzione non funziona in presenza di librerie condivise o funzioni annidate.
-mintervallo-fisso=registro-intervallo
Genera codice trattando l'intervallo di registri specificato come registri fissi. Un registro fisso
è uno che l'allocatore del registro non può utilizzare. Questo è utile quando si compila il kernel
codice. Un intervallo di registri è specificato come due registri separati da un trattino. multiplo
gli intervalli di registro possono essere specificati separati da una virgola.
-mlong-load-store
Genera il caricamento di 3 istruzioni e memorizza le sequenze come talvolta richiesto da HP-UX 10
linker. Questo è equivalente a +k opzione per i compilatori HP.
-portable-runtime
Utilizzare le convenzioni di chiamata portatile proposte da HP per i sistemi ELF.
-mgas
Abilita l'uso delle direttive assembler che solo GAS può comprendere.
-msprogramma=tipo di CPU
Codice di pianificazione in base ai vincoli per il tipo di macchina tipo di CPU. Le scelte
per tipo di CPU sono 700 7100, 7100LC, 7200, 7300 e 8000. Fare riferimento a
/usr/lib/sched.models su un sistema HP-UX per determinare l'opzione di pianificazione corretta per
la tua macchina. La pianificazione predefinita è 8000.
-mlinker-opz
Abilitare il passaggio di ottimizzazione nel linker HP-UX. Nota che questo rende il debug simbolico
impossibile. Inoltre, attiva un bug nei linker HP-UX 8 e HP-UX 9 in cui essi
dare messaggi di errore fasulli quando si collegano alcuni programmi.
-msoft-flottante
Genera output contenente chiamate di libreria per virgola mobile. Attenzione: il requisito
le librerie non sono disponibili per tutte le destinazioni HPPA. Normalmente le strutture del
vengono usati i normali compilatori C della macchina, ma questo non può essere fatto direttamente in cross-
compilazione. Devi prendere le tue disposizioni per fornire una libreria adatta
funzioni per la compilazione incrociata.
-msoft-flottante cambia la convenzione di chiamata nel file di output; quindi, è solo
utile se compili contro tutti i di un programma con questa opzione. In particolare, è necessario
compilare libgcc.a, la libreria fornita con GCC, con -msoft-flottante in ordine per questo
lavorare.
-msio
Genera la definizione predefinita, "_SIO", per l'IO del server. L'impostazione predefinita è -mwsio. Questo genera
i predefiniti, "__hp9000s700", "__hp9000s700__" e "_WSIO", per workstation IO.
Queste opzioni sono disponibili in HP-UX e HI-UX.
-mgnu-ld
Usa opzioni specifiche per GNU ld. questo passa -condiviso a ld quando si costruisce una condivisione
biblioteca. È l'impostazione predefinita quando GCC è configurato, esplicitamente o implicitamente, con il
linker GNU. Questa opzione non influisce su quale ld è chiamato; cambia solo cosa
i parametri sono passati a quello ld. ld che viene chiamato è determinato da
--con-ld l'opzione configure, il percorso di ricerca del programma di GCC e infine quello dell'utente PERCORSO.
Il linker utilizzato da GCC può essere stampato utilizzando quale `ccc -print-nome-programma=ld`. Questo
l'opzione è disponibile solo su HP-UX GCC a 64 bit, cioè configurato con
hppa*64*-*-hpux*.
-mhp-ld
Usa opzioni specifiche per HP ld. questo passa -b a ld quando si costruisce una libreria condivisa
e passa +Accetta Tipo non corrispondente a ld su tutti i link È l'impostazione predefinita quando GCC è
configurato, esplicitamente o implicitamente, con il linker HP. Questa opzione non ha effetto
quale ld è chiamato; cambia solo quali parametri vengono passati a quello ld. ld
che viene chiamato è determinato da --con-ld opzione di configurazione, ricerca del programma di GCC
percorso, e infine da parte dell'utente PERCORSO. Il linker utilizzato da GCC può essere stampato utilizzando
quale `ccc -print-nome-programma=ld`. Questa opzione è disponibile solo su HP-UX a 64 bit
GCC, cioè configurato con hppa*64*-*-hpux*.
-mlong-chiamate
Genera codice che utilizza sequenze di chiamate lunghe. Ciò garantisce che una chiamata sia sempre possibile
per raggiungere gli stub generati dal linker. L'impostazione predefinita è generare chiamate lunghe solo quando il
distanza dal sito della chiamata all'inizio della funzione o dell'unità di traduzione, come
caso, supera un limite predefinito fissato dal tipo di filiale utilizzato. Il
i limiti per le chiamate normali sono 7,600,000 e 240,000 byte, rispettivamente per la PA 2.0
e architetture PA 1.X. Le chiamate Sib sono sempre limitate a 240,000 byte.
Le distanze vengono misurate dall'inizio delle funzioni quando si utilizza il
-ffunzioni-sezioni opzione, o quando si utilizza il -mgas e -mno-runtime-portatile Opzioni
insieme sotto HP-UX con il linker SOM.
Normalmente non è consigliabile utilizzare questa opzione poiché riduce le prestazioni. Però,
può essere utile in applicazioni di grandi dimensioni, in particolare quando viene utilizzato il collegamento parziale per
costruire l'applicazione.
I tipi di chiamate lunghe utilizzate dipendono dalle capacità dell'assemblatore e del linker,
e il tipo di codice generato. L'impatto sui sistemi che supportano a lungo
le chiamate assolute e le chiamate relative al simbolo della foto lunga o relative al PC dovrebbero essere
relativamente piccolo. Tuttavia, una chiamata indiretta viene utilizzata su sistemi ELF a 32 bit nel codice pic
ed è abbastanza lungo.
-Munix =unix-std
Genera predefiniti del compilatore e seleziona un file di avvio per lo standard UNIX specificato.
Le scelte per unix-std sono 93, 95 e 98. 93 è supportato su tutte le versioni di HP-UX.
95 è disponibile su HP-UX 10.10 e versioni successive. 98 è disponibile su HP-UX 11.11 e versioni successive.
I valori predefiniti sono 93 per HP-UX 10.00, 95 per HP-UX 10.10 fino alle 11.00 e 98
per HP-UX 11.11 e versioni successive.
-munix=93 fornisce le stesse predefinizioni di GCC 3.3 e 3.4. -munix=95 fornisce
predefinizioni aggiuntive per "XOPEN_UNIX" e "_XOPEN_SOURCE_EXTENDED" e il file di avvio
unix95.o. -munix=98 fornisce ulteriori predefinizioni per "_XOPEN_UNIX",
"_XOPEN_SOURCE_EXTENDED", "_INCLUDE__STDC_A1_SOURCE" e "_INCLUDE_XOPEN_SOURCE_500",
e il file di avvio unix98.o.
È importante da notare che questa opzione cambia le interfacce per varie librerie
routine. Influisce anche sul comportamento operativo della libreria C. Così, estremo
è necessaria cautela nell'uso di questa opzione.
Il codice della libreria destinato a funzionare con più di uno standard UNIX deve testare,
impostare e ripristinare la variabile "__xpg4_extended_mask" come appropriato. La maggior parte dei software GNU
non fornisce questa capacità.
-nolibldl
Sopprimere la generazione di opzioni di collegamento per cercare libdld.sl quando il -statico opzione è
specificato su HP-UX 10 e versioni successive.
-statico
L'implementazione HP-UX di setlocale in libc ha una dipendenza da libdld.sl. Là
non è una versione di archivio di libdld.sl. Così, quando il -statico l'opzione è specificata,
sono necessarie opzioni di collegamento speciali per risolvere questa dipendenza.
Su HP-UX 10 e versioni successive, il driver GCC aggiunge le opzioni necessarie per il collegamento
libdld.sl quando il -statico l'opzione è specificata. Questo fa sì che il binario risultante sia
essere dinamico. Sulla porta a 64 bit, i linker generano binari dinamici per impostazione predefinita in
in ogni caso. Il -nolibldl l'opzione può essere utilizzata per impedire l'aggiunta del driver GCC
queste opzioni di collegamento.
-threads
Aggiungi il supporto per il multithreading con il dc filo libreria sotto HP-UX. Questa opzione
imposta i flag sia per il preprocessore che per il linker.
IA-64 Opzioni
Questi sono la -m opzioni definite per l'architettura Intel IA-64.
-big endian
Genera codice per un target big-endian. Questa è l'impostazione predefinita per HP-UX.
-mittle-endian
Genera codice per un target little-endian. Questa è l'impostazione predefinita per AIX5 e GNU/Linux.
-mgnu-as
-mno-gnu-as
Generare (o non farlo) codice per l'assemblatore GNU. Questa è l'impostazione predefinita.
-mgnu-ld
-mno-gnu-ld
Genera (o no) il codice per il linker GNU. Questa è l'impostazione predefinita.
-mno-foto
Genera codice che non utilizza un registro del puntatore globale. Il risultato non è la posizione
codice indipendente e viola la IA-64 ABI.
-mvolatile-asm-stop
-mno-volatile-asm-stop
Genera (o no) un bit di stop immediatamente prima e dopo le istruzioni asm volatili.
-mregister-nomi
-mno-nome-registro
Genera (o no) in, loce su nomi di registro per i registri impilati. Questo
può rendere più leggibile l'output dell'assemblatore.
-mno-sdata
-msdata
Disabilitare (o abilitare) le ottimizzazioni che utilizzano la sezione dei dati piccoli. Questo può essere utile
per aggirare i bug dell'ottimizzatore.
-mcostante-gp
Genera codice che utilizza un singolo valore del puntatore globale costante. Questo è utile quando
compilazione del codice del kernel.
-mauto-pic
Genera codice che è auto-rilocabile. Ciò implica -mcostante-gp. Questo è utile
durante la compilazione del codice del firmware.
-minline-float-divide-min-latenza
Genera codice per divisioni in linea di valori a virgola mobile utilizzando la latenza minima
algoritmo.
-minline-float-divide-max-throughput
Genera codice per divisioni in linea di valori a virgola mobile utilizzando il throughput massimo
algoritmo.
-mno-inline-float-divide
Non generare codice in linea per le divisioni di valori a virgola mobile.
-minline-int-divide-min-latenza
Genera codice per divisioni in linea di valori interi utilizzando la latenza minima
algoritmo.
-minline-int-divide-max-throughput
Genera codice per divisioni in linea di valori interi utilizzando il throughput massimo
algoritmo.
-mno-inline-int-divide
Non generare codice in linea per divisioni di valori interi.
-minline-sqrt-min-latenza
Genera codice per radici quadrate in linea utilizzando l'algoritmo di latenza minima.
-minline-sqrt-max-throughput
Genera codice per radici quadrate in linea utilizzando l'algoritmo di throughput massimo.
-mno-inline-sqrt
Non generare codice in linea per "sqrt".
-mfuso-pazzo
-mno-fuso-madd
Non (non) generare codice che utilizza la fusione moltiplica/aggiungi o moltiplica/sottrai
Istruzioni. L'impostazione predefinita prevede l'utilizzo di queste istruzioni.
-mno-nano2-asm
-mdwarf2-asm
Non (o non) generare codice assembler per le informazioni di debug del numero di riga DWARF 2.
Questo può essere utile quando non si usa l'assemblatore GNU.
-merda-stop-bit
-mno-early-stop-bit
Consenti ai bit di stop di essere posizionati prima di quanto immediatamente precedente l'istruzione che
attivato il bit di stop. Questo può migliorare la programmazione delle istruzioni, ma non sempre
fare così.
-mintervallo-fisso=registro-intervallo
Genera codice trattando l'intervallo di registri specificato come registri fissi. Un registro fisso
è uno che l'allocatore del registro non può utilizzare. Questo è utile quando si compila il kernel
codice. Un intervallo di registri è specificato come due registri separati da un trattino. multiplo
gli intervalli di registro possono essere specificati separati da una virgola.
-mtls-dimensione=dimensione tls
Specificare la dimensione in bit degli offset TLS immediati. I valori validi sono 14, 22 e 64.
-mtune=tipo di CPU
Ottimizza la pianificazione delle istruzioni per una particolare CPU, i valori validi sono itanio,
itanio1, merced, itanio2e mckinley.
-milp32
-mlp64
Genera codice per un ambiente a 32 o 64 bit. L'ambiente a 32 bit imposta int,
long e puntatore a 32 bit. L'ambiente a 64 bit imposta int su 32 bit e long e
puntatore a 64 bit. Questi sono flag specifici di HP-UX.
-mno-sched-br-data-spec
-msched-br-data-spec
(Dis/Abilita) la programmazione speculativa dei dati prima della ricarica. Ciò si traduce nella generazione di
le istruzioni "ld.a" e le corrispondenti istruzioni di controllo ("ld.c" / "chk.a"). Il
l'impostazione predefinita è "disabilita".
-msched-ar-data-spec
-mno-sched-ar-data-spec
(Attiva/disattiva) programmazione speculativa dei dati dopo la ricarica. Ciò si traduce nella generazione di
le istruzioni "ld.a" e le corrispondenti istruzioni di controllo ("ld.c" / "chk.a"). Il
l'impostazione predefinita è "abilita".
-mno-sched-control-spec
-spec-controllo-msched
(Dis/En)able controllo schedulazione speculativa. Questa funzione è disponibile solo durante
programmazione della regione (cioè prima della ricarica). Ciò si traduce nella generazione di "ld.s"
istruzioni e le corrispondenti istruzioni di controllo "chk.s". L'impostazione predefinita è
'disattivare'.
-msched-br-in-data-spec
-mno-sched-br-in-data-spec
(En/Dis)able schedulazione speculativa delle istruzioni che dipendono dai dati
carichi speculativi prima della ricarica. Questo è efficace solo con -msched-br-data-spec
abilitato. L'impostazione predefinita è "abilita".
-msched-ar-in-data-spec
-mno-sched-ar-in-data-spec
(En/Dis)able schedulazione speculativa delle istruzioni che dipendono dai dati
carichi speculativi dopo la ricarica. Questo è efficace solo con -msched-ar-data-spec
abilitato. L'impostazione predefinita è "abilita".
-msched-in-control-spec
-mno-sched-in-control-spec
(En/Dis)able schedulazione speculativa delle istruzioni che dipendono dal
controllare i carichi speculativi. Questo è efficace solo con -spec-controllo-msched abilitato.
L'impostazione predefinita è "abilita".
-mno-sched-prefer-non-data-spec-insns
-msched-prefer-non-data-spec-insns
Se abilitato, le istruzioni speculative sui dati vengono scelte per la pianificazione solo se non ci sono
altre scelte al momento. Questo rende l'uso della speculazione sui dati molto di più
conservatore. L'impostazione predefinita è "disabilita".
-mno-sched-prefer-non-control-spec-insns
-msched-prefer-non-spec-insns
Se abilitato, le istruzioni controllo-speculative vengono scelte per la schedulazione solo se ci sono
nessuna altra scelta al momento. Questo rende molto l'uso della speculazione di controllo
più conservativo. L'impostazione predefinita è "disabilita".
-mno-sched-count-spec-in-critical-path
-msched-count-spec-in-critical-path
Se abilitato, le dipendenze speculative vengono considerate durante il calcolo del
priorità delle istruzioni. Questo rende un po' di più l'uso della speculazione
conservatore. L'impostazione predefinita è "disabilita".
-msched-spec-ldc
Usa un semplice controllo di speculazione sui dati. Questa opzione è attiva per impostazione predefinita.
-msched-control-spec-ldc
Utilizzare un semplice assegno per la speculazione di controllo. Questa opzione è attiva per impostazione predefinita.
-msched-stop-bits-dopo-ogni-ciclo
Mettere un bit di stop dopo ogni ciclo durante la pianificazione. Questa opzione è attiva per impostazione predefinita.
-msched-fp-mem-deps-a-costo-zero
Si supponga che gli archivi e i carichi in virgola mobile non causino conflitti quando
inseriti nello stesso gruppo di istruzioni. Questa opzione è disabilitata di default.
-msel-sched-dont-check-control-spec
Genera controlli per la speculazione di controllo nella programmazione selettiva. Questa bandiera è
disabilitato per impostazione predefinita.
-msched-max-memoria-insns=max-insns
Limitare il numero di inserimenti di memoria per gruppo di istruzioni, dando priorità inferiore a
successivi insns di memoria che tentano di schedulare nello stesso gruppo di istruzioni.
Frequentemente utile per prevenire conflitti di banca cache. Il valore predefinito è 1.
-msched-max-memory-insns-hard-limit
Fa il limite specificato da msched-max-memoria-insns un limite rigido, che impedisce di più
di quel numero in un gruppo di istruzioni. Altrimenti, il limite è "soft", che significa
che le operazioni non di memoria sono preferite quando viene raggiunto il limite, ma di memoria
le operazioni possono ancora essere programmate.
LM32 Opzioni
Alcuni degli -m le opzioni sono definite per l'architettura LatticeMico32:
-mbarrel-shift-abilitato
Abilita le istruzioni di spostamento del barile.
-mdivide abilitato
Abilita le istruzioni di divisione e modulo.
-mmultiply-abilitato
Abilita le istruzioni di moltiplicazione.
-msign-extend-abilitato
Abilita le istruzioni di estensione del segno.
-abilitato per l'utente
Abilita istruzioni definite dall'utente.
M32C Opzioni
-mcpu=Nome
Seleziona la CPU per la quale viene generato il codice. Nome potrebbe essere uno di r8c per R8C/Tiny
serie, M16C per la serie M16C (fino a /60), m32cm per la serie M16C/80, oppure M32C
per la serie M32C/80.
-msim
Specifica che il programma verrà eseguito sul simulatore. Questo provoca un'alternativa
libreria runtime da collegare in cui supporta, ad esempio, file I/O. Non devi
utilizzare questa opzione durante la generazione di programmi che verranno eseguiti su hardware reale; devi
fornire la propria libreria di runtime per qualsiasi funzione di I/O necessaria.
-memreg=numero
Specifica il numero di pseudo-registri basati sulla memoria utilizzati da GCC durante la generazione del codice.
Questi pseudo-registri sono usati come veri e propri registri, quindi c'è un compromesso tra
La capacità di GCC di inserire il codice nei registri disponibili e la penalizzazione delle prestazioni di
usando la memoria invece dei registri. Nota che tutti i moduli in un programma devono essere
compilato con lo stesso valore per questa opzione. Per questo motivo, non devi usare questo
opzione con le librerie runtime predefinite di GCC.
M32R/D Opzioni
Alcuni degli -m le opzioni sono definite per le architetture Renesas M32R/D:
-m32r2
Genera codice per M32R/2.
-m32rx
Genera codice per M32R/X.
-m32r
Genera codice per M32R. Questa è l'impostazione predefinita.
-mmodel=piccolo
Supponiamo che tutti gli oggetti vivano nei 16 MB inferiori di memoria (in modo che i loro indirizzi possano essere
caricato con l'istruzione "ld24") e supponiamo che tutte le subroutine siano raggiungibili con l'istruzione
istruzione "bl". Questa è l'impostazione predefinita.
L'indirizzabilità di un particolare oggetto può essere impostata con l'attributo "model".
-mmodel=medio
Supponiamo che gli oggetti possano essere ovunque nello spazio degli indirizzi a 32 bit (il compilatore genera
istruzioni "seth/add3" per caricare i loro indirizzi) e presupporre che tutte le subroutine siano
raggiungibile con l'istruzione "bl".
-mmodel=grande
Supponiamo che gli oggetti possano essere ovunque nello spazio degli indirizzi a 32 bit (il compilatore genera
istruzioni "seth/add3" per caricare i loro indirizzi) e supporre che le subroutine potrebbero non essere
raggiungibile con l'istruzione "bl" (il compilatore genera il file molto più lento
sequenza di istruzioni "seth/add3/jl").
-msdata=nessuno
Disabilitare l'uso dell'area dati piccola. Le variabili vengono messe in uno tra ".data", ".bss", o
".rodata" (a meno che non sia stato specificato l'attributo "sezione"). Questa è l'impostazione predefinita.
La piccola area dati è composta dalle sezioni ".sdata" e ".sbss". Gli oggetti possono essere
metti esplicitamente nella piccola area dati con l'attributo "sezione" usando uno di questi
.
-msdata=datis
Metti piccoli dati globali e statici nell'area dati piccola, ma non generare speciali
codice per referenziarli.
-msdata=usa
Metti piccoli dati globali e statici nell'area dati piccola e genera speciali
istruzioni per farvi riferimento.
-G num
Metti oggetti globali e statici minori o uguali a num byte nei piccoli dati o
Sezioni BSS invece dei normali dati o sezioni BSS. Il valore predefinito di num is
8. il -msdata l'opzione deve essere impostata su uno di dati or uso per questa opzione di avere qualsiasi
effetto.
Tutti i moduli dovrebbero essere compilati con lo stesso -G num valore. Compilando con diversi
valori di num può o non può funzionare; se non lo fa il linker dà un errore
messaggio --- codice errato non viene generato.
-mdebug
Fa in modo che il codice specifico di M32R nel compilatore mostri alcune statistiche che potrebbero aiutare
nei programmi di debug.
-maligno-loop
Allinea tutti i loop a un limite di 32 byte.
-mno-align-loop
Non imporre un allineamento a 32 byte per i loop. Questa è l'impostazione predefinita.
-tasso di emissione=numero
Problema numero istruzioni per ciclo. numero può essere solo 1 o 2.
-mbranch-costo=numero
numero può essere solo 1 o 2. Se è 1, i rami sono preferiti al condizionale
codice, se è 2, vale il contrario.
-mflush-trappola=numero
Specifica il numero di trap da utilizzare per svuotare la cache. Il valore predefinito è 12. Valido
i numeri sono compresi tra 0 e 15 inclusi.
-mno-trappola-incasso
Specifica che la cache non può essere svuotata utilizzando un trap.
-mflush-funzione=Nome
Specifica il nome della funzione del sistema operativo da chiamare per svuotare la cache. Il
l'impostazione predefinita è _flush_cache, ma una chiamata di funzione viene utilizzata solo se non è disponibile un trap.
-mno-flush-funzione
Indica che non è disponibile alcuna funzione del sistema operativo per lo svuotamento della cache.
M680x0 Opzioni
Questi sono la -m opzioni definite per i processori M680x0 e ColdFire. Le impostazioni predefinite
dipendono da quale architettura è stata selezionata durante la configurazione del compilatore; le impostazioni predefinite
per le scelte più comuni sono riportate di seguito.
-marzo=arco
Genera codice per un'architettura specifica del set di istruzioni M680x0 o ColdFire.
Valori ammessi di arco per le architetture M680x0 sono: 68000, 68010, 68020, 68030,
68040, 68060 e cpu32. Le architetture ColdFire sono selezionate secondo i criteri di Freescale
La classificazione ISA e i valori ammissibili sono: isaa, isaaplus, isab e Isaac.
GCC definisce una macro "__mcfarco__" ogni volta che genera codice per un ColdFire
bersaglio. Il arco in questa macro è uno dei -marzo argomentazioni sopra riportate.
Se usati insieme, -marzo e -mtune seleziona il codice che gira su una famiglia di simili
processori ma che è ottimizzato per una particolare microarchitettura.
-mcpu=cpu
Genera codice per un processore M680x0 o ColdFire specifico. L'M680x0 cpusono:
68000, 68010, 68020, 68030, 68040, 68060, 68302, 68332 e cpu32. Il ColdFire cpus
sono dati dalla tabella sottostante, che classifica anche le CPU in famiglie:
Famiglia : -mcpu argomenti
51 : 51 51ac 51 ag 51cn 51em 51je 51jf 51jg 51jm 51mm 51 qe 51qm
5206 : 5202 5204 5206
5206e : 5206e
5208 : 5207 5208
5211a : 5210a 5211a
5213 : 5211 5212 5213
5216 : 5214 5216
52235 : 52230 52231 52232 52233 52234 52235
5225 : 5224 5225
52259 : 52252 52254 52255 52256 52258 52259
5235 : 5232 5233 5234 5235 523x
5249 : 5249
5250 : 5250
5271 : 5270 5271
5272 : 5272
5275 : 5274 5275
5282 : 5280 5281 5282 528x
53017 : 53011 53012 53013 53014 53015 53016 53017
5307 : 5307
5329 : 5327 5328 5329 532x
5373 : 5372 5373 537x
5407 : 5407
5475 : 5470 5471 5472 5473 5474 5475 547x 5480 5481 5482 5483 5484 5485
-mcpu=cpu sostituisce -marzo=arco if arco è compatibile con cpu. Altre combinazioni di
-mcpu e -marzo sono rifiutati.
GCC definisce la macro "__mcf_cpu_processore" quando target ColdFire cpu è selezionato. È anche
definisce "__mcf_family_famiglia", dove il valore di famiglia è data dalla tabella sopra.
-mtune=sintonizzare
Ottimizza il codice per una particolare microarchitettura entro i vincoli stabiliti da -marzo
e -mcpu. Le microarchitetture M680x0 sono: 68000, 68010, 68020, 68030, 68040,
68060 e cpu32. Le microarchitetture ColdFire sono: cfv1, cfv2, cfv3, cfv4 e
cfv4e.
È inoltre possibile utilizzare -mtune=68020-40 per il codice che deve funzionare relativamente bene su 68020,
68030 e 68040 obiettivi. -mtune=68020-60 è simile ma include 68060 obiettivi come
bene. Queste due opzioni selezionano le stesse decisioni di sintonizzazione di -m68020-40 e -m68020-60
rispettivamente.
GCC definisce le macro "__mcarco" e "__mcarco__" durante l'ottimizzazione per l'architettura 680x0
arco. Definisce anche "mcarco" a meno che neanche -ansi o un non GNU -std viene utilizzata l'opzione.
Se GCC si sta sintonizzando per una gamma di architetture, come selezionato da -mtune=68020-40 or
-mtune=68020-60, definisce le macro per ogni architettura della gamma.
GCC definisce anche la macro "__mpresto__" durante la messa a punto per la microarchitettura ColdFire
presto, Dove presto è uno degli argomenti sopra citati.
-M68000
-mc68000
Genera output per un 68000. Questa è l'impostazione predefinita quando il compilatore è configurato per
sistemi basati su 68000. È equivalente a -marzo=68000.
Utilizzare questa opzione per i microcontrollori con un core 68000 o EC000, incluso il 68008,
68302, 68306, 68307, 68322, 68328 e 68356.
-M68010
Genera output per un 68010. Questa è l'impostazione predefinita quando il compilatore è configurato per
sistemi basati su 68010. È equivalente a -marzo=68010.
-M68020
-mc68020
Genera output per un 68020. Questa è l'impostazione predefinita quando il compilatore è configurato per
sistemi basati su 68020. È equivalente a -marzo=68020.
-M68030
Genera output per un 68030. Questa è l'impostazione predefinita quando il compilatore è configurato per
sistemi basati su 68030. È equivalente a -marzo=68030.
-M68040
Genera output per un 68040. Questa è l'impostazione predefinita quando il compilatore è configurato per
sistemi basati su 68040. È equivalente a -marzo=68040.
Questa opzione inibisce l'uso delle istruzioni 68881/68882 che devono essere emulate da
software sul 68040. Utilizzare questa opzione se il 68040 non ha codice da emulare
quelle istruzioni.
-M68060
Genera output per un 68060. Questa è l'impostazione predefinita quando il compilatore è configurato per
sistemi basati su 68060. È equivalente a -marzo=68060.
Questa opzione inibisce l'uso delle istruzioni 68020 e 68881/68882 che devono essere
emulato dal software sul 68060. Usa questa opzione se il tuo 68060 non ha codice
per emulare quelle istruzioni.
-mcpu32
Genera output per una CPU32. Questa è l'impostazione predefinita quando il compilatore è configurato per
Sistemi basati su CPU32. È equivalente a -marzo=cpu32.
Utilizzare questa opzione per i microcontrollori con un core CPU32 o CPU32+, incluso il 68330,
68331, 68332, 68333, 68334, 68336, 68340, 68341, 68349 e 68360.
-M5200
Genera output per una CPU ColdFire 520X. Questa è l'impostazione predefinita quando il compilatore è
configurato per sistemi basati su 520X. È equivalente a -MCPU = 5206, ed è adesso
deprecato a favore di tale opzione.
Utilizzare questa opzione per microcontrollori con un core 5200, inclusi MCF5202, MCF5203,
MCF5204 e MCF5206.
-m5206e
Genera output per una CPU ColdFire 5206e. L'opzione è ora deprecata a favore di
l'equivalente -mcpu=5206e.
-m528x
Genera output per un membro della famiglia ColdFire 528X. L'opzione è ora
deprecato a favore dell'equivalente -mcpu=528x.
-M5307
Genera output per una CPU ColdFire 5307. L'opzione è ora deprecata a favore del
equivalente -MCPU = 5307.
-M5407
Genera output per una CPU ColdFire 5407. L'opzione è ora deprecata a favore del
equivalente -MCPU = 5407.
-mcfv4e
Genera output per una CPU della famiglia ColdFire V4e (es. 547x/548x). Ciò include l'uso di
istruzioni hardware in virgola mobile. L'opzione è equivalente a -mcpu=547x, ed è
ora deprecato a favore di tale opzione.
-m68020-40
Genera l'output per un 68040, senza utilizzare nessuna delle nuove istruzioni. Questo risulta
in codice che può essere eseguito in modo relativamente efficiente su un 68020/68881 o un 68030 o a
68040. Il codice generato utilizza le istruzioni 68881 emulate sul
68040
L'opzione è equivalente a -marzo=68020 -mtune=68020-40.
-m68020-60
Genera l'output per un 68060, senza utilizzare nessuna delle nuove istruzioni. Questo risulta
in codice che può essere eseguito in modo relativamente efficiente su un 68020/68881 o un 68030 o a
68040. Il codice generato utilizza le istruzioni 68881 emulate sul
68060
L'opzione è equivalente a -marzo=68020 -mtune=68020-60.
-mhard-flottante
-M68881
Genera istruzioni in virgola mobile. Questa è l'impostazione predefinita per 68020 e versioni successive e
per i dispositivi ColdFire dotati di FPU. Definisce la macro "__HAVE_68881__" su
Target M680x0 e "__mcffpu__" sui target ColdFire.
-msoft-flottante
Non generare istruzioni in virgola mobile; utilizzare invece le chiamate di libreria. Questo è il
predefinito per le destinazioni 68000, 68010 e 68832. È anche l'impostazione predefinita per ColdFire
dispositivi privi di FPU.
-div
-mno-div
Generare (non generare) istruzioni per la divisione e il resto dell'hardware ColdFire. Se
-marzo viene utilizzato senza -mcpu, l'impostazione predefinita è "on" per le architetture ColdFire e "off"
per architetture M680x0. Altrimenti, il valore predefinito viene preso dalla CPU di destinazione (o
la CPU predefinita, o quella specificata da -mcpu). Ad esempio, l'impostazione predefinita è "disattivato"
per -MCPU = 5206 e "acceso" per -mcpu=5206e.
GCC definisce la macro "__mcfhwdiv__" quando questa opzione è abilitata.
-mbreve
Considera il tipo "int" largo 16 bit, come "short int". Inoltre, i parametri
passati sullo stack sono anche allineati a un limite di 16 bit anche su obiettivi la cui API
impone la promozione a 32 bit.
-mno-corto
Non considerare il tipo "int" largo 16 bit. Questa è l'impostazione predefinita.
-mnobitfield
-mno-campo di bit
Non utilizzare le istruzioni del campo di bit. Il -M68000, -mcpu32 e -M5200 le opzioni implicano
-mnobitfield.
-mbitfield
Usa le istruzioni del campo di bit. Il -M68020 opzione implica -mbitfield. Questo è
l'impostazione predefinita se si utilizza una configurazione progettata per un 68020.
-mrtd
Utilizzare una convenzione di chiamata di funzione diversa, in cui le funzioni che accettano un valore fisso
numero di argomenti restituiti con l'istruzione "rtd", che fa apparire i loro argomenti
durante il ritorno. Ciò consente di risparmiare un'istruzione nel chiamante poiché non è necessario
pop gli argomenti lì.
Questa convenzione di chiamata è incompatibile con quella normalmente utilizzata su Unix, quindi
non può usarlo se devi chiamare librerie compilate con il compilatore Unix.
Inoltre, è necessario fornire prototipi di funzioni per tutte le funzioni che accettano variabili
numero di argomenti (incluso "printf"); altrimenti viene generato un codice errato per
chiamate a tali funzioni.
Inoltre, se si chiama una funzione con troppi risultati, si ottiene un codice gravemente errato
argomenti. (Normalmente, gli argomenti aggiuntivi vengono ignorati in modo innocuo.)
L'istruzione "rtd" è supportata da 68010, 68020, 68030, 68040, 68060 e CPU32
processori, ma non dal 68000 o dal 5200.
-mno-rtd
Non utilizzare le convenzioni di chiamata selezionate da -mrtd. Questa è l'impostazione predefinita.
-maligno-int
-mno-align-int
Controlla se GCC allinea "int", "long", "long long", "float", "double" e "long
double" variabili su un limite a 32 bit (-maligno-int) o un limite a 16 bit
(-mno-align-int). L'allineamento delle variabili su limiti a 32 bit produce codice che viene eseguito
un po' più veloce sui processori con bus a 32 bit a scapito di più memoria.
Attenzione: se usi l'estensione -maligno-int switch, GCC allinea le strutture che contengono quanto sopra
tipi in modo diverso rispetto alla maggior parte delle specifiche dell'interfaccia binaria dell'applicazione pubblicata per
l'm68k.
-mpcrel
Usa direttamente la modalità di indirizzamento relativo al PC del 68000, invece di usare un globale
tabella di compensazione. Al momento, questa opzione implica -fpic, consentendo al massimo un offset di 16 bit
per l'indirizzamento relativo al PC. -fPIC non è attualmente supportato con -mpcrel, sebbene
questo potrebbe essere supportato per processori 68020 e superiori.
-mno-strict-align
-mstrict-align
Non (do) presumere che i riferimenti di memoria non allineati siano gestiti dal sistema.
-msep-dati
Genera codice che consente di posizionare il segmento di dati in un'area di memoria diversa
dal segmento di testo. Ciò consente l'esecuzione sul posto in un ambiente senza
gestione della memoria virtuale. Questa opzione implica -fPIC.
-mno-set-data
Genera codice che presuppone che il segmento di dati segua il segmento di testo. Questo è
il predefinito.
-mid-libreria-condivisa
Genera codice che supporti le librerie condivise tramite il metodo dell'ID libreria. Questo permette
per librerie di esecuzione sul posto e condivise in un ambiente senza memoria virtuale
gestione. Questa opzione implica -fPIC.
-mno-id-libreria-condivisa
Genera codice che non presuppone l'utilizzo di librerie condivise basate su ID. Questo è
il predefinito.
-m-id-libreria-condivisa=n
Specifica il numero di identificazione della libreria condivisa basata su ID in fase di compilazione.
Specificare un valore di 0 genera un codice più compatto; specificando altri valori forze
l'assegnazione di quel numero alla libreria corrente, ma non è più spazio- o tempo-
efficiente rispetto all'omissione di questa opzione.
-Mxgot
-mno-xgot
Quando si genera codice indipendente dalla posizione per ColdFire, generare codice che funzioni se
il GOT ha più di 8192 voci. Questo codice è più grande e più lento del codice
generato senza questa opzione. Sui processori M680x0, questa opzione non è necessaria; -fPIC
basta.
GCC normalmente usa una singola istruzione per caricare i valori dal GOT. Mentre questo è
relativamente efficiente, funziona solo se il GOT è inferiore a circa 64k. Nulla
più grande fa sì che il linker riporti un errore come:
trasferimento troncato per adattarsi: R_68K_GOT16O foobar
Se ciò accade, dovresti ricompilare il tuo codice con -Mxgot. Dovrebbe quindi funzionare con
GOT molto grandi. Tuttavia, codice generato con -Mxgot è meno efficiente, poiché
richiede 4 istruzioni per recuperare il valore di un simbolo globale.
Nota che alcuni linker, incluse le versioni più recenti del linker GNU, possono creare
più GOT e ordina le voci GOT. Se hai un linker del genere, dovresti solo aver bisogno
usare -Mxgot quando si compila un singolo file oggetto che accede a più di 8192 GOT
inserimenti. Pochissimi lo fanno.
Queste opzioni non hanno effetto a meno che GCC non generi codice indipendente dalla posizione.
MCore Opzioni
Questi sono la -m opzioni definite per i processori Motorola M*Core.
-illuminato
-mno-illuminato
Costanti in linea nel flusso di codice se può essere eseguito in due istruzioni o meno.
-div
-mno-div
Usa l'istruzione di divisione. (Abilitato per impostazione predefinita).
-mrelax-immediato
-mno-relax-immediato
Consenti immediati di dimensioni arbitrarie nelle operazioni sui bit.
-mwide-bitfield
-mno-bitfields
Tratta sempre i campi di bit come di dimensioni "int".
-m4byte-funzioni
-mno-4byte-funzioni
Forza l'allineamento di tutte le funzioni a un limite di 4 byte.
-mcallgraph-dati
-mno-callgraph-dati
Emetti informazioni callgraph.
-mslow-byte
-mno-lento-byte
Preferisci l'accesso alla parola durante la lettura di quantità di byte.
-mittle-endian
-big endian
Genera codice per un target little-endian.
-M210
-M340
Genera codice per il processore 210.
-mno-lsim
Supponiamo che sia stato fornito il supporto per il runtime e quindi ometti la libreria del simulatore
(libsim.a) dalla riga di comando del linker.
-mstack-incremento=Taglia
Imposta l'importo massimo per una singola operazione di incremento dello stack. Grandi valori possono
aumentare la velocità dei programmi che contengono funzioni che richiedono una grande quantità di
spazio dello stack, ma possono anche attivare un errore di segmentazione se lo stack è esteso
troppo. Il valore predefinito è 0x1000.
MeP Opzioni
-mabsdiff
Abilita l'istruzione "abs", che è la differenza assoluta tra due registri.
-centro commerciale
Abilita tutte le istruzioni opzionali --- media, moltiplicazione, divisione, operazioni sui bit,
zero iniziale, differenza assoluta, min/max, clip e saturazione.
-la media
Abilita l'istruzione "ave", che calcola la media di due registri.
-mbasato=n
Variabili di dimensione n byte o meno vengono inseriti nella sezione ".based" per impostazione predefinita.
Le variabili basate usano il registro $tp come registro di base e c'è un limite di 128 byte
alla sezione ".basato".
-mbitop
Abilita le istruzioni operative sui bit --- bit test ("btstm"), set ("bsetm"), clear
("bclrm"), invert ("bnotm") e test-and-set ("tas").
-mc=Nome
Seleziona in quale sezione vengono inseriti i dati della costante. Nome può essere piccolo, vicino, o lontano.
-mclip
Abilita l'istruzione "clip". Notare che -mclip non è utile a meno che anche tu
fornire -minmax.
-mconfig=Nome
Seleziona una delle configurazioni principali integrate. Ogni chip MeP ne ha uno o più
moduli in esso; ogni modulo ha una CPU principale e una varietà di coprocessori, opzionali
istruzioni e periferiche. Lo strumento "MeP-Integrator", che non fa parte di GCC, fornisce
queste configurazioni tramite questa opzione; l'utilizzo di questa opzione equivale all'utilizzo di all
le corrispondenti opzioni della riga di comando. La configurazione predefinita è difetto.
-mcp
Abilita le istruzioni del coprocessore. Per impostazione predefinita, questo è un coprocessore a 32 bit. Nota
che il coprocessore è normalmente abilitato tramite il -mconfig= opzione.
-mcop32
Abilita le istruzioni del coprocessore a 32 bit.
-mcop64
Abilita le istruzioni del coprocessore a 64 bit.
-mivc2
Abilita la pianificazione IVC2. IVC2 è un coprocessore VLIW a 64 bit.
-mcc
Fa sì che le variabili costanti vengano posizionate nella sezione ".near".
-div
Abilita le istruzioni "div" e "divu".
-meb
Genera codice big-endian.
-mel
Genera codice little-endian.
-mio-volatile
Dice al compilatore che qualsiasi variabile contrassegnata con l'attributo "io" deve essere
considerato volatile.
-ml Fa sì che le variabili vengano assegnate alla sezione ".far" per impostazione predefinita.
-mleadz
Abilita l'istruzione "leadz" (zero iniziale).
-mm Fa in modo che le variabili vengano assegnate alla sezione ".near" per impostazione predefinita.
-minmax
Abilita le istruzioni "min" e "max".
-multiplo
Abilita la moltiplicazione e le istruzioni di moltiplicazione-accumula.
-mno-opt
Disabilita tutte le istruzioni opzionali abilitate da -centro commerciale.
-ripetere
Abilita le istruzioni "repeat" e "repeat", utilizzate per il looping low-overhead.
-SM Fa sì che tutte le variabili vengano impostate per impostazione predefinita sulla sezione ".tiny". Nota che c'è un
Limite di 65536 byte per questa sezione. Gli accessi a queste variabili usano la base %gp
registro.
-msatur
Abilita le istruzioni di saturazione. Nota che il compilatore attualmente non lo fa
generarli da soli, ma questa opzione è inclusa per compatibilità con altri strumenti,
come "come".
-msdram
Collega il runtime basato su SDRAM invece del runtime predefinito basato su ROM.
-msim
Collega le librerie runtime del simulatore.
-msimnovec
Collega le librerie runtime del simulatore, escludendo il supporto integrato per il ripristino e
vettori e tabelle di eccezione.
-mtf
Fa sì che tutte le funzioni vengano impostate per impostazione predefinita sulla sezione ".far". Senza questa opzione, le funzioni
l'impostazione predefinita è la sezione ".near".
-minuscolo=n
Variabili che sono n byte o meno vengono assegnati alla sezione ".tiny". Queste
le variabili usano il registro di base $gp. Il valore predefinito per questa opzione è 4, ma tieni presente che
c'è un limite di 65536 byte alla sezione ".tiny".
Microfiamma Opzioni
-msoft-flottante
Usa l'emulazione software per la virgola mobile (impostazione predefinita).
-mhard-flottante
Utilizzare le istruzioni hardware in virgola mobile.
-Mmmpy
Non ottimizzare i movimenti dei blocchi, usa "memcpy".
-mno-clearbss
Questa opzione è deprecata. Utilizzo -fno-zero-inizializzato-in-bss anziché.
-mcpu=tipo di CPU
Utilizzare le funzionalità e programmare il codice per la determinata CPU. I valori supportati sono in
formato vX.YY.Z, Dove X è una versione principale, YY è la versione minore, e Z is
codice di compatibilità. I valori di esempio sono v3.00.a, v4.00.b, v5.00.a, v5.00.b, v5.00.b,
v6.00.a.
-mxl-morbido-mul
Usa l'emulazione di moltiplicazione software (impostazione predefinita).
-mxl-soft-div
Usa l'emulazione software per le divisioni (impostazione predefinita).
-mxl-barile-shift
Usa il cambio a barilotto hardware.
-mxl-pattern-confronta
Usa le istruzioni per il confronto dei modelli.
-msmall-divide
Utilizzare l'ottimizzazione della ricerca nella tabella per le divisioni intere con segno piccole.
-mxl-stack-check
Questa opzione è deprecata. Utilizzo -fstack-controllo anziché.
-mxl-gp-opz
Utilizzare le sezioni ".sdata"/".sbss" relative a GP.
-mxl-moltiplica-alto
Utilizzare le istruzioni di moltiplicazione alta per la parte alta della moltiplicazione 32x32.
-mxl-float-convert
Utilizzare le istruzioni di conversione hardware in virgola mobile.
-mxl-float-sqrt
Utilizzare l'istruzione radice quadrata hardware in virgola mobile.
-big endian
Genera codice per un target big-endian.
-mittle-endian
Genera codice per un target little-endian.
-mxl-riordina
Utilizzare le istruzioni di riordino (caricamento/memorizzazione invertiti di scambio e byte).
-modalità-mxl-modello di app
Seleziona il modello di applicazione modello di app. I modelli validi sono
eseguibile
eseguibile normale (predefinito), utilizza il codice di avvio crt0.o.
xmdstub
da utilizzare con il debug intrusivo del software basato su Xilinx Microprocessor Debugger (XMD)
agente chiamato xmdstub. Questo usa il file di avvio crt1.o e imposta l'indirizzo iniziale di
il programma a 0x800.
bootstrap
per le applicazioni che vengono caricate utilizzando un bootloader. Questo modello utilizza il file di avvio
crt2.o che non contiene un gestore del vettore di ripristino del processore. Questo è adatto
per trasferire il controllo su un reset del processore al bootloader piuttosto che al
applicazione.
romanzieri
per applicazioni che non richiedono nessuno dei vettori MicroBlaze. Questa opzione
può essere utile per le applicazioni in esecuzione all'interno di un'applicazione di monitoraggio. Questo modello
usa crt3.o come file di avvio.
Opzione -modo-xl-modello di app è un alias deprecato per -modalità-mxl-modello di app.
MIPS Opzioni
-EB Genera codice big-endian.
-IL Genera codice little-endian. Questa è l'impostazione predefinita per mips*el-*-* configurazioni.
-marzo=arco
Genera codice che viene eseguito su arco, che può essere il nome di un generico MIPS ISA, o il
nome di un particolare processore. I nomi ISA sono: mips1, mips2, mips3, mips4,
mips32, mips32r2, mips32r3, mips32r5, mips32r6, mips64, mips64r2, mips64r3, mips64r5
e mips64r6. I nomi dei processori sono: 4kc, 4km, 4kp, 4ksc, 4kec, 4kem, 4conservo, 4ksd,
5kc, 5 kf, 20kc, 24kc, 24kf2_1, 24kf1_1, 24kec, 24kef2_1, 24kef1_1, 34kc, 34kf2_1,
34kf1_1, 34kn, 74kc, 74kf2_1, 74kf1_1, 74kf3_2, 1004kc, 1004kf2_1, 1004kf1_1,
longson2e, longson2f, longson3a, m4k, m14k, m14kc, m14ke, m14kec, otteo, ottoone+,
otteo2, otteo3, Orion, p5600, r2000, r3000, r3900, r4000, r4400, r4600, r4650,
r4700, r6000, r8000, rm7000, rm9000, r10000, r12000, r14000, r16000, sb1, sr71000,
vr4100, vr4111, vr4120, vr4130, vr4300, vr5000, vr5400, vr5500, xlr e XLP.
valore speciale da-abi seleziona l'architettura più compatibile per l'ABI . selezionato
(questo è, mips1 per ABI a 32 bit e mips3 per ABI a 64 bit).
Anche la toolchain nativa Linux/GNU supporta il valore nativo, che seleziona il meglio
opzione di architettura per il processore host. -marzo=nativo non ha alcun effetto se lo fa GCC
non riconoscere il processore.
Nei nomi dei processori, un finale 000 può essere abbreviato come k (per esempio, -marzo=r2k).
I prefissi sono facoltativi e vr può essere scritto r.
Nomi del modulo nf2_1 fare riferimento a processori con FPU con clock a metà della velocità del
nucleo, nomi della forma nf1_1 fare riferimento a processori con FPU con clock alla stessa velocità
come nucleo, e nomi della forma nf3_2 fare riferimento a processori con FPU con un rapporto di clock
di 3:2 rispetto al nucleo. Per motivi di compatibilità, nf è accettato come a
sinonimo di nf2_1 while nx e bfx sono accettati come sinonimi di nf1_1.
GCC definisce due macro in base al valore di questa opzione. Il primo è "_MIPS_ARCH",
che dà il nome dell'architettura di destinazione, come una stringa. Il secondo ha la forma
"_MIPS_ARCH_pippo", Dove foo è il valore in maiuscolo di "_MIPS_ARCH". Per esempio,
-marzo=r2000 imposta "_MIPS_ARCH" su "r2000" e definisce la macro "_MIPS_ARCH_R2000".
Si noti che la macro "_MIPS_ARCH" utilizza i nomi dei processori indicati sopra. In altro
parole, ha il prefisso completo e non si abbrevia 000 as k. In caso di a partire dal-
abi, la macro nomina l'architettura risolta (o "mips1" o "mips3"). Si nomina
l'architettura predefinita quando no -marzo l'opzione è data.
-mtune=arco
Ottimizza per arco. Tra le altre cose, questa opzione controlla il modo in cui sono le istruzioni
programmato e il costo percepito delle operazioni aritmetiche. L'elenco di arco valori
è lo stesso di -marzo.
Quando questa opzione non viene utilizzata, GCC ottimizza per il processore specificato da -marzo. Da
utilizzando -marzo e -mtune insieme, è possibile generare codice che gira su a
famiglia di processori, ma ottimizza il codice per un particolare membro di quella famiglia.
-mtune definisce le macro "_MIPS_TUNE" e "_MIPS_TUNE_pippo", che funzionano allo stesso modo
modo come il -marzo quelli sopra descritti.
-mips1
Equivalente a -marzo=mips1.
-mips2
Equivalente a -marzo=mips2.
-mips3
Equivalente a -marzo=mips3.
-mips4
Equivalente a -marzo=mips4.
-mips32
Equivalente a -marzo=mips32.
-mips32r3
Equivalente a -marzo=mips32r3.
-mips32r5
Equivalente a -marzo=mips32r5.
-mips32r6
Equivalente a -marzo=mips32r6.
-mips64
Equivalente a -marzo=mips64.
-mips64r2
Equivalente a -marzo=mips64r2.
-mips64r3
Equivalente a -marzo=mips64r3.
-mips64r5
Equivalente a -marzo=mips64r5.
-mips64r6
Equivalente a -marzo=mips64r6.
-mips16
-mno-mips16
Genera (non generare) codice MIPS16. Se GCC sta prendendo di mira un MIPS32 o MIPS64
architettura, fa uso di MIPS16e ASE.
La generazione del codice MIPS16 può anche essere controllata in base alla funzione mediante
Attributi "mips16" e "nomips16".
-mflip-mips16
Genera codice MIPS16 su funzioni alternate. Questa opzione è fornita per la regressione
test di generazione di codice misto MIPS16/non MIPS16 e non è inteso per l'ordinario
utilizzare nella compilazione del codice utente.
-minterlink-compresso
-mno-interlink-compresso
Richiedere (non richiedere) che il codice che utilizza lo standard MIPS ISA (non compresso) sia collegato-
compatibile con codice MIPS16 e microMIPS e viceversa.
Ad esempio, il codice che utilizza la codifica ISA standard non può passare direttamente a MIPS16 o
codice microMIPS; deve usare una chiamata o un salto indiretto. -minterlink-compresso
quindi disabilita i salti diretti a meno che GCC non sappia che l'obiettivo del salto non è
compresso.
-minterlink-mips16
-mno-interlink-mips16
Alias di -minterlink-compresso e -mno-interlink-compresso. Queste opzioni
precedono il microMIPS ASE e vengono mantenuti per compatibilità con le versioni precedenti.
-mabi=32
-mabi=o64
-mabi=n32
-mabi=64
-mabi=eabi
Genera codice per l'ABI specificato.
Si noti che l'EABI ha una variante a 32 bit e una a 64 bit. GCC normalmente genera 64 bit
codice quando si seleziona un'architettura a 64 bit, ma è possibile utilizzare -mgp32 per ottenere il codice a 32 bit
anziché.
Per informazioni sull'ABI O64, vederehttp://gcc.gnu.org/projects/mipso64-abi.html>.
GCC supporta una variante dell'ABI o32 in cui i registri a virgola mobile sono invece 64
di larghezza superiore a 32 bit. Puoi selezionare questa combinazione con -mabi=32 -mfp64. Questo ABI
si basa sulle istruzioni "mthc1" e "mfhc1" ed è quindi supportato solo per
Processori MIPS32R2, MIPS32R3 e MIPS32R5.
Le assegnazioni di registro per argomenti e valori restituiti rimangono le stesse, ma ciascuna
il valore scalare viene passato in un singolo registro a 64 bit anziché in una coppia di 32 bit
registri. Ad esempio, i valori scalari a virgola mobile vengono restituiti in $f0 solo, non un
$f0/$f1 coppia. Anche l'insieme dei registri delle chiamate salvate rimane lo stesso in quanto l'even-
vengono salvati i registri numerati a doppia precisione.
Sono supportate due varianti aggiuntive dell'ABI o32 per consentire una transizione da
Registri da 32 bit a 64 bit. Questi sono FPXX (-mfpxx) e FP64A (-mfp64
-mno-strano-spreg). L'estensione FPXX impone che tutto il codice venga eseguito correttamente
quando viene eseguito utilizzando registri a 32 o 64 bit. Il codice può essere interconnesso con entrambi
FP32 o FP64, ma non entrambi. L'estensione FP64A è simile all'estensione FP64 ma
vieta l'uso di registri a precisione singola dispari. Questo può essere utilizzato in
in combinazione con la modalità "FRE" delle FPU nei processori MIPS32R5 e consente sia FP32
e codice FP64A per interconnettersi ed eseguire nello stesso processo senza modificare le modalità FPU.
-mabicalls
-mno-abicali
Generare (non generare) codice adatto per oggetti dinamici in stile SVR4.
-mabicalls è l'impostazione predefinita per i sistemi basati su SVR4.
-mcondiviso
-mno-condiviso
Generare (non generare) codice completamente indipendente dalla posizione e che può
quindi essere collegati in librerie condivise. Questa opzione ha effetto solo -mabicalls.
Tutto -mabicalls il codice è stato tradizionalmente indipendente dalla posizione, indipendentemente dalle opzioni
piace -fPIC e -fpic. Tuttavia, come estensione, la toolchain GNU consente gli eseguibili
utilizzare accessi assoluti per simboli vincolanti localmente. Può anche usare GP più brevi
sequenze di inizializzazione e generare chiamate dirette a funzioni definite localmente. Questo
la modalità è selezionata da -mno-condiviso.
-mno-condiviso dipende da binutils 2.16 o superiore e genera oggetti che possono essere solo
collegato dal linker GNU. L'opzione non incide però sull'ABI della finale
eseguibile; interessa solo l'ABI degli oggetti rilocabili. Usando -mno-condiviso
generalmente rende gli eseguibili sia più piccoli che più veloci.
-mcondiviso è l'impostazione predefinita.
-plt
-mno-plt
Supponiamo (non dare per scontato) che i linker statici e dinamici supportino i PLT e la copia
traslochi. Questa opzione ha effetto solo -mno-condiviso -mabicalls. Per l'ABI n64, questo
l'opzione non ha effetto senza -msim32.
È possibile effettuare -plt l'impostazione predefinita configurando GCC con --con-mips-plt. Il predefinito
is -mno-plt altrimenti.
-Mxgot
-mno-xgot
Sollevare (non sollevare) le solite restrizioni sulla dimensione della tabella di offset globale.
GCC normalmente usa una singola istruzione per caricare i valori dal GOT. Mentre questo è
relativamente efficiente, funziona solo se il GOT è inferiore a circa 64k. Nulla
più grande fa sì che il linker riporti un errore come:
trasferimento troncato per adattarsi: R_MIPS_GOT16 foobar
Se ciò accade, dovresti ricompilare il tuo codice con -Mxgot. Funziona con molto
GOT di grandi dimensioni, sebbene il codice sia anche meno efficiente, poiché ne occorrono tre
istruzioni per recuperare il valore di un simbolo globale.
Nota che alcuni linker possono creare più GOT. Se hai un linker del genere,
dovrebbe solo aver bisogno di usare -Mxgot quando un singolo file oggetto accede a più di 64k
valore delle voci GOT. Pochissimi lo fanno.
Queste opzioni non hanno effetto a meno che GCC non generi codice indipendente dalla posizione.
-mgp32
Supponiamo che i registri generici siano larghi 32 bit.
-mgp64
Supponiamo che i registri generici siano larghi 64 bit.
-mfp32
Supponiamo che i registri a virgola mobile siano larghi 32 bit.
-mfp64
Supponiamo che i registri a virgola mobile siano larghi 64 bit.
-mfpxx
Non assumere la larghezza dei registri a virgola mobile.
-mhard-flottante
Utilizzare le istruzioni del coprocessore in virgola mobile.
-msoft-flottante
Non utilizzare istruzioni del coprocessore in virgola mobile. Implementa la virgola mobile
calcoli utilizzando invece le chiamate di libreria.
-mno-flottante
Equivalente a -msoft-flottante, ma afferma inoltre che il programma in fase di compilazione
non esegue alcuna operazione in virgola mobile. Questa opzione è attualmente supportata
solo da alcune configurazioni MIPS bare metal, dove può selezionare un set speciale di
librerie che non dispongono di tutto il supporto in virgola mobile (incluso, ad esempio, il
punto "printf" formati). Se il codice è compilato con -mno-flottante contiene accidentalmente
operazioni in virgola mobile, è probabile che subisca un errore in fase di collegamento o in fase di esecuzione.
-msingle-flottante
Si supponga che il coprocessore a virgola mobile supporti solo operazioni a precisione singola.
-mdouble-flottante
Si supponga che il coprocessore a virgola mobile supporti le operazioni a precisione doppia. Questo
è l'impostazione predefinita.
-modd-spreg
-mno-strano-spreg
Abilitare l'uso di registri a virgola mobile a precisione singola con numeri dispari per o32
ABI. Questa è l'impostazione predefinita per i processori che supportano questi registri.
Quando si utilizza l'o32 FPXX ABI, -mno-strano-spreg è impostato per impostazione predefinita.
-mabs=2008
-mabs=eredità
Queste opzioni controllano il trattamento dello special not-a-number (NaN) IEEE 754
dati in virgola mobile con "abs.fmt" e "neg.fmt" istruzioni della macchina.
Per impostazione predefinita o quando -mabs=eredità viene utilizzato il trattamento legacy viene selezionato. In questo
caso queste istruzioni sono considerate aritmetiche ed evitate dove corretto funzionamento
è richiesto e l'operando di input potrebbe essere un NaN. Una sequenza di istruzioni più lunga
che manipolano manualmente il bit di segno del dato in virgola mobile viene invece utilizzato a meno che
, il -finite-math-only è stata specificata anche l'opzione.
Le -mabs=2008 l'opzione seleziona il trattamento IEEE 754-2008. In questo caso questi
le istruzioni sono considerate non aritmetiche e quindi funzionanti correttamente in tutte
casi, compreso in particolare quando l'operando di input è un NaN. Queste istruzioni
sono quindi sempre utilizzati per le rispettive operazioni.
-mn=2008
-mnan=eredità
Queste opzioni controllano la codifica dello speciale not-a-number (NaN) IEEE 754
dati in virgola mobile.
Le -mnan=eredità l'opzione seleziona la codifica legacy. In questo caso NaN silenziosi (qNaN)
sono indicati dal primo bit del loro campo di significato finale che è 0, mentre
i NaN di segnalazione (sNaN) sono indicati dal primo bit del loro significato finale
campo essendo 1.
Le -mn=2008 l'opzione seleziona la codifica IEEE 754-2008. In questo caso i qNaN sono
denotato dal primo bit del loro campo significante finale che è 1, mentre sNaNs
sono indicati dal primo bit del loro campo di significato finale che è 0.
L'impostazione predefinita è -mnan=eredità a meno che GCC non sia stato configurato con --con-nan=2008.
-mlsc
-mno-llsc
Usa (non usare) ll, sce sync istruzioni per implementare la memoria atomica integrata
funzioni. Quando nessuna delle due opzioni è specificata, GCC utilizza le istruzioni se il target
l'architettura li supporta.
-mlsc è utile se l'ambiente di runtime può emulare le istruzioni e -mno-llsc
può essere utile quando si compila per ISA non standard. Puoi rendere entrambe le opzioni il
predefinito configurando GCC con --con-llsc e --senza-llsc rispettivamente.
--con-llsc è l'impostazione predefinita per alcune configurazioni; vedere la documentazione di installazione
per i dettagli.
-mdsp
-mno-dsp
Utilizzare (non utilizzare) la revisione 1 di MIPS DSP ASE.
Questa opzione definisce la macro del preprocessore "__mips_dsp". Definisce anche
"__mips_dsp_rev" su 1.
-mdspr2
-mno-dspr2
Utilizzare (non utilizzare) la revisione 2 di MIPS DSP ASE.
Questa opzione definisce le macro del preprocessore "__mips_dsp" e "__mips_dspr2". Esso
definisce anche "__mips_dsp_rev" su 2.
-msmartmips
-mno-smartmips
Utilizzare (non utilizzare) MIPS SmartMIPS ASE.
-single-deteriorato
-mno-singolo-accoppiato
Utilizzare (non utilizzare) istruzioni a virgola mobile accoppiate singole.
Questa opzione richiede l'abilitazione del supporto hardware in virgola mobile.
-mdmx
-mno-mdmx
Utilizzare (non utilizzare) le istruzioni MIPS Digital Media Extension. Questa opzione può essere solo
utilizzato durante la generazione di codice a 64 bit e richiede il supporto hardware in virgola mobile per essere
abilitato.
-mips3d
-mno-mips3d
Utilizzare (non utilizzare) MIPS-3D ASE. L'opzione -mips3d implica -single-deteriorato.
-mmicromips
-mno-micromi
Genera (non generare) codice microMIPS.
La generazione del codice MicroMIPS può anche essere controllata in base alla funzione mediante
attributi "micromips" e "nomicromips".
-mm
-mno-mt
Utilizzare (non utilizzare) le istruzioni MT Multithreading.
-mmcu
-mno-mcu
Utilizzare (non utilizzare) le istruzioni MIPS MCU ASE.
-meva
-mno-eva
Utilizzare (non utilizzare) le istruzioni per l'indirizzamento virtuale avanzato MIPS.
-virt
-mnovirt
Utilizzare (non utilizzare) le istruzioni specifiche dell'applicazione di virtualizzazione MIPS.
-mxp
-mno-xpa
Utilizzare (non utilizzare) le istruzioni MIPS eXtended Physical Address (XPA).
-mlungo64
Forza i tipi "lunghi" ad essere larghi 64 bit. Vedere -mlungo32 per una spiegazione del default
e il modo in cui viene determinata la dimensione del puntatore.
-mlungo32
Forza i tipi "long", "int" e puntatore a una larghezza di 32 bit.
La dimensione predefinita di "int", "long" e puntatori dipende dall'ABI. Tutti i
gli ABI supportati utilizzano "int" a 32 bit. L'ABI n64 utilizza "long" a 64 bit, così come il 64 bit
EABI; gli altri usano "long" a 32 bit. I puntatori hanno le stesse dimensioni dei "lunghi" o dei
stessa dimensione dei registri interi, qualunque sia il più piccolo.
-msim32
-mno-sim32
Supponiamo (non dare per scontato) che tutti i simboli abbiano valori a 32 bit, indipendentemente dal selezionato
ABI. Questa opzione è utile in combinazione con -mabi=64 e -mno-abicali perché
consente a GCC di generare riferimenti più brevi e veloci a indirizzi simbolici.
-G num
Metti le definizioni dei dati visibili esternamente in una piccola sezione di dati se quei dati non sono
più grande di num byte. GCC può quindi generare accessi più efficienti ai dati; vedere
-mgpopt per i dettagli.
Il predefinito -G l'opzione dipende dalla configurazione.
-mlocal-sdata
-mno-local-sdata
Estendere (non estendere) il -G comportamento anche ai dati locali, ad esempio alle variabili statiche
in c. -mlocal-sdata è l'impostazione predefinita per tutte le configurazioni.
Se il linker si lamenta che un'applicazione sta usando troppi piccoli dati, potresti
voglio provare a ricostruire le parti meno critiche per le prestazioni con -mno-local-sdata. È
potrebbe anche voler creare grandi librerie con -mno-local-sdata, in modo che le biblioteche
lasciare più spazio per il programma principale.
-mextern-sdata
-mno-extern-sdata
Si supponga (non si presuma) che i dati definiti esternamente si trovino in una piccola sezione di dati se il
la dimensione di quei dati è all'interno del -G limite. -mextern-sdata è l'impostazione predefinita per tutti
configurazioni.
Se compili un modulo Modo con -mextern-sdata -G num -mgpopte Modo riferimenti a
variabile Var che non è più grande di num byte, devi assicurarti che Var è posto
in una piccola sezione di dati. Se Var è definito da un altro modulo, devi compilare
quel modulo con un abbastanza alto -G impostare o allegare un attributo "sezione" a Var's
definizione. Se Var è comune, è necessario collegare l'applicazione con un livello abbastanza alto -G
impostazione.
Il modo più semplice per soddisfare queste restrizioni è compilare e collegare ogni modulo
con la stessa -G opzione. Tuttavia, potresti voler creare una libreria che supporti
diversi piccoli limiti di dati. Puoi farlo compilando la libreria con
il più alto supportato -G impostazione e inoltre utilizzando -mno-extern-sdata per fermare il
libreria dal fare ipotesi su dati definiti esternamente.
-mgpopt
-mno-gpopt
Utilizzare (non utilizzare) gli accessi relativi al GP per i simboli che sono noti per essere in un piccolo dato
sezione; vedere -G, -mlocal-sdata e -mextern-sdata. -mgpopt è l'impostazione predefinita per tutti
configurazioni.
-mno-gpopt è utile nei casi in cui il registro $gp potrebbe non contenere il valore di
"_gp". Ad esempio, se il codice fa parte di una libreria che potrebbe essere utilizzata in un avvio
monitor, i programmi che chiamano le routine del monitor di avvio passano un valore sconosciuto in $gp. (In
tali situazioni, il monitor di avvio stesso viene solitamente compilato con -G0.)
-mno-gpopt implica -mno-local-sdata e -mno-extern-sdata.
-dati-membri
-mno-dati-incorporati
Assegnare le variabili prima alla sezione dati di sola lettura se possibile, quindi successivamente nel
piccola sezione di dati se possibile, altrimenti nei dati. Questo dà un codice leggermente più lento
rispetto all'impostazione predefinita, ma riduce la quantità di RAM richiesta durante l'esecuzione e quindi potrebbe
essere preferito per alcuni sistemi embedded.
-muninit-const-in-rodata
-mno-uninit-const-in-rodata
Inserisci le variabili "const" non inizializzate nella sezione dati di sola lettura. Questa opzione è
significativo solo in combinazione con -dati-membri.
-mcode-leggibile=regolazione
Specifica se GCC può generare codice che legge da sezioni eseguibili. Ci sono
tre possibili impostazioni:
-mcode-readable=sì
Le istruzioni possono accedere liberamente alle sezioni eseguibili. Questa è l'impostazione predefinita.
-mcode-leggibile=pcrel
Le istruzioni di caricamento relative al PC MIPS16 possono accedere alle sezioni eseguibili, ma altro
le istruzioni non devono farlo. Questa opzione è utile sui processori 4KSc e 4KSd
quando i TLB di codice hanno impostato il bit di inibizione della lettura. È utile anche sui processori
che può essere configurato per avere una doppia interfaccia SRAM istruzione/dati e che,
come l'M4K, reindirizza automaticamente i carichi relativi al PC alla RAM delle istruzioni.
-mcode-leggibile=n
Le istruzioni non devono accedere alle sezioni eseguibili. Questa opzione può essere utile su
target che sono configurati per avere una doppia interfaccia SRAM istruzione/dati ma
che (a differenza dell'M4K) non reindirizza automaticamente i carichi relativi al PC al
RAM di istruzioni.
-msplit-indirizzi
-mno-split-indirizzi
Abilita (disabilita) l'uso degli operatori di rilocazione assembler "%hi()" e "%lo()". Questo
l'opzione è stata sostituita da -Mexplicit-relocs ma viene trattenuto all'indietro
la compatibilità.
-Mexplicit-relocs
-mno-reloc-esplicito
Utilizzare (non utilizzare) operatori di rilocazione assembler quando si tratta di indirizzi simbolici.
L'alternativa, selezionata da -mno-reloc-esplicito, è invece di usare le macro assembler.
-Mexplicit-relocs è l'impostazione predefinita se GCC è stato configurato per utilizzare un assembler che
supporta gli operatori di trasloco.
-mcheck-divisione-zero
-mno-check-zero-divisione
Intrappolare (non intrappolare) su una divisione intera per zero.
L'impostazione predefinita è -mcheck-divisione-zero.
-mdivide-trappole
-mdivide-interruzioni
I sistemi MIPS controllano la divisione per zero generando una trappola condizionale o a
istruzione di pausa. L'uso di trap produce un codice più piccolo, ma è supportato solo su MIPS
II e successivi. Inoltre, alcune versioni del kernel Linux hanno un bug che impedisce trap
dalla generazione del segnale appropriato ("SIGFPE"). Utilizzo -mdivide-trappole permettere il condizionale
trappole sulle architetture che le supportano e -mdivide-interruzioni forzare l'uso di
pause.
L'impostazione predefinita è di solito -mdivide-trappole, ma questo può essere sovrascritto al momento della configurazione
utilizzando --with-divide=interruzioni. I controlli di divisione per zero possono essere completamente disabilitati utilizzando
-mno-check-zero-divisione.
-Mmmpy
-mno-memcpy
Forza (non forzare) l'uso di "memcpy" per mosse di blocco non banali. L'impostazione predefinita è
-mno-memcpy, che consente a GCC di incorporare la maggior parte delle copie di dimensioni costanti.
-mlong-chiamate
-mno-chiamate lunghe
Disabilitare (non disabilitare) l'uso dell'istruzione "jal". Chiamare le funzioni usando "jal"
è più efficiente ma richiede che il chiamante e il chiamato si trovino nello stesso 256 megabyte
segmento.
Questa opzione non ha effetto sul codice abicalls. L'impostazione predefinita è -mno-chiamate lunghe.
-mamma
-mno-pazzo
Abilitare (disabilitare) l'uso delle istruzioni "mad", "madu" e "mul", come previsto dal
R4650 IS.
-mimad
-mno-imaddd
Abilitare (disabilitare) l'uso delle istruzioni intere "madd" e "msub". L'impostazione predefinita è
-mimad su architetture che supportano "madd" e "msub" ad eccezione dei 74k
architettura in cui si è scoperto che genera codice più lento.
-mfuso-pazzo
-mno-fuso-madd
Abilitare (disabilitare) l'uso delle istruzioni di moltiplicazione-accumulazione in virgola mobile, quando esse
sono disponibili. L'impostazione predefinita è -mfuso-pazzo.
Sulla CPU R8000, quando vengono utilizzate istruzioni di accumulo multiplo, l'intermedia
prodotto è calcolato con precisione infinita e non è soggetto alla FCSR Flush to
Punto zero. Questo può essere indesiderabile in alcune circostanze. Su altri processori il
il risultato è numericamente identico al calcolo equivalente utilizzando una moltiplicazione separata,
aggiungere, sottrarre e negare istruzioni.
-nocpp
Dire all'assemblatore MIPS di non eseguire il suo preprocessore sui file assembler utente (con a
.s suffisso) durante il montaggio.
-mfix-24k
-mno-fix-24k
Risolvere l'errata 24K E48 (dati persi sui negozi durante la ricarica). Le soluzioni alternative
sono implementati dall'assemblatore piuttosto che da GCC.
-mfix-r4000
-mno-fix-r4000
Risolvere alcuni errata della CPU R4000:
- Una doppia parola o uno spostamento variabile può dare un risultato errato se eseguito
subito dopo aver iniziato una divisione intera.
- Una doppia parola o uno spostamento variabile può dare un risultato errato se eseguito mentre
è in corso una moltiplicazione intera.
- Una divisione intera può dare un risultato errato se iniziata in uno slot di ritardo di a
preso ramo o un salto.
-mfix-r4400
-mno-fix-r4400
Risolvere alcuni errata della CPU R4400:
- Una doppia parola o uno spostamento variabile può dare un risultato errato se eseguito
subito dopo aver iniziato una divisione intera.
-mfix-r10000
-mno-fix-r10000
Risolvi alcuni errata R10000:
- Le sequenze "ll"/"sc" potrebbero non comportarsi in modo atomico su revisioni precedenti alla 3.0. potrebbero
deadlock sulle revisioni 2.6 e precedenti.
Questa opzione può essere utilizzata solo se l'architettura di destinazione supporta branch-probabilmente
istruzioni. -mfix-r10000 è l'impostazione predefinita quando -marzo=r10000 si usa; -mno-fix-r10000
è l'impostazione predefinita altrimenti.
-mfix-rm7000
-mno-fix-rm7000
Risolvere l'errata "dmult"/"dmultu" RM7000. Le soluzioni alternative sono implementate da
l'assemblatore piuttosto che da GCC.
-mfix-vr4120
-mno-fix-vr4120
Risolvere alcuni errata VR4120:
- "dmultu" non sempre produce il risultato corretto.
- "div" e "ddiv" non producono sempre il risultato corretto se uno degli operandi
è negativo.
Le soluzioni alternative per gli errata di divisione si basano su funzioni speciali in libgcc.a. A
presente, queste funzioni sono fornite solo dalle configurazioni "mips64vr*-elf".
Altre errata VR4120 richiedono l'inserimento di un NOP tra determinate coppie di
Istruzioni. Questi errata sono gestiti dall'assemblatore, non dallo stesso GCC.
-mfix-vr4130
Risolvere l'errata "mflo"/"mfhi" del VR4130. Le soluzioni alternative sono implementate dal
assembler piuttosto che da GCC, sebbene GCC eviti di usare "mflo" e "mfhi" se il
Sono invece disponibili le istruzioni VR4130 "macc", "macchi", "dmacc" e "dmacchi".
-mfix-sb1
-mno-correzione-sb1
Risolvere alcuni errata del core della CPU SB-1. (Questo flag attualmente funziona intorno all'SB-1
revisione 2 Errata in virgola mobile "F1" e "F2".)
-mr10k-cache-barriera=regolazione
Specificare se GCC deve inserire barriere di cache per evitare gli effetti collaterali di
speculazioni sui processori R10K.
In comune con molti processori, l'R10K cerca di prevedere l'esito di un condizionale
branch ed esegue in modo speculativo le istruzioni dal ramo "preso". E dopo
interrompe queste istruzioni se il risultato previsto è sbagliato. Tuttavia, sull'R10K,
anche le istruzioni interrotte possono avere effetti collaterali.
Questo problema riguarda solo gli archivi del kernel e, a seconda del sistema, i carichi del kernel.
Ad esempio, un archivio eseguito in modo speculativo può caricare la memoria di destinazione nella cache
e contrassegna la riga della cache come sporca, anche se il negozio stesso viene successivamente interrotto. Se un DMA
operazione scrive nella stessa area di memoria prima che la riga "sporca" venga svuotata, il
i dati memorizzati nella cache sovrascrivono i dati DMA-ed. Vedere il manuale del processore R10K per un completo
descrizione, inclusi altri potenziali problemi.
Una soluzione alternativa consiste nell'inserire le istruzioni della barriera della cache prima di ogni accesso alla memoria che
potrebbe essere eseguito in modo speculativo e ciò potrebbe avere effetti collaterali anche se abortito.
-mr10k-cache-barriera=regolazione controlla l'implementazione di questa soluzione da parte di GCC. Esso
presuppone che gli accessi interrotti a qualsiasi byte nelle seguenti regioni non abbiano side
effetti:
1. la memoria occupata dallo stack frame della funzione corrente;
2. la memoria occupata da un argomento dello stack in ingresso;
3. la memoria occupata da un oggetto con indirizzo a tempo di collegamento costante.
È responsabilità del kernel garantire che gli accessi speculativi a queste regioni
sono davvero al sicuro.
Se il programma di input contiene una dichiarazione di funzione come:
void foo (vuoto);
quindi l'implementazione di "foo" deve consentire l'esecuzione di "j foo" e "jal foo"
speculativamente. GCC rispetta questa restrizione per le funzioni che compila da solo. Esso
si aspetta che le funzioni non GCC (come il codice assembly scritto a mano) facciano lo stesso.
L'opzione ha tre forme:
-mr10k-cache-barrier=carica-archivio
Inserisci una barriera di cache prima di un caricamento o di un archivio che potrebbe essere eseguito in modo speculativo
e questo potrebbe avere effetti collaterali anche se abortito.
-mr10k-cache-barrier=negozio
Inserisci una barriera di cache prima di un negozio che potrebbe essere eseguito in modo speculativo e
che potrebbe avere effetti collaterali anche se abortito.
-mr10k-cache-barrier=nessuno
Disabilita l'inserimento delle barriere cache. Questa è l'impostazione predefinita.
-mflush-funzione=func
-mno-flush-funzione
Specifica la funzione da chiamare per svuotare le cache I e D o per non chiamarne nessuna
funzione. Se chiamata, la funzione deve prendere gli stessi argomenti del common
"_flush_func", ovvero l'indirizzo dell'intervallo di memoria per il quale è in corso la cache
svuotato, la dimensione dell'intervallo di memoria e il numero 3 (per svuotare entrambe le cache). Il
l'impostazione predefinita dipende dal GCC di destinazione per cui è stato configurato, ma comunemente è uno dei due
"_flush_func" o "__cpu_flush".
costo-mbranch=num
Imposta il costo delle filiali a circa num istruzioni "semplici". Questo costo è solo un
euristico e non è garantito che produca risultati coerenti tra le versioni. uno zero
costo seleziona in modo ridondante l'impostazione predefinita, che si basa sul -mtune impostazione.
-mbranch-probabile
-mno-ramo-probabile
Abilitare o disabilitare l'uso delle istruzioni Branch Likely, indipendentemente dall'impostazione predefinita per il
architettura selezionata. Per impostazione predefinita, le istruzioni di probabilità di diramazione possono essere generate se
sono supportati dall'architettura selezionata. Un'eccezione è per MIPS32 e
Architetture e processori MIPS64 che implementano tali architetture; per quelli,
Le istruzioni Branch Likely non vengono generate per impostazione predefinita perché MIPS32 e
Le architetture MIPS64 deprecano specificamente il loro uso.
-eccezioni-mfp
-mno-fp-eccezioni
Specifica se le eccezioni FP sono abilitate. Ciò influisce sul modo in cui sono le istruzioni FP
programmato per alcuni processori. L'impostazione predefinita è che le eccezioni FP siano abilitate.
Ad esempio, sull'SB-1, se le eccezioni FP sono disabilitate e stiamo emettendo 64 bit
codice, quindi possiamo usare entrambe le pipe FP. Altrimenti, possiamo usare solo un tubo FP.
-mvr4130-align
-mno-vr4130-align
La pipeline VR4130 è superscalare a due vie, ma può emettere solo due istruzioni
insieme se il primo è allineato a 8 byte. Quando questa opzione è abilitata, GCC si allinea
coppie di istruzioni che ritiene debbano essere eseguite in parallelo.
Questa opzione ha effetto solo durante l'ottimizzazione per il VR4130. Normalmente fa il codice
più veloce, ma a scapito di renderlo più grande. È abilitato per impostazione predefinita su
livello di ottimizzazione -O3.
-msynci
-mno-synci
Abilita (disabilita) la generazione di istruzioni "synci" sulle architetture che la supportano.
Le istruzioni "synci" (se abilitate) vengono generate quando "__builtin___clear_cache" è
compilato.
Questa opzione è predefinita su -mno-synci, ma l'impostazione predefinita può essere sovrascritta configurando
GCC con --con-synci.
Quando si compila codice per sistemi a processore singolo, è generalmente sicuro utilizzare "synci".
Tuttavia, su molti sistemi multi-core (SMP), non invalida l'istruzione
cache su tutti i core e può portare a comportamenti indefiniti.
-mrelax-pic-chiamate
-mno-relax-pic-chiamate
Prova a trasformare le chiamate PIC che normalmente vengono inviate tramite il registro $ 25 in chiamate dirette.
Questo è possibile solo se il linker può risolvere la destinazione al momento del collegamento e se
la destinazione è nel raggio di una chiamata diretta.
-mrelax-pic-chiamate è l'impostazione predefinita se GCC è stato configurato per utilizzare un assembler e a
linker che supportano la direttiva assembly ".reloc" e -Mexplicit-relocs è in
effetto. Insieme a -mno-reloc-esplicito, questa ottimizzazione può essere eseguita da
assembler e il linker da soli senza l'aiuto del compilatore.
-mmcount-ra-indirizzo
-mno-mcount-ra-indirizzo
Emetti (non emetti) il codice che consente a "_mcount" di modificare il ritorno della funzione chiamante
indirizzo. Quando abilitata, questa opzione estende la solita interfaccia "_mcount" con una nuova
ra-indirizzo parametro, che ha tipo "intptr_t *" e viene passato nel registro $12.
"_mcount" può quindi modificare l'indirizzo di ritorno effettuando entrambe le seguenti operazioni:
* Restituzione del nuovo indirizzo nel registro $ 31.
* Memorizzazione del nuovo indirizzo in "*ra-indirizzo", Se ra-indirizzo è non nullo.
L'impostazione predefinita è -mno-mcount-ra-indirizzo.
MMIX Opzioni
Queste opzioni sono definite per MMIX:
-mlibfuncs
-mno-libfuncs
Specificare che le funzioni della libreria intrinseca vengono compilate, passando tutti i valori in
registri, indipendentemente dalle dimensioni.
-mepsilon
-mno-epsilon
Genera istruzioni di confronto in virgola mobile che confrontano rispetto a "rE"
registro epsilon.
-mabi=mixware
-mabi = gnu
Genera codice che passi parametri di funzione e restituisca valori che (nella chiamata
funzione) sono visti come registri da $0 in su, al contrario di GNU ABI che usa global
registra $ 231 e oltre.
-mzero-estendere
-mno-zero-estendere
Quando si leggono dati dalla memoria di dimensioni inferiori a 64 bit, utilizzare (non utilizzare) zero-
estendendo le istruzioni di caricamento per impostazione predefinita, piuttosto che quelle che estendono il segno.
-mknuthdiv
-mno-knuthdiv
Fai in modo che il risultato di una divisione che produce un resto abbia lo stesso segno del divisore.
Con l'impostazione predefinita, -mno-knuthdiv, il segno del resto segue il segno della
dividendo. Entrambi i metodi sono aritmeticamente validi, essendo quest'ultimo quasi esclusivamente
Usato.
-mtoplevel-simboli
-mno-toplevel-simboli
Anteporre (non anteporre) a : a tutti i simboli globali, quindi è possibile utilizzare il codice assembly
con la direttiva assembly "PREFIX".
-melf
Genera un eseguibile nel formato ELF, piuttosto che in quello predefinito mmo formato usato da
, il mescolare simulatore.
-mbranch-prevedere
-mno-ramo-previsione
Utilizzare (non utilizzare) le istruzioni del probabile ramo, quando la previsione del ramo statico
indica un probabile ramo.
-indirizzi-base
-mno-indirizzi-base
Genera (non generare) codice che utilizza base indirizzi. Utilizzo di un indirizzo di base
genera automaticamente una richiesta (gestita dall'assemblatore e dal linker) per a
costante da impostare in un registro globale. Il registro è utilizzato per una o più basi
indirizzare le richieste nell'intervallo da 0 a 255 dal valore contenuto nel registro. Il
generalmente porta a un codice breve e veloce, ma il numero di diversi elementi di dati che
può essere affrontato è limitato. Ciò significa che un programma che utilizza molti dati statici
può richiedere -mno-indirizzi-base.
-msuscita singola
-mno-uscita singola
Forza (non forzare) il codice generato per avere un singolo punto di uscita in ogni funzione.
MN10300 Opzioni
Alcuni degli -m le opzioni sono definite per le architetture Matsushita MN10300:
-Mult-bug
Genera codice per evitare bug nelle istruzioni di moltiplicazione per i processori MN10300.
Questo è l'impostazione predefinita.
-mno-multi-bug
Non generare codice per evitare bug nelle istruzioni di moltiplicazione per MN10300
processori.
-mam33
Genera codice utilizzando funzionalità specifiche del processore AM33.
-Mno-Am33
Non generare codice utilizzando funzionalità specifiche del processore AM33. Questo è il
predefinito.
-mam33-2
Genera codice utilizzando funzionalità specifiche del processore AM33/2.0.
-mam34
Genera codice utilizzando funzionalità specifiche del processore AM34.
-mtune=tipo di CPU
Utilizzare le caratteristiche di temporizzazione del tipo di CPU indicato durante la pianificazione delle istruzioni.
Ciò non modifica il tipo di processore di destinazione. Il tipo di CPU deve essere uno di
mn10300, am33, am33-2 or am34.
-mpuntatore-di-ritorno-su-d0
Quando si genera una funzione che restituisce un puntatore, restituire il puntatore sia in "a0" che in
"d0". Altrimenti, il puntatore viene restituito solo in "a0" e tenta di chiamare tale
funzioni senza un prototipo danno luogo a errori. Nota che questa opzione è attiva da
predefinito; utilizzo -mno-puntatore-ritorno-su-d0 per disabilitarlo.
-mno-crt0
Non collegare nel file oggetto di inizializzazione di runtime C.
-rilassati
Indica al linker che deve eseguire un passaggio di ottimizzazione del rilassamento a
accorciare rami, chiamate e indirizzi di memoria assoluta. Questa opzione ha solo effetto
quando utilizzato sulla riga di comando per il passaggio finale del collegamento.
Questa opzione rende impossibile il debug simbolico.
-miw
Consenti al compilatore di generare Lunghi Istruzione Word istruzioni se l'obiettivo è il
AM33 o più tardi. Questa è l'impostazione predefinita. Questa opzione definisce la macro del preprocessore
"__LIW__".
-Mnoliw
Non consentire al compilatore di generare Lunghi Istruzione Word Istruzioni. Questa opzione
definisce la macro del preprocessore "__NO_LIW__".
-msetlb
Consenti al compilatore di generare il SETLB e Lcc istruzioni se l'obiettivo è il
AM33 o più tardi. Questa è l'impostazione predefinita. Questa opzione definisce la macro del preprocessore
"__SETLB__".
-mnosetlb
Non consentire al compilatore di generare SETLB or Lcc Istruzioni. Questa opzione definisce
la macro del preprocessore "__NO_SETLB__".
Moxie Opzioni
-meb
Genera codice big-endian. Questa è l'impostazione predefinita per moxie-*-* configurazioni.
-mel
Genera codice little-endian.
-mmul.x
Genera istruzioni mul.x e umul.x. Questa è l'impostazione predefinita per moxiebox-*-*
configurazioni.
-mno-crt0
Non collegare nel file oggetto di inizializzazione di runtime C.
MSP430 Opzioni
Queste opzioni sono definite per l'MSP430:
-masm-esadecimale
Forza l'output dell'assieme a utilizzare sempre le costanti esadecimali. Normalmente tali costanti sono con segno
decimali, ma questa opzione è disponibile per testsuite e/o per scopi estetici.
-mmcu=
Seleziona l'MCU da scegliere come target. Questo è usato per creare un simbolo del preprocessore C basato su
il nome MCU, convertito in maiuscolo e pre e post-fissato con __. Questo a sua volta
è utilizzato da msp430.h file di intestazione per selezionare un'intestazione supplementare specifica per MCU
file.
L'opzione imposta anche l'ISA da utilizzare. Se il nome MCU è noto solo a
supporta l'ISA 430, quindi viene selezionato, altrimenti viene selezionato l'ISA 430X. UN
nome MCU generico di msp430 può essere utilizzato anche per selezionare l'ISA 430. Allo stesso modo il
generico msp430x Il nome MCU seleziona l'ISA 430X.
Inoltre, alla riga di comando del linker viene aggiunto uno script del linker specifico per MCU. Il
il nome dello script è il nome dell'MCU con .ld allegato. Così specificando -mmcu=xxx on
, il gcc la riga di comando definisce il simbolo del preprocessore C "__XXX__" e causa il linker
per cercare uno script chiamato xxx.ld.
Questa opzione viene passata anche all'assemblatore.
-mcpu=
Specifica l'ISA da utilizzare. I valori accettati sono msp430, msp430x e msp430xv2. Questo
opzione è deprecata. Il -mmcu= l'opzione dovrebbe essere usata per selezionare l'ISA.
-msim
Collegamento alle librerie di runtime del simulatore e allo script del linker. Sostituisce qualsiasi script che
sarebbe stato selezionato dal -mmcu= opzione.
-mgrande
Utilizzare l'indirizzamento per modelli di grandi dimensioni (puntatori a 20 bit, "size_t" a 32 bit).
-mpiccolo
Utilizzare l'indirizzamento modello piccolo (puntatori a 16 bit, "size_t" a 16 bit).
-rilassati
Questa opzione viene passata all'assemblatore e al linker e consente al linker di eseguire
alcune ottimizzazioni che non possono essere eseguite fino al collegamento finale.
mhwmult=
Descrive il tipo di moltiplicatore hardware supportato dalla destinazione. I valori accettati sono
nessuna per nessun hardware moltiplicare, 16bit per la moltiplicazione originale solo a 16 bit supportata
dai primi MCU. 32bit per la moltiplicazione a 16/32 bit supportata da MCU successivi e serie f5
per la moltiplicazione a 16/32 bit supportata dagli MCU della serie F5. Un valore di auto può anche essere
dato. Questo dice a GCC di dedurre il supporto di moltiplicazione hardware in base al nome MCU
concesso dall' -mmcu opzione. se no -mmcu l'opzione è quindi specificata 32bit hardware
si presume il supporto moltiplicato. auto è l'impostazione predefinita.
Le moltiplicazioni hardware vengono normalmente eseguite chiamando una routine di libreria. Questo salva
spazio nel codice generato. Quando si compila a -O3 o superiore comunque l'hardware
moltiplicatore viene invocato in linea. Questo rende il codice più grande, ma più veloce.
Le routine di moltiplicazione hardware disabilitano gli interrupt durante l'esecuzione e ripristinano il
stato di interruzione precedente al termine. Questo li rende sicuri da usare all'interno
gestori di interrupt così come nel codice normale.
-mint
Abilita l'uso di un ambiente di runtime minimo - nessun inizializzatore statico o
costruttori. Questo è destinato ai dispositivi con limitazioni di memoria. Il compilatore include
simboli speciali in alcuni oggetti che dicono al linker e al runtime quali frammenti di codice
sono necessarie.
NDS32 Opzioni
Queste opzioni sono definite per le implementazioni NDS32:
-big endian
Genera codice in modalità big-endian.
-mittle-endian
Genera codice in modalità little-endian.
-regs-ridotti
Utilizzare registri a set ridotto per l'allocazione dei registri.
-mfull-regs
Utilizzare registri completi per l'allocazione dei registri.
-mcmov
Genera istruzioni di movimento condizionali.
-mno-cmov
Non generare istruzioni di movimento condizionali.
-mperf-est
Genera istruzioni per l'estensione delle prestazioni.
-mno-perf-est
Non generare istruzioni per l'estensione delle prestazioni.
-mv3push
Genera istruzioni v3 push25/pop25.
-mno-v3push
Non generare istruzioni push3/pop25 v25.
-m16 bit
Genera istruzioni a 16 bit.
-mno-16-bit
Non generare istruzioni a 16 bit.
-misr-dimensione-vettoriale=num
Specificare la dimensione di ciascun vettore di interruzione, che deve essere 4 o 16.
-mcache-dimensione-blocco=num
Specificare la dimensione di ciascun blocco della cache, che deve essere una potenza di 2 compresa tra 4 e 512.
-marzo=arco
Specificare il nome dell'architettura di destinazione.
-mcmodello=codice-modello
Imposta il modello di codice su uno di
piccole
Tutti i dati e i segmenti di dati di sola lettura devono essere all'interno di uno spazio di indirizzamento di 512 KB.
Il segmento di testo deve essere entro 16 MB di spazio di indirizzamento.
medie
Il segmento di dati deve essere entro 512 KB mentre il segmento di dati di sola lettura può essere
entro 4 GB di spazio di indirizzamento. Il segmento di testo dovrebbe essere ancora entro 16 MB
spazio di indirizzamento.
grandi
Tutti i segmenti di testo e dati possono trovarsi in uno spazio di indirizzamento di 4 GB.
-mctor-dtor
Abilita la funzione costruttore/distruttore.
-rilassati
Linker guida per rilassare le istruzioni.
Nios II Opzioni
Queste sono le opzioni definite per il processore Altera Nios II.
-G num
Metti oggetti globali e statici minori o uguali a num byte nei piccoli dati o
Sezioni BSS invece dei normali dati o sezioni BSS. Il valore predefinito di num is
8.
-mgpopt=opzione
-mgpopt
-mno-gpopt
Generare (non generare) accessi relativi a GP. Il seguente opzione i nomi sono
riconosciuto:
nessuna
Non generare accessi relativi a GP.
locale
Generare accessi relativi a GP per piccoli oggetti dati che non sono esterni o
debole. Utilizzare anche l'indirizzamento relativo al GP per oggetti che sono stati esplicitamente
inserito in una piccola sezione di dati tramite un attributo "sezione".
globale
Per quanto riguarda i locale, ma anche generare accessi relativi a GP per piccoli oggetti dati che
sono esterni o deboli. Se utilizzi questa opzione, devi assicurarti che tutte le parti di
il tuo programma (comprese le librerie) è compilato con lo stesso -G impostazione.
dati
Genera accessi relativi a GP per tutti gli oggetti dati nel programma. Se usi
questa opzione, gli interi segmenti di dati e BSS del tuo programma devono rientrare in 64K di
memoria ed è necessario utilizzare uno script linker appropriato per allocarli all'interno del
intervallo indirizzabile del puntatore globale.
contro tutti i Genera indirizzi relativi a GP per puntatori a funzione e puntatori a dati. Se
utilizzi questa opzione, l'intero testo, i dati e i segmenti BSS del tuo programma devono
adattarsi a 64K di memoria ed è necessario utilizzare uno script linker appropriato per allocare
all'interno dell'intervallo indirizzabile del puntatore globale.
-mgpopt è equivalente -mgpopt=localee -mno-gpopt è equivalente -mgpopt=nessuno.
L'impostazione predefinita è -mgpopt tranne quando -fpic or -fPIC è specificato per generare posizione-
codice indipendente. Si noti che Nios II ABI non consente accessi relativi al medico di base da
biblioteche condivise.
Potrebbe essere necessario specificare -mno-gpopt esplicitamente quando si creano programmi che includono
grandi quantità di piccoli dati, comprese grandi sezioni di dati GOT. In questo caso, il
L'offset a 16 bit per l'indirizzamento relativo al GP potrebbe non essere abbastanza grande da consentire l'accesso a
l'intera sezione dei piccoli dati.
-mel
-meb
Genera rispettivamente codice little-endian (predefinito) o big-endian (sperimentale).
-mbypass-cache
-mno-bypass-cache
Forza tutte le istruzioni di caricamento e memorizzazione per ignorare sempre la cache utilizzando le varianti I/O di
le istruzioni. L'impostazione predefinita è non ignorare la cache.
-mno-cache-volatile
-mcache-volatile
L'accesso alla memoria volatile bypassa la cache utilizzando le varianti I/O del caricamento e dell'archiviazione
Istruzioni. L'impostazione predefinita è non ignorare la cache.
-mno-fast-sw-div
-mfast-sw-div
Non utilizzare la divisione veloce basata su tabelle per numeri piccoli. L'impostazione predefinita è usare il veloce
dividere a -O3 e al di sopra.
-mno-hw-mul
-mhw-mul
-mno-hw-mulx
-mhw-mulx
-mno-hw-div
-MHW-div
Abilitare o disabilitare l'emissione della famiglia di istruzioni "mul", "mulx" e "div" da parte del
compilatore. L'impostazione predefinita è emettere "mul" e non emettere "div" e "mulx".
-mpersonalizzato-locanda=N
-mno-personalizzato-locanda
Ogni -mpersonalizzato-locanda=N l'opzione abilita l'uso di un'istruzione personalizzata con codifica N quando
generazione di codice che utilizza locanda. Per esempio, -mmode-personalizzate=253 genera personalizzato
istruzione 253 per operazioni di aggiunta a virgola mobile a precisione singola invece di
comportamento predefinito dell'utilizzo di una chiamata alla libreria.
I seguenti valori di locanda sono supportati. Salvo indicazione contraria, in virgola mobile
le operazioni dovrebbero essere implementate con la normale semantica IEEE 754 e
corrispondono direttamente agli operatori C o alle funzioni integrate GCC equivalenti.
Virgola mobile a precisione singola:
mode, fsub, fdiv, fmul
Operazioni aritmetiche binarie.
fneg
Negazione unaria.
favoloso
Valore assoluto unario.
fcpeqs, fcmpges, fcmmpgts, fcmmples, fcmlts, fcmpnes
Operazioni di confronto.
fmin, fmax
Minimo e massimo in virgola mobile. Queste istruzioni vengono generate solo se
-finite-math-only è specificato.
fsqrts
Operazione di radice quadrata unaria.
fcoss, peccaminosi, ftan, fatan, feps, fruste
Funzioni trigonometriche ed esponenziali in virgola mobile. Queste istruzioni sono
generato solo se -funsafe-math-ottimizzazioni è anche specificato.
Virgola mobile a doppia precisione:
stravagante, fsubd, fdivd, fmuld
Operazioni aritmetiche binarie.
fnegd
Negazione unaria.
favoloso
Valore assoluto unario.
fcpeqd, fcmpged, fcmpgd, fcmplementato, fcmltd, fcmpned
Operazioni di confronto.
trova, fmaxd
Minimo e massimo a doppia precisione. Queste istruzioni vengono generate solo se
-finite-math-only è specificato.
fsqrtd
Operazione di radice quadrata unaria.
fcosd, trova, ftand, fatand, fesp, flogo
Funzioni trigonometriche ed esponenziali a doppia precisione. Queste istruzioni sono
generato solo se -funsafe-math-ottimizzazioni è anche specificato.
conversioni:
fext
Conversione da precisione singola a precisione doppia.
risultati
Conversione da doppia precisione a singola precisione.
fixi, fixsu, fixdi, fixdu
Conversione da virgola mobile a tipi interi con segno o senza segno, con
troncamento verso lo zero.
tondo
Conversione da virgola mobile a precisione singola a intero con segno, arrotondando a
intero più vicino e legami da zero. Questo corrisponde a
Funzione "__builtin_lroundf" quando -fno-matematica-errno viene utilizzato.
galleggiante, galleggiante, galleggiante, galleggiante
Conversione da tipi interi con o senza segno a tipi a virgola mobile.
Inoltre, tutte le seguenti istruzioni di trasferimento per i registri interni X e Y
deve essere fornito per utilizzare una qualsiasi delle istruzioni a virgola mobile a precisione doppia.
Le istruzioni personalizzate che accettano due operandi sorgente a precisione doppia prevedono il primo
operando nel registro X a 64 bit. L'altro operando (o solo operando di un unario
operazione) viene data all'istruzione aritmetica personalizzata con la meno significativa
metà nel registro delle fonti src1 e la metà più significativa in src2. una consuetudine
l'istruzione che restituisce un risultato a precisione doppia restituisce il 32 . più significativo
bit nel registro di destinazione e l'altra metà nel registro a 32 bit Y. GCC
genera automaticamente le sequenze di codice necessarie per scrivere il registro X e/o leggere
registra Y quando vengono utilizzate istruzioni a virgola mobile a precisione doppia.
fwx
Scrivi src1 nella metà meno significativa di X e src2 nel più significativo
metà di X.
furioso
Scrivi src1 in Y.
frdxhi, frdxlo
Leggere la metà più o meno (rispettivamente) significativa di X e memorizzarla in meno.
frida
Leggi il valore di Y e memorizzalo in meno.
Nota che puoi ottenere un maggiore controllo locale sulla generazione di Nios II personalizzato
istruzioni utilizzando il "target("custom-insn=N")" e "target("no-custom-insn")"
attributi di funzione o pragma.
-mcustom-fpu-cfg=Nome
Questa opzione abilita un insieme predefinito e denominato di codifiche di istruzioni personalizzate (vedi
-mpersonalizzato-locanda sopra). Attualmente sono definiti i seguenti insiemi:
-mcustom-fpu-cfg=60-1 è equivalente a: -mcustom-fmuls=252 -mmode-personalizzate=253
-mcustom-fsubs=254 -fcostante-di-precisione-singola
-mcustom-fpu-cfg=60-2 è equivalente a: -mcustom-fmuls=252 -mmode-personalizzate=253
-mcustom-fsubs=254 -mcustom-fdivs=255 -fcostante-di-precisione-singola
-mcustom-fpu-cfg=72-3 è equivalente a: -mcustom-floatus=243 -mcustom-fixsi=244
-mcustom-floatis=245 -mcustom-fcmpgts=246 -mcustom-fcmmples=249 -mcustom-fcpeqs=250
-mcustom-fcmpnes=251 -mcustom-fmuls=252 -mmode-personalizzate=253 -mcustom-fsubs=254
-mcustom-fdivs=255 -fcostante-di-precisione-singola
Assegnazioni di istruzioni personalizzate fornite dall'individuo -mpersonalizzato-locanda= le opzioni sovrascrivono
quelli dati da -mcustom-fpu-cfg=, indipendentemente dall'ordine delle opzioni sul
riga di comando.
Nota che puoi ottenere un maggiore controllo locale sulla selezione di una configurazione FPU da
usando il "target("custom-fpu-cfg=nome")" attributo di funzione o pragma.
Questi aggiuntivi -m sono disponibili opzioni per il bersaglio Altera Nios II ELF (bare-metal):
-mal
Collegamento con HAL BSP. Questo elimina il collegamento con l'avvio del runtime C fornito da GCC
e codice di terminazione, ed è tipicamente utilizzato in combinazione con -msys-crt0= specificare
la posizione del codice di avvio alternativo fornito da HAL BSP.
-mpiccolo
Collegamento con una versione limitata della libreria C, -lpiccolo, piuttosto che Newlib.
-msys-crt0=file di partenza
file di partenza è il nome del file del file di avvio (crt0) da utilizzare durante il collegamento. Questa opzione
è utile solo in combinazione con -mal.
-msys-lib=systemlib
systemlib è il nome della libreria che fornisce chiamate di sistema di basso livello
richiesto dalla libreria C, ad es. "read" e "write". Questa opzione viene in genere utilizzata per
collegamento con una libreria fornita da un HAL BSP.
Nvidia PTX Opzioni
Queste opzioni sono definite per Nvidia PTX:
-M32
-M64
Genera codice per ABI a 32 o 64 bit.
-mmainkernel
Link nel codice per un kernel __main. Questo è per stand-alone invece di scaricare
esecuzione.
PDP-11 Opzioni
Queste opzioni sono definite per il PDP-11:
-mfpu
Usa hardware FPP in virgola mobile. Questa è l'impostazione predefinita. (virgola mobile FIS sul
PDP-11/40 non è supportato.)
-msoft-flottante
Non utilizzare hardware in virgola mobile.
-mac0
Restituisce i risultati in virgola mobile in ac0 (fr0 nella sintassi dell'assemblatore Unix).
-mno-ac0
Restituisce i risultati in virgola mobile in memoria. Questa è l'impostazione predefinita.
-M40
Genera codice per un PDP-11/40.
-M45
Genera codice per un PDP-11/45. Questa è l'impostazione predefinita.
-M10
Genera codice per un PDP-11/10.
-mbcopy-integrato
Usa modelli "movmemhi" in linea per copiare la memoria. Questa è l'impostazione predefinita.
-mbcopia
Non utilizzare modelli "movmemhi" in linea per copiare la memoria.
-menta16
-mno-int32
Usa "int" a 16 bit. Questa è l'impostazione predefinita.
-menta32
-mno-int16
Usa "int" a 32 bit.
-mfloat64
-mno-flottante32
Usa "float" a 64 bit. Questa è l'impostazione predefinita.
-mfloat32
-mno-flottante64
Usa "float" a 32 bit.
-mabshi
Usa il modello "abshi2". Questa è l'impostazione predefinita.
-mno-abshi
Non utilizzare il modello "abshi2".
-mbranch-costoso
Fai finta che le filiali siano costose. Questo è per sperimentare con la generazione del codice
solo.
-mbranch-economico
Non fingere che i rami siano costosi. Questa è l'impostazione predefinita.
-munix-asm
Usa la sintassi dell'assemblatore Unix. Questa è l'impostazione predefinita quando è configurata per pdp11-*-bsd.
-mdec-asm
Usa la sintassi dell'assemblatore DEC. Questa è l'impostazione predefinita quando è configurata per qualsiasi target PDP-11
diverso pdp11-*-bsd.
picoChip Opzioni
Alcuni degli -m le opzioni sono definite per le implementazioni picoChip:
-mae=ae_type
Impostare il set di istruzioni, il set di registri e i parametri di pianificazione delle istruzioni per l'array
tipo di elemento ae_type. Valori supportati per ae_type sono QUALSIASI, MULe MAC.
-mae=QUALSIASI seleziona un tipo di AE completamente generico. Il codice generato con questa opzione viene eseguito
su uno qualsiasi degli altri tipi di AE. Il codice non è efficiente come sarebbe se compilato
per uno specifico tipo di AE e alcuni tipi di operazione (ad es. moltiplicazione) non funzionano
correttamente su tutti i tipi di AE.
-mae=MUL seleziona un tipo MUL AE. Questo è il tipo AE più utile per il codice compilato,
ed è l'impostazione predefinita.
-mae=MAC seleziona un MAC AE in stile DSP. Il codice compilato con questa opzione potrebbe risentirne
scarse prestazioni di manipolazione di byte (char), poiché DSP AE non fornisce
supporto hardware per caricamento/archiviazione di byte.
-msimbolo-come-indirizzo
Consenti al compilatore di utilizzare direttamente un nome di simbolo come indirizzo in un carico/negozio
istruzione, senza prima caricarla in un registro. In genere, l'uso di questo
L'opzione genera programmi più grandi, che vengono eseguiti più velocemente rispetto a quando l'opzione non viene utilizzata.
Tuttavia, i risultati variano da programma a programma, quindi è lasciato come opzione dell'utente,
invece di essere permanentemente abilitato.
-mno-inefficiente-avvisi
Disabilita gli avvisi sulla generazione di codice inefficiente. Questi avvertimenti possono essere
generato, ad esempio, durante la compilazione di codice che esegue operazioni di memoria a livello di byte
sul tipo MAC AE. Il MAC AE non ha supporto hardware per la memoria a livello di byte
operazioni, quindi tutti i byte load/store devono essere sintetizzati dalla parola load/store
operazioni. Questo è inefficiente e viene generato un avviso per indicare che tu
dovrebbe riscrivere il codice per evitare operazioni sui byte o per mirare a un tipo AE che ha il
supporto hardware necessario. Questa opzione disabilita questi avvisi.
PowerPC Opzioni
Questi sono elencati sotto
RL78 Opzioni
-msim
Collegamenti in librerie di destinazione aggiuntive per supportare il funzionamento all'interno di un simulatore.
-mmul=nessuno
-mmul=g13
-mmul=rl78
Specifica il tipo di supporto per la moltiplicazione hardware da utilizzare. L'impostazione predefinita è
nessuna, che utilizza funzioni di moltiplicazione software. Il g13 l'opzione è per il
hardware moltiplica/dividi periferica solo sui target RL78/G13. Il rl78 opzione è
per la moltiplicazione hardware standard definita nel manuale del software RL78.
-m64bit-raddoppia
-m32bit-raddoppia
Rendi il tipo di dati "doppio" a 64 bit (-m64bit-raddoppia) o 32 bit (-m32bit-raddoppia)
in misura. L'impostazione predefinita è -m32bit-raddoppia.
IBM RS/6000 e PowerPC Opzioni
Alcuni degli -m le opzioni sono definite per IBM RS/6000 e PowerPC:
-mpowerpc-gpopt
-mno-powerpc-gpopt
-mpowerpc-gfxopt
-mno-powerpc-gfxopt
-mpowerpc64
-mno-powerpc64
-mmfcrf
-mno-mfcrf
-mpocntb
-mno-popcntb
-mpocntd
-mno-popcntd
-mfprnd
-mno-fprnd
-mcmpb
-mno-cmpb
-mmfpgpr
-mno-mfpgpr
-mhard-dfp
-mno-hard-dfp
Utilizzi queste opzioni per specificare quali istruzioni sono disponibili sul processore che desideri
stiamo usando. Il valore predefinito di queste opzioni è determinato durante la configurazione di GCC.
Specificando il -mcpu=tipo_cpu sovrascrive la specifica di queste opzioni. Noi
ti consiglio di usare il -mcpu=tipo_cpu opzione anziché le opzioni elencate sopra.
specificando -mpowerpc-gpopt consente a GCC di utilizzare l'architettura PowerPC opzionale
istruzioni nel gruppo Scopo generale, inclusa la radice quadrata a virgola mobile.
specificando -mpowerpc-gfxopt consente a GCC di utilizzare l'architettura PowerPC opzionale
istruzioni nel gruppo Grafica, inclusa la selezione a virgola mobile.
Le -mmfcrf l'opzione consente a GCC di generare lo spostamento dal campo del registro delle condizioni
istruzione implementata sul processore POWER4 e altri processori che supportano il
Architettura PowerPC V2.01. Il -mpocntb l'opzione consente a GCC di generare il popcount
e istruzione di stima reciproca FP a doppia precisione implementata su POWER5
processore e altri processori che supportano l'architettura PowerPC V2.02. Il
-mpocntd l'opzione consente a GCC di generare l'istruzione popcount implementata sul
Processore POWER7 e altri processori che supportano l'architettura PowerPC V2.06.
Le -mfprnd l'opzione consente a GCC di generare le istruzioni FP round to integer
implementato sul processore POWER5+ e altri processori che supportano il PowerPC
Architettura V2.03. Il -mcmpb l'opzione consente a GCC di generare i byte di confronto
istruzione implementata sul processore POWER6 e altri processori che supportano il
Architettura PowerPC V2.05. Il -mmfpgpr l'opzione consente a GCC di generare la mossa FP
da/verso le istruzioni del registro di uso generale implementate sul processore POWER6X e
altri processori che supportano l'architettura estesa PowerPC V2.05. Il -mhard-dfp
l'opzione consente a GCC di generare le istruzioni decimali in virgola mobile implementate su
alcuni processori POWER.
Le -mpowerpc64 l'opzione consente a GCC di generare le istruzioni aggiuntive a 64 bit che
si trovano nell'architettura PowerPC64 completa e trattano i GPR come 64 bit, doubleword
le quantità. L'impostazione predefinita di GCC è -mno-powerpc64.
-mcpu=tipo_cpu
Imposta il tipo di architettura, l'utilizzo del registro e i parametri di pianificazione delle istruzioni per
tipo di macchina tipo_cpu. Valori supportati per tipo_cpu sono 401, 403, 405, 405fp, 440,
440fp, 464, 464fp, 476, 476fp, 505, 601, 602, 603, 603e, 604, 604e, 620, 630, 740,
7400, 7450, 750, 801, 821, 823, 860, 970, 8540, a2, e300c2, e300c3, e500mc, e500mc64,
e5500, e6500, ec603e, G3, G4, G5, titano, power3, power4, power5, potenza5+, power6,
potenza6x, power7, power8, pc di potenza, powerpc64, powerpc64lee rs64.
-mcpu=potenzapc, -mcpu=powerpc64e -mcpu=powerpc64le specificare PowerPC puro a 32 bit
(entrambi endian), Big Endian PowerPC a 64 bit e Little Endian PowerPC a 64 bit
tipi di macchina dell'architettura, con un modello di processore generico appropriato assunto per
scopi di programmazione.
Le altre opzioni specificano un processore specifico. Codice generato in queste opzioni
funziona meglio su quel processore e potrebbe non funzionare affatto su altri.
Le -mcpu opzioni abilitano o disabilitano automaticamente le seguenti opzioni:
-maltivec -mfprnd -mhard-flottante -mmfcrf -mmultiplo -mpocntb -mpocntd -mpowerpc64
-mpowerpc-gpopt -mpowerpc-gfxopt -msingle-flottante -mdouble-flottante -msemplice-fpu -mstringa
-mmhw -mdlmzb -mmfpgpr -mvsx -mcrypto -mmovimento diretto -mpower8-fusione
-mpower8-vettore -mquad-memoria -mquad-memoria-atomica
Le opzioni particolari impostate per ogni particolare CPU variano tra le versioni del compilatore,
a seconda di quale impostazione sembra produrre codice ottimale per quella CPU; non lo fa
riflettono necessariamente le reali capacità dell'hardware. Se desideri impostare un
singola opzione a un valore particolare, è possibile specificarlo dopo il -mcpu opzione,
piace -MCPU = 970 -mno-altivoc.
Su AIX, il -maltivec e -mpowerpc64 le opzioni non sono abilitate o disabilitate dal -mcpu
opzione al momento perché AIX non dispone del supporto completo per queste opzioni. Potresti
ancora abilitali o disabilitali individualmente se sei sicuro che funzionerà nel tuo
ambiente.
-mtune=tipo_cpu
Impostare i parametri di pianificazione delle istruzioni per il tipo di macchina tipo_cpu, ma non impostare
il tipo di architettura o l'utilizzo del registro, come -mcpu=tipo_cpu fa. Gli stessi valori per
tipo_cpu sono usati per -mtune quanto a -mcpu. Se vengono specificati entrambi, il codice generato
utilizza l'architettura e i registri impostati da -mcpu, ma i parametri di schedulazione impostati da
-mtune.
-mcmodel=piccolo
Genera codice PowerPC64 per il modello piccolo: il TOC è limitato a 64k.
-mcmodel=medio
Genera codice PowerPC64 per il modello medio: il TOC e altri dati statici potrebbero essere aumentati
a un totale di 4G di dimensione.
-mcmodel=grande
Genera codice PowerPC64 per il modello grande: il TOC può avere dimensioni fino a 4G. Altro
dati e codice sono limitati solo dallo spazio degli indirizzi a 64 bit.
-maltivec
-mno-altivoc
Genera codice che utilizza (non utilizza) le istruzioni AltiVec e abilita anche l'uso
di funzioni integrate che consentono un accesso più diretto al set di istruzioni AltiVec.
Potrebbe anche essere necessario impostare -mabi=altivo per regolare l'attuale ABI con AltiVec ABI
miglioramenti.
Quando -maltivec viene utilizzato, piuttosto che -maltivec=le or -maltivec=essere, l'ordine degli elementi
per gli intrinseci Altivec come "vec_splat", "vec_extract" e "vec_insert" corrispondono
ordine degli elementi dell'array corrispondente all'endianità del target. Cioè, elemento
zero identifica l'elemento più a sinistra in un registro vettoriale quando si prende di mira un big-endian
piattaforma e identifica l'elemento più a destra in un registro vettoriale quando si mira a
piattaforma little-endian.
-maltivec=essere
Genera istruzioni Altivec utilizzando l'ordine degli elementi big-endian, indipendentemente dal fatto che
l'obiettivo è big- o little-endian. Questa è l'impostazione predefinita quando si prende di mira un big-endian
piattaforma.
L'ordine degli elementi viene utilizzato per interpretare i numeri degli elementi negli intrinseci di Altivec come
"vec_splat", "vec_extract" e "vec_insert". Per impostazione predefinita, questi corrispondono all'elemento dell'array
ordine corrispondente all'endianness per il target.
-maltivec=le
Genera istruzioni Altivec utilizzando l'ordine degli elementi little-endian, indipendentemente dal fatto che
l'obiettivo è big- o little-endian. Questa è l'impostazione predefinita quando si prende di mira un po'-
piattaforma endiana. Questa opzione è attualmente ignorata quando si prende di mira un big-endian
piattaforma.
L'ordine degli elementi viene utilizzato per interpretare i numeri degli elementi negli intrinseci di Altivec come
"vec_splat", "vec_extract" e "vec_insert". Per impostazione predefinita, questi corrispondono all'elemento dell'array
ordine corrispondente all'endianness per il target.
-mvrsave
-mno-vrsave
Genera istruzioni VRSAVE durante la generazione del codice AltiVec.
-mgen-cell-microcodice
Genera istruzioni per il microcodice cellulare.
-mwarn-cell-microcodice
Avvisa quando viene emessa un'istruzione del microcodice Cell. Un esempio di microcodice cellulare
l'istruzione è uno spostamento variabile.
-msecure-plt
Genera codice che consente ld e ld.so per creare eseguibili e librerie condivise con
sezioni ".plt" e ".got" non eseguibili. Questa è un'opzione PowerPC SYSV ABI a 32 bit.
-mbss-plt
Genera codice che utilizza una sezione BSS ".plt" che ld.so compila e richiede ".plt"
e le sezioni ".got" che sono sia scrivibili che eseguibili. Questo è un PowerPC a 32 bit
Opzione SYSV ABI.
-Misel
-mno-isel
Questo interruttore abilita o disabilita la generazione di istruzioni ISEL.
-misl=si No
Questa opzione è stata deprecata. Utilizzo -Misel e -mno-isel anziché.
-mspe
-mno-spe
Questo interruttore abilita o disabilita la generazione di istruzioni SPE simd.
- deteriorato
-mno-accoppiato
Questo interruttore abilita o disabilita la generazione di istruzioni simd PAIRED.
-mspe=si No
Questa opzione è stata deprecata. Utilizzo -mspe e -mno-spe anziché.
-mvsx
-mno-vsx
Genera codice che utilizza (non usa) istruzioni vettoriali/scalari (VSX) e anche
abilitare l'uso di funzioni integrate che consentono un accesso più diretto al VSX
set di istruzioni.
-mcrypto
-mno-cripto
Abilitare l'uso (disabilitare) delle funzioni integrate che consentono l'accesso diretto al
istruzioni crittografiche aggiunte nella versione 2.07 di PowerPC ISA.
-mmovimento diretto
-mno-movimento-diretto
Genera codice che utilizza (non utilizza) le istruzioni per spostare i dati tra i
registri di uso generale e i registri vettoriali/scalari (VSX) che sono stati aggiunti in
versione 2.07 dell'ISA PowerPC.
-mpower8-fusione
-mno-power8-fusione
Genera codice che mantiene (non mantiene) alcune operazioni intere adiacenti in modo che il
le istruzioni possono essere fuse insieme sui processori power8 e successivi.
-mpower8-vettore
-mno-power8-vettore
Genera codice che usa (non usa) il vettore e le istruzioni scalari che erano
aggiunto nella versione 2.07 di PowerPC ISA. Consenti anche l'uso delle funzioni integrate
che consentono un accesso più diretto alle istruzioni vettoriali.
-mquad-memoria
-mno-quad-memoria
Genera codice che usa (non usa) le istruzioni di memoria quad word non atomiche.
Le -mquad-memoria l'opzione richiede l'uso della modalità a 64 bit.
-mquad-memoria-atomica
-mno-quad-memoria-atomica
Genera codice che usa (non usa) le istruzioni di memoria quad word atomica. Il
-mquad-memoria-atomica l'opzione richiede l'uso della modalità a 64 bit.
-mupper-regs-df
-mno-regs-superiori-df
Genera codice che usa (non usa) le istruzioni scalari a doppia precisione che
mirare a tutti i 64 registri nel set di registri a virgola mobile vettoriale/scalare che erano
aggiunto nella versione 2.06 di PowerPC ISA. -mupper-regs-df è attivato per impostazione predefinita se
usi uno qualsiasi dei -mcpu=potenza7, -mcpu=potenza8, o -mvsx opzioni.
-mupper-regs-sf
-mno-regs-superiori-sf
Genera codice che utilizza (non utilizza) le istruzioni scalari a precisione singola che
mirare a tutti i 64 registri nel set di registri a virgola mobile vettoriale/scalare che erano
aggiunto nella versione 2.07 di PowerPC ISA. -mupper-regs-sf è attivato per impostazione predefinita se
usi uno dei -mcpu=potenza8 or -mpower8-vettore opzioni.
-mupper-reg
-mno-reg-superiori
Genera codice che usa (non usa) le istruzioni scalari che prendono di mira tutti i 64
registri nel set di registri a virgola mobile vettoriale/scalare, a seconda del modello di
la macchina.
Se l' -mno-reg-superiori viene utilizzata l'opzione, disattiva entrambe -mupper-regs-sf e
-mupper-regs-df opzioni.
-mfloat-gprs=si/singolo/doppio/no
-mfloat-gprs
Questo interruttore abilita o disabilita la generazione di operazioni in virgola mobile sul
registri generici per le architetture che lo supportano.
L'argomento sì or singolo consente l'uso della virgola mobile a precisione singola
operazioni.
L'argomento doppio consente l'uso di virgola mobile a precisione singola e doppia
operazioni.
L'argomento no disabilita le operazioni in virgola mobile sui registri generici.
Questa opzione è attualmente disponibile solo su MPC854x.
-M32
-M64
Genera codice per ambienti a 32 o 64 bit di target Darwin e SVR4 (incluso
GNU/Linux). L'ambiente a 32 bit imposta int, long e pointer a 32 bit e
genera codice che gira su qualsiasi variante di PowerPC. L'ambiente a 64 bit imposta int su
32 bit e lungo e puntatore a 64 bit e genera codice per PowerPC64, come per
-mpowerpc64.
-mfull-toc
-mno-fp-in-toc
-mno-somma-in-toc
-minimal-toc
Modifica la generazione del TOC (Table Of Contents), che viene creato per ogni
file eseguibile. Il -mfull-toc l'opzione è selezionata per impostazione predefinita. In tal caso, GCC
alloca almeno una voce TOC per ogni riferimento variabile non automatico univoco in
il tuo programma. GCC inserisce anche costanti in virgola mobile nel sommario. Tuttavia, solo
16,384 voci sono disponibili nel sommario.
Se ricevi un messaggio di errore del linker che dice che hai traboccato la disponibilità
Spazio TOC, è possibile ridurre la quantità di spazio TOC utilizzato con il -mno-fp-in-toc e
-mno-somma-in-toc opzioni. -mno-fp-in-toc impedisce a GCC di inserire la virgola mobile
costanti nel TOC e -mno-somma-in-toc forza GCC a generare codice per calcolare il
somma di un indirizzo e una costante in fase di esecuzione invece di inserire tale somma nel sommario.
Puoi specificare una o entrambe queste opzioni. Ciascuno fa sì che GCC produca molto
codice leggermente più lento e più grande a scapito della conservazione dello spazio del sommario.
Se si esaurisce ancora lo spazio nel sommario anche quando si specificano entrambe queste opzioni,
specificare -minimal-toc Invece. Questa opzione fa sì che GCC crei una sola voce di sommario per
ogni file. Quando specifichi questa opzione, GCC produce codice più lento e più grande
ma che utilizza pochissimo spazio TOC. Potresti voler usare questa opzione solo su
file che contengono codice eseguito con minore frequenza.
-maix64
-maix32
Abilita ABI AIX a 64 bit e convenzione di chiamata: puntatori a 64 bit, tipo "lungo" a 64 bit e
le infrastrutture necessarie per sostenerli. Specificando -maix64 implica -mpowerpc64,
while -maix32 disabilita l'ABI a 64 bit e implica -mno-powerpc64. L'impostazione predefinita di GCC è
-maix32.
-mxl-comp
-mno-xl-comp
Produce codice più conforme alla semantica del compilatore IBM XL quando si utilizza AIX-
compatibile ABI. Passa argomenti in virgola mobile a funzioni prototipate oltre a
registra l'area di salvataggio (RSA) sullo stack oltre agli argomenti FPR. Non assumere
che il valore double più significativo in un valore double lungo a 128 bit viene arrotondato correttamente quando
confrontare i valori e convertirli in double. Usa i nomi dei simboli XL per il doppio lungo
routine di supporto.
La convenzione di chiamata AIX è stata estesa ma inizialmente non documentata per gestire un
oscuro K&R C caso di chiamata di una funzione che prende l'indirizzo dei suoi argomenti con
meno argomenti di quelli dichiarati. I compilatori IBM XL accedono ad argomenti in virgola mobile che
non si adattano alla RSA dallo stack quando una subroutine viene compilata senza
ottimizzazione. Perché memorizzare sempre argomenti in virgola mobile nello stack è
inefficiente e raramente necessaria, questa opzione non è abilitata per impostazione predefinita ed è solo
necessario quando si chiamano subroutine compilate dai compilatori IBM XL senza ottimizzazione.
-mpe
Assistenza IBM RS/6000 SP Parallel Ambiente (PE). Collega un'applicazione scritta per l'uso
passaggio di messaggi con codice di avvio speciale per consentire l'esecuzione dell'applicazione. Il
il sistema deve avere PE installato nella posizione standard (/usr/lpp/ppe.poe/), o il
occhiali il file deve essere sovrascritto con il -specifiche= opzione per specificare l'appropriato
posizione della directory. L'ambiente parallelo non supporta i thread, quindi il -mpe
opzione e il -pthread opzione sono incompatibili.
-maligno-naturale
-potere-maligno
Su AIX, Darwin a 32 bit e PowerPC a 64 bit GNU/Linux, l'opzione -maligno-naturale
sovrascrive l'allineamento definito dall'ABI di tipi più grandi, come double a virgola mobile,
sul loro confine naturale basato sulla dimensione. L'opzione -potere-maligno istruisce GCC a
seguire le regole di allineamento specificate dall'ABI. GCC utilizza l'allineamento standard per impostazione predefinita
definito nell'ABI.
Su Darwin a 64 bit, l'allineamento naturale è l'impostazione predefinita e -potere-maligno non è
supportato.
-msoft-flottante
-mhard-flottante
Genera codice che non usa (usa) il set di registri a virgola mobile. Software
l'emulazione in virgola mobile viene fornita se si utilizza il -msoft-flottante opzione e passare il
opzione a GCC durante il collegamento.
-msingle-flottante
-mdouble-flottante
Genera codice per operazioni a virgola mobile a precisione singola o doppia.
-mdouble-flottante implica -msingle-flottante.
-msemplice-fpu
Non generare istruzioni "sqrt" e "div" per unità hardware a virgola mobile.
-mfpu=Nome
Specificare il tipo di unità a virgola mobile. Valori validi per Nome sono sp_lite (equivalente a
-msingle-flottante -msemplice-fpu), dp_lite (equivalente a -mdouble-flottante -msemplice-fpu),
sp_pieno (equivalente a -msingle-flottante), E dp_pieno (equivalente a -mdouble-flottante).
-mxilinx-fpu
Eseguire ottimizzazioni per l'unità in virgola mobile su Xilinx PPC 405/440.
-mmultiplo
-mno-multiplo
Genera codice che utilizza (non utilizza) le istruzioni di caricamento di più parole e il
memorizzare più istruzioni di parole. Queste istruzioni sono generate di default su
sistemi POWER, e non generati su sistemi PowerPC. Non usare -mmultiplo su poco-
sistemi endian PowerPC, poiché queste istruzioni non funzionano quando il processore è in
modalità little-endian. Le eccezioni sono PPC740 e PPC750 che le consentono
istruzioni in modalità little endian.
-mstringa
-mno-stringa
Genera codice che utilizza (non usa) le istruzioni della stringa di caricamento e il negozio
istruzioni stringa di parole per salvare più registri ed eseguire piccoli movimenti di blocco. Queste
le istruzioni sono generate di default sui sistemi POWER e non generate su PowerPC
sistemi. Non usare -mstringa su sistemi little-endian PowerPC, poiché quelli
le istruzioni non funzionano quando il processore è in modalità little-endian. Le eccezioni
sono PPC740 e PPC750 che consentono queste istruzioni in modalità little-endian.
-aggiornamento
-mno-aggiornamento
Genera codice che utilizza (non utilizza) il caricamento o memorizza le istruzioni che aggiornano il
registro di base all'indirizzo della posizione di memoria calcolata. Queste istruzioni
vengono generati per impostazione predefinita. Se usi -mno-aggiornamento, c'è una piccola finestra tra i
volta che il puntatore dello stack viene aggiornato e l'indirizzo del frame precedente è
memorizzato, il che significa che il codice che percorre lo stack frame attraverso interruzioni o segnali può
ottenere dati corrotti.
-mavoid-indirizzi-indicizzati
-mno-evita-indirizzi-indicizzati
Genera codice che cerca di evitare (non evitare) l'uso di carichi indicizzati o negozi
Istruzioni. Queste istruzioni possono comportare una riduzione delle prestazioni sui processori Power6
in determinate situazioni, come quando si passa attraverso grandi array che attraversano un 16M
confine. Questa opzione è abilitata per impostazione predefinita quando si prende di mira Power6 e disabilitata
altrimenti.
-mfuso-pazzo
-mno-fuso-madd
Genera codice che utilizza (non utilizza) la moltiplicazione e l'accumulo in virgola mobile
Istruzioni. Queste istruzioni vengono generate per impostazione predefinita se hardware in virgola mobile
viene utilizzato. Il dipendente dalla macchina -mfuso-pazzo l'opzione è ora mappata sulla macchina-
studente indipendente -ffp-contratto=veloce opzione e -mno-fuso-madd è mappato a
-ffp-contratto=off.
-mmhw
-mno-mulhw
Genera codice che usa (non usa) la mezza parola moltiplica e moltiplica-accumula
istruzioni sui processori IBM 405, 440, 464 e 476. Queste istruzioni sono
generato per impostazione predefinita quando si prendono di mira tali processori.
-mdlmzb
-mno-dlmzb
Genera codice che usa (non usa) la ricerca di stringhe dlmzb istruzioni sull'IBM
processori 405, 440, 464 e 476. Questa istruzione viene generata di default quando
mirando a quei processori.
-mno-bit-align
-mbit-align
Su System V.4 e i sistemi PowerPC embedded non forzano le strutture e le unioni
che contengono campi di bit da allineare al tipo di base del campo di bit.
Ad esempio, per impostazione predefinita una struttura contenente nient'altro che 8 campi di bit "non firmati" di
la lunghezza 1 è allineata a un limite di 4 byte e ha una dimensione di 4 byte. Usando
-mno-bit-align, la struttura è allineata a un limite di 1 byte e ha una dimensione di 1 byte.
-mno-strict-align
-mstrict-align
Su System V.4 e sui sistemi PowerPC embedded non presumere (do) che la memoria non allineata
i riferimenti sono gestiti dal sistema.
-mrilocabile
-mno-rilocabile
Genera codice che consente (non consente) di riposizionare un eseguibile statico in a
indirizzo diverso in fase di esecuzione. Un semplice caricatore di sistema integrato PowerPC dovrebbe
riposizionare l'intero contenuto di ".got2" e le posizioni a 4 byte elencate in ".fixup"
sezione, una tabella di indirizzi a 32 bit generati da questa opzione. Perché funzioni, tutti
gli oggetti collegati tra loro devono essere compilati con -mrilocabile or -mrelocatable-lib.
-mrilocabile il codice allinea lo stack a un limite di 8 byte.
-mrelocatable-lib
-mno-relocatable-lib
Come -mrilocabile, -mrelocatable-lib genera una sezione ".fixup" per consentire l'elettricità statica
eseguibili da riposizionare in fase di esecuzione, ma -mrelocatable-lib non usa il
allineamento dello stack più piccolo di -mrilocabile. Oggetti compilati con -mrelocatable-lib può
essere collegato con oggetti compilati con qualsiasi combinazione di -mrilocabile opzioni.
-mno-toc
-toc
Su System V.4 e sui sistemi PowerPC embedded non presumere (do) che il registro 2 contenga
un puntatore a un'area globale che punta agli indirizzi utilizzati nel programma.
-poco
-mittle-endian
Su System V.4 e sui sistemi PowerPC embedded compila il codice per il processore in poco
modalità endiana. Il -mittle-endian l'opzione è la stessa di -poco.
-grande
-big endian
Su System V.4 e sistemi embedded PowerPC compilare il codice per il processore in grandi
modalità endiana. Il -big endian l'opzione è la stessa di -grande.
-mdynamic-no-pic
Sui sistemi Darwin e Mac OS X, compila il codice in modo che non sia riposizionabile, ma questo
i suoi riferimenti esterni sono rilocabili. Il codice risultante è adatto per
applicazioni, ma non librerie condivise.
-mssingle-pic-base
Tratta il registro utilizzato per l'indirizzamento PIC come di sola lettura, piuttosto che caricarlo nel
prologo per ogni funzione. Il sistema di runtime è responsabile dell'inizializzazione di questo
registrarsi con un valore appropriato prima dell'inizio dell'esecuzione.
-prioritize-restricted-insns=priorità
Questa opzione controlla la priorità assegnata allo slot di spedizione limitato
istruzioni durante il secondo passaggio di programmazione. L'argomento priorità prende il valore
0, 1, o 2 assegnare priorità no, più alta o seconda più alta (rispettivamente) a
istruzioni limitate per slot di spedizione.
-msched-costoso-dep=dipendenza_tipo
Questa opzione controlla quali dipendenze sono considerate costose dal target durante
programmazione delle istruzioni. L'argomento dipendenza_tipo prende uno dei seguenti
valori:
no Nessuna dipendenza è costosa.
contro tutti i Tutte le dipendenze sono costose.
true_store_to_load
Una vera dipendenza dal negozio al carico è costosa.
memorizzare_per_caricare
Qualsiasi dipendenza dal negozio al carico è costosa.
numero
Qualsiasi dipendenza per cui la latenza è maggiore o uguale a numero è costoso.
-minsert-sched-nops=schema
Questa opzione controlla quale schema di inserimento NOP viene utilizzato durante la seconda schedulazione
passaggio. L'argomento schema assume uno dei seguenti valori:
no Non inserire NOP.
sentiero Pad con NOP qualsiasi gruppo di spedizione che ha slot di emissione vacanti, secondo il
raggruppamento dello scheduler.
raggruppare_esatto
Inserisci i NOP per forzare gli insn dipendenti costosi in gruppi separati. Inserisci esattamente
tanti NOP quanti sono necessari per forzare un insn a un nuovo gruppo, secondo la stima
raggruppamento di processori.
numero
Inserisci i NOP per forzare gli insn dipendenti costosi in gruppi separati. Inserire numero
NOP per forzare un insn a un nuovo gruppo.
-mcall-sysv
Su System V.4 e sui sistemi PowerPC embedded compila il codice usando convenzioni di chiamata che
aderire alla bozza di marzo 1995 dell'interfaccia binaria dell'applicazione System V, PowerPC
supplemento del processore. Questa è l'impostazione predefinita a meno che tu non abbia configurato GCC usando
powerpc-*-eabiaix.
-mcall-sysv-eabi
-mcall-eabi
Specificare entrambi -mcall-sysv e -meabi opzioni.
-mcall-sysv-noeabi
Specificare entrambi -mcall-sysv e -mno-eabi opzioni.
-mcall-aixdesc
Sul sistema V.4 e sui sistemi PowerPC incorporati compilare il codice per il sistema operativo AIX.
-mcall-linux
Su System V.4 e sistemi PowerPC embedded compila il codice per GNU . basato su Linux
.
-mcall-freebsd
Sul sistema V.4 e sui sistemi PowerPC embedded compila il codice per il funzionamento di FreeBSD
.
-mcall-netbsd
Sul sistema V.4 e sui sistemi PowerPC embedded compila il codice per il funzionamento di NetBSD
.
-mcall-openbsd
Su System V.4 e sistemi PowerPC embedded compila il codice per il funzionamento di OpenBSD
.
-maix-struct-ritorno
Restituisce tutte le strutture in memoria (come specificato da AIX ABI).
-msvr4-struct-ritorno
Restituire strutture inferiori a 8 byte nei registri (come specificato dall'SVR4 ABI).
-mabi=abi-tipo
Estendere l'ABI corrente con una particolare estensione o rimuovere tale estensione. Valido
i valori sono altivec, no-altivec, spe, no spe, ibmlongdouble, ieeelongdouble, elfv1,
elfv2.
-mabi=spe
Estendi l'attuale ABI con le estensioni SPE ABI. Questo non cambia l'ABI predefinito,
invece aggiunge le estensioni SPE ABI all'attuale ABI.
-mabi=no-spe
Disabilitare le estensioni ABI di Book-E SPE per l'ABI corrente.
-mabi=ibmlongdoppio
Modificare l'ABI corrente per utilizzare il doppio lungo a precisione estesa IBM. Questo è un PowerPC
Opzione SYSV ABI a 32 bit.
-mabi=ieeelongdoppio
Modificare l'ABI corrente per utilizzare long double IEEE a precisione estesa. Questo è un PowerPC
Opzione ABI Linux a 32 bit.
-mabi=elfov1
Modificare l'ABI corrente per utilizzare l'ABI ELFv1. Questo è l'ABI predefinito per big-endian
Linux PowerPC a 64 bit. L'override dell'ABI predefinito richiede un supporto di sistema speciale e
rischia di fallire in modo spettacolare.
-mabi=elfov2
Modificare l'ABI corrente per utilizzare l'ABI ELFv2. Questo è l'ABI predefinito per i piccoli...
endian PowerPC Linux a 64 bit. L'override dell'ABI predefinito richiede un sistema speciale
supporto ed è probabile che fallisca in modo spettacolare.
-mprototipo
-mno-prototipo
Su System V.4 e sistemi PowerPC embedded presuppongono che tutte le chiamate all'argomento variabile
funzioni sono correttamente prototipate. In caso contrario, il compilatore deve inserire un'istruzione
prima di ogni chiamata non prototipata per impostare o cancellare il bit 6 del registro del codice di condizione
("CR") per indicare se i valori in virgola mobile vengono passati in virgola mobile
registri nel caso in cui la funzione accetti argomenti variabili. Insieme a -mprototipo, solo chiamate
alle funzioni di argomento variabile prototipate impostano o cancellano il bit.
-msim
Sui sistemi PowerPC embedded, supponiamo che sia chiamato il modulo di avvio sim-crt0.o e
che le librerie C standard sono libsim.a e libc.a. Questa è l'impostazione predefinita per
powerpc-*-eabisim configurazioni.
-MMvme
Sui sistemi PowerPC embedded, supponiamo che sia chiamato il modulo di avvio crt0.o e il
le librerie C standard sono libmvme.a e libc.a.
-pazzi
Sui sistemi PowerPC embedded, supponiamo che sia chiamato il modulo di avvio crt0.o e il
le librerie C standard sono libads.a e libc.a.
- coltello giallo
Sui sistemi PowerPC embedded, supponiamo che sia chiamato il modulo di avvio crt0.o e il
le librerie C standard sono libiaka.a e libc.a.
-mvxworks
Su System V.4 e sistemi PowerPC embedded, specificare che si sta compilando per a
Sistema VxWorks.
-membro
Sui sistemi PowerPC embedded, impostare il bit "PPC_EMB" nell'intestazione dei flag ELF per indicare
che eabi vengono utilizzati trasferimenti estesi.
-meabi
-mno-eabi
Su System V.4 e i sistemi PowerPC embedded non aderiscono (non) a Embedded
Applications Binary Interface (EABI), che è un insieme di modifiche al sistema
Specifiche V.4. Selezione -meabi significa che lo stack è allineato a un 8 byte
confine, una funzione "__eabi" viene chiamata da "main" per impostare l'ambiente EABI,
e il -msdata l'opzione può utilizzare sia "r2" che "r13" per puntare a due piccoli dati separati
le zone. Selezione -mno-eabi significa che lo stack è allineato a un limite di 16 byte, no
La funzione di inizializzazione EABI viene chiamata da "main" e il -msdata l'opzione usa solo
"r13" per puntare a una singola piccola area dati. Il -meabi l'opzione è attiva per impostazione predefinita se tu
configurato GCC utilizzando uno dei powerpc*-*-eabi* opzioni.
-msdata=eabi
Sul sistema V.4 e sui sistemi PowerPC integrati, inserire un piccolo "const" inizializzato globale e
dati statici nella sezione ".sdata2", a cui punta il registro "r2". Metti piccolo
dati globali e statici non "const" inizializzati nella sezione ".sdata", che è
indicato dal registro "r13". Inserisci piccoli dati globali e statici non inizializzati nel
Sezione ".sbss", che è adiacente alla sezione ".sdata". Il -msdata=eabi opzione
è incompatibile con -mrilocabile opzione. Il -msdata=eabi opzione imposta anche il
-membro opzione.
-msdata=sysv
Su System V.4 e sistemi PowerPC embedded, inserire piccoli dati globali e statici nel
Sezione ".sdata", a cui punta il registro "r13". Metti piccolo non inizializzato
dati globali e statici nella sezione ".sbss", che è adiacente a ".sdata"
sezione. Il -msdata=sysv l'opzione non è compatibile con -mrilocabile opzione.
-msdata=predefinito
-msdata
Su System V.4 e sistemi PowerPC embedded, se -meabi viene utilizzato, compilare il codice lo stesso
as -msdata=eabi, altrimenti compila il codice come -msdata=sysv.
-msdata=dati
Su System V.4 e sistemi PowerPC embedded, inserisci piccoli dati globali nel ".sdata"
sezione. Metti piccoli dati globali non inizializzati nella sezione ".sbss". Non usare
registrare "r13" per indirizzare comunque piccoli dati. Questo è il comportamento predefinito a meno che
Altro -msdata vengono utilizzate le opzioni.
-msdata=nessuno
-mno-sdata
Sui sistemi PowerPC embedded, inserisci tutti i dati globali e statici inizializzati nel file ".data"
sezione e tutti i dati non inizializzati nella sezione ".bss".
-mblock-move-inline-limit=num
Inline tutti i movimenti di blocco (come chiamate a "memcpy" o copie di strutture) inferiori a o
uguale a num byte. Il valore minimo per num è 32 byte su destinazioni a 32 bit e 64
byte su destinazioni a 64 bit. Il valore predefinito è specifico della destinazione.
-G num
Sui sistemi PowerPC embedded, inserire elementi globali e statici inferiori o uguali a num
byte nei dati piccoli o nelle sezioni BSS invece dei normali dati o nella sezione BSS.
Per impostazione predefinita, num è 8. Il -G num switch viene passato anche al linker. Tutti i moduli
dovrebbe essere compilato con lo stesso -G num valore.
-mregnami
-mno-regnami
Su System V.4 e sistemi PowerPC embedded non emettono (non) nomi di registro nel
output in linguaggio assembly utilizzando forme simboliche.
-mlongcall
-mno-lunga chiamata
Per impostazione predefinita, presupponiamo che tutte le chiamate siano lontane in modo che un tempo più lungo e più costoso
è necessaria la sequenza di chiamata. Questo è necessario per le chiamate oltre i 32 megabyte
(33,554,432 byte) dalla posizione corrente. Viene generata una breve chiamata se il
il compilatore sa che la chiamata non può essere così lontana. Questa impostazione può essere sovrascritta da
l'attributo della funzione "shortcall", o da "#pragma lunga chiamata(0)".
Alcuni linker sono in grado di rilevare chiamate fuori range e generare codice colla su
La mosca. Su questi sistemi, le chiamate lunghe non sono necessarie e generano codice più lento. Come
di questo scritto, il linker AIX può farlo, così come il linker GNU per PowerPC/64. Esso
è prevista l'aggiunta di questa funzionalità al linker GNU anche per i sistemi PowerPC a 32 bit.
Sui sistemi Darwin/PPC, "#pragma longcall" genera "jbsr callee, L42", più un ramo
isola (codice colla). I due indirizzi di destinazione rappresentano il chiamato e il ramo
isola. Il linker Darwin/PPC preferisce il primo indirizzo e genera un "bl callee"
se l'istruzione PPC "bl" raggiunge direttamente il chiamato; altrimenti, il linker
genera "bl L42" per chiamare l'isola di derivazione. L'isola del ramo è aggiunta a
corpo della funzione chiamante; calcola l'indirizzo completo a 32 bit del chiamato e
ci salta sopra.
Sui sistemi Mach-O (Darwin), questa opzione indirizza il compilatore emit alla colla per
ogni chiamata diretta e il linker Darwin decide se utilizzarla o scartarla.
In futuro, GCC potrebbe ignorare tutte le specifiche longcall quando è noto che il linker
generare colla.
-mtls-marcatori
-mno-tls-marcatori
Contrassegna (non contrassegnare) le chiamate a "__tls_get_addr" con una rilocazione che specifica la funzione
discussione. La rilocazione consente al linker di associare in modo affidabile la chiamata di funzione con
istruzioni per l'impostazione degli argomenti per l'ottimizzazione TLS, che a sua volta consente a GCC di migliorare
programmare la sequenza.
-pthread
Aggiunge il supporto per il multithreading con il pthread biblioteca. Questa opzione imposta i flag per
sia il preprocessore che il linker.
-mrecip
-mno-ricetta
Questa opzione consente l'uso della stima reciproca e della stima della radice quadrata reciproca
istruzioni con ulteriori passaggi di Newton-Raphson per aumentare la precisione invece di
fare una divisione o una radice quadrata e dividere per argomenti in virgola mobile. Dovresti usare
, il -fast-matematica opzione quando si utilizza -mrecip (o quantomeno -funsafe-math-ottimizzazioni,
-solo matematica finita, - matematica-freciproca e -fno-trapping-matematica). Si noti che mentre il
il throughput della sequenza è generalmente superiore al throughput del non-
istruzione reciproca, la precisione della sequenza può essere ridotta fino a 2 ulp
(cioè l'inverso di 1.0 è uguale a 0.99999994) per le radici quadrate reciproche.
-mrecip=optare
Questa opzione controlla quali istruzioni di stima reciproche possono essere utilizzate. optare è un
elenco di opzioni separato da virgole, che può essere preceduto da un "!" per invertire l'opzione:
contro tutti i Abilita tutte le istruzioni di preventivo.
difetto
Abilita le istruzioni predefinite, equivalenti a -mrecip.
nessuna
Disabilita tutte le istruzioni di stima, equivalenti a -mno-ricetta.
div Abilita le istruzioni di approssimazione reciproca sia per singolo che per doppio
precisione.
div
Abilitare le istruzioni di approssimazione reciproca a precisione singola.
diviso
Abilitare le istruzioni di approssimazione reciproca a precisione doppia.
rsqrt
Abilita le istruzioni di approssimazione della radice quadrata reciproca sia per singolo che per
doppia precisione.
rsqrtf
Abilitare le istruzioni di approssimazione della radice quadrata reciproca a precisione singola.
rsqrtd
Abilitare le istruzioni di approssimazione della radice quadrata reciproca a doppia precisione.
Quindi, ad esempio, -mrecip=tutto,!rsqrtd consente tutta la stima reciproca
istruzioni, ad eccezione delle istruzioni "FRSQRTE", "XSRSQRTEDP" e "XVRSQRTEDP"
che gestiscono i calcoli della radice quadrata reciproca a precisione doppia.
-mrecip-precisione
-mno-recip-precisione
Assumiamo (non presupponiamo) che le istruzioni di stima reciproche forniscano maggiori
stime di precisione rispetto a quanto richiesto dall'ABI PowerPC. Selezione -mcpu=potenza6,
-mcpu=potenza7 or -mcpu=potenza8 seleziona automaticamente -mrecip-precisione. Il doppio-
le istruzioni di stima della radice quadrata di precisione non vengono generate per impostazione predefinita su
macchine di precisione, poiché non forniscono una stima che converge dopo tre
gradini.
-mveclibabi=Digitare
Specifica il tipo ABI da utilizzare per vettorizzare gli elementi intrinseci utilizzando una libreria esterna.
L'unico tipo attualmente supportato è massa, che specifica di utilizzare Mathematical . di IBM
Librerie del sottosistema di accelerazione (MASS) per vettorizzare gli elementi intrinseci utilizzando l'esterno
biblioteche. GCC attualmente emette chiamate a "acosd2", "acosf4", "acoshd2", "acoshf4",
"asind2", "asinf4", "asinhd2", "asinhf4", "atan2d2", "atan2f4", "atand2", "atanf4",
"atanhd2", "atanhf4", "cbrtd2", "cbrtf4", "cosd2", "cosf4", "coshd2", "coshf4",
"erfcd2", "erfcf4", "erfd2", "erff4", "exp2d2", "exp2f4", "expd2", "expf4", "expm1d2",
"expm1f4", "hypotd2", "hypotf4", "lgammad2", "lgammaf4", "log10d2", "log10f4",
"log1pd2", "log1pf4", "log2d2", "log2f4", "logd2", "logf4", "powd2", "powf4", "sind2",
"sinf4", "sinhd2", "sinhf4", "sqrtd2", "sqrtf4", "tand2", "tanf4", "tanhd2" e
"tanhf4" durante la generazione del codice per power7. Entrambi -ftree-vettorizzare e
-funsafe-math-ottimizzazioni deve anche essere abilitato. Le librerie MASS devono essere
specificato al momento del collegamento.
-mfriz
-mno-friz
Genera (non generare) l'istruzione "friz" quando il -funsafe-math-ottimizzazioni
l'opzione viene utilizzata per ottimizzare l'arrotondamento dei valori in virgola mobile a un numero intero a 64 bit e
torna in virgola mobile. L'istruzione "friz" non restituisce lo stesso valore se il
il numero in virgola mobile è troppo grande per essere contenuto in un numero intero.
-punti-di-funzioni-annidate
-mno-puntatori-a-funzioni-annidate
Genera (non generare) codice per caricare il registro della catena statica ("r11") quando
chiamata tramite un puntatore su sistemi AIX e Linux a 64 bit in cui un puntatore a funzione
punta a un descrittore di 3 parole che fornisce l'indirizzo della funzione, il valore TOC da caricare
registro "r2", e il valore della catena statica da caricare nel registro "r11". Il
-punti-di-funzioni-annidate è attivo per impostazione predefinita. Non puoi chiamare tramite puntatori a
funzioni nidificate o puntatori a funzioni compilate in altri linguaggi che utilizzano il
catena statica se usi -mno-puntatori-a-funzioni-annidate.
-msave-toc-indiretto
-mno-salva-toc-indiretto
Genera (non generare) codice per salvare il valore TOC nella posizione dello stack riservata
nel prologo della funzione se la funzione chiama tramite un puntatore su AIX e 64 bit
Sistemi Linux. Se il valore TOC non viene salvato nel prologo, viene salvato appena prima
la chiamata tramite il puntatore. Il -mno-salva-toc-indiretto l'opzione è l'impostazione predefinita.
-mcompat-align-parm
-mno-compat-align-parm
Genera (non generare) codice per passare i parametri della struttura con un allineamento massimo
di 64 bit, per compatibilità con le versioni precedenti di GCC.
Le versioni precedenti di GCC (precedenti alla 4.9.0) non allineavano in modo errato un parametro di struttura
su un limite di 128 bit quando quella struttura conteneva un membro che richiedeva 128 bit
allineamento. Questo è stato corretto nelle versioni più recenti di GCC. Questa opzione può essere utilizzata
per generare codice compatibile con funzioni compilate con versioni precedenti di
CCG.
Le -mno-compat-align-parm l'opzione è l'impostazione predefinita.
RX Opzioni
Queste opzioni della riga di comando sono definite per i target RX:
-m64bit-raddoppia
-m32bit-raddoppia
Rendi il tipo di dati "doppio" a 64 bit (-m64bit-raddoppia) o 32 bit (-m32bit-raddoppia)
in misura. L'impostazione predefinita è -m32bit-raddoppia. Note: Funziona solo l'hardware in virgola mobile RX
su valori a 32 bit, motivo per cui l'impostazione predefinita è -m32bit-raddoppia.
-fpu
-nofpu
Consente (-fpu) o disabilita (-nofpu) l'uso di hardware in virgola mobile RX. Il
l'impostazione predefinita è abilitata per la serie RX600 e disabilitata per la serie RX200.
Le istruzioni in virgola mobile vengono generate solo per valori in virgola mobile a 32 bit,
tuttavia, quindi l'hardware della FPU non viene utilizzato per i doppi se il -m64bit-raddoppia opzione è
Usato.
Note: Se l' -fpu l'opzione è abilitata allora -funsafe-math-ottimizzazioni è anche abilitato
automaticamente. Questo perché le istruzioni RX FPU sono di per sé pericolose.
-mcpu=Nome
Seleziona il tipo di CPU RX da prendere di mira. Attualmente sono supportati tre tipi, il
generico RX600 e RX200 hardware di serie e lo specifico RX610 PROCESSORE. L'impostazione predefinita è
RX600.
L'unica differenza tra RX600 e RX610 è che l' RX610 non supporta il
Istruzione "MVTIPL".
Le RX200 serie non ha un'unità hardware in virgola mobile e quindi -nofpu è abilitato
per impostazione predefinita quando questo tipo è selezionato.
-bbig-endian-data
-mlittle-endian-dati
Memorizza i dati (ma non il codice) nel formato big-endian. L'impostazione predefinita è
-mlittle-endian-dati, ovvero per memorizzare i dati nel formato little-endian.
-mlimite-dati-piccolo=N
Specifica la dimensione massima in byte delle variabili globali e statiche che possono essere posizionate
nella piccola area dati. L'utilizzo della piccola area dati può portare a dimensioni più piccole e più veloci
codice, ma la dimensione dell'area è limitata e spetta al programmatore assicurarsi che
l'area non trabocca. Anche quando viene utilizzata la piccola area dati uno degli RX
registri (di solito "r13") è riservato per l'uso che punta a quest'area, quindi è no
più disponibile per l'uso da parte del compilatore. Ciò potrebbe risultare più lento e/o più grande
codice se le variabili vengono inserite nello stack invece di essere mantenute in questo registro.
Nota, le variabili comuni (variabili che non sono state inizializzate) e le costanti sono
non inseriti nell'area dati piccola in quanto sono assegnati ad altre sezioni nel
eseguibile in uscita.
Il valore predefinito è zero, che disabilita questa funzione. Nota, questa funzione non lo è
abilitato di default con livelli di ottimizzazione più alti (-O2 ecc) a causa del
effetti potenzialmente dannosi della prenotazione di un registro. Sta al programmatore
per sperimentare e scoprire se questa funzione è vantaggiosa per il loro programma. Vedere
la descrizione del -pid opzione per una descrizione di come l'effettivo registro per
tieni premuto il puntatore dell'area dati piccola.
-msim
-mno-sim
Usa il runtime del simulatore. L'impostazione predefinita prevede l'utilizzo del runtime specifico della scheda libgloss.
-mas100-sintassi
-mno-as100-syntassi
Quando si genera l'output dell'assemblatore, utilizzare una sintassi compatibile con AS100 . di Renesas
assemblatore. Questa sintassi può essere gestita anche dall'assemblatore GAS, ma ne ha alcune
restrizioni quindi non viene generato per impostazione predefinita.
-mmax-dimensione-costante=N
Specifica la dimensione massima, in byte, di una costante che può essere utilizzata come operando in
un'istruzione RX. Sebbene il set di istruzioni RX consenta costanti fino a 4
byte di lunghezza da utilizzare nelle istruzioni, un valore più lungo equivale a un più lungo
istruzione. Pertanto, in alcune circostanze può essere utile limitare la dimensione di
costanti utilizzate nelle istruzioni. Le costanti troppo grandi lo sono invece
inserito in un pool costante e referenziato tramite l'indiretto di registro.
Il valore N può essere compreso tra 0 e 4. Un valore 0 (predefinito) o 4 significa che
sono consentite costanti di qualsiasi dimensione.
-rilassati
Abilita il rilassamento del linker. Il rilassamento del linker è un processo mediante il quale il linker tenta
per ridurre le dimensioni di un programma trovando versioni più brevi di varie istruzioni.
Disabilitato per impostazione predefinita.
-registro-menta=N
Specificare il numero di registri da riservare per le funzioni di gestione degli interrupt veloci. Il
APPREZZIAMO N può essere compreso tra 0 e 4. Un valore 1 significa che il registro "r13" è riservato
per l'uso esclusivo di gestori di interrupt veloci. Un valore di 2 riserve "r13" e
"r12". Un valore di 3 riserve "r13", "r12" e "r11", e un valore di 4 riserve "r13"
tramite "r10". Un valore 0, il valore predefinito, non riserva alcun registro.
-msave-acc-in-interrupt
Specifica che le funzioni del gestore di interrupt devono preservare il registro dell'accumulatore.
Questo è necessario solo se il codice normale potrebbe utilizzare il registro dell'accumulatore, ad esempio
perché esegue moltiplicazioni a 64 bit. L'impostazione predefinita è ignorare l'accumulatore
poiché ciò rende i gestori di interrupt più veloci.
-pid
-mno-pid
Consente la generazione di dati indipendenti dalla posizione. Quando abilitato qualsiasi accesso a
i dati costanti vengono eseguiti tramite un offset da un indirizzo di base contenuto in un registro. Questo
consente di determinare la posizione dei dati costanti in fase di esecuzione senza richiedere
l'eseguibile da riposizionare, che è un vantaggio per le applicazioni embedded con stretto
vincoli di memoria. I dati che possono essere modificati non sono interessati da questa opzione.
Nota, l'utilizzo di questa funzione riserva un registro, solitamente "r13", per i dati costanti
indirizzo di base. Ciò può comportare un codice più lento e/o più grande, specialmente in complicati
funzioni.
Il registro effettivo scelto per contenere l'indirizzo del database costante dipende dal fatto che
, il -mlimite-dati-piccoli e / o -registro-zecca le opzioni della riga di comando sono abilitate.
Partendo dal registro "r13" e procedendo verso il basso, i registri vengono assegnati per primi
per soddisfare i requisiti di -registro-zecca, poi -pid e infine
-mlimite-dati-piccoli. Quindi è possibile che il registro dell'area dati piccola sia "r8"
se entrambi -registro-zecca=4 e -pid sono specificati nella riga di comando.
Per impostazione predefinita questa funzione non è abilitata. L'impostazione predefinita può essere ripristinata tramite il -mno-pid
opzione della riga di comando.
-mno-warn-multiple-fast-interrupt
-mwarn-multipli-interrupt-veloci
Impedisce a GCC di inviare un messaggio di avviso se trova più di un interrupt veloce
gestore durante la compilazione di un file. L'impostazione predefinita è emettere un avviso per ogni extra
trovato un gestore di interrupt veloce, poiché l'RX supporta solo uno di questi interrupt.
Nota: L'opzione generica della riga di comando di GCC -fissa-reg ha un significato speciale per l'RX
port quando utilizzato con l'attributo della funzione "interrupt". Questo attributo indica a
funzione destinata a elaborare gli interrupt veloci. GCC assicura che utilizza solo i registri
"r10", "r11", "r12" e/o "r13" e solo a condizione che il normale utilizzo del
i registri corrispondenti sono stati ristretti tramite il -fissa-reg or -registro-zecca
opzioni della riga di comando.
S / 390 e zSerie Opzioni
Questi sono la -m opzioni definite per l'architettura S/390 e zSeries.
-mhard-flottante
-msoft-flottante
Utilizzare (non utilizzare) le istruzioni e i registri hardware in virgola mobile per
operazioni puntuali. quando -msoft-flottante è specificato, funziona in libgcc.a sono abituati a
eseguire operazioni in virgola mobile. quando -mhard-flottante è specificato, il compilatore
genera istruzioni in virgola mobile IEEE. Questa è l'impostazione predefinita.
-mhard-dfp
-mno-hard-dfp
Utilizzare (non utilizzare) le istruzioni hardware a virgola mobile decimale per
operazioni in virgola mobile. quando -mno-hard-dfp è specificato, funziona in libgcc.a sono
utilizzato per eseguire operazioni in virgola mobile decimale. quando -mhard-dfp è specificato, il
il compilatore genera istruzioni hardware in virgola mobile decimale. Questa è l'impostazione predefinita
per -marzo=z9-ec o superiore.
-mlong-doppio-64
-mlong-doppio-128
Questi interruttori controllano la dimensione del tipo "long double". Una dimensione di 64 bit rende il
tipo "long double" equivalente al tipo "double". Questa è l'impostazione predefinita.
-mbackchain
-mno-backchain
Memorizzare (non memorizzare) l'indirizzo del frame del chiamante come puntatore backchain nel
stack frame del chiamato. Potrebbe essere necessaria una backchain per consentire il debug utilizzando strumenti che
non capiscono le informazioni sul frame di chiamata DWARF 2. quando -pila-mno-imballata è in
effetto, il puntatore backchain viene memorizzato nella parte inferiore dello stack frame; quando
-packed-stack è in effetti, il backchain è posizionato nella parola più in alto del
Area di salvataggio del registro da 96/160 byte.
In generale, codice compilato con -mbackchain è compatibile con le chiamate con il codice compilato con
-mmo-backchain; tuttavia, l'uso della backchain per scopi di debug di solito richiede
con cui è costruito l'intero binario -mbackchain. Si noti che la combinazione di
-mbackchain, -packed-stack e -mhard-flottante non è supportato. Per costruire un
uso del kernel linux -msoft-flottante.
L'impostazione predefinita è non mantenere il backchain.
-packed-stack
-pila-mno-imballata
Utilizzare (non utilizzare) il layout della pila imballata. quando -pila-mno-imballata è specificato, il
compilatore utilizza tutti i campi dell'area di salvataggio del registro a 96/160 byte solo per i propri
scopo predefinito; i campi inutilizzati occupano ancora spazio nello stack. quando -packed-stack is
specificato, gli slot di salvataggio del registro sono densamente compressi nella parte superiore del salvataggio del registro
la zona; lo spazio inutilizzato viene riutilizzato per altri scopi, consentendo un uso più efficiente di
lo spazio disponibile della pila. Tuttavia, quando -mbackchain è anche in effetti, il più alto
la parola dell'area di salvataggio viene sempre utilizzata per memorizzare la backchain e l'indirizzo di ritorno
register viene sempre salvato due parole sotto la backchain.
Finché non viene utilizzata la backchain dello stack frame, il codice generato con -packed-stack
è compatibile con la chiamata con il codice generato con -pila-mno-imballata. Nota che alcuni non FSF
versioni di GCC 2.95 per codice generato da S/390 o zSeries che utilizza lo stack frame
backchain in fase di esecuzione, non solo per scopi di debug. Tale codice non è chiamato-
compatibile con il codice compilato con -packed-stack. Si noti inoltre che la combinazione di
-mbackchain, -packed-stack e -mhard-flottante non è supportato. Per costruire un
uso del kernel linux -msoft-flottante.
L'impostazione predefinita è non utilizzare il layout stack compresso.
-msmall-exec
-mno-piccolo-exec
Generare (o non generare) codice utilizzando l'istruzione "reggiseni" per eseguire la subroutine
chiamate. Funziona in modo affidabile solo se la dimensione totale dell'eseguibile non supera i 64k.
L'impostazione predefinita è invece utilizzare l'istruzione "basr", che non ha questo
limitazione.
-M64
-M31
Quando -M31 è specificato, genera codice conforme a GNU/Linux per S/390 ABI. quando
-M64 è specificato, genera codice conforme a GNU/Linux per zSeries ABI. Questo
consente in particolare a GCC di generare istruzioni a 64 bit. Per il s390 obiettivi, i
l'impostazione predefinita è -M31, Mentre l' s390x obiettivi predefiniti su -M64.
-mzarca
-mesa
Quando -mzarca è specificato, generare il codice utilizzando le istruzioni disponibili su
z/Architettura. quando -mesa è specificato, generare il codice utilizzando le istruzioni
disponibile su ESA/390. Notare che -mesa non è possibile con -M64. Quando si genera
codice conforme a GNU/Linux per S/390 ABI, il valore predefinito è -mesa. Quando si genera
codice conforme a GNU/Linux per zSeries ABI, l'impostazione predefinita è -mzarca.
-mmvcle
-mno-mvcle
Generare (o non generare) codice utilizzando l'istruzione "mvcle" per eseguire il blocco
si sposta. quando -mno-mvcle è specificato, utilizzare invece un ciclo "mvc". Questa è l'impostazione predefinita
a meno che non si ottimizzi per le dimensioni.
-mdebug
-mno-debug
Stampa (o non stampa) ulteriori informazioni di debug durante la compilazione. L'impostazione predefinita è
per non stampare le informazioni di debug.
-marzo=tipo di CPU
Genera codice che viene eseguito su tipo di CPU, che è il nome di un sistema che rappresenta a
determinato tipo di processore. Valori possibili per tipo di CPU sono g5, g6, z900, z990, z9-109,
Z9-EC, z10, z196, zEC12e z13. Quando si genera codice utilizzando le istruzioni
disponibile su z/Architecture, l'impostazione predefinita è -marzo=z900. In caso contrario, l'impostazione predefinita è
-marzo=g5.
-mtune=tipo di CPU
Sintonizzati su tipo di CPU tutto ciò che riguarda il codice generato, ad eccezione dell'ABI
e il set di istruzioni disponibili. L'elenco di tipo di CPU i valori sono gli stessi di per
-marzo. Il valore predefinito è il valore utilizzato per -marzo.
-mtpf-traccia
-mno-tpf-traccia
Genera codice che aggiunge (non aggiunge) nei rami specifici del sistema operativo TPF per tracciare le routine
nel sistema operativo. Questa opzione è disattivata per impostazione predefinita, anche durante la compilazione per il
Sistema operativo TPF.
-mfuso-pazzo
-mno-fuso-madd
Genera codice che utilizza (non utilizza) la moltiplicazione e l'accumulo in virgola mobile
Istruzioni. Queste istruzioni vengono generate per impostazione predefinita se hardware in virgola mobile
viene utilizzato.
-mwarn-dimensione-frame=dimensione della cornice
Emette un avviso se la funzione corrente supera la dimensione del frame data. Perché questo è
un controllo in fase di compilazione non deve essere un vero problema quando il programma viene eseguito. Esso
ha lo scopo di identificare le funzioni che molto probabilmente causano un overflow dello stack. è
utile per essere utilizzato in un ambiente con dimensioni dello stack limitate, ad esempio il kernel linux.
-mwarn-stack dinamico
Emette un avviso se la funzione chiama "alloca" o utilizza array di dimensioni dinamiche. Questo
è generalmente una cattiva idea con una dimensione dello stack limitata.
-mstack-guard=guardia-pila
-mstack-dimensione=dimensione dello stack
Se queste opzioni sono fornite, il back-end S/390 emette istruzioni aggiuntive nel
prologo della funzione che attiva una trappola se la dimensione dello stack è guardia-pila byte sopra il
dimensione dello stack (ricorda che lo stack su S/390 cresce verso il basso). Se la guardia-pila
opzione viene omessa la potenza minima di 2 maggiore della dimensione del fotogramma del compilato
viene scelta la funzione. Queste opzioni sono destinate ad essere utilizzate per aiutare a eseguire il debug dello stack
problemi di trabocco. Il codice emesso in aggiunta causa solo un piccolo sovraccarico e
quindi può essere utilizzato anche in sistemi simili alla produzione senza maggiori prestazioni
degradazione. I valori dati devono essere potenze esatte di 2 e dimensione dello stack deve essere
più grande di guardia-pila senza superare i 64k. Per essere efficiente l'extra
il codice presuppone che lo stack inizi a un indirizzo allineato al valore
dato da dimensione dello stack. guardia-pila l'opzione può essere utilizzata solo in combinazione con
dimensione dello stack.
-mhotpatch=pre-mezze parole,post-mezze parole
Se l'opzione hotpatch è abilitata, viene generato un prologo della funzione "hot-patch" per
tutte le funzioni nell'unità di compilazione. L'etichetta della funzione è preceduta dal dato
numero di istruzioni NOP a due byte (pre-mezze parole, massimo 1000000). Dopo il
etichetta, 2 * post-mezze parole i byte vengono aggiunti, utilizzando le istruzioni simili a NOP più grandi
l'architettura lo consente (massimo 1000000).
Se entrambi gli argomenti sono zero, l'hotpatching è disabilitato.
Questa opzione può essere sovrascritta per singole funzioni con l'attributo "hotpatch".
Punti Opzioni
Queste opzioni sono definite per le implementazioni di Score:
-meb
Compila il codice per la modalità big-endian. Questa è l'impostazione predefinita.
-mel
Compila il codice per la modalità little-endian.
-mnhwloop
Disabilita la generazione di istruzioni "bcnz".
-mul
Abilita la generazione di carichi non allineati e memorizza le istruzioni.
-mmac
Consentire l'uso di istruzioni di accumulo multiplo. Disabilitato per impostazione predefinita.
-punteggio 5
Specificare SCORE5 come architettura di destinazione.
-mscore5u
Specificare lo SCORE5U dell'architettura di destinazione.
-punteggio 7
Specificare SCORE7 come architettura di destinazione. Questa è l'impostazione predefinita.
-mscore7d
Specificare SCORE7D come architettura di destinazione.
SH Opzioni
Alcuni degli -m le opzioni sono definite per le implementazioni SH:
-M1 Genera codice per SH1.
-M2 Genera codice per SH2.
-m2e
Genera codice per SH2e.
-m2a-nofpu
Genera codice per SH2a senza FPU o per SH2a-FPU in modo tale che il
l'unità a virgola mobile non viene utilizzata.
-m2a-solo-singolo
Genera codice per SH2a-FPU, in modo tale che non ci sia virgola mobile a doppia precisione
si utilizzano le operazioni.
-m2a-singolo
Genera codice per SH2a-FPU supponendo che l'unità a virgola mobile sia in precisione singola
modalità predefinita.
-m2a
Genera codice per SH2a-FPU assumendo che l'unità a virgola mobile sia in doppia precisione
modalità predefinita.
-M3 Genera codice per SH3.
-m3e
Genera codice per SH3e.
-m4-nofpu
Genera codice per SH4 senza un'unità a virgola mobile.
-m4-solo-singolo
Genera codice per SH4 con un'unità a virgola mobile che supporta solo
aritmetica di precisione.
-m4-singolo
Genera codice per SH4 supponendo che l'unità a virgola mobile sia in modalità a precisione singola
per impostazione predefinita.
-M4 Genera codice per SH4.
-m4-100
Genera codice per SH4-100.
-m4-100-nofpu
Genera codice per SH4-100 in modo tale che l'unità a virgola mobile non venga utilizzata.
-m4-100-singolo
Genera codice per SH4-100 supponendo che l'unità a virgola mobile sia in modalità a precisione singola
per impostazione predefinita.
-m4-100-solo-singolo
Genera codice per SH4-100 in modo tale che nessuna virgola mobile a doppia precisione
si utilizzano le operazioni.
-m4-200
Genera codice per SH4-200.
-m4-200-nofpu
Genera codice per SH4-200 senza in modo tale che l'unità a virgola mobile non sia
Usato.
-m4-200-singolo
Genera codice per SH4-200 supponendo che l'unità a virgola mobile sia in modalità a precisione singola
per impostazione predefinita.
-m4-200-solo-singolo
Genera codice per SH4-200 in modo tale che nessuna virgola mobile a doppia precisione
si utilizzano le operazioni.
-m4-300
Genera codice per SH4-300.
-m4-300-nofpu
Genera codice per SH4-300 senza in modo tale che l'unità a virgola mobile non sia
Usato.
-m4-300-singolo
Genera codice per SH4-300 in modo tale che nessuna virgola mobile a doppia precisione
si utilizzano le operazioni.
-m4-300-solo-singolo
Genera codice per SH4-300 in modo tale che nessuna virgola mobile a doppia precisione
si utilizzano le operazioni.
-m4-340
Genera codice per SH4-340 (nessuna MMU, nessuna FPU).
-m4-500
Genera codice per SH4-500 (senza FPU). Pass -isa=sh4-nofpu all'assemblatore.
-m4a-nofpu
Genera codice per SH4al-dsp, o per SH4a in modo tale che la virgola mobile
l'unità non viene utilizzata.
-m4a-solo-singolo
Genera codice per SH4a, in modo tale che non ci sia virgola mobile a doppia precisione
si utilizzano le operazioni.
-m4a-singolo
Genera codice per SH4a assumendo che l'unità a virgola mobile sia in precisione singola
modalità predefinita.
-m4a
Genera codice per SH4a.
-m4al
Uguale a -m4a-nofpu, tranne che passa implicitamente -dsp all'assemblatore. GCC
al momento non genera alcuna istruzione DSP.
-m5-32media
Genera codice a 32 bit per SHmedia.
-m5-32media-nofpu
Genera codice a 32 bit per SHmedia in modo tale che l'unità a virgola mobile non lo sia
Usato.
-m5-64media
Genera codice a 64 bit per SHmedia.
-m5-64media-nofpu
Genera codice a 64 bit per SHmedia in modo tale che l'unità a virgola mobile non lo sia
Usato.
-m5-compatto
Genera codice per SHcompact.
-m5-compatto-nofpu
Genera codice per SHcompact in modo tale che l'unità a virgola mobile non venga utilizzata.
-mb Compila il codice per il processore in modalità big-endian.
-ml Compila il codice per il processore in modalità little-endian.
-mdalign
Allinea i doppi ai limiti di 64 bit. Nota che questo cambia le convenzioni di chiamata,
e quindi alcune funzioni della libreria C standard non funzionano a meno che non si ricompilino
prima con -mdalign.
-rilassati
Accorciare alcuni riferimenti di indirizzo al momento del collegamento, quando possibile; usa l'opzione del linker
-rilassare.
-migtable
Utilizzare offset a 32 bit nelle tabelle "switch". L'impostazione predefinita prevede l'utilizzo di offset a 16 bit.
-mbitop
Abilitare l'uso delle istruzioni di manipolazione dei bit su SH2A.
-mfmovd
Abilitare l'uso dell'istruzione "fmovd". Dai un'occhiata -mdalign per i vincoli di allineamento.
-mrenesa
Rispettare le convenzioni di chiamata definite da Renesas.
-mno-renesas
Rispettare le convenzioni di chiamata definite per GCC prima delle convenzioni Renesas
erano disponibili. Questa opzione è l'impostazione predefinita per tutti i target della toolchain SH.
-mnomac salva
Contrassegna il registro "MAC" come bloccato, anche se -mrenesa viene data.
-mieee
-mno-ieee
Controlla la conformità IEEE dei confronti in virgola mobile, che influisce sulla gestione
dei casi in cui il risultato di un confronto non è ordinato. Per impostazione predefinita -mieee is
implicitamente abilitato. Se -finite-math-only è abilitato -mno-ieee è implicitamente impostato,
che si traduce in confronti più uguali e meno uguali in virgola mobile più veloci. Il
le impostazioni implicite possono essere sovrascritte specificando sia -mieee or -mno-ieee.
-minline-ic_invalidate
Codice in linea per invalidare le voci della cache delle istruzioni dopo aver impostato la funzione nidificata
trampolini. Questa opzione non ha effetto se -modalità utente è in vigore e il selezionato
opzione di generazione del codice (ad es -M4) non consente l'uso dell'istruzione "icbi".
Se l'opzione di generazione del codice selezionata non consente l'uso di "icbi"
istruzione, e -modalità utente non è in vigore, il codice in linea manipola il
array di indirizzi della cache delle istruzioni direttamente con una scrittura associativa. Questo non solo
richiede la modalità privilegiata in fase di esecuzione, ma fallisce anche se la riga della cache fosse stata
mappato tramite TLB ed è diventato non mappato.
-dimensione
Scarica la dimensione e la posizione dell'istruzione nel codice dell'assembly.
-mpdstruct
Questa opzione è deprecata. Imbottisce le strutture a multipli di 4 byte, che è
incompatibile con la SH ABI.
-modello-matomic=modello
Imposta il modello delle operazioni atomiche e i parametri aggiuntivi separati da virgole
elenco. Per i dettagli sulle funzioni integrate atomiche vedere __atomico Builtin.
sono supportati i seguenti modelli e parametri:
nessuna
Disabilita le sequenze atomiche generate dal compilatore ed emetti chiamate di libreria per atomica
operazioni. Questa è l'impostazione predefinita se il target non è "sh*-*-linux*".
morbido-gusa
Genera sequenze atomiche del software gUSA compatibile con GNU/Linux per il
nelle funzioni. Le sequenze atomiche generate richiedono un supporto aggiuntivo da parte del
codice di gestione interrupt/eccezione del sistema e sono adatti solo per SH3* e
Sistemi unipolari SH4*. Questa opzione è abilitata per impostazione predefinita quando il target è
"sh*-*-linux*" e SH3* o SH4*. Quando il target è SH4A, anche questa opzione
utilizza parzialmente le istruzioni atomiche hardware "movli.l" e "movco.l" per
creare codice più efficiente, a meno che rigoroso è specificato.
soft tcb
Genera sequenze atomiche software che utilizzano una variabile nel controllo del thread
bloccare. Questa è una variazione delle sequenze gUSA che può essere utilizzata anche su SH1*
e obiettivi SH2*. Le sequenze atomiche generate richiedono un supporto aggiuntivo da
il codice di gestione delle interruzioni/eccezioni del sistema e sono adatti solo per
sistemi unipolari. Quando si utilizza questo modello, il offset-gbr= il parametro deve essere
anche specificato.
soft-imask
Genera sequenze atomiche software che disabilitano temporaneamente gli interrupt impostando
"SR.IMASK = 1111". Questo modello funziona solo quando il programma viene eseguito in modalità privilegiata
ed è adatto solo per sistemi single-core. Supporto aggiuntivo da parte di
non è richiesto il codice di gestione delle interruzioni/eccezioni del sistema. Questo modello è
abilitato per impostazione predefinita quando il target è "sh*-*-linux*" e SH1* o SH2*.
hard-llcs
Genera sequenze atomiche hardware utilizzando le istruzioni "movli.l" e "movco.l"
soltanto. Questo è disponibile solo su SH4A ed è adatto per sistemi multi-core.
Poiché le istruzioni hardware supportano solo l'accesso alle variabili atomiche a 32 bit a 8
o le variabili a 16 bit vengono emulate con accessi a 32 bit. Codice compilato con questo
l'opzione è compatibile anche con altri software di interruzione/eccezione del modello atomico
sistemi di movimentazione se eseguiti su un sistema SH4A. Supporto aggiuntivo da parte di
il codice di gestione delle interruzioni/eccezioni del sistema non è richiesto per questo modello.
offset-gbr=
Questo parametro specifica l'offset in byte della variabile nel controllo thread
struttura a blocchi che dovrebbe essere utilizzata dalle sequenze atomiche generate quando il
soft tcb è stato selezionato il modello. Per altri modelli questo parametro viene ignorato.
Il valore specificato deve essere un multiplo intero di quattro e nell'intervallo 0-1020.
rigoroso
Questo parametro impedisce l'uso misto di più modelli atomici, anche se lo sono
compatibile e fa in modo che il compilatore generi sequenze atomiche dell'oggetto specificato
solo modello.
-mtas
Genera il codice operativo "tas.b" per "__atomic_test_and_set". Notare che a seconda del
particolare configurazione hardware e software questo può degradare le prestazioni complessive
a causa degli svuotamenti della riga della cache dell'operando che sono impliciti nell'istruzione "tas.b". Sopra
multi-core SH4A l'istruzione "tas.b" deve essere usata con cautela poiché
può causare il danneggiamento dei dati per determinate configurazioni della cache.
-prefergot
Quando si genera codice indipendente dalla posizione, emettere chiamate di funzione utilizzando l'offset globale
Tabella invece della Tabella di collegamento delle procedure.
-modalità utente
-mno-modalità utente
Non consentire (consentire) al compilatore di generare codice in modalità privilegiata. Specificando
-modalità utente implica anche -mno-inline-ic_invalidate se il codice in linea non funzionasse
in modalità utente. -modalità utente è l'impostazione predefinita quando la destinazione è "sh*-*-linux*". Se la
l'obiettivo è SH1* o SH2* -modalità utente non ha alcun effetto, poiché non esiste una modalità utente.
-multicosto=numero
Imposta il costo da assumere per una moltiplicazione insn.
-mdiv=strategia
Imposta la strategia di divisione da utilizzare per le operazioni di divisione di interi. Per SHmedia
strategia può essere uno di:
fp Esegue l'operazione in virgola mobile. Questo ha una latenza molto alta, ma necessita
solo poche istruzioni, quindi potrebbe essere una buona scelta se il tuo codice ne ha abbastanza
ILP facilmente sfruttabile per consentire al compilatore di schedulare la virgola mobile
istruzioni insieme ad altre istruzioni. La divisione per zero causa a
eccezione in virgola mobile.
inv Utilizza operazioni intere per calcolare l'inverso del divisore, quindi
moltiplica il dividendo per l'inverso. Questa strategia consente CSE e sollevamento
del calcolo inverso. La divisione per zero calcola un risultato non specificato,
ma non intrappola.
inv:minlat
Una variante di inv dove, se non sono state trovate opportunità di CSE o di sollevamento, o se
l'intera operazione è stata issata nello stesso luogo, le ultime fasi del
calcolo inverso si intrecciano con la moltiplicazione finale per ridurre il totale
latenza, a scapito dell'utilizzo di qualche istruzione in più e quindi dell'offerta di meno
opportunità di pianificazione con altro codice.
chiamata
Chiama una funzione di libreria che di solito implementa il inv:minlat strategia. Questo
fornisce un'elevata densità di codice per le compilazioni "m5-*media-nofpu".
call2
Utilizza un punto di ingresso diverso della stessa funzione di libreria, dove assume che a
il puntatore a una tabella di ricerca è già stato impostato, che espone il caricamento del puntatore
alle ottimizzazioni di CSE e di sollevamento del codice.
inv:chiamare
inv:chiama2
inv:fp
Usa il inv algoritmo per la generazione iniziale del codice, ma se il codice rimane
non ottimizzato, tornare al chiamata, call2, o fp strategie, rispettivamente. Notare che
l'effetto collaterale potenzialmente intrappolante della divisione per zero è portato da un separato
istruzione, quindi è possibile che tutte le istruzioni intere vengano tirate fuori,
ma l'indicatore dell'effetto collaterale rimane dov'è. Una ricombinazione per
operazioni in virgola mobile o una chiamata non sono possibili in questo caso.
inv20u
inv20l
Varianti di inv:minlat strategia. Nel caso in cui il calcolo inverso sia
non separati dalla moltiplicazione, accelerano la divisione dove sta il dividendo
in 20 bit (segno più dove applicabile) inserendo un test per saltare un numero di
operazioni in questo caso; questo test rallenta il caso di dividendi maggiori.
inv20u assume che il caso di un dividendo così piccolo sia improbabile, e inv20l
presume che sia probabile.
Per target diversi da SHmedia strategia può essere uno di:
Call-div1
Chiama una funzione di libreria che utilizza l'istruzione di divisione a passo singolo "div1" per
eseguire l'operazione. La divisione per zero calcola un risultato non specificato e lo fa
non trappola. Questa è l'impostazione predefinita ad eccezione di SH4, SH2A e SHcompact.
chiamata-fp
Chiama una funzione di libreria che esegue l'operazione in doppia precisione floating
punto. La divisione per zero causa un'eccezione a virgola mobile. Questa è l'impostazione predefinita
per SHcompact con FPU. Specificandolo per i target che non hanno un double
FPU di precisione per impostazione predefinita è "call-div1".
chiamata-tabella
Chiama una funzione di libreria che utilizza una tabella di ricerca per piccoli divisori e il
Istruzione "div1" con distinzione tra maiuscole e minuscole per divisori più grandi. Divisione per zero
calcola un risultato non specificato e non esegue il trap. Questa è l'impostazione predefinita per SH4.
Specificandolo per i target che non hanno impostazioni predefinite per le istruzioni di spostamento dinamico
a "call-div1".
Quando non è stata specificata una strategia di divisione, viene selezionata la strategia predefinita in base
sul bersaglio attuale. Per SH2A la strategia predefinita è utilizzare i "div" e "divu"
istruzioni anziché chiamate di funzione di libreria.
-maccumulate-in-uscita-args
Riserva spazio una volta per gli argomenti in uscita nel prologo della funzione piuttosto che in giro
ogni chiamata. Generalmente vantaggioso per prestazioni e dimensioni. Necessario anche per rilassarsi
per evitare di modificare lo stack frame attorno al codice condizionale.
-mdivsi3_libfunc=Nome
Imposta il nome della funzione di libreria utilizzata per la divisione con segno a 32 bit su Nome. Questo
interessa solo il nome usato nel chiamata e inv:chiamare strategie di divisione e
il compilatore si aspetta ancora gli stessi insiemi di registri di input/output/clobbed come se questo
opzione non erano presenti.
-mintervallo-fisso=registro-intervallo
Genera codice trattando l'intervallo di registri specificato come registri fissi. Un registro fisso
è uno che l'allocatore del registro non può utilizzare. Questo è utile quando si compila il kernel
codice. Un intervallo di registri è specificato come due registri separati da un trattino. multiplo
gli intervalli di registro possono essere specificati separati da una virgola.
-indirizzamento mirato
Abilitare l'uso della modalità di indirizzamento indicizzato per SHmedia32/SHcompact. Questo è solo
sicuro se l'hardware e/o il sistema operativo implementano la semantica avvolgente a 32 bit per l'indicizzato
modalità di indirizzamento. L'architettura consente l'implementazione di processori con 64 bit
MMU, che il sistema operativo potrebbe utilizzare per ottenere l'indirizzamento a 32 bit, ma poiché nessun hardware attuale
l'implementazione supporta questo o qualsiasi altro modo per rendere sicura la modalità di indirizzamento indicizzata
da utilizzare nell'ABI a 32 bit, l'impostazione predefinita è -mno-indirizzamento-indicizzato.
-mgettrcosto=numero
Imposta il costo assunto per l'istruzione "gettr" su numero. Il valore predefinito è 2 se
-mpt-fisso è in vigore, 100 altrimenti.
-mpt-fisso
Supponiamo che le istruzioni "pt*" non vengano intrappolate. Questo generalmente genera codice meglio pianificato,
ma non è sicuro sull'hardware attuale. L'attuale definizione di architettura dice che
Trappola "ptabs" e "ptrel" quando il bersaglio con 3 è 3. Questo ha il
effetto involontario di rendere pericoloso programmare queste istruzioni prima di a
ramo o sollevarli da un anello. Ad esempio, "__do_global_ctors", una parte di
libcc che esegue i costruttori all'avvio del programma, chiama le funzioni in un elenco che è
delimitato da -1. Con il -mpt-fisso opzione, il "ptabs" viene eseguito prima del test
contro -1. Ciò significa che tutti i costruttori funzionano un po' più velocemente, ma quando il
loop arriva alla fine dell'elenco, il programma va in crash perché "ptabs" carica -1 in a
registro di destinazione.
Poiché questa opzione non è sicura per qualsiasi hardware che implementa l'architettura corrente
specifica, l'impostazione predefinita è -mno-pt-fisso. Se non specificato esplicitamente con
-mgttrcosto, -mno-pt-fisso implica anche -mgettrcosto=100; questo scoraggia il registro
allocazione dall'utilizzo di registri di destinazione per la memorizzazione di numeri interi ordinari.
-minvalid-simboli
Si supponga che i simboli potrebbero non essere validi. Simboli di funzioni ordinarie generati dal compilatore
sono sempre validi per caricare con "movi"/"shori"/"ptabs" o "movi"/"shori"/"ptrel", ma
con trucchi assembler e/o linker è possibile generare simboli che causano
"ptabs" o "ptrel" per intrappolare. Questa opzione è significativa solo quando -mno-pt-fisso è in
effetto. Impedisce il blocco di base incrociato CSE, il sollevamento e la maggior parte della programmazione del simbolo
carichi. L'impostazione predefinita è -mno-simboli-non-validi.
-mbranch-costo=num
Assumere num essere il costo per un'istruzione di ramo. I numeri più alti fanno il compilatore
prova a generare più codice senza branch, se possibile. Se non specificato il valore è
selezionato in base al tipo di processore per il quale viene compilato.
-mzdcramo
-mno-zdcramo
Supponiamo (non assumere) che le istruzioni di salto condizionale a spostamento zero "bt" e
"bf" sono veloci. Se -mzdcramo è specificato, il compilatore preferisce lo spostamento zero
sequenze di codici di filiale. Questo è abilitato per impostazione predefinita durante la generazione del codice per SH4 e
SH4A. Può essere disabilitato esplicitamente specificando -mno-zdcramo.
-mcbranch-forza-ritardo-slot
Forza l'utilizzo degli slot di ritardo per i rami condizionali, che riempiono lo slot di ritardo
con un "nop" se non è possibile trovare un'istruzione adeguata. Per impostazione predefinita questa opzione è
Disabilitato. Può essere abilitato per aggirare i bug hardware come si trova nell'originale
SH7055.
-mfuso-pazzo
-mno-fuso-madd
Genera codice che utilizza (non utilizza) la moltiplicazione e l'accumulo in virgola mobile
Istruzioni. Queste istruzioni vengono generate per impostazione predefinita se hardware in virgola mobile
viene utilizzato. Il dipendente dalla macchina -mfuso-pazzo l'opzione è ora mappata sulla macchina-
studente indipendente -ffp-contratto=veloce opzione e -mno-fuso-madd è mappato a
-ffp-contratto=off.
-mfsca
-mno-fsca
Consentire o impedire al compilatore di emettere l'istruzione "fsca" per seno e coseno
approssimazioni. L'opzione -mfsca deve essere utilizzato in combinazione con
-funsafe-math-ottimizzazioni. È abilitato per impostazione predefinita durante la generazione del codice per SH4A.
utilizzando -mno-fsca disabilita le approssimazioni seno e coseno anche se
-funsafe-math-ottimizzazioni è in vigore.
-mfsrra
-mno-fsrra
Consentire o impedire al compilatore di emettere l'istruzione "fsrra" per il quadrato reciproco
approssimazioni di radice. L'opzione -mfsrra deve essere utilizzato in combinazione con
-funsafe-math-ottimizzazioni e -finite-math-only. È abilitato per impostazione predefinita quando
codice di generazione per SH4A. Usando -mno-fsrra disabilita la radice quadrata reciproca
approssimazioni anche se -funsafe-math-ottimizzazioni e -finite-math-only ha
effetto.
-pretendere-cmove
Preferisci i rami condizionali a spostamento zero per l'istruzione di movimento condizionale
modelli. Ciò può comportare un codice più veloce sul processore SH4.
Solaris 2 Opzioni
Alcuni degli -m le opzioni sono supportate su Solaris 2:
-mclear-hwcap
-mclear-hwcap dice al compilatore di rimuovere le capacità hardware generate dal
assemblatore Solaris. Questo è necessario solo quando i file oggetto utilizzano estensioni ISA non
supportati dalla macchina corrente, ma controlla in fase di runtime se usarli o meno.
-testo-impuro
-testo-impuro, utilizzato in aggiunta a -condiviso, dice al compilatore di non passare -z testo a
il linker quando si collega un oggetto condiviso. Usando questa opzione, puoi collegare la posizione-
codice dipendente in un oggetto condiviso.
-testo-impuro sopprime il "rimangono traslochi contro allocabili ma non scrivibili"
messaggio di errore del linker di sezioni". Tuttavia, i riposizionamenti necessari attivano la copia su
write e l'oggetto condiviso non è effettivamente condiviso tra i processi. Invece di
utilizzando -testo-impuro, dovresti compilare tutto il codice sorgente con -fpic or -fPIC.
Questi switch sono supportati in aggiunta a quanto sopra su Solaris 2:
-pthread
Aggiungi il supporto per il multithreading utilizzando la libreria di thread POSIX. Questa opzione imposta
flag sia per il preprocessore che per il linker. Questa opzione non influisce sul thread
sicurezza del codice oggetto prodotto dal compilatore o quello delle librerie fornite con esso.
-pthread
Questo è sinonimo di -pthread.
SPARC Opzioni
Alcuni degli -m le opzioni sono supportate su SPARC:
-mno-app-regs
-mapp-regs
Specificare -mapp-regs per generare output utilizzando i registri globali da 2 a 4, che
lo SPARC SVR4 ABI si riserva per le applicazioni. Come il registro globale 1, ogni globale
il registro da 2 a 4 viene quindi trattato come un registro allocabile che viene bloccato da
chiamate di funzione. Questa è l'impostazione predefinita.
Per essere completamente conforme a SVR4 ABI al costo di una perdita di prestazioni, specificare
-mno-app-regs. Dovresti compilare librerie e software di sistema con questa opzione.
-mpiatto
-mno-piatto
Con -mpiatto, il compilatore non genera istruzioni di salvataggio/ripristino e usa a
modello di finestra "piatta" o a registro singolo. Questo modello è compatibile con il normale
registro modello finestra. I registri locali e i registri di ingresso (0--5) sono fermi
trattati come registri "chiamati salvati" e salvati nello stack secondo necessità.
Con -mno-piatto (l'impostazione predefinita), il compilatore genera istruzioni di salvataggio/ripristino (tranne
per le funzioni foglia). Questa è la modalità operativa normale.
-mfpu
-mhard-flottante
Genera un output contenente istruzioni in virgola mobile. Questa è l'impostazione predefinita.
-mno-fpu
-msoft-flottante
Genera output contenente chiamate di libreria per virgola mobile. Attenzione: il requisito
le librerie non sono disponibili per tutti i target SPARC. Normalmente le strutture del
vengono usati i normali compilatori C della macchina, ma questo non può essere fatto direttamente in cross-
compilazione. Devi prendere le tue disposizioni per fornire una libreria adatta
funzioni per la compilazione incrociata. Gli obiettivi incorporati sparc-*-aout e spaclite-*-*
fornire supporto software in virgola mobile.
-msoft-flottante cambia la convenzione di chiamata nel file di output; quindi, è solo
utile se compili contro tutti i di un programma con questa opzione. In particolare, è necessario
compilare libgcc.a, la libreria fornita con GCC, con -msoft-flottante in ordine per questo
lavorare.
-mhard-quad-flottante
Genera un output contenente istruzioni a virgola mobile quad-word (long double).
-msoft-quad-float
Genera output contenente chiamate di libreria per quad-word (long double) in virgola mobile
Istruzioni. Le funzioni richiamate sono quelle specificate nell'ABI SPARC. Questo è il
predefinito.
Al momento della stesura di questo documento, non ci sono implementazioni SPARC con supporto hardware per
le istruzioni a virgola mobile di quattro parole. Invocano tutti un gestore di trap per uno di
queste istruzioni, quindi il gestore trap emula l'effetto dell'istruzione.
A causa del sovraccarico del gestore trap, questo è molto più lento della chiamata alla libreria ABI
routine. Così il -msoft-quad-float l'opzione è l'impostazione predefinita.
-mno-non-allineato-doppio
-munaligned-doppi
Supponiamo che i doppi abbiano un allineamento a 8 byte. Questa è l'impostazione predefinita.
Con -munaligned-doppi, GCC presuppone che i doppi abbiano un allineamento a 8 byte solo se
sono contenuti in un altro tipo, o se hanno un indirizzo assoluto. Altrimenti, è
presuppone che abbiano un allineamento a 4 byte. Specificando questa opzione si evitano alcune rare
problemi di compatibilità con codice generato da altri compilatori. Non è l'impostazione predefinita
perché comporta una perdita di prestazioni, soprattutto per il codice a virgola mobile.
-modalità muser
-mno-modalità-utente
Non generare codice che può essere eseguito solo in modalità supervisore. Questo è rilevante solo per
l'istruzione "casa" emessa per il processore LEON3. Questa è l'impostazione predefinita.
-mno-strutture-più veloci
-mfaster-struct
Con -mfaster-struct, il compilatore presuppone che le strutture debbano avere 8 byte
allineamento. Ciò consente l'uso di coppie di istruzioni "ldd" e "std" per le copie
nell'assegnazione della struttura, al posto del doppio delle coppie "ld" e "st". in ogni caso, il
l'uso di questo allineamento modificato viola direttamente l'ABI SPARC. Quindi, è inteso
solo per l'uso su obiettivi in cui lo sviluppatore riconosce che il loro codice risultante è
non direttamente in linea con le regole dell'ABI.
-mcpu=tipo_cpu
Impostare il set di istruzioni, il set di registri e i parametri di pianificazione delle istruzioni per
tipo di macchina tipo_cpu. Valori supportati per tipo_cpu sono v7, cipresso, v8, supersparcato,
ipersparato, leon, leon3, leon3v7, spaclite, f930, f934, spaclite86x, scintillio,
TSC701, v9, ultrasparta, ultrasparco3, Niagara, niagara2, niagara3 e niagara4.
Anche le toolchain native Solaris e GNU/Linux supportano il valore nativo, che seleziona
la migliore opzione di architettura per il processore host. -mcpu=nativo non ha effetto se
GCC non riconosce il processore.
I parametri di programmazione delle istruzioni di default vengono utilizzati per i valori che selezionano un
architettura e non un'implementazione. Questi sono v7, v8, spaclite, scintillio, v9.
Di seguito è riportato un elenco di ciascuna architettura supportata e delle relative implementazioni supportate.
v7 cipresso, leon3v7
v8 supersparc, ipersparc, leon, leon3
spaclite
f930, f934, spaclite86x
scintillio
TSC701
v9 ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4
Per impostazione predefinita (se non diversamente configurato), GCC genera il codice per la variante V7 del
Architettura SPARC. Insieme a -mcpu=cipresso, il compilatore lo ottimizza inoltre per
il chip Cypress CY7C602, come utilizzato nella serie SPARCStation/SPARCServer 3xx. Questo è
adatto anche per la vecchia SPARCStation 1, 2, IPX ecc.
Con -mcpu=v8, GCC genera il codice per la variante V8 dell'architettura SPARC. Il
l'unica differenza rispetto al codice V7 è che il compilatore emette la moltiplicazione intera e
istruzioni di divisione intera che esistono in SPARC-V8 ma non in SPARC-V7. Insieme a
-mcpu=supersparc, il compilatore lo ottimizza ulteriormente per il chip SuperSPARC, come
utilizzato nelle serie SPARCStation 10, 1000 e 2000.
Con -mcpu=spartilite, GCC genera il codice per la variante SPARClite dello SPARC
architettura. Questo aggiunge il moltiplicatore intero, il passo di divisione intero e la scansione ("ffs")
istruzioni che esistono in SPARClite ma non in SPARC-V7. Insieme a -mcpu=f930, l'
il compilatore lo ottimizza inoltre per il chip Fujitsu MB86930, che è l'originale
SPARClite, senza FPU. Insieme a -mcpu=f934, il compilatore lo ottimizza inoltre per
il chip Fujitsu MB86934, che è il più recente SPARClite con FPU.
Con -mcpu=particella, GCC genera il codice per la variante SPARClet di SPARC
architettura. Questo aggiunge l'intero moltiplicare, moltiplicare/accumulare, dividere intero
istruzioni step and scan ("ffs") che esistono in SPARClet ma non in SPARC-V7. Insieme a
-mcpu=tsc701, il compilatore lo ottimizza ulteriormente per il chip TEMIC SPARClet.
Con -mcpu=v9, GCC genera il codice per la variante V9 dell'architettura SPARC. Questo
aggiunge interi a 64 bit e istruzioni di spostamento in virgola mobile, 3 ulteriori in virgola mobile
registri del codice di condizione e istruzioni di spostamento condizionale. Insieme a -mcpu=ultrasparco,
il compilatore lo ottimizza inoltre per i chip Sun UltraSPARC I/II/IIi. Insieme a
-mcpu=ultrasparc3, il compilatore lo ottimizza ulteriormente per Sun UltraSPARC
Chip III/III+/IIIi/IIIi+/IV/IV+. Insieme a -mcpu=niagara, il compilatore inoltre
lo ottimizza per i chip Sun UltraSPARC T1. Insieme a -Mcpu = niagara2, il compilatore
lo ottimizza inoltre per i chip Sun UltraSPARC T2. Insieme a -Mcpu = niagara3, l'
Il compilatore lo ottimizza inoltre per i chip Sun UltraSPARC T3. Insieme a -Mcpu = niagara4,
il compilatore lo ottimizza inoltre per i chip Sun UltraSPARC T4.
-mtune=tipo_cpu
Impostare i parametri di pianificazione delle istruzioni per il tipo di macchina tipo_cpu, ma non impostare
il set di istruzioni o il set di registri che l'opzione -mcpu=tipo_cpu fa.
Gli stessi valori per -mcpu=tipo_cpu può essere utilizzato per -mtune=tipo_cpu, ma l'unico
i valori utili sono quelli che selezionano una particolare implementazione della CPU. Quelli sono
cipresso, supersparcato, ipersparato, leon, leon3, leon3v7, f930, f934, spaclite86x,
TSC701, ultrasparta, ultrasparco3, Niagara, niagara2, niagara3 e niagara4. Con
toolchain nativi Solaris e GNU/Linux, nativo può anche essere usato.
-mv8plus
-mno-v8plus
Con -mv8plus, GCC genera il codice per SPARC-V8+ ABI. La differenza dal V8
ABI è che i registri globali e out sono considerati larghi 64 bit. Questo è abilitato
per impostazione predefinita su Solaris in modalità a 32 bit per tutti i processori SPARC-V9.
-mvis
-mno-vis
Con -mvis, GCC genera codice che sfrutta UltraSPARC Visual
Estensioni del set di istruzioni. L'impostazione predefinita è -mno-vis.
-mvis2
-mno-vis2
Con -mvis2, GCC genera codice che sfrutta la versione 2.0 di UltraSPARC
Estensioni del set di istruzioni visive. L'impostazione predefinita è -mvis2 quando si prende di mira una CPU che
supporta tali istruzioni, come UltraSPARC-III e versioni successive. Collocamento -mvis2 anche
set -mvis.
-mvis3
-mno-vis3
Con -mvis3, GCC genera codice che sfrutta la versione 3.0 di UltraSPARC
Estensioni del set di istruzioni visive. L'impostazione predefinita è -mvis3 quando si prende di mira una CPU che
supporta tali istruzioni, come niagara-3 e versioni successive. Collocamento -mvis3 imposta anche
-mvis2 e -mvis.
-mcbcond
-mno-cbcond
Con -mcbcond, GCC genera codice che sfrutta il confronto e il ramo
istruzioni, come definito in Sparc Architecture 2011. L'impostazione predefinita è -mcbcond quando
mira a una CPU che supporta tali istruzioni, come niagara-4 e versioni successive.
-mpocc
-mno-popc
Con -mpocc, GCC genera codice che sfrutta la popolazione UltraSPARC
istruzione di conteggio. L'impostazione predefinita è -mpocc quando si prende di mira una CPU che supporta tale
istruzioni, come Niagara-2 e successive.
-mfmf
-mno-fmaf
Con -mfmf, GCC genera un codice che sfrutta l'UltraSPARC Fused Multiply-
Aggiungi estensioni in virgola mobile. L'impostazione predefinita è -mfmf quando si prende di mira una CPU che
supporta tali istruzioni, come Niagara-3 e versioni successive.
-mfix-at697f
Abilita la soluzione documentata per il singolo erratum del processore Atmel AT697F
(che corrisponde all'erratum #13 del processore AT697E).
-mfix-ut699
Abilita le soluzioni documentate per gli errata in virgola mobile e la cache dei dati
annullare gli errata del processore UT699.
Alcuni degli -m le opzioni sono supportate in aggiunta a quanto sopra sui processori SPARC-V9 a 64 bit
ambienti:
-M32
-M64
Genera codice per un ambiente a 32 o 64 bit. L'ambiente a 32 bit imposta int,
long e puntatore a 32 bit. L'ambiente a 64 bit imposta int su 32 bit e long e
puntatore a 64 bit.
-mcmodello=quale
Imposta il modello di codice su uno di
medio
Il modello di codice medio/basso: indirizzi a 64 bit, i programmi devono essere collegati nel basso 32
bit di memoria. I programmi possono essere collegati staticamente o dinamicamente.
medio
Il modello di codice medio/medio: indirizzi a 64 bit, i programmi devono essere collegati in basso
44 bit di memoria, i segmenti di testo e dati devono avere una dimensione inferiore a 2 GB e
il segmento di dati deve trovarsi entro 2 GB dal segmento di testo.
medaglione
Il modello di codice Medium/Anywhere: indirizzi a 64 bit, i programmi possono essere collegati ovunque
in memoria, i segmenti di testo e dati devono avere una dimensione inferiore a 2 GB e i dati
Il segmento deve trovarsi entro 2 GB dal segmento di testo.
Emmedany
Il modello di codice Medium/Anywhere per i sistemi embedded: indirizzi a 64 bit, il testo
e i segmenti di dati devono avere una dimensione inferiore a 2 GB, entrambi a partire da qualsiasi punto della memoria
(determinato al momento del collegamento). Il registro globale %g4 punta alla base dei dati
segmento. I programmi sono collegati staticamente e il PIC non è supportato.
-memory-model=mem-modello
Imposta il modello di memoria in vigore sul processore su uno di
difetto
Il modello di memoria predefinito per il processore e il sistema operativo.
rm Ordine di memoria rilassato
pso Ordine parziale del negozio
tso Ordine totale del negozio
sc Consistenza sequenziale
Questi modelli di memoria sono formalmente definiti nell'Appendice D dell'architettura Sparc V9
manuale, come impostato nel campo "PSTATE.MM" del processore.
-mstack-bias
-mno-stack-bias
Con -mstack-bias, GCC presuppone che il puntatore dello stack e il puntatore del frame se presenti,
sono sfalsati di -2047 che devono essere aggiunti di nuovo quando si effettuano i riferimenti di stack frame. Questo
è l'impostazione predefinita in modalità a 64 bit. In caso contrario, si supponga che tale offset non sia presente.
SPU Opzioni
Alcuni degli -m le opzioni sono supportate sulla SPU:
-mwarn-reloc
-errore-reloc
Il caricatore per SPU non gestisce i trasferimenti dinamici. Per impostazione predefinita, GCC fornisce un
errore quando genera codice che richiede un riposizionamento dinamico. -mno-errore-reloc
disabilita l'errore, -mwarn-reloc genera invece un avviso.
-msafe-dma
-munsafe-dma
Le istruzioni che avviano o testano il completamento di DMA non devono essere riordinate con
rispetto ai carichi e agli archivi della memoria a cui si accede. Insieme a -munsafe-dma
è necessario utilizzare la parola chiave "volatile" per proteggere gli accessi alla memoria, ma ciò può portare a
codice inefficiente in luoghi in cui è noto che la memoria non cambia. Piuttosto che segnare
la memoria come volatile, puoi usare -msafe-dma per dire al compilatore di trattare il DMA
istruzioni in quanto potenzialmente influenti su tutta la memoria.
-mbranch-suggerimenti
Per impostazione predefinita, GCC genera un'istruzione di suggerimento di diramazione per evitare stalli della pipeline per
rami sempre presi o probabilmente presi. Un suggerimento non viene generato più vicino di 8
istruzioni lontano dal suo ramo. Ci sono pochi motivi per disabilitarli, tranne che per
scopi di debugging o per rendere un oggetto un po' più piccolo.
-mpiccolo-mem
-mgrande-mem
Per impostazione predefinita, GCC genera codice assumendo che gli indirizzi non siano mai più grandi di 18 bit.
Con -mgrande-mem viene generato un codice che presuppone un indirizzo completo a 32 bit.
-mstdmain
Per impostazione predefinita, GCC si collega al codice di avvio che assume la funzione principale in stile SPU
interfaccia (che ha un elenco di parametri non convenzionale). Insieme a -mstdmain, collegamenti GCC
il tuo programma contro il codice di avvio che assume un'interfaccia in stile C99 su "principale",
inclusa una copia locale delle stringhe "argv".
-mintervallo-fisso=registro-intervallo
Genera codice trattando l'intervallo di registri specificato come registri fissi. Un registro fisso
è uno che l'allocatore del registro non può utilizzare. Questo è utile quando si compila il kernel
codice. Un intervallo di registri è specificato come due registri separati da un trattino. multiplo
gli intervalli di registro possono essere specificati separati da una virgola.
-mea32
-mea64
Compila il codice assumendo che i puntatori allo spazio degli indirizzi PPU a cui si accede tramite "__ea"
il qualificatore dello spazio degli indirizzi denominato sono larghi 32 o 64 bit. L'impostazione predefinita è 32 bit.
Poiché questa è un'opzione che cambia ABI, tutto il codice oggetto in un eseguibile deve essere compilato
con la stessa impostazione.
-conversione-spazio-indirizzo
-conversione-spazio-indirizzo-mno
Consentire/non consentire di trattare lo spazio degli indirizzi "__ea" come un sovrainsieme dell'indirizzo generico
spazio. Ciò consente cast espliciti di tipo tra "__ea" e puntatore generico, nonché
conversioni implicite di puntatori generici in puntatori "__ea". L'impostazione predefinita è consentire
conversioni del puntatore dello spazio di indirizzamento.
-dimensione-mcache=dimensione della cache
Questa opzione controlla la versione di libgcc che il compilatore collega a un eseguibile
e seleziona una cache gestita dal software per accedere alle variabili nell'indirizzo "__ea"
spazio con una particolare dimensione della cache. Possibili opzioni per dimensione della cache sono 8, 16, 32, 64
e 128. La dimensione della cache predefinita è 64 KB.
-aggiornamenti-matomic
-aggiornamenti mno-atomici
Questa opzione controlla la versione di libgcc che il compilatore collega a un eseguibile
e seleziona se gli aggiornamenti atomici alla cache gestita dal software delle variabili lato PPU
sono utilizzati. Se usi gli aggiornamenti atomici, cambia in una variabile PPU dal codice SPU usando
il qualificatore dello spazio di indirizzo denominato "__ea" non interferisce con le modifiche ad altre PPU
variabili che risiedono nella stessa linea di cache dal codice PPU. Se non usi l'atomo
aggiornamenti, tale interferenza può verificarsi; tuttavia, scrivere indietro le righe della cache è più
efficiente. Il comportamento predefinito consiste nell'utilizzare gli aggiornamenti atomici.
-mdual-nops
-mdual-nops =n
Per impostazione predefinita, GCC inserisce nops per aumentare il doppio problema quando si aspetta che aumenti
e le prestazioni. n può essere un valore compreso tra 0 e 10. Un più piccolo n inserisce meno nops. 10 è
l'impostazione predefinita, 0 è uguale a -mno-doppio-nops. Disabilitato con -Voi.
-mint-max-nops=n
Numero massimo di nop da inserire per un suggerimento di ramo. Un suggerimento di ramo deve essere almeno 8
istruzioni lontano dal ramo che sta interessando. GCC inserisce fino a n no a
applicarlo, altrimenti non genera il suggerimento del ramo.
-mint-max-distanza=n
La codifica dell'istruzione del suggerimento di diramazione limita il suggerimento a essere entro 256
istruzioni del ramo che sta interessando. Per impostazione predefinita, GCC si assicura che sia all'interno
125
-msafe-suggerimenti
Risolvere un bug hardware che causa lo stallo indefinito della SPU. Per impostazione predefinita, GCC
inserisce l'istruzione "hbrp" per assicurarsi che questo stallo non si verifichi.
Opzioni per Sistema V
Queste opzioni aggiuntive sono disponibili su System V Release 4 per compatibilità con altri
compilatori su quei sistemi:
-G Crea un oggetto condiviso. Si raccomanda che -simbolico or -condiviso essere usato invece.
-Qy Identificare le versioni di ogni strumento utilizzato dal compilatore, in un assembler ".ident"
direttiva in uscita.
-Qn Evita di aggiungere direttive ".ident" al file di output (questa è l'impostazione predefinita).
-SI,dirs
Cerca nelle directory dirs, e nessun altro, per le librerie specificate con -l.
-Ym,dir
Guarda nella directory dir per trovare il preprocessore M4. L'assemblatore usa questo
opzione.
TILE-Gx Opzioni
Alcuni degli -m le opzioni sono supportate su TILE-Gx:
-mcmodel=piccolo
Genera codice per il modello piccolo. La distanza per le chiamate dirette è limitata a 500 M
in entrambe le direzioni. Gli indirizzi relativi al PC sono 32 bit. Supporto indirizzi assoluti
l'intero intervallo di indirizzi.
-mcmodel=grande
Genera codice per il modello di grandi dimensioni. Non ci sono limiti alla distanza di chiamata, pc-
indirizzi relativi o indirizzi assoluti.
-mcpu=Nome
Seleziona il tipo di CPU da prendere di mira. Attualmente l'unico tipo supportato è tilex.
-M32
-M64
Genera codice per un ambiente a 32 o 64 bit. L'ambiente a 32 bit imposta int,
long e puntatore a 32 bit. L'ambiente a 64 bit imposta int su 32 bit e long e
puntatore a 64 bit.
-big endian
-mittle-endian
Genera codice rispettivamente in modalità big/little endian.
TILEPro Opzioni
Alcuni degli -m le opzioni sono supportate su TILEPro:
-mcpu=Nome
Seleziona il tipo di CPU da prendere di mira. Attualmente l'unico tipo supportato è tilepro.
-M32
Genera codice per un ambiente a 32 bit, che imposta int, long e pointer a 32 bit.
Questo è l'unico comportamento supportato, quindi il flag viene sostanzialmente ignorato.
V850 Opzioni
Alcuni degli -m le opzioni sono definite per le implementazioni V850:
-mlong-chiamate
-mno-chiamate lunghe
Tratta tutte le chiamate come se fossero lontane (vicine). Se si presume che le chiamate siano lontane, il
il compilatore carica sempre l'indirizzo della funzione in un registro e chiama indirettamente
attraverso il puntatore.
-mno-ep
-mep
Non ottimizzare (ottimizzare) i blocchi di base che utilizzano lo stesso puntatore indice 4 o più
volte per copiare il puntatore nel registro "ep" e utilizzare i più brevi "sld" e "sst"
Istruzioni. Il -mep l'opzione è attiva per impostazione predefinita se ottimizzi.
-mno-prolog-funzione
-funzione-mprolog
Non utilizzare (usare) funzioni esterne per salvare e ripristinare i registri al prologo
ed epilogo di una funzione. Le funzioni esterne sono più lente, ma utilizzano meno codice
spazio se più di una funzione salva lo stesso numero di registri. Il
-funzione-mprolog l'opzione è attiva per impostazione predefinita se ottimizzi.
-mspazio
Cerca di rendere il codice il più piccolo possibile. Al momento, questo accende solo il -mep
e -funzione-mprolog opzioni.
-mtda=n
Metti variabili statiche o globali la cui dimensione è n byte o meno nella piccola area dati
a cui punta il registro "ep". La minuscola area dati può contenere fino a 256 byte in totale
(128 byte per i riferimenti di byte).
-msda=n
Metti variabili statiche o globali la cui dimensione è n byte o meno nella piccola area dati
a cui punta il registro "gp". La piccola area dati può contenere fino a 64 kilobyte.
-mzda=n
Metti variabili statiche o globali la cui dimensione è n byte o meno nei primi 32
kilobyte di memoria.
-mv850
Specificare che il processore di destinazione è il V850.
-mv850e3v5
Specificare che il processore di destinazione è il V850E3V5. La costante del preprocessore
"__v850e3v5__" è definito se viene utilizzata questa opzione.
-mv850e2v4
Specificare che il processore di destinazione è il V850E3V5. Questo è un alias per il
-mv850e3v5 opzione.
-mv850e2v3
Specificare che il processore di destinazione è il V850E2V3. La costante del preprocessore
"__v850e2v3__" è definito se viene utilizzata questa opzione.
-mv850e2
Specificare che il processore di destinazione è il V850E2. La costante del preprocessore
"__v850e2__" è definito se viene utilizzata questa opzione.
-mv850e1
Specificare che il processore di destinazione è il V850E1. Le costanti del preprocessore
"__v850e1__" e "__v850e__" sono definiti se viene utilizzata questa opzione.
-mv850es
Specificare che il processore di destinazione è il V850ES. Questo è un alias per il -mv850e1
opzione.
-mv850e
Specificare che il processore di destinazione è il V850E. La costante del preprocessore "__v850e__"
è definito se viene utilizzata questa opzione.
Se nessuno dei due -mv850 né -mv850e né -mv850e1 né -mv850e2 né -mv850e2v3 né -mv850e3v5
sono definiti, quindi viene scelto un processore di destinazione predefinito e il relativo __v850*__
la costante del preprocessore è definita.
Le costanti del preprocessore "__v850" e "__v851__" sono sempre definite, indipendentemente da
quale variante di processore è l'obiettivo.
-mdisable-chiamata
-mno-disabilita-callt
Questa opzione sopprime la generazione dell'istruzione "CALLT" per v850e, v850e1,
varianti v850e2, v850e2v3 e v850e3v5 dell'architettura v850.
Questa opzione è abilitata per impostazione predefinita quando l'RH850 ABI è in uso (vedi -mrh850-abi), E
disabilitato per impostazione predefinita quando l'ABI GCC è in uso. Se vengono visualizzate le istruzioni "CALLT"
generato, viene definito il simbolo del preprocessore C "__V850_CALLT__".
-rilassati
-mno-rilassati
Passare (o non trasmettere) il -rilassati opzione della riga di comando per l'assemblatore.
-mlong-salti
-mno-salti in lungo
Disabilitare (o riabilitare) la generazione di istruzioni di salto relative al PC.
-msoft-flottante
-mhard-flottante
Disabilitare (o riabilitare) la generazione di istruzioni hardware in virgola mobile. Questo
l'opzione è significativa solo quando l'architettura di destinazione è V850E2V3 o più alto. Se
le istruzioni hardware in virgola mobile vengono generate quindi il preprocessore C
viene definito il simbolo "__FPU_OK__", altrimenti viene definito il simbolo "__NO_FPU__".
-Mloop
Abilita l'uso dell'istruzione e3v5 LOOP. L'uso di questa istruzione non è
abilitato per impostazione predefinita quando l'architettura e3v5 è selezionata perché il suo utilizzo è ancora
sperimentale.
-mrh850-abi
-mgh
Abilita il supporto per la versione RH850 dell'ABI V850. Questa è l'impostazione predefinita. Insieme a
questa versione dell'ABI si applicano le seguenti regole:
* Le unioni e le strutture di dimensioni intere vengono restituite tramite un puntatore a memoria anziché
un registro.
* Le grandi strutture e le unioni (più di 8 byte di dimensione) vengono passate per valore.
* Le funzioni sono allineate ai limiti di 16 bit.
* L' -m8byte-align l'opzione della riga di comando è supportata.
* L' -mdisable-chiamata l'opzione della riga di comando è abilitata per impostazione predefinita. Il
-mno-disabilita-callt l'opzione della riga di comando non è supportata.
Quando questa versione dell'ABI è abilitata il simbolo del preprocessore C "__V850_RH850_ABI__"
è definito.
-mgcc-abi
Abilita il supporto per la vecchia versione GCC dell'ABI V850. Con questa versione dell'ABI
si applicano le seguenti regole:
* Le strutture e le unioni di dimensioni intere vengono restituite nel registro "r10".
* Le grandi strutture e le unioni (più di 8 byte di dimensione) vengono passate per riferimento.
* Le funzioni sono allineate ai limiti a 32 bit, a meno che non vengano ottimizzate le dimensioni.
* L' -m8byte-align l'opzione della riga di comando non è supportata.
* L' -mdisable-chiamata l'opzione della riga di comando è supportata ma non abilitata per impostazione predefinita.
Quando questa versione dell'ABI è abilitata il simbolo del preprocessore C "__V850_GCC_ABI__"
è definito.
-m8byte-align
-Mno-8byte-align
Consente l'allineamento dei tipi "doppio" e "lungo lungo" su limiti di 8 byte.
L'impostazione predefinita è limitare l'allineamento di tutti gli oggetti a un massimo di 4 byte. quando
-m8byte-align è in effetti il simbolo del preprocessore C "__V850_8BYTE_ALIGN__" è
definito.
-grande-interruttore
Genera codice adatto a grandi tabelle di commutazione. Utilizzare questa opzione solo se il
assembler/linker si lamentano di rami fuori range all'interno di una tabella switch.
-mapp-regs
Questa opzione fa in modo che r2 e r5 vengano utilizzati nel codice generato dal compilatore. Questo
l'impostazione è quella predefinita.
-mno-app-regs
Questa opzione fa in modo che r2 e r5 vengano trattati come registri fissi.
VAX Opzioni
Alcuni degli -m le opzioni sono definite per il VAX:
-munix
Non emettere determinate istruzioni di salto ("aobleq" e così via) che l'assemblatore Unix
per il VAX non può gestire su lunghe distanze.
-mgnu
Emetti quelle istruzioni di salto, partendo dal presupposto che l'assemblatore GNU sia in corso
Usato.
-mg Codice di output per i numeri a virgola mobile in formato G invece del formato D.
Visium Opzioni
-mdebug
Un programma che esegue l'I/O di file ed è destinato a essere eseguito su un target MCM dovrebbe essere
collegato a questa opzione. Fa sì che le librerie libc.a e libdebug.a siano collegate.
Il programma dovrebbe essere eseguito sul target sotto il controllo del debug remoto GDB
troncone.
-msim
Un programma che esegue I/O su file ed è destinato a funzionare sul simulatore dovrebbe essere
collegato con opzione. Questo fa sì che le librerie libc.a e libsim.a siano collegate.
-mfpu
-mhard-flottante
Genera codice contenente istruzioni in virgola mobile. Questa è l'impostazione predefinita.
-mno-fpu
-msoft-flottante
Genera codice contenente chiamate di libreria per la virgola mobile.
-msoft-flottante cambia la convenzione di chiamata nel file di output; quindi, è solo
utile se compili contro tutti i di un programma con questa opzione. In particolare, è necessario
compilare libgcc.a, la libreria fornita con GCC, con -msoft-flottante in ordine per questo
lavorare.
-mcpu=tipo_cpu
Impostare il set di istruzioni, il set di registri e i parametri di pianificazione delle istruzioni per
tipo di macchina tipo_cpu. Valori supportati per tipo_cpu sono mcm, gr5 e gr6.
mcm è sinonimo di gr5 presente per compatibilità con le versioni precedenti.
Per impostazione predefinita (se non diversamente configurato), GCC genera il codice per la variante GR5 di
l'architettura del Visium.
Con -Mcpu = Gr6, GCC genera il codice per la variante GR6 dell'architettura Visium.
L'unica differenza rispetto al codice GR5 è che il compilatore genererà lo spostamento dei blocchi
istruzioni.
-mtune=tipo_cpu
Impostare i parametri di pianificazione delle istruzioni per il tipo di macchina tipo_cpu, ma non impostare
il set di istruzioni o il set di registri che l'opzione -mcpu=tipo_cpu voluto.
-modalità msv
Genera codice per la modalità supervisore, dove non ci sono restrizioni all'accesso
ai registri generali. Questa è l'impostazione predefinita.
-modalità muser
Genera codice per la modalità utente, dove è consentito l'accesso ad alcuni registri generali
vietato: sul GR5 non è possibile accedere ai registri da r24 a r31 in questa modalità; sul
GR6, sono interessati solo i registri da r29 a r31.
VMS Opzioni
Alcuni degli -m le opzioni sono definite per le implementazioni VMS:
-codici-di-ritorno-mvms
Restituisce i codici delle condizioni VMS da "main". L'impostazione predefinita è restituire la condizione in stile POSIX
(es. errore) codici.
-mdebug-main=prefisso
Segnala la prima routine il cui nome inizia con prefisso come routine principale per il
eseguire il debug.
-mmalloc64
L'impostazione predefinita è routine di allocazione della memoria a 64 bit.
-mpointer-dimensione=Taglia
Imposta la dimensione predefinita dei puntatori. Possibili opzioni per Taglia sono 32 or corto per 32 bit
puntatori, 64 or lungo per puntatori a 64 bit e no per supportare solo puntatori a 32 bit.
L'ultima opzione disabilita "pragma pointer_size".
VxWorks Opzioni
Le opzioni in questa sezione sono definite per tutti i target VxWorks. Opzioni specifiche per il
l'hardware di destinazione è elencato con le altre opzioni per tale destinazione.
-mrtp
GCC può generare codice sia per i kernel VxWorks che per i processi in tempo reale (RTP). Questo
opzione passa dalla prima alla seconda. Definisce anche la macro del preprocessore
"__RTP__".
-non statico
Collega un eseguibile RTP a librerie condivise anziché a librerie statiche. Il
Opzioni -statico e -condiviso può essere utilizzato anche per RTP; -statico è l'impostazione predefinita.
-Bstatico
-Bdinamica
Queste opzioni vengono passate al linker. Sono definiti per compatibilità con
diab.
-Xbind-pigro
Abilita il lazy binding delle chiamate di funzione. Questa opzione è equivalente a -Wl,-z, adesso ed è
definito per compatibilità con Diab.
-Xbind-ora
Disabilita l'associazione pigra delle chiamate di funzione. Questa opzione è l'impostazione predefinita ed è definita per
compatibilità con Diab.
x86 Opzioni
Alcuni degli -m le opzioni sono definite per la famiglia di computer x86.
-marzo=tipo di CPU
Genera istruzioni per il tipo di macchina tipo di CPU. In contrasto con -mtune=tipo di CPU,
che si limita a sintonizzare il codice generato per lo specificato tipo di CPU, -marzo=tipo di CPU
consente a GCC di generare codice che potrebbe non funzionare affatto su processori diversi da quello
indicato. Specificando -marzo=tipo di CPU implica -mtune=tipo di CPU.
Le scelte per tipo di CPU siamo:
nativo
Questo seleziona la CPU per cui generare il codice in fase di compilazione determinando il
tipo di processore della macchina compilatrice. Usando -marzo=nativo abilita tutti
sottoinsiemi di istruzioni supportati dalla macchina locale (quindi il risultato potrebbe non essere eseguito
su macchine diverse). Usando -mtune=nativo produce codice ottimizzato per il locale
macchina sotto i vincoli del set di istruzioni selezionato.
i386
CPU Intel i386 originale.
i486
CPU Intel i486. (Nessuna pianificazione è implementata per questo chip.)
i586
pentium
CPU Intel Pentium senza supporto MMX.
pentium-mmx
CPU Intel Pentium MMX, basata su core Pentium con supporto per set di istruzioni MMX.
pentium
CPU Intel Pentium Pro.
i686
Se usato con -marzo, viene utilizzato il set di istruzioni Pentium Pro, quindi il codice viene eseguito
su tutti i chip della famiglia i686. Se utilizzato con -mtune, ha lo stesso significato di
generico.
pentium2
CPU Intel Pentium II, basata su core Pentium Pro con supporto per set di istruzioni MMX.
pentium3
pentium3m
CPU Intel Pentium III, basata su core Pentium Pro con set di istruzioni MMX e SSE
supporto.
pentium-m
Intel Pentium M; versione a basso consumo della CPU Intel Pentium III con MMX, SSE e SSE2
supporto del set di istruzioni. Utilizzato dai notebook Centrino.
pentium4
pentium4m
CPU Intel Pentium 4 con supporto per set di istruzioni MMX, SSE e SSE2.
Prescott
Versione migliorata della CPU Intel Pentium 4 con istruzioni MMX, SSE, SSE2 e SSE3
impostare il supporto.
nocona
Versione migliorata della CPU Intel Pentium 4 con estensioni a 64 bit, MMX, SSE, SSE2 e
Supporto del set di istruzioni SSE3.
core2
CPU Intel Core 2 con estensioni a 64 bit, MMX, SSE, SSE2, SSE3 e SSSE3
supporto del set di istruzioni.
respiro
CPU Intel Nehalem con estensioni a 64 bit, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Supporto per set di istruzioni SSE4.2 e POPCNT.
ovest
CPU Intel Westmere con estensioni a 64 bit, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Supporto per set di istruzioni SSE4.2, POPCNT, AES e PCLMUL.
ponte sabbioso
CPU Intel Sandy Bridge con estensioni a 64 bit, MMX, SSE, SSE2, SSE3, SSSE3,
Supporto per set di istruzioni SSE4.1, SSE4.2, POPCNT, AVX, AES e PCLMUL.
Ivy bridge
CPU Intel Ivy Bridge con estensioni a 64 bit, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Set di istruzioni SSE4.2, POPCNT, AVX, AES, PCLMUL, FSGSBASE, RDRND e F16C
supporto.
Haswell
CPU Intel Haswell con estensioni a 64 bit, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2
e supporto del set di istruzioni F16C.
largamente
CPU Intel Broadwell con estensioni a 64 bit, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2,
Supporto per set di istruzioni F16C, RDSEED, ADCX e PREFETCHW.
Bonnell
CPU Intel Bonnell con estensioni a 64 bit, MOVBE, MMX, SSE, SSE2, SSE3 e SSSE3
supporto del set di istruzioni.
Silvermont
CPU Intel Silvermont con estensioni a 64 bit, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
Supporto per set di istruzioni SSE4.1, SSE4.2, POPCNT, AES, PCLMUL e RDRND.
knl CPU di atterraggio di Intel Knight con estensioni a 64 bit, MOVBE, MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI,
BMI2, F16C, RDSEED, ADCX, PREFETCHW, AVX512F, AVX512PF, AVX512ER e AVX512CD
supporto del set di istruzioni.
k6 CPU AMD K6 con supporto per set di istruzioni MMX.
k6-2
k6-3
Versioni migliorate della CPU AMD K6 con MMX e 3DNow! supporto del set di istruzioni.
athlon
athlon-tbird
CPU AMD Athlon con MMX, 3dNOW!, 3DNow! e istruzioni di prelettura SSE
supporto.
athlon-4
athlon-xp
athlon-mp
CPU AMD Athlon migliorata con MMX, 3DNow!, 3DNow! e istruzioni SSE complete
impostare il supporto.
k8
opteron
gymon64
Athlon-FX
Processori basati sul core AMD K8 con supporto per set di istruzioni x86-64, incluso
i processori AMD Opteron, Athlon 64 e Athlon 64 FX. (Questo sovrascrive MMX,
SSE, SSE2, 3DNow!, 3DNow migliorato! ed estensioni del set di istruzioni a 64 bit.)
k8-sse3
opteron-sse3
athlon64-sse3
Versioni migliorate dei core AMD K8 con supporto del set di istruzioni SSE3.
amdfam10
Barcellona
CPU basate su core AMD Family 10h con supporto per set di istruzioni x86-64. (Questo
superset MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!, 3DNow! avanzato, ABM e 64 bit
estensioni del set di istruzioni.)
bdver1
CPU basate su core AMD Family 15h con supporto per set di istruzioni x86-64. (Questo
superset FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
SSSE3, SSE4.1, SSE4.2, ABM ed estensioni del set di istruzioni a 64 bit.)
bdver2
CPU basate su core della famiglia AMD 15h con supporto per set di istruzioni x86-64. (Questo
superset BMI, TBM, F16C, FMA, FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE,
SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM e set di istruzioni a 64 bit
estensioni.)
bdver3
CPU basate su core della famiglia AMD 15h con supporto per set di istruzioni x86-64. (Questo
superset BMI, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, XOP, LWP, AES, PCL_MUL, CX16,
MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM e set di istruzioni a 64 bit
estensioni.
bdver4
CPU basate su core della famiglia AMD 15h con supporto per set di istruzioni x86-64. (Questo
superset BMI, BMI2, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, AVX2, XOP, LWP, AES,
PCL_MUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM e
Estensioni del set di istruzioni a 64 bit.
btver1
CPU basate su core AMD Family 14h con supporto per set di istruzioni x86-64. (Questo
superset MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM e set di istruzioni a 64 bit
estensioni.)
btver2
CPU basate su core AMD Family 16h con supporto per set di istruzioni x86-64. Questo
include MOVBE, F16C, BMI, AVX, PCL_MUL, AES, SSE4.2, SSE4.1, CX16, ABM, SSE4A,
SSSE3, SSE3, SSE2, SSE, MMX e estensioni del set di istruzioni a 64 bit.
winchip-c6
CPU IDT WinChip C6, trattata allo stesso modo dell'i486 con un set di istruzioni MMX aggiuntivo
supporto.
verricello2
CPU IDT WinChip 2, trattata allo stesso modo dell'i486 con MMX aggiuntivo e 3DNow!
supporto del set di istruzioni.
c3 VIA CPU C3 con MMX e 3DNow! supporto del set di istruzioni. (Nessuna programmazione è
implementato per questo chip.)
c3-2
VIA C3-2 (Nehemiah/C5XL) CPU con supporto per set di istruzioni MMX e SSE. (No
la pianificazione è implementata per questo chip.)
geode
Processore integrato AMD Geode con MMX e 3DNow! supporto del set di istruzioni.
-mtune=tipo di CPU
Sintonizzati su tipo di CPU tutto ciò che riguarda il codice generato, ad eccezione dell'ABI
e il set di istruzioni disponibili. Mentre scegli uno specifico tipo di CPU gli orari
cose in modo appropriato per quel particolare chip, il compilatore non genera alcun codice
che non può essere eseguito sul tipo di macchina predefinito a meno che non si utilizzi a -marzo=tipo di CPU opzione.
Ad esempio, se GCC è configurato per i686-pc-linux-gnu allora -mtune=pentium4 genera
codice che è sintonizzato per Pentium 4 ma funziona ancora su macchine i686.
Le scelte per tipo di CPU sono gli stessi di -marzo. In aggiunta, -mtune supporta 2
scelte extra per tipo di CPU:
generico
Produci codice ottimizzato per i più comuni processori IA32/AMD64/EM64T. Se tu
conosci la CPU su cui verrà eseguito il tuo codice, quindi dovresti usare il corrispondente
-mtune or -marzo opzione al posto di -mtune=generico. Ma, se non lo sai
esattamente ciò che avranno gli utenti della CPU della tua applicazione, quindi dovresti usare questo
opzione.
Man mano che sul mercato vengono distribuiti nuovi processori, il comportamento di questa opzione
cambierà. Pertanto, se esegui l'upgrade a una versione più recente di GCC, generazione del codice
controllato da questa opzione cambierà per riflettere i processori che sono più
comune al momento del rilascio di quella versione di GCC.
Non c'è -marzo=generico opzione perché -marzo indica le istruzioni impostate
il compilatore può usare e non esiste un set di istruzioni generico applicabile a tutti
processori. In contrasto, -mtune indica il responsabile (o, in questo caso,
insieme di processori) per cui il codice è ottimizzato.
intel
Produci codice ottimizzato per i processori Intel più recenti, che sono Haswell
e Silvermont per questa versione di GCC. Se conosci la CPU su cui il tuo codice
verrà eseguito, quindi dovresti usare il corrispondente -mtune or -marzo opzione al posto di
-mtune=intelligence. Ma, se vuoi che la tua applicazione funzioni meglio su entrambi Haswell
e Silvermont, allora dovresti usare questa opzione.
Man mano che i nuovi processori Intel vengono distribuiti sul mercato, il comportamento di questo
l'opzione cambierà. Pertanto, se esegui l'upgrade a una versione più recente di GCC, code
la generazione controllata da questa opzione cambierà per riflettere la più recente Intel
processori al momento del rilascio di tale versione di GCC.
Non c'è -marzo=intel opzione perché -marzo indica le istruzioni impostate
il compilatore può usare e non esiste un set di istruzioni comune applicabile a tutti
processori. In contrasto, -mtune indica il responsabile (o, in questo caso,
insieme di processori) per cui il codice è ottimizzato.
-mcpu=tipo di CPU
Un sinonimo deprecato di -mtune.
-mfpmth=unità
Genera aritmetica in virgola mobile per l'unità selezionata unità. Le scelte per unità siamo:
387 Utilizzare il coprocessore a virgola mobile 387 standard presente sulla maggior parte dei chip
ed emulato in altro modo. Il codice compilato con questa opzione viene eseguito quasi ovunque.
I risultati temporanei vengono calcolati con una precisione a 80 bit anziché con la precisione
specificato dal tipo, con risultati leggermente diversi rispetto alla maggior parte dei
altri chip. Vedere -float-negozio per una descrizione più dettagliata.
Questa è la scelta predefinita per i target x86-32.
sse Utilizzare le istruzioni scalari a virgola mobile presenti nel set di istruzioni SSE. Questo
il set di istruzioni è supportato da Pentium III e dai chip più recenti e nella linea AMD
dai chip Athlon-4, Athlon XP e Athlon MP. La versione precedente della SSE
set di istruzioni supporta solo l'aritmetica a precisione singola, quindi il doppio e
l'aritmetica a precisione estesa viene ancora eseguita utilizzando 387. Una versione successiva, presente
solo nei chip Pentium 4 e AMD x86-64, supporta anche l'aritmetica a doppia precisione.
Per il compilatore x86-32, devi usare -marzo=tipo di CPU, -msse or -msse2 passa a
abilitare le estensioni SSE e rendere effettiva questa opzione. Per il compilatore x86-64,
queste estensioni sono abilitate per impostazione predefinita.
Il codice risultante dovrebbe essere notevolmente più veloce nella maggior parte dei casi e
evitare i problemi di instabilità numerica del codice 387, ma potrebbe romperne alcuni esistenti
codice che prevede che i temporanei siano 80 bit.
Questa è la scelta predefinita per il compilatore x86-64.
se, 387
se+387
entrambi
Tentare di utilizzare entrambi i set di istruzioni contemporaneamente. Questo raddoppia efficacemente il
quantità di registri disponibili e su chip con unità di esecuzione separate per 387
e SSE anche le risorse di esecuzione. Usa questa opzione con attenzione, poiché è ancora
sperimentale, perché l'allocatore del registro GCC non modella separatamente
bene le unità funzionali, con conseguente instabilità delle prestazioni.
-masm=dialetto
Emetti le istruzioni di assemblaggio utilizzando selezionato dialetto. Influisce anche su quale dialetto è
utilizzato per "asm" di base e "asm" esteso. Le scelte supportate (in ordine dialettale) sono a
or intel. L'impostazione predefinita è a. Darwin non supporta intel.
-mieee-fp
-mno-ieee-fp
Controlla se il compilatore utilizza o meno i confronti a virgola mobile IEEE. Queste
gestire correttamente il caso in cui il risultato di un confronto non è ordinato.
-msoft-flottante
Genera output contenente chiamate di libreria per virgola mobile.
Attenzione: le librerie richieste non fanno parte di GCC. Normalmente le strutture del
vengono utilizzati i soliti compilatori C della macchina, ma ciò non può essere eseguito direttamente in
compilazione. Devi prendere le tue disposizioni per fornire una libreria adatta
funzioni per la compilazione incrociata.
Su macchine in cui una funzione restituisce risultati in virgola mobile nel registro 80387
stack, alcuni codici operativi in virgola mobile potrebbero essere emessi anche se -msoft-flottante viene utilizzato.
-mno-fp-ret-in-387
Non utilizzare i registri FPU per restituire i valori delle funzioni.
La solita convenzione di chiamata prevede che le funzioni restituiscano valori di tipo "float" e "double"
in un registro FPU, anche se non c'è FPU. L'idea è che il sistema operativo
dovrebbe emulare una FPU.
L'opzione -mno-fp-ret-in-387 fa sì che tali valori vengano restituiti nella CPU ordinaria
registri invece.
-mno-fantasia-matematica-387
Alcuni 387 emulatori non supportano le istruzioni "sin", "cos" e "sqrt" per il
387. Specificare questa opzione per evitare di generare tali istruzioni. Questa opzione è la
predefinito su OpenBSD e NetBSD. Questa opzione viene ignorata quando -marzo indica che
la CPU di destinazione ha sempre una FPU e quindi l'istruzione non necessita di emulazione.
Queste istruzioni non vengono generate a meno che non si utilizzi anche il
-funsafe-math-ottimizzazioni interruttore.
-maligno-doppio
-mno-align-doppio
Controlla se GCC allinea le variabili "double", "long double" e "long long" su a
confine di due parole o un confine di una parola. Allineare variabili "doppie" su due parole
confine produce codice che viene eseguito un po' più velocemente su un Pentium a spese di più
memoria.
Su x86-64, -maligno-doppio è abilitato per impostazione predefinita.
Attenzione: se usi l'estensione -maligno-doppio switch, strutture contenenti i tipi di cui sopra
sono allineati in modo diverso rispetto alle specifiche dell'interfaccia binaria dell'applicazione pubblicata
per x86-32 e non sono binari compatibili con strutture in codice compilato senza
quell'interruttore.
-m96bit-lungo-doppio
-m128bit-lungo-doppio
Questi interruttori controllano la dimensione del tipo "long double". Il binario dell'applicazione x86-32
interfaccia specifica la dimensione da 96 bit, quindi -m96bit-lungo-doppio è l'impostazione predefinita in
Modalità a 32 bit.
Le architetture moderne (Pentium e successive) preferiscono "long double" per essere allineate a un 8-
o limite di 16 byte. In array o strutture conformi all'ABI, questo non lo è
possibile. Quindi specificando -m128bit-lungo-doppio allinea "long double" a 16 byte
confine riempiendo il "long double" con un ulteriore zero a 32 bit.
Nel compilatore x86-64, -m128bit-lungo-doppio è la scelta predefinita come ABI
specifica che "long double" è allineato su un limite di 16 byte.
Nota che nessuna di queste opzioni consente una precisione extra rispetto allo standard x87
di 80 bit per un "long double".
Attenzione: se sovrascrivi il valore predefinito per il tuo ABI target, questo cambia la dimensione
di strutture e array contenenti variabili "long double", oltre a modificare il
convenzione di chiamata di funzione per le funzioni che richiedono "long double". Quindi non lo sono
binario-compatibile con il codice compilato senza quell'opzione.
-mlong-doppio-64
-mlong-doppio-80
-mlong-doppio-128
Questi interruttori controllano la dimensione del tipo "long double". Una dimensione di 64 bit rende il
tipo "long double" equivalente al tipo "double". Questa è l'impostazione predefinita per 32 bit
Libreria Bionic C. Una dimensione di 128 bit rende il tipo "long double" equivalente al
tipo "__float128". Questa è l'impostazione predefinita per la libreria Bionic C a 64 bit.
Attenzione: se sovrascrivi il valore predefinito per il tuo ABI target, questo cambia la dimensione
di strutture e array contenenti variabili "long double", oltre a modificare il
convenzione di chiamata di funzione per le funzioni che richiedono "long double". Quindi non lo sono
binario-compatibile con il codice compilato senza quell'opzione.
-dati-maligni=Digitare
Controlla come GCC allinea le variabili. Valori supportati per Digitare sono compat usi aumentati
compatibile con il valore di allineamento utilizza GCC 4.8 e versioni precedenti, abi usa il valore di allineamento come
specificato dal psABI, e linea di cache utilizza un valore di allineamento aumentato per abbinare il
dimensione della linea della cache. compat è l'impostazione predefinita.
-mlarge-data-soglia=soglia
Quando -mcmodel=medio è specificato, oggetti dati più grandi di soglia vengono inseriti
la sezione dati di grandi dimensioni. Questo valore deve essere lo stesso per tutti gli oggetti collegati a
il binario e il valore predefinito è 65535.
-mrtd
Utilizzare una convenzione di chiamata di funzione diversa, in cui le funzioni che accettano un valore fisso
numero di argomenti restituiti con "ret numero" istruzione, che fa apparire i loro argomenti
durante il ritorno. Ciò consente di risparmiare un'istruzione nel chiamante poiché non è necessario
pop gli argomenti lì.
Puoi specificare che una singola funzione viene chiamata con questa sequenza di chiamata con
l'attributo della funzione "stdcall". Puoi anche sovrascrivere il -mrtd opzione utilizzando il
attributo della funzione "cdecl".
Attenzione: questa convenzione di chiamata è incompatibile con quella normalmente usata su Unix,
quindi non puoi usarlo se hai bisogno di chiamare librerie compilate con il compilatore Unix.
Inoltre, è necessario fornire prototipi di funzioni per tutte le funzioni che accettano variabili
numero di argomenti (incluso "printf"); altrimenti viene generato un codice errato per
chiamate a tali funzioni.
Inoltre, se si chiama una funzione con troppi risultati, si ottiene un codice gravemente errato
argomenti. (Normalmente, gli argomenti aggiuntivi vengono ignorati in modo innocuo.)
-mregparm=num
Controlla quanti registri vengono utilizzati per passare argomenti interi. Per impostazione predefinita, no
i registri vengono utilizzati per passare argomenti e possono essere utilizzati al massimo 3 registri. Puoi
controllare questo comportamento per una funzione specifica utilizzando l'attributo function
"reparto".
Attenzione: se usi questo interruttore, e num è diverso da zero, quindi devi compilare tutti i moduli
con lo stesso valore, comprese eventuali librerie. Ciò include le librerie di sistema e
moduli di avvio.
-msseregparm
Utilizzare le convenzioni di passaggio del registro SSE per gli argomenti float e double e i valori restituiti.
Puoi controllare questo comportamento per una funzione specifica usando l'attributo function
"sseregparm".
Attenzione: se usi questa opzione, devi creare tutti i moduli con lo stesso valore,
comprese eventuali biblioteche. Ciò include le librerie di sistema e i moduli di avvio.
-mvect8-ret-in-mem
Restituisce vettori a 8 byte in memoria invece dei registri MMX. Questa è l'impostazione predefinita attivata
Solaris@tie{}8 e 9 e VxWorks per abbinare l'ABI dei compilatori Sun Studio fino al
versione 12. Seguono versioni successive del compilatore (a partire da Studio 12 Update@tie{}1)
l'ABI utilizzato da altri target x86, che è l'impostazione predefinita su Solaris@tie{}10 e versioni successive.
Solo usa questa opzione se hai bisogno di rimanere compatibile con il codice esistente prodotto da
quelle versioni precedenti del compilatore o versioni precedenti di GCC.
-mpc32
-mpc64
-mpc80
Imposta la precisione in virgola mobile 80387 su 32, 64 o 80 bit. quando -mpc32 è specificato,
i significandi dei risultati delle operazioni in virgola mobile sono arrotondati a 24 bit
(singola precisione); -mpc64 arrotonda i significandi dei risultati in virgola mobile
operazioni a 53 bit (doppia precisione) e -mpc80 arrotonda i significandi dei risultati
di operazioni in virgola mobile a 64 bit (doppia precisione estesa), che è il
predefinito. Quando viene utilizzata questa opzione, le operazioni in virgola mobile con precisioni più elevate sono
non disponibile per il programmatore senza impostare esplicitamente la parola di controllo FPU.
L'impostazione dell'arrotondamento delle operazioni in virgola mobile su un valore inferiore agli 80 bit predefiniti può
velocizzare alcuni programmi del 2% o più. Nota che alcune librerie matematiche presumono che
le operazioni a virgola mobile a precisione estesa (80 bit) sono abilitate per impostazione predefinita; routine
in tali librerie potrebbe subire una significativa perdita di accuratezza, tipicamente attraverso
chiamata "cancellazione catastrofica", quando questa opzione viene utilizzata per impostare la precisione su
meno di precisione estesa.
-mstackrealign
Riallineare la pila all'ingresso. Su x86, il -mstackrealign l'opzione genera un
prologo ed epilogo alternativi che riallineano lo stack di runtime se necessario. Questo
supporta la combinazione di codici legacy che mantengono l'allineamento dello stack a 4 byte con codici moderni che
mantenere l'allineamento dello stack a 16 byte per la compatibilità SSE. Vedi anche l'attributo
"force_align_arg_pointer", applicabile alle singole funzioni.
-preferred-stack-boundary=num
Tentativo di mantenere il confine dello stack allineato a un 2 elevato a num limite di byte. Se
-preferred-stack-boundary non è specificato, il valore predefinito è 4 (16 byte o 128 bit).
Attenzione: Quando si genera codice per l'architettura x86-64 con estensioni SSE
Disabilitato, -preferred-stack-boundary=3 può essere utilizzato per mantenere allineato il confine dello stack
al limite di 8 byte. Poiché l'ABI x86-64 richiede l'allineamento dello stack di 16 byte, questo è ABI
incompatibile e destinato ad essere utilizzato in un ambiente controllato in cui lo spazio dello stack è
importante limitazione. Questa opzione porta a codice errato quando le funzioni vengono compilate con 16
l'allineamento dello stack di byte (come le funzioni di una libreria standard) vengono chiamate con
pila disallineata. In questo caso, le istruzioni SSE possono portare a un accesso disallineato alla memoria
trappole. Inoltre, gli argomenti variabili vengono gestiti in modo errato per 16 byte allineati
oggetti (inclusi x87 long double e __int128), portando a risultati errati. Devi
costruisci tutti i moduli con -preferred-stack-boundary=3, comprese eventuali librerie. Questo
include le librerie di sistema e i moduli di avvio.
-confine-stack-minima=num
Supponiamo che lo stack in entrata sia allineato a un 2 elevato a num limite di byte. Se
-confine-stack mincoming non è specificato, quello specificato da
-preferred-stack-boundary viene utilizzato.
Su Pentium e Pentium Pro, i valori "double" e "long double" devono essere allineati a an
Limite di 8 byte (vedi -maligno-doppio) o subiscono prestazioni di runtime significative
sanzioni. Su Pentium III, il tipo di dati Streaming SIMD Extension (SSE) "__m128" può
non funziona correttamente se non è allineato a 16 byte.
Per garantire il corretto allineamento di questi valori sullo stack, il limite dello stack deve essere uguale a
allineato come richiesto da qualsiasi valore memorizzato nello stack. Inoltre, ogni funzione
deve essere generato in modo tale da mantenere lo stack allineato. Chiamando così una funzione
compilato con un limite di stack preferito più alto da una funzione compilata con un limite inferiore
il limite dello stack preferito molto probabilmente disallinea lo stack. Si raccomanda che
le librerie che utilizzano i callback utilizzano sempre l'impostazione predefinita.
Questo allineamento extra consuma spazio aggiuntivo nello stack e generalmente aumenta il codice
dimensione. Codice sensibile all'utilizzo dello spazio dello stack, come sistemi embedded e
kernel del sistema operativo, potrebbe voler ridurre l'allineamento preferito a
-preferred-stack-boundary=2.
-mmmmx
-msse
-msse2
-msse3
-mssse3
-msse4
-msse4a
-msse4.1
-msse4.2
-max
-mavx2
-mavx512f
-mavx512pf
-mavx512er
-mavx512cd
-msha
-maes
-mpclmul
-mcfushopt
-mfsgsbase
-signorrnd
-mf16c
-mfma
-mfma4
-mno-fma4
-mprefetchwt1
-mxop
-mlwp
-m3dora
-mpocnt
-mamm
-mbmi
-mbmi2
-mlzcnt
-mfxr
-mxsalva
-mxsaveopz
-mxsavec
-mxsave
-mrtm
-mtbm
-mmpx
-mmaspettax
Questi switch consentono l'uso di istruzioni in MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, AVX, AVX2, AVX512F, AVX512PF, AVX512ER, AVX512CD, SHA, AES, PCLMUL, FSGSBASE,
RDRND, F16C, FMA, SSE4A, FMA4, XOP, LWP, ABM, BMI, BMI2, FXSR, XSAVE, XSAVEOPT, LZCNT,
RTM, MPX, MWAITX o 3DNow! set di istruzioni estese. Ognuno ha un corrispondente -mno-
opzione per disabilitare l'uso di queste istruzioni.
Queste estensioni sono disponibili anche come funzioni integrate: vedere x86 Built-in funzioni,
per i dettagli delle funzioni abilitate e disabilitate da questi interruttori.
Per generare automaticamente istruzioni SSE/SSE2 da codice a virgola mobile (al contrario
a 387 istruzioni), vedere -mfpmth=sse.
GCC deprime le istruzioni SSEx quando -max viene utilizzato. Invece, genera nuovo AVX
istruzioni o equivalenza AVX per tutte le istruzioni SSEx quando necessario.
Queste opzioni consentono a GCC di utilizzare queste istruzioni estese nel codice generato, anche
senza -mfpmth=sse. Le applicazioni che eseguono il rilevamento della CPU in fase di esecuzione devono essere compilate
file separati per ogni architettura supportata, utilizzando i flag appropriati. In
in particolare, il file contenente il codice di rilevamento della CPU deve essere compilato senza
queste opzioni.
-mdump-tune-caratteristiche
Questa opzione indica a GCC di scaricare i nomi delle funzionalità di ottimizzazione delle prestazioni x86 e
impostazioni predefinite. I nomi possono essere utilizzati in -mtune-ctrl=Elenco delle caratteristiche.
-mtune-ctrl=Elenco delle caratteristiche
Questa opzione viene utilizzata per eseguire un controllo accurato delle funzionalità di generazione del codice x86.
Elenco delle caratteristiche è un elenco separato da virgole di caratteristica nomi. Guarda anche
-mdump-tune-caratteristiche. Quando specificato, il caratteristica è acceso se non è preceduto
con ^, in caso contrario, è disattivata. -mtune-ctrl=Elenco delle caratteristiche è destinato ad essere utilizzato
dagli sviluppatori GCC. Il suo utilizzo può portare a percorsi di codice non coperti dai test e può
potenzialmente causare ICE del compilatore o errori di runtime.
-mno-predefinito
Questa opzione indica a GCC di disattivare tutte le funzionalità sintonizzabili. Guarda anche
-mtune-ctrl=Elenco delle caratteristiche e -mdump-tune-caratteristiche.
-mld
Questa opzione indica a GCC di emettere un'istruzione "cld" nel prologo delle funzioni
che utilizzano istruzioni stringa. Le istruzioni delle stringhe dipendono dal flag DF da selezionare
tra modalità autoincrement o autodecrement. Mentre l'ABI specifica il flag DF su
essere cancellato all'immissione della funzione, alcuni sistemi operativi violano questa specifica non
cancellando il flag DF nei loro dispatcher di eccezioni. Il gestore delle eccezioni può essere
invocato con il flag DF impostato, che porta alla modalità di direzione sbagliata quando string
vengono utilizzate le istruzioni. Questa opzione può essere abilitata per impostazione predefinita su target x32 a 86 bit da
configurare GCC con il -Nable-CLD configurare l'opzione. Generazione di "cld"
le istruzioni possono essere soppresse con il -mno-cld opzione del compilatore in questo caso.
-mvzeroupper
Questa opzione indica a GCC di emettere un'istruzione "vzeroupper" prima di un trasferimento di
controllare il flusso fuori dalla funzione per ridurre al minimo anche la penalità di transizione da AVX a SSE
come rimuovere gli elementi intrinseci "zeroupper" non necessari.
-mprefer-avx128
Questa opzione indica a GCC di utilizzare istruzioni AVX a 128 bit invece di AVX a 256 bit
istruzioni nel vettorizzatore automatico.
-mcx16
Questa opzione consente a GCC di generare istruzioni "CMPXCHG16B". "CMPXCHG16B" consente
per operazioni atomiche su tipi di dati double quadword (o oword) a 128 bit. Questo è
utile per contatori ad alta risoluzione che possono essere aggiornati da più processori (oppure
nuclei). Questa istruzione viene generata come parte delle funzioni integrate atomiche: vedere
__sincronizzazione Builtin or __atomico Builtin per i dettagli.
-msaf
Questa opzione consente la generazione di istruzioni "SAHF" in codice a 64 bit. Intel precoce
CPU Pentium 4 con supporto Intel 64, prima dell'introduzione del passo Pentium 4 G1
nel dicembre 2005, mancavano le istruzioni "LAHF" e "SAHF" che sono supportate da
AMD64. Queste sono istruzioni di caricamento e memorizzazione, rispettivamente, per determinati flag di stato.
Nella modalità a 64 bit, l'istruzione "SAHF" viene utilizzata per ottimizzare "fmod", "drem" e
funzioni integrate "resto"; vedere Altri Builtin per i dettagli.
-Movbe
Questa opzione abilita l'uso dell'istruzione "movbe" per implementare "__builtin_bswap32"
e "__builtin_bswap64".
-mcrc32
Questa opzione abilita le funzioni integrate "__builtin_ia32_crc32qi",
"__builtin_ia32_crc32hi", "__builtin_ia32_crc32si" e "__builtin_ia32_crc32di" per
generare l'istruzione macchina "crc32".
-mrecip
Questa opzione abilita l'uso delle istruzioni "RCPSS" e "RSQRTSS" (e la loro vettorizzazione
varianti "RCPPS" e "RSQRTPS") con un ulteriore passo Newton-Raphson per aumentare
precisione invece di "DIVSS" e "SQRTSS" (e le loro varianti vettorializzate) per single-
argomenti in virgola mobile di precisione. Queste istruzioni vengono generate solo quando
-funsafe-math-ottimizzazioni è abilitato insieme a -solo matematica finita e
-fno-trapping-matematica. Si noti che mentre il throughput della sequenza è superiore a
throughput dell'istruzione non reciproca, la precisione della sequenza può essere
diminuito fino a 2 ulp (cioè l'inverso di 1.0 è uguale a 0.99999994).
Nota che GCC implementa "1.0f/sqrtf(X)" già in termini di "RSQRTSS" (o "RSQRTPS")
con -fast-matematica (o la combinazione di opzioni sopra) e non è necessario -mrecip.
Si noti inoltre che GCC emette la sequenza di cui sopra con un ulteriore passo di Newton-Raphson per
divisione vettoriale vettorizzata e "sqrtf(X)" già con -fast-matematica
(o la combinazione di opzioni sopra) e non è necessario -mrecip.
-mrecip=optare
Questa opzione controlla quali istruzioni di stima reciproche possono essere utilizzate. optare è un
elenco di opzioni separato da virgole, che può essere preceduto da a ! per invertire l'opzione:
contro tutti i Abilita tutte le istruzioni di preventivo.
difetto
Abilita le istruzioni predefinite, equivalenti a -mrecip.
nessuna
Disabilita tutte le istruzioni di stima, equivalenti a -mno-ricetta.
div Abilita l'approssimazione per la divisione scalare.
vec-div
Abilita l'approssimazione per la divisione vettorizzata.
sqrt
Abilita l'approssimazione per la radice quadrata scalare.
vec-sqrt
Abilita l'approssimazione per la radice quadrata vettorizzata.
Quindi, ad esempio, -mrecip=tutti,!sqrt consente tutte le approssimazioni reciproche,
ad eccezione della radice quadrata.
-mveclibabi=Digitare
Specifica il tipo ABI da utilizzare per vettorizzare gli elementi intrinseci utilizzando una libreria esterna.
Valori supportati per Digitare sono svml per la libreria di matematica vettoriale breve Intel e acml
per la libreria di core matematici AMD. Per utilizzare questa opzione, entrambi -ftree-vettorizzare e
-funsafe-math-ottimizzazioni devono essere abilitati e un SVML o ACML compatibile con ABI
la libreria deve essere specificata al momento del collegamento.
GCC attualmente emette chiamate a "vmldExp2", "vmldLn2", "vmldLog102", "vmldLog102",
"vmldPow2", "vmldTanh2", "vmldTan2", "vmldAtan2", "vmldAtanh2", "vmldCbrt2",
"vmldSinh2", "vmldSin2", "vmldAsinh2", "vmldAsin2", "vmldCosh2", "vmldCos2",
"vmldAcosh2", "vmldAcos2", "vmlsExp4", "vmlsLn4", "vmlsLog104", "vmlsLog104",
"vmlsPow4", "vmlsTanh4", "vmlsTan4", "vmlsAtan4", "vmlsAtanh4", "vmlsCbrt4",
"vmlsSinh4", "vmlsSin4", "vmlsAsinh4", "vmlsAsin4", "vmlsCosh4", "vmlsCos4",
"vmlsAcosh4" e "vmlsAcos4" per il tipo di funzione corrispondente quando -mveclibabi=svml is
utilizzato e "__vrd2_sin", "__vrd2_cos", "__vrd2_exp", "__vrd2_log", "__vrd2_log2",
"__vrd2_log10", "__vrs4_sinf", "__vrs4_cosf", "__vrs4_expf", "__vrs4_logf",
"__vrs4_log2f", "__vrs4_log10f" e "__vrs4_powf" per il tipo di funzione corrispondente
quando -mveclibabi=acml viene utilizzato.
-mabi=Nome
Genera codice per la convenzione di chiamata specificata. I valori consentiti sono sysv per
l'ABI usato su GNU/Linux e altri sistemi, e ms per Microsoft ABI. Il
l'impostazione predefinita è utilizzare Microsoft ABI quando si prende di mira Microsoft Windows e SysV ABI
su tutti gli altri sistemi. Puoi controllare questo comportamento per funzioni specifiche usando
gli attributi della funzione "ms_abi" e "sysv_abi".
-mtls-dialetto=Digitare
Genera codice per accedere all'archiviazione locale del thread utilizzando il gnu or gnu2 convegni. gnu
è il default conservativo; gnu2 è più efficiente, ma può aggiungere compilazione ed esecuzione
requisiti di tempo che non possono essere soddisfatti su tutti i sistemi.
-mpush-args
-mno-push-args
Utilizzare le operazioni PUSH per memorizzare i parametri in uscita. Questo metodo è più breve e di solito
altrettanto veloce del metodo che utilizza operazioni SUB/MOV ed è abilitato per impostazione predefinita. In qualche
casi disabilitarlo può migliorare le prestazioni a causa della pianificazione migliorata e ridotta
dipendenze.
-maccumulate-in-uscita-args
Se abilitato, la quantità massima di spazio richiesta per gli argomenti in uscita viene calcolata in
il prologo della funzione Questo è più veloce sulla maggior parte delle moderne CPU a causa della riduzione
dipendenze, pianificazione migliorata e utilizzo ridotto dello stack quando lo stack preferito
confine non è uguale a 2. Lo svantaggio è un notevole aumento della dimensione del codice. Questo
interruttore implica -mno-push-args.
-mthread
Supporta la gestione delle eccezioni thread-safe su MinGW. Programmi che si basano su thread-safe
la gestione delle eccezioni deve compilare e collegare tutto il codice con il -mthread opzione. quando
compilare, -mthread definisce -D_mt; quando si collega, si collega in uno speciale aiutante di thread
biblioteca -lmingwrd che pulisce i dati di gestione delle eccezioni per thread.
-mno-align-stringops
Non allineare la destinazione delle operazioni di stringa inline. Questo interruttore riduce il codice
dimensioni e migliora le prestazioni nel caso in cui la destinazione sia già allineata, ma GCC
non lo sa.
-minline-all-stringops
Per impostazione predefinita, GCC incorpora le operazioni sulle stringhe solo quando si sa che la destinazione è
allineato a un limite di almeno 4 byte. Ciò consente più inline e aumenta il codice
dimensioni, ma può migliorare le prestazioni del codice che dipende da "memcpy", "strlen" e
"memset" per brevi lunghezze.
-minline-stringops-dinamicamente
Per operazioni su stringhe di dimensioni sconosciute, utilizzare i controlli di runtime con codice in linea per piccoli
blocchi e una libreria richiedono blocchi di grandi dimensioni.
-mstringop-strategia=alg
Sostituisci l'euristica delle decisioni interne per il particolare algoritmo da utilizzare per
operazioni sulle stringhe inline. I valori consentiti per alg siamo:
rep_byte
rep_4 byte
rep_8 byte
Espandi usando il prefisso "rep" i386 della dimensione specificata.
byte_loop
loop
ciclo_srotolato
Espandi in un ciclo in linea.
libcall
Usa sempre una chiamata in biblioteca.
-strategia-mmemcpy=strategia
Sostituisci l'euristica delle decisioni interne per decidere se "__builtin_memcpy" dovrebbe essere
inline e quale algoritmo in linea utilizzare quando la dimensione prevista dell'operazione di copia
è conosciuto. strategia è un elenco separato da virgole di alg:dimensione_massima:dest_align terzine. alg
è specificato in -strategia-mstringop, dimensione_massima specifica la dimensione massima in byte con cui
algoritmo in linea alg È permesso. Per l'ultima tripletta, il dimensione_massima deve essere "-1". Il
dimensione_massima delle terzine della lista devono essere specificate in ordine crescente. Il
dimensione minima in byte per alg è 0 per la prima terzina e "dimensione_massima + 1" di
intervallo precedente.
-mmemset-strategia=strategia
L'opzione è simile a -strategia-mmemcpy= tranne che è per controllare
Espansione "__builtin_memset".
-puntatore-cornice-foglia-momit
Non tenere il puntatore a frame in un registro per le funzioni foglia. Questo evita il
istruzioni per salvare, impostare e ripristinare i puntatori dei frame e creare un registro aggiuntivo
disponibile nelle funzioni foglia. L'opzione -puntatore-cornice-fomit rimuove il telaio
puntatore per le funzioni foglia, che potrebbe rendere più difficile il debug.
-mtls-seg-diretta-arbitri
-mno-tls-direct-seg-refs
Controlla se è possibile accedere alle variabili TLS con offset dal segmento TLS
register (%gs per 32 bit, %fs per 64 bit) o se il puntatore di base del thread deve essere
aggiunto. Se questo è valido o meno dipende dal sistema operativo e dal fatto che
mappa il segmento per coprire l'intera area TLS.
Per i sistemi che utilizzano la libreria GNU C, l'impostazione predefinita è attiva.
-msse2avx
-mno-sse2avx
Specificare che l'assemblatore deve codificare le istruzioni SSE con il prefisso VEX. L'opzione
-max lo attiva per impostazione predefinita.
-mfentry
-mno-fentry
Se è attiva la profilazione (-pag), anteporre al prologo la controchiamata di profilazione.
Nota: sulle architetture x86 l'attributo "ms_hook_prologue" non è possibile alla
momento per -mfentry e -pag.
-mrecord-mcount
-Mno-record-MCOUNT
Se è attiva la profilazione (-pag), genera una sezione __mcount_loc che contiene puntatori
ad ogni chiamata di profilazione. Ciò è utile per l'assegnazione e l'uscita automatica delle chiamate.
-mnop-mcount
-mno-nop-mcount
Se è attiva la profilazione (-pag), genera le chiamate alle funzioni di profilatura come nops.
Questo è utile quando dovrebbero essere patchati in un secondo momento in modo dinamico. Questo è probabilmente solo
utile insieme a -mrecord-mcount.
-mskip-rax-setup
-mno-skip-rax-setup
Quando si genera codice per l'architettura x86-64 con estensioni SSE disabilitate,
-skip-rax-configurazione può essere usato per saltare l'impostazione del registro RAX quando non ci sono variabili
argomenti passati nei registri vettoriali.
Attenzione: Poiché il registro RAX viene utilizzato per evitare di salvare inutilmente i registri vettoriali su
stack quando si passano argomenti variabili, l'impatto di questa opzione è che i chiamati possono
sprecare spazio nello stack, comportarsi male o saltare in una posizione casuale. GCC 4.4 o successivo
non hanno questi problemi, indipendentemente dal valore del registro RAX.
-m8bit-idiv
-mno-8bit-idiv
Su alcuni processori, come Intel Atom, il divisore intero senza segno a 8 bit è molto più veloce di
Divisione intera a 32/64 bit. Questa opzione genera un controllo in fase di esecuzione. Se entrambi
dividendo e divisore sono compresi nell'intervallo da 0 a 255, la divisione intera senza segno a 8 bit è
utilizzato al posto della divisione intera a 32/64 bit.
-mavx256-split-carico non allineato
-mavx256-split-negozio-non-allineato
Caricamento e archiviazione non allineati AVX a 32 byte suddivisi.
-mstack-protezione-guardia=guardia
Genera codice di protezione dello stack utilizzando canary at guardia. Le posizioni supportate sono globale
per canarino globale o tls per canary per thread nel blocco TLS (impostazione predefinita). Questo
l'opzione ha effetto solo quando -fstack-protettore or -fstack-protettore-tutto è specificato.
Alcuni degli -m gli switch sono supportati in aggiunta a quanto sopra sui processori x86-64 a 64 bit
ambienti.
-M32
-M64
-mx32
-M16
Genera codice per un ambiente a 16, 32 o 64 bit. Il -M32 set di opzioni "int",
"long" e il puntatore digita a 32 bit e genera codice che viene eseguito su qualsiasi sistema i386.
Le -M64 l'opzione imposta "int" a 32 bit e "long" e i tipi di puntatore a 64 bit e
genera codice per l'architettura x86-64. Per Darwin solo il -M64 opzione anche
spegne il -fno-foto e -mdynamic-no-pic opzioni.
Le -mx32 opzione imposta "int", "long" e tipi di puntatore a 32 bit e genera codice
per l'architettura x86-64.
Le -M16 l'opzione è la stessa di -M32, tranne per il fatto che emette ".code16gcc"
direttiva assembly all'inizio dell'output dell'assembly in modo che il binario possa essere eseguito
in modalità a 16 bit.
-mno-zona-rossa
Non utilizzare una cosiddetta "zona rossa" per il codice x86-64. La zona rossa è ordinata dal
x86-64 ABI; è un'area di 128 byte oltre la posizione del puntatore dello stack che non lo è
modificato da gestori di segnale o interrupt e quindi può essere utilizzato per dati temporanei
senza regolare il puntatore dello stack. La bandiera -mno-zona-rossa disabilita questa zona rossa.
-mcmodel=piccolo
Genera codice per il modello a codice piccolo: il programma e i suoi simboli devono essere collegati in
i 2 GB inferiori dello spazio degli indirizzi. I puntatori sono a 64 bit. I programmi possono essere
collegati staticamente o dinamicamente. Questo è il modello di codice predefinito.
-McModel = kernel
Genera codice per il modello di codice del kernel. Il kernel gira nei 2 GB negativi del
spazio degli indirizzi. Questo modello deve essere utilizzato per il codice del kernel Linux.
-mcmodel=medio
Genera codice per il modello medio: il programma è collegato nei 2 GB inferiori del
spazio degli indirizzi. Ci sono anche piccoli simboli. Simboli con dimensioni maggiori di
-mlarge-data-soglia vengono inseriti in grandi sezioni di dati o BSS e possono essere localizzati
superiore a 2 GB. I programmi possono essere collegati staticamente o dinamicamente.
-mcmodel=grande
Genera codice per il modello di grandi dimensioni. Questo modello non fa ipotesi sugli indirizzi
e dimensioni delle sezioni.
-maddress-mode=lungo
Genera codice per la modalità indirizzo lungo. Questo è supportato solo per 64 bit e x32
ambienti. È la modalità di indirizzo predefinita per gli ambienti a 64 bit.
-maddress-mode=corto
Genera codice per la modalità indirizzo breve. Questo è supportato solo per 32 bit e x32
ambienti. È la modalità di indirizzo predefinita per gli ambienti a 32 bit e x32.
x86 Windows Opzioni
Queste opzioni aggiuntive sono disponibili per le destinazioni Microsoft Windows:
-mconsole
Questa opzione specifica che deve essere generata un'applicazione console, indicando
il linker per impostare il tipo di sottosistema di intestazione PE richiesto per le applicazioni console.
Questa opzione è disponibile per i target Cygwin e MinGW ed è abilitata per impostazione predefinita su
quegli obiettivi.
-mdll
Questa opzione è disponibile per i target Cygwin e MinGW. Specifica che una DLL --- a
libreria di collegamento dinamico---deve essere generata, consentendo la selezione della richiesta
oggetto di avvio runtime e punto di ingresso.
-mnop-fun-dllimport
Questa opzione è disponibile per i target Cygwin e MinGW. Specifica che il
L'attributo "dllimport" dovrebbe essere ignorato.
-mthread
Questa opzione è disponibile per i target MinGW. Specifica quel thread specifico di MinGW
supporto deve essere utilizzato.
-municodice
Questa opzione è disponibile per i target MinGW-w64. Causa il preprocessore "UNICODE"
macro da definire predefinita e sceglie il codice di avvio del runtime compatibile con Unicode.
-mwin32
Questa opzione è disponibile per i target Cygwin e MinGW. Si specifica che il tipico
Le macro predefinite di Microsoft Windows devono essere impostate nel preprocessore, ma non lo fanno
influenzare la scelta della libreria di runtime/codice di avvio.
-mfinestre
Questa opzione è disponibile per i target Cygwin e MinGW. Specifica che una GUI
l'applicazione deve essere generata indicando al linker di impostare l'intestazione PE
tipo di sottosistema in modo appropriato.
-fno-set-stack-eseguibile
Questa opzione è disponibile per i target MinGW. Specifica che il flag eseguibile per
lo stack utilizzato dalle funzioni annidate non è impostato. Questo è necessario per i binari in esecuzione
in modalità kernel di Microsoft Windows, poiché c'è l'API User32, che viene utilizzata per impostare
privilegi eseguibili, non è disponibile.
-fwritable-relocated-rdata
Questa opzione è disponibile per i target MinGW e Cygwin. Si specifica che trasferito-
i dati nella sezione di sola lettura vengono inseriti nella sezione .data. Questo è necessario per i più anziani
runtime che non supportano la modifica delle sezioni .rdata per la pseudo-rilocazione.
-mpe-allineato-comuni
Questa opzione è disponibile per i target Cygwin e MinGW. Specifica che GNU
estensione al formato file PE che permette il corretto allineamento delle variabili COMUNI
dovrebbe essere usato durante la generazione del codice. È abilitato per impostazione predefinita se GCC rileva che il
l'assemblatore di destinazione trovato durante la configurazione supporta la funzionalità.
Vedi anche sotto x86 Opzioni per le opzioni standard.
Xstormy16 Opzioni
Queste opzioni sono definite per Xstormy16:
-msim
Scegli i file di avvio e lo script del linker adatti al simulatore.
Xtensa Opzioni
Queste opzioni sono supportate per i target Xtensa:
-mconst16
-mno-const16
Abilitare o disabilitare l'uso delle istruzioni "CONST16" per il caricamento di valori costanti. Il
L'istruzione "CONST16" non è attualmente un'opzione standard di Tensilica. quando
abilitate, le istruzioni "CONST16" vengono sempre utilizzate al posto dello standard "L32R"
Istruzioni. L'uso di "CONST16" è abilitato di default solo se il "L32R"
l'istruzione non è disponibile.
-mfuso-pazzo
-mno-fuso-madd
Abilitare o disabilitare l'uso delle istruzioni di moltiplicazione/aggiunta e moltiplicazione/sottrazione fuse nel
opzione in virgola mobile. Questo non ha effetto se non lo è anche l'opzione a virgola mobile
abilitato. La disabilitazione delle istruzioni di moltiplicazione/aggiunta e moltiplicazione/sottrazione fuse forza il
compilatore per utilizzare istruzioni separate per le operazioni di moltiplicazione e addizione/sottrazione.
Ciò può essere auspicabile in alcuni casi in cui i risultati rigorosi conformi a IEEE 754 sono
richiesto: le istruzioni di addizione/sottrazione di moltiplicazione fuse non arrotondano l'intermedio
risultato, producendo così risultati con Scopri di più bit di precisione rispetto a quanto specificato dal
Norma IEEE. La disabilitazione delle istruzioni di aggiunta/sottrazione di moltiplicazione fuse assicura anche che
l'output del programma non è sensibile alla capacità del compilatore di combinare moltiplicare e
operazioni di addizione/sottrazione.
-mserializzare-volatile
-mno-serializza-volatile
Quando questa opzione è abilitata, GCC inserisce le istruzioni "MEMW" prima della memoria "volatile"
riferimenti per garantire la coerenza sequenziale. L'impostazione predefinita è -mserializzare-volatile.
Usa il -mno-serializza-volatile per omettere le istruzioni "MEMW".
-mforce-nessuna-immagine
Per obiettivi, come GNU/Linux, dove tutto il codice Xtensa in modalità utente deve essere posizionato
codice indipendente (PIC), questa opzione disabilita il PIC per la compilazione del codice del kernel.
-mtext-sezione-letterali
-mno-testo-sezione-letterali
Queste opzioni controllano il trattamento dei pool letterali. L'impostazione predefinita è
-mno-testo-sezione-letterali, che posiziona i letterali in una sezione separata nell'output
file. Ciò consente di posizionare il pool letterale in una RAM/ROM di dati e consente anche
il linker per combinare pool letterali da file oggetto separati per rimuovere ridondanti
letterali e migliorare la dimensione del codice. Insieme a -mtext-sezione-letterali, i letterali sono
intercalati nella sezione di testo in modo da tenerli il più vicino possibile alla loro
Riferimenti. Ciò potrebbe essere necessario per file di assiemi di grandi dimensioni.
-mtarget-align
-mno-target-align
Quando questa opzione è abilitata, GCC ordina all'assemblatore di allinearsi automaticamente
istruzioni per ridurre le sanzioni per le filiali a scapito di una certa densità di codice. Il
assemblatore tenta di ampliare le istruzioni di densità per allineare gli obiettivi del ramo e il
istruzioni seguendo le istruzioni di chiamata. Se non ci sono abbastanza precedenti sicuri
istruzioni di densità per allineare un target, non viene eseguito alcun allargamento. L'impostazione predefinita è
-mtarget-align. Queste opzioni non influiscono sul trattamento dell'auto-allineato
istruzioni come "LOOP", che l'assemblatore allinea sempre, sia allargando
istruzioni sulla densità o inserendo istruzioni NOP.
-chiamate lunghe
-mno-chiamate lunghe
Quando questa opzione è abilitata, GCC indica all'assemblatore di tradurre le chiamate dirette a
chiamate indirette a meno che non riesca a determinare che l'obiettivo di una chiamata diretta è nel
intervallo consentito dall'istruzione di chiamata. Questa traduzione si verifica in genere per le chiamate a
funzioni in altri file sorgente. In particolare, l'assemblatore traduce un direct
Istruzione "CALL" in un "L32R" seguito da un'istruzione "CALLX". L'impostazione predefinita è
-mno-chiamate lunghe. Questa opzione dovrebbe essere utilizzata nei programmi in cui il destinatario della chiamata può
essere potenzialmente fuori portata. Questa opzione è implementata nell'assemblatore, non nel
compilatore, quindi il codice assembly generato da GCC mostra ancora la chiamata diretta
istruzioni---guardare il codice oggetto disassemblato per vedere le istruzioni effettive.
Nota che l'assemblatore usa una chiamata indiretta per ogni chiamata tra file, non solo
quelli che sono veramente fuori portata.
zSerie Opzioni
Questi sono elencati sotto
Opzioni per Code Generazione convenzioni
Queste opzioni indipendenti dalla macchina controllano le convenzioni di interfaccia utilizzate nel codice
generazione.
La maggior parte di loro ha forme sia positive che negative; la forma negativa di -foo is
-fno-pippo. Nella tabella sottostante è elencata solo una delle forme --- quella che non è la
predefinito. Puoi capire l'altra forma rimuovendo no- o aggiungendolo.
-fbounds-check
Per i front-end che lo supportano, genera codice aggiuntivo per verificare che gli indici utilizzati per
gli array di accesso rientrano nell'intervallo dichiarato. Questo è attualmente supportato solo da
Front-end Java e Fortran, dove questa opzione è impostata per impostazione predefinita su true e false
rispettivamente.
-fstack-riutilizzo=livello di riutilizzo
Questa opzione controlla il riutilizzo dello spazio dello stack per le variabili locali/auto dichiarate dall'utente e
temporanei generati dal compilatore. livello_riuso può essere contro tutti i, nome_vars, o nessuna. contro tutti i
consente il riutilizzo dello stack per tutte le variabili locali e i temporanei, nome_vars abilita il
riutilizzare solo per variabili locali definite dall'utente con nomi, e nessuna disabilita il riutilizzo dello stack
completamente. Il valore predefinito è contro tutti i. L'opzione è necessaria quando il programma si estende
la durata di una variabile locale con scope o di un compilatore generato temporaneamente oltre il
punto finale definito dalla lingua. Quando la durata di una variabile termina e se il
la variabile vive in memoria, il compilatore di ottimizzazione ha la libertà di riutilizzare il suo stack
spazio con altri temporanei o variabili locali con scope il cui intervallo live non lo fa
sovrapporsi ad esso. È probabile che il codice legacy che estende la durata locale si rompa con il
ottimizzazione del riutilizzo dello stack.
Per esempio,
int * p;
{
int locale1;
p = &local1;
locale1 = 10;
....
}
{
int locale2;
locale2 = 20;
...
}
if (*p == 10) // fuori ambito uso di local1
{
}
Un altro esempio:
struttura A
{
A(int k): i(k), j(k) { }
int i;
intj;
};
Un *ap;
void foo (const A& ar)
{
ap = &ar;
}
barra vuota()
{
pippo (A(10)); // la durata dell'oggetto temp termina quando ritorna pippo
{
A a(20);
....
}
ap->i+= 10; // ap fa riferimento al di fuori dell'ambito temp il cui spazio
// viene riutilizzato con a. Qual è il valore di ap->i?
}
La durata di un compilatore generato temporaneamente è ben definita dallo standard C++.
Quando una vita di un temporaneo finisce, e se il temporaneo vive nella memoria, il
il compilatore di ottimizzazione ha la libertà di riutilizzare il suo spazio di stack con altri temporanei o
variabili locali con scope il cui intervallo live non si sovrappone ad esso. Tuttavia alcuni dei
il codice legacy si basa sul comportamento dei compilatori più vecchi in cui si accumulano i temporanei
lo spazio non viene riutilizzato, il riutilizzo aggressivo dello stack può portare a errori di runtime. Questo
L'opzione viene utilizzata per controllare l'ottimizzazione del riutilizzo dello stack temporaneo.
-ftrapv
Questa opzione genera trap per overflow con segno su addizione, sottrazione,
operazioni di moltiplicazione.
-fwrapv
Questa opzione indica al compilatore di assumere che l'overflow aritmetico con segno di
addizione, sottrazione e moltiplicazione si avvolgono usando il complemento a due
rappresentazione. Questo flag abilita alcune ottimizzazioni e ne disabilita altre. Questo
l'opzione è abilitata per impostazione predefinita per il front-end Java, come richiesto dal linguaggio Java
specificazione.
-feccezioni
Abilita la gestione delle eccezioni. Genera codice aggiuntivo necessario per propagare le eccezioni. Per
alcuni obiettivi, questo implica che GCC genera informazioni di srotolamento del frame per tutte le funzioni,
che può produrre un sovraccarico di dimensioni significative dei dati, sebbene non influisca
esecuzione. Se non specifichi questa opzione, GCC la abilita per impostazione predefinita per le lingue
come C++ che normalmente richiede la gestione delle eccezioni e lo disabilita per linguaggi come
C che normalmente non lo richiedono. Tuttavia, potrebbe essere necessario abilitare questa opzione quando
compilare codice C che deve interagire correttamente con i gestori di eccezioni scritti
in C++. Potresti anche voler disabilitare questa opzione se stai compilando un vecchio C++
programmi che non utilizzano la gestione delle eccezioni.
-fnon-chiamata-eccezioni
Genera codice che consente alle istruzioni di trapping di generare eccezioni. Nota che questo
richiede un supporto runtime specifico della piattaforma che non esiste ovunque. Inoltre,
permette solo intrappolando istruzioni per lanciare eccezioni, ad esempio riferimenti alla memoria o
istruzioni in virgola mobile. Non consente di generare eccezioni da arbitrari
gestori di segnale come "SIGALRM".
-fdelete-dead-eccezioni
Considera che le istruzioni che possono generare eccezioni ma non contribuiscono in altro modo a
l'esecuzione del programma può essere ottimizzata. Questa opzione è abilitata per impostazione predefinita
per il front-end Ada, come consentito dalla specifica del linguaggio Ada. Ottimizzazione
i passaggi che causano la rimozione delle eccezioni non valide sono abilitati in modo indipendente in diversi
livelli di ottimizzazione.
-funwind-tavoli
Simile a -feccezioni, tranne per il fatto che genera solo i dati statici necessari, ma
non influisce in nessun altro modo sul codice generato. Normalmente non è necessario
abilitare questa opzione; invece, un processore di linguaggio che ha bisogno di questa gestione lo abilita
a vostro nome.
-tabelle-svolgimento-fasincrono
Genera tabella di svolgimento in formato DWARF 2, se supportato dalla macchina di destinazione. Il tavolo è
esatto in corrispondenza di ogni confine di istruzione, quindi può essere utilizzato per lo srotolamento della pila da
eventi asincroni (come debugger o Garbage Collector).
-fno-gnu-unico
Sui sistemi con assembler GNU recenti e libreria C, il compilatore C++ usa il
Associazione "STB_GNU_UNIQUE" per assicurarsi che le definizioni dei membri dei dati statici del modello
e le variabili locali statiche nelle funzioni inline sono uniche anche in presenza di
"RTLD_LOCAL"; questo è necessario per evitare problemi con una libreria utilizzata da due differenti
Plugin "RTLD_LOCAL" a seconda di una definizione in uno di essi e quindi
in disaccordo con l'altro circa il legame del simbolo. Ma questo causa
"dlclose" da ignorare per i DSO interessati; se il tuo programma si basa sulla reinizializzazione
di un DSO tramite "dlclose" e "dlopen", puoi usare -fno-gnu-unico.
-fpcc-struct-ritorno
Restituisce i valori "short" "struct" e "union" in memoria come quelli più lunghi, anziché in
registri. Questa convenzione è meno efficiente, ma ha il vantaggio di consentire
intercalabilità tra file compilati con GCC e file compilati con altri compilatori,
in particolare il compilatore C portatile (pcc).
La convenzione precisa per restituire le strutture in memoria dipende dal target
macro di configurazione.
Le strutture corte e le unioni sono quelle la cui dimensione e allineamento corrispondono a quelle di alcuni
tipo intero.
Attenzione: codice compilato con il -fpcc-struct-ritorno l'interruttore non è compatibile con il binario
con codice compilato con il -freg-struct-ritorno interruttore. Usalo per conformarti a un non-
interfaccia binaria dell'applicazione predefinita.
-freg-struct-ritorno
Restituire i valori "struct" e "union" nei registri quando possibile. Questo è più efficiente
per piccole strutture di -fpcc-struct-ritorno.
Se non specifichi nessuno dei due -fpcc-struct-ritorno né -freg-struct-ritorno, il valore predefinito di GCC è
qualunque sia la convenzione standard per il target. Se non esiste una convenzione standard,
L'impostazione predefinita di GCC è -fpcc-struct-ritorno, ad eccezione di obiettivi in cui GCC è il principale
compilatore. In questi casi, possiamo scegliere lo standard e abbiamo scelto il più efficiente
registro restituzione alternativa.
Attenzione: codice compilato con il -freg-struct-ritorno l'interruttore non è compatibile con il binario
con codice compilato con il -fpcc-struct-ritorno interruttore. Usalo per conformarti a un non-
interfaccia binaria dell'applicazione predefinita.
-fshort-enum
Assegna a un tipo "enum" solo il numero di byte necessario per l'intervallo dichiarato di
valori possibili. In particolare, il tipo "enum" è equivalente al numero intero più piccolo
tipo che ha abbastanza spazio.
Attenzione: , il -fshort-enum switch fa sì che GCC generi codice non binario
compatibile con il codice generato senza quell'interruttore. Usalo per conformarti a un non-
interfaccia binaria dell'applicazione predefinita.
-fshort-doppio
Usa la stessa dimensione per "doppio" e per "float".
Attenzione: , il -fshort-doppio switch fa sì che GCC generi codice non binario
compatibile con il codice generato senza quell'interruttore. Usalo per conformarti a un non-
interfaccia binaria dell'applicazione predefinita.
-fshort-wchar
Sostituisci il tipo sottostante per "wchar_t" in modo che sia "short unsigned int" invece di
predefinito per la destinazione. Questa opzione è utile per creare programmi da eseguire sotto
VINO.
Attenzione: , il -fshort-wchar switch fa sì che GCC generi codice non binario
compatibile con il codice generato senza quell'interruttore. Usalo per conformarti a un non-
interfaccia binaria dell'applicazione predefinita.
-fno-comune
Nel codice C, controlla il posizionamento delle variabili globali non inizializzate. Compilatori C Unix
hanno tradizionalmente consentito definizioni multiple di tali variabili in differenti
unità di compilazione inserendo le variabili in un blocco comune. Questo è il comportamento
specificato da -fcomune, ed è l'impostazione predefinita per GCC sulla maggior parte dei target. D'altra parte,
questo comportamento non è richiesto da ISO C, e su alcuni obiettivi può portare una velocità o un codice
penalità dimensionale su referenze variabili. Il -fno-comune opzione specifica che il
il compilatore dovrebbe posizionare variabili globali non inizializzate nella sezione dati dell'oggetto
file, piuttosto che generarli come blocchi comuni. Questo ha l'effetto che se il
stessa variabile è dichiarata (senza "extern") in due diverse compilazioni, ottieni un
errore di definizione multipla quando li colleghi. In questo caso, devi compilare con
-fcomune Invece. Compilando con -fno-comune è utile su obiettivi per i quali è
fornisce prestazioni migliori, o se si desidera verificare che il programma funzioni su
altri sistemi che trattano sempre in questo modo le dichiarazioni di variabili non inizializzate.
-fno-identificatore
Ignora la direttiva "#ident".
-direttiva-dimensione-finhibit
Non emettere una direttiva assembler ".size" o qualsiasi altra cosa che possa causare problemi
se la funzione è divisa a metà e le due metà sono posizionate in posizioni lontane
a parte nella memoria. Questa opzione viene utilizzata durante la compilazione crtstuff.c; non dovresti aver bisogno
usarlo per qualsiasi altra cosa.
-fverboso-asm
Inserisci ulteriori informazioni di commento nel codice di assemblaggio generato per renderlo di più
leggibile. Questa opzione è generalmente utile solo a coloro che hanno effettivamente bisogno di leggere il
codice assembly generato (forse durante il debug del compilatore stesso).
-fno-verboso-asm, l'impostazione predefinita, fa sì che le informazioni aggiuntive vengano omesse ed è
utile quando si confrontano due file assembler.
-interruttori frecord-gcc
Questa opzione fa sì che la riga di comando utilizzata per invocare il compilatore venga registrata in
il file oggetto che si sta creando. Questo interruttore è implementato solo su alcuni
target e il formato esatto della registrazione è target e formato file binario
dipendente, ma di solito assume la forma di una sezione contenente testo ASCII. Questo
l'interruttore è legato al -fverboso-asm interruttore, ma quell'interruttore registra solo
informazioni nel file di output dell'assemblatore come commenti, quindi non raggiunge mai l'oggetto
file. Guarda anche -grecord-gcc-switch per un altro modo di memorizzare le opzioni del compilatore in
il file oggetto.
-fpic
Genera codice indipendente dalla posizione (PIC) adatto per l'uso in una libreria condivisa, se
supportato per la macchina di destinazione. Tale codice accede a tutti gli indirizzi costanti tramite a
tabella di offset globale (GOT). Il caricatore dinamico risolve le voci GOT quando il
si avvia il programma (il caricatore dinamico non fa parte di GCC; fa parte del programma operativo
sistema). Se la dimensione GOT per l'eseguibile collegato supera un massimo specifico per la macchina
size, ricevi un messaggio di errore dal linker che indica che -fpic non funziona; in
quel caso, ricompila con -fPIC Invece. (Questi massimi sono 8k su SPARC e 32k
su m68k e RS/6000. L'x86 non ha tale limite.)
Il codice indipendente dalla posizione richiede un supporto speciale e quindi funziona solo su
determinate macchine. Per l'x86, GCC supporta PIC per System V ma non per Sun
386i. Il codice generato per IBM RS/6000 è sempre indipendente dalla posizione.
Quando questo flag è impostato, le macro "__pic__" e "__PIC__" sono definite a 1.
-fPIC
Se supportato per la macchina di destinazione, emette codice indipendente dalla posizione, adatto per
collegamento dinamico ed evitando qualsiasi limite alla dimensione della tabella di offset globale. Questo
fa la differenza su m68k, PowerPC e SPARC.
Il codice indipendente dalla posizione richiede un supporto speciale e quindi funziona solo su
determinate macchine.
Quando questo flag è impostato, le macro "__pic__" e "__PIC__" sono definite a 2.
-fpie
-fPIE
Queste opzioni sono simili a -fpic e -fPIC, ma ha generato un codice indipendente dalla posizione
può essere collegato solo in eseguibili. Di solito queste opzioni vengono utilizzate quando -torta GCC
l'opzione viene utilizzata durante il collegamento.
-fpie e -fPIE entrambi definiscono le macro "__pie__" e "__PIE__". Le macro hanno il
valore 1 per -fpie e 2 per -fPIE.
-fno-salto-tabelle
Non utilizzare le tabelle di salto per le istruzioni switch anche dove sarebbe più efficiente
rispetto ad altre strategie di generazione del codice. Questa opzione è utile in combinazione con
-fpic or -fPIC per il codice di costruzione che fa parte di un linker dinamico e non può
fare riferimento all'indirizzo di una tabella di salto. Su alcuni bersagli, le tabelle di salto non richiedono a
GOT e questa opzione non è necessaria.
-fissa-reg
Trattare il registro denominato reg come registro fisso; il codice generato non dovrebbe mai fare riferimento a
it (tranne forse come puntatore stack, puntatore frame o in qualche altro ruolo fisso).
reg deve essere il nome di un registro. I nomi dei registri accettati sono specifici della macchina
e sono definiti nella macro "REGISTER_NAMES" nel file macro di descrizione della macchina.
Questo flag non ha una forma negativa, perché specifica una scelta a tre vie.
-fcall-usato-reg
Trattare il registro denominato reg come un registro allocabile che è bloccato dalla funzione
chiamate. Può essere assegnato per temporanei o variabili che non vivono attraverso a
chiamata. Le funzioni compilate in questo modo non salvano e ripristinano il registro reg.
È un errore utilizzare questo flag con il puntatore frame o stack. Uso di questo
flag per altri registri che hanno ruoli pervasivi fissi nell'esecuzione della macchina
modello produce risultati disastrosi.
Questo flag non ha una forma negativa, perché specifica una scelta a tre vie.
-fcall-salvato-reg
Trattare il registro denominato reg come registro allocabile salvato dalle funzioni. Può essere
allocato anche per temporanei o variabili che vivono attraverso una chiamata. Funzioni
compilato in questo modo salva e ripristina il registro reg se lo usano.
È un errore utilizzare questo flag con il puntatore frame o stack. Uso di questo
flag per altri registri che hanno ruoli pervasivi fissi nell'esecuzione della macchina
modello produce risultati disastrosi.
Un diverso tipo di disastro risulta dall'uso di questo flag per un registro in cui
i valori delle funzioni possono essere restituiti.
Questo flag non ha una forma negativa, perché specifica una scelta a tre vie.
-fpack-struttura[=n]
Senza un valore specificato, compattare insieme tutti i membri della struttura senza fori. Quando un
viene specificato il valore (che deve essere una piccola potenza di due), i membri della struttura del pacchetto
secondo questo valore, che rappresenta il massimo allineamento (cioè oggetti con
i requisiti di allineamento predefiniti maggiori di questo vengono emessi potenzialmente non allineati a
la prossima posizione di montaggio.
Attenzione: , il -fpack-struttura switch fa sì che GCC generi codice non binario
compatibile con il codice generato senza quell'interruttore. Inoltre, rende il codice
subottimale. Usalo per conformarti a un'interfaccia binaria dell'applicazione non predefinita.
-funzioni-strumento
Genera chiamate di strumentazione per l'ingresso e l'uscita dalle funzioni. Subito dopo la funzione
entry e appena prima dell'uscita dalla funzione, vengono chiamate le seguenti funzioni di profilatura con
l'indirizzo della funzione corrente e il suo sito di chiamata. (Su alcune piattaforme,
"__builtin_return_address" non funziona oltre la funzione corrente, quindi il sito di chiamata
altrimenti le informazioni potrebbero non essere disponibili per le funzioni di profilazione.)
void __cyg_profile_func_enter (void *this_fn,
void *chiama_sito);
void __cyg_profile_func_exit (void *this_fn,
void *chiama_sito);
Il primo argomento è l'indirizzo di inizio della funzione corrente, che può essere
cercato esattamente nella tabella dei simboli.
Questa strumentazione viene eseguita anche per le funzioni espanse in linea in altre funzioni.
Le chiamate di profilazione indicano dove, concettualmente, viene inserita la funzione inline e
uscito. Ciò significa che devono essere disponibili versioni indirizzabili di tali funzioni. Se
tutti i tuoi usi di una funzione sono espansi in linea, questo potrebbe significare un'espansione aggiuntiva
della dimensione del codice. Se usi "extern inline" nel tuo codice C, una versione indirizzabile di
tali funzioni devono essere fornite. (Questo è normalmente il caso comunque, ma se ottieni
fortunato e l'ottimizzatore espande sempre le funzioni in linea, potresti aver ottenuto
via senza fornire copie statiche.)
A una funzione può essere assegnato l'attributo "no_instrument_function", nel qual caso questo
la strumentazione non viene eseguita. Questo può essere utilizzato, ad esempio, per la profilazione
funzioni elencate sopra, routine di interrupt ad alta priorità e qualsiasi funzione da cui
le funzioni di profilazione non possono essere chiamate con sicurezza (forse gestori di segnale, se il
le routine di profilazione generano output o allocano memoria).
-funzioni-strumento-escludi-elenco-file=filetto,filetto, ...
Imposta la lista delle funzioni escluse dalla strumentazione (vedi descrizione
of -funzioni-strumento). Se il file che contiene una definizione di funzione corrisponde
con uno di filetto, allora quella funzione non è strumentata. La partita è finita
sottostringhe: se il filetto parametro è una sottostringa del nome del file, è considerato
essere una partita.
Per esempio:
-finstrument-functions-exclude-file-list=/bits/stl,include/sys
esclude qualsiasi funzione in linea definita nei file i cui percorsi contengono /bit/stl or
includi/sys.
Se, per qualche motivo, vuoi includere la lettera , in uno dei sym, Scrivi ,. Per esempio,
-finstrument-functions-exclude-file-list=',,tmp' (notare la singola citazione che circonda
l'opzione).
-funzioni-strumento-exclude-function-list=sym,sym, ...
Questo è simile a -funzioni-strumento-escludi-elenco-file, ma questa opzione imposta il
elenco dei nomi delle funzioni da escludere dalla strumentazione. Il nome della funzione da essere
abbinato è il suo nome visibile dall'utente, come "vettore bla (vettore costante &)", non
il nome alterato interno (ad esempio, "_Z4blahRSt6vectorIiSaIiEE"). La partita è finita
sottostringhe: se il sym parametro è una sottostringa del nome della funzione, è considerato
essere una partita. Per gli identificatori estesi C99 e C++, è necessario fornire il nome della funzione
in UTF-8, non utilizzando nomi di caratteri universali.
-fstack-controllo
Genera codice per verificare di non oltrepassare il limite dello stack. Voi
dovrebbe specificare questo flag se si esegue in un ambiente con più thread,
ma solo raramente è necessario specificarlo in un ambiente a thread singolo poiché stack
l'overflow viene rilevato automaticamente su quasi tutti i sistemi se è presente un solo stack.
Si noti che questa opzione non provoca effettivamente l'esecuzione del controllo; l'operativo
il sistema o il runtime del linguaggio devono farlo. L'interruttore fa sì che la generazione del codice
assicurarsi che vedano lo stack in fase di estensione.
È inoltre possibile specificare un parametro stringa: no significa nessun controllo, generico si intende
forzare l'uso del controllo vecchio stile, specifico significa utilizzare il miglior metodo di controllo e
è equivalente a nudo -fstack-controllo.
Il controllo vecchio stile è un meccanismo generico che non richiede un supporto specifico per il target in
il compilatore ma presenta i seguenti inconvenienti:
1. Strategia di allocazione modificata per oggetti di grandi dimensioni: vengono sempre allocati
dinamicamente se la loro dimensione supera una soglia fissa.
2. Limite fisso alla dimensione della cornice statica delle funzioni: quando è sormontata da a
funzione particolare, il controllo dello stack non è affidabile e viene emesso un avviso dal
compilatore.
3. Inefficienza: a causa sia della strategia di allocazione modificata che del generico
implementazione, le prestazioni del codice sono ostacolate.
Nota che il controllo dello stack vecchio stile è anche il metodo di fallback per specifico se no
il supporto per il target è stato aggiunto nel compilatore.
-fstack-limite-register=reg
-fstack-limit-simbolo=sym
-fno-stack-limite
Genera codice per assicurarti che lo stack non cresca oltre un certo valore
il valore di un registro o l'indirizzo di un simbolo. Se è necessario uno stack più grande, a
il segnale viene generato in fase di esecuzione. Per la maggior parte dei bersagli, il segnale viene alzato prima dello stack
oltrepassa il confine, quindi è possibile catturare il segnale senza prendere speciali
precauzioni.
Ad esempio, se lo stack inizia all'indirizzo assoluto 0x80000000 e cresce verso il basso,
puoi usare le bandiere -fstack-limit-symbol=__limite_stack e
-Wl, --defsym,__stack_limit=0x7ffe0000 per imporre un limite di stack di 128 KB. Notare che
questo può funzionare solo con il linker GNU.
-fsplit-stack
Genera codice per dividere automaticamente lo stack prima che trabocchi. Il risultato
il programma ha uno stack discontinuo che può traboccare solo se il programma non è in grado di farlo
allocare altra memoria. Questo è molto utile quando si eseguono programmi con thread, in quanto
non è più necessario calcolare una buona dimensione dello stack da utilizzare per ogni thread. Questo è
attualmente implementato solo per i target x86 che eseguono GNU/Linux.
Quando il codice viene compilato con -fsplit-stack chiama il codice compilato senza -fsplit-stack, Là
potrebbe non esserci molto spazio nello stack disponibile per l'esecuzione di quest'ultimo codice. Se stai compilando tutto
codice, compreso il codice della libreria, con -fsplit-stack non è un'opzione, quindi il linker può
correggere queste chiamate in modo che il codice venga compilato senza -fsplit-stack ha sempre un grande
pila. Il supporto per questo è implementato nel gold linker nella versione GNU binutils
2.21 e successive.
-sottolineatura-sottolineatura
Questa opzione e la sua controparte, -fno-leader-underscore, cambia forzatamente il modo C
i simboli sono rappresentati nel file oggetto. Un uso è quello di aiutare il collegamento con l'eredità
codice montaggio.
Attenzione: , il -sottolineatura-sottolineatura switch fa sì che GCC generi codice che non lo è
binario compatibile con il codice generato senza quell'interruttore. Usalo per conformarsi a a
interfaccia binaria dell'applicazione non predefinita. Non tutti i target forniscono un supporto completo
per questo interruttore.
-ftls-modello=modello
Modificare il modello di archiviazione locale del thread da utilizzare. Il modello l'argomento dovrebbe essere uno dei
globale-dinamica, locale-dinamico, iniziale-exec or locale-exec. Nota che la scelta è
soggetto a ottimizzazione: il compilatore può utilizzare un modello più efficiente per i simboli no
visibile al di fuori dell'unità di traduzione, o se -fpic non viene fornito sulla riga di comando.
L'impostazione predefinita senza -fpic is iniziale-exec; con -fpic l'impostazione predefinita è globale-dinamica.
-fvisibilità=[difetto|interno|nascosto|protetta]
Imposta la visibilità del simbolo dell'immagine ELF predefinita sull'opzione specificata --- tutti i simboli sono
contrassegnato con questo a meno che non venga sovrascritto all'interno del codice. L'uso di questa funzione può molto
migliorare sostanzialmente il collegamento e i tempi di caricamento delle librerie di oggetti condivisi, produrre di più
codice ottimizzato, fornisce un'esportazione API quasi perfetta e previene i conflitti di simboli. è
fortemente consiglia di utilizzarlo in tutti gli oggetti condivisi che distribuisci.
Nonostante la nomenclatura, difetto significa sempre pubblico; cioè, disponibile per essere collegato
contro dall'esterno dell'oggetto condiviso. protetta e interno sono abbastanza inutili in
utilizzo nel mondo reale, quindi l'unica altra opzione comunemente usata è nascosto. L'impostazione predefinita se
-fvisibilità non è specificato è difetto, cioè rendere pubblico ogni simbolo.
Una buona spiegazione dei vantaggi offerti dall'assicurare che i simboli ELF abbiano il corretto
visibilità è data da "How To Write Shared Libraries" di Ulrich Drepper (che può essere
Trovato ahttp://www.akkadia.org/drepper/>)---comunque una soluzione superiore fatta
possibile con questa opzione contrassegnare le cose nascoste quando l'impostazione predefinita è public è make
l'impostazione predefinita nascosta e contrassegna le cose come pubbliche. Questa è la norma con le DLL su Windows e
con -fvisibilità=nascosto e "__attribute__ ((visibility("default")))" invece di
"__declspec(dllexport)" ottieni una semantica quasi identica con una sintassi identica.
Questo è un grande vantaggio per coloro che lavorano con progetti multipiattaforma.
Per coloro che aggiungono il supporto per la visibilità al codice esistente, potresti trovare "#pragma GCC
visibilità" di utilizzo. Funziona racchiudendo le dichiarazioni che si desidera impostare
visibilità per con (ad esempio) "#pragma visibilità GCC push(hidden)" e "#pragma
Pop visibilità GCC". Tieni presente che la visibilità dei simboli dovrebbe essere visualizzata as parte of
, il API interfaccia contratto e quindi tutto il nuovo codice dovrebbe sempre specificare la visibilità quando
non è l'impostazione predefinita; vale a dire, le dichiarazioni solo per l'uso all'interno del DSO locale dovrebbero
sempre essere contrassegnato esplicitamente come nascosto in modo da evitare l'indiretto PLT
spese generali --- rendere questo molto chiaro aiuta anche la leggibilità e l'auto-documentazione
del codice. Si noti che a causa dei requisiti delle specifiche ISO C++, "operatore nuovo" e
"cancellazione operatore" deve essere sempre di visibilità predefinita.
Tieni presente che le intestazioni esterne al tuo progetto, in particolare le intestazioni di sistema e
intestazioni da qualsiasi altra libreria che usi, potresti non aspettarti di essere compilato con
visibilità diversa da quella predefinita. Potrebbe essere necessario dire esplicitamente "#pragma GCC
visibilità push (predefinito)" prima di includere tali intestazioni.
le dichiarazioni "esterne" non sono influenzate da -fvisibilità, quindi un sacco di codice può essere
ricompilato con -fvisibilità=nascosto senza modifiche. Tuttavia, questo significa che
le chiamate a funzioni "esterne" senza visibilità esplicita usano il PLT, quindi è più
efficace usare "__attributo ((visibilità))" e/o "#pragma visibilità GCC" per dire
il compilatore quali dichiarazioni "extern" dovrebbero essere trattate come nascoste.
Si noti che -fvisibilità influisce sulle entità di collegamento vago C++. Ciò significa che, per
esempio, una classe di eccezione che viene generata tra DSO deve essere contrassegnata in modo esplicito
con visibilità predefinita in modo che il tipo_info i nodi sono unificati tra i DSO.
Una panoramica di queste tecniche, dei loro vantaggi e di come usarli è su
<http://gcc.gnu.org/wiki/Visibility>.
-fstrict-bitfield-volatili
Questa opzione dovrebbe essere usata se si accede a campi di bit volatili (o altre strutture
campi, sebbene il compilatore di solito onori comunque quei tipi) dovrebbe usare un singolo
accesso della larghezza del tipo di campo, se possibile allineato ad un allineamento naturale.
Ad esempio, i target con registri periferici mappati in memoria potrebbero richiedere tutto questo
gli accessi devono essere larghi 16 bit; con questo flag puoi dichiarare tutti i campi di bit periferici
come "unsigned short" (supponendo che short sia di 16 bit su questi target) per forzare l'uso di GCC
Accessi a 16 bit invece di, forse, un accesso a 32 bit più efficiente.
Se questa opzione è disabilitata, il compilatore utilizza l'istruzione più efficiente. Nel
esempio precedente, potrebbe essere un'istruzione di caricamento a 32 bit, anche se accede a
byte che non contengono alcuna parte del campo di bit o registri mappati in memoria
non correlato a quello in fase di aggiornamento.
In alcuni casi, come quando l'attributo "packed" viene applicato a un campo struttura,
potrebbe non essere possibile accedere al campo con una sola lettura o scrittura corretta
allineato per la macchina di destinazione. In questo caso GCC ricorre alla generazione multipla
accessi piuttosto che codice che danneggerà o troncherà il risultato in fase di esecuzione.
Nota: a causa delle restrizioni del modello di memoria C/C++ 11, gli accessi in scrittura non sono consentiti
toccare membri non di campo di bit. Si raccomanda quindi di definire tutti i bit del
tipo di campo come membri del campo di bit.
Il valore predefinito di questa opzione è determinato dall'interfaccia binaria dell'applicazione per
il processore di destinazione.
-fsync-libcalls
Questa opzione controlla se qualsiasi istanza fuori linea della famiglia "__sync" di
le funzioni possono essere utilizzate per implementare la famiglia di funzioni C++11 "__atomic".
Il valore predefinito di questa opzione è abilitato, quindi l'unica forma utile dell'opzione
is -fno-sync-libcalls. Questa opzione viene utilizzata nell'implementazione del libatomico
libreria di runtime.
AMBIENTE
Questa sezione descrive diverse variabili d'ambiente che influenzano il funzionamento di GCC. Alcuni
di questi funzionano specificando directory o prefissi da utilizzare durante la ricerca di vari tipi
di file. Alcuni vengono utilizzati per specificare altri aspetti dell'ambiente di compilazione.
Nota che puoi anche specificare i luoghi in cui cercare usando opzioni come -B, -I e -L.
Questi hanno la precedenza sui luoghi specificati utilizzando le variabili di ambiente, che a loro volta
hanno la precedenza su quelli specificati dalla configurazione di GCC.
LUNGO
LC_CTYPE
LC_MESSAGGI
LC_TUTTI
Queste variabili di ambiente controllano il modo in cui GCC utilizza le informazioni di localizzazione
che consente a GCC di lavorare con diverse convenzioni nazionali. GCC ispeziona il locale
categoria LC_CTYPE e LC_MESSAGGI se è stato configurato per farlo. Questi locali
le categorie possono essere impostate su qualsiasi valore supportato dall'installazione. Un valore tipico è
it_IT.UTF-8 per l'inglese nel Regno Unito codificato in UTF-8.
Le LC_CTYPE la variabile d'ambiente specifica la classificazione dei caratteri. GCC lo usa per
determinare i limiti dei caratteri in una stringa; questo è necessario per alcuni multibyte
codifiche che contengono virgolette e caratteri di escape altrimenti interpretati come a
fine della stringa o escape.
Le LC_MESSAGGI la variabile di ambiente specifica la lingua da utilizzare nella diagnostica
messaggi.
Se l' LC_TUTTI la variabile d'ambiente è impostata, sovrascrive il valore di LC_CTYPE e
LC_MESSAGGI; altrimenti, LC_CTYPE e LC_MESSAGGI predefinito al valore di LUNGO
variabile d'ambiente. Se nessuna di queste variabili è impostata, il valore predefinito di GCC è tradizionale
C comportamento inglese.
TMPDIR
If TMPDIR è impostato, specifica la directory da utilizzare per i file temporanei. GCC utilizza
file temporanei per contenere l'output di una fase della compilazione che deve essere utilizzato come
input alla fase successiva: ad esempio, l'output del preprocessore, che è il
input al compilatore vero e proprio.
GCC_COMPARE_DEBUG
Configurazione GCC_COMPARE_DEBUG è quasi equivalente a passare -fcompare-debug ai
driver del compilatore. Vedere la documentazione di questa opzione per maggiori dettagli.
GCC_EXEC_PREFIX
If GCC_EXEC_PREFIX è impostato, specifica un prefisso da usare nei nomi dei
sottoprogrammi eseguiti dal compilatore. Non viene aggiunta alcuna barra quando questo prefisso viene combinato
con il nome di un sottoprogramma, ma puoi specificare un prefisso che termini con una barra se
lo si desidera.
If GCC_EXEC_PREFIX non è impostato, GCC tenta di trovare un prefisso appropriato da usare
in base al percorso con cui viene invocato.
Se GCC non riesce a trovare il sottoprogramma utilizzando il prefisso specificato, prova a cercare nel
posti abituali per il sottoprogramma.
Il valore predefinito di GCC_EXEC_PREFIX is prefisso/lib/gcc/ where prefisso è il prefisso per
il compilatore installato. In molti casi prefisso è il valore di "prefisso" quando hai eseguito il
configure script.
Altri prefissi specificati con -B avere la precedenza su questo prefisso.
Questo prefisso viene utilizzato anche per trovare file come crt0.o che servono per il collegamento.
Inoltre, il prefisso viene utilizzato in modo insolito nel trovare le directory da cercare
per i file di intestazione. Per ciascuna delle directory standard il cui nome inizia normalmente
con /usr/local/lib/gcc (più precisamente, con il valore di GCC_INCLUDE_DIR), GCC ci prova
sostituendo quell'inizio con il prefisso specificato per produrre una directory alternativa
nome. Così, con -Bpippo/, ricerche GCC foo/bar appena prima che cerchi lo standard
elenco /usr/local/lib/bar. Se una directory standard inizia con il configurato
prefisso allora il valore di prefisso è sostituito da GCC_EXEC_PREFIX quando si cerca l'intestazione
File.
COMPILATORE_PERCORSO
Il valore di COMPILATORE_PERCORSO è un elenco di directory separate da due punti, molto simile a PERCORSO.
GCC prova le directory così specificate durante la ricerca di sottoprogrammi, se non può
trova i sottoprogrammi usando GCC_EXEC_PREFIX.
LIBRERIA_PERCORSO
Il valore di LIBRERIA_PERCORSO è un elenco di directory separate da due punti, molto simile a PERCORSO.
Quando è configurato come compilatore nativo, GCC prova le directory così specificate quando
ricerca di file linker speciali, se non riesce a trovarli utilizzando GCC_EXEC_PREFIX.
Il collegamento tramite GCC utilizza anche queste directory durante la ricerca di librerie ordinarie
per l' -l opzione (ma le directory specificate con -L vieni prima).
LUNGO
Questa variabile viene utilizzata per passare le informazioni sulla localizzazione al compilatore. Un modo in cui
questa informazione viene utilizzata per determinare il set di caratteri da utilizzare quando carattere
letterali, letterali stringa e commenti vengono analizzati in C e C++. Quando il compilatore è
configurato per consentire caratteri multibyte, i seguenti valori per LUNGO sono
riconosciuto:
C-JIS
Riconosci i caratteri JIS.
C-SJIS
Riconosci i caratteri SJIS.
C-EUCGP
Riconosci i caratteri EUCJP.
If LUNGO non è definito, o se ha qualche altro valore, il compilatore usa "mblen"
e "mbtowc" come definito dalle impostazioni internazionali predefinite per riconoscere e tradurre multibyte
caratteri.
Alcune variabili di ambiente aggiuntive influiscono sul comportamento del preprocessore.
CPATH
C_include_path
CPLUS_INCLUDE_PATH
OBJC_INCLUDE_PATH
Il valore di ogni variabile è un elenco di directory separate da un carattere speciale, molto
piace PERCORSO, in cui cercare i file di intestazione. Il carattere speciale,
"PATH_SEPARATOR", è dipendente dal target e determinato al momento della compilazione di GCC. Per Microsoft
Target basati su Windows è un punto e virgola e per quasi tutti gli altri target è un
colon.
CPATH specifica un elenco di directory in cui eseguire la ricerca come se specificato con -I, ma
dopo ogni percorso dato con -I opzioni sulla riga di comando. Questa variabile d'ambiente
viene utilizzato indipendentemente dalla lingua preelaborata.
Le restanti variabili di ambiente si applicano solo durante la preelaborazione del particolare
lingua indicata. Ciascuno specifica un elenco di directory in cui eseguire la ricerca come se
specificato con -isistema, ma dopo ogni percorso dato con -isistema opzioni sul
riga di comando.
In tutte queste variabili, un elemento vuoto indica al compilatore di cercare la sua corrente
directory di lavoro. Gli elementi vuoti possono apparire all'inizio o alla fine di un percorso. Per
esempio, se il valore di CPATH è ":/special/include", che ha lo stesso effetto di
-IO. -Io/speciale/includo.
DIPENDENZE_OUTPUT
Se questa variabile è impostata, il suo valore specifica come generare le dipendenze per Make based
sui file di intestazione non di sistema elaborati dal compilatore. I file di intestazione di sistema sono
ignorato nell'output della dipendenza.
Il valore di DIPENDENZE_OUTPUT può essere solo un nome di file, nel qual caso le regole Make
vengono scritti su quel file, indovinando il nome di destinazione dal nome del file di origine. O il
il valore può avere la forma filetto bersaglio, nel qual caso le regole vengono scritte su file filetto
utilizzando bersaglio come nome di destinazione.
In altre parole, questa variabile d'ambiente equivale a combinare le opzioni -MM
e -MF, con un optional - MT anche l'interruttore.
SUNPRO_DEPENDENZE
Questa variabile è la stessa di DIPENDENZE_OUTPUT (vedi sopra), eccetto quel sistema
i file di intestazione non vengono ignorati, quindi implica -M anziché -MM. Tuttavia, l'
la dipendenza dal file di input principale viene omessa.
Usa powerpc64-linux-gnu-g++ online usando i servizi onworks.net