Il s'agit de la commande aarch64-linux-gnu-gcc-5 qui peut être exécutée dans le fournisseur d'hébergement gratuit OnWorks en utilisant l'un de nos multiples postes de travail en ligne gratuits tels que Ubuntu Online, Fedora Online, l'émulateur en ligne Windows ou l'émulateur en ligne MAC OS
PROGRAMME:
Nom
gcc - compilateur C et C++ du projet GNU
SYNOPSIS
gcc [-c|-S|-E] [-std=Standard]
[-g] [-pg] [-Oniveau]
[-Wprévenir...] [-Wpédantique]
[-Idir...] [-Ldir...]
[-Dmacro[=défn]...] [-Umacro]
[-foption...] [-moption-machine...]
[-o fichier de sortie] [@filet] dans le fichier
Seules les options les plus utiles sont répertoriées ici ; voir ci-dessous pour le reste. g ++ accepte
la plupart du temps les mêmes options que gcc.
DESCRIPTION
Lorsque vous invoquez GCC, il effectue normalement le prétraitement, la compilation, l'assemblage et la liaison.
Les "options globales" vous permettent d'arrêter ce processus à une étape intermédiaire. Pour
par exemple, le -c L'option dit de ne pas exécuter l'éditeur de liens. Ensuite, la sortie se compose de l'objet
fichiers générés par l'assembleur.
D'autres options sont transmises à une étape du traitement. Certaines options contrôlent le
préprocesseur et autres le compilateur lui-même. Pourtant, d'autres options contrôlent l'assembleur et
éditeur de liens ; la plupart d'entre eux ne sont pas documentés ici, car vous avez rarement besoin d'en utiliser.
La plupart des options de ligne de commande que vous pouvez utiliser avec GCC sont utiles pour les programmes C ; lorsque
une option n'est utile qu'avec un autre langage (généralement C++), l'explication le dit
explicitement. Si la description d'une option particulière ne mentionne pas de source
langue, vous pouvez utiliser cette option avec toutes les langues prises en charge.
VOTRE gcc programme accepte les options et les noms de fichiers comme opérandes. De nombreuses options ont plusieurs
noms de lettres; par conséquent, plusieurs options à une lettre peuvent ne sauraient être regroupés : -dv est très
différent de -d -v.
Vous pouvez mélanger des options et d'autres arguments. Pour la plupart, l'ordre que vous utilisez ne
question. L'ordre est important lorsque vous utilisez plusieurs options du même type ; par exemple, si
tu précise -L plusieurs fois, les répertoires sont recherchés dans l'ordre spécifié. Aussi,
le placement de la -l option est importante.
De nombreuses options ont des noms longs commençant par -f ou avec -W---par exemple,
-fmove-boucle-invariants, -Wformat etc. La plupart d'entre eux ont à la fois des effets positifs et négatifs
formes; la forme négative de -ffou is -fno-foo. Ce manuel ne documente qu'un seul de ces
deux formulaires, celui qui n'est pas celui par défaut.
OPTIONS
Option Résumé
Voici un résumé de toutes les options, regroupées par type. Les explications sont ci-dessous
sections.
Total Options
-c -S -E -o filet -no-canonique-prefixes -tuyau -pass-codes-de-sortie -x langue -v
-### --Aidez-moi[=classe[...]] --target-aide --version -emballage @filet -fplugin=filet
-fplugin-arg-prénom=arg -fdump-ad-spec[-svelte] -fada-spec-parent=unité
-fdump-go-spec=filet
C Langue Options
-ansi -std=Standard -fgnu89-en ligne -aux-infos nom de fichier
-Fallow-fonctions-variadiques-sans-paramètre -fno-asm -fno-intégré -fno-intégré-fonction
-fhosté -fautoportant -fopenacc -fopenmp -fopenmp-simd -extensions-fms
-fplan9-extensions -trigraphes -traditionnel -traditionnel-cpp -jachère-simple-précision
-fcond-incompatibilité -lin-vector-conversions -fsigned-bitfields -fsigned-char
-champs de bits signés amusants -caractère-funsigned
C + + Langue Options
-fabi-version=n -fno-contrôle-d'accès -fcheck-nouveau -fconstexpr-profondeur=n
-fami-injection -fno-elide-constructeurs -fno-enforce-eh-specs -ffor-portée
-fno-pour-portée -fno-gnu-mots-clés -fno-implicite-templates
-fno-implicites-inline-templates -fno-implémenter-en-lignes -extensions-fms
-fno-nonansi-builtins -fnothrow-opt -fno-noms-opérateurs -fno-optionnel-diags
-fpermissif -fno-jolis-modèles -frepo -fno-rtti -fsized-désallocation -statistiques
-ftemplate-backtrace-limit=n -fttemplate-depth=n -fno-threadsafe-statics
-fusible-cxa-atexit -fno-faible -nostdinc++ -fvisibility-inlines-hiden
-fvtable-vérifier=[std|préinitial|aucun] -fvtv-comptes -fvtv-débogage -fvisibilité-ms-compat
-fext-littéraux-numériques -Wabi=n -Wabi-tag -Wconversion-null -Wctor-dtor-privacy
-Wdelete-non-virtual-dtor -Wliteral-suffixe -Wrétrécissement -Wnosauf -Wnon-virtual-dtor
-Wororder -Weffc++ -Wstrict-null-sentinelle -Wno-non-modèle-ami - Fonte de style Wold
-Woverloaded-virtuel -Conversions Wno-pmf -Wsign-promo
Objective-C et Objective-C ++ Langue Options
-fconstant-string-class=nom du cours -fgnu-runtime -fnext-runtime -fno-nil-recepteurs
-fobjc-abi-version=n -fobjc-call-cxx-cdtors -fobjc-envoi-direct -fobjc-exceptions
-fobjc-gc -fobjc-nilcheck -fobjc-std=objc1 -fno-local-ivars
-fivar-visibilité=[public|protégé|Privé|paquet] -freplace-objc-classes
-fzero-lien -gen-decls -Wassign-interception -Wno-protocole -Wsélecteur
-Correspondance du sélecteur strict -Wundeclared-sélecteur
Langue Fournisseur Options
-fmessage-longueur=n -fdiagnostics-show-location=[une fois|chaque ligne]
-fdiagnostics-color=[auto|jamais|toujours] -fno-diagnostics-show-option
-fno-diagnostics-show-caret
Avertissement Options
-fsyntaxe-seulement -fmax-erreurs=n -Wpédantique -pédant-erreurs -w -Wextra -Mur
-Adresse -Waggregate-retour -Waggressive-loop-optimisations -Warray-limites
-Warray-limites=n -Wbool-comparer -Wno-attributs -Wno-builtin-macro-redéfini
-Wc90-c99-compatible -Wc99-c11-compatible -Compatible WC++ -Wc++11-compatible -Wc++14-compatible
-Wcast-aligner -Qualité Wcast -Wchar-indices -Wclobbé -Commentaire
-Wconditionnellement pris en charge -Wconversion -Wcouverture-inadéquation -Wdate-heure
-Wdelete-incomplet -Wno-cpp -Wno-déprécié -Wno-deprecated-déclarations
-Wno-designated-init -Wdisabled-optimisation -Wno-discarded-qualificatifs
-Wno-discarded-array-qualificatifs -Wno-div-par-zéro -Wdouble-promotion -Wempty-corps
-Wenum-comparer -Wno-endif-étiquettes -Werreur -Erreur=* -Wfatal-erreurs -Wfloat-égal
-Wformat -Wformat=2 -Wno-format-contient-nul -Wno-format-extra-arguments
-Wformat-non littéral -Wformat-sécurité -Wformat-signature -Wformat-y2k
-Wframe-plus grand-que=len -Wno-free-non-heap-object -Wjump-manque-init
-Wignored-qualificatifs -Types-de-pointeurs-wincompatibles -Wimplicite
-Wimplicit-fonction-déclaration -Wimplicit-int -Winit-soi -Winline
-Wno-int-conversion -Wno-int-to-pointer-cast -Wno-invalid-offsetof -Winvalid-pch
-Wplus grand que=len -Wunsafe-loop-optimisations -Wlogique-op -Wlogique-pas-parenthèses
-long-long -Wmain -Wpeut-être-non-initialisé -Wmemset-transposé-args -Wmissing-bracelets
-Wmissing-field-initialiseurs -Wmissing-include-répertoires -Wno-multichar -Wnon nul
-Wnormalisé=[aucun|id|nfc|nfkc]
-Wodr -Wno-débordement -Wopenmp-simd -Cordes Woverlength -Wpacked
-Wpacked-bitfield-compat -Wrembourré -Parenthèses -Format Wpedantic-ms
-Wno-pédant-format-ms -Wpointeur-arith -Wno-pointeur-vers-int-cast -Wredundant-decls
-Wno-return-local-addr -Type épave -Wpoint-séquence -Wombre -Wno-ombre-ivar
-Wshift-count-négatif -Wshift-count-overflow -Wsign-comparer -Wsign-conversion
-Wfloat-conversion -Wsizeof-pointer-memaccess -Wsizeof-array-argument
-Wstack-protecteur -Wstack-utilisation=len -Wstrict-aliasing -Wstrict-aliasing=n
-Wstrict-débordement -Wstrict-overflow=n -Wsuggest-attribut=[pur|const|non-retour|le format]
-Wsuggest-final-types -Wsuggest-final-methods -Wsuggest-override
-Wmissing-format-attribut -Wswitch -Wswitch-par défaut -Wswitch-énumération -Wswitch-bool
-Wsync-nand -Wsystem-en-têtes -Wtrampolines -Wtrigraphes -Wtype-limites -Wundef
-Wuninitialisé -Pragmas-inconnus -Wno-pragmas -Wunsuffixed-float-constantes
-Wunutilisé -Wunused-fonction -Étiquette non utilisée -Wunused-local-typedefs -Wunused-paramètre
-Wno-résultat-inutilisé -Wvaleur non utilisée -Wvariable-inutilisée -Paramètre non utilisé mais défini
-Winutilisé-mais-set-variable -Casting inutile -Wvariadique-macros
-Wvecteur-fonctionnement-performance -Wvla -Wvolatile-registre-var -Wwrite-chaînes
-Wzéro-comme-constante-de-pointeur-null
C et Objectif-C-seulement Avertissement Options
-Wbad-fonction-cast -Wmissing-déclarations -Type de paramètre manquant
-Wmanquant-prototypes -Wnested-externes -Wold-style-déclaration -Wold-style-définition
-Wstrict-prototypes -Wtraditionnel -Wtraditionnel-conversion
-Wdéclaration-après-déclaration -Wpointer-signe
Débogage Options
-dlettres -dumpspecs -benne -version de vidage -fsanitize=Catégorie -fsanitize-récupérer
-fsanitize-récupérer=Catégorie -fasan-shadow-offset=nombre
-fsanitize-undefined-trap-on-error -fcheck-pointeur-limites -fchkp-check-incomplet-type
-fchkp-premier-champ-a-propres-limites -fchkp-limites-étroites
-fchkp-tableau étroit à le plus interne -fchkp-optimiser -fchkp-use-fast-string-functions
-fchkp-use-nochk-string-functions -fchkp-utiliser-limites-statiques
-fchkp-use-static-const-limites -fchkp-traiter-zéro-dynamique-taille-comme-infini
-fchkp-vérifier-lire -fchkp-vérifier-lire -fchkp-vérifier-écrire -fchkp-store-bounds
-fchkp-instrument-appels -fchkp-instrument-marqué-seulement -fchkp-use-wrappers
-fdbg-cnt-liste -fdbg-cnt=liste de contre-valeurs -fdisable-ipa-nom_passe
-fdisable-rtl-nom_passe -fdisable-rtl-nom de passe=liste-plage -fdisable-tree-nom_passe
-fdisable-tree-nom de passe=liste-plage -fdump-noaddr -fdump-non numéroté
-fdump-liens-non numérotés -fdump-unité-de-traduction[-n] -fdump-classe-hiérarchie[-n]
-fdump-ipa-tout -fdump-ipa-cgraph -fdump-ipa-inline -fdump-passes -fdump-statistiques
-fdump-tree-all -FDump-original[-n] -fdump-tree-optimisé[-n] -fdump-tree-cfg
-fdump-tree-alias -fdump-tree-ch -fdump-tree-ssa[-n] -fdump-tree-pre[-n]
-fdump-tree-ccp[-n] -fdump-tree-dce[-n] -fdump-tree-gimple[-cru] -fdump-tree-dom[-n]
-fdump-tree-dse[-n] -fdump-tree-phiprop[-n] -fdump-tree-phiopt[-n]
-fdump-tree-forwprop[-n] -fdump-are-copyrename[-n] -fdump-tree-nrv -fdump-tree-vect
-fdump-tree-évier -fdump-tree-sra[-n] -fdump-tree-forwprop[-n] -fdump-tree-free[-n]
-fdump-tree-vtable-verify -fdump-tree-vrp[-n] -fdump-tree-storeccp[-n]
-fdump-final-insns=filet -fcompare-debug[=opte] -fcompare-debug-seconde
-felimate-nain2-dups -fno-eliminate-types-debug-inutilisés
-felimate-unused-debug-symbols -femit-class-debug-toujours -fendable-mots-pass
-fendable-mots-pass=liste-plage -fdebug-types-section -fmem-rapport-wpa -fmem-rapport
-fpre-ipa-mem-rapport -fpost-ipa-mem-rapport -fprofile-arcs -fopt-info
-fopt-info-Options[=filet] -graine-frandom=nombre -fsched-verbeux=n -fsel-sched-verbeux
-fsel-sched-dump-cfg -fsel-sched-pipelining-verbeux -fstack-utilisation -ftest-couverture
-ftime-rapport -fvar-suivi -fvar-suivi-affectations
-fvar-tracking-assignments-toggle -g -gniveau -gtoggle -gcoff -nain-version -ggdb
-commutateurs-grecord-gcc -gno-record-gcc-commutateurs -gstabs -gstabs+ -gstrict-nain
-gno-strict-nain -gvms -gxcoff -gxcoff+ -gz[=type] -fno-merge-debug-strings
-fno-nain2-cfi-asm -fdebug-prefix-map=et les sites anciens=nouvelle -femit-struct-debug-baseonly
-femit-struct-debug-réduit -femit-struct-debug-debuged[=liste-spéc] -p -pg
-print-file-name=bibliothèque -print-libgcc-nom-de-fichier -impression-multi-répertoire
-print-multi-lib -print-multi-os-répertoire -print-nom-prog=Programme
-imprimer-recherche-répertoires -Q -print-sysroot -print-sysroot-headers-suffixe -sauve-temps
-save-temps=cwd -Save-Temps = obj -temps[=filet]
Optimization Options
-faggressive-loop-optimisations -falign-fonctions[=n] -falign-sauts[=n]
-falign-étiquettes[=n] -falign-boucles[=n] -fassociatif-maths -fauto-profil
-fauto-profil[=chemin] -fauto-inc-dec -fbranche-probabilités
-fbranch-target-load-optimize -fbranch-target-load-optimize2 -fbtr-bb-exclusif
-fcaller-sauvegarde -fcheck-data-deps -fcombine-stack-ajustements -fconserve-pile
-fcompare-elim -fcprop-registres -f saut en croix -fcse-suivre-sauts -fcse-skip-blocs
-fcx-fortran-règles -fcx-gamme-limitée -fdata-sections -fdce -fdelayed-branche
-fdelete-null-pointer-checks -fdévirtualiser -fdevirtualize-spéculativement
-fdevirtualize-at-ltrans -fdse -peur-inliner -fipa-sra -des-optimisations-coûteuses
-ffat-lto-objets -ffast-mathématiques -ffinite-mathématiques-seulement -ffloat-store
-fexcès-précision=Catégorie -fforward-propager -ffp-contrat=Catégorie -ffonction-sections
-fgcse -fgcse-après-rechargement -fgcse-las -fgcse-lm -fgraphite-identité -fgcse-sm
-fhoist-charges-adjacentes -fif-conversion -fif-conversion2 -findirect-inline
-finline-fonctions -finline-fonctions-appelées-une fois -finline-limite=n
-finline-petites-fonctions -fipa-cp -fipa-cp-clone -fipa-cp-alignement -fipa-pta
-fipa-profil -fipa-pure-const -fipa-référence -fipa-icf -fira-algorithme=algorithme
-fira-région=région -fira-palan-pression -fira-boucle-pression -fno-ira-share-save-slots
-fno-ira-share-spill-slots -fira-verbeux=n -fisolate-déréférencement-de-chemins-erronés
-attribut-fisolate-chemins-erronés -cinq points -fkeep-inline-fonctions
-fkeep-statique-const -flive-range-retrait -floop-bloc -floop-échange
-floop-strip-mine -floop-dérouler-et-bloquer -floop-nest-optimiser -floop-parallélise-tout
-flra-remat -flto -niveau de compression flto -flto-partition =alg -flto-rapport
-flto-rapport-wpa -fmerge-toutes-constantes -fmerge-constantes -fmodulo-sched
-fmodulo-sched-allow-regmoves -fmove-boucle-invariants -fno-branche-compte-reg
-fno-différer-pop -fno-fonction-cse -fno-deviner-branche-probabilité -fno-en ligne
-fno-math-errno -fno-judas -fno-judas2 -fno-sched-interbloc -fno-sched-spec
-fno-signé-zéros -fno-toplevel-réorganisation -fno-piégeage-maths
-fno-zero-initialisé-en-bss -fomit-frame-pointeur -foptimize-frères-soeurs-appels
-fpartial-inline -fpeel-boucles -frrédicatif -fprefetch-boucles-tableaux
-fprofile-rapport -fcorrection-de-profil -fprofile-dir=chemin -fprofile-générer
-fprofile-generate=chemin -fprofil-utilisation -fprofile-use=chemin -fprofile-valeurs
-fprofile-réorganiser-fonctions -freciprocal-maths Sans -frename-registres
-freorder-blocs -freorder-blocs-et-partition -freorder-fonctions
-frun-cse-après-boucle -freschedule-modulo-boucles-programmées -recherche-maths
-fsched2-utiliser-superblocs -fsched-pression -fsched-spec-load
-fsched-spec-charge-dangereux -fsched-stalled-insns-dep[=n] -fsched-stalled-insns[=n]
-fsched-groupe-heuristique -fsched-critical-path-heuristique -fsched-spec-insn-heuristique
-fsched-rank-heuristique -fsched-last-insn-heuristique -fsched-dep-count-heuristique
-fschedule-fusion -fschedule-insns -fschedule-insns2 -fsection-ancres
-fprogrammation-sélective -fprogrammation-sélective2 -fsel-sched-pipelining
-fsel-sched-pipelining-boucles-extérieures -finterposition-sémantique -fshrink-wrap
-fsignaling-nans -fconstante-single-précision -fsplit-ivs-dans-unroller
-fsplit-wide-types -fssa-phiopt -fstack-protecteur -fstack-protecteur-tout
-fstack-protecteur-fort -fstack-protector-explicite -fstdarg-opt -fstrict-aliasing
-fstrict-débordement -fthread-sauts -ftraceur -ftree-bit-ccp -ftree-builtin-call-dce
-ftree-ccp -ftree-ch -ftree-coalesce-inline-vars -ftree-coalesce-vars -ftree-copie-prop
-ftree-copyrename -ftree-dce -ftree-dominator-opt -ftree-dse -ftree-forwprop
-ftree-free -ftree-loop-if-convert -ftree-loop-if-convert-magasins -ftree-loop-im
-ftree-phiprop -ftree-loop-distribution -ftree-loop-distribute-patterns
-ftree-loop-ivcanon -ftree-boucle-linéaire -ftree-loop-optimiser -ftree-boucle-vectoriser
-ftree-paralléliser-boucles=n -ftree-pré -ftree-partial-pre -ftree-PTA -ftree-réassoc
-ftree-évier -ftree-slsr -ftree-sra -ftree-commutateur-conversion -ftree-tail-fusion
-ftre-ter -ftree-vectoriser -ftree-vrp -funit-a-a-time -funroll-toutes-les-boucles
-funroll-boucles -funsafe-loop-optimisations -funsafe-math-optimisations
-funswitch-boucles -fipa-ra -fvariable-expansion-in-unroller -fvect-cost-model -fvpt
-fweb -fwhole-programme -fwpa -plugin-fuse-linker --param prénom=Plus-value -O -O0 -O1 -O2
-O3 -Tu -Ofast -Og
Préprocesseur Options
-Aquestion=répondre -UNE-question[=répondre] -C -dD -dI -dM -dN -Dmacro[=défn] -E -H
-idirafter dir -comprendre filet -imacros filet -ipréfixe filet -iavecpréfixe dir
-iavecpréfixeavant dir -isystème dir -imultilib dir -isysroot dir -M -MM -MF -MG
-MP -MQ -MT -nostdinc -P -fdebug-cpp -ftrack-macro-extension -frépertoire-de-travail
-remapper -trigraphes -undef -Umacro -Wp,option -Xpréprocesseur option -pas-de-cpp-intégré
Assembleur Option
-Washington,option -Xassembleur option
links Options
nom-fichier-objet -fusible-ld=Liens -lbibliothèque -nostartfiles -nodefaultlibs -nostdlib
-tarte -rdynamique -s -statique -statique-libgcc -statique-libstdc++ -static-libansan
-statique-libtsan -statique-liblsan -statique-libubsan -statique-libmpx -static-libmpxwrappers
-partagé -shared-libgcc -symbolique -T scénario -Wl,option -Xlinker option -u symbole -z
mot-clé
Annuaire Options
-Bpréfixe -Idir -iplugindir=dir -Je citedir -Ldir -spécifications=filet -I- --sysroot=dir
--no-sysroot-suffixe
Machine Dépendant Options
AAArch64 Options -mabi=prénom -mbig-endian -mlittle-endian -mgeneral-regs-uniquement
-mcmodel=minuscule -mcmodel=petit -mcmodel=grand -mstrict-aligner -momit-leaf-frame-pointeur
-mno-omettre-leaf-frame-pointer -mtls-dialect=desc -mtls-dialect=traditionnel
-mtls-taille=Taille -mfix-cortex-a53-835769 -mno-fix-cortex-a53-835769
-mfix-cortex-a53-843419 -mno-fix-cortex-a53-843419 -mars=prénom -mcpu=prénom
-mtune=prénom
Adapteva Épiphanie Options -mhal-reg-fichier -mprefer-short-insn-regs -mbranche-coût=num
-mcmove -mnops=num -msoft-cmpsf -msplit-lohi -mpost-inc -mpost-modifier
-mstack-offset=num -mround-plus proche -mlong-appels -mappels courts -mpetit16 -mode-mfp=mode
-mvect-double -max-vect-align=num -msplit-vecmove-tôt -m1reg-reg
ARC Options - barillet-shifter -mcpu=cpu -mA6 -mARC600 -mA7 -mARC700 -mdpfp
-mdpfp-compact -mdpfp-rapide -mno-dpfp-lrsr -moi -mno-mpy -mmul32x16 -mmul64 -mnorme
-mspfp -mspfp-compact -mspfp-rapide -msimd -msoft-float -mswap -mcrc -mdsp-packa -mdvbf
-mlock -mmac-d16 -mmac-24 -mrtsc -mswape -mtéléphonie -mxy -miser -mannoter-aligner
-marclinux -marclinux_prof -mépilogue-cfi -mlong-appels -appels-moyens -msdata
-mucb-mcount -mvolatile-cache -malign-appel -mauto-modify-reg -mbbit-judas -Mno-Brcc
-mcase-vecteur-pcrel -mcompact-casesi -mno-cond-exec -mearly-cbranchesi -mexpand-adddi
-charges-mindexées -mlra -mlra-priority-aucun -mlra-priorité-compact mlra-priorité-
non compact -mno-millicode -mcode-mixte -mq-classe -mRcq -mRcw -msize-level=niveau
-mtune=cpu -mmultcoût=num -munalign-prob-seuil=probabilité
BRAS Options -mapcs-frame -mno-apcs-cadre -mabi=prénom -mapcs-pile-vérifier
-mno-apcs-pile-vérifier -mapcs-flotteur -mno-apcs-flotteur -mapcs-réentrant
-mno-apcs-réentrant -msched-prologue -mno-sched-prologue -mlittle-endian -mbig-endian
-mfloat-abi=prénom -format-mfp16=prénom -mthumb-interfonctionnement -mno-pouce-interwork -mcpu=prénom
-mars=prénom -mfpu=prénom -mtune=prénom -mprint-tune-info -mstructure-taille-limite=n
-mabort-on-norturn -mlong-appels -mno-long-appels -msingle-pic-base
-mno-single-pic-base -mpic-register=reg -mnop-fun-dllimport -mpoke-nom-de-fonction
-mpouce -marm -cadre mtpcs -mtpcs-feuille-cadre -mcaller-super-interfonctionnement
-mcalle-super-interworking -mtp=prénom -mtls-dialecte=dialecte -mword-relocalisations
-mfix-cortex-m3-ldrd -accès munaligné -mnéon-pour-64bits -mslow-flash-données
-masm-syntaxe-unifiée -mrestreignez-le
AVR Options -mmcu=mcu -maccumulate-args -mbranche-coût=sables moins coûteux -mcall-prologues -menthe8
-mn_flash=Taille -mno-interruptions -mrelax -mrmw -mstrict-X -mtiny-pile -nodevicelib
-Waddr-espace-convertir
Blackfin Options -mcpu=cpu[-sirévision] -msim -momit-leaf-frame-pointeur
-mno-omettre-leaf-frame-pointer -mspecld-anomalie -mno-specld-anomalie -mcsync-anomalie
-mno-csync-anomalie -mlow-64k -mno-low64k -mstack-check-l1 -mi-bibliothèque-partagée
-mno-id-bibliothèque-partagée -mshared-library-id=n -mleaf-id-bibliothèque-partagée
-mno-leaf-id-bibliothèque-partagée -msep-données -mno-sep-données -mlong-appels -mno-long-appels
-mfast-fp -minline-plt -mmulticœur -mcorea -mcoreb -msdram -micplb
C6X Options -mbig-endian -mlittle-endian -mars=cpu -msim -msdata=type-sdata
CRIS Options -mcpu=cpu -mars=cpu -mtune=cpu -mmax-stack-frame=n
-melinux-stacksize=n -metrax4 -metrax100 -mpdebug -mcc-init -mno-effets secondaires
-mstack-aligner -mdata-aligner -mconst-aligner -m32 bits -m16 bits -m8 bits
-mno-prologue-épilogue -mno-gotplt -moi -maout -mélinux -mlinux -sim -sim2
-mmul-bug-solution de contournement -mno-mul-bug-solution de contournement
CR16 Options -mmac -mcr16cplus -mcr16c -msim -menthe32 -mbit-ops -mdata-modèle=modèle
Darwin Options -all_load -client_admissible -cambre -arch_errors_fatal -arch_only
-bind_at_load -paquet -chargeur_bundle -Nom du client -compatibilité_version
-version actuelle -bande_morte -fichier-dépendance -dylib_file -dylinker_nom_installation
-dynamique -liblib dynamique -liste_symboles_exportés -liste de fichiers -flat_espace de noms
-force_cpusubtype_ALL -force_flat_espace de noms -headerpad_max_install_names -iframework
-image_base -initialisation -nom_installation -keep_private_externs -multi_module
-multiplier_défini -multiply_defined_inutilisé -noall_load
-no_dead_strip_inits_and_terms -nofixprebinding -nomultidefs -noprebind
-noseglinkedit -pagezero_size -préfixer -prebind_all_twolevel_modules -private_bundle
-read_only_relocs -sectalign -sectobjectsymboles -pourquoi charger -seg1addr -sectCreate
-sectobjectsymboles -secteur -segaddr -segs_read_only_addr -segs_read_write_addr
-seg_addr_table -seg_addr_table_filename -seglinkedit -segprot -segs_read_only_addr
-segs_read_write_addr -module_single -statique -sous_bibliothèque -sous_parapluie
-twolevel_namespace -parapluie -indéfini -liste_de_symboles_non exportés
-weak_reference_mismatches -ce qui est chargé -F -guidée -gful -mmacosx-version-min=version
-mkernel -mone-octet-bool
DÉC Alpha Options -mno-fp-regs -msoft-float -mieee -mieee-avec-inexact
-miee-conforme -mfp-trap-mode=mode -mfp-arrondi-mode=mode -mtrap-précision=mode
-mbuild-constantes -mcpu=type de processeur -mtune=type de processeur -mbwx -mmax -mfix -mcix
-mfloat-vax -mfloat-ieee -mexplicit-relocs -msmall-données -mlarge-données -mpetit-texte
-mlarge-texte -mémoire-latence=fois
FR30 Options -mpetit-modèle -mno-lsim
FRV Options -MGPR-32 -MGPR-64 -mfpr-32 -mfpr-64 -mhard-float -msoft-float
-malloc-cc -mfixed-cc -mdword -mno-dword -mdouble -mno-double -mmédia -mno-média
-mmuladd -mno-muladd -mfdpic -minline-plt -mgprel-ro -multilib-bibliothèque-pic
-mlinked-fp -mlong-appels -malign-étiquettes -mlibrary-pic -macc-4 -macc-8 -mpack
-mno-pack -mno-drapeaux -mcond-move -mno-cond-move -moptimize-membre
-mno-optimize-membre -mscc -mno-scc -mcond-exec -mno-cond-exec -mvliw-branche
-mno-vliw-branche -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec
-mno-niché-cond-exec -statistiques-mtomcat -mTLS -mtls -mcpu=cpu
GNU / Linux Options -mglibc -muclibc -mmusl -mbionique -mandroïde -tno-android-cc
-tno-android-ld
H8 / 300 Options -mrelax -mh -SP -mn -mexr -Mno-exr -menthe32 -malignité-300
HPPA Options -mars=type d'architecture -mdisable-fpregs -mdisable-indexation
-mfast-appels-indirects -mgaz -mgnu-ld -mhp-ld -mplage-fixe=registre-plage
-mjump-in-delay -mlinker-opt -mlong-appels -mlong-load-store -mno-disable-fpregs
-mno-disable-indexation -mno-fast-appels-indirects -mno-gaz -mno-saut-en-délai
-mno-long-load-store -mno-portable-runtime -mno-soft-float -mno-espace-regs
-msoft-float -mpa-risc-1-0 -mpa-risc-1-1 -mpa-risc-2-0 -environnement d'exécution portable
-mschedule=type de processeur -mspace-regs -msio -mwsio -munix=unix-std -nolibdld -statique
-films
IA-64 Options -mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic
-mvolatile-asm-stop -mregistre-noms -msdata -mno-sdata -mconstant-gp -mauto-pic
-mfused-mad -minline-float-divide-min-latence -minline-float-divide-max-débit
-mno-inline-float-division -minline-int-divide-min-latence
-minline-int-divide-max-débit -mno-inline-int-division -minline-sqrt-min-latence
-minline-sqrt-max-débit -mno-inline-sqrt -mdwarf2-asm -mearly-stop-bits
-mplage-fixe=registre-plage -mtls-taille=tls-taille -mtune=type de processeur -milp32 -mlp64
-msched-br-data-spec -msched-ar-data-spec -MSChed-Control-Spec -msched-br-in-data-spec
-msched-ar-in-data-spec -msched-in-control-spec -msched-spec-ldc
-msched-spec-control-ldc -msched-prefer-non-data-spec-insns
-msched-prefer-non-control-spec-insns -msched-stop-bits-after-chaque-cycle
-msched-count-spec-in-critical-path -msel-sched-dont-check-control-spec
-msched-fp-mem-deps-coût-zéro -msched-max-memory-insns-hard-limite
-msched-max-memory-insns=max-insns
LM32 Options -mbarrel-shift-activé -mdivide-activé -mmultiplier-activé
-msign-extend-activé -muser-activé
M32R / D Options -m32r2 -m32rx -m32r -mdebug -boucles malignes -mno-align-boucles
-taux d'erreur=nombre -mbranche-coût=nombre -mmodèle=code-taille-modèle-type -msdata=données s-
type -mno-flush-func -mflush-func=prénom -mno-flush-trap -mflush-trap=nombre -G num
M32C Options -mcpu=cpu -msim -memregs=nombre
M680x0 Options -mars=arche -mcpu=cpu -mtune=régler -m68000 -m68020 -m68020-40
-m68020-60 -m68030 -m68040 -m68060 -mcpu32 -m5200 -m5206e -m528x -m5307 -m5407
-mcfv4e -champbit -mno-champ de bits -mc68000 -mc68020 -champ de bits -mrtd -mno-rtd
-mdiv -mno-div -mcourt -mno-court -mhard-float -m68881 -msoft-float -mpcrel
-malign-int -mstrict-aligner -msep-données -mno-sep-données -mshared-library-id=n
-mi-bibliothèque-partagée -mno-id-bibliothèque-partagée -mxgot -mno-xgot
MCore Options -mhardlit -mno-hardlit -mdiv -mno-div -mrelax-immédiats
-mno-relax-immédiats -mwide-bitfields -mno-wide-bitfields -m4byte-fonctions
-mno-4byte-fonctions -mcallgraph-données -mno-callgraph-données -mslow-octets
-mno-octets lents -mno-lsim -mlittle-endian -mbig-endian -m210 -m340
-mstack-incrément
Député Options -mabsdiff -centre commercial -moyenne -mbased=n -mbitops -mc=n -mclip
-mconfig=prénom -mcop -mcop32 -mcop64 -mivc2 -mdc -mdiv -meb -mel -mio-volatil -ml
-mleadz -mm -mminmax -mmult -mno-opt -mrépéter -SP -msaturé -msdram -msim -msimnovec
-mtf -mtiny=n
Microblaze Options -msoft-float -mhard-float -msmall-divise -mcpu=cpu -mmemcpy
-mxl-soft-mul -mxl-soft-div -mxl-baril-shift -mxl-pattern-comparer -mxl-pile-vérifier
-mxl-gp-opt -mno-clearbss -mxl-multiplier-haut -mxl-float-convert -mxl-float-sqrt
-mbig-endian -mlittle-endian -mxl-réorganiser -mode-mxl-modèle d'application
MIPS Options -LA -EB -mars=arche -mtune=arche -mips1 -mips2 -mips3 -mips4
-mips32 -mips32r2 -mips32r3 -mips32r5 -mips32r6 -mips64 -mips64r2 -mips64r3
-mips64r5 -mips64r6 -mips16 -mno-mips16 -mflip-mips16 -minterlink-compressé
-mno-interlink-compressé -minterlink-mips16 -mno-interlink-mips16 -mabi=abi
-appels mabicaux -mno-abicales -mpartagé -mno-partagé -mplt -mno-plt -mxgot -mno-xgot
-mgp32 -mgp64 -mfp32 -mfpxx -mfp64 -mhard-float -msoft-float -mno-flotteur
-msingle-flotteur -mdouble-flotteur -modd-spreg -mno-impair-spreg -mabs=mode -mnan=codage
-mdsp -mno-dsp -mdspr2 -mno-dspr2 -mmcu -mmno-mcu -méva -mno-eva -mvirt -mno-virt
-mxpa -mno-xpa -mmicromips -mno-micromips -mfpu=type de processeur -msmartmips -mno-smartmips
-simple-altéré -mno-paire-single -mdmx -mno-mdmx -mips3d -mno-mips3d -mmt
-mno-mt -mllsc -mno-llsc -mlong64 -mlong32 -msym32 -mno-sym32 -Gnum
-mlocal-sdata -mno-local-sdata -mextern-sdata -mno-extern-sdata -mgpopt -mno-gopt
-données-intégrées -mno-données-intégrées -muninit-const-in-rodata
-mno-uninit-const-dans-rodata -mcode-lisible=mise -msplit-adresses
-mno-split-adresses -mexplicit-relocs -mno-explicite-relocs -mcheck-division-zéro
-mno-check-zéro-division -mdivide-pièges -mdivide-pauses -mmemcpy -mno-memcpy
-mlong-appels -mno-long-appels -mmad -mno-fou -Mimadd -mno-imadd -mfused-mad
-mno-fusionné-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-fix-sb1
-mflush-func=fonction -mno-flush-func -mbranche-coût=num -mbranche-probable
-mno-branche-probable -exceptions-mfp -mno-fp-exceptions -mvr4130-aligner -mno-vr4130-aligner
-msynci -mno-synci -mrelax-pic-calls -mno-relax-pic-calls -mmcount-ra-adresse
MÉLANGE Options -mlibfuncs -mno-libfuncs -mepsilon -mno-epsilon -mabi=gnou
-mabi=mmixware -mzero-étendre -mknuthdiv -mtoplevel-symboles -moi -mbranche-prédire
-mno-branche-prédire -mbase-adresses -mno-base-adresses -msortie unique
-mno-simple-sortie
MN10300 Options -mmult-bogue -mno-mult-bogue -mno-am33 -maman33 -maman33-2 -maman34 -mtune=CPU-
type -mreturn-pointeur-sur-d0 -mno-crt0 -mrelax -mliw -msetlb
Moxie Options -meb -mel -mmul.x -mno-crt0
MSP430 Options -msim -masm-hex -mmcu= -mcpu= -mlarge -mpetit -mrelax -mhwmulti= -minrt
NDS32 Options -mbig-endian -mlittle-endian -mreduced-regs -mfull-regs -mcmov -mno-cmov
-mperf-ext -mno-perf-ext -mv3push -mno-v3push -m16bit -mno-16 bits -misr-taille-vecteur=num
-mcache-block-size=num -mars=arche -mcmodèle=code-modèle -mctor-dtor -mrelax
Les enfants II Options -G num -mgpopt=option -mgpopt -mno-gpopt -mel -meb -mno-contourner-le 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 -mpersonnalisé-INS=N
-mno-personnalisé-INS -mcustom-fpu-cfg=prénom -mhal -msmallc -msys-crt0=prénom -msys-lib=prénom
Nvidia PTX Options -m32 -m64 -mmainkernel
PDP-11 Options -mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 -mbcopie
-mbcopy-intégré -menthe32 -mno-int16 -menthe16 -mno-int32 -mfloat32 -mno-float64
-mfloat64 -mno-float32 -mabshi -mno-abshi -mbranche-cher -mbranche-pas cher
-munix-asm -mdec-asm
picoChip Options -mae=ae_type -mvliw-lookahead=N -msymbole-comme-adresse
-mno-inefficace-warnings
PowerPC Options Voir Options RS/6000 et PowerPC.
RL78 Options -msim -mmul=aucun -mmul=g13 -mmul=rl78 -m64bit-double -m32bit-double
RS / 6000 et PowerPC Options -mcpu=type de processeur -mtune=type de processeur -mcmodèle=code-modèle
-mpowerpc64 -maltivec -mno-altivec -mpowerpc-gpopt -mno-powerpc-gpopt
-mpowerpc-gfxopt -mno-powerpc-gfxopt -mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb
-mpopcntd -mno-popcntd -mfprnd -mno-fprnd -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr
-mhard-dfp -mno-hard-dfp -mfull-toc -minimal-toc -mno-fp-en-toc -mno-somme-en-toc
-m64 -m32 -mxl-compat -mno-xl-compat -mpe -malign-pouvoir -malin-naturel
-msoft-float -mhard-float -mmultiple -mno-multiple -msingle-flotteur -mdouble-flotteur
-msimple-fpu -mstring -mno-chaîne - mise à jour -mno-mise à jour -mavoid-indexed-address
-mno-éviter-les-adresses-indexées -mfused-mad -mno-fusionné-madd -mbit-aligner
-mno-bit-aligner -mstrict-aligner -mno-strict-aligner -mrelocalisable -mno-déplaçable
-mrelocalisable-lib -mno-librairie-relocalisable -mtoc -mno-toc -petit -mlittle-endian
-mbig -mbig-endian -mdynamic-pas de photo -maltivec -mswdiv -msingle-pic-base
-prioritize-restricted-insns=priorité -msched-costly-dep=type_de_dépendance
-minsert-sched-nops=programme -mcall-sysv -mcall-netbsd -maix-struct-retour
-msvr4-struct-retour -mabi=type abi -msecure-plt -mbss-plt
-mblock-move-inline-limit=num -misel -mno-isel -misel=oui -misel=non -mspe -mno-spé
-mspe=oui -mspe=non -altéré -mgen-cell-microcode -mwarn-cell-microcode -mvrsave
-Mno-Vrsave -mmulhw -mno-mulhw -mdlmzb -mno-dlmzb -mfloat-gprs=oui -mfloat-gprs=non
-mfloat-gprs=unique -mfloat-gprs=double -mprototype -mno-prototype -msim -mmvmoi
-les fous -moncouteau -membre -msdata -msdata=opter -mvxworks -G num -pthread -mrecip
-mrecip=opter -mno-recette -mrecip-précision -mno-recip-précision -mveclibabi=type -mfriz
-mno-friz -mpointeurs-vers-fonctions-imbriquées -mno-pointeurs-vers-fonctions-emboîtées
-msave-toc-indirect -mno-save-toc-indirect -mpower8-fusion -Mo-Mower8 Fusion
-mpower8-vecteur -mno-power8-vecteur -mcrypto -mno-crypto -mdirect-déplacement -mno-direct-move
-mquad-mémoire -mno-quad-mémoire -mquad-mémoire-atomique -mno-quad-mémoire-atomique
-mcompat-align-parm -mno-compat-align-parm -mupper-regs-df -mno-upper-regs-df
-mupper-regs-sf -mno-upper-regs-sf -mupper-regs -mno-regs-supérieurs
RX Options -m64bit-double -m32bit-double -fpu -nofpu -mcpu= -mbig-endian-données
-mlittle-endian-données -msmall-données -msim -mno-sim -mas100-syntaxe -mno-as100-syntaxe
-mrelax -mmax-taille-constante= -mint-registre= -mpid -mno-warn-plusieurs-interruptions-rapides
-msave-acc-en-interruptions
S / 390 et zSérie Options -mtune=type de processeur -mars=type de processeur -mhard-float -msoft-float
-mhard-dfp -mno-hard-dfp -mlong-double-64 -mlong-double-128 -mbackchain
-mno-backchain -mpacked-pile -mno-packed-pile -msmall-exec -mno-petit-exec
-mmvcle -mno-mvcle -m64 -m31 -mdebug -mno-débogage -mesa -mzarch -mtpf-trace
-mno-tpf-trace -mfused-mad -mno-fusionné-madd -mwarn-framesize -mwarn-pile dynamique
-taille-mstack -mstack-garde -mhotpatch=demi-mots,demi-mots
Score Options -meb -mel -mnhwloop -muls -mmac -mscore5 -mscore5u -mscore7 -mscore7d
SH Options -m1 -m2 -m2e -m2a-nofpu -m2a-unique-uniquement -m2a-simple -m2a -m3 -m3e
-m4-nofpu -m4-unique-uniquement -m4-simple -m4 -m4a-nofpu -m4a-unique-uniquement -m4a-simple
-m4a -m4al -m5-64média -m5-64media-nofpu -m5-32média -m5-32media-nofpu -m5-compact
-m5-compact-nofpu -mb -ml -mdalign -mrelax -mbigtable -mfmovd -mhitachi -mrenesas
-mno-renesas -mnomacsave -mieee -mno-ieee -mbitops -miser -minline-ic_invalidate
-mpadstruct -mespace -mpréfergot -musermode -coût multiple=nombre -mdiv=stratégie
-mdivsi3_libfunc=prénom -mplage-fixe=registre-plage -adressage-mindexé
-mggettrcost=nombre -mpt-fixe -maccumulate-arguments-sortants -minvalid-symboles
-modèle-matologique=modèle-atomique -mbranche-coût=num -mzdcbranche -mno-zdcbranche
-mcbranch-force-delay-slot -mfused-mad -mno-fusionné-madd -mfsca -mno-fsca -mfsrra
-mno-fsrra -mpretend-cmmove -mtas
Solaris 2 Options -mclear-hwcap -mno-clear-hwcap -texte-mimpure -mno-impur-texte
-pthreads -pthread
SPARC Options -mcpu=type de processeur -mtune=type de processeur -mcmodèle=code-modèle -memory-model=mem-
modèle -m32 -m64 -mapp-regs -mno-app-regs -structures mfaster -mno-structures plus rapides
-mplat -mno-plat -mfpu -mno-fpu -mhard-float -msoft-float -mhard-quad-float
-msoft-quad-flotteur -mstack-biais -mno-stack-biais -doubles-munalignés
-mno-doubles-non-alignés -mode-muser -mno-mode-utilisateur -mv8plus -mno-v8plus -mvis
-mno-vis -mvis2 -mno-vis2 -mvis3 -mno-vis3 -mccbcond -mno-cbcond -mfmaf -mno-fmaf
-mpopc -mno-popc -mfix-at697f -mfix-ut699
SPU Options -mwarn-reloc -Merror-Reloc -msafe-dma -munsafe-dma -mbranche-indices
-mpetit-mem -mlarge-mem -mstdmain -mplage-fixe=registre-plage -mea32 -mea64
-maddress-espace-conversion -mno-conversion-espace-adresse -mcache-taille=taille du cache
-matomic-mises à jour -mno-atomic-mises à jour
Système V Options -Qy -Qn -YP,chemins -Ah,dir
TUILE-Gx Options -mcpu=UC -m32 -m64 -mbig-endian -mlittle-endian -mcmodèle=code-modèle
TILEPro Options -mcpu=cpu -m32
V850 Options -mlong-appels -mno-long-appels -mep -mno-ep -mprolog-fonction
-mno-prolog-fonction -mespace -mtda=n -msda=n -mzda=n -mapp-regs -mno-app-regs
-mdisable-appel -mno-disable-callt -mv850e2v3 -mv850e2 -mv850e1 -mv850es -mv850e
-MV850 -mv850e3v5 -mboucle -mrelax -mlong-sauts -msoft-float -mhard-float -mgcc-abi
-mrh850-abi -mbig-commutateur
VAX Options -mg -mgnu -munix
Visium Options -mdebug -msim -mfpu -mno-fpu -mhard-float -msoft-float -mcpu=type de processeur
-mtune=type de processeur -mode msv -mode-muser
VMS Options -mvms-codes-retour -mdebug-main=préfixe -mmalloc64 -mpointeur-taille=Taille
VxWorks Options -mrtp -non statique -Bstatique -Bdynamique -Xbind-paresseux -Xbind-maintenant
x86 Options -mtune=type de processeur -mars=type de processeur -mtune-ctrl=liste des fonctionnalités
-mdump-tune-fonctionnalités -mno-par défaut -mfpmath=unité -masm=dialecte -mno-fancy-maths-387
-mno-fp-ret-en-387 -msoft-float -mno-large-multiplier -mrtd -malin-double
-mpreferred-stack-limite=num -mincoming-stack-limite=num -mcld -mcx16 -msahf
-mmovbe -mcrc32 -mrecip -mrecip=opter -mvzeropper -mprefer-avx128 -mmmx -msse -msse2
-msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx -mavx2 -mavx512f -mavx512pf -mavx512er
-mavx512cd -msha -maes -mpclmul -mfsgsbase -mrdrnd -mf16c -mfma -mprefetchwt1
-mclflushopt -mxsavec -mxsaves -msse4a -m3dnow -mpopcnt -mabm -mbmi -vtt -mfma4 -mxop
-mlzcnt -mbmi2 -mfxsr -mxsave -mxsaveopt -mrtm -mlwp -mmpx -mmattendrex -mthreads
-mno-align-stringops -minline-tous les stringops -minline-stringops-dynamiquement
-mstringop-stratégie=alg -mmemcpy-stratégie=stratégie -mmemset-stratégie=stratégie
-mpush-arguments -maccumulate-arguments-sortants -m128bit-long-double -m96bit-long-double
-mlong-double-64 -mlong-double-80 -mlong-double-128 -mregparm=num -msseregparm
-mveclibabi=type -mvect8-ret-in-mem -mpc32 -mpc64 -mpc80 -mstackrealign
-momit-leaf-frame-pointeur -mno-zone-rouge -mno-tls-direct-seg-refs -mcmodèle=code-modèle
-mabi=prénom -maddress-mode=mode -m32 -m64 -mx32 -m16 -mlarge-data-threshold=num
-msse2avx -mfentry -mrecord-mcount -mnop-mcount -m8bit-idiv
-Mavx256-Split-Unaligned-charge -mavx256-split-magasin-non-aligné -données malignes=type
-mstack-protector-guard=garde
x86 Windows Options -mconsole -mcygwin -mno-cygwin -mdll -mnop-fun-dllimport -mthread
-municode -mwin32 -mfenêtres -fno-set-stack-exécutable
Xstormy16 Options -msim
Xtensa Options -mconst16 -mno-const16 -mfused-mad -mno-fusionné-madd -mforce-pas de photo
-msérialiser-volatile -mno-sérialiser-volatile -mtext-section-littéraux
-mno-texte-section-littéraux -mtarget-aligner -mno-cible-aligner -mlongappels
-mno-longappels
zSérie Options Voir les options S/390 et zSeries.
Code Generation Options
-fcall-sauvé-reg -fcall-utilisé-reg -fixé-reg -fexceptions -fnon-appel-exceptions
-fdelete-mort-exceptions -tables-funwind -fasynchrone-unwind-tables -fno-gnu-unique
-finhibit-taille-directive -finstrument-fonctions
-finstrument-functions-exclude-function-list=sym,sym...
-finstrument-functions-exclude-file-list=filet,filet... -fno-commun -fno-identifiant
-fpcc-struct-retour -fpic -fPIC -fpie -fPIE -fno-plt -fno-jump-tables
-frecord-gcc-commutateurs -freg-struct-retour -fshort-énumérations -fcourt-double -fshort-wchar
-fverbeux-asm -fpack-struct[=n] -fstack-vérifier -fstack-limit-register=reg
-fstack-limite-symbole=sym -fno-stack-limite -fsplit-pile -fagging-underscore
-ftls-modèle=modèle -fstack-réutilisation=niveau_réutilisation -ftrapv -fwrapv -fbounds-check
-fvisibilité=[défaut|interne|caché|protégé] -fstrict-volatile-bitfields
-fsync-libcalls
Options Contrôle le Genre of Sortie
La compilation peut impliquer jusqu'à quatre étapes : prétraitement, compilation proprement dite, assemblage et
liaison, toujours dans cet ordre. GCC est capable de prétraiter et de compiler plusieurs
fichiers soit dans plusieurs fichiers d'entrée assembleur, soit dans un fichier d'entrée assembleur ; alors
chaque fichier d'entrée assembleur produit un fichier objet, et la liaison combine tous les objets
(ceux nouvellement compilés et ceux spécifiés en entrée) dans un fichier exécutable.
Pour tout fichier d'entrée donné, le suffixe du nom de fichier détermine quel type de compilation est
terminé:
filet.c
Code source C qui doit être prétraité.
filet.i
Code source C qui ne doit pas être prétraité.
filet.ii
Code source C++ qui ne doit pas être prétraité.
filet.m
Code source Objective-C. Notez que vous devez établir un lien avec le libobjc bibliothèque pour faire un
Travail du programme Objective-C.
filet.mi
Code source Objective-C qui ne doit pas être prétraité.
filet.mm
filet.M
Code source Objective-C++. Notez que vous devez établir un lien avec le libobjc bibliothèque à faire
un travail de programme Objective-C++. Noter que .M fait référence à une majuscule littérale M.
filet.mii
Code source Objective-C++ qui ne doit pas être prétraité.
filet.h
Fichier d'en-tête C, C++, Objective-C ou Objective-C++ à transformer en fichier précompilé
en-tête (par défaut) ou fichier d'en-tête C, C++ à transformer en une spécification Ada (via le
-fdump-ad-spec changer).
filet. Cc
filet.cp
filet.cxx
filet.cpp
filet.cpp
filet.c ++
filet.C
Code source C++ qui doit être prétraité. Notez qu'en .cxx, les deux dernières lettres
doit être à la fois littéralement x. Également, .C fait référence à un C majuscule littéral.
filet.mm
filet.M
Code source Objective-C++ qui doit être prétraité.
filet.mii
Code source Objective-C++ qui ne doit pas être prétraité.
filet.HH
filet.H
filet.hp
filet.hxx
filet.hpp
filet.HPP
filet.h++
filet.tcc
Fichier d'en-tête C++ à transformer en en-tête précompilé ou en spécification Ada.
filet.f
filet.pour
filet.ftn
Code source Fortran de forme fixe qui ne doit pas être prétraité.
filet.F
filet.POUR
filet.fpp
filet.FPP
filet.FTN
Code source Fortran de forme fixe qui doit être prétraité (avec le traditionnel
préprocesseur).
filet.f90
filet.f95
filet.f03
filet.f08
Code source Fortran de forme libre qui ne doit pas être prétraité.
filet.F90
filet.F95
filet.F03
filet.F08
Code source Fortran libre qui doit être prétraité (avec le traditionnel
préprocesseur).
filet.aller
Allez le code source.
filet.les publicités
Fichier de code source Ada qui contient une déclaration d'unité de bibliothèque (une déclaration d'un
package, sous-programme ou générique, ou une instanciation générique), ou une unité de bibliothèque
déclaration de changement de nom (une déclaration de changement de nom de package, générique ou sous-programme). Tel
les fichiers sont aussi appelés spécifications.
filet.adb
Fichier de code source Ada contenant un corps d'unité de bibliothèque (un sous-programme ou un corps de package).
De tels fichiers sont également appelés corps.
filet.s
Code assembleur.
filet.S
filet.sx
Code assembleur qui doit être prétraité.
autre
Un fichier objet à alimenter directement dans la liaison. Tout nom de fichier non reconnu
suffixe est traité de cette façon.
Vous pouvez spécifier la langue d'entrée explicitement avec le -x option:
-x langue
Spécifiez explicitement le langue pour les fichiers d'entrée suivants (plutôt que de laisser le
compilateur choisissez une valeur par défaut en fonction du suffixe du nom de fichier). Cette option s'applique à tous
fichiers d'entrée suivants jusqu'au prochain -x option. Valeurs possibles pour langue sont:
c c-header sortie cpp
c++ c++-en-tête c++-cpp-output
objectif-c objectif-c-en-tête objectif-c-cpp-sortie
objectif-c++ objectif-c++-en-tête objectif-c++-cpp-sortie
assembleur assembleur-avec-cpp
ada
f77 f77-cpp-entrée f95 f95-cpp-entrée
go
Java
-x aucun
Désactivez toute spécification d'une langue, afin que les fichiers suivants soient traités
selon leurs suffixes de nom de fichier (comme ils le sont si -x n'a pas été utilisé du tout).
-pass-codes-de-sortie
Normalement, le gcc le programme se termine avec le code de 1 si une phase du compilateur revient
un code de retour d'échec. Si vous spécifiez -pass-codes-de-sortie, gcc programme à la place
renvoie avec l'erreur numériquement la plus élevée produite par n'importe quelle phase renvoyant une erreur
indication. Les frontaux C, C++ et Fortran renvoient 4 en cas d'erreur interne du compilateur
est rencontré.
Si vous ne voulez que certaines des étapes de la compilation, vous pouvez utiliser -x (ou suffixes de nom de fichier)
dire gcc par où commencer, et l'une des options -c, -S, ou -E dire où gcc est d'
arrêter. Notez que certaines combinaisons (par exemple, -x sortie cpp -E) instruire gcc faire
rien du tout.
-c Compilez ou assemblez les fichiers sources, mais ne créez pas de lien. L'étape de liaison est simplement
pas fini. Le résultat final se présente sous la forme d'un fichier objet pour chaque fichier source.
Par défaut, le nom du fichier objet pour un fichier source est fait en remplaçant le suffixe .c,
.i, .s, etc., avec .o.
Les fichiers d'entrée non reconnus, ne nécessitant pas de compilation ou d'assemblage, sont ignorés.
-S Arrêt après l'étape de compilation proprement dite ; ne pas assembler. La sortie est dans le
forme d'un fichier de code assembleur pour chaque fichier d'entrée non assembleur spécifié.
Par défaut, le nom de fichier assembleur pour un fichier source est fait en remplaçant le suffixe
.c, .i, etc., avec .s.
Les fichiers d'entrée qui ne nécessitent pas de compilation sont ignorés.
-E Arrêt après l'étape de prétraitement ; n'exécutez pas le compilateur correctement. La sortie est en
sous forme de code source prétraité, qui est envoyé à la sortie standard.
Les fichiers d'entrée qui ne nécessitent pas de prétraitement sont ignorés.
-o filet
Placer la sortie dans un fichier filet. Cela s'applique à tout type de sortie produit,
que ce soit un fichier exécutable, un fichier objet, un fichier assembleur ou C prétraité
code.
If -o n'est pas spécifié, la valeur par défaut est de mettre un fichier exécutable dans a.out, L'object
fichier pour source.suffixe in source.o, son fichier assembleur dans sources, un précompilé
fichier d'en-tête dans source.suffixe.gch, et toutes les sources C prétraitées sur la sortie standard.
-v Imprimer (sur la sortie d'erreur standard) les commandes exécutées pour exécuter les étapes de
compilation. Imprimez également le numéro de version du programme pilote du compilateur et du
préprocesseur et le compilateur proprement dit.
-###
J'aime -v sauf que les commandes ne sont pas exécutées et les arguments sont entre guillemets à moins qu'ils
contenir uniquement des caractères alphanumériques ou "./-_". Ceci est utile pour les scripts shell pour
capturer les lignes de commande générées par le pilote.
-tuyau
Utilisez des tuyaux plutôt que des fichiers temporaires pour la communication entre les différentes étapes de
compilation. Cela ne fonctionne pas sur certains systèmes où l'assembleur est incapable de lire
d'un tuyau; mais l'assembleur GNU n'a aucun problème.
--Aidez-moi
Imprimer (sur la sortie standard) une description des options de ligne de commande comprises par
gcc. Si l' -v l'option est également spécifiée alors --Aidez-moi est également transmis aux différents
processus invoqués par gcc, afin qu'ils puissent afficher les options de ligne de commande qu'ils
J'accepte. Si la -Wextra option a également été spécifiée (avant la --Aidez-moi option),
alors les options de ligne de commande qui n'ont aucune documentation associée sont également
affiché.
--target-aide
Imprimer (sur la sortie standard) une description des options de ligne de commande spécifiques à la cible
pour chaque outil. Pour certaines cibles, des informations supplémentaires spécifiques à la cible peuvent également être
imprimé.
--aide={classe|[^]qualificatif}[...]
Imprimer (sur la sortie standard) une description des options de ligne de commande comprises par
le compilateur qui s'intègre dans toutes les classes et qualificatifs spécifiés. Voici les
cours pris en charge :
optimiseurs
Affichez toutes les options d'optimisation prises en charge par le compilateur.
avertissements
Affichez toutes les options contrôlant les messages d'avertissement produits par le compilateur.
l'objectif
Afficher les options spécifiques à la cible. Contrairement au --target-aide option cependant, cible-
les options spécifiques de l'éditeur de liens et de l'assembleur ne sont pas affichées. Ceci est dû au fait
ces outils ne prennent actuellement pas en charge l'extension --aide= syntaxe.
params
Afficher les valeurs reconnues par le --param option.
langue
Afficher les options prises en charge pour langue, Où langue est le nom de l'un des
les langues prises en charge dans cette version de GCC.
commun
Affichez les options communes à toutes les langues.
Voici les qualificatifs pris en charge :
sans papiers
Affichez uniquement les options qui ne sont pas documentées.
rejoint
Options d'affichage prenant un argument qui apparaît après un signe égal dans le même
texte continu, tel que : --help=cible.
séparé
Options d'affichage prenant un argument qui apparaît comme un mot séparé après le
option d'origine, telles que : -o fichier de sortie.
Ainsi, par exemple, pour afficher tous les commutateurs spécifiques à la cible non documentés pris en charge par
le compilateur, utilisez :
--help=cible,sans-papiers
Le sens d'un qualificatif peut être inversé en le préfixant du ^ caractère, donc pour
exemple pour afficher toutes les options d'avertissement binaires (c'est-à-dire celles qui sont activées ou désactivées
et qui ne prennent pas d'argument) qui ont une description, utilisez :
--help=warnings,^rejoint,^sans-papiers
L'argument pour --aide= ne devrait pas consister uniquement en des qualificatifs inversés.
La combinaison de plusieurs classes est possible, bien que cela limite généralement la sortie de sorte
beaucoup qu'il n'y a rien à afficher. Un cas où cela fonctionne, cependant, c'est quand
l'une des classes est l'objectif. Par exemple, pour afficher tous les
options d'optimisation, utilisez :
--help=cible,optimiseurs
VOTRE --aide= L'option peut être répétée sur la ligne de commande. Chaque utilisation successive affiche
sa classe d'options demandée, en ignorant celles qui ont déjà été affichées.
Si la -Q apparaît sur la ligne de commande avant le --aide= option, puis le
texte descriptif affiché par --aide= est changé. Au lieu de décrire l'affichage
options, une indication est donnée pour savoir si l'option est activée, désactivée ou définie
à une valeur spécifique (en supposant que le compilateur le sache au point où le
--aide= option est utilisée).
Voici un exemple tronqué du port ARM de gcc:
% gcc -Q -mabi=2 --help=cible -c
Les options suivantes sont spécifiques à la cible :
-mabi = 2
-mabort-on-noreturn [désactivé]
-mapcs [désactivé]
La sortie est sensible aux effets des options de ligne de commande précédentes, donc pour
exemple, il est possible de savoir quelles optimisations sont activées à -O2 en utilisant:
-Q -O2 --help=optimiseurs
Vous pouvez également découvrir quelles optimisations binaires sont activées par -O3 en utilisant:
gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
diff /tmp/O2-opts /tmp/O3-opts | grep activé
-no-canonique-prefixes
Ne développez aucun lien symbolique, résolvez les références à /../ or /./, ou faire le chemin
absolue lors de la génération d'un préfixe relatif.
--version
Affiche le numéro de version et les droits d'auteur du GCC invoqué.
-emballage
Appelez toutes les sous-commandes sous un programme wrapper. Le nom du programme wrapper et
ses paramètres sont passés sous forme de liste séparée par des virgules.
gcc -c tc -wrapper gdb,--args
Ceci appelle tous les sous-programmes de gcc sous gdb --args, ainsi l'invocation de cc1 is
gdb --args cc1 .
-fplugin=prénom.so
Charger le code du plugin dans le fichier prénom.donc, supposé être un objet partagé à déployer par
le compilateur. Le nom de base du fichier objet partagé est utilisé pour identifier le plugin
à des fins d'analyse d'arguments (voir -fplugin-arg-prénom-clé=Plus-value au dessous de). Chaque
plugin doit définir les fonctions de rappel spécifiées dans l'API des plugins.
-fplugin-arg-prénom-clé=Plus-value
Définir un argument appelé clé avec une valeur de Plus-value pour le plugin appelé prénom.
-fdump-ad-spec[-svelte]
Pour les fichiers source et include C et C++, générez les spécifications Ada correspondantes.
-fada-spec-parent=unité
En conjonction avec -fdump-ad-spec[-svelte] ci-dessus, générez des spécifications Ada en tant qu'unités enfants de
mère unité.
-fdump-go-spec=filet
Pour les fichiers d'entrée dans n'importe quelle langue, générez les déclarations Go correspondantes dans filet. Ce
génère des déclarations Go "const", "type", "var" et "func" qui peuvent être un moyen utile
pour commencer à écrire une interface Go pour du code écrit dans un autre langage.
@filet
Lire les options de ligne de commande à partir de filet. Les options lues sont insérées à la place des
original @filet option. Si filet n'existe pas ou ne peut pas être lu, l'option
seront traités littéralement et non supprimés.
options dans filet sont séparés par des espaces. Un caractère d'espacement peut être inclus
dans une option en entourant l'option entière de guillemets simples ou doubles. Tout
caractère (y compris une barre oblique inverse) peut être inclus en préfixant le caractère à être
inclus avec une barre oblique inverse. Les filet peut lui-même contenir des @ supplémentairesfilet options; tout
ces options seront traitées de manière récursive.
Compilation C + + Programmes
Les fichiers source C++ utilisent conventionnellement l'un des suffixes .C, . Cc, .cpp, .cpp, .c ++, .cp, ou
.cxx; Les fichiers d'en-tête C++ utilisent souvent .HH, .hpp, .H, ou (pour le code de modèle partagé) .tccEt
les fichiers C++ prétraités utilisent le suffixe .ii. GCC reconnaît les fichiers avec ces noms et
les compile en tant que programmes C++ même si vous appelez le compilateur de la même manière que pour la compilation
programmes C (généralement avec le nom gcc).
Cependant, l'utilisation de gcc n'ajoute pas la bibliothèque C++. g ++ est un programme qui appelle GCC et
spécifie automatiquement la liaison avec la bibliothèque C++. il traite .c, .h et .i fichiers comme
fichiers source C++ au lieu de fichiers source C à moins que -x est utilisé. Ce programme est également utile
lors de la précompilation d'un fichier d'en-tête C avec un .h extension à utiliser dans les compilations C++. Au
de nombreux systèmes, g ++ est également installé avec le nom c ++.
Lorsque vous compilez des programmes C++, vous pouvez spécifier plusieurs des mêmes options de ligne de commande que
vous utilisez pour compiler des programmes dans n'importe quelle langue ; ou des options de ligne de commande significatives pour C
et langues apparentées; ou des options qui n'ont de sens que pour les programmes C++.
Options Contrôle C Dialecte
Les options suivantes contrôlent le dialecte du C (ou les langages dérivés du C, tels que C++,
Objective-C et Objective-C++) que le compilateur accepte :
-ansi
En mode C, cela équivaut à -std=c90. En mode C++, cela équivaut à
-std = c ++ 98.
Cela désactive certaines fonctionnalités de GCC qui sont incompatibles avec ISO C90 (lorsque
compilation de code C), ou de C++ standard (lors de la compilation de code C++), comme "asm" et
des mots-clés "typeof" et des macros prédéfinies telles que "unix" et "vax" qui identifient le
type de système que vous utilisez. Il permet également l'ISO indésirable et rarement utilisé
fonction trigraphe. Pour le compilateur C, il désactive la reconnaissance du style C++ //
commentaires ainsi que le mot-clé "inline".
Les mots-clés alternatifs "__asm__", "__extension__", "__inline__" et "__typeof__"
continuer à travailler malgré -ansi. Vous ne voudriez pas les utiliser dans un programme ISO C,
bien sûr, mais il est utile de les mettre dans des fichiers d'en-tête qui pourraient être inclus dans
compilations faites avec -ansi. Des macros prédéfinies alternatives telles que "__unix__" et
"__vax__" sont également disponibles, avec ou sans -ansi.
VOTRE -ansi L'option ne provoque pas le rejet gratuit des programmes non ISO. Pour
cette, -Wpédantique est requis en plus de -ansi.
La macro "__STRICT_ANSI__" est prédéfinie lorsque le -ansi option est utilisée. Certains en-tête
fichiers peuvent remarquer cette macro et s'abstenir de déclarer certaines fonctions ou de définir
certaines macros que la norme ISO n'appelle pas ; c'est pour éviter d'interférer
avec tous les programmes qui pourraient utiliser ces noms pour d'autres choses.
Les fonctions qui sont normalement intégrées mais n'ont pas de sémantique définie par ISO C (comme
comme "alloca" et "ffs") ne sont pas des fonctions intégrées lorsque -ansi est utilisé.
-std=
Déterminer la norme de langue. Cette option n'est actuellement prise en charge que lorsque
compiler du C ou du C++.
Le compilateur peut accepter plusieurs standards de base, tels que c90 or c ++ 98, et les dialectes GNU
de ces normes, telles que gnu90 or gnou++98. Lorsqu'une norme de base est spécifiée, le
le compilateur accepte tous les programmes suivant cette norme ainsi que ceux utilisant des extensions GNU
qui ne le contredisent pas. Par exemple, -std=c90 désactive certaines fonctionnalités de GCC
incompatibles avec ISO C90, comme les mots-clés "asm" et "typeof", mais pas
d'autres extensions GNU qui n'ont pas de sens dans ISO C90, comme l'omission du
moyen terme d'une expression "?:". D'un autre côté, lorsqu'un dialecte GNU d'un standard
est spécifié, toutes les fonctionnalités prises en charge par le compilateur sont activées, même lorsque celles-ci
caractéristiques changent la signification de la norme de base. En conséquence, certaines normes strictes
les programmes peuvent être rejetés. La norme particulière est utilisée par -Wpédantique pour identifier
quelles fonctionnalités sont des extensions GNU étant donné cette version de la norme. Par exemple
-std=gnu90 -Wpédantique met en garde contre le style C++ // commentaires, tandis que -std=gnu99 -Wpédantique
ne fait pas.
Une valeur pour cette option doit être fournie ; les valeurs possibles sont
c90
c89
iso9899: 1990
Prend en charge tous les programmes ISO C90 (certaines extensions GNU en conflit avec ISO C90
sont désactivés). Pareil que -ansi pour le code C.
iso9899: 199409
ISO C90 telle que modifiée dans l'amendement 1.
c99
c9x
iso9899: 1999
iso9899:199x
ISO C99. Cette norme est pratiquement entièrement prise en charge, les bogues modulo et
problèmes à virgule flottante (principalement mais pas entièrement liés aux fonctionnalités C99 facultatives
des annexes F et G). Voirhttp://gcc.gnu.org/c99status.html> pour en savoir plus
informations. Les noms c9x et iso9899:199x sont obsolètes.
c11
c1x
iso9899: 2011
ISO C11, la révision 2011 de la norme ISO C. Cette norme est sensiblement
complètement pris en charge, bogues modulo, problèmes de virgule flottante (principalement mais pas entièrement
relatives aux caractéristiques optionnelles C11 des Annexes F et G) et les Annexes optionnelles K
(Interfaces de vérification des limites) et L (Analysabilité). Le nom c1x est obsolète.
gnu90
gnu89
Dialecte GNU de l'ISO C90 (y compris certaines fonctionnalités C99).
gnu99
gnu9x
Dialecte GNU de l'ISO C99. Le nom gnu9x est obsolète.
gnu11
gnu1x
Dialecte GNU de l'ISO C11. C'est la valeur par défaut pour le code C. Le nom gnu1x is
obsolète.
c ++ 98
c ++ 03
La norme ISO C++ de 1998, plus le rectificatif technique de 2003 et quelques
rapports de défauts. Pareil que -ansi pour le code C++.
gnou++98
gnou++03
dialecte GNU de -std = c ++ 98. C'est la valeur par défaut pour le code C++.
c ++ 11
c++0x
La norme ISO C++ 2011 plus ses amendements. Le nom c++0x est obsolète.
gnou++11
gnu++0x
dialecte GNU de -std = c ++ 11. Le nom gnu++0x est obsolète.
c ++ 14
c++1a
La norme ISO C++ 2014 plus ses amendements. Le nom c++1a est obsolète.
gnou++14
gnu++1a
dialecte GNU de -std = c ++ 14. Le nom gnu++1a est obsolète.
c++1z
La prochaine révision de la norme ISO C++, provisoirement prévue pour 2017.
est hautement expérimental et changera presque certainement de manière incompatible dans
futures versions.
gnu++1z
dialecte GNU de -std=c++1z. Le support est hautement expérimental et sera presque
certainement changer de manière incompatible dans les versions futures.
-fgnu89-en ligne
L'option -fgnu89-en ligne dit à GCC d'utiliser la sémantique GNU traditionnelle pour "inline"
fonctionne en mode C99.
L'utilisation de cette option équivaut à peu près à l'ajout de l'attribut de fonction "gnu_inline"
à toutes les fonctions en ligne.
L'option -fno-gnu89-en ligne dit explicitement à GCC d'utiliser la sémantique C99 pour
"inline" en mode C99 ou gnu99 (c'est-à-dire qu'il spécifie le comportement par défaut). Cette
l'option n'est pas prise en charge dans -std=c90 or -std=gnu90 mode.
Les macros de préprocesseur "__GNUC_GNU_INLINE__" et "__GNUC_STDC_INLINE__" peuvent être utilisées
pour vérifier quelle sémantique est en vigueur pour les fonctions "inline".
-aux-infos nom de fichier
Sortie vers le nom de fichier donné des déclarations prototypées pour toutes les fonctions déclarées et/ou
définis dans une unité de traduction, y compris ceux des fichiers d'en-tête. Cette option est
ignoré en silence dans une langue autre que C.
Outre les déclarations, le fichier indique, en commentaires, l'origine de chaque déclaration
(fichier et ligne source), que la déclaration soit implicite, prototypée ou
non prototype (I, N pour le neuf ou O pour vieux, respectivement, dans le premier caractère après
le numéro de ligne et les deux points), et s'il provient d'une déclaration ou d'une définition
(C or F, respectivement, dans le caractère suivant). En cas de fonction
définitions, une liste d'arguments de style K&R suivie de leurs déclarations est également
fourni, à l'intérieur des commentaires, après la déclaration.
-Fallow-fonctions-variadiques-sans-paramètre
Accepte les fonctions variadiques sans paramètres nommés.
Bien qu'il soit possible de définir une telle fonction, cela n'est pas très utile car il est
impossible de lire les arguments. Ceci n'est pris en charge que pour C car cette construction est
autorisé par C++.
-fno-asm
Ne pas reconnaître "asm", "inline" ou "typeof" comme mot-clé, afin que le code puisse les utiliser
mots comme identifiants. Vous pouvez utiliser les mots-clés "__asm__", "__inline__" et
"__typeof__" à la place. -ansi implique -fno-asm.
En C++, ce commutateur n'affecte que le mot-clé "typeof", puisque "asm" et "inline" sont
mots-clés standards. Vous pouvez utiliser le -fno-gnu-mots-clés drapeau à la place, qui a
le même effet. En mode C99 (-std=c99 or -std=gnu99), ce commutateur n'affecte que le
les mots-clés "asm" et "typeof", car "inline" est un mot-clé standard dans ISO C99.
-fno-intégré
-fno-intégré-fonction
Ne pas reconnaître les fonctions intégrées qui ne commencent pas par __construit_ comme préfixe.
GCC génère normalement un code spécial pour gérer certaines fonctions intégrées plus
efficacement ; par exemple, les appels à "alloca" peuvent devenir des instructions simples qui
ajustez la pile directement, et les appels à "memcpy" peuvent devenir des boucles de copie en ligne. Les
le code résultant est souvent à la fois plus petit et plus rapide, mais comme la fonction n'appelle pas
n'apparaissent plus comme tels, vous ne pouvez pas définir de point d'arrêt sur ces appels, ni modifier
le comportement des fonctions en établissant un lien avec une bibliothèque différente. De plus, lorsque
une fonction est reconnue comme une fonction intégrée, GCC peut utiliser des informations à ce sujet
fonction pour avertir des problèmes avec les appels à cette fonction, ou pour générer plus
code efficace, même si le code résultant contient toujours des appels à cette fonction. Pour
exemple, les avertissements sont donnés avec -Wformat pour les mauvais appels à "printf" lorsque "printf" est
intégré et "strlen" est connu pour ne pas modifier la mémoire globale.
Le -fno-intégré-fonction option uniquement la fonction intégrée fonction est désactivé.
fonction ne doit pas commencer par __construit_. Si une fonction est nommée qui n'est pas intégrée
dans cette version de GCC, cette option est ignorée. Il n'y a pas de correspondant
-fintégré-fonction option; si vous souhaitez activer les fonctions intégrées de manière sélective lorsque
en utilisant -fno-intégré or -fautoportant, vous pouvez définir des macros telles que :
#define abs(n) __builtin_abs ((n))
#define strcpy(d, s) __builtin_strcpy ((d), (s))
-fhosté
Affirmez que la compilation cible un environnement hébergé. Cela implique -fintégré. A
l'environnement hébergé est un environnement dans lequel toute la bibliothèque standard est disponible, et dans
dont "main" a un type de retour "int". Les exemples sont presque tout sauf un
noyau. Ceci équivaut à -fno-autoportant.
-fautoportant
Affirmez que la compilation cible un environnement autonome. Cela implique
-fno-intégré. Un environnement autonome est un environnement dans lequel la bibliothèque standard peut ne pas
existent, et le démarrage du programme peut ne pas être nécessairement sur "principal". L'exemple le plus évident
est un noyau de système d'exploitation. Ceci équivaut à -fno-hébergé.
-fopenacc
Activer la gestion des directives OpenACC "#pragma acc" en C/C++ et "!$acc" en Fortran.
Quand -fopenacc est spécifié, le compilateur génère du code accéléré selon le
Interface de programmation d'applications OpenACC v2.0http://www.openacc.org/>. Cette option
implique -pthread, et n'est donc pris en charge que sur les cibles qui prennent en charge
-pthread.
Notez qu'il s'agit d'une fonctionnalité expérimentale, incomplète et susceptible d'être modifiée à l'avenir
versions de GCC. Voirhttps://gcc.gnu.org/wiki/OpenACC> pour plus d'informations.
-fopenmp
Activer la gestion des directives OpenMP "#pragma omp" en C/C++ et "!$omp" en Fortran.
Quand -fopenmp est spécifié, le compilateur génère du code parallèle selon le
Interface de programme d'application OpenMP v4.0http://www.openmp.org/>. Cette option
implique -pthread, et n'est donc pris en charge que sur les cibles qui prennent en charge
-pthread. -fopenmp implique -fopenmp-simd.
-fopenmp-simd
Activer la gestion des directives SIMD d'OpenMP avec "#pragma omp" en C/C++ et "!$omp" en
Fortran. Les autres directives OpenMP sont ignorées.
-fcilkplus
Activez l'utilisation des fonctionnalités d'extension de langage Cilk Plus pour C/C++. Lorsque l'option
-fcilkplus est spécifié, activez l'utilisation des fonctionnalités d'extension Cilk Plus Language
pour C/C++. La présente implémentation suit ABI version 1.2. C'est un
fonctionnalité expérimentale qui n'est que partiellement terminée, et dont l'interface peut changer
dans les futures versions de GCC au fur et à mesure que les spécifications officielles changent. Actuellement, tous
fonctionnalités mais "_Cilk_for" ont été implémentées.
-fgnu-tm
Lorsque l'option -fgnu-tm est spécifié, le compilateur génère du code pour Linux
variante du document de spécification ABI de mémoire transactionnelle actuel d'Intel (révision
1.1, 6 mai 2009). Il s'agit d'une fonctionnalité expérimentale dont l'interface peut changer en
futures versions de GCC, au fur et à mesure que la spécification officielle change. Veuillez noter que non
toutes les architectures sont prises en charge pour cette fonctionnalité.
Pour plus d'informations sur la prise en charge par GCC de la mémoire transactionnelle,
Notez que la fonction de mémoire transactionnelle n'est pas prise en charge avec les exceptions de non-appel
(-fnon-appel-exceptions).
-extensions-fms
Acceptez certaines constructions non standard utilisées dans les fichiers d'en-tête Microsoft.
Dans le code C++, cela permet aux noms de membres dans les structures d'être similaires aux types précédents
déclarations.
typedef int UOW ;
structure ABC {
UOW UOW ;
};
Certains cas de champs sans nom dans les structures et les unions ne sont acceptés qu'avec ce
option.
Notez que cette option est désactivée pour toutes les cibles, à l'exception des cibles x86 utilisant ms-abi.
-fplan9-extensions
Acceptez certaines constructions non standard utilisées dans le code Plan 9.
Cela permet -extensions-fms, permet de passer des pointeurs vers des structures anonymes
des champs aux fonctions qui attendent des pointeurs vers des éléments du type du champ, et
permet de faire référence à des champs anonymes déclarés à l'aide d'un typedef. C'est seulement
pris en charge pour C, pas C++.
-trigraphes
Prend en charge les trigraphes ISO C. Les -ansi option (et -std options pour ISO C strict
conformité) implique -trigraphes.
-traditionnel
-traditionnel-cpp
Auparavant, ces options poussaient GCC à tenter d'émuler un compilateur C pré-standard.
Ils ne sont désormais pris en charge qu'avec le -E changer. Le préprocesseur continue de prendre en charge
un mode pré-standard. Voir le manuel GNU CPP pour plus de détails.
-fcond-incompatibilité
Autorisez les expressions conditionnelles avec des types incompatibles dans les deuxième et troisième arguments.
La valeur d'une telle expression est nulle. Cette option n'est pas prise en charge pour C++.
-lin-vector-conversions
Autoriser les conversions implicites entre vecteurs avec des nombres d'éléments différents et/ou
types d'éléments incompatibles. Cette option ne doit pas être utilisée pour le nouveau code.
-caractère-funsigned
Laissez le type "char" être unsigned, comme "unsigned char".
Chaque type de machine a une valeur par défaut pour ce que "char" devrait être. C'est soit comme
"unsigned char" par défaut ou comme "signed char" par défaut.
Idéalement, un programme portable devrait toujours utiliser "signed char" ou "unsigned char" lorsqu'il
dépend de la signature d'un objet. Mais de nombreux programmes ont été écrits pour utiliser
plain "char" et s'attendre à ce qu'il soit signé, ou s'attendre à ce qu'il ne soit pas signé, selon le
machines pour lesquelles ils ont été écrits. Cette option, et son inverse, vous permet de faire un tel
le programme fonctionne avec la valeur par défaut opposée.
Le type "char" est toujours un type distinct de chacun des "signed char" ou "unsigned
char", même si son comportement est toujours identique à l'un de ces deux.
-fsigned-char
Laissez le type "char" être signé, comme "signed char".
Notez que cela équivaut à -fno-caractère non signé, qui est la forme négative de
-caractère-funsigned. De même, l'option -fno-signed-char équivaut à
-caractère-funsigned.
-fsigned-bitfields
-champs de bits signés amusants
-fno-champs-bits signés
-fno-champs-de-bits-non signés
Ces options contrôlent si un champ de bits est signé ou non signé, lorsque la déclaration
n'utilise ni "signé" ni "non signé". Par défaut, un tel champ de bits est signé,
car c'est cohérent : les types entiers de base tels que "int" sont des types signés.
Options Contrôle C + + Dialecte
Cette section décrit les options de ligne de commande qui n'ont de sens que pour les programmes C++.
Vous pouvez également utiliser la plupart des options du compilateur GNU quelle que soit la langue de votre programme
est dans. Par exemple, vous pouvez compiler un fichier premièreClasse.C comme ça:
g++ -g -frepo -O -c premièreClasse.C
Dans cet exemple, seulement -frepo est une option destinée uniquement aux programmes C++ ; vous pouvez utiliser le
d'autres options avec n'importe quelle langue prise en charge par GCC.
Voici une liste d'options qui sont uniquement pour compiler des programmes C++ :
-fabi-version=n
Utiliser la version n de l'ABI C++. La valeur par défaut est la version 0.
La version 0 fait référence à la version la plus conforme à la spécification C++ ABI.
Par conséquent, l'ABI obtenu en utilisant la version 0 changera dans différentes versions de G++
car les bogues ABI sont corrigés.
La version 1 est la version de l'ABI C++ qui est apparue pour la première fois dans G++ 3.2.
La version 2 est la version de l'ABI C++ qui est apparue pour la première fois dans G++ 3.4, et était la
par défaut via G++ 4.9.
La version 3 corrige une erreur dans la transformation d'une adresse constante en argument de modèle.
La version 4, qui est apparue pour la première fois dans G++ 4.5, implémente une modification standard pour le vecteur
les types.
La version 5, qui est apparue pour la première fois dans G++ 4.6, corrige la modification de l'attribut
const/volatile sur les types de pointeur de fonction, decltype d'une simple decl et l'utilisation d'un
paramètre de fonction dans la déclaration d'un autre paramètre.
La version 6, apparue pour la première fois dans G++ 4.7, corrige le comportement de promotion de C++11
énumérations étendues et modification des packs d'arguments de modèle, const/static_cast, préfixe ++
et --, et une fonction de portée de classe utilisée comme argument de modèle.
Version 7, apparue pour la première fois dans G++ 4.8, qui traite nullptr_t comme un type intégré
et corrige la modification des lambdas dans la portée de l'argument par défaut.
La version 8, apparue pour la première fois dans G++ 4.9, corrige le comportement de substitution de
types de fonction avec les qualificatifs function-cv.
Voir aussi -Wabi.
-fabi-compat-version =n
Sur les cibles qui prennent en charge les alias forts, G++ contourne les modifications en créant
un alias avec le nom mutilé correct lors de la définition d'un symbole avec un nom incorrect
nom mutilé. Ce commutateur spécifie la version d'ABI à utiliser pour l'alias.
Avec -fabi-version=0 (valeur par défaut), la valeur par défaut est 2. Si une autre version d'ABI est
explicitement sélectionné, la valeur par défaut est 0.
La version de compatibilité est également définie par -Wabi=n.
-fno-contrôle-d'accès
Désactivez toutes les vérifications d'accès. Ce commutateur est principalement utile pour contourner les bogues dans
le code de contrôle d'accès.
-fcheck-nouveau
Vérifiez que le pointeur renvoyé par "operator new" n'est pas nul avant d'essayer de
modifier le stockage alloué. Cette vérification est normalement inutile car le C++
standard spécifie que "operator new" ne renvoie 0 que s'il est déclaré "throw()", dans
auquel cas le compilateur vérifie toujours la valeur de retour même sans cette option. Dans
tous les autres cas, lorsque "operator new" a une spécification d'exception non vide, la mémoire
l'épuisement est signalé en lançant "std::bad_alloc". Voir également nouvelle (à côté).
-fconstexpr-profondeur=n
Définissez la profondeur d'évaluation imbriquée maximale pour les fonctions constexpr C++11 sur n. Une limite
est nécessaire pour détecter une récursivité sans fin lors de l'évaluation de l'expression constante. Les
le minimum spécifié par la norme est de 512.
-fdeduce-init-list
Activer la déduction d'un paramètre de type de modèle en tant que "std::initializer_list" à partir d'une accolade-
liste d'initialisation incluse, c'est-à-dire
modèle transfert automatique (T t) -> decltype (realfn (t))
{
renvoie realfn (t);
}
vide f()
{
avant({1,2}); // renvoi d'appel >
}
Cette déduction a été mise en œuvre comme une extension possible de la proposition initiale
sémantique pour la norme C++11, mais ne faisait pas partie de la norme finale, il est donc
désactivé par défaut. Cette option est obsolète et peut être supprimée à l'avenir
version G++.
-fami-injection
Injectez des fonctions d'ami dans l'espace de noms englobant, afin qu'elles soient visibles à l'extérieur
la portée de la classe dans laquelle ils sont déclarés. Les fonctions d'ami ont été documentées
de travailler de cette façon dans l'ancien manuel de référence C++ annoté. Cependant, dans ISO C++ un
la fonction friend qui n'est pas déclarée dans une portée englobante ne peut être trouvée qu'en utilisant
recherche dépendante de l'argument. GCC utilise par défaut le comportement standard.
Cette option est pour la compatibilité et peut être supprimée dans une future version de G++.
-fno-elide-constructeurs
La norme C++ permet à une implémentation d'omettre de créer un fichier temporaire qui n'est
utilisé pour initialiser un autre objet du même type. La spécification de cette option désactive
cette optimisation et force G++ à appeler le constructeur de copie dans tous les cas.
-fno-enforce-eh-specs
Ne générez pas de code pour vérifier la violation des spécifications d'exception au moment de l'exécution.
Cette option viole la norme C++, mais peut être utile pour réduire la taille du code dans
les versions de production, un peu comme la définition de "NDEBUG". Cela ne donne pas de code utilisateur
autorisation de lever des exceptions en violation des spécifications d'exception ; les
le compilateur optimise toujours en fonction des spécifications, ce qui lance un
L'exception entraîne un comportement indéfini au moment de l'exécution.
-fextern-tls-init
-fno-extern-tls-init
Les standards C++11 et OpenMP autorisent les variables "thread_local" et "threadprivate" à
avoir une initialisation dynamique (d'exécution). Pour soutenir cela, toute utilisation d'une telle variable
passe par une fonction wrapper qui effectue toute initialisation nécessaire. Quand le
l'utilisation et la définition de la variable sont dans la même unité de traduction, ce surcoût peut
être optimisé, mais lorsque l'utilisation est dans une unité de traduction différente, il y a
surcharge importante même si la variable n'a pas réellement besoin de dynamique
initialisation. Si le programmeur peut être sûr qu'aucune utilisation de la variable dans un
la définition de TU doit déclencher l'initialisation dynamique (soit parce que la variable est
statiquement initialisé, ou une utilisation de la variable dans l'UT de définition sera exécutée
avant toute utilisation dans une autre UT), ils peuvent éviter ce surcoût avec le
-fno-extern-tls-init option.
Sur les cibles qui prennent en charge les alias de symboles, la valeur par défaut est -fextern-tls-init. Sur les cibles
qui ne prennent pas en charge les alias de symboles, la valeur par défaut est -fno-extern-tls-init.
-ffor-portée
-fno-pour-portée
If -ffor-portée est spécifié, la portée des variables déclarées dans un instruction-for-init
est limité à la boucle "for" elle-même, comme spécifié par la norme C++. Si
-fno-pour-portée est spécifié, la portée des variables déclarées dans un instruction-for-init
s'étend jusqu'à la fin de la portée englobante, comme c'était le cas dans les anciennes versions de G++, et
d'autres implémentations (traditionnelles) de C++.
Si aucun indicateur n'est donné, la valeur par défaut est de suivre la norme, mais d'autoriser et de donner
un avertissement pour le code à l'ancienne qui serait autrement invalide ou aurait un code différent
comportement.
-fno-gnu-mots-clés
Ne reconnaissez pas "typeof" comme mot-clé, afin que le code puisse utiliser ce mot comme un
identifiant. Vous pouvez utiliser le mot-clé "__typeof__" à la place. -ansi implique
-fno-gnu-mots-clés.
-fno-implicite-templates
N'émettez jamais de code pour les modèles non-inline qui sont instanciés implicitement (c'est-à-dire par
utilisation); émettre uniquement du code pour les instanciations explicites.
-fno-implicites-inline-templates
N'émettez pas non plus de code pour les instanciations implicites de modèles en ligne. Le défaut
est de gérer les inlines différemment afin que compile avec et sans besoin d'optimisation
le même ensemble d'instanciations explicites.
-fno-implémenter-en-lignes
Pour économiser de l'espace, n'émettez pas de copies hors ligne des fonctions en ligne contrôlées par
"Implémentation de #pragma". Cela provoque des erreurs de l'éditeur de liens si ces fonctions ne sont pas
inline partout où ils sont appelés.
-extensions-fms
Désactivez les avertissements Wpedantic sur les constructions utilisées dans MFC, telles que implicite int et
obtenir un pointeur vers une fonction membre via une syntaxe non standard.
-fno-nonansi-builtins
Désactivez les déclarations intégrées de fonctions qui ne sont pas mandatées par ANSI/ISO C. Ces
inclure "ffs", "alloca", "_exit", "index", "bzero", "conjf", et d'autres
fonctions.
-fnothrow-opt
Traiter une spécification d'exception "throw()" comme s'il s'agissait d'une spécification "noexcept" à
réduire ou éliminer la surcharge de taille de texte par rapport à une fonction sans exception
spécification. Si la fonction a des variables locales de types non triviaux
destructeurs, la spécification d'exception rend la fonction plus petite car
les nettoyages EH pour ces variables peuvent être optimisés. L'effet sémantique est
qu'une exception levée d'une fonction avec une telle spécification d'exception
se traduit par un appel à « terminer » plutôt qu'à « inattendu ».
-fno-noms-opérateurs
Ne pas traiter les mots-clés du nom de l'opérateur "and", "bitand", "bitor", "compl", "not", "or"
et "xor" comme synonymes comme mots-clés.
-fno-optionnel-diags
Désactivez les diagnostics que la norme dit qu'un compilateur n'a pas besoin d'émettre.
Actuellement, le seul diagnostic de ce type émis par G++ est celui d'un nom ayant
sens multiples au sein d'une classe.
-fpermissif
Rétrograder certains diagnostics sur le code non conforme des erreurs aux avertissements. Ainsi,
en utilisant -fpermissif permet à du code non conforme de se compiler.
-fno-jolis-modèles
Lorsqu'un message d'erreur fait référence à une spécialisation d'un modèle de fonction, le compilateur
imprime normalement la signature du modèle suivie des arguments du modèle et
toute définition de type ou nom de type dans la signature (par exemple "void f(T) [with T = int]" plutôt
que "void f(int)") afin qu'il soit clair quel modèle est impliqué. Lorsqu'une erreur
message fait référence à une spécialisation d'un modèle de classe, le compilateur omet tout
arguments de modèle qui correspondent aux arguments de modèle par défaut pour ce modèle. Si
l'un ou l'autre de ces comportements rend plus difficile la compréhension du message d'erreur plutôt que
plus facile, vous pouvez utiliser -fno-jolis-modèles pour les désactiver.
-frepo
Activez l'instanciation automatique du modèle au moment de la liaison. Cette option implique également
-fno-implicite-templates.
-fno-rtti
Désactiver la génération d'informations sur chaque classe avec des fonctions virtuelles à utiliser par
les fonctionnalités d'identification de type à l'exécution C++ ("dynamic_cast" et "typeid"). Si tu
n'utilisez pas ces parties de la langue, vous pouvez économiser de l'espace en utilisant ce drapeau.
Notez que la gestion des exceptions utilise les mêmes informations, mais G++ les génère comme
nécessaire. L'opérateur "dynamic_cast" peut toujours être utilisé pour les casts qui ne nécessitent pas
informations de type à l'exécution, c'est-à-dire converties en « void * » ou en classes de base non ambiguës.
-fsized-désallocation
Activer les déclarations globales intégrées
opérateur void delete (void *, std::size_t) noexcept ;
opérateur void delete[] (void *, std::size_t) noexcept ;
comme introduit en C++14. Ceci est utile pour la désallocation de remplacement définie par l'utilisateur
fonctions qui, par exemple, utilisent la taille de l'objet pour accélérer la désallocation.
Activé par défaut sous -std = c ++ 14 et ci-dessus. Le drapeau -Wsized-désallocation met en garde contre
sur les endroits qui pourraient vouloir ajouter une définition.
-statistiques
Émettre des statistiques sur le traitement frontal à la fin de la compilation. Cette
les informations ne sont généralement utiles qu'à l'équipe de développement G++.
-fstrict-énumérations
Autoriser le compilateur à optimiser en supposant qu'une valeur de type énuméré
ne peut être qu'une des valeurs de l'énumération (telle que définie dans la norme C++ ;
fondamentalement, une valeur qui peut être représentée dans le nombre minimum de bits nécessaires pour
représentent tous les recenseurs). Cette hypothèse peut ne pas être valide si le programme utilise
un cast pour convertir une valeur entière arbitraire en type énuméré.
-ftemplate-backtrace-limit=n
Définir le nombre maximal de notes d'instanciation de modèle pour un seul avertissement ou erreur
à n. La valeur par défaut est 10.
-fttemplate-depth=n
Définissez la profondeur d'instanciation maximale pour les classes de modèles à n. Une limite sur le
la profondeur d'instanciation du modèle est nécessaire pour détecter les récursions sans fin pendant le modèle
instanciation de classe. Les programmes conformes à ANSI/ISO C++ ne doivent pas s'appuyer sur un maximum
profondeur supérieure à 17 (modifiée en 1024 en C++11). La valeur par défaut est 900, car le
le compilateur peut manquer d'espace de pile avant d'atteindre 1024 dans certaines situations.
-fno-threadsafe-statics
N'émettez pas le code supplémentaire pour utiliser les routines spécifiées dans l'ABI C++ pour les threads.
initialisation sûre de la statique locale. Vous pouvez utiliser cette option pour réduire la taille du code
légèrement dans le code qui n'a pas besoin d'être thread-safe.
-fusible-cxa-atexit
Enregistrez les destructeurs pour les objets avec une durée de stockage statique avec le "__cxa_atexit"
plutôt que la fonction "atexit". Cette option est requise pour
gestion conforme aux normes des destructeurs statiques, mais ne fonctionne que si votre bibliothèque C
prend en charge "__cxa_atexit".
-fno-use-cxa-get-exception-ptr
N'utilisez pas la routine d'exécution "__cxa_get_exception_ptr". Ce qui provoque
"std::uncaught_exception" est incorrect, mais est nécessaire si la routine d'exécution est
pas disponible.
-fvisibility-inlines-hiden
Ce commutateur déclare que l'utilisateur ne tente pas de comparer des pointeurs à inline
fonctions ou méthodes où les adresses des deux fonctions sont prises dans des
objets partagés.
L'effet de ceci est que GCC peut, effectivement, marquer les méthodes en ligne avec
"__attribute__ ((visibilité ("caché")))" afin qu'ils n'apparaissent pas dans l'export
table d'un DSO et ne nécessitent pas d'indirection PLT lorsqu'ils sont utilisés dans le DSO.
L'activation de cette option peut avoir un effet considérable sur les temps de charge et de liaison d'un DSO car il
réduit massivement la taille de la table d'export dynamique lorsque la bibliothèque fait du lourd
utilisation de modèles.
Le comportement de ce commutateur n'est pas tout à fait le même que de marquer les méthodes comme masquées
directement, car cela n'affecte pas les variables statiques locales à la fonction ou cause
au compilateur d'en déduire que la fonction est définie dans un seul objet partagé.
Vous pouvez marquer une méthode comme ayant une visibilité explicitement pour annuler l'effet de la
passer pour cette méthode. Par exemple, si vous voulez comparer des pointeurs à un
méthode en ligne particulière, vous pouvez la marquer comme ayant une visibilité par défaut. Marquage du
la classe englobante avec une visibilité explicite n'a aucun effet.
Les méthodes en ligne explicitement instanciées ne sont pas affectées par cette option car leur liaison
pourrait autrement traverser une limite de bibliothèque partagée.
-fvisibilité-ms-compat
Cet indicateur tente d'utiliser les paramètres de visibilité pour créer le modèle de liaison C++ de GCC
compatible avec celui de Microsoft Visual Studio.
Le drapeau apporte ces modifications au modèle de liaison de GCC :
1. Il définit la visibilité par défaut sur "caché", comme -fvisibilité=caché.
2. Les types, mais pas leurs membres, ne sont pas masqués par défaut.
3. La règle de définition unique est assouplie pour les types sans visibilité explicite
spécifications qui sont définies dans plus d'un objet partagé : ces déclarations
sont autorisés s'ils sont autorisés lorsque cette option n'est pas utilisée.
Dans le nouveau code, il est préférable d'utiliser -fvisibilité=caché et exporter les classes qui sont
destiné à être visible de l'extérieur. Malheureusement, il est possible que le code s'appuie,
peut-être accidentellement, sur le comportement de Visual Studio.
Parmi les conséquences de ces changements figurent les données membres statiques du même type
avec le même nom mais définis dans différents objets partagés sont différents, donc changeant
l'un ne change pas l'autre ; et que les pointeurs vers les membres de la fonction définis dans
différents objets partagés peuvent ne pas être comparables. Lorsque ce drapeau est donné, c'est un
violation de l'ODR pour définir différemment les types portant le même nom.
-fvtable-vérifier=[std|préinitial|aucun]
Activer (ou désactiver, si vous utilisez -fvtable-verify=aucun) la fonction de sécurité qui vérifie à
temps d'exécution, pour chaque appel virtuel, que le pointeur vtable par lequel l'appel est
made est valide pour le type de l'objet et n'a pas été corrompu ou écrasé.
Si un pointeur vtable invalide est détecté au moment de l'exécution, une erreur est signalée et
l'exécution du programme est immédiatement interrompue.
Cette option provoque la construction des structures de données d'exécution au démarrage du programme, qui sont
utilisé pour vérifier les pointeurs vtable. Les options std et préinitial contrôler le
le moment où ces structures de données sont construites. Dans les deux cas, les structures de données sont
construit avant que l'exécution n'atteigne "main". À l'aide de -fvtable-verify=std provoque les données
structures à construire après le chargement et l'initialisation des bibliothèques partagées.
-fvtable-verify=préinitialisation les oblige à être construits avant que les bibliothèques partagées n'aient été
chargé et initialisé.
Si cette option apparaît plusieurs fois dans la ligne de commande avec des valeurs différentes
spécifié, aucun a la plus haute priorité sur les deux std et préinitial; préinitial prend
priorité sur std.
-fvtv-débogage
Lorsqu'il est utilisé en conjonction avec -fvtable-verify=std or -fvtable-verify=préinitialisation, causes
versions de débogage des fonctions d'exécution pour que la fonction de vérification vtable soit
appelé. Cet indicateur oblige également le compilateur à consigner des informations sur quelle vtable
pointeurs qu'il trouve pour chaque classe. Ces informations sont écrites dans un fichier nommé
vtv_set_ptr_data.log dans le répertoire nommé par la variable d'environnement VTV_LOGS_DIR
si cela est défini ou le répertoire de travail actuel sinon.
Remarque : cette fonctionnalité ajoute données dans le fichier journal. Si vous voulez un nouveau fichier journal, soyez
assurez-vous de supprimer tout existant.
-fvtv-comptes
Il s'agit d'un indicateur de débogage. Lorsqu'il est utilisé en conjonction avec -fvtable-verify=std or
-fvtable-verify=préinitialisation, cela oblige le compilateur à garder une trace du nombre total de
les appels virtuels qu'il rencontre et le nombre de vérifications qu'il insère. Ça aussi
compte le nombre d'appels à certaines fonctions de bibliothèque d'exécution qu'il insère et
enregistre ces informations pour chaque unité de compilation. Le compilateur écrit ces informations
dans un fichier nommé vtv_count_data.log dans le répertoire nommé par la variable d'environnement
VTV_LOGS_DIR si cela est défini ou le répertoire de travail actuel sinon. Ça aussi
compte la taille des ensembles de pointeurs vtable pour chaque classe et écrit ces informations
à vtv_class_set_sizes.log Dans le même répertoire.
Remarque : cette fonctionnalité ajoute données dans les fichiers journaux. Pour obtenir de nouveaux fichiers journaux, assurez-vous de
supprimer tous ceux qui existent.
-fno-faible
N'utilisez pas de support de symboles faibles, même s'il est fourni par l'éditeur de liens. Par défaut, G++
utilise des symboles faibles s'ils sont disponibles. Cette option n'existe que pour les tests, et
ne doit pas être utilisé par les utilisateurs finaux ; il en résulte un code inférieur et n'a aucun avantage.
Cette option pourra être supprimée dans une future version de G++.
-nostdinc++
Ne recherchez pas les fichiers d'en-tête dans les répertoires standard spécifiques au C++, mais
recherchez toujours les autres répertoires standard. (Cette option est utilisée lors de la construction du
bibliothèque C++.)
De plus, ces options d'optimisation, d'avertissement et de génération de code n'ont de signification que
pour les programmes C++ :
-Wabi (C, Objective-C, C++ et Objective-C++ uniquement)
Lorsqu'un explicite -fabi-version=n l'option est utilisée, provoque l'avertissement de G++ lorsqu'il génère
code qui n'est probablement pas compatible avec l'ABI C++ indépendante du fournisseur. Depuis G++ maintenant
Par défaut -fabi-version=0, -Wabi n'a aucun effet à moins qu'une ancienne version d'ABI soit
sélectionné (avec -fabi-version=n) ou une version de compatibilité plus ancienne est sélectionnée (avec
-Wabi=n or -fabi-compat-version =n).
Bien qu'un effort ait été fait pour mettre en garde contre tous ces cas, il existe probablement des
cas qui ne sont pas avertis, même si G++ génère du code incompatible.
Il peut également y avoir des cas où des avertissements sont émis même si le code qui est
généré est compatible.
Vous devez réécrire votre code pour éviter ces avertissements si vous êtes préoccupé par le
fait que le code généré par G++ peut ne pas être compatible binaire avec le code généré par
autres compilateurs.
-Wabi peut également être utilisé avec un numéro de version explicite pour avertir de la compatibilité
avec un particulier -version-fabi niveau, par exemple -Wabi=2 pour avertir des changements relatifs à
-fabi-version=2. La spécification d'un numéro de version définit également -fabi-compat-version =n.
Les incompatibilités connues dans -fabi-version=2 (qui était la valeur par défaut de GCC 3.4 à
4.9) comprennent :
* Un modèle avec un paramètre de modèle non type de type référence a été mutilé
incorrectement:
int externe N;
modèle struct S {};
vide n (S ) {2}
Cela a été corrigé dans -fabi-version=3.
* Les types de vecteurs SIMD déclarés à l'aide de "__attribute ((vector_size))" ont été mutilés dans un
manière non standard qui ne permet pas de surcharger les fonctions prenant des vecteurs
de différentes tailles.
La mutilation a été changée en -fabi-version=4.
* "__attribute ((const))" et "noreturn" ont été transformés en qualificatifs de type, et
"decltype" d'une déclaration simple a été replié.
Ces problèmes de mutilation ont été corrigés dans -fabi-version=5.
* Les énumérateurs de portée passés en tant qu'arguments à une fonction variadique sont promus comme
énumérateurs non délimités, provoquant la plainte de "va_arg". Sur la plupart des cibles, cela ne
affectent réellement le paramètre passant ABI, car il n'y a aucun moyen de passer un argument
plus petit que "int".
En outre, l'ABI a modifié la modification des packs d'arguments de modèle, "const_cast",
"static_cast", incrément/décrément de préfixe et une fonction de portée de classe utilisée comme
argument de modèle.
Ces problèmes ont été corrigés dans -fabi-version=6.
* Les lambdas dans la portée de l'argument par défaut ont été malmenés et l'ABI a changé
le mutilation de "nullptr_t".
Ces problèmes ont été corrigés dans -fabi-version=7.
* Lors de la modification d'un type de fonction avec function-cv-qualifiers, le non-qualifié
le type de fonction a été incorrectement traité comme un candidat de substitution.
Cela a été corrigé dans -fabi-version=8.
Il met également en garde contre les changements liés à psABI. Le psABI connu change à ce stade
consistent à
* Pour SysV/x86-64, les unions avec des membres "long double" sont passées en mémoire comme
spécifié dans psABI. Par exemple:
syndicat U {
long double ld ;
int i;
};
"union U" est toujours passé en mémoire.
-Wabi-tag (C++ et Objective-C++ uniquement)
Avertir lorsqu'un type avec une balise ABI est utilisé dans un contexte qui n'a pas cette balise ABI.
See C + + Attributs pour plus d'informations sur les balises ABI.
-Wctor-dtor-privacy (C++ et Objective-C++ uniquement)
Avertir lorsqu'une classe semble inutilisable car tous les constructeurs ou destructeurs de cette
class sont privées et n'ont ni amis ni fonctions membres statiques publiques.
Avertir également s'il n'y a pas de méthodes non privées et qu'il y a au moins un membre privé
fonction qui n'est pas un constructeur ou un destructeur.
-Wdelete-non-virtual-dtor (C++ et Objective-C++ uniquement)
Avertir lorsque "delete" est utilisé pour détruire une instance d'une classe qui a virtual
fonctions et destructeur non virtuel. Il est dangereux de supprimer une instance d'un dérivé
classe via un pointeur vers une classe de base si la classe de base n'a pas de
destructeur. Cet avertissement est activé par -Mur.
-Wliteral-suffixe (C++ et Objective-C++ uniquement)
Avertir lorsqu'une chaîne ou un littéral de caractère est suivi d'un suffixe ud qui ne
commencer par un trait de soulignement. En tant qu'extension conforme, GCC traite ces suffixes comme
jetons de prétraitement séparés afin de maintenir la compatibilité descendante avec le code
qui utilise les macros de formatage de " ". Par exemple:
#définir __STDC_FORMAT_MACROS
#comprendre
#inclut
int main () {
int64_t i64 = 123 ;
printf("Mon int64 : %"PRId64"\n", i64);
}
Dans ce cas, "PRId64" est traité comme un jeton de prétraitement distinct.
Cet avertissement est activé par défaut.
-Wrétrécissement (C++ et Objective-C++ uniquement)
Avertir lorsqu'une conversion restrictive interdite par C++11 se produit dans { }, par exemple
entier i = { 2.2 } ; // erreur : rétrécissement de double à int
Ce drapeau est inclus dans -Mur et -Wc++11-compatible.
Avec -std = c ++ 11, -Wno-rétrécissement supprime le diagnostic exigé par la norme.
Notez que cela n'affecte pas la signification du code bien formé ; réduire les conversions
sont encore considérés comme mal formés dans le contexte du SFINAE.
-Wnosauf (C++ et Objective-C++ uniquement)
Avertir lorsqu'une expression noexcept est évaluée à false en raison d'un appel à une fonction
qui n'a pas de spécification d'exception de non-lancement (c'est-à-dire "throw()" ou
"noexcept") mais est connu par le compilateur pour ne jamais lever d'exception.
-Wnon-virtual-dtor (C++ et Objective-C++ uniquement)
Avertir lorsqu'une classe a des fonctions virtuelles et un destructeur non virtuel accessible
lui-même ou dans une classe de base polymorphe accessible, auquel cas il est possible mais
pas sûr de supprimer une instance d'une classe dérivée via un pointeur vers la classe elle-même
ou classe de base. Cet avertissement est automatiquement activé si -Weffc++ est spécifié.
-Wororder (C++ et Objective-C++ uniquement)
Avertir lorsque l'ordre des initialiseurs de membres donné dans le code ne correspond pas à l'ordre
dans lequel ils doivent être exécutés. Par exemple:
structure A {
int i;
entier j;
A() : j (0), je (1) { }
};
Le compilateur réorganise les initialiseurs de membres pour "i" et "j" pour correspondre au
ordre de déclaration des membres, émettant un avertissement à cet effet. Cet avertissement est
activé par -Mur.
-fext-littéraux-numériques (C++ et Objective-C++ uniquement)
Accepter les suffixes de nombres littéraux imaginaires, à virgule fixe ou définis par la machine en tant que GNU
prolongements. Lorsque cette option est désactivée, ces suffixes sont traités comme des utilisateurs C++11.
des suffixes numériques littéraux définis. Ceci est activé par défaut pour tous les dialectes pré-C++11
et tous les dialectes GNU : -std = c ++ 98, -std=gnu++98, -std=gnu++11, -std=gnu++14. Ce
l'option est désactivée par défaut pour ISO C++11 (-std = c ++ 11, ...).
-W... les options ne sont pas affectées par -Mur.
-Weffc++ (C++ et Objective-C++ uniquement)
Avertir des violations des directives de style suivantes de Scott Meyers Efficace
C + + série de livres :
* Définir un constructeur de copie et un opérateur d'affectation pour les classes avec dynamiquement-
mémoire allouée.
* Préférez l'initialisation à l'affectation dans les constructeurs.
* Demandez à "operator=" de renvoyer une référence à *this.
* N'essayez pas de retourner une référence lorsque vous devez retourner un objet.
* Distinguer les formes préfixe et postfixe des opérateurs d'incrémentation et de décrémentation.
* Ne surchargez jamais "&&", "||", ou ",".
Cette option permet également -Wnon-virtual-dtor, qui est également l'un des C++ efficaces
recommandations. Cependant, le contrôle est étendu pour avertir du manque de
destructeur dans les classes de bases non polymorphes accessibles également.
Lorsque vous sélectionnez cette option, sachez que les en-têtes de bibliothèque standard n'obéissent pas à tous
de ces lignes directrices ; utilisation grep -v pour filtrer ces avertissements.
-Wstrict-null-sentinelle (C++ et Objective-C++ uniquement)
Avertir de l'utilisation d'un "NULL" non transposé comme sentinelle. Lors de la compilation uniquement avec GCC
il s'agit d'une sentinelle valide, car "NULL" est défini sur "__null". Bien que ce soit un nul
pointeur constant plutôt qu'un pointeur nul, il est garanti d'être de la même taille
comme pointeur. Mais cette utilisation n'est pas portable sur différents compilateurs.
-Wno-non-modèle-ami (C++ et Objective-C++ uniquement)
Désactivez les avertissements lorsque des fonctions d'ami non modélisées sont déclarées dans un modèle.
Depuis l'avènement de la prise en charge de la spécification explicite des modèles dans G++, si le nom du
ami est un identifiant non qualifié (c'est-à-dire, Ami foo (entier)), la spécification du langage C++
exige que l'ami déclare ou définisse une fonction ordinaire non modèle. (Section
14.5.3). Avant que G++ n'implémente la spécification explicite, les identifiants non qualifiés pouvaient être
interprétée comme une spécialisation particulière d'une fonction modélisée. Car ce
le comportement non conforme n'est plus le comportement par défaut pour G++,
-Wnon-modèle-ami permet au compilateur de vérifier le code existant pour des problèmes potentiels
spots et est activé par défaut. Ce nouveau comportement du compilateur peut être désactivé avec
-Wno-non-modèle-ami, qui conserve le code du compilateur conforme mais désactive le
avertissement utile.
- Fonte de style Wold (C++ et Objective-C++ uniquement)
Avertir si un transtypage de style ancien (style C) en un type non vide est utilisé dans un programme C++.
Les casts de nouveau style ("dynamic_cast", "static_cast", "reinterpret_cast", et
"const_cast") sont moins vulnérables aux effets indésirables et beaucoup plus faciles à rechercher.
-Woverloaded-virtuel (C++ et Objective-C++ uniquement)
Avertir lorsqu'une déclaration de fonction masque les fonctions virtuelles d'une classe de base. Pour
exemple, dans :
structure A {
vide virtuel f();
};
structure B : public A {
vide f(entier);
};
la version de classe "A" de "f" est cachée dans "B", et un code comme :
B*b;
b->f();
ne parvient pas à compiler.
-Conversions Wno-pmf (C++ et Objective-C++ uniquement)
Désactiver le diagnostic pour convertir un pointeur lié en fonction membre en un simple
aiguille.
-Wsign-promo (C++ et Objective-C++ uniquement)
Avertir lorsque la résolution de surcharge choisit une promotion de type non signé ou énuméré à
un type signé, sur une conversion en un type non signé de la même taille. Précédent
versions de G++ ont essayé de préserver l'absence de signature, mais la norme impose la
comportement.
Options Contrôle Objective-C et Objective-C ++ Dialectes
(REMARQUE : ce manuel ne décrit pas les langages Objective-C et Objective-C++
se.
Cette section décrit les options de ligne de commande qui n'ont de sens que pour Objective-C
et les programmes Objective-C++. Vous pouvez également utiliser la plupart des GNU indépendants du langage
options du compilateur. Par exemple, vous pouvez compiler un fichier une_classe.m comme ça:
gcc -g -fgnu-runtime -O -c une_classe.m
Dans cet exemple, -fgnu-runtime est une option destinée uniquement à Objective-C et Objective-C++
programmes; vous pouvez utiliser les autres options avec n'importe quelle langue prise en charge par GCC.
Notez que puisque Objective-C est une extension du langage C, les compilations Objective-C
peut également utiliser des options spécifiques au front-end C (par exemple, -Wtraditionnel). De même,
Les compilations Objective-C++ peuvent utiliser des options spécifiques au C++ (par exemple, -Wabi).
Voici une liste d'options qui sont uniquement pour compiler Objective-C et Objective-C++
programmes:
-fconstant-string-class=nom du cours
Utilisez nom du cours comme nom de la classe à instancier pour chaque chaîne littérale
spécifié avec la syntaxe "@"..."". Le nom de classe par défaut est "NXConstantString" si
le runtime GNU est utilisé, et "NSConstantString" si le runtime NeXT est en cours
utilisé (voir ci-dessous). Les -fconstant-cfstrings l'option, si elle est également présente, remplace l'option
-fclasse-chaîne-fconstante paramètre et faire en sorte que les littéraux "@"..."" soient définis comme constants
Chaînes CoreFoundation.
-fgnu-runtime
Générez du code objet compatible avec le runtime GNU Objective-C standard. C'est
la valeur par défaut pour la plupart des types de systèmes.
-fnext-runtime
Générez une sortie compatible avec le runtime NeXT. C'est la valeur par défaut pour NeXT
systèmes, y compris Darwin et Mac OS X. La macro "__NEXT_RUNTIME__" est prédéfinie si
(et seulement si) cette option est utilisée.
-fno-nil-recepteurs
Supposons que tous les messages Objective-C sont envoyés ("[receiver message:arg]") dans ce
unité de traduction s'assurer que le récepteur n'est pas "nil". Cela permet plus
points d'entrée efficaces dans le runtime à utiliser. Cette option n'est disponible que dans
en conjonction avec le runtime NeXT et ABI version 0 ou 1.
-fobjc-abi-version=n
Utiliser la version n de l'ABI Objective-C pour l'environnement d'exécution sélectionné. Cette option est
actuellement pris en charge uniquement pour l'environnement d'exécution NeXT. Dans ce cas, la version 0 est la
ABI traditionnelle (32 bits) sans prise en charge des propriétés et autres Objective-C 2.0
ajouts. La version 1 est l'ABI traditionnelle (32 bits) avec prise en charge des propriétés et
d'autres ajouts à Objective-C 2.0. La version 2 est l'ABI moderne (64 bits). Si rien n'est
spécifié, la valeur par défaut est la version 0 sur les machines cibles 32 bits et la version 2 sur les ordinateurs 64 bits
machines cibles.
-fobjc-call-cxx-cdtors
Pour chaque classe Objective-C, vérifiez si l'une de ses variables d'instance est un objet C++
avec un constructeur par défaut non trivial. Si c'est le cas, synthétisez un "- (id) spécial
méthode d'instance .cxx_construct" qui exécute des constructeurs par défaut non triviaux sur n'importe quel
ces variables d'instance, dans l'ordre, puis renvoient "self". De même, vérifiez s'il y a
La variable d'instance est un objet C++ avec un destructeur non trivial, et si c'est le cas, synthétisez
une méthode spéciale "- (void) .cxx_destruct" qui exécute tous ces destructeurs par défaut, dans
ordre inverse.
Les méthodes "- (id) .cxx_construct" et "- (void) .cxx_destruct" ne sont donc générées que
opérer sur des variables d'instance déclarées dans la classe Objective-C courante, et non sur celles
hérité des superclasses. Il est de la responsabilité de l'environnement d'exécution Objective-C de
invoquer toutes ces méthodes dans la hiérarchie d'héritage d'un objet. L identité)
Les méthodes .cxx_construct" sont invoquées par le runtime immédiatement après un nouvel objet
l'instance est allouée ; les méthodes "- (void) .cxx_destruct" sont invoquées immédiatement
avant que le runtime ne désalloue une instance d'objet.
Au moment d'écrire ces lignes, seul l'environnement d'exécution NeXT sur Mac OS X 10.4 et versions ultérieures prend en charge
en invoquant les méthodes "- (id) .cxx_construct" et "- (void) .cxx_destruct".
-fobjc-envoi-direct
Autorisez les sauts rapides vers le répartiteur de messages. Sur Darwin, cela se fait via le
page de communication.
-fobjc-exceptions
Activer la prise en charge syntaxique pour la gestion structurée des exceptions en Objective-C, similaire à
ce qui est offert par C++ et Java. Cette option est requise pour utiliser l'Objective-C
mots-clés @try, @throw, @catch, @finally et @synchronized. Cette option est disponible
avec le runtime GNU et le runtime NeXT (mais non disponible avec
le runtime NeXT sur Mac OS X 10.2 et versions antérieures).
-fobjc-gc
Activez le ramasse-miettes (GC) dans les programmes Objective-C et Objective-C++. Cette option
n'est disponible qu'avec l'environnement d'exécution NeXT ; le runtime GNU a une poubelle différente
implémentation de collection qui ne nécessite pas d'indicateurs de compilateur spéciaux.
-fobjc-nilcheck
Pour l'environnement d'exécution NeXT avec la version 2 de l'ABI, recherchez un récepteur nil dans la méthode
avant d'effectuer l'appel de méthode proprement dit. C'est la valeur par défaut et peut être
désactivé à l'aide -fno-objc-nilcheck. Les méthodes de classe et les super appels ne sont jamais vérifiés
pour nil de cette manière, quelle que soit la valeur de cet indicateur. Actuellement, ce drapeau fait
rien lorsque le runtime GNU, ou une ancienne version de l'ABI runtime NeXT, est utilisé.
-fobjc-std=objc1
Conforme à la syntaxe du langage Objective-C 1.0, le langage reconnu par GCC 4.0.
Cela n'affecte que les ajouts Objective-C au langage C/C++ ; cela n'affecte pas
conformité aux normes C/C++, qui est contrôlée par le dialecte C/C++ séparé
drapeaux d'options. Lorsque cette option est utilisée avec Objective-C ou Objective-C++
compilateur, toute syntaxe Objective-C non reconnue par GCC 4.0 est rejetée. Cette
est utile si vous devez vous assurer que votre code Objective-C peut être compilé avec
anciennes versions de GCC.
-freplace-objc-classes
Émettre un marqueur spécial en instruisant ld(1) ne pas lier statiquement dans l'objet résultant
fichier et autoriser dyld(1) pour le charger au moment de l'exécution à la place. Ceci est utilisé dans
en conjonction avec le mode de débogage Fix-and-Continue, où le fichier objet dans
la question peut être recompilée et rechargée dynamiquement au cours du programme
l'exécution, sans qu'il soit nécessaire de redémarrer le programme lui-même. Actuellement, Fix-and-
La fonctionnalité Continuer n'est disponible qu'avec l'environnement d'exécution NeXT sur Mac
OS X 10.3 et versions ultérieures.
-fzero-lien
Lors de la compilation pour le runtime NeXT, le compilateur remplace généralement les appels à
"objc_getClass("...")" (lorsque le nom de la classe est connu à la compilation) avec
références de classe statiques qui sont initialisées au moment du chargement, ce qui améliore l'exécution
performance. Spécification du -fzero-lien flag supprime ce comportement et provoque
appels à "objc_getClass("...")" à retenir. Ceci est utile dans Zero-Link
mode de débogage, car il permet de modifier les implémentations de classes individuelles
pendant l'exécution du programme. Le runtime GNU conserve actuellement toujours les appels à
"objc_get_class("...")" quelles que soient les options de la ligne de commande.
-fno-local-ivars
Par défaut, les variables d'instance en Objective-C sont accessibles comme si elles étaient locales
variables à partir des méthodes de la classe dans laquelle elles sont déclarées. Cela peut conduire à
occultation entre les variables d'instance et d'autres variables déclarées soit localement
à l'intérieur d'une méthode de classe ou globalement avec le même nom. Spécification du -fno-local-ivars
flag désactive ce comportement évitant ainsi les problèmes d'ombrage variable.
-fivar-visibilité=[public|protégé|Privé|paquet]
Définissez la visibilité de la variable d'instance par défaut sur l'option spécifiée afin que l'instance
les variables déclarées en dehors de la portée de toute directive de modificateur d'accès par défaut à la
visibilité spécifiée.
-gen-decls
Dump des déclarations d'interface pour toutes les classes vues dans le fichier source dans un fichier nommé
nomsource.decl.
-Wassign-interception (Objective-C et Objective-C++ uniquement)
Avertir chaque fois qu'une affectation Objective-C est interceptée par le ramasse-miettes.
-Wno-protocole (Objective-C et Objective-C++ uniquement)
Si une classe est déclarée pour implémenter un protocole, un avertissement est émis pour chaque méthode
dans le protocole qui n'est pas implémenté par la classe. Le comportement par défaut est de
émettre un avertissement pour chaque méthode non explicitement implémentée dans la classe, même si un
l'implémentation de la méthode est héritée de la superclasse. Si vous utilisez le -Wno-protocole
option, alors les méthodes héritées de la superclasse sont considérées comme implémentées,
et aucun avertissement n'est émis pour eux.
-Wsélecteur (Objective-C et Objective-C++ uniquement)
Avertir si plusieurs méthodes de types différents pour le même sélecteur sont trouvées pendant
compilation. Le contrôle est effectué sur la liste des méthodes en phase finale de
compilation. De plus, une vérification est effectuée pour chaque sélecteur apparaissant dans un
expression "@selector(...)", et une méthode correspondante pour ce sélecteur a été
trouvé lors de la compilation. Parce que ces contrôles analysent la table des méthodes uniquement à la fin
de compilation, ces avertissements ne sont pas produits si l'étape finale de compilation est
pas atteint, par exemple parce qu'une erreur est détectée lors de la compilation, ou parce que le
-fsyntaxe-seulement l'option est utilisée.
-Correspondance du sélecteur strict (Objective-C et Objective-C++ uniquement)
Avertir si plusieurs méthodes avec des arguments et/ou des types de retour différents sont trouvées pour un
sélecteur donné lors de la tentative d'envoi d'un message à l'aide de ce sélecteur à un destinataire de
tapez « id » ou « Classe ». Lorsque cet indicateur est désactivé (ce qui est le comportement par défaut), le
le compilateur omet ces avertissements si les différences trouvées sont confinées aux types qui partagent
la même taille et le même alignement.
-Wundeclared-sélecteur (Objective-C et Objective-C++ uniquement)
Avertir si une expression "@selector(...)" faisant référence à un sélecteur non déclaré est trouvée. UNE
le sélecteur est considéré comme non déclaré si aucune méthode portant ce nom n'a été déclarée auparavant
l'expression "@selector(...)", soit explicitement dans une @interface ou @protocol
déclaration, ou implicitement dans une section @implementation. Cette option exécute toujours
ses vérifications dès qu'une expression "@selector(...)" est trouvée, tandis que -Wsélecteur uniquement
effectue ses vérifications en phase finale de compilation. Cela renforce également le codage
convention de style selon laquelle les méthodes et les sélecteurs doivent être déclarés avant d'être utilisés.
-print-objc-runtime-info
Générez un en-tête C décrivant la plus grande structure transmise par valeur, le cas échéant.
Options à Contrôle Diagnostique Messages formatage
Traditionnellement, les messages de diagnostic ont été formatés indépendamment du périphérique de sortie
aspect (ex. sa largeur, ...). Vous pouvez utiliser les options décrites ci-dessous pour contrôler le
algorithme de formatage pour les messages de diagnostic, par exemple combien de caractères par ligne, à quelle fréquence
les informations sur l'emplacement de la source doivent être signalées. Notez que certains frontaux de langage peuvent
pas honorer ces options.
-fmessage-longueur=n
Essayez de formater les messages d'erreur afin qu'ils tiennent sur des lignes d'environ n personnages. Si n is
zéro, alors aucun retour à la ligne n'est effectué ; chaque message d'erreur apparaît sur une seule ligne.
C'est la valeur par défaut pour tous les frontaux.
-fdiagnostics-show-location=une fois
Significatif uniquement en mode de retour à la ligne. Demande au rapporteur des messages de diagnostic de
émettre des informations sur l'emplacement de la source une fois; c'est-à-dire, au cas où le message est trop long pour tenir
sur une seule ligne physique et doit être encapsulé, l'emplacement source ne sera pas émis
(comme préfixe) encore et encore, dans les lignes de continuation suivantes. C'est le
comportement par défaut.
-fdiagnostics-show-location=chaque ligne
Significatif uniquement en mode de retour à la ligne. Demande au rapporteur des messages de diagnostic de
émettre les mêmes informations de localisation source (comme préfixe) pour les lignes physiques qui en résultent
du processus de rupture d'un message trop long pour tenir sur une seule ligne.
-fdiagnostics-couleur[=QUAND]
-fno-diagnostics-couleur
Utilisez la couleur dans les diagnostics. QUAND is jamais, toujours, ou auto. La valeur par défaut dépend de la façon dont
le compilateur a été configuré, il peut s'agir de l'un des éléments ci-dessus QUAND options ou aussi
jamais if GCC_COLORS la variable d'environnement n'est pas présente dans l'environnement, et auto
autrement. auto signifie utiliser la couleur uniquement lorsque l'erreur standard est un terminal. Les
document -fdiagnostics-couleur et -fno-diagnostics-couleur sont des alias pour
-fdiagnostics-color=toujours et -fdiagnostics-color=jamais, Respectivement.
Les couleurs sont définies par la variable d'environnement GCC_COLORS. Sa valeur est un deux-points
liste séparée des capacités et des sous-chaînes Select Graphic Rendition (SGR). SGR
les commandes sont interprétées par le terminal ou l'émulateur de terminal. (Voir la section dans
la documentation de votre terminal de texte pour les valeurs autorisées et leurs significations comme
attributs de caractère.) Ces valeurs de sous-chaîne sont des entiers en représentation décimale
et peut être concaténé avec des points-virgules. Les valeurs communes à concaténer incluent 1 pour
gras, 4 pour souligner, 5 pour cligner des yeux, 7 pour l'inverse, 39 pour la couleur de premier plan par défaut, 30
à 37 pour les couleurs de premier plan, 90 à 97 pour les couleurs de premier plan en mode 16 couleurs, 38; 5; 0 à
38; 5; 255 pour les modes 88 couleurs et 256 couleurs couleurs de premier plan, 49 pour l'arrière-plan par défaut
couleur, 40 à 47 pour les couleurs de fond, 100 à 107 pour les couleurs d'arrière-plan du mode 16 couleurs,
et 48; 5; 0 à 48; 5; 255 pour les couleurs d'arrière-plan des modes 88 couleurs et 256 couleurs.
Le défaut GCC_COLORS is
error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01
où 01; 31 est rouge gras, 01; 35 est magenta gras, 01; 36 est en gras cyan, 01; 32 est audacieux
vert et 01 est audacieux. Réglage GCC_COLORS à la chaîne vide désactive les couleurs.
Les capacités prises en charge sont les suivantes.
"erreur="
Sous-chaîne SGR pour l'erreur : marqueurs.
"avertissement="
Sous-chaîne SGR pour l'avertissement : marqueurs.
"remarque="
Sous-chaîne SGR pour la note : marqueurs.
"caret="
Sous-chaîne SGR pour la ligne caret.
"locus="
sous-chaîne SGR pour les informations de localisation, fichier:ligne or fichier:ligne:colonne et ainsi de suite
"citation="
Sous-chaîne SGR pour les informations imprimées entre guillemets.
-fno-diagnostics-show-option
Par défaut, chaque diagnostic émis comprend un texte indiquant l'option de ligne de commande
qui contrôle directement le diagnostic (si une telle option est connue du diagnostic
machinerie). Spécification du -fno-diagnostics-show-option drapeau supprime que
comportement.
-fno-diagnostics-show-caret
Par défaut, chaque diagnostic émis comprend la ligne source d'origine et un caret '^'
indiquant la colonne. Cette option supprime ces informations. La ligne source est
tronqué à n caractères, si le -fmessage-longueur=n option est donnée. Lorsque la sortie
se fait au terminal, la largeur est limitée à la largeur donnée par le COLONNES
variable d'environnement ou, si elle n'est pas définie, à la largeur du terminal.
Options à Requêter or Supprimer Avertissements
Les avertissements sont des messages de diagnostic qui signalent des constructions qui ne sont pas intrinsèquement
erronées mais qui sont risquées ou suggèrent qu'il peut y avoir eu une erreur.
Les options suivantes, indépendantes de la langue, n'activent pas d'avertissements spécifiques mais contrôlent la
types de diagnostics produits par GCC.
-fsyntaxe-seulement
Vérifiez le code pour les erreurs de syntaxe, mais ne faites rien au-delà.
-fmax-erreurs=n
Limite le nombre maximum de messages d'erreur à n, à quel point GCC renfloue plutôt
que d'essayer de continuer à traiter le code source. Si n est 0 (la valeur par défaut),
il n'y a pas de limite sur le nombre de messages d'erreur produits. Si -Wfatal-erreurs est également
spécifié, alors -Wfatal-erreurs prime sur cette option.
-w Inhiber tous les messages d'avertissement.
-Werreur
Transformez tous les avertissements en erreurs.
-Werreur=
Transformez l'avertissement spécifié en erreur. Le spécificateur d'un avertissement est ajouté ;
par exemple -Werror=commutateur transforme les avertissements contrôlés par -Wswitch en erreurs.
Ce commutateur prend une forme négative, à utiliser pour annuler -Werreur pour des avertissements spécifiques ;
par exemple -Wno-error=commutateur fait -Wswitch les avertissements ne sont pas des erreurs, même lorsque -Werreur
est en vigueur.
Le message d'avertissement pour chaque avertissement contrôlable comprend l'option qui contrôle
l'avertissement. Cette option peut ensuite être utilisée avec -Werreur= et -Wno-erreur= comme décrit
dessus. (L'impression de l'option dans le message d'avertissement peut être désactivée à l'aide de la
-fno-diagnostics-show-option drapeau.)
Notez qu'en spécifiant -Werreur=foo implique automatiquement -Wfoo. Toutefois, -Wno-erreur=foo
n'implique rien.
-Wfatal-erreurs
Cette option provoque l'abandon de la compilation par le compilateur à la première erreur survenue
plutôt que d'essayer de continuer et d'imprimer d'autres messages d'erreur.
Vous pouvez demander de nombreux avertissements spécifiques avec des options commençant par -W, Par exemple
-Wimplicite pour demander des avertissements sur les déclarations implicites. Chacun de ces avertissements spécifiques
options a également une forme négative commençant -Wnon- pour désactiver les avertissements ; par exemple,
-Wno-implicite. Ce manuel ne répertorie qu'un seul des deux formulaires, celui qui n'est pas celui par défaut.
Pour d'autres options spécifiques à la langue, reportez-vous également à C + + Dialecte Options et Objective-C
et Objective-C ++ Dialecte Options.
Certaines options, telles que -Mur et -Wextra, activez d'autres options, telles que -Wunutilisé, Qui
peut activer d'autres options, telles que -Wvaleur non utilisée. L'effet combiné des effets positifs et
formes négatives est que les options plus spécifiques ont la priorité sur les moins spécifiques,
indépendamment de leur position dans la ligne de commande. Pour les options de même spécificité,
le dernier prend effet. Les options activées ou désactivées via les pragmas prennent effet comme si elles
apparaissait à la fin de la ligne de commande.
Lorsqu'une option d'avertissement non reconnue est demandée (par exemple, -Wunknown-avertissement), GCC émet un
diagnostic indiquant que l'option n'est pas reconnue. Cependant, si le -Wnon- le formulaire est utilisé,
le comportement est légèrement différent : aucun diagnostic n'est produit pour -Wno-inconnu-avertissement
à moins que d'autres diagnostics ne soient produits. Cela permet d'utiliser de nouvelles -Wnon- Options
avec les anciens compilateurs, mais si quelque chose ne va pas, le compilateur avertit qu'un
l'option est présente.
-Wpédantique
-pédant
Émettre tous les avertissements exigés par les normes ISO C et ISO C++ strictes ; rejeter tous les programmes qui
utiliser des extensions interdites et d'autres programmes qui ne suivent pas ISO C et ISO
C++. Pour ISO C, suit la version de la norme ISO C spécifiée par tout -std
option utilisée.
Les programmes ISO C et ISO C++ valides doivent compiler correctement avec ou sans cette option
(bien que quelques rares nécessitent -ansi ou -std option spécifiant la version requise de
ISOC). Cependant, sans cette option, certaines extensions GNU et C et
Les fonctionnalités C++ sont également prises en charge. Avec cette option, ils sont rejetés.
-Wpédantique ne provoque pas de messages d'avertissement pour l'utilisation des mots-clés alternatifs dont
les noms commencent et se terminent par __. Les avertissements pédants sont également désactivés dans l'expression
qui suit "__extension__". Cependant, seuls les fichiers d'en-tête système doivent utiliser ces
les voies d'évacuation; les programmes d'application devraient les éviter.
Certains utilisateurs essaient d'utiliser -Wpédantique pour vérifier la stricte conformité ISO C des programmes. Ils
découvrent vite qu'il ne fait pas tout à fait ce qu'ils veulent : il trouve des pratiques non-ISO,
mais pas tous --- seulement ceux pour lesquels ISO C a besoin un diagnostic, et quelques autres pour
quels diagnostics ont été ajoutés.
Une fonctionnalité pour signaler tout non-respect de la norme ISO C peut être utile dans certains cas,
mais exigerait un travail supplémentaire considérable et serait tout à fait différent de
-Wpédantique. Nous n'avons pas l'intention de prendre en charge une telle fonctionnalité dans un avenir proche.
Lorsque la norme spécifiée avec -std représente un dialecte étendu GNU de C, tel que
gnu90 or gnu99, il y a un correspondant base Standard, la version de l'ISO C sur laquelle
le dialecte étendu GNU est basé. Avertissements de -Wpédantique sont donnés là où ils sont
requis par la norme de base. (Cela n'a pas de sens que de tels avertissements soient donnés
uniquement pour les fonctionnalités qui ne sont pas dans le dialecte GNU C spécifié, puisque par définition le GNU
les dialectes de C incluent toutes les fonctionnalités que le compilateur prend en charge avec l'option donnée, et
il n'y aurait rien à signaler.)
-pédant-erreurs
Donner une erreur chaque fois que le base Standard (voir -Wpédantique) nécessite un diagnostic, en
certains cas où il y a un comportement indéfini au moment de la compilation et dans d'autres cas
qui n'empêchent pas la compilation de programmes valides selon la norme.
Ce n'est pas équivalent à -Werror=pédant, car il y a des erreurs activées par ce
option et non activé par ce dernier et vice versa.
-Mur
Cela active tous les avertissements sur les constructions que certains utilisateurs considèrent
discutable, et qui sont faciles à éviter (ou à modifier pour empêcher l'avertissement), même dans
en conjonction avec des macros. Cela active également certains avertissements spécifiques à la langue décrits
in C + + Dialecte Options et Objective-C et Objective-C ++ Dialecte Options.
-Mur active les drapeaux d'avertissement suivants :
-Adresse -Warray-limites=1 (seulement avec -O2) -Wc++11-compatible -Wc++14-compatible
-Wchar-indices -Wenum-comparer (en C/ObjC ; activé par défaut en C++)
-Wimplicit-int (C et Objective-C uniquement) -Wimplicit-fonction-déclaration (C et
Objectif-C uniquement) -Commentaire -Wformat -Wmain (uniquement pour C/ObjC et sauf si
-fautoportant) -Wpeut-être-non-initialisé -Wmissing-bracelets (uniquement pour C/ObjC) -Wnon nul
-Wopenmp-simd -Parenthèses -Wpointer-signe -Wororder -Type épave -Wpoint-séquence
-Wsign-comparer (uniquement en C++) -Wstrict-aliasing -Wstrict-overflow=1 -Wswitch
-Wtrigraphes -Wuninitialisé -Pragmas-inconnus -Wunused-fonction -Étiquette non utilisée
-Wvaleur non utilisée -Wvariable-inutilisée -Wvolatile-registre-var
Notez que certains drapeaux d'avertissement ne sont pas impliqués par -Mur. Certains d'entre eux mettent en garde contre
constructions que les utilisateurs ne jugent généralement pas contestables, mais qui
occasionnellement, vous souhaiterez peut-être vérifier ; d'autres mettent en garde contre les constructions
nécessaire ou difficile à éviter dans certains cas, et il n'y a pas de moyen simple de modifier le
code pour supprimer l'avertissement. Certains d'entre eux sont activés par -Wextra mais beaucoup d'entre eux
doit être activé individuellement.
-Wextra
Cela active certains indicateurs d'avertissement supplémentaires qui ne sont pas activés par -Mur. (Cette option a utilisé
être appelé -W. L'ancien nom est toujours pris en charge, mais le nouveau nom est plus
descriptif.)
-Wclobbé -Wempty-corps -Wignored-qualificatifs -Wmissing-field-initialiseurs
-Type de paramètre manquant (C uniquement) -Wold-style-déclaration (C uniquement) -Woverride-init
-Wsign-comparer -Wtype-limites -Wuninitialisé -Wunused-paramètre (seulement avec -Wunutilisé or
-Mur) -Paramètre non utilisé mais défini (seulement avec -Wunutilisé or -Mur)
L'option -Wextra imprime également des messages d'avertissement pour les cas suivants :
* Un pointeur est comparé à un entier zéro avec "<", "<=", ">" ou ">=".
* (C++ uniquement) Un énumérateur et un non-énumérateur apparaissent tous les deux dans un
expression.
* (C++ uniquement) Bases virtuelles ambiguës.
* (C++ uniquement) Subscripting d'un tableau qui a été déclaré "register".
* (C++ uniquement) Prenant l'adresse d'une variable qui a été déclarée "register".
* (C++ uniquement) Une classe de base n'est pas initialisée dans le constructeur de copie d'une classe dérivée.
-Wchar-indices
Avertir si un indice de tableau a le type "char". Il s'agit d'une cause fréquente d'erreur, car
les programmeurs oublient souvent que ce type est signé sur certaines machines. Cet avertissement est
activé par -Mur.
-Commentaire
Avertir chaque fois qu'une séquence de début de commentaire /* apparaît dans un /* commentaire, ou chaque fois qu'un
Backslash-Newline apparaît dans un // commenter. Cet avertissement est activé par -Mur.
-Wno-couverture-incompatibilité
Avertir si les profils de commentaires ne correspondent pas lors de l'utilisation du -fprofil-utilisation option. Si un
le fichier source est modifié entre la compilation avec -fprofile-gen et avec -fprofil-utilisation,
les fichiers avec les commentaires de profil peuvent ne pas correspondre au fichier source et GCC ne peut pas
utiliser les informations de retour de profil. Par défaut, cet avertissement est activé et est
traité comme une erreur. -Wno-couverture-incompatibilité peut être utilisé pour désactiver l'avertissement ou
-Wno-error=couverture-mismatch peut être utilisé pour désactiver l'erreur. Désactiver l'erreur
car cet avertissement peut entraîner un code mal optimisé et n'est utile que dans le cas de
des changements très mineurs tels que des corrections de bogues sur une base de code existante. Désactivant complètement
l'avertissement n'est pas recommandé.
-Wno-cpp
(C, Objective-C, C++, Objective-C++ et Fortran uniquement)
Supprime les messages d'avertissement émis par les directives "#warning".
-Wdouble-promotion (C, C++, Objective-C et Objective-C++ uniquement)
Donne un avertissement lorsqu'une valeur de type "float" est implicitement promue à "double". CPU
avec une unité à virgule flottante "simple précision" 32 bits implémentant "flotter" dans le matériel,
mais émuler "double" dans le logiciel. Sur une telle machine, faire des calculs en utilisant
les valeurs "doubles" sont beaucoup plus chères en raison de la surcharge requise pour le logiciel
émulation.
Il est facile de faire accidentellement des calculs avec "double" car la virgule flottante
les littéraux sont implicitement de type "double". Par exemple, dans :
zone de flottement (rayon de flottement)
{
renvoie 3.14159 * rayon * rayon ;
}
le compilateur effectue tout le calcul avec "double" car la virgule flottante
le littéral est un "double".
-Wformat
-Wformat=n
Vérifiez les appels à "printf" et "scanf", etc., pour vous assurer que les arguments fournis
ont des types appropriés à la chaîne de format spécifiée, et que les conversions
spécifié dans la chaîne de format a du sens. Cela inclut les fonctions standard et
d'autres spécifiés par les attributs de format, dans le "printf", "scanf", "strftime" et
"strfmon" (une extension X/Open, pas dans le standard C) (ou autre cible-
familles spécifiques). Quelles fonctions sont vérifiées sans que les attributs de format aient été
spécifié dépend de la version standard sélectionnée, et ces contrôles de fonctions
sans l'attribut spécifié sont désactivés par -fautoportant or -fno-intégré.
Les formats sont vérifiés par rapport aux fonctionnalités de format prises en charge par GNU libc version 2.2.
Celles-ci incluent toutes les fonctionnalités ISO C90 et C99, ainsi que les fonctionnalités de Single Unix
Spécification et quelques extensions BSD et GNU. D'autres implémentations de bibliothèque peuvent ne pas
prendre en charge toutes ces fonctionnalités ; GCC ne prend pas en charge les avertissements concernant les fonctionnalités qui vont au-delà
les limites d'une bibliothèque particulière. Toutefois, si -Wpédantique s'utilise avec -Wformat,
des avertissements sont donnés concernant les fonctionnalités de format qui ne figurent pas dans la version standard sélectionnée (mais pas
pour les formats "strfmon", car ceux-ci ne sont dans aucune version du standard C).
-Wformat=1
-Wformat
Option -Wformat équivaut à -Wformat=1 et -Wno-format équivaut à
-Wformat=0. Depuis -Wformat vérifie également les arguments de format nul pour plusieurs
fonctions, -Wformat implique également -Wnon nul. Quelques aspects de ce niveau de format
la vérification peut être désactivée par les options : -Wno-format-contient-nul,
-Wno-format-extra-arguments et -Wno-format-zéro-longueur. -Wformat est activé par
-Mur.
-Wno-format-contient-nul
If -Wformat est spécifié, ne pas avertir des chaînes de format qui contiennent des octets NUL.
-Wno-format-extra-arguments
If -Wformat est spécifié, ne pas avertir des excès d'arguments à un "printf" ou
fonction de formatage "scanf". La norme C spécifie que de tels arguments sont
ignoré.
Où les arguments inutilisés se situent entre les arguments utilisés qui sont spécifiés avec $
spécifications de numéro d'opérande, normalement des avertissements sont toujours donnés, car le
l'implémentation n'a pas pu savoir quel type passer à "va_arg" pour ignorer les inutilisés
arguments. Cependant, dans le cas des formats "scanf", cette option supprime le
avertissement si les arguments inutilisés sont tous des pointeurs, puisque le Single Unix
La spécification dit que de tels arguments inutilisés sont autorisés.
-Wno-format-zéro-longueur
If -Wformat est spécifié, ne pas avertir des formats de longueur nulle. La norme C
spécifie que les formats de longueur nulle sont autorisés.
-Wformat=2
Activer -Wformat ainsi que des contrôles de format supplémentaires. Actuellement équivalent à -Wformat
-Wformat-non littéral -Wformat-sécurité -Wformat-y2k.
-Wformat-non littéral
If -Wformat est spécifié, avertit également si la chaîne de format n'est pas un littéral de chaîne
et ne peut donc pas être vérifié, sauf si la fonction format prend ses arguments de format comme
une "va_list".
-Wformat-sécurité
If -Wformat est spécifié, avertit également des utilisations des fonctions de format qui représentent
problèmes de sécurité possibles. À l'heure actuelle, cela met en garde contre les appels à "printf" et
fonctions "scanf" où la chaîne de format n'est pas un littéral de chaîne et il n'y a pas
arguments de format, comme dans "printf (foo);". Cela peut être une faille de sécurité si le
la chaîne de format provient d'une entrée non fiable et contient %n. (C'est actuellement un
sous-ensemble de quoi -Wformat-non littéral avertit, mais à l'avenir, des avertissements peuvent être
ajouté à -Wformat-sécurité qui ne sont pas inclus dans -Wformat-non littéral.)
-Wformat-signature
If -Wformat est spécifié, avertit également si la chaîne de format nécessite un non signé
argument et l'argument est signé et vice versa.
REMARQUE : dans Ubuntu 8.10 et les versions ultérieures, cette option est activée par défaut pour C,
C++, ObjC, ObjC++. Pour désactiver, utilisez -Wno-format-sécurité, ou désactiver tous les formats
avertissements avec -Wformat=0. Pour rendre les avertissements de sécurité de format fatals, spécifiez
-Werror=format-sécurité.
-Wformat-y2k
If -Wformat est spécifié, avertit également des formats "strftime" qui peuvent ne donner qu'un
année à deux chiffres.
-Wnon nul
Avertir de la transmission d'un pointeur nul pour les arguments marqués comme nécessitant une valeur non nulle
par l'attribut de fonction "non null".
-Wnon nul est inclus dans -Mur et -Wformat. Il peut être désactivé avec le -Wno-non nul
option.
-Winit-soi (C, C++, Objective-C et Objective-C++ uniquement)
Avertir des variables non initialisées qui sont initialisées avec elles-mêmes. Notez ceci
l'option ne peut être utilisée qu'avec le -Wuninitialisé option.
Par exemple, GCC avertit que "i" n'est pas initialisé dans l'extrait suivant uniquement
quand -Winit-soi a été précisé :
entier f()
{
entier i = i;
return i;
}
Cet avertissement est activé par -Mur en C ++.
-Wimplicit-int (C et Objective-C uniquement)
Avertir lorsqu'une déclaration ne spécifie pas de type. Cet avertissement est activé par -Mur.
-Wimplicit-fonction-déclaration (C et Objective-C uniquement)
Donne un avertissement chaque fois qu'une fonction est utilisée avant d'être déclarée. En mode C99
(-std=c99 or -std=gnu99), cet avertissement est activé par défaut et il est transformé en un
erreur par -pédant-erreurs. Cet avertissement est également activé par -Mur.
-Wimplicite (C et Objective-C uniquement)
Pareil que -Wimplicit-int et -Wimplicit-fonction-déclaration. Cet avertissement est activé
by -Mur.
-Wignored-qualificatifs (C et C++ uniquement)
Avertir si le type de retour d'une fonction a un qualificateur de type tel que "const". Pour ISO C
un tel qualificatif de type n'a aucun effet, puisque la valeur renvoyée par une fonction n'est pas un
lvaleur. Pour le C++, l'avertissement n'est émis que pour les types scalaires ou "void". ISO C
interdit les types de retour qualifiés « void » sur les définitions de fonction, donc de tels types de retour
recevez toujours un avertissement même sans cette option.
Cet avertissement est également activé par -Wextra.
-Wmain
Avertir si le type de "principal" est suspect. "principal" devrait être une fonction avec externe
liaison, retournant un entier, prenant soit zéro argument, soit deux ou trois arguments de
types appropriés. Cet avertissement est activé par défaut en C++ et est activé soit par
-Mur or -Wpédantique.
-Wmissing-bracelets
Avertir si un initialiseur d'agrégat ou d'union n'est pas entièrement encadré. Dans ce qui suit
exemple, l'initialiseur pour "a" n'est pas entièrement entre crochets, mais celui pour "b" est entièrement
entre crochets. Cet avertissement est activé par -Mur dans C.
int a[2][2] = { 0, 1, 2, 3 } ;
int b[2][2] = { { 0, 1 }, { 2, 3 } } ;
Cet avertissement est activé par -Mur.
-Wmissing-include-répertoires (C, C++, Objective-C et Objective-C++ uniquement)
Avertir si un répertoire d'inclusion fourni par l'utilisateur n'existe pas.
-Parenthèses
Avertir si les parenthèses sont omises dans certains contextes, comme lorsqu'il y a un
affectation dans un contexte où une valeur de vérité est attendue, ou lorsque les opérateurs sont imbriqués
dont les gens sont souvent confus au sujet de la préséance.
Avertir également si une comparaison comme "x<=y<=z" apparaît ; cela équivaut à "(x<=y ? 1 :
0) <= z", qui est une interprétation différente de celle des mathématiques ordinaires
notation.
Avertissez également des constructions où il peut y avoir une confusion quant à l'énoncé "if" d'un
La branche "autre" appartient. Voici un exemple d'un tel cas :
{
si un)
si (b)
foto ();
d'autre
bar ();
}
En C/C++, chaque branche "else" appartient à l'instruction "if" la plus interne possible, qui
dans cet exemple est "si (b)". Ce n'est souvent pas ce que le programmeur attendait, car
illustré dans l'exemple ci-dessus par l'indentation choisie par le programmeur. Quand il y a
le potentiel de cette confusion, GCC émet un avertissement lorsque ce drapeau est spécifié.
Pour éliminer l'avertissement, ajoutez des accolades explicites autour de l'instruction "if" la plus interne afin
il n'y a aucun moyen que le "autre" puisse appartenir au "si" englobant. Le code résultant ressemble
comme ça:
{
si un)
{
si (b)
foto ();
d'autre
bar ();
}
}
Avertir également pour les utilisations dangereuses de l'extension GNU à "?:" avec l'opérande central omis.
Lorsque la condition dans l'opérateur "?": est une expression booléenne, la valeur omise est
toujours 1. Souvent, les programmeurs s'attendent à ce qu'il s'agisse d'une valeur calculée à l'intérieur du conditionnel
expression à la place.
Cet avertissement est activé par -Mur.
-Wpoint-séquence
Avertir du code qui peut avoir une sémantique indéfinie en raison de violations de séquence
règles de points dans les normes C et C++.
Les normes C et C++ définissent l'ordre dans lequel les expressions d'un programme C/C++ sont
évalué en termes de séquence des notes bonus, qui représentent un ordre partiel entre les
l'exécution de parties du programme : celles exécutées avant le point de séquence, et celles
exécuté après. Ceux-ci se produisent après l'évaluation d'une expression complète (qui
ne fait pas partie d'une expression plus large), après l'évaluation du premier opérande d'un
Opérateur "&&", "||", "? :" ou "," (virgule), avant l'appel d'une fonction (mais après le
évaluation de ses arguments et de l'expression désignant la fonction appelée), et en
certains autres endroits. Sauf comme indiqué par les règles de point de séquence, l'ordre
d'évaluation des sous-expressions d'une expression n'est pas spécifié. Toutes ces règles
ne décrivez qu'une commande partielle plutôt qu'une commande totale, puisque, par exemple, si deux
les fonctions sont appelées dans une expression sans point de séquence entre elles, le
l'ordre dans lequel les fonctions sont appelées n'est pas spécifié. Cependant, les normes
comité ont décidé que les appels de fonction ne se chevauchent pas.
Il n'est pas précisé quand entre les points de séquence des modifications des valeurs de
les objets prennent effet. Les programmes dont le comportement en dépend ont un comportement indéfini ;
les normes C et C++ spécifient que "Entre la séquence précédente et suivante point un
objet doit avoir sa valeur stockée modifiée au plus une fois par l'évaluation d'un
expression. De plus, la valeur précédente doit être lue uniquement pour déterminer la valeur à
être stocké.". Si un programme enfreint ces règles, les résultats sur n'importe quel
la mise en œuvre sont totalement imprévisibles.
Des exemples de code avec un comportement indéfini sont "a = a++;", "a[n] = b[n++]" et "a[i++] =
i;". Certains cas plus compliqués ne sont pas diagnostiqués par cette option, et cela peut donner un
résultat faux positif occasionnel, mais en général, il s'est avéré assez efficace à
détecter ce genre de problème dans les programmes.
La norme est formulée de manière confuse, il y a donc un débat sur la précision
signification des règles de point de séquence dans les cas subtils. Liens vers les discussions de la
problème, y compris les définitions formelles proposées, peuvent être trouvés sur la page des lectures GCC,
àhttp://gcc.gnu.org/readings.html>.
Cet avertissement est activé par -Mur pour C et C++.
-Wno-return-local-addr
Ne pas avertir du retour d'un pointeur (ou en C++, une référence) vers une variable qui va
hors de portée après le retour de la fonction.
-Type épave
Avertir chaque fois qu'une fonction est définie avec un type de retour qui est par défaut "int". Aussi
avertir de toute instruction "return" sans valeur de retour dans une fonction dont le type de retour
n'est pas « void » (le fait de tomber à la fin du corps de la fonction est considéré comme un retour
sans valeur) et à propos d'une instruction "return" avec une expression dans une fonction
dont le type de retour est « void ».
Pour C++, une fonction sans type de retour produit toujours un message de diagnostic, même
quand -Type sans retour est spécifié. Les seules exceptions sont "main" et les fonctions
défini dans les en-têtes du système.
Cet avertissement est activé par -Mur.
-Wshift-count-négatif
Avertir si le nombre d'équipes est négatif. Cet avertissement est activé par défaut.
-Wshift-count-overflow
Avertir si nombre de décalages >= largeur du type. Cet avertissement est activé par défaut.
-Wswitch
Avertir chaque fois qu'une instruction "switch" a un index de type énuméré et n'a pas de "case"
pour un ou plusieurs des codes nommés de cette énumération. (La présence d'un "défaut"
label empêche cet avertissement.) les étiquettes "case" en dehors de la plage d'énumération
provoquer des avertissements lorsque cette option est utilisée (même s'il existe un libellé "par défaut"). Cette
l'avertissement est activé par -Mur.
-Wswitch-par défaut
Avertir chaque fois qu'une instruction « switch » n'a pas de casse « par défaut ».
-Wswitch-énumération
Avertir chaque fois qu'une instruction "switch" a un index de type énuméré et n'a pas de "case"
pour un ou plusieurs des codes nommés de cette énumération. étiquettes « cas » en dehors du
la plage d'énumération provoque également des avertissements lorsque cette option est utilisée. La seule différence
jusqu'à XNUMX fois -Wswitch et cette option est que cette option donne un avertissement sur un omis
code d'énumération même s'il y a une étiquette "par défaut".
-Wswitch-bool
Avertir chaque fois qu'une instruction "switch" a un index de type booléen. Il est possible de
supprimer cet avertissement en transtypant l'expression de contrôle dans un type autre que
"bool". Par exemple:
commutateur ((int) (a == 4))
{
}
Cet avertissement est activé par défaut pour les programmes C et C++.
-Wsync-nand (C et C++ uniquement)
Avertir lorsque les fonctions intégrées "__sync_fetch_and_nand" et "__sync_nand_and_fetch" sont
utilisé. Ces fonctions ont changé la sémantique dans GCC 4.4.
-Wtrigraphes
Avertir si des trigraphes sont rencontrés qui pourraient changer le sens du programme
(les trigraphes dans les commentaires ne sont pas avertis). Cet avertissement est activé par -Mur.
-Paramètre non utilisé mais défini
Avertir chaque fois qu'un paramètre de fonction est affecté à, mais autrement inutilisé (à part
sa déclaration).
Pour supprimer cet avertissement, utilisez l'attribut "unused".
Cet avertissement est également activé par -Wunutilisé avec -Wextra.
-Winutilisé-mais-set-variable
Avertir chaque fois qu'une variable locale est affectée à, mais autrement inutilisée (à part son
déclaration). Cet avertissement est activé par -Mur.
Pour supprimer cet avertissement, utilisez l'attribut "unused".
Cet avertissement est également activé par -Wunutilisé, qui est activé par -Mur.
-Wunused-fonction
Avertir chaque fois qu'une fonction statique est déclarée mais non définie ou qu'une fonction statique n'est pas en ligne
la fonction n'est pas utilisée. Cet avertissement est activé par -Mur.
-Étiquette non utilisée
Avertir chaque fois qu'une étiquette est déclarée mais non utilisée. Cet avertissement est activé par -Mur.
Pour supprimer cet avertissement, utilisez l'attribut "unused".
-Wunused-local-typedefs (C, Objective-C, C++ et Objective-C++ uniquement)
Avertir lorsqu'un typedef défini localement dans une fonction n'est pas utilisé. Cet avertissement est
activé par -Mur.
-Wunused-paramètre
Avertir chaque fois qu'un paramètre de fonction n'est pas utilisé en dehors de sa déclaration.
Pour supprimer cet avertissement, utilisez l'attribut "unused".
-Wno-résultat-inutilisé
Ne pas avertir si un appelant d'une fonction marquée avec l'attribut "warn_unused_result" le fait
pas utiliser sa valeur de retour. La valeur par défaut est -Wrésultat-inutilisé.
-Wvariable-inutilisée
Avertir chaque fois qu'une variable locale ou une variable statique non constante est inutilisée en dehors de
sa déclaration. Cet avertissement est activé par -Mur.
Pour supprimer cet avertissement, utilisez l'attribut "unused".
-Wvaleur non utilisée
Avertir chaque fois qu'une instruction calcule un résultat qui n'est explicitement pas utilisé. Supprimer
cet avertissement convertit l'expression inutilisée en « void ». Cela inclut une expression-
déclaration ou le côté gauche d'une expression de virgule qui ne contient aucun effet secondaire.
Par exemple, une expression telle que "x[i,j]" provoque un avertissement, tandis que "x[(void)i,j]"
ne fait pas.
Cet avertissement est activé par -Mur.
-Wunutilisé
Tout ce qui précède -Wunutilisé options combinées.
Afin d'obtenir un avertissement concernant un paramètre de fonction inutilisé, vous devez soit spécifier
-Wextra -Wunutilisé (Notez que -Mur implique -Wunutilisé), ou spécifiez séparément
-Wunused-paramètre.
-Wuninitialisé
Avertir si une variable automatique est utilisée sans être initialisée au préalable ou si une variable
peut être écrasé par un appel "setjmp". En C++, avertir si une référence non statique ou non
Le membre statique "const" apparaît dans une classe sans constructeurs.
Si vous souhaitez avertir du code qui utilise la valeur non initialisée de la variable dans
son propre initialiseur, utilisez le -Winit-soi option.
Ces avertissements se produisent pour des éléments de structure individuels non initialisés ou tronqués,
les variables d'union ou de tableau ainsi que pour les variables non initialisées ou écrasées
dans son ensemble. Ils ne se produisent pas pour les variables ou les éléments déclarés "volatils". Parce que
ces avertissements dépendent de l'optimisation, des variables ou éléments exacts pour lesquels il
Ces avertissements dépendent des options d'optimisation précises et de la version de GCC utilisée.
Notez qu'il peut n'y avoir aucun avertissement concernant une variable qui est utilisée uniquement pour calculer un
valeur qui elle-même n'est jamais utilisée, car de tels calculs peuvent être supprimés par le flux de données
analyse avant l'impression des avertissements.
-Wpeut-être-non-initialisé
Pour une variable automatique, s'il existe un chemin de l'entrée de la fonction à une utilisation de
la variable qui est initialisée, mais il existe d'autres chemins pour lesquels le
variable n'est pas initialisée, le compilateur émet un avertissement s'il ne peut pas prouver la
les chemins non initialisés ne sont pas exécutés au moment de l'exécution. Ces avertissements sont rendus facultatifs
parce que GCC n'est pas assez intelligent pour voir toutes les raisons pour lesquelles le code pourrait être correct
malgré l'apparence d'avoir une erreur. Voici un exemple de la façon dont cela peut se produire :
{
int x;
interrupteur (y)
{
cas 1 : x = 1 ;
break;
cas 2 : x = 4 ;
break;
cas 3 : x = 5 ;
}
foo (x);
}
Si la valeur de "y" est toujours 1, 2 ou 3, alors "x" est toujours initialisé, mais GCC
ne le sait pas. Pour supprimer l'avertissement, vous devez fournir un cas par défaut avec
affirmer(0) ou un code similaire.
Cette option avertit également lorsqu'une variable automatique non volatile peut être modifiée par un
appel à "longjmp". Ces avertissements ne sont également possibles qu'en optimisant
compilation.
Le compilateur ne voit que les appels à "setjmp". Il ne peut pas savoir où sera "longjmp"
appelé; en fait, un gestionnaire de signal pourrait l'appeler à n'importe quel point du code. Comme un
résultat, vous pouvez recevoir un avertissement même s'il n'y a en fait aucun problème car "longjmp"
ne peut en effet être appelé à l'endroit qui poserait problème.
Certains avertissements fallacieux peuvent être évités si vous déclarez toutes les fonctions que vous utilisez
ne revient jamais en tant que "noreturn".
Cet avertissement est activé par -Mur or -Wextra.
-Pragmas-inconnus
Avertir lorsqu'une directive "#pragma" est rencontrée qui n'est pas comprise par GCC. Si ce
l'option de ligne de commande est utilisée, des avertissements sont même émis pour des pragmas inconnus dans le système
fichiers d'en-tête. Ce n'est pas le cas si les avertissements ne sont activés que par le -Mur
option de ligne de commande.
-Wno-pragmas
Ne pas avertir des abus de pragmas, tels que des paramètres incorrects, une syntaxe invalide ou
conflits entre les pragmas. Voir également -Pragmas-inconnus.
-Wstrict-aliasing
Cette option n'est active que lorsque -fstrict-aliasing c'est actif. Il met en garde contre le code qui
peut enfreindre les règles d'alias strictes que le compilateur utilise pour l'optimisation.
L'avertissement ne détecte pas tous les cas, mais tente de détecter les cas les plus courants.
pièges. Il est inclus dans -Mur. C'est équivalent à -Wstrict-aliasing=3
-Wstrict-aliasing=n
Cette option n'est active que lorsque -fstrict-aliasing c'est actif. Il met en garde contre le code qui
peut enfreindre les règles d'alias strictes que le compilateur utilise pour l'optimisation.
Des niveaux plus élevés correspondent à une précision plus élevée (moins de faux positifs). Niveaux plus élevés
correspondent également à plus d'efforts, de la même manière -O œuvres. -Wstrict-aliasing is
équivalente à -Wstrict-aliasing=3.
Niveau 1 : le plus agressif, le plus rapide, le moins précis. Peut-être utile lorsque les niveaux supérieurs
ne préviens pas mais -fstrict-aliasing casse toujours le code, car il a très peu de faux
négatifs. Cependant, il contient de nombreux faux positifs. Avertit pour toutes les conversions de pointeur
entre des types éventuellement incompatibles, même s'ils ne sont jamais déréférencés. Fonctionne à l'avant
fin seulement.
Niveau 2 : Agressif, rapide, pas trop précis. Peut encore avoir de nombreux faux positifs (pas
autant que le niveau 1 cependant), et peu de faux négatifs (mais peut-être plus que le niveau 1).
Contrairement au niveau 1, il avertit uniquement lorsqu'une adresse est prise. Avertit des types incomplets.
Fonctionne uniquement à l'avant.
Niveau 3 (par défaut pour -Wstrict-aliasing) : Devrait avoir très peu de faux positifs et peu
faux négatifs. Légèrement plus lent que les niveaux 1 ou 2 lorsque l'optimisation est activée.
Prend en charge le modèle commun de jeu de mots + déréférencement dans le front-end :
"*(int*)&some_float". Si l'optimisation est activée, elle s'exécute également dans le back-end, où
il traite plusieurs cas d'instructions en utilisant des informations de point de départ sensibles au flux.
Avertit uniquement lorsque le pointeur converti est déréférencé. N'avertit pas d'incomplet
les types.
-Wstrict-débordement
-Wstrict-overflow=n
Cette option n'est active que lorsque -fstrict-débordement c'est actif. Il met en garde contre les cas
où le compilateur optimise en se basant sur l'hypothèse que le débordement signé ne
se produire. Notez qu'il ne prévient pas de tous les cas où le code pourrait déborder : il
avertit uniquement des cas où le compilateur implémente une optimisation. Ainsi ce
L'avertissement dépend du niveau d'optimisation.
Une optimisation qui suppose que le débordement signé ne se produit pas est parfaitement sûre si
les valeurs des variables impliquées sont telles que le débordement ne fait jamais, en fait,
se produire. Par conséquent, cet avertissement peut facilement donner un faux positif : un avertissement concernant le code
ce n'est pas vraiment un problème. Pour aider à se concentrer sur des questions importantes, plusieurs avertissements
les niveaux sont définis. Aucun avertissement n'est émis pour l'utilisation d'un débordement signé non défini
lors de l'estimation du nombre d'itérations nécessaires à une boucle, en particulier lors de la détermination
si une boucle sera exécutée.
-Wstrict-overflow=1
Avertissez des cas qui sont à la fois discutables et faciles à éviter. Par exemple, avec
-fstrict-débordement, le compilateur simplifie "x + 1 > x" en 1. Ce niveau de
-Wstrict-débordement est activé par -Mur; les niveaux supérieurs ne le sont pas et doivent être
explicitement demandé.
-Wstrict-overflow=2
Avertissez également des autres cas où une comparaison est simplifiée en une constante. Pour
exemple : "abs (x) >= 0". Cela ne peut être simplifié que lorsque -fstrict-débordement est en
effet, car "abs (INT_MIN)" déborde sur "INT_MIN", qui est inférieur à zéro.
-Wstrict-débordement (sans niveau) est le même que -Wstrict-overflow=2.
-Wstrict-overflow=3
Avertissez également des autres cas où une comparaison est simplifiée. Par exemple : "x + 1
> 1" est simplifié en "x > 0".
-Wstrict-overflow=4
Avertir également des autres simplifications non couvertes par les cas ci-dessus. Pour
exemple : "(x * 10) / 5" est simplifié en "x * 2".
-Wstrict-overflow=5
Avertir également des cas où le compilateur réduit l'amplitude d'une constante
impliqué dans une comparaison. Par exemple : "x + 2 > y" est simplifié en "x + 1 >= y".
Ceci n'est signalé qu'au niveau d'avertissement le plus élevé car cette simplification
s'applique à de nombreuses comparaisons, ce niveau d'avertissement donne donc un très grand nombre de
faux positifs.
-Wsuggest-attribut=[pur|const|non-retour|le format]
Avertir des cas où l'ajout d'un attribut peut être bénéfique. Les attributs actuellement
pris en charge sont répertoriés ci-dessous.
-Wsuggest-attribute=pur
-Wsuggest-attribute=const
-Wsuggest-attribute=sans retour
Avertir des fonctions qui pourraient être candidates pour les attributs « pure », « const » ou
"non-retour". Le compilateur n'avertit que pour les fonctions visibles dans d'autres compilations
unités ou (dans le cas de "pure" et "const") s'il ne peut pas prouver que la fonction
revient normalement. Une fonction retourne normalement si elle ne contient pas un infini
boucle ou retourne anormalement en lançant, en appelant "avorter" ou en piégeant. Cette analyse
nécessite une option -fipa-pure-const, qui est activé par défaut à -O Et plus élevé.
Des niveaux d'optimisation plus élevés améliorent la précision de l'analyse.
-Wsugest-attribut = format
-Wmissing-format-attribut
Avertir des pointeurs de fonction qui pourraient être des candidats pour les attributs "format".
Notez que ce ne sont que des candidats possibles, pas des candidats absolus. GCC suppose que
des pointeurs de fonction avec des attributs "format" qui sont utilisés dans l'affectation,
les instructions d'initialisation, de passage de paramètres ou de retour doivent avoir un
attribut "format" dans le type résultant. C'est-à-dire le côté gauche du
l'affectation ou l'initialisation, le type de la variable paramètre, ou le retour
le type de la fonction conteneur doit également avoir un attribut "format"
pour éviter l'avertissement.
GCC met également en garde contre les définitions de fonctions qui pourraient être candidates au "format"
les attributs. Encore une fois, ce ne sont que des candidats possibles. GCC devine que "format"
les attributs peuvent être appropriés pour toute fonction qui appelle une fonction telle que
"vprintf" ou "vscanf", mais ce n'est peut-être pas toujours le cas, et certaines fonctions
pour lesquels les attributs de "format" sont appropriés peuvent ne pas être détectés.
-Wsuggest-final-types
Avertir des types avec des méthodes virtuelles où la qualité du code serait améliorée si le type
ont été déclarés avec le spécificateur "final" C++11, ou, si possible, déclarés dans un
espace de noms anonyme. Cela permet à GCC de dévirtualiser plus agressivement le polymorphe
appels. Cet avertissement est plus efficace avec l'optimisation du temps de liaison, où le
les informations sur le graphique de la hiérarchie des classes sont plus complètes.
-Wsuggest-final-methods
Avertir des méthodes virtuelles où la qualité du code serait améliorée si la méthode était
déclaré avec le spécificateur "final" C++11, ou, si possible, son type a été déclaré dans
un espace de noms anonyme ou avec le spécificateur "final". Cet avertissement est plus efficace
avec optimisation du temps de liaison, où les informations sur le graphique de la hiérarchie des classes sont
plus achevé. Il est recommandé d'examiner d'abord les suggestions de
-Wsuggest-final-types puis reconstruire avec de nouvelles annotations.
-Wsuggest-override
Avertir de remplacer les fonctions virtuelles qui ne sont pas marquées avec le mot-clé override.
-Warray-limites
-Warray-limites=n
Cette option n'est active que lorsque -ftree-vrp est actif (par défaut pour -O2 et ci-dessus). Ce
avertit des indices de tableaux qui sont toujours hors limites. Cet avertissement est
activé par -Mur.
-Warray-limites=1
C'est le niveau d'avertissement de -Warray-limites et est activé par -Mur; Niveaux plus élevés
ne le sont pas et doivent être explicitement demandés.
-Warray-limites=2
Ce niveau d'avertissement met également en garde contre l'accès hors limites pour les tableaux à la fin de
une structure et pour les tableaux accessibles via des pointeurs. Ce niveau d'avertissement peut donner un
plus grand nombre de faux positifs et est désactivé par défaut.
-Wbool-comparer
Avertir de l'expression booléenne par rapport à une valeur entière différente de
"vrai faux". Par exemple, la comparaison suivante est toujours fausse :
int n = 5;
si ((n > 1) == 2) { ... }
Cet avertissement est activé par -Mur.
-Wno-discarded-qualificatifs (C et Objective-C uniquement)
Ne pas avertir si les qualificatifs de type sur les pointeurs sont supprimés. Typiquement, le
le compilateur avertit si une variable "const char *" est passée à une fonction qui prend un "char
*" paramètre. Cette option peut être utilisée pour supprimer un tel avertissement.
-Wno-discarded-array-qualificatifs (C et Objective-C uniquement)
Ne pas avertir si des qualificatifs de type sur des tableaux qui sont des cibles de pointeur sont
mis au rebut. Typiquement, le compilateur avertit si une variable "const int (*)[]" est passée à
une fonction qui prend un paramètre "int (*)[]". Cette option peut être utilisée pour supprimer
un tel avertissement.
-Types de pointeurs non incompatibles (C et Objective-C uniquement)
Ne pas avertir lorsqu'il y a une conversion entre des pointeurs qui ont des types incompatibles.
Cet avertissement concerne les cas non couverts par -Wno-pointer-signe, qui avertit pour le pointeur
passage d'argument ou affectation avec une signature différente.
-Wno-int-conversion (C et Objective-C uniquement)
Ne pas avertir des conversions d'entier en pointeur et de pointeur en entier incompatibles.
Cet avertissement concerne les conversions implicites ; pour les conversions explicites les avertissements
-Wno-int-to-pointer-cast et -Wno-pointeur-vers-int-cast peut être utilisé.
-Wno-div-par-zéro
Ne pas avertir de la division d'entiers à la compilation par zéro. Division à virgule flottante par
zéro n'est pas prévenu, car cela peut être un moyen légitime d'obtenir des infinis et
NaN.
-Wsystem-en-têtes
Affiche des messages d'avertissement pour les constructions trouvées dans les fichiers d'en-tête du système. Avertissements de
les en-têtes système sont normalement supprimés, en supposant qu'ils ne
indiquer de vrais problèmes et ne ferait que rendre la sortie du compilateur plus difficile à lire. À l'aide de
cette option de ligne de commande indique à GCC d'émettre des avertissements à partir des en-têtes système comme s'ils
s'est produit dans le code utilisateur. Cependant, notez qu'en utilisant -Mur en conjonction avec cette option
ne sauraient avertir des pragmas inconnus dans les en-têtes système --- pour cela, -Pragmas-inconnus
doit également être utilisé.
-Wtrampolines
Avertir des trampolines générés pour les pointeurs vers des fonctions imbriquées. Un trampoline est un
petit morceau de données ou de code qui est créé au moment de l'exécution sur la pile lorsque l'adresse
d'une fonction imbriquée est prise et est utilisée pour appeler indirectement la fonction imbriquée.
Pour certaines cibles, il est constitué uniquement de données et ne nécessite donc aucun traitement particulier.
Mais, pour la plupart des cibles, il est constitué de code et nécessite donc que la pile soit faite
exécutable pour que le programme fonctionne correctement.
-Wfloat-égal
Avertir si des valeurs à virgule flottante sont utilisées dans les comparaisons d'égalité.
L'idée derrière cela est qu'il est parfois pratique (pour le programmeur) de
considérer les valeurs à virgule flottante comme des approximations de nombres réels infiniment précis.
Si vous faites cela, alors vous devez calculer (en analysant le code, ou dans certains
autrement) l'erreur maximale ou maximale probable que le calcul introduit, et
permettez-le lors de l'exécution des comparaisons (et lors de la production de sortie, mais c'est un
problème différent). En particulier, au lieu de tester l'égalité, vous devriez vérifier
pour voir si les deux valeurs ont des plages qui se chevauchent ; et cela se fait avec le
opérateurs relationnels, de sorte que les comparaisons d'égalité sont probablement erronées.
-Wtraditionnel (C et Objective-C uniquement)
Avertir de certaines constructions qui se comportent différemment en traditionnel et en ISO C. Aussi
avertir des constructions ISO C qui n'ont pas d'équivalent en C traditionnel, et/ou problématiques
constructions à éviter.
* Paramètres de macro qui apparaissent dans les littéraux de chaîne dans le corps de la macro. Dans
le remplacement de macro C traditionnel a lieu dans les littéraux de chaîne, mais dans ISO C
ce ne est pas.
* En C traditionnel, certaines directives de préprocesseur n'existaient pas. Traditionnel
les préprocesseurs ne considéraient une ligne comme une directive que si le # est apparu dans la colonne
1 sur la ligne. Par conséquent -Wtraditionnel met en garde contre les directives que le C traditionnel
comprend mais ignore parce que le # n'apparaît pas comme premier caractère sur
la ligne. Il vous suggère également de masquer les directives telles que "#pragma" non comprises par
C traditionnel en les indentant. Certaines implémentations traditionnelles ne
reconnaître "#elif", donc cette option suggère de l'éviter complètement.
* Une macro de type fonction qui apparaît sans arguments.
* L'opérateur unaire plus.
* Le U suffixe de constante entière, ou le F or L suffixes constants à virgule flottante.
(Le C traditionnel prend en charge le L suffixe sur les constantes entières.) Notez que ces
les suffixes apparaissent dans les macros définies dans les en-têtes système de la plupart des systèmes modernes,
par exemple le _MIN/_MAX macro dans " ". L'utilisation de ces macros dans le code utilisateur peut
normalement conduire à des avertissements parasites, cependant le préprocesseur intégré de GCC a
suffisamment de contexte pour éviter un avertissement dans ces cas.
* Une fonction déclarée externe dans un bloc puis utilisée après la fin du
bloque.
* Une instruction "switch" a un opérande de type "long".
* Une déclaration de fonction non "statique" suit une déclaration "statique". Cette construction n'est pas
accepté par certains compilateurs C traditionnels.
* Le type ISO d'une constante entière a une largeur ou une signature différente de son
genre traditionnel. Cet avertissement n'est émis que si la base de la constante est dix.
C'est-à-dire que les valeurs hexadécimales ou octales, qui représentent généralement des modèles de bits, ne sont pas
prévenu.
* L'utilisation de la concaténation de chaînes ISO est détectée.
* Initialisation des agrégats automatiques.
* L'identifiant est en conflit avec les étiquettes. Le C traditionnel n'a pas d'espace de noms séparé pour
Étiquettes.
* Initialisation des unions. Si l'initialiseur est zéro, l'avertissement est omis.
Ceci est fait en supposant que l'initialiseur zéro dans le code utilisateur apparaît
conditionné par exemple par "__STDC__" pour éviter de manquer les avertissements d'initialisation et s'appuie sur
initialisation par défaut à zéro dans le cas C traditionnel.
* Conversions par prototypes entre valeurs fixes/virgules flottantes et vice versa. Les
l'absence de ces prototypes lors de la compilation avec le C traditionnel provoque de graves
problèmes. Il s'agit d'un sous-ensemble des avertissements de conversion possibles ; pour l'ensemble complet
utilisé -Wtraditionnel-conversion.
* Utilisation de définitions de fonctions de style ISO C. Cet avertissement est intentionnellement ne sauraient émis
pour les déclarations de prototypes ou les fonctions variadiques car ces fonctionnalités ISO C
apparaissent dans votre code lorsque vous utilisez les macros de compatibilité C traditionnelles de Libberty,
"PARAMS" et "VPARAMS". Cet avertissement est également ignoré pour les fonctions imbriquées
car cette fonctionnalité est déjà une extension de GCC et n'est donc pas pertinente pour
compatibilité C traditionnelle.
-Wtraditionnel-conversion (C et Objective-C uniquement)
Avertir si un prototype provoque une conversion de type différente de ce qui se produirait
au même argument en l'absence de prototype. Cela inclut les conversions de
virgule fixe en flottant et vice versa, et conversions changeant la largeur ou
signature d'un argument à virgule fixe, sauf lorsqu'il est identique à la promotion par défaut.
-Wdéclaration-après-déclaration (C et Objective-C uniquement)
Avertir lorsqu'une déclaration est trouvée après une déclaration dans un bloc. Cette construction, connue
de C++, a été introduit avec ISO C99 et est autorisé par défaut dans GCC. Ce n'est pas
pris en charge par ISO C90.
-Wundef
Avertir si un identifiant non défini est évalué dans une directive "#if".
-Wno-endif-étiquettes
Ne pas avertir chaque fois qu'un "#else" ou un "#endif" sont suivis de texte.
-Wombre
Avertir chaque fois qu'une variable locale ou une déclaration de type masque une autre variable,
paramètre, type, membre de classe (en C++) ou variable d'instance (en Objective-C) ou
chaque fois qu'une fonction intégrée est masquée. Notez qu'en C++, le compilateur avertit si un
La variable locale masque un typedef explicite, mais pas si elle masque un struct/class/enum.
-Wno-ombre-ivar (Objectif-C uniquement)
Ne pas avertir chaque fois qu'une variable locale masque une variable d'instance dans un Objective-C
méthode.
-Wplus grand que=len
Avertir chaque fois qu'un objet de plus de len octets est défini.
-Wframe-plus grand-que=len
Avertir si la taille d'un cadre de fonction est supérieure à len octets. Le calcul fait
pour déterminer la taille du cadre de pile est approximative et non conservatrice. L'actuel
les exigences peuvent être légèrement supérieures à len même si vous ne recevez pas d'avertissement. Dans
De plus, tout espace alloué via "alloca", des tableaux de longueur variable ou des
n'est pas inclus par le compilateur lorsqu'il détermine s'il faut ou non émettre un
Attention.
-Wno-free-non-heap-object
Ne pas avertir lors d'une tentative de libération d'un objet qui n'a pas été alloué sur le tas.
-Wstack-utilisation=len
Avertir si l'utilisation de la pile d'une fonction peut être supérieure à len octets. Le calcul
fait pour déterminer l'utilisation de la pile est prudent. Tout espace alloué via "alloca",
les tableaux de longueur variable ou les constructions associées sont inclus par le compilateur lorsque
déterminer s'il faut ou non émettre un avertissement.
Le message est conforme à la sortie de -fstack-utilisation.
* Si l'utilisation de la pile est entièrement statique mais dépasse le montant spécifié, c'est :
avertissement : l'utilisation de la pile est de 1120 octets
* Si l'utilisation de la pile est (en partie) dynamique mais limitée, c'est :
avertissement : l'utilisation de la pile peut être de 1648 octets
* Si l'utilisation de la pile est (partiellement) dynamique et non bornée, c'est :
avertissement : l'utilisation de la pile peut être illimitée
-Wunsafe-loop-optimisations
Avertir si la boucle ne peut pas être optimisée car le compilateur ne peut rien supposer sur
les limites des indices de boucle. Avec -funsafe-loop-optimisations avertir si le compilateur
fait de telles hypothèses.
-Wno-pédant-format-ms (cibles MinGW uniquement)
Lorsqu'il est utilisé en combinaison avec -Wformat et -pédant sans extensions GNU, ce
L'option désactive les avertissements concernant les spécificateurs de largeur de format non ISO "printf" / "scanf"
"I32", "I64" et "I" utilisés sur les cibles Windows, qui dépendent du runtime MS.
-Wpointeur-arith
Avertir de tout ce qui dépend de la "taille d'un" type de fonction ou d'un "vide". GNU C
attribue à ces types une taille de 1, pour plus de commodité dans les calculs avec "void *"
pointeurs et pointeurs vers des fonctions. En C++, avertir également lorsqu'une opération arithmétique
implique "NULL". Cet avertissement est également activé par -Wpédantique.
-Wtype-limites
Avertir si une comparaison est toujours vraie ou toujours fausse en raison de la plage limitée du
type de données, mais n'avertit pas pour les expressions constantes. Par exemple, avertir si un message non signé
variable est comparée à zéro avec "<" ou ">=". Cet avertissement est également activé par
-Wextra.
-Wbad-fonction-cast (C et Objective-C uniquement)
Avertir lorsqu'un appel de fonction est transtypé vers un type non correspondant. Par exemple, avertir si un appel
à une fonction renvoyant un type entier est converti en un type pointeur.
-Wc90-c99-compatible (C et Objective-C uniquement)
Avertir des fonctionnalités non présentes dans ISO C90, mais présentes dans ISO C99. Par exemple,
avertir de l'utilisation de tableaux de longueur variable, de type "long long", de type "bool", composé
littéraux, initialiseurs désignés, etc. Cette option est indépendante de la
mode normes. Les avertissements sont désactivés dans l'expression qui suit "__extension__".
-Wc99-c11-compatible (C et Objective-C uniquement)
Avertir des fonctionnalités non présentes dans ISO C99, mais présentes dans ISO C11. Par exemple,
avertir de l'utilisation de structures et d'unions anonymes, qualificatif de type "_Atomic",
spécificateur de classe de stockage "_Thread_local", spécificateur "_Alignas", opérateur "Alignof",
Mot clé "_Generic", et ainsi de suite. Cette option est indépendante du mode standard.
Les avertissements sont désactivés dans l'expression qui suit "__extension__".
-Compatible WC++ (C et Objective-C uniquement)
Avertir sur les constructions ISO C qui sont en dehors du sous-ensemble commun de ISO C et ISO
C++, par exemple demande de conversion implicite de "void *" en un pointeur vers non-"void"
type.
-Wc++11-compatible (C++ et Objective-C++ uniquement)
Avertir des constructions C++ dont la signification diffère entre ISO C++ 1998 et ISO C++ 2011,
par exemple, les identifiants dans ISO C++ 1998 qui sont des mots-clés dans ISO C++ 2011. Cet avertissement
allume -Wrétrécissement et est activé par -Mur.
-Wc++14-compatible (C++ et Objective-C++ uniquement)
Avertir des constructions C++ dont la signification diffère entre ISO C++ 2011 et ISO C++ 2014.
Cet avertissement est activé par -Mur.
-Qualité Wcast
Avertir chaque fois qu'un pointeur est transtypé afin de supprimer un qualificateur de type du type cible.
Par exemple, avertir si un "const char *" est converti en un "char *" ordinaire.
Avertir également lors de la réalisation d'un transtypage qui introduit un qualificateur de type d'une manière dangereuse. Pour
exemple, la conversion de "char **" en "const char **" n'est pas sûre, comme dans cet exemple :
/* p est la valeur car **. */
caractère const **q = (car const **) p;
/* L'affectation de la chaîne en lecture seule à const char * est OK. */
*q = "chaîne" ;
/* Maintenant, le pointeur char** pointe vers la mémoire en lecture seule. */
**p = « b » ;
-Wcast-aligner
Avertir chaque fois qu'un pointeur est lancé de telle sorte que l'alignement requis de la cible est
augmenté. Par exemple, avertir si un "char *" est converti en "int *" sur les machines où
les entiers ne sont accessibles qu'aux limites de deux ou quatre octets.
-Wwrite-chaînes
Lors de la compilation C, donnez aux constantes de chaîne le type "const char[longueur]" pour que la copie
l'adresse de un dans un pointeur non "const" "char *" produit un avertissement. Ces
les avertissements vous aident à trouver au moment de la compilation le code qui peut essayer d'écrire dans une chaîne
constant, mais seulement si vous avez fait très attention à l'utilisation de "const" dans les déclarations
et prototypes. Sinon, ce n'est qu'une nuisance. C'est pourquoi nous n'avons pas fait -Mur
demander ces avertissements.
Lors de la compilation C++, avertir de la conversion obsolète des littéraux de chaîne en "char
*". Cet avertissement est activé par défaut pour les programmes C++.
-Wclobbé
Avertir des variables qui pourraient être modifiées par "longjmp" ou "vfork". Cet avertissement est
également activé par -Wextra.
-Wconditionnellement pris en charge (C++ et Objective-C++ uniquement)
Avertir pour les constructions prises en charge de manière conditionnelle (C++11 [intro.defs]).
-Wconversion
Avertir des conversions implicites susceptibles de modifier une valeur. Cela inclut les conversions
entre réel et entier, comme « abs (x) » lorsque « x » est « double » ; conversions entre
signé et non signé, comme "unsigned ui = -1" ; et les conversions vers des types plus petits, comme
"sqrtf (M_PI)". Ne pas avertir pour les casts explicites comme "abs ((int) x)" et "ui =
(unsigned) -1", ou si la valeur n'est pas modifiée par la conversion comme dans "abs (2.0)".
Les avertissements concernant les conversions entre les entiers signés et non signés peuvent être désactivés en
en utilisant -Wno-sign-conversion.
Pour C++, avertissez également de la confusion de la résolution de surcharge pour les conversions définies par l'utilisateur ; et
conversions qui n'utilisent jamais d'opérateur de conversion de type : conversions en « void », le même
type, une classe de base ou une référence à eux. Avertissements concernant les conversions entre les signataires
et les entiers non signés sont désactivés par défaut en C++ sauf si -Wsign-conversion is
explicitement activé.
-Wno-conversion-null (C++ et Objective-C++ uniquement)
Ne pas avertir des conversions entre les types "NULL" et non pointeurs. -Wconversion-null is
activé par défaut.
-Wzéro-comme-constante-de-pointeur-null (C++ et Objective-C++ uniquement)
Avertir lorsqu'un littéral '0' est utilisé comme constante de pointeur nul. Cela peut être utile pour
faciliter la conversion en "nullptr" en C++11.
-Wdate-heure
Avertir lorsque les macros "__TIME__", "__DATE__" ou "__TIMESTAMP__" sont rencontrées car elles
pourrait empêcher les compilations reproductibles identiques au niveau du bit.
-Wdelete-incomplet (C++ et Objective-C++ uniquement)
Avertir lors de la suppression d'un pointeur vers un type incomplet, ce qui peut entraîner un comportement indéfini à
Durée. Cet avertissement est activé par défaut.
-Casting inutile (C++ et Objective-C++ uniquement)
Avertir lorsqu'une expression est transtypée dans son propre type.
-Wempty-corps
Avertir si un corps vide apparaît dans une instruction "if", "else" ou "do while". Cet avertissement
est également activé par -Wextra.
-Wenum-comparer
Avertir d'une comparaison entre des valeurs de différents types énumérés. En énumération C++
les incohérences dans les expressions conditionnelles sont également diagnostiquées et l'avertissement est activé par
défaut. En C, cet avertissement est activé par -Mur.
-Wjump-manque-init (C, Objective-C uniquement)
Avertir si une instruction "goto" ou une instruction "switch" saute vers l'avant à travers le
initialisation d'une variable, ou saute en arrière à une étiquette après que la variable a été
initialisé. Cela avertit uniquement des variables qui sont initialisées lorsqu'elles sont
déclaré. Cet avertissement n'est pris en charge que pour C et Objective-C ; en C++ ce genre de
branche est une erreur dans tous les cas.
-Wjump-manque-init est inclus dans -Compatible WC++. Il peut être désactivé avec le
-Wno-jump-misse-init option.
-Wsign-comparer
Avertir lorsqu'une comparaison entre des valeurs signées et non signées pourrait produire une erreur
résultat lorsque la valeur signée est convertie en non signée. Cet avertissement est également activé
by -Wextra; pour obtenir les autres avertissements de -Wextra sans cet avertissement, utilisez -Wextra
-Wno-sign-comparer.
-Wsign-conversion
Avertir des conversions implicites qui peuvent changer le signe d'une valeur entière, comme
affecter une expression entière signée à une variable entière non signée. Un explicite
Cast fait taire l'avertissement. En C, cette option est également activée par -Wconversion.
-Wfloat-conversion
Avertir des conversions implicites qui réduisent la précision d'une valeur réelle. Cette
inclut les conversions de réel en entier, et de plus haute précision réel en plus bas
valeurs réelles de précision. Cette option est également activée par -Wconversion.
-Wsized-désallocation (C++ et Objective-C++ uniquement)
Avertir d'une définition d'une fonction de désallocation non dimensionnée
opérateur void delete (void *) noexcept;
opérateur void delete[] (void *) noexcept;
sans définition de la fonction de désallocation dimensionnée correspondante
opérateur void delete (void *, std::size_t) noexcept ;
opérateur void delete[] (void *, std::size_t) noexcept ;
ou vice versa. Activé par -Wextra avec -fsized-désallocation.
-Wsizeof-pointer-memaccess
Avertir des paramètres de longueur suspects pour certaines fonctions intégrées de chaîne et de mémoire
si l'argument utilise "sizeof". Cet avertissement avertit par exemple de "memset (ptr, 0, sizeof
(ptr));" si "ptr" n'est pas un tableau, mais un pointeur, et suggère un correctif possible, ou
à propos de "memcpy (&foo, ptr, sizeof (&foo));". Cet avertissement est activé par -Mur.
-Wsizeof-array-argument
Avertir lorsque l'opérateur "sizeof" est appliqué à un paramètre déclaré sous forme de tableau
dans une définition de fonction. Cet avertissement est activé par défaut pour les programmes C et C++.
-Wmemset-transposé-args
Avertir des appels suspects à la fonction intégrée "memset", si le deuxième argument est
pas zéro et le troisième argument est zéro. Cela avertit eg@ à propos de "memset (buf, sizeof
buf, 0)" où très probablement "memset (buf, 0, sizeof buf)" était signifié à la place.
diagnostics n'est émis que si le troisième argument est un zéro littéral. Si c'est quelque
expression qui est pliée à zéro, un transtypage de zéro à un certain type, etc., c'est beaucoup moins
probablement que l'utilisateur a échangé les arguments par erreur et qu'aucun avertissement n'est émis.
Cet avertissement est activé par -Mur.
-Adresse
Avertir des utilisations suspectes des adresses mémoire. Il s'agit notamment d'utiliser l'adresse d'un
fonction dans une expression conditionnelle, telle que "void func(void); if (func)", et
comparaisons avec l'adresse mémoire d'un littéral de chaîne, comme "if (x == "abc")".
De telles utilisations indiquent généralement une erreur du programmeur : l'adresse d'une fonction est toujours
évalue à vrai, donc leur utilisation dans un conditionnel indique généralement que le programmeur
oublié les parenthèses dans un appel de fonction ; et comparaisons avec des chaînes littérales
entraînent un comportement non spécifié et ne sont pas portables en C, ils indiquent donc généralement
que le programmeur avait l'intention d'utiliser "strcmp". Cet avertissement est activé par -Mur.
-Wlogique-op
Avertir des utilisations suspectes d'opérateurs logiques dans les expressions. Cela inclut l'utilisation
opérateurs logiques dans des contextes où un opérateur au niveau du bit est susceptible d'être attendu.
-Wlogique-pas-parenthèses
Avertir de la logique non utilisée sur l'opérande de gauche d'une comparaison. Cette
L'option ne prévient pas si l'opérande RHS est de type booléen. Son but est de
détecter un code suspect comme le suivant :
int a;
si (!a > 1) { ... }
Il est possible de supprimer l'avertissement en mettant le LHS entre parenthèses :
si ((!a) > 1) { ... }
Cet avertissement est activé par -Mur.
-Waggregate-retour
Avertir si des fonctions qui renvoient des structures ou des unions sont définies ou appelées. (Dans
langues où vous pouvez retourner un tableau, cela déclenche également un avertissement.)
-Wno-agressive-loop-optimisations
Avertir si dans une boucle avec un nombre constant d'itérations le compilateur détecte undefined
comportement dans une instruction au cours d'une ou plusieurs itérations.
-Wno-attributs
Ne pas avertir si un "__attribute__" inattendu est utilisé, comme des attributs non reconnus,
attributs de fonction appliqués aux variables, etc. Cela n'arrête pas les erreurs pour
utilisation incorrecte des attributs pris en charge.
-Wno-builtin-macro-redéfini
Ne pas avertir si certaines macros intégrées sont redéfinies. Cela supprime les avertissements pour
redéfinition de "__TIMESTAMP__", "__TIME__", "__DATE__", "__FILE__", et
"__BASE_FILE__".
-Wstrict-prototypes (C et Objective-C uniquement)
Avertir si une fonction est déclarée ou définie sans spécifier les types d'arguments. (Un
la définition de fonction à l'ancienne est autorisée sans avertissement si elle est précédée d'un
déclaration qui spécifie les types d'arguments.)
-Wold-style-déclaration (C et Objective-C uniquement)
Avertir des usages obsolètes, selon la norme C, dans une déclaration. Pour
par exemple, avertir si les spécificateurs de classe de stockage comme "static" ne sont pas les premières choses dans un
déclaration. Cet avertissement est également activé par -Wextra.
-Wold-style-définition (C et Objective-C uniquement)
Avertir si une définition de fonction à l'ancienne est utilisée. Un avertissement est donné même s'il y a
un prototype précédent.
-Type de paramètre manquant (C et Objective-C uniquement)
Un paramètre de fonction est déclaré sans spécificateur de type dans les fonctions de style K&R :
vide foo(bar) { }
Cet avertissement est également activé par -Wextra.
-Wmanquant-prototypes (C et Objective-C uniquement)
Avertir si une fonction globale est définie sans déclaration de prototype précédente. Cette
un avertissement est émis même si la définition elle-même fournit un prototype. Utilisez cette option
pour détecter les fonctions globales qui n'ont pas de déclaration de prototype correspondante dans un
En tête de fichier. Cette option n'est pas valide pour C++ car toutes les déclarations de fonction
fournir des prototypes et une déclaration non correspondante déclare une surcharge plutôt que
conflit avec une déclaration antérieure. Utilisation -Wmissing-déclarations détecter les manquants
déclarations en C++.
-Wmissing-déclarations
Avertir si une fonction globale est définie sans déclaration préalable. Faites-le même si
la définition elle-même fournit un prototype. Utilisez cette option pour détecter global
fonctions qui ne sont pas déclarées dans les fichiers d'en-tête. En C, aucun avertissement n'est émis pour
fonctions avec des déclarations précédentes non prototypes ; utilisation -Wmanquant-prototypes à détecter
prototypes manquants. En C++, aucun avertissement n'est émis pour les modèles de fonction ou pour
fonctions en ligne, ou pour les fonctions dans des espaces de noms anonymes.
-Wmissing-field-initialiseurs
Avertir si l'initialiseur d'une structure a des champs manquants. Par exemple, ce qui suit
code provoque un tel avertissement, car "xh" est implicitement zéro :
struct s { int f, g, h; } ;
struct sx = { 3, 4 };
Cette option n'avertit pas des initialiseurs désignés, donc la modification suivante
ne déclenche pas d'avertissement :
struct s { int f, g, h; } ;
struct sx = { .f = 3, .g = 4 };
En C++, cette option n'avertit pas non plus de l'initialiseur vide { }, par exemple :
struct s { int f, g, h; } ;
sx = { } ;
Cet avertissement est inclus dans -Wextra. Pour obtenir d'autres -Wextra avertissements sans celui-ci,
utilisé -Wextra -Wno-missing-field-initializers.
-Wno-multichar
Ne pas avertir si une constante à plusieurs caractères ('FOOF') est utilisé. Ils indiquent généralement un
faute de frappe dans le code de l'utilisateur, car elles ont des valeurs définies par l'implémentation et ne doivent pas être
utilisé dans le code portable.
-Wnormalisé[=<aucun|id|nfc|nfkc>]
Dans ISO C et ISO C++, deux identifiants sont différents s'il s'agit de séquences différentes de
personnages. Cependant, parfois, lorsque des caractères en dehors du jeu de caractères ASCII de base
sont utilisés, vous pouvez avoir deux séquences de caractères différentes qui se ressemblent. Éviter
confusion, la norme ISO 10646 énonce certaines normalisation qui, une fois appliqué
assurez-vous que deux séquences qui se ressemblent sont transformées en la même séquence. CCG
peut vous avertir si vous utilisez des identifiants non normalisés ; cette option
contrôle cet avertissement.
Il existe quatre niveaux d'avertissement pris en charge par GCC. La valeur par défaut est -Wnormalisé=nfc,
qui avertit de tout identifiant qui n'est pas sous la forme normalisée ISO 10646 "C",
NFC. NFC est la forme recommandée pour la plupart des utilisations. C'est équivalent à -Wnormalisé.
Malheureusement, certains caractères sont autorisés dans les identifiants par ISO C et ISO C++
qui, une fois transformés en NFC, ne sont pas autorisés dans les identifiants. C'est-à-dire qu'il n'y a aucun moyen
d'utiliser ces symboles en ISO C ou C++ portable et d'avoir tous vos identifiants en NFC.
-Wnormalisé=id supprime l'avertissement pour ces caractères. On espère que l'avenir
versions des normes concernées corrigeront cela, c'est pourquoi cette option n'est pas
le défaut.
Vous pouvez désactiver l'avertissement pour tous les caractères en écrivant -Wnormalisé=aucun or
-Wno-normalisé. Vous ne devriez le faire que si vous utilisez une autre normalisation
(comme "D"), car sinon vous pouvez facilement créer des bogues qui sont littéralement
impossible à voir.
Certains caractères de la norme ISO 10646 ont des significations distinctes mais semblent identiques dans certaines polices
ou des méthodologies d'affichage, en particulier une fois le formatage appliqué. Par exemple
"\u207F", "SUPERSCRIPT LATIN SMALL LETTER N", s'affiche comme un "n" normal qui
a été placé en exposant. ISO 10646 définit la NFCC schéma de normalisation à
convertissez également tous ces éléments sous une forme standard, et GCC vous avertit si votre code n'est pas en
NFKC si vous utilisez -Wnormalisé=nfkc. Cet avertissement est comparable à un avertissement concernant chaque
identifiant qui contient la lettre O car il peut être confondu avec le chiffre 0,
et n'est donc pas la valeur par défaut, mais peut être utile comme convention de codage local si le
l'environnement de programmation ne peut pas être fixé pour afficher ces caractères distinctement.
-Wno-déprécié
Ne pas avertir de l'utilisation de fonctionnalités obsolètes.
-Wno-deprecated-déclarations
Ne pas avertir des utilisations des fonctions, variables et types marqués comme obsolètes par
en utilisant l'attribut "obsolète".
-Wno-débordement
Ne pas avertir du dépassement de temps de compilation dans les expressions constantes.
-Wno-odr
Avertir des violations de règle de définition unique lors de l'optimisation du temps de liaison. A besoin
-flto-odr-type-fusion être activé. Activé par défaut.
-Wopenmp-simd
Avertir si le modèle de coût du vectoriseur remplace la directive OpenMP ou Cilk Plus simd
défini par l'utilisateur. Les -fsimd-cost-model=illimité l'option peut être utilisée pour alléger le coût
.
-Woverride-init (C et Objective-C uniquement)
Avertir si un champ initialisé sans effets secondaires est remplacé lors de l'utilisation de
initialiseurs.
Cet avertissement est inclus dans -Wextra. Pour obtenir d'autres -Wextra avertissements sans celui-ci,
utilisé -Wextra -Wno-Override-init.
-Wpacked
Avertir si une structure reçoit l'attribut emballé, mais que l'attribut emballé n'a pas
effet sur la disposition ou la taille de la structure. De telles structures peuvent être mal alignées pour
peu d'avantage. Par exemple, dans ce code, la variable "fx" dans "struct bar" est
mal aligné même si "struct bar" n'a pas lui-même l'attribut packé :
structure foo {
int x;
caractère a, b, c, d ;
} __attribute __ ((emballé));
barre de structure {
caractère z;
structure foo f;
};
-Wpacked-bitfield-compat
Les séries 4.1, 4.2 et 4.3 de GCC ignorent l'attribut "packed" sur les champs de bits de type
"carboniser". Cela a été corrigé dans GCC 4.4, mais le changement peut entraîner des différences dans le
disposition de la structure. GCC vous informe lorsque le décalage d'un tel champ a changé dans GCC
4.4. Par exemple, il n'y a plus de remplissage de 4 bits entre les champs "a" et "b" dans ce
structure:
structure foo
{
caractère a : 4 ;
caractère b:8 ;
} __attribut__ ((emballé));
Cet avertissement est activé par défaut. Utilisation -Wno-packed-bitfield-compat pour désactiver cela
Attention.
-Wrembourré
Avertir si un rembourrage est inclus dans une structure, soit pour aligner un élément du
structure ou pour aligner l'ensemble de la structure. Parfois, lorsque cela se produit, il est possible
réorganiser les champs de la structure pour réduire le rembourrage et ainsi rendre le
structure plus petite.
-Wredundant-decls
Avertir si quelque chose est déclaré plus d'une fois dans le même périmètre, même dans les cas où
la déclaration multiple est valide et ne change rien.
-Wnested-externes (C et Objective-C uniquement)
Avertir si une déclaration "extern" est rencontrée dans une fonction.
-Wno-inherited-variadic-ctor
Supprimer les avertissements concernant l'utilisation des constructeurs héritant de C++11 lorsque la classe de base
hérité de a un constructeur variadique C ; l'avertissement est activé par défaut car le
l'ellipse n'est pas héritée.
-Winline
Avertir si une fonction déclarée comme inline ne peut pas être inline. Même avec ça
option, le compilateur n'avertit pas des échecs des fonctions en ligne déclarées dans
en-têtes système.
Le compilateur utilise une variété d'heuristiques pour déterminer s'il faut ou non intégrer un
fonction. Par exemple, le compilateur prend en compte la taille de la fonction à
inlined et la quantité d'inlining qui a déjà été effectuée dans la fonction actuelle.
Par conséquent, des changements apparemment insignifiants dans le programme source peuvent
avertissements produits par -Winline d'apparaître ou de disparaître.
-Wno-invalid-offsetof (C++ et Objective-C++ uniquement)
Supprime les avertissements de l'application de la macro "offsetof" à un type non POD. Selon
la norme ISO C++ 2014, appliquer "offsetof" à un type de mise en page non standard est
indéfini. Dans les implémentations C++ existantes, cependant, "offsetof" donne généralement
résultats significatifs. Ce drapeau est destiné aux utilisateurs qui savent qu'ils écrivent
code non portable et qui ont délibérément choisi d'ignorer l'avertissement le concernant.
Les restrictions sur "offsetof" peuvent être assouplies dans une future version du standard C++.
-Wno-int-to-pointer-cast
Supprime les avertissements des transtypages vers le type de pointeur d'un entier de taille différente. Dans
C++, la conversion en un type de pointeur de plus petite taille est une erreur. Wit-to-pointer-cast is
activé par défaut.
-Wno-pointeur-vers-int-cast (C et Objective-C uniquement)
Supprime les avertissements des transtypages d'un pointeur vers un type entier de taille différente.
-Winvalid-pch
Avertir si un en-tête précompilé est trouvé dans le chemin de recherche mais ne peut pas être utilisé.
-long-long
Avertir si le type "long long" est utilisé. Ceci est activé soit par -Wpédantique or
-Wtraditionnel en modes ISO C90 et C++98. Pour inhiber les messages d'avertissement, utilisez
-Wpas-long-long.
-Wvariadique-macros
Avertir si des macros variadiques sont utilisées en mode ISO C90, ou si la syntaxe alternative GNU est
utilisé en mode ISO C99. Ceci est activé soit par -Wpédantique or -Wtraditionnel. Pour
inhiber les messages d'avertissement, utiliser -Wno-variadique-macros.
-Wvarargs
Avertir en cas d'utilisation douteuse des macros utilisées pour gérer des arguments variables comme
"va_start". C'est par défaut. Pour inhiber les messages d'avertissement, utilisez -Wno-varargs.
-Wvecteur-fonctionnement-performance
Avertir si l'opération vectorielle n'est pas implémentée via les capacités SIMD de l'architecture.
Principalement utile pour le réglage des performances. L'opération vectorielle peut être mise en œuvre
"par morceaux", ce qui signifie que l'opération scalaire est effectuée sur chaque vecteur
élément; "en parallèle", ce qui signifie que l'opération vectorielle est implémentée en utilisant
des scalaires de type plus large, ce qui est normalement plus efficace en termes de performances ; et "en tant que célibataire
scalaire", ce qui signifie que le vecteur s'intègre dans un type scalaire.
-Wno-virtual-move-assign
Supprimer les avertissements concernant l'héritage d'une base virtuelle avec un déplacement C++11 non trivial
opérateur d'assignation. C'est dangereux car si la base virtuelle est accessible le long
plus d'un chemin, il est déplacé plusieurs fois, ce qui peut signifier que les deux objets se retrouvent dans
l'état déplacé de. Si l'opérateur d'affectation de déplacement est écrit pour éviter de passer de
un objet déplacé depuis, cet avertissement peut être désactivé.
-Wvla
Avertir si un tableau de longueur variable est utilisé dans le code. -Wno-vla empêche le -Wpédantique
avertissement du tableau de longueur variable.
-Wvolatile-registre-var
Avertir si une variable de registre est déclarée volatile. Le modificateur volatil ne
inhiber toutes les optimisations susceptibles d'éliminer les lectures et/ou les écritures dans le registre
variables. Cet avertissement est activé par -Mur.
-Wdisabled-optimisation
Avertir si une passe d'optimisation demandée est désactivée. Cet avertissement n'est généralement pas
indiquer qu'il y a quelque chose qui ne va pas avec votre code ; il indique simplement que GCC
les optimiseurs sont incapables de gérer le code efficacement. Souvent, le problème est que votre
le code est trop gros ou trop complexe ; GCC refuse d'optimiser les programmes lorsque l'optimisation
lui-même est susceptible de prendre un temps démesuré.
-Wpointer-signe (C et Objective-C uniquement)
Avertir en cas de passage d'argument de pointeur ou d'affectation avec une signature différente. Cette
L'option n'est prise en charge que pour C et Objective-C. Il est impliqué par -Mur et par
-Wpédantique, qui peut être désactivé avec -Wno-pointer-signe.
-Wstack-protecteur
Cette option n'est active que lorsque -fstack-protecteur c'est actif. Il met en garde contre les fonctions
qui ne sont pas protégés contre l'écrasement de la pile.
-Cordes Woverlength
Avertir des constantes de chaîne qui sont plus longues que la longueur "minimum maximum"
spécifié dans la norme C. Les compilateurs modernes autorisent généralement les constantes de chaîne qui
sont beaucoup plus longs que la limite minimale de la norme, mais les programmes très portables devraient
évitez d'utiliser des chaînes plus longues.
La limite s'applique après chaîne de concaténation constante et ne compte pas la fin
NUL. En C90, la limite était de 509 caractères ; en C99, il a été augmenté à 4095. C++98 ne
ne spécifie pas un minimum normatif maximum, nous ne diagnostiquons donc pas les chaînes de longueur excessive dans
C ++.
Cette option est impliquée par -Wpédantique, et peut être désactivé avec
-Wno-overlength-strings.
-Wunsuffixed-float-constantes (C et Objective-C uniquement)
Émettez un avertissement pour toute constante flottante qui n'a pas de suffixe. Lorsqu'elle est utilisée
avec -Wsystem-en-têtes il met en garde contre de telles constantes dans les fichiers d'en-tête du système.
Cela peut être utile lors de la préparation du code à utiliser avec le pragma "FLOAT_CONST_DECIMAL64"
de l'extension décimale à virgule flottante à C99.
-Wno-designated-init (C et Objective-C uniquement)
Supprimer les avertissements lorsqu'un initialiseur positionnel est utilisé pour initialiser une structure qui
a été marqué avec l'attribut "designated_init".
Options pour Débogage Votre Programme or GCC
GCC a diverses options spéciales qui sont utilisées pour le débogage de votre programme ou de GCC :
-g Produire des informations de débogage dans le format natif du système d'exploitation (stabs, COFF,
XCOFF, ou NAIN 2). GDB peut travailler avec ces informations de débogage.
Sur la plupart des systèmes qui utilisent le format stabs, -g permet l'utilisation d'informations de débogage supplémentaires
que seul GDB peut utiliser ; ces informations supplémentaires améliorent le débogage dans GDB, mais
fait probablement planter d'autres débogueurs ou refusent de lire le programme. Si tu veux
contrôler avec certitude s'il faut générer les informations supplémentaires, utilisez -gstabs+, -gstabs,
-gxcoff+, -gxcoff, ou -gvms (voir ci-dessous).
GCC vous permet d'utiliser -g avec -O. Les raccourcis pris par le code optimisé peuvent
produisent parfois des résultats surprenants : certaines variables que vous avez déclarées peuvent ne pas exister à
tous; le flux de contrôle peut se déplacer brièvement là où vous ne vous y attendiez pas ; certaines déclarations peuvent
pas être exécutés car ils calculent des résultats constants ou leurs valeurs sont déjà à
main; certaines instructions peuvent s'exécuter à différents endroits car elles ont été déplacées
de boucles.
Néanmoins, il s'avère possible de déboguer une sortie optimisée. Cela rend raisonnable
d'utiliser l'optimiseur pour les programmes qui pourraient avoir des bogues.
Les options suivantes sont utiles lorsque GCC est généré avec la capacité de plus
qu'un format de débogage.
-gsplit-nain
Séparez autant d'informations de débogage nain que possible dans un fichier de sortie séparé
avec l'extension .dwo. Cette option permet au système de construction d'éviter de lier des fichiers
avec des informations de débogage. Pour être utile, cette option nécessite un débogueur capable de
lecture des fichiers .dwo.
-ggdb
Produire des informations de débogage à utiliser par GDB. Cela signifie utiliser le plus expressif
format disponible (DWARF 2, stabs ou le format natif si aucun de ceux-ci n'est
pris en charge), y compris les extensions GDB si possible.
-gpubnames
Générez des sections naines .debug_pubnames et .debug_pubtypes.
-ggnu-noms de pub
Générez des sections .debug_pubnames et .debug_pubtypes dans un format adapté à
conversion en indice GDB. Cette option n'est utile qu'avec un éditeur de liens qui peut
produire l'index GDB version 7.
-gstabs
Produire des informations de débogage au format stabs (si cela est pris en charge), sans GDB
prolongements. C'est le format utilisé par DBX sur la plupart des systèmes BSD. Sur MIPS, Alpha et
Systèmes System V Release 4, cette option produit une sortie de débogage qui n'est pas
compris par DBX ou SDB. Sur les systèmes System V Release 4, cette option nécessite le GNU
assembleur.
-felimate-unused-debug-symbols
Produire des informations de débogage au format stabs (si cela est pris en charge), pour les symboles uniquement
qui sont réellement utilisés.
-femit-class-debug-toujours
Au lieu d'émettre des informations de débogage pour une classe C++ dans un seul fichier objet,
l'émettre dans tous les fichiers objets utilisant la classe. Cette option doit être utilisée uniquement avec
débogueurs incapables de gérer la façon dont GCC émet normalement des informations de débogage
pour les classes car l'utilisation de cette option augmente la taille des informations de débogage de
autant qu'un facteur de deux.
-fdebug-types-section
Lors de l'utilisation de DWARF version 4 ou supérieure, les types DIE peuvent être mis dans leur propre
section ".debug_types" au lieu de les intégrer à la section ".debug_info". Ce
est plus efficace de les mettre dans des sections séparées de comdat puisque l'éditeur de liens peut alors
supprimer les doublons. Mais tous les consommateurs DWARF ne prennent pas encore en charge les sections ".debug_types"
et sur certains objets ".debug_types" produit un débogage plus gros au lieu de plus petit
</br>L’Information.
-gstabs+
Produire des informations de débogage au format stabs (si cela est pris en charge), en utilisant GNU
extensions comprises uniquement par le débogueur GNU (GDB). L'utilisation de ces extensions est
susceptible de faire planter d'autres débogueurs ou de refuser de lire le programme.
-gcoff
Produire des informations de débogage au format COFF (s'il est pris en charge). C'est le
format utilisé par SDB sur la plupart des systèmes System V antérieurs à System V Release 4.
-gxcoff
Produire des informations de débogage au format XCOFF (s'il est pris en charge). C'est le
format utilisé par le débogueur DBX sur les systèmes IBM RS/6000.
-gxcoff+
Produire des informations de débogage au format XCOFF (s'il est pris en charge), en utilisant GNU
extensions comprises uniquement par le débogueur GNU (GDB). L'utilisation de ces extensions est
susceptible de faire planter d'autres débogueurs ou de refuser de lire le programme, et peut provoquer
assembleurs autres que l'assembleur GNU (GAS) échouent avec une erreur.
-nain-version
Produisez des informations de débogage au format DWARF (s'il est pris en charge). La valeur de
version peut être 2, 3, 4 ou 5 ; la version par défaut pour la plupart des cibles est 4. DWARF
La version 5 n'est qu'expérimentale.
Notez qu'avec DWARF Version 2, certains ports nécessitent et utilisent toujours des
DWARF 3 extensions dans les tables de déroulement.
La version 4 peut nécessiter GDB 7.0 et -fvar-suivi-affectations pour un bénéfice maximum.
-commutateurs-grecord-gcc
Ce commutateur provoque les options de ligne de commande utilisées pour appeler le compilateur qui peut
affecter la génération de code à ajouter à l'attribut DW_AT_producer dans DWARF
informations de débogage. Les options sont concaténées avec des espaces les séparant de
entre eux et à partir de la version du compilateur. Voir également -frecord-gcc-commutateurs pour un autre
moyen de stocker les options du compilateur dans le fichier objet. C'est la valeur par défaut.
-gno-record-gcc-commutateurs
Interdire l'ajout d'options de ligne de commande à l'attribut DW_AT_producer dans DWARF
informations de débogage.
-gstrict-nain
Interdire l'utilisation d'extensions de version standard DWARF ultérieure à celle sélectionnée avec
-nain-version. Sur la plupart des cibles utilisant des extensions DWARF non conflictuelles ultérieures
les versions standard sont autorisées.
-gno-strict-nain
Autoriser l'utilisation d'extensions de version standard DWARF ultérieure à celle sélectionnée avec
-nain-version.
-gz[=type]
Produisez des sections de débogage compressées au format DWARF, si cela est pris en charge. Si type is
pas donné, le type par défaut dépend des capacités de l'assembleur et de l'éditeur de liens
utilisé. type peut être l'un des aucun (ne pas compresser les sections de débogage), zlib (utiliser zlib
compression au format ELF gABI), ou zlib-gnu (utiliser la compression zlib dans GNU traditionnel
format). Si l'éditeur de liens ne prend pas en charge l'écriture de sections de débogage compressées, l'option
est rejeté. Sinon, si l'assembleur ne les supporte pas, -gz est silencieusement
ignoré lors de la production de fichiers objets.
-gvms
Produisez des informations de débogage au format de débogage Alpha/VMS (si cela est pris en charge). Cette
est le format utilisé par DEBUG sur les systèmes Alpha/VMS.
-gniveau
-ggdbniveau
-gstabsniveau
-gcoffniveau
-gxcoffniveau
-gvmsniveau
Demandez des informations de débogage et utilisez également niveau pour spécifier la quantité d'informations. Les
le niveau par défaut est 2.
Le niveau 0 ne produit aucune information de débogage. Ainsi, -g0 annule -g.
Le niveau 1 produit un minimum d'informations, suffisant pour effectuer des backtraces dans certaines parties du
programme que vous ne prévoyez pas de déboguer. Cela comprend les descriptions des fonctions et
variables externes et tables de numéros de ligne, mais aucune information sur les variables locales.
Le niveau 3 comprend des informations supplémentaires, telles que toutes les définitions de macros présentes dans le
programme. Certains débogueurs prennent en charge l'expansion des macros lorsque vous utilisez -g3.
-gdwarf-2 n'accepte pas de niveau de débogage concaténé, car GCC prenait en charge un
option -gnain cela signifiait générer des informations de débogage dans la version 1 du DWARF
format (qui est très différent de la version 2), et cela aurait été trop déroutant.
Ce format de débogage est obsolète depuis longtemps, mais l'option ne peut pas être modifiée maintenant. Utilisez plutôt
un montant supplémentaire de -gniveau option pour changer le niveau de débogage pour DWARF.
-gtoggle
Désactivez la génération d'informations de débogage, si cette option ne la génère pas, ou activez-la
au niveau 2 sinon. La position de cet argument dans la ligne de commande ne
question; il prend effet après le traitement de toutes les autres options, et il ne le fait que
une fois, peu importe combien de fois il est donné. Ceci est principalement destiné à être utilisé avec
-fcompare-debug.
-fsanitize=adresse
Activez AddressSanitizer, un détecteur rapide d'erreurs de mémoire. Les instructions d'accès à la mémoire sont
instrumenté pour détecter les bogues hors limites et utilisation après-libre. Voir
<https://github.com/google/sanitizers/wiki/AddressSanitizer> pour plus de détails. Les
le comportement à l'exécution peut être influencé en utilisant le ASAN_OPTIONS variable d'environnement. Lorsque
réglé sur "help=1", les options disponibles sont affichées au démarrage de l'instrument
programme. Voir
<https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags> pour un
liste des options prises en charge.
-fsanitize=adresse-noyau
Activez AddressSanitizer pour le noyau Linux. Voirhttps://github.com/google/kasan/wiki>
pour plus de détails.
-fsanitize=fil
Activez ThreadSanitizer, un détecteur de course de données rapide. Les instructions d'accès à la mémoire sont
instrumenté pour détecter les bugs de course aux données. Voir
<https://github.com/google/sanitizers/wiki#threadsanitizer> pour plus de détails. La course-
le comportement dans le temps peut être influencé en utilisant le TSAN_OPTIONS variable d'environnement ; voir
<https://github.com/google/sanitizers/wiki/ThreadSanitizerFlags> pour une liste de
options prises en charge.
-fsanitize=fuite
Activez LeakSanitizer, un détecteur de fuite de mémoire. Cette option n'a d'importance que pour la liaison de
exécutables et si aucun -fsanitize=adresse ni -fsanitize=fil est utilisé. Dans ce
cas où l'exécutable est lié à une bibliothèque qui remplace "malloc" et d'autres
fonctions d'allocation. Voir
<https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer> pour en savoir plus
des détails. Le comportement à l'exécution peut être influencé à l'aide de la LSAN_OPTIONS sûr, heureux et sain
variable.
-fsanitize=non défini
Activez UndefinedBehaviorSanitizer, un détecteur de comportement non défini rapide. Divers
les calculs sont instrumentés pour détecter un comportement indéfini au moment de l'exécution. Courant
les sous-options sont :
-fsanitize=décalage
Cette option permet de vérifier que le résultat d'une opération de décalage n'est pas
indéfini. Notez que ce qui est exactement considéré comme non défini diffère légèrement
entre C et C++, ainsi qu'entre ISO C90 et C99, etc.
-fsanitize=entier-diviser-par-zéro
Détecte la division entière par zéro ainsi que la division "INT_MIN / -1".
-fsanitize=inaccessible
Avec cette option, le compilateur transforme l'appel "__builtin_unreachable" en un
appel de message de diagnostic à la place. Lorsque vous atteignez l'appel "__builtin_unreachable",
le comportement est indéfini.
-fsanitize=lié à VLA
Cette option demande au compilateur de vérifier que la taille d'une longueur variable
le tableau est positif.
-fsanitize=null
Cette option active la vérification du pointeur. En particulier, l'application construite avec
cette option activée émettra un message d'erreur lorsqu'elle essaiera de déréférencer un
Pointeur NULL, ou si une référence (éventuellement une référence rvalue) est liée à un NULL
pointeur, ou si une méthode est invoquée sur un objet pointé par un pointeur NULL.
-fsanitize=retour
Cette option active la vérification de l'instruction de retour. Programmes construits avec cette option
allumé émettra un message d'erreur lorsque la fin d'une fonction non-void est
atteint sans réellement renvoyer de valeur. Cette option ne fonctionne qu'en C++.
-fsanitize=signé-entier-débordement
Cette option active la vérification de débordement d'entier signé. On vérifie que le résultat de
"+", "*", et les unaires et binaires "-" ne débordent pas dans le signe
arithmétique. Attention, les règles de promotion des nombres entiers doivent être prises en compte. C'est-à-dire,
ce qui suit n'est pas un débordement :
caractère signé a = SCHAR_MAX ;
a++ ;
-fsanitize=limites
Cette option permet l'instrumentation des limites du tableau. Divers hors limites
les accès sont détectés. Membres de tableau flexibles, tableaux de type membre de tableau flexibles,
et les initialiseurs de variables avec stockage statique ne sont pas instrumentés.
-fsanitize=alignement
Cette option permet de vérifier l'alignement des pointeurs lorsqu'ils sont déréférencés,
ou lorsqu'une référence est liée à une cible insuffisamment alignée, ou lorsqu'une méthode ou
le constructeur est invoqué sur un objet insuffisamment aligné.
-fsanitize=taille-objet
Cette option permet d'instrumenter les références mémoire à l'aide de la
Fonction "__builtin_object_size". Divers accès de pointeur hors limites sont
détecté.
-fsanitize=float-divide-by-zero
Détecter la division à virgule flottante par zéro. Contrairement à d'autres options similaires,
-fsanitize=float-divide-by-zero n'est pas activé par -fsanitize=non défini, Depuis
la division à virgule flottante par zéro peut être un moyen légitime d'obtenir des infinis
et NaNs.
-fsanitize=float-cast-overflow
Cette option active la vérification de la conversion du type à virgule flottante en nombre entier. Nous vérifions
que le résultat de la conversion ne déborde pas. Contrairement à d'autres similaires
options, -fsanitize=float-cast-overflow n'est pas activé par -fsanitize=non défini.
Cette option ne fonctionne pas correctement avec les exceptions "FE_INVALID" activées.
-fsanitize=attribut-nonnull
Cette option permet l'instrumentation des appels, en vérifiant si les valeurs nulles ne sont pas
passé aux arguments marqués comme nécessitant une valeur non nulle par la fonction "nonnull"
attribuer.
-fsanitize=retourne-attribut-non-null
Cette option permet l'instrumentation des instructions de retour dans les fonctions marquées avec
attribut de fonction "returns_nonnull", pour détecter le retour de valeurs nulles à partir de tels
fonctions.
-fsanitize=bool
Cette option permet l'instrumentation des charges à partir de bool. Si une valeur autre que 0/1
est chargé, une erreur d'exécution est émise.
-fsanitize=énumération
Cette option permet l'instrumentation des charges à partir d'un type enum. Si une valeur
en dehors de la plage de valeurs pour le type enum est chargé, une erreur d'exécution est
Publié.
-fsanitize=vptr
Cette option permet l'instrumentation des appels de fonctions membres C++, des accès membres
et quelques conversions entre les pointeurs vers les classes de base et dérivées, pour vérifier le
l'objet référencé a le type dynamique correct.
Tandis que -ftrapv provoque l'émission de traps pour les débordements signés, -fsanitize=non défini
donne un message de diagnostic. Cela ne fonctionne actuellement que pour la famille de langages C.
-fno-sanitize=tout
Cette option désactive tous les désinfectants précédemment activés. -fsanitize=tout n'est pas
autorisé, car certains désinfectants ne peuvent pas être utilisés ensemble.
-fasan-shadow-offset=nombre
Cette option force GCC à utiliser un décalage d'ombre personnalisé dans les contrôles AddressSanitizer. Il est
utile pour expérimenter différentes dispositions de mémoire fantôme dans le noyau
AdresseSanitizer.
-fsanitize-récupérer[=opte]
-fsanitize-récupérer= contrôle le mode de récupération des erreurs pour les désinfectants mentionnés en virgule
liste séparée de opte. L'activation de cette option pour un composant de désinfectant le fait
essayez de continuer à exécuter le programme comme si aucune erreur ne s'était produite. Cela signifie plusieurs
les erreurs d'exécution peuvent être signalées en une seule exécution de programme, et le code de sortie du
programme peut indiquer le succès même lorsque des erreurs ont été signalées. Les
-fno-sanitize-récupération= peut être utilisée pour modifier ce comportement : seul le premier
l'erreur détectée est signalée et le programme se termine avec un code de sortie différent de zéro.
Actuellement, cette fonctionnalité ne fonctionne que pour -fsanitize=non défini (et ses sous-options sauf
pour -fsanitize=inaccessible et -fsanitize=retour), -fsanitize=float-cast-overflow,
-fsanitize=float-divide-by-zero et -fsanitize=adresse-noyau. Pour ces désinfectants
la récupération d'erreur est activée par défaut. -fsanitize-recover=tout et
-fno-sanitize-recover=tout est également acceptée, la première permet la récupération pour tous
désinfectants qui le prennent en charge, ce dernier désactive la récupération pour tous les désinfectants qui
soutiens le.
Syntaxe sans explicite opte paramètre est obsolète. C'est équivalent à
-fsanitize-recover = non défini, float-cast-overflow, float-divide-by-zero
De même -fno-assainize-recover équivaut à
-fno-sanitize-recover = non défini, float-cast-overflow, float-divide-by-zero
-fsanitize-undefined-trap-on-error
VOTRE -fsanitize-undefined-trap-on-error L'option demande au compilateur de rapporter
comportement non défini utilisant "__builtin_trap" plutôt qu'une routine de bibliothèque "libubsan".
L'avantage de ceci est que la bibliothèque "libubsan" n'est pas nécessaire et n'est pas liée
dedans, il est donc utilisable même dans des environnements autonomes.
-fcheck-pointeur-limites
Activer l'instrumentation du vérificateur de limites de pointeur. Chaque référence mémoire est instrumentée
avec des vérifications du pointeur utilisé pour l'accès à la mémoire par rapport aux limites associées à ce
aiguille.
Actuellement, il n'y a qu'une implémentation pour Intel MPX disponible, donc cible x86 et
-mmpx sont nécessaires pour activer cette fonctionnalité. L'instrumentation basée sur MPX nécessite un
bibliothèque d'exécution pour activer MPX dans le matériel et gérer les signaux de violation des limites. Par
par défaut quand -fcheck-pointeur-limites et -mmpx sont utilisées pour lier un programme, le
Liens du pilote GCC contre le libmpx bibliothèque d'exécution et libmpxwrappers une bibliothèque. Ce
passe également '-z bndplt' à un éditeur de liens au cas où il prendrait en charge cette option (qui est cochée
sur la configuration de libmpx). Notez que les anciennes versions de l'éditeur de liens peuvent ignorer l'option. Or
l'éditeur de liens ne prend pas en charge l'option '-z bndplt'. Sans prise en charge de '-z bndplt' dans l'éditeur de liens all
les appels aux bibliothèques dynamiques perdent les limites dépassées, ce qui réduit le niveau de protection global. C'est
fortement recommandé d'utiliser l'éditeur de liens avec le support '-z bndplt'. Dans le cas où un tel éditeur de liens n'est pas
disponible, il est conseillé de toujours utiliser -static-libmpxwrappers pour une meilleure protection
niveau ou utilisation -statique pour éviter complètement les appels externes aux bibliothèques dynamiques. MPX-
l'instrumentation basée peut être utilisée pour le débogage et peut également être incluse dans la production
code pour augmenter la sécurité du programme. Selon l'utilisation, vous pouvez avoir différents
exigences pour la bibliothèque d'exécution. La version actuelle de la bibliothèque d'exécution MPX
est plus orienté pour être utilisé comme un outil de débogage. L'utilisation de la bibliothèque d'exécution MPX implique
-lptthread. Voir également -statique-libmpx. Le comportement de la bibliothèque d'exécution peut être influencé
en utilisant divers CHKP_RT_* Variables d'environnement. Voir
<https://gcc.gnu.org/wiki/Intel%20MPX%20support%20in%20the%20GCC%20compiler> pour en savoir plus
détails.
L'instrumentation générée peut être contrôlée par divers -fchkp-* options et par le
Attribut de champ de structure "bnd_variable_size" et "bnd_legacy", et "bnd_instrument"
attributs de fonction. GCC fournit également un certain nombre de fonctions intégrées pour contrôler
le vérificateur des limites du pointeur.
-fchkp-check-incomplet-type
Générer des vérifications de limites de pointeur pour les variables de type incomplet. Activé par
défaut.
-fchkp-limites-étroites
Contrôle les limites utilisées par Pointer Bounds Checker pour les pointeurs vers les champs d'objet. Si
le rétrécissement est activé, puis les limites de champ sont utilisées. Sinon, les limites d'objet sont utilisées.
Voir aussi -fchkp-tableau étroit à le plus interne et -fchkp-premier-champ-a-propres-limites.
Activé par défaut.
-fchkp-premier-champ-a-propres-limites
Force Pointer Bounds Checker à utiliser des limites réduites pour l'adresse du premier
champ dans la structure. Par défaut, un pointeur vers le premier champ a les mêmes limites
comme pointeur sur l'ensemble de la structure.
-fchkp-tableau étroit à le plus interne
Force Pointer Bounds Checker à utiliser les limites des tableaux les plus internes en cas d'imbrication
accès à la baie statique. Par défaut, cette option est désactivée et les limites de la plus externe
tableau sont utilisés.
-fchkp-optimiser
Active les optimisations de Pointer Bounds Checker. Activé par défaut lors de l'optimisation
niveaux -O, -O2, -O3.
-fchkp-use-fast-string-functions
Permet l'utilisation des versions *_nobnd des fonctions de chaîne (pas de copie des limites) par le pointeur
Vérificateur de limites. Désactivé par défaut.
-fchkp-use-nochk-string-functions
Permet l'utilisation des versions *_nochk des fonctions de chaîne (sans vérifier les limites) par le pointeur
Vérificateur de limites. Désactivé par défaut.
-fchkp-utiliser-limites-statiques
Autoriser Pointer Bounds Checker à générer des limites statiques contenant des limites statiques
variables. Activé par défaut.
-fchkp-use-static-const-limites
Utilisez des limites initialisées statiquement pour les limites constantes au lieu de les générer chacune
temps qu'ils sont nécessaires. Par défaut activé lorsque -fchkp-utiliser-limites-statiques est autorisé.
-fchkp-traiter-zéro-dynamique-taille-comme-infini
Avec cette option, les objets de type incomplet dont la taille obtenue dynamiquement est nulle
sont traités comme ayant une taille infinie à la place par Pointer Bounds Checker. Cette option
peut être utile si un programme est lié à une bibliothèque manquant des informations de taille pour certains
symboles. Désactivé par défaut.
-fchkp-vérifier-lire
Demande à Pointer Bounds Checker de générer des vérifications pour tous les accès en lecture à la mémoire.
Activé par défaut.
-fchkp-vérifier-écrire
Demande à Pointer Bounds Checker de générer des vérifications pour tous les accès en écriture à la mémoire.
Activé par défaut.
-fchkp-store-bounds
Demande à Pointer Bounds Checker de générer des magasins de limites pour les écritures de pointeur.
Activé par défaut.
-fchkp-instrument-appels
Demande à Pointer Bounds Checker de transmettre des limites de pointeur aux appels. Activé par défaut.
-fchkp-instrument-marqué-seulement
Demande à Pointer Bounds Checker d'instrumenter uniquement les fonctions marquées du
Attribut "bnd_instrument". Désactivé par défaut.
-fchkp-use-wrappers
Permet à Pointer Bounds Checker de remplacer les appels aux fonctions intégrées par des appels à
fonctions d'emballage. Lorsque -fchkp-use-wrappers est utilisé pour lier un programme, le pilote GCC
liens automatiquement contre libmpxwrappers. Voir également -static-libmpxwrappers. Activée
par défaut.
-fdump-final-insns[=filet]
Videz la représentation interne finale (RTL) dans filet. Si l'argument optionnel est
omis (ou si filet est "."), le nom du fichier de vidage est déterminé en ajoutant
".gkd" au nom du fichier de sortie de compilation.
-fcompare-debug[=opte]
Si aucune erreur ne se produit lors de la compilation, exécutez le compilateur une deuxième fois, en ajoutant opte et
-fcompare-debug-seconde aux arguments passés à la deuxième compilation. Jetez le
représentation interne finale dans les deux compilations, et afficher une erreur si elles diffèrent.
Si le signe égal est omis, la valeur par défaut -gtoggle est utilisé.
La variable d'environnement GCC_COMPARE_DEBUG, si défini, non vide et non nul,
active implicitement -fcompare-debug. Si GCC_COMPARE_DEBUG est défini sur une chaîne
commençant par un tiret, puis il est utilisé pour opte, sinon la valeur par défaut -gtoggle is
utilisé.
-fcompare-debug=, avec le signe égal mais sans opte, est équivalent à
-fno-comparer-debug, ce qui désactive le dumping de la représentation finale et le
deuxième compilation, empêchant même GCC_COMPARE_DEBUG de prendre effet.
Pour vérifier la couverture complète pendant -fcompare-debug tester, définir GCC_COMPARE_DEBUG dire
-fcompare-debug-not-overridden, que GCC rejette comme une option invalide dans tout
compilation (plutôt que prétraitement, assemblage ou liaison). Pour obtenir juste un avertissement,
mise GCC_COMPARE_DEBUG à -w%n-fcompare-debug ne sauraient remplacé ça ira.
-fcompare-debug-seconde
Cette option est implicitement passée au compilateur pour la deuxième compilation demandée
by -fcompare-debug, ainsi que des options pour désactiver les avertissements et en omettant d'autres options
cela entraînerait des effets secondaires des sorties du compilateur vers des fichiers ou vers la sortie standard.
Les fichiers de vidage et les fichiers temporaires conservés sont renommés de manière à contenir le ".gk"
extension supplémentaire lors de la deuxième compilation, pour éviter d'écraser ceux
généré par le premier.
Lorsque cette option est transmise au pilote du compilateur, cela provoque le premier compilation à
être ignoré, ce qui le rend utile pour rien d'autre que le débogage du compilateur proprement dit.
-felimate-nain2-dups
Compressez les informations de débogage DWARF 2 en éliminant les informations dupliquées sur
chaque symbole. Cette option n'a de sens que lors de la génération du débogage DWARF 2
informations avec -gdwarf-2.
-femit-struct-debug-baseonly
N'émettez des informations de débogage pour les types de type struct que lorsque le nom de base du
Le fichier source de compilation correspond au nom de base du fichier dans lequel la structure est définie.
Cette option réduit considérablement la taille des informations de débogage, mais à
perte potentielle significative d'informations de type pour le débogueur. Voir
-femit-struct-debug-réduit pour une option moins agressive. Voir
-femit-struct-debug-debuged pour un contrôle plus détaillé.
Cette option ne fonctionne qu'avec DWARF 2.
-femit-struct-debug-réduit
N'émettez des informations de débogage pour les types de type struct que lorsque le nom de base du
le fichier source de compilation correspond au nom de base du fichier dans lequel le type est défini,
sauf si la structure est un modèle ou définie dans un en-tête système.
Cette option réduit considérablement la taille des informations de débogage, certaines
perte potentielle d'informations de type pour le débogueur. Voir -femit-struct-debug-baseonly
pour une option plus agressive. Voir -femit-struct-debug-debuged pour plus de détails
.
Cette option ne fonctionne qu'avec DWARF 2.
-femit-struct-debug-debuged[=liste-spéc]
Spécifiez les types de type struct pour lesquels le compilateur génère des informations de débogage. Les
l'intention est de réduire les informations de débogage de structure en double entre différents fichiers objet
au sein d'un même programme.
Cette option est une version détaillée de -femit-struct-debug-réduit et
-femit-struct-debug-baseonly, qui répond à la plupart des besoins.
Une spécification a la syntaxe[rép :|Indiana:][ordre :|genre:](tout|sys|base|aucun)
Le premier mot facultatif limite la spécification aux structures qui sont utilisées directement
(rép :) ou utilisé indirectement (Indiana:). Un type struct est utilisé directement lorsqu'il s'agit du type
d'une variable, membre. Les utilisations indirectes surviennent via des pointeurs vers des structures. C'est-à-dire,
lorsque l'utilisation d'une structure incomplète est valide, l'utilisation est indirecte. Un exemple est struct
UN direct; struct deux * indirect;.
Le deuxième mot facultatif limite la spécification aux structures ordinaires (ordre :) ou
structures génériques (genre:). Les structures génériques sont un peu compliquées à expliquer. Pour le C++,
ce sont des spécialisations non explicites de classes modèles, ou des classes non modèles
au sein de ce qui précède. D'autres langages de programmation ont des génériques, mais
-femit-struct-debug-debuged ne les met pas encore en œuvre.
Le troisième mot spécifie les fichiers source des structures pour lesquelles le compilateur
devrait émettre des informations de débogage. Les valeurs aucun et tout avoir le sens normal. Les
Plus-value base signifie que la base de nom du fichier dans lequel la déclaration de type
apparaît doit correspondre à la base du nom du fichier de compilation principal. En pratique,
cela signifie que lors de la compilation foo.c, les informations de débogage sont générées pour les types
déclaré dans ce fichier et foo.h, mais pas les autres fichiers d'en-tête. La valeur sys veux dire
ces types satisfaisant base ou déclaré dans les en-têtes du système ou du compilateur.
Vous devrez peut-être expérimenter pour déterminer les meilleurs paramètres pour votre application.
La valeur par défaut est -femit-struct-debug-detailed=tout.
Cette option ne fonctionne qu'avec DWARF 2.
-fno-merge-debug-strings
Dirigez l'éditeur de liens pour ne pas fusionner les chaînes dans les informations de débogage qui sont
identiques dans différents fichiers objets. La fusion n'est pas prise en charge par tous les assembleurs ou
liens. La fusion diminue la taille des informations de débogage dans le fichier de sortie à
le coût de l'augmentation du temps de traitement des liens. La fusion est activée par défaut.
-fdebug-prefix-map=et les sites anciens=nouvelle
Lors de la compilation de fichiers dans le répertoire et les sites anciens, enregistrez les informations de débogage les décrivant comme
in nouvelle à la place.
-fno-nain2-cfi-asm
Émettre les informations de déroulement de DWARF 2 en tant que section ".eh_frame" générée par le compilateur au lieu d'utiliser
Directives GAS ".cfi_*".
-p Générer du code supplémentaire pour écrire des informations de profil adaptées au programme d'analyse
prof. Vous devez utiliser cette option lors de la compilation des fichiers sources sur lesquels vous souhaitez des données,
et vous devez également l'utiliser lors de la liaison.
-pg Générer du code supplémentaire pour écrire des informations de profil adaptées au programme d'analyse
gprof. Vous devez utiliser cette option lors de la compilation des fichiers sources sur lesquels vous souhaitez des données,
et vous devez également l'utiliser lors de la liaison.
-Q Fait en sorte que le compilateur imprime chaque nom de fonction au fur et à mesure qu'il est compilé, et en imprime
statistiques sur chaque passe lorsqu'elle se termine.
-ftime-rapport
Fait en sorte que le compilateur imprime des statistiques sur le temps consommé par chaque passe lorsqu'il
se termine.
-fmem-rapport
Fait en sorte que le compilateur imprime des statistiques sur l'allocation de mémoire permanente lorsqu'il
se termine.
-fmem-rapport-wpa
Le compilateur imprime des statistiques sur l'allocation de mémoire permanente pour le WPA
phase seulement.
-fpre-ipa-mem-rapport
-fpost-ipa-mem-rapport
Le compilateur imprime des statistiques sur l'allocation de mémoire permanente avant ou
après optimisation interprocédurale.
-fprofile-rapport
Le compilateur imprime des statistiques sur la cohérence du profil (estimé)
et l'effet des passes individuelles.
-fstack-utilisation
Rend les informations d'utilisation de la pile de sortie du compilateur pour le programme, sur une fonction par fonction
base. Le nom de fichier pour le dump est fait en ajoutant .swf à la nomaux. nomaux is
généré à partir du nom du fichier de sortie, s'il est explicitement spécifié et qu'il ne s'agit pas d'un
exécutable, sinon c'est le nom de base du fichier source. Une entrée est composée de
trois champs :
* Le nom de la fonction.
* Un nombre d'octets.
* Un ou plusieurs qualificatifs : "static", "dynamic", "bounded".
Le qualificatif « statique » signifie que la fonction manipule la pile de manière statique :
nombre fixe d'octets sont alloués à la trame lors de l'entrée de la fonction et libérés sur
sortie de la fonction ; aucun ajustement de pile n'est effectué par ailleurs dans la fonction. La deuxième
est ce nombre fixe d'octets.
Le qualificatif "dynamique" signifie que la fonction manipule la pile dynamiquement : dans
en plus de l'allocation statique décrite ci-dessus, des ajustements de pile sont effectués dans le
corps de la fonction, par exemple pour pousser/pop des arguments autour des appels de fonction. Si la
le qualificatif « borné » est également présent, le montant de ces ajustements est borné à
temps de compilation et le deuxième champ est une limite supérieure de la quantité totale de pile utilisée
par la fonction. S'il n'est pas présent, le montant de ces régularisations n'est pas borné
au moment de la compilation et le deuxième champ ne représente que la partie délimitée.
-fprofile-arcs
Ajouter du code pour que le programme se déroule arcs sont instrumentés. Pendant l'exécution du programme
enregistre combien de fois chaque branche et chaque appel est exécuté et combien de fois il est pris
ou des retours. Lorsque le programme compilé se termine, il enregistre ces données dans un fichier appelé
auxname.gcda pour chaque fichier source. Les données peuvent être utilisées à des fins de profil
optimisations (-fbranche-probabilités), ou pour l'analyse de couverture de test
(-ftest-couverture). Chaque fichier objet nomaux est généré à partir du nom du
fichier de sortie, s'il est explicitement spécifié et qu'il ne s'agit pas de l'exécutable final, sinon il
est le nom de base du fichier source. Dans les deux cas, tout suffixe est supprimé (par exemple
foo.gcda pour le fichier d'entrée rép/foo.c, ou rép/foo.gcda pour le fichier de sortie spécifié comme -o
dir/foo.o).
--couverture
Cette option est utilisée pour compiler et lier le code instrumenté pour l'analyse de couverture. Les
option est synonyme de -fprofile-arcs -ftest-couverture (lors de la compilation) et -lgcov
(lors de la liaison). Consultez la documentation de ces options pour plus de détails.
* Compilez les fichiers sources avec -fprofile-arcs plus optimisation et génération de code
option. Pour l'analyse de couverture de test, utilisez le -ftest-couverture option.
Vous n'avez pas besoin de profiler chaque fichier source dans un programme.
* Liez vos fichiers objets avec -lgcov or -fprofile-arcs (ce dernier implique la
ancien).
* Exécutez le programme sur une charge de travail représentative pour générer le profil d'arc
informations. Cela peut être répété un certain nombre de fois. Vous pouvez exécuter simultanément
instances de votre programme, et à condition que le système de fichiers prenne en charge le verrouillage, le
les fichiers de données seront correctement mis à jour. Les appels « fork » sont également détectés et
correctement géré (le double comptage ne se produira pas).
* Pour les optimisations dirigées par profil, compilez à nouveau les fichiers source avec le même
options d'optimisation et de génération de code plus -fbranche-probabilités.
* Pour l'analyse de couverture de test, utilisez gcov produire des informations lisibles par l'homme à partir de
le .gcno et .gcda des dossiers. Se référer au gcov documentation pour plus
</br>L’Information.
Avec -fprofile-arcs, pour chaque fonction de votre programme, GCC crée un flux de programme
graphique, puis trouve un arbre couvrant pour le graphique. Seuls les arcs qui ne sont pas sur le
spanning tree doit être instrumenté : le compilateur ajoute du code pour compter le nombre de
fois que ces arcs sont exécutés. Lorsqu'un arc est la seule sortie ou la seule entrée
un bloc, le code d'instrumentation peut être ajouté au bloc ; sinon, une nouvelle base
doit être créé pour contenir le code d'instrumentation.
-ftest-couverture
Produire un fichier de notes que le gcov l'utilitaire de couverture de code peut utiliser pour afficher le programme
couverture. Le fichier de notes de chaque fichier source est appelé auxname.gcno. Se référer au
-fprofile-arcs option ci-dessus pour une description de nomaux et des instructions sur la façon de
générer des données de couverture de test. Les données de couverture correspondent plus étroitement aux fichiers source si
vous n'optimisez pas.
-fdbg-cnt-liste
Imprimez le nom et la limite supérieure du compteur pour tous les compteurs de débogage.
-fdbg-cnt=liste de contre-valeurs
Définissez la limite supérieure du compteur de débogage interne. liste de contre-valeurs est une virgule séparée
liste des prénom:Plus-value paires qui définissent la limite supérieure de chaque compteur de débogage prénom à
Plus-value. Tous les compteurs de débogage ont la limite supérieure initiale de « UINT_MAX » ; donc "dbg_cnt"
renvoie toujours vrai sauf si la limite supérieure est définie par cette option. Par exemple, avec
-fdbg-cnt=dce:10,tail_call:0, "dbg_cnt(dce)" renvoie vrai uniquement pour les 10 premiers
invocations.
-fendable-mots-pass
-fdésactiver-mots-pass=liste-plage
Il s'agit d'un ensemble d'options qui sont utilisées pour explicitement désactiver/activer l'optimisation
passe. Ces options sont destinées à être utilisées pour le débogage de GCC. Les utilisateurs du compilateur doivent
utilisez plutôt les options habituelles pour activer/désactiver les passes.
-fdisable-ipa-pass
Désactiver le pass IPA pass. pass est le nom du passe. Si la même passe est statique
invoqué plusieurs fois dans le compilateur, le nom de passe doit être suivi d'un
numéro séquentiel à partir de 1.
-fdisable-rtl-pass
-fdisable-rtl-pass=liste-plage
Désactiver le pass RTL pass. pass est le nom du passe. Si la même passe est statique
invoqué plusieurs fois dans le compilateur, le nom de passe doit être suivi d'un
numéro séquentiel à partir de 1. liste-plage est une liste séparée par des virgules de
des plages de fonctions ou des noms d'assembleur. Chaque plage est une paire de nombres séparés par un
côlon. La gamme est inclusive aux deux extrémités. Si la plage est triviale, le nombre
paire peut être simplifiée en un seul nombre. Si le nœud du graphe d'appel de la fonction
uid tombe dans l'une des plages spécifiées, le pass est désactivé pour cela
fonction. le uid est affiché dans l'en-tête de fonction d'un fichier de vidage, et le pass
les noms peuvent être vidés en utilisant l'option -fdump-passes.
-fdisable-tree-pass
-fdisable-tree-pass=liste-plage
Désactiver l'arborescence pass. Voir -fdisable-rtl pour la description de l'option
arguments.
-fenable-ipa-pass
Activer le pass IPA pass. pass est le nom du passe. Si la même passe est statique
invoqué plusieurs fois dans le compilateur, le nom de passe doit être suivi d'un
numéro séquentiel à partir de 1.
-fenable-rtl-pass
-fenable-rtl-pass=liste-plage
Activer le pass RTL pass. Voir -fdisable-rtl pour la description de l'argument d'option et
exemples.
-arbre-fenable-pass
-arbre-fenable-pass=liste-plage
Activer l'arborescence pass. Voir -fdisable-rtl pour la description des arguments d'option.
Voici quelques exemples illustrant l'utilisation de ces options.
# désactiver ccp1 pour toutes les fonctions
-fdisable-tree-ccp1
# désactiver le déroulement complet pour la fonction dont l'UID du nœud cgraph est 1
-fenable-tree-cunroll=1
# désactiver gcse2 pour les fonctions aux plages suivantes [1,1],
# [300,400 400,1000] et [XNUMX XNUMX]
# désactiver gcse2 pour les fonctions foo et foo2
-fdisable-rtl-gcse2=foo,foo2
# désactiver l'inline précoce
-fdisable-tree-einline
# désactiver l'inlining ipa
-fdisable-ipa-inline
# activer le déroulement complet de l'arbre
-fenable-tree-dérouler
-dlettres
-fdump-rtl-pass
-fdump-rtl-pass=nom de fichier
Dit de faire des vidages de débogage pendant la compilation aux moments spécifiés par lettres. Ce
est utilisé pour déboguer les passes basées sur RTL du compilateur. Les noms de fichiers pour la plupart
des vidages sont effectués en ajoutant un numéro de passe et un mot au nom de vidageainsi que,
les fichiers sont créés dans le répertoire du fichier de sortie. En cas de =nom de fichier option,
le vidage est sorti sur le fichier donné au lieu des fichiers de vidage numérotés. Noter
que le numéro de passe est calculé de manière statique au fur et à mesure que les passes sont enregistrées dans la passe
directeur. Ainsi la numérotation n'est pas liée à l'ordre dynamique d'exécution des
passe. En particulier, un pass installé par un plugin peut avoir un numéro supérieur à 200 même
s'il s'exécute assez tôt. nom de vidage est généré à partir du nom du fichier de sortie,
s'il est explicitement spécifié et qu'il ne s'agit pas d'un exécutable, sinon c'est le nom de base de
le fichier source. Ces commutateurs peuvent avoir des effets différents lorsque -E est utilisé pour
prétraitement.
Les vidages de débogage peuvent être activés avec un -fdump-rtl commutateur ou certains -d option lettres. Ici
sont les lettres possibles à utiliser dans pass et lettres, et leurs significations :
-fdump-rtl-alignements
Vidage après que les alignements de branches ont été calculés.
-fdump-rtl-asmcons
Vider après avoir corrigé les instructions rtl qui ont des contraintes d'entrée/sortie insatisfaites.
-fdump-rtl-auto_inc_dec
Vidage après la découverte auto-inc-dec. Ce pass n'est exécuté que sur les architectures qui
avoir des instructions d'augmentation automatique ou de décroissance automatique.
-fdump-rtl-barrières
Jeter après avoir nettoyé les instructions de la barrière.
-fdump-rtl-bbpart
Vidage après partitionnement des blocs de base chauds et froids.
-fdump-rtl-bbro
Vidage après réorganisation des blocs.
-fdump-rtl-btl1
-fdump-rtl-btl2
-fdump-rtl-btl1 et -fdump-rtl-btl2 activer le dumping après la cible à deux branches
optimisation de charge passe.
-fdump-rtl-contourner
Vidage après saut et optimisations de flux de contrôle.
-fdump-rtl-combiner
Vidage après le passage de la combinaison d'instructions RTL.
-fdump-rtl-compgotos
Dump après avoir dupliqué les gotos calculés.
-fdump-rtl-ce1
-fdump-rtl-ce2
-fdump-rtl-ce3
-fdump-rtl-ce1, -fdump-rtl-ce2 et -fdump-rtl-ce3 permettre le dumping après les trois
si la conversion réussit.
-fdump-rtl-cprop_hardreg
Vidage après propagation de la copie du registre papier.
-fdump-rtl-csa
Videz après avoir combiné les ajustements de pile.
-fdump-rtl-cse1
-fdump-rtl-cse2
-fdump-rtl-cse1 et -fdump-rtl-cse2 activer le dumping après les deux
l'élimination de la sous-expression passe.
-fdump-rtl-dce
Videz après l'élimination du code mort autonome.
-fdump-rtl-dbr
Vidage après la planification de branche retardée.
-fdump-rtl-dce1
-fdump-rtl-dce2
-fdump-rtl-dce1 et -fdump-rtl-dce2 activer le dumping après les deux magasins morts
l'élimination passe.
-fdump-rtl-eh
Vidage après finalisation du code de gestion EH.
-fdump-rtl-eh_ranges
Vidage après conversion des régions de plage de traitement EH.
-fdump-rtl-expand
Vidage après génération RTL.
-fdump-rtl-fwprop1
-fdump-rtl-fwprop2
-fdump-rtl-fwprop1 et -fdump-rtl-fwprop2 activer le dumping après les deux avant
passe de propagation.
-fdump-rtl-gcse1
-fdump-rtl-gcse2
-fdump-rtl-gcse1 et -fdump-rtl-gcse2 autoriser le dumping après la mise en commun globale
élimination de sous-expression.
-fdump-rtl-init-regs
Dump après l'initialisation des registres.
-fdump-rtl-initiales
Vidage après le calcul des ensembles de valeurs initiales.
-fdump-rtl-into_cfglayout
Vider après la conversion en mode cfglayout.
-fdump-rtl-ira
Vidage après l'allocation de registre itérée.
-fdump-rtl-saut
Dump après l'optimisation du deuxième saut.
-fdump-rtl-loop2
-fdump-rtl-loop2 active le vidage après le passage de l'optimisation de la boucle rtl.
-fdump-rtl-mach
Vider après avoir effectué la passe de réorganisation dépendante de la machine, si cette passe
existe.
-fdump-rtl-mode_sw
Vidage après suppression des commutateurs de mode redondants.
-fdump-rtl-rnreg
Vidage après renumérotation des registres.
-fdump-rtl-outof_cfglayout
Vider après la conversion depuis le mode cfglayout.
-fdump-rtl-judas2
Dump après le judas.
-fdump-rtl-postrechargement
Vidage après les optimisations post-rechargement.
-fdump-rtl-pro_and_epilogue
Dump après avoir généré les prologues et épilogues de fonction.
-fdump-rtl-sched1
-fdump-rtl-sched2
-fdump-rtl-sched1 et -fdump-rtl-sched2 activer le dumping après le bloc de base
les passes de planification.
-fdump-rtl-ree
Vidage après élimination de l'extension signe/zéro.
-fdump-rtl-seqabstr
Vidage après la découverte de séquence commune.
-fdump-rtl-raccourcir
Jeter après avoir raccourci les branches.
-fdump-rtl-frère
Vidage après les optimisations d'appels frères et sœurs.
-fdump-rtl-split1
-fdump-rtl-split2
-fdump-rtl-split3
-fdump-rtl-split4
-fdump-rtl-split5
Ces options permettent le dumping après cinq tours de fractionnement d'instructions.
-fdump-rtl-sms
Vidage après la planification modulo. Ce pass n'est exécuté que sur certaines architectures.
-fdump-rtl-pile
Vidage après conversion des registres "flat register file" de GCC vers les x87
registres en forme de pile. Ce pass n'est exécuté que sur les variantes x86.
-fdump-rtl-sous-reg1
-fdump-rtl-sous-reg2
-fdump-rtl-sous-reg1 et -fdump-rtl-sous-reg2 activer le dumping après les deux sous-reg
l'expansion passe.
-fdump-rtl-unshare
Vider après que tout rtl n'a pas été partagé.
-fdump-rtl-vartrack
Vidage après suivi variable.
-fdump-rtl-vregs
Vidage après conversion des registres virtuels en registres durs.
-fdump-rtl-web
Vidage après division de la plage en direct.
-fdump-rtl-regclass
-fdump-rtl-subregs_of_mode_init
-fdump-rtl-subregs_of_mode_finish
-fdump-rtl-définition
-fdump-rtl-dfinish
Ces dumps sont définis mais produisent toujours des fichiers vides.
-Dans
-fdump-rtl-all
Produisez toutes les décharges répertoriées ci-dessus.
-dA Annotez la sortie de l'assembleur avec diverses informations de débogage.
-dD Vider toutes les définitions de macro, à la fin du prétraitement, en plus de la normale
sortie.
-dH Produire un vidage de mémoire chaque fois qu'une erreur se produit.
-dp Annotez la sortie de l'assembleur avec un commentaire indiquant quel modèle et
alternative est utilisée. La longueur de chaque instruction est également imprimée.
-dP Videz la RTL dans la sortie de l'assembleur sous forme de commentaire avant chaque instruction. Aussi
allume -dp annotation.
-dx Générez simplement du RTL pour une fonction au lieu de la compiler. Généralement utilisé avec
-fdump-rtl-expand.
-fdump-noaddr
Lors des vidages de débogage, supprimez la sortie d'adresse. Cela rend plus possible de
utiliser diff sur les vidages de débogage pour les invocations du compilateur avec différents binaires du compilateur
et/ou différents emplacements de début text / bss / data / heap / stack / dso.
-freport-bug
Collecter et vider les informations de débogage dans un fichier temporaire si ICE dans le compilateur C/C++
s'est produite.
-fdump-non numéroté
Lors des vidages de débogage, supprimez les numéros d'instruction et la sortie d'adresse. Cette
rend plus possible l'utilisation de diff sur les vidages de débogage pour les invocations du compilateur avec
différentes options, notamment avec et sans -g.
-fdump-liens-non numérotés
Lorsque vous effectuez des vidages de débogage (voir -d option ci-dessus), supprimez les numéros d'instruction pour le
liens vers les instructions précédentes et suivantes dans une séquence.
-fdump-unité-de-traduction (C++ uniquement)
-fdump-unité-de-traduction-Options (C++ uniquement)
Transférez une représentation de l'arborescence de l'ensemble de l'unité de traduction dans un fichier.
Le nom du fichier est fait en ajoutant .toi au nom du fichier source, et le fichier est
créé dans le même répertoire que le fichier de sortie. Si la -Options le formulaire est utilisé,
Options contrôle les détails du vidage comme décrit pour le -fdump-arbre options.
-fdump-classe-hiérarchie (C++ uniquement)
-fdump-classe-hiérarchie-Options (C++ uniquement)
Transférez une représentation de la hiérarchie de chaque classe et de la disposition de la table de fonction virtuelle dans un
déposer. Le nom du fichier est fait en ajoutant .classe au nom du fichier source, et le fichier
est créé dans le même répertoire que le fichier de sortie. Si la -Options le formulaire est utilisé,
Options contrôle les détails du vidage comme décrit pour le -fdump-arbre options.
-fdump-ipa-interrupteur
Contrôler le dumping à différentes étapes de l'arbre de langage d'analyse inter-procédurale vers un
déposer. Le nom du fichier est généré en ajoutant un suffixe spécifique au commutateur à la source
nom de fichier et le fichier est créé dans le même répertoire que le fichier de sortie. Les
les vidages suivants sont possibles :
tous Active tous les vidages d'analyse inter-procédurale.
graphique
Vide les informations sur l'optimisation du graphe d'appels, la suppression des fonctions inutilisées et
aligner les décisions.
en ligne
Vidage après l'incorporation de la fonction.
-fdump-passes
Videz la liste des passes d'optimisation qui sont activées et désactivées par le
options de ligne de commande.
-fdump-statistiques-option
Activez et contrôlez le vidage des statistiques de réussite dans un fichier séparé. Le nom du fichier est
généré en ajoutant un suffixe se terminant par .statistiques au nom du fichier source, et le
est créé dans le même répertoire que le fichier de sortie. Si la -option la forme est
utilisé, -Statistiques provoque la somme des compteurs sur l'ensemble de l'unité de compilation tandis que
-détails vide chaque événement au fur et à mesure que les passes les génèrent. La valeur par défaut sans option est
pour additionner les compteurs pour chaque fonction compilée.
-fdump-tree-interrupteur
-fdump-tree-interrupteur-Options
-fdump-tree-interrupteur-Options=nom de fichier
Contrôler le dumping à différentes étapes du traitement de l'arbre de langue intermédiaire pour
un fichier. Le nom de fichier est généré en ajoutant un suffixe spécifique au commutateur au
nom du fichier source et le fichier est créé dans le même répertoire que le fichier de sortie. Dans
cas de =nom de fichier option, le dump est sorti sur le fichier donné au lieu de l'auto
fichiers de vidage nommés. Si la -Options le formulaire est utilisé, Options est une liste de - séparé
options qui contrôlent les détails du vidage. Toutes les options ne sont pas applicables à tous
décharges; ceux qui ne sont pas significatifs sont ignorés. Les options suivantes sont disponibles
propos
Imprimez l'adresse de chaque nœud. Habituellement, cela n'a pas de sens car cela change
selon l'environnement et le fichier source. Son utilisation principale est d'attacher un
dump avec un environnement de débogage.
nomasm
Si "DECL_ASSEMBLER_NAME" a été défini pour une decl donnée, utilisez-la dans le vidage
au lieu de "DECL_NAME". Son utilisation principale est la facilité d'utilisation en travaillant en arrière à partir de
noms mutilés dans le fichier d'assemblage.
svelte
Lors du vidage des représentations intermédiaires frontales, inhibez le dumping des membres de
une portée ou le corps d'une fonction simplement parce que cette portée a été atteinte. Seul
vider ces éléments lorsqu'ils sont directement accessibles par un autre chemin.
Lors du vidage d'arbres joliment imprimés, cette option empêche le vidage des corps de
Structures de contrôle.
Lors du vidage du RTL, imprimez le RTL sous une forme mince (condensée) au lieu de la valeur par défaut
Représentation de type LISP.
brut Imprimez une représentation brute de l'arbre. Par défaut, les arbres sont joliment imprimés dans
une représentation de type C.
détails
Activer des vidages plus détaillés (non pris en compte par chaque option de vidage). Incluez également
informations issues des passes d'optimisation.
stats
Activer le vidage de diverses statistiques sur le pass (non honoré par chaque vidage
option).
blocs
Activer l'affichage des limites des blocs de base (désactivé dans les vidages bruts).
graphique
Pour chacun des autres fichiers de vidage indiqués (-fdump-rtl-pass), vider un
représentation du graphique de flux de contrôle adaptée à la visualisation avec GraphViz pour
fichier.passid.pass.dot. Chaque fonction du fichier est joliment imprimée sous forme de sous-graphe,
afin que GraphViz puisse les rendre tous dans un seul tracé.
Cette option ne fonctionne actuellement que pour les vidages RTL, et le RTL est toujours vidé dans
forme mince.
vps
Activez l'affichage des opérandes virtuels pour chaque instruction.
lin
Activez l'affichage des numéros de ligne pour les relevés.
uid Activer l'affichage de l'ID unique ("DECL_UID") pour chaque variable.
verbeux
Activez l'affichage du vidage de l'arborescence pour chaque instruction.
eh Activez l'affichage du numéro de région EH contenant chaque instruction.
scev
Activer l'affichage des détails de l'analyse de l'évolution scalaire.
optimisé
Activer l'affichage des informations d'optimisation (disponible uniquement dans certains passages).
manqué
Activer l'affichage des informations d'optimisation manquées (disponible uniquement dans certains passages).
noter
Activez d'autres informations d'optimisation détaillées (disponibles uniquement dans certains passages).
=nom de fichier
Au lieu d'un fichier de vidage nommé automatiquement, sortie dans le nom de fichier donné. Le fichier
noms Stdout et stderr sont traités spécialement et sont considérés comme déjà ouverts
flux standards. Par exemple,
gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks=foo.dump
-fdump-tree-pre=stderr fichier.c
sort le vidage du vectoriseur dans foo.dump, tandis que le vidage PRE est envoyé sur stderr.
Si deux noms de fichiers de vidage en conflit sont donnés pour la même passe, alors ce dernier
L'option remplace la précédente.
tous Activez toutes les options, sauf brut, svelte, verbeux et lin.
optall
Activez toutes les options d'optimisation, c'est-à-dire optimisé, manqué et noter.
Les sauvegardes d'arbres suivantes sont possibles :
original
Dump avant toute optimisation basée sur l'arborescence, pour fichier.original.
optimisé
Vider après toutes les optimisations basées sur l'arborescence, pour fichier.optimisé.
rigoler
Videz chaque fonction avant et après le passage de la gimplification dans un fichier. Le fichier
le nom est fait en ajoutant .gimple au nom du fichier source.
cfg Videz le graphique de flux de contrôle de chaque fonction dans un fichier. Le nom du fichier est fait par
ajouter .cfg au nom du fichier source.
ch Videz chaque fonction après avoir copié les en-têtes de boucle. Le nom du fichier est fait en ajoutant
. Ch. au nom du fichier source.
ssa Videz les informations relatives à la SSA dans un fichier. Le nom du fichier est fait en ajoutant . Ssa
au nom du fichier source.
alias
Videz les informations d'alias pour chaque fonction. Le nom du fichier est fait en ajoutant
.alias au nom du fichier source.
ccp Videz chaque fonction après CCP. Le nom du fichier est fait en ajoutant .ccp à la
nom du fichier source.
magasinccp
Videz chaque fonction après STORE-CCP. Le nom du fichier est fait en ajoutant .storeccp
au nom du fichier source.
pré Vider les arbres après l'élimination partielle de la redondance. Le nom du fichier est fait par
ajouter .pré au nom du fichier source.
fre Videz les arbres après l'élimination complète de la redondance. Le nom du fichier est fait en ajoutant
.fre au nom du fichier source.
copieur
Videz les arbres après la propagation de la copie. Le nom du fichier est fait en ajoutant .copieprop
au nom du fichier source.
store_copyprop
Vider les arbres après la propagation de la copie en magasin. Le nom du fichier est fait en ajoutant
.store_copyprop au nom du fichier source.
dce Videz chaque fonction après l'élimination du code mort. Le nom du fichier est fait par
ajouter .dce au nom du fichier source.
sra Videz chaque fonction après avoir effectué le remplacement scalaire des agrégats. Le fichier
le nom est fait en ajoutant .sra au nom du fichier source.
lavabo
Videz chaque fonction après avoir effectué la capture de code. Le nom du fichier est fait par
ajouter .évier au nom du fichier source.
Dim Videz chaque fonction après avoir appliqué les optimisations de l'arbre dominant. Le nom du fichier est
fait en ajoutant .dom au nom du fichier source.
dse Videz chaque fonction après avoir appliqué l'élimination de la mémoire morte. Le nom du fichier est fait
en ajoutant .dse au nom du fichier source.
phiopt
Videz chaque fonction après avoir optimisé les nœuds PHI dans un code linéaire. Le fichier
le nom est fait en ajoutant .phiopt au nom du fichier source.
étai avant
Videz chaque fonction après avoir propagé vers l'avant les variables à usage unique. Le nom du fichier
est fait en ajoutant .forwprop au nom du fichier source.
nom de copie
Videz chaque fonction après avoir appliqué l'optimisation de renommage de copie. Le nom du fichier est
fait en ajoutant .copyrename au nom du fichier source.
VNR Videz chaque fonction après avoir appliqué l'optimisation de la valeur de retour nommée sur générique
des arbres. Le nom du fichier est fait en ajoutant .nrv au nom du fichier source.
vecteur
Videz chaque fonction après avoir appliqué la vectorisation des boucles. Le nom du fichier est fait
en ajoutant .vect au nom du fichier source.
SLP Videz chaque fonction après avoir appliqué la vectorisation des blocs de base. Le nom du fichier est
fait en ajoutant .slp au nom du fichier source.
VRP Videz chaque fonction après la propagation de la plage de valeurs (VRP). Le nom du fichier est fait par
ajouter .vrp au nom du fichier source.
tous Activez tous les vidages d'arborescence disponibles avec les indicateurs fournis dans cette option.
-fopt-info
-fopt-info-Options
-fopt-info-Options=nom de fichier
Contrôle les vidages d'optimisation de diverses passes d'optimisation. Si la -Options la forme est
utilisé, Options est une liste de - mots-clés d'option séparés pour sélectionner les détails du vidage et
optimisations.
VOTRE Options peuvent être divisés en deux groupes : les options décrivant la verbosité du
dump et des options décrivant les optimisations à inclure. Les choix de
les deux groupes peuvent être mélangés librement car ils ne se chevauchent pas. Cependant, en cas de
tout conflit, les options ultérieures remplacent les options antérieures de la ligne de commande.
Les options suivantes contrôlent la verbosité du vidage :
optimisé
Imprimez des informations lorsqu'une optimisation est appliquée avec succès. C'est jusqu'à un laissez-passer
pour décider quelles informations sont pertinentes. Par exemple, le vectoriseur passe l'impression
l'emplacement source des boucles qui sont vectorisées avec succès.
manqué
Imprimer des informations sur les optimisations manquées. L'individu passe le contrôle qui
informations à inclure dans la sortie.
noter
Imprimer des informations détaillées sur les optimisations, telles que certaines transformations,
des messages plus détaillés sur les décisions, etc.
tous Imprimez des informations d'optimisation détaillées. Ceci comprend optimisé, manqué et
noter.
Un ou plusieurs des mots-clés d'option suivants peuvent être utilisés pour décrire un groupe de
optimisations :
ipa Activez les vidages de toutes les optimisations interprocédurales.
boucle
Activez les vidages de toutes les optimisations de boucle.
en ligne
Activez les vidages de toutes les optimisations d'inlining.
vec Activez les dumps de toutes les optimisations de vectorisation.
optall
Activez les vidages de toutes les optimisations. Il s'agit d'un sur-ensemble des groupes d'optimisation
énumérés ci-dessus.
If Options est omis, la valeur par défaut est optimisé-optall, ce qui signifie vider toutes les informations
sur les optimisations réussies de toutes les passes.
Si la nom de fichier est fourni, alors les vidages de toutes les optimisations applicables sont
concaténé dans le nom de fichier. Sinon, le vidage est sorti sur stderr. Quoique
plusieurs -fopt-info options sont acceptées, une seule d'entre elles peut inclure un nom de fichier. Si
d'autres noms de fichiers sont fournis, puis toutes, sauf la première de ces options, sont ignorées.
Notez que la sortie nom de fichier est écrasé en cas d'unités de traduction multiples. Si
une sortie combinée de plusieurs unités de traduction est souhaitée, stderr Devrait être utilisé
à la place.
Dans l'exemple suivant, les informations d'optimisation sont transmises à stderr:
gcc -O3 -fopt-info
Cet exemple :
gcc -O3 -fopt-info-missed=manqué.all
génère un rapport d'optimisation manqué de toutes les passes dans raté.tout, et celui-là:
gcc -O2 -ftree-vectorize -fopt-info-vec-missed
imprime des informations sur les opportunités d'optimisation manquées à partir des passes de vectorisation
on stderr. Noter que -fopt-info-vec-manqué équivaut à -fopt-info-manqué-vec.
Comme autre exemple,
gcc -O3 -fopt-info-inline-optimized-missed=inline.txt
génère des informations sur les optimisations manquées ainsi que les emplacements optimisés de tous
la doublure passe dans en ligne.txt.
Enfin, considérez :
gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt
Ici les deux noms de fichiers de sortie vec.miss et boucle.opt sont en conflit car un seul
le fichier de sortie est autorisé. Dans ce cas, seule la première option prend effet et le
les options suivantes sont ignorées. Ainsi seulement vec.miss est produit qui contient des décharges
du vectoriseur sur les opportunités manquées.
-graine-frandom=nombre
Cette option fournit une graine que GCC utilise à la place des nombres aléatoires pour générer
certains noms de symboles qui doivent être différents dans chaque fichier compilé. C'est aussi
utilisé pour placer des tampons uniques dans les fichiers de données de couverture et les fichiers d'objets qui produisent
eux. Vous pouvez utiliser le -Frandom-graine possibilité de produire un objet identique de manière reproductible
fichiers.
VOTRE nombre devrait être différent pour chaque fichier que vous compilez.
-fsched-verbeux=n
Sur les cibles qui utilisent l'ordonnancement des instructions, cette option contrôle la quantité de
le débogage affiche les impressions du planificateur. Ces informations sont écrites en erreur standard,
à moins que -fdump-rtl-sched1 or -fdump-rtl-sched2 est spécifié, auquel cas il est affiché
au fichier de liste de vidage habituel, .sched1 or .sched2 respectivement. Cependant pour n
supérieur à neuf, la sortie est toujours imprimée avec l'erreur standard.
Pour n supérieur à zéro, -fsched-verbeux produit les mêmes informations que
-fdump-rtl-sched1 et -fdump-rtl-sched2. For n supérieur à un, il a également une sortie de base
probabilités de bloc, informations détaillées sur la liste des prêts et informations sur l'unité/l'insn. Pour n
supérieur à deux, il inclut RTL au point d'abandon, le flux de contrôle et les informations sur les régions. Et
pour n plus de quatre, -fsched-verbeux comprend également des informations sur la dépendance.
-sauve-temps
-save-temps=cwd
Stocker en permanence les fichiers intermédiaires "temporaires" habituels ; placez-les dans le courant
répertoire et nommez-les en fonction du fichier source. Ainsi, la compilation foo.c avec -c
-sauve-temps produit des fichiers foo.je et foo.s, aussi bien que foo.o. Cela crée un
prétraité foo.je fichier de sortie même si le compilateur utilise maintenant normalement un
préprocesseur intégré.
Lorsqu'il est utilisé en combinaison avec le -x option de ligne de commande, -sauve-temps est raisonnable
suffisant pour éviter d'écraser un fichier source d'entrée avec la même extension qu'un
fichier intermédiaire. Le fichier intermédiaire correspondant peut être obtenu en renommant
le fichier source avant d'utiliser -sauve-temps.
Si vous invoquez GCC en parallèle, compiler plusieurs fichiers sources différents qui partagent un
nom de base commun dans différents sous-répertoires ou le même fichier source compilé pour
plusieurs destinations de sortie, il est probable que les différents compilateurs parallèles
interférer les uns avec les autres et écraser les fichiers temporaires. Par exemple:
gcc -save-temps -o outdir1/foo.o indir1/foo.c&
gcc -save-temps -o outdir2/foo.o indir2/foo.c&
peut entraîner foo.je et foo.o écrites simultanément par les deux compilateurs.
-Save-Temps = obj
Stockez en permanence les fichiers intermédiaires "temporaires" habituels. Si la -o l'option est utilisée,
les fichiers temporaires sont basés sur le fichier objet. Si la -o l'option n'est pas utilisée, la
-Save-Temps = obj l'interrupteur se comporte comme -sauve-temps.
Par exemple :
gcc -save-temps=obj -c truc.c
gcc -save-temps=obj -c bar.c -o répertoire/xbar.o
gcc -save-temps=obj foobar.c -o dir2/yfoobar
crée des foo.je, foo.s, rép/xbar.i, rép/xbar.s, rép2/yfoobar.i, rép2/yfoobar.s et
rép2/yfoobar.o.
-temps[=filet]
Indiquez le temps CPU pris par chaque sous-processus dans la séquence de compilation. Pour C
fichiers source, c'est le compilateur proprement dit et l'assembleur (plus l'éditeur de liens si la liaison est
terminé).
Sans la spécification d'un fichier de sortie, la sortie ressemble à ceci :
# cc1 0.12 0.01
# comme 0.00 0.01
Le premier chiffre sur chaque ligne est le "temps utilisateur", c'est-à-dire le temps passé à exécuter le
programme lui-même. Le deuxième nombre est "temps système", temps passé à exécuter l'exploitation
routines système au nom du programme. Les deux nombres sont en secondes.
Avec la spécification d'un fichier de sortie, la sortie est ajoutée au fichier nommé,
et ça ressemble à ça :
0.12 0.01 cc1
0.00 0.01 comme
L'"heure utilisateur" et l'"heure système" sont déplacées avant le nom du programme, et le
les options passées au programme sont affichées, afin que l'on puisse dire plus tard quel fichier a été
en cours de compilation, et avec quelles options.
-fvar-suivi
Exécuter la passe de suivi variable. Il calcule où les variables sont stockées à chaque position
dans du code. De meilleures informations de débogage sont alors générées (si les informations de débogage
format prend en charge ces informations).
Il est activé par défaut lors de la compilation avec optimisation (-Tu, -O, -O2, ...),
informations de débogage (-g) et le format d'informations de débogage le prend en charge.
-fvar-suivi-affectations
Annotez les affectations aux variables utilisateur au début de la compilation et essayez d'effectuer
les annotations tout au long de la compilation jusqu'à la fin, dans une tentative
pour améliorer les informations de débogage tout en optimisant. Utilisation de -gdwarf-4 est recommandé avec
avec elle.
Il peut être activé même si var-tracking est désactivé, auquel cas les annotations sont
créé et maintenu, mais rejeté à la fin. Par défaut, ce drapeau est activé
avec -fvar-suivi, sauf lorsque la programmation sélective est activée.
-fvar-tracking-assignments-toggle
cabillot -fvar-suivi-affectations, de la même manière que -gtoggle Bascule -g.
-print-file-name=bibliothèque
Imprimer le nom absolu complet du fichier de bibliothèque bibliothèque qui serait utilisé quand
lien --- et ne faites rien d'autre. Avec cette option, GCC ne compile ni ne lie
n'importe quoi; il imprime juste le nom du fichier.
-impression-multi-répertoire
Imprimer le nom du répertoire correspondant à la multilib sélectionnée par tout autre commutateur
présent dans la ligne de commande. Ce répertoire est censé exister dans GCC_EXEC_PREFIX.
-print-multi-lib
Imprimez le mappage des noms de répertoire multilib aux commutateurs du compilateur qui les activent.
Le nom du répertoire est séparé des commutateurs par ;, et chaque commutateur commence par un
@ à la place du -, sans espaces entre plusieurs commutateurs. Ceci est censé
faciliter le traitement des coques.
-print-multi-os-répertoire
Imprimer le chemin d'accès aux bibliothèques du système d'exploitation pour la multilib sélectionnée, par rapport à certains lib
sous-répertoire. Si des bibliothèques du système d'exploitation sont présentes dans le lib sous-répertoire et pas de multilibs
sont utilisés, c'est généralement juste ., si les bibliothèques du système d'exploitation sont présentes dans libsuffixe enfant de mêmes parents
répertoires imprimés, par exemple ../lib64, ../ lib or ../lib32, ou si les bibliothèques du système d'exploitation sont
présenter à lib/sous-répertoire sous-répertoires qu'il imprime, par exemple amd64, sparv9 or ev6.
-print-multiarch
Imprimer le chemin d'accès aux bibliothèques du système d'exploitation pour le multiarch sélectionné, par rapport à certains lib
sous-répertoire.
-print-nom-prog=Programme
J'aime -print-nom-du-fichier, mais recherche un programme tel que cpp.
-print-libgcc-nom-de-fichier
Pareil que -print-file-name=libgcc.a.
Ceci est utile lorsque vous utilisez -nostdlib or -nodefaultlibs mais vous voulez créer un lien avec
libgcc.a. Tu peux faire:
gcc -nostdlib ... `gcc -print-libgcc-nom-de-fichier`
-imprimer-recherche-répertoires
Imprimer le nom du répertoire d'installation configuré et une liste des programmes et
répertoires de la bibliothèque gcc recherches --- et ne faites rien d'autre.
Ceci est utile lorsque gcc imprime le message d'erreur installation problème, ne peut pas exec
cpp0 : Non tel filet or annuaire. Pour résoudre ce problème, vous devez soit mettre cpp0 et les
d'autres composants du compilateur où gcc s'attend à les trouver, ou vous pouvez définir le
variable d'environnement GCC_EXEC_PREFIX dans le répertoire où vous les avez installés. Ne pas
oublie la traîne /.
-print-sysroot
Imprimez le répertoire racine système cible utilisé lors de la compilation. C'est le
racine système cible spécifiée soit au moment de la configuration, soit à l'aide de la --sysroot option,
éventuellement avec un suffixe supplémentaire qui dépend des options de compilation. Si pas de cible
sysroot est spécifié, l'option n'affiche rien.
-print-sysroot-headers-suffixe
Imprimez le suffixe ajouté à la racine système cible lors de la recherche d'en-têtes, ou donnez un
erreur si le compilateur n'est pas configuré avec un tel suffixe --- et ne faites rien
autre.
-benne
Imprimer la machine cible du compilateur (par exemple, i686-pc-linux-gnu) --- et ne le faites pas
rien d'autre.
-version de vidage
Affichez la version du compilateur (par exemple, 3.0) --- et ne faites rien d'autre.
-dumpspecs
Affichez les spécifications intégrées du compilateur --- et ne faites rien d'autre. (Ceci est utilisé lorsque
GCC lui-même est en cours de construction.)
-fno-eliminate-types-debug-inutilisés
Normalement, lors de la production de la sortie DWARF 2, GCC évite de produire une sortie de symbole de débogage pour
types qui ne sont utilisés nulle part dans le fichier source en cours de compilation. Parfois c'est utile
faire en sorte que GCC émette des informations de débogage pour tous les types déclarés dans une unité de compilation,
indépendamment du fait qu'ils soient réellement utilisés dans cette unité de compilation, par
exemple si, dans le débogueur, vous souhaitez convertir une valeur en un type qui n'est pas réellement
utilisé dans votre programme (mais est déclaré). Le plus souvent, cependant, cela se traduit par une
beaucoup d'espace perdu.
Options Ceci Contrôle Optimization
Ces options contrôlent différentes sortes d'optimisations.
Sans aucune option d'optimisation, le but du compilateur est de réduire le coût de compilation
et faire en sorte que le débogage produise les résultats attendus. Les déclarations sont indépendantes : si vous
arrêter le programme avec un point d'arrêt entre les instructions, vous pouvez alors affecter une nouvelle valeur à
n'importe quelle variable ou changez le compteur du programme en n'importe quelle autre instruction dans la fonction et obtenez
exactement les résultats que vous attendez du code source.
L'activation des indicateurs d'optimisation oblige le compilateur à tenter d'améliorer les performances et/ou
la taille du code au détriment du temps de compilation et éventuellement de la possibilité de déboguer le
.
Le compilateur effectue une optimisation basée sur la connaissance qu'il a du programme.
La compilation de plusieurs fichiers à la fois en un seul mode de fichier de sortie permet au compilateur d'utiliser
informations obtenues à partir de tous les fichiers lors de la compilation de chacun d'eux.
Toutes les optimisations ne sont pas contrôlées directement par un indicateur. Seules les optimisations qui ont un
flag sont répertoriés dans cette section.
La plupart des optimisations ne sont activées que si un -O le niveau est défini sur la ligne de commande. Autrement
ils sont désactivés, même si des indicateurs d'optimisation individuels sont spécifiés.
Selon la cible et la façon dont GCC a été configuré, un ensemble légèrement différent de
des optimisations peuvent être activées à chaque -O niveau que ceux énumérés ici. Vous pouvez invoquer GCC
avec -Q --help=optimiseurs pour connaître l'ensemble exact des optimisations qui sont activées à
chaque niveau.
-O
-O1 Optimiser. L'optimisation de la compilation prend un peu plus de temps et beaucoup plus de mémoire pour
une grande fonction.
Avec -O, le compilateur essaie de réduire la taille du code et le temps d'exécution, sans effectuer
toutes les optimisations qui prennent beaucoup de temps de compilation.
-O active les indicateurs d'optimisation suivants :
-fauto-inc-dec -fbranch-count-reg -fcombine-stack-ajustements -fcompare-elim
-fcprop-registres -fdce -fdefer-pop -fdelayed-branche -fdse -fforward-propager
-fguess-branche-probabilité -fif-conversion2 -fif-conversion
-finline-fonctions-appelées-une fois -fipa-pure-const -fipa-profil -fipa-référence
-fmerge-constantes -fmove-boucle-invariants -fshrink-wrap -fsplit-wide-types
-ftree-bit-ccp -ftree-ccp -fssa-phiopt -ftree-ch -ftree-copie-prop -ftree-copyrename
-ftree-dce -ftree-dominator-opt -ftree-dse -ftree-forwprop -ftree-free -ftree-phiprop
-ftree-évier -ftree-slsr -ftree-sra -ftree-PTA -ftre-ter -funit-a-a-time
-O s'allume aussi -fomit-frame-pointeur sur des machines où cela n'interfère pas
avec débogage.
-O2 Optimisez encore plus. GCC effectue presque toutes les optimisations prises en charge qui ne
impliquent un compromis espace-vitesse. Par rapport à -O, cette option augmente à la fois
temps de compilation et les performances du code généré.
-O2 active tous les indicateurs d'optimisation spécifiés par -O. Il active également les éléments suivants
indicateurs d'optimisation : -fthread-sauts -falign-fonctions -falign-sauts -falign-boucles
-falign-étiquettes -fcaller-sauvegarde -f saut en croix -fcse-suivre-sauts -fcse-skip-blocs
-fdelete-null-pointer-checks -fdévirtualiser -fdevirtualize-spéculativement
-des-optimisations-coûteuses -fgcse -fgcse-lm -fhoist-charges-adjacentes
-finline-petites-fonctions -findirect-inline -fipa-cp -fipa-cp-alignement -fipa-sra
-fipa-icf -fisolate-déréférencement-de-chemins-erronés -flra-remat -foptimize-frères-soeurs-appels
-foptimize-strlen -fpartial-inline -f judas2 -freorder-blocs
-freorder-blocs-et-partition -freorder-fonctions -frun-cse-après-boucle
-fsched-interbloc -spécification-fsched -fschedule-insns -fschedule-insns2 -fstrict-aliasing
-fstrict-débordement -ftree-builtin-call-dce -ftree-commutateur-conversion -ftree-tail-fusion
-ftree-pré -ftree-vrp -fipa-ra
Veuillez noter l'avertissement sous -fgcse à propos de l'invocation -O2 sur les programmes qui utilisent calculé
aller à S.
REMARQUE : dans Ubuntu 8.10 et les versions ultérieures, -D_FORTIFY_SOURCE=2 est défini par défaut et est
activé lorsque -O est réglé sur 2 ou plus. Cela permet un temps de compilation supplémentaire et
vérifie à l'exécution plusieurs fonctions de la libc. Pour désactiver, spécifiez soit
-U_FORTIFY_SOURCE or -D_FORTIFY_SOURCE=0.
-O3 Optimisez encore plus. -O3 active toutes les optimisations spécifiées par -O2 et s'allume aussi
le -finline-fonctions, -funswitch-boucles, -frrédicatif, -fgcse-après-rechargement,
-ftree-boucle-vectoriser, -ftree-loop-distribute-patterns, -ftree-slp-vectoriser,
-fvect-cost-model, -ftree-partial-pre et -fipa-cp-clone options.
-O0 Réduisez le temps de compilation et faites en sorte que le débogage produise les résultats attendus. C'est le
défaut.
-Tu Optimiser pour la taille. -Tu permet à tout -O2 optimisations qui n'augmentent généralement pas
taille du code. Il effectue également d'autres optimisations conçues pour réduire la taille du code.
-Tu désactive les indicateurs d'optimisation suivants : -falign-fonctions -falign-sauts
-falign-boucles -falign-étiquettes -freorder-blocs -freorder-blocs-et-partition
-fprefetch-boucles-tableaux
-Ofast
Ne pas respecter le strict respect des normes. -Ofast permet à tout -O3 optimisations. Ça aussi
permet des optimisations qui ne sont pas valables pour tous les programmes conformes aux normes. Ce
allume -ffast-mathématiques et le Fortran spécifique -fno-protect-parens et -fstack-tableaux.
-Og Optimisez l'expérience de débogage. -Og permet des optimisations qui n'interfèrent pas avec
débogage. Ce devrait être le niveau d'optimisation de choix pour l'édition standard.
cycle de compilation-débogage, offrant un niveau d'optimisation raisonnable tout en maintenant
compilation rapide et une bonne expérience de débogage.
Si vous utilisez plusieurs -O options, avec ou sans numéros de niveau, la dernière de ces options est la
celui qui est efficace.
Options du formulaire -fdrapeau spécifier des indicateurs indépendants de la machine. La plupart des drapeaux ont les deux
formes positives et négatives; la forme négative de -ffou is -fno-foo. Dans le tableau ci-dessous,
un seul des formulaires est répertorié --- celui que vous utilisez habituellement. Vous pouvez comprendre l'autre
forme en supprimant no- ou en l'ajoutant.
Les options suivantes contrôlent des optimisations spécifiques. Ils sont soit activés par -O
options ou sont liées à celles qui le sont. Vous pouvez utiliser les drapeaux suivants dans les rares cas
cas où un "réglage fin" des optimisations à effectuer est souhaité.
-fno-différer-pop
Affichez toujours les arguments de chaque appel de fonction dès que cette fonction revient. Pour
machines qui doivent faire apparaître des arguments après un appel de fonction, le compilateur laisse normalement
les arguments s'accumulent sur la pile pour plusieurs appels de fonction et les affiche tous à
une fois que.
Désactivé aux niveaux -O, -O2, -O3, -Tu.
-fforward-propager
Effectuez une passe de propagation vers l'avant sur RTL. Le pass essaie de combiner deux instructions
et vérifie si le résultat peut être simplifié. Si le déroulement en boucle est actif, deux passages
sont effectuées et la seconde est programmée après le déroulement de la boucle.
Cette option est activée par défaut aux niveaux d'optimisation -O, -O2, -O3, -Tu.
-ffp-contrat=Catégorie
-ffp-contrat=off désactive la contraction d'expression à virgule flottante. -ffp-contrat=rapide
permet la contraction d'expression à virgule flottante telle que la formation de fusions multiplication-addition
opérations si la cible les prend en charge nativement. -ffp-contrat=on permet
contraction d'expression à virgule flottante si la norme de langage le permet. C'est
actuellement pas mis en œuvre et traité sur un pied d'égalité -ffp-contrat=off.
La valeur par défaut est -ffp-contrat=rapide.
-fomit-frame-pointeur
Ne gardez pas le pointeur de cadre dans un registre pour les fonctions qui n'en ont pas besoin. Cette
évite les instructions pour enregistrer, configurer et restaurer les pointeurs de trame ; cela fait aussi un
registre supplémentaire disponible dans de nombreuses fonctions. It aussi fait débogage impossible on
quelques les machines.
Sur certaines machines, comme le VAX, ce drapeau n'a aucun effet, car le standard
la séquence d'appel gère automatiquement le pointeur de trame et rien n'est enregistré par
prétendre que ça n'existe pas. La macro de description de machine "FRAME_POINTER_REQUIRED"
contrôle si une machine cible prend en charge cet indicateur.
Le paramètre par défaut (lorsqu'il n'est pas optimisé pour la taille) pour GNU/Linux x32 86 bits et 32 bits
Les cibles Darwin x86 sont -fomit-frame-pointeur. Vous pouvez configurer GCC avec le
--enable-frame-pointeur configurez l'option pour changer la valeur par défaut.
Activé aux niveaux -O, -O2, -O3, -Tu.
-foptimize-frères-soeurs-appels
Optimisez les appels récursifs entre frères et queue.
Activé aux niveaux -O2, -O3, -Tu.
-foptimize-strlen
Optimiser diverses fonctions de chaîne C standard (par exemple "strlen", "strchr" ou "strcpy") et
leurs homologues "_FORTIFY_SOURCE" en alternatives plus rapides.
Activé aux niveaux -O2, -O3.
-fno-en ligne
Ne développez aucune fonction en ligne en dehors de celles marquées avec le "always_inline"
attribut. Il s'agit de la valeur par défaut lorsqu'il n'est pas optimisé.
Les fonctions individuelles peuvent être exemptées de l'inlining en les marquant avec le "noinline"
attribuer.
-finline-petites-fonctions
Intégrer des fonctions à leurs appelants lorsque leur corps est plus petit que prévu
code d'appel de fonction (ainsi la taille globale du programme devient plus petite). Le compilateur
décide heuristiquement quelles fonctions sont suffisamment simples pour mériter d'être intégrées dans
Par ici. Cette mise en ligne s'applique à toutes les fonctions, même celles qui ne sont pas déclarées en ligne.
Activé au niveau -O2.
-findirect-inline
Inline également des appels indirects qui sont découverts comme connus au moment de la compilation grâce à
incorporation précédente. Cette option n'a d'effet que lorsque l'incorporation elle-même est activée
par le -finline-fonctions or -finline-petites-fonctions options.
Activé au niveau -O2.
-finline-fonctions
Considérez toutes les fonctions pour l'inline, même si elles ne sont pas déclarées inline. Les
le compilateur décide heuristiquement quelles fonctions méritent d'être intégrées de cette manière.
Si tous les appels à une fonction donnée sont intégrés et que la fonction est déclarée
"statique", alors la fonction n'est normalement pas sortie en tant que code assembleur à part entière.
Activé au niveau -O3.
-finline-fonctions-appelées-une fois
Considérez toutes les fonctions "statiques" appelées une fois pour l'incorporation dans leur appelant même si
ils ne sont pas marqués "inline". Si un appel à une fonction donnée est intégré, alors le
La fonction n'est pas sortie en tant que code assembleur à part entière.
Activé aux niveaux -O1, -O2, -O3 et -Tu.
-peur-inliner
Fonctions en ligne marquées par "always_inline" et fonctions dont le corps semble plus petit que
le surcoût d'appel de fonction avant de faire -fprofile-générer instrumentation et
véritable passe en ligne. Cela rend le profilage nettement moins cher et généralement
intégration plus rapide sur les programmes ayant de grandes chaînes de fonctions wrapper imbriquées.
Activé par défaut.
-fipa-sra
Effectuer le remplacement scalaire interprocédural des agrégats, la suppression des paramètres inutilisés
et remplacement des paramètres passés par référence par des paramètres passés par valeur.
Activé aux niveaux -O2, -O3 et -Tu.
-finline-limite=n
Par défaut, GCC limite la taille des fonctions pouvant être intégrées. Ce drapeau permet
contrôle grossier de cette limite. n est la taille des fonctions qui peuvent être incorporées dans
nombre de pseudo-instructions.
L'incorporation est en fait contrôlée par un certain nombre de paramètres, qui peuvent être spécifiés
individuellement en utilisant --param prénom=Plus-valueL’ -finline-limite=n l'option définit certains des
ces paramètres comme suit :
max-inline-insns-single
est fixé à n/ 2.
max-inline-insns-auto
est fixé à n/ 2.
Voir ci-dessous pour une documentation des paramètres individuels contrôlant l'inlining et
pour les valeurs par défaut de ces paramètres.
Remarque : il peut n'y avoir aucune valeur à -limite-finline qui entraîne un comportement par défaut.
Remarque : la pseudo-instruction représente, dans ce contexte particulier, un résumé
mesure de la taille de la fonction. Cela ne représente en aucun cas un décompte de l'assemblée
instructions et en tant que tel, sa signification exacte peut changer d'une version à une
un autre.
-fno-keep-inline-dllexport
Il s'agit d'une version plus fine de -fkeep-inline-fonctions, qui ne s'applique qu'aux
fonctions déclarées à l'aide de l'attribut "dllexport" ou declspec
-fkeep-inline-fonctions
En C, émettre des fonctions "statiques" qui sont déclarées "en ligne" dans le fichier objet, même si
la fonction a été intégrée à tous ses appelants. Ce commutateur n'affecte pas
fonctions utilisant l'extension "extern inline" dans GNU C90. En C++, émettez tout et n'importe quoi
fonctions en ligne dans le fichier objet.
-fkeep-statique-const
Emettre des variables déclarées "static const" lorsque l'optimisation n'est pas activée, même si le
les variables ne sont pas référencées.
GCC active cette option par défaut. Si vous voulez forcer le compilateur à vérifier si un
variable est référencée, que l'optimisation soit activée ou non, utilisez
le -fno-keep-static-const option.
-fmerge-constantes
Tenter de fusionner des constantes identiques (constantes de chaîne et constantes à virgule flottante)
à travers les unités de compilation.
Cette option est la valeur par défaut pour une compilation optimisée si l'assembleur et l'éditeur de liens
soutiens le. Utilisation -fno-merge-constantes pour inhiber ce comportement.
Activé aux niveaux -O, -O2, -O3, -Tu.
-fmerge-toutes-constantes
Essayez de fusionner des constantes identiques et des variables identiques.
Cette option implique -fmerge-constantes. En plus de -fmerge-constantes cet
considère par exemple même les tableaux initialisés constants ou les variables constantes initialisées avec
types entiers ou à virgule flottante. Les langages comme C ou C++ nécessitent chaque variable,
inclure plusieurs instances de la même variable dans les appels récursifs, pour avoir des
emplacements, donc l'utilisation de cette option entraîne un comportement non conforme.
-fmodulo-sched
Effectuez la programmation swing modulo juste avant la première passe de programmation. Cette
pass examine les boucles les plus internes et réorganise leurs instructions en chevauchant différentes
itérations.
-fmodulo-sched-allow-regmoves
Effectuez une planification modulo basée sur SMS plus agressive avec des mouvements de registre autorisés. Par
en définissant ce drapeau, certains fronts d'anti-dépendances sont supprimés, ce qui déclenche le
génération de mouvements réguliers sur la base de l'analyse de la durée de vie. Cette option est efficace
seulement avec -fmodulo-sched activée.
-fno-branche-compte-reg
N'utilisez pas d'instructions "décrémenter et brancher" sur un registre de comptage, mais à la place
générer une séquence d'instructions qui décrémente un registre, le comparer à
zéro, puis branche en fonction du résultat. Cette option n'a de sens que sur
architectures qui prennent en charge de telles instructions, qui incluent x86, PowerPC, IA-64 et
S / 390.
Activé par défaut à -O1 Et plus élevé.
La valeur par défaut est -fbranch-count-reg.
-fno-fonction-cse
Ne mettez pas d'adresses de fonction dans les registres ; faire chaque instruction qui appelle un
La fonction constante contient explicitement l'adresse de la fonction.
Cette option se traduit par un code moins efficace, mais quelques hacks étranges qui modifient le
la sortie de l'assembleur peut être confuse par les optimisations effectuées lorsque cette option est
non utilisé.
La valeur par défaut est -ffonction-cse
-fno-zero-initialisé-en-bss
Si la cible supporte une section BSS, GCC met par défaut les variables qui sont
initialisé à zéro dans BSS. Cela peut économiser de l'espace dans le code résultant.
Cette option désactive ce comportement car certains programmes reposent explicitement sur des variables
aller à la section de données --- par exemple, afin que l'exécutable résultant puisse trouver le
début de cette section et/ou faire des hypothèses sur cette base.
La valeur par défaut est -fzero-initialisé-dans-bss.
-fthread-sauts
Effectuez des optimisations qui vérifient si un saut se branche vers un emplacement où un autre
comparaison subsumée par la première est trouvée. Si c'est le cas, la première branche est redirigée vers
soit la destination de la deuxième branche, soit un point qui la suit immédiatement,
selon que la condition est vraie ou fausse.
Activé aux niveaux -O2, -O3, -Tu.
-fsplit-wide-types
Lors de l'utilisation d'un type qui occupe plusieurs registres, comme "long long" sur un 32 bits
système, séparer les registres et les allouer indépendamment. Ceci normalement
génère un meilleur code pour ces types, mais peut rendre le débogage plus difficile.
Activé aux niveaux -O, -O2, -O3, -Tu.
-fcse-suivre-sauts
Dans l'élimination de sous-expression commune (CSE), parcourez les instructions de saut lorsque le
la cible du saut n'est atteinte par aucun autre chemin. Par exemple, lorsque le CST rencontre
une instruction "if" avec une clause "else", CSE suit le saut lorsque la condition
testé est faux.
Activé aux niveaux -O2, -O3, -Tu.
-fcse-skip-blocs
Ceci est similaire à -fcse-suivre-sauts, mais oblige le CSE à suivre des sauts qui
sauter conditionnellement les blocs. Lorsque le CSE rencontre une simple instruction « if » sans
clause d'autre, -fcse-skip-blocs oblige le CSE à suivre le saut autour du corps du
"si".
Activé aux niveaux -O2, -O3, -Tu.
-frun-cse-après-boucle
Réexécutez l'élimination des sous-expressions communes après l'exécution des optimisations de boucle.
Activé aux niveaux -O2, -O3, -Tu.
-fgcse
Effectuez une passe d'élimination de sous-expression commune globale. Ce pass effectue également
constante globale et propagation de copie.
Remarque : Lors de la compilation d'un programme à l'aide de gotos calculés, une extension GCC, vous pouvez obtenir
de meilleures performances d'exécution si vous désactivez l'élimination globale des sous-expressions communes
passer en ajoutant -fno-gcse à la ligne de commande.
Activé aux niveaux -O2, -O3, -Tu.
-fgcse-lm
Quand -fgcse-lm est activé, l'élimination globale de la sous-expression commune tente de se déplacer
charges qui ne sont tuées que par les magasins en elles-mêmes. Cela permet à une boucle contenant un
séquence de chargement/stockage à changer en un chargement en dehors de la boucle, et une copie/stockage à l'intérieur
la boucle.
Activé par défaut lorsque -fgcse est autorisé.
-fgcse-sm
Quand -fgcse-sm est activé, une passe de mouvement de magasin est exécutée après le commun global
élimination de sous-expression. Cette passe tente de déplacer les magasins hors des boucles. Lorsqu'elle est utilisée
en conjonction avec -fgcse-lm, les boucles contenant une séquence de chargement/stockage peuvent être modifiées
à un chargement avant la boucle et à un stockage après la boucle.
Non activé à aucun niveau d'optimisation.
-fgcse-las
Quand -fgcse-las est activé, la passe d'élimination de la sous-expression commune globale
élimine les charges redondantes qui surviennent après les stockages dans le même emplacement mémoire (les deux
licenciements partiels et complets).
Non activé à aucun niveau d'optimisation.
-fgcse-après-rechargement
Quand -fgcse-après-rechargement est activé, une passe d'élimination de charge redondante est effectuée
après rechargement. Le but de ce laissez-passer est de nettoyer les déversements redondants.
-faggressive-loop-optimisations
Cette option indique à l'optimiseur de boucle d'utiliser des contraintes de langage pour dériver des limites pour
le nombre d'itérations d'une boucle. Cela suppose que le code de boucle n'invoque pas
comportement indéfini en provoquant par exemple des débordements d'entiers signés ou hors limites
accès au tableau. Les limites du nombre d'itérations d'une boucle sont utilisées pour guider
optimisation du déroulement et du pelage de la boucle et des tests de sortie de boucle. Cette option est activée
par défaut.
-funsafe-loop-optimisations
Cette option indique à l'optimiseur de boucle de supposer que les index de boucle ne débordent pas, et
que les boucles avec une condition de sortie non triviale ne sont pas infinies. Cela permet une plus large
gamme d'optimisations de boucle même si l'optimiseur de boucle lui-même ne peut pas prouver que ces
les hypothèses sont valables. Si tu utilises -Wunsafe-loop-optimisations, le compilateur vous prévient
s'il trouve ce genre de boucle.
-f saut en croix
Effectuez une transformation par sauts croisés. Cette transformation unifie le code équivalent et
enregistre la taille du code. Le code résultant peut ou non fonctionner mieux que sans croix-
sauter.
Activé aux niveaux -O2, -O3, -Tu.
-fauto-inc-dec
Combinez des incréments ou des décréments d'adresses avec des accès mémoire. Ce laissez-passer est
toujours ignoré sur les architectures qui n'ont pas d'instructions pour prendre en charge cela.
Activé par défaut à -O et plus sur les architectures qui prennent en charge cela.
-fdce
Effectuez l'élimination du code mort (DCE) sur RTL. Activé par défaut à -O Et plus élevé.
-fdse
Effectuez l'élimination des magasins morts (DSE) sur RTL. Activé par défaut à -O Et plus élevé.
-fif-conversion
Essayez de transformer les sauts conditionnels en équivalents sans branche. Ceci comprend
utilisation de mouvements conditionnels, min, max, indicateurs de position et instructions abs, et quelques astuces
faisable par l'arithmétique standard. L'utilisation de l'exécution conditionnelle sur les puces où elle est
disponible est contrôlé par -fif-conversion2.
Activé aux niveaux -O, -O2, -O3, -Tu.
-fif-conversion2
Utilisez l'exécution conditionnelle (le cas échéant) pour transformer les sauts conditionnels en
équivalents sans branche.
Activé aux niveaux -O, -O2, -O3, -Tu.
-fdeclone-ctor-dtor
L'ABI C++ requiert plusieurs points d'entrée pour les constructeurs et les destructeurs : un pour un
sous-objet de base, un pour un objet complet et un pour un destructeur virtuel qui appelle
opérateur supprimer par la suite. Pour une hiérarchie avec des bases virtuelles, la base et complète
les variantes sont des clones, ce qui signifie deux copies de la fonction. Avec cette option, le
les variantes de base et complètes sont modifiées pour devenir des thunks qui appellent une implémentation commune.
Activé par -Tu.
-fdelete-null-pointer-checks
Supposons que les programmes ne peuvent pas déréférencer en toute sécurité les pointeurs nuls et qu'aucun code ou donnée
l'élément y réside. Cela permet des optimisations de pliage constant simples à tous
niveaux d'optimisation. De plus, d'autres passes d'optimisation dans GCC utilisent ce drapeau pour
contrôler les analyses globales de flux de données qui éliminent les vérifications inutiles des pointeurs nuls ;
ceux-ci supposent que si un pointeur est vérifié après avoir déjà été déréférencé, il
ne peut pas être nulle.
Notez cependant que dans certains environnements, cette hypothèse n'est pas vraie. Utilisation
-fno-delete-null-pointer-checks pour désactiver cette optimisation pour les programmes qui dépendent
sur ce comportement.
Certaines cibles, en particulier celles intégrées, désactivent cette option à tous les niveaux. Autrement
il est activé à tous les niveaux : -O0, -O1, -O2, -O3, -Tu. Les laissez-passer qui utilisent les informations
sont activés indépendamment à différents niveaux d'optimisation.
-fdévirtualiser
Essayez de convertir les appels de fonctions virtuelles en appels directs. Cela se fait à la fois
au sein d'une procédure et en interprocédure dans le cadre de l'inlining indirect
(-findirect-inline) et la propagation constante interprocédurale (-fipa-cp). Activé à
niveaux -O2, -O3, -Tu.
-fdevirtualize-spéculativement
Essayez de convertir les appels de fonctions virtuelles en appels directs spéculatifs. Basé sur
l'analyse du graphe d'héritage de type, déterminer pour un appel donné l'ensemble des
cibles probables. Si l'ensemble est petit, de préférence de taille 1, changez l'appel en un
décision conditionnelle entre les appels directs et indirects. Les appels spéculatifs permettent
plus d'optimisations, telles que l'inline. Quand ils semblent inutiles après plus
optimisation, ils sont reconvertis dans leur forme originale.
-fdevirtualize-at-ltrans
Diffusez des informations supplémentaires nécessaires pour une dévirtualisation agressive lors de l'exécution du lien-
optimiseur de temps en mode de transformation locale. Cette option permet plus
dévirtualisation mais augmente considérablement la taille des données en streaming. Pour ça
raison pour laquelle il est désactivé par défaut.
-des-optimisations-coûteuses
Effectuez un certain nombre d'optimisations mineures qui sont relativement coûteuses.
Activé aux niveaux -O2, -O3, -Tu.
Sans
Essayez de supprimer les instructions d'extension redondantes. Ceci est particulièrement utile pour
l'architecture x86-64, qui s'étend implicitement à zéro dans les registres 64 bits après
en écrivant sur leur moitié inférieure de 32 bits.
Activé pour Alpha, AArch64 et x86 aux niveaux -O2, -O3, -Tu.
-fno-lifetime-dse
En C++, la valeur d'un objet n'est affectée que par les changements au cours de sa durée de vie : lorsque
le constructeur commence, l'objet a une valeur indéterminée, et tout changement pendant
la durée de vie de l'objet sont morts lorsque l'objet est détruit. Magasin normalement mort
l'élimination en profitera ; si votre code repose sur la valeur de la
stockage d'objets persistant au-delà de la durée de vie de l'objet, vous pouvez utiliser cet indicateur pour
désactiver cette optimisation.
-flive-range-retrait
Tenter de diminuer la pression du registre par le rétrécissement de la plage en direct du registre. C'est
utile pour les processeurs rapides avec des jeux de registres de petite ou moyenne taille.
-fira-algorithme=algorithme
Utilisez l'algorithme de coloration spécifié pour l'allocateur de registre intégré. Les
algorithme l'argument peut être priorité, qui spécifie la coloration prioritaire de Chow, ou CB,
qui spécifie la coloration Chaitin-Briggs. La coloration Chaitin-Briggs n'est pas implémentée
pour toutes les architectures, mais pour les cibles qui le prennent en charge, c'est la valeur par défaut
car il génère un meilleur code.
-fira-région=région
Utilisez des régions spécifiées pour l'allocateur de registre intégré. Les région argument
doit être l'un des suivants :
tous Utilisez toutes les boucles comme régions d'allocation de registre. Cela peut donner les meilleurs résultats pour
machines avec un jeu de registres petit et/ou irrégulier.
mixte
Utilisez toutes les boucles à l'exception des boucles avec une faible pression de registre comme régions. Cette
valeur donne généralement les meilleurs résultats dans la plupart des cas et pour la plupart des architectures, et
est activé par défaut lors de la compilation avec optimisation de la vitesse (-O, -O2, ...).
UN Utilisez toutes les fonctions comme une seule région. Cela se traduit généralement par le plus petit code
taille, et est activé par défaut pour -Tu or -O0.
-fira-palan-pression
Utilisez IRA pour évaluer la pression du registre dans la passe de levage du code pour les décisions de levage
expressions. Cette option donne généralement un code plus petit, mais elle peut ralentir le
compilateur vers le bas.
Cette option est activée au niveau -Tu pour toutes les cibles.
-fira-boucle-pression
Utilisez IRA pour évaluer la pression de registre dans les boucles pour les décisions de déplacer les invariants de boucle.
Cette option entraîne généralement la génération de code plus rapide et plus petit sur les machines avec
fichiers de registre volumineux (>= 32 registres), mais cela peut ralentir le compilateur.
Cette option est activée au niveau -O3 pour certaines cibles.
-fno-ira-share-save-slots
Désactiver le partage des emplacements de pile utilisés pour enregistrer les registres durs utilisés par les appels
un appel. Chaque registre matériel obtient un emplacement de pile distinct et, par conséquent, une pile de fonctions
les cadres sont plus grands.
-fno-ira-share-spill-slots
Désactivez le partage des emplacements de pile alloués pour les pseudo-registres. Chaque pseudo-registre
qui n'obtient pas de registre dur obtient un emplacement de pile séparé, et par conséquent la fonction
les cadres de pile sont plus grands.
-fira-verbeux=n
Contrôlez la verbosité du fichier de vidage pour l'allocateur de registre intégré. Les
la valeur par défaut est 5. Si la valeur n est supérieur ou égal à 10, la sortie de vidage est envoyée
à stderr en utilisant le même format que n moins 10.
-flra-remat
Activez la rematérialisation sensible au CFG dans LRA. Au lieu de charger les valeurs de déversement
pseudos, LRA essaie de rematérialiser (recalculer) les valeurs si cela est rentable.
Activé aux niveaux -O2, -O3, -Tu.
-fdelayed-branche
Si pris en charge pour la machine cible, essayez de réorganiser les instructions pour exploiter
créneaux d'instructions disponibles après les instructions de branchement retardées.
Activé aux niveaux -O, -O2, -O3, -Tu.
-fschedule-insns
Si pris en charge pour la machine cible, essayez de réorganiser les instructions pour éliminer
l'exécution est bloquée en raison de l'indisponibilité des données requises. Cela aide les machines qui
avoir des instructions à virgule flottante ou de chargement de mémoire lentes en permettant à d'autres instructions de
être émis jusqu'à ce que le résultat de l'instruction de chargement ou à virgule flottante soit requis.
Activé aux niveaux -O2, -O3.
-fschedule-insns2
Similaire à -fschedule-insns, mais demande une passe supplémentaire de planification d'instructions
une fois l'attribution des registres effectuée. Ceci est particulièrement utile sur les machines avec un
relativement petit nombre de registres et où les instructions de chargement de la mémoire prennent plus de
un cycle.
Activé aux niveaux -O2, -O3, -Tu.
-fno-sched-interbloc
Ne programmez pas d'instructions sur des blocs de base. Ceci est normalement activé par défaut
lors de la programmation avant l'attribution des registres, c'est-à-dire avec -fschedule-insns ou au -O2 or
ultérieure.
-fno-sched-spec
N'autorisez pas le mouvement spéculatif des instructions de non-chargement. Ceci est normalement activé par
par défaut lors de la planification avant l'allocation des registres, c'est-à-dire avec -fschedule-insns ou au
-O2 ou plus.
-fsched-pression
Activer la programmation insn sensible à la pression du registre avant l'allocation du registre. Cette
n'a de sens que lors de la planification avant l'activation de l'allocation des registres, c'est-à-dire avec
-fschedule-insns ou au -O2 ou plus. L'utilisation de cette option peut améliorer le
code et diminuer sa taille en empêchant l'augmentation de la pression du registre au-dessus du nombre
des registres durs disponibles et des débordements ultérieurs dans l'allocation des registres.
-fsched-spec-load
Autoriser le mouvement spéculatif de certaines instructions de chargement. Cela n'a de sens que lorsque
ordonnancement avant l'attribution des registres, c'est-à-dire avec -fschedule-insns ou au -O2 ou plus.
-fsched-spec-charge-dangereux
Autoriser le mouvement spéculatif de plus d'instructions de chargement. Cela n'a de sens que lorsque
ordonnancement avant l'attribution des registres, c'est-à-dire avec -fschedule-insns ou au -O2 ou plus.
-fsched-stalled-insns
-fsched-stalled-insns=n
Définir combien d'insns (le cas échéant) peuvent être déplacés prématurément de la file d'attente
insns dans la liste des prêts au cours de la deuxième passe de planification. -fno-sched-stalled-insns
signifie qu'aucun inns n'est déplacé prématurément, -fsched-stalled-insns=0 signifie qu'il n'y a pas
limite sur le nombre d'insns en file d'attente pouvant être déplacés prématurément. -fsched-stalled-insns
sans valeur équivaut à -fsched-stalled-insns=1.
-fsched-stalled-insns-dep
-fsched-stalled-insns-dep=n
Définir combien de groupes d'insn (cycles) sont examinés pour une dépendance sur un insn bloqué
c'est un candidat pour le retrait prématuré de la file d'attente des insns bloqués. Cela a
un effet uniquement lors de la deuxième passe de programmation, et seulement si -fsched-stalled-insns is
utilisé. -fno-sched-bloqué-insns-dep équivaut à -fsched-stalled-insns-dep=0.
-fsched-stalled-insns-dep sans valeur équivaut à
-fsched-stalled-insns-dep=1.
-fsched2-utiliser-superblocs
Lors de la planification après l'allocation des registres, utilisez la planification de superbloc. Ceci permet
mouvement à travers les limites de bloc de base, résultant en des horaires plus rapides. Cette option est
expérimental, car toutes les descriptions de machines utilisées par GCC ne modélisent pas suffisamment le processeur
pour éviter des résultats non fiables de l'algorithme.
Cela n'a de sens que lors de la planification après l'allocation des registres, c'est-à-dire avec
-fschedule-insns2 ou au -O2 ou plus.
-fsched-groupe-heuristique
Activez l'heuristique de groupe dans le planificateur. Cette heuristique favorise l'instruction
qui appartient à un groupe de planification. Ceci est activé par défaut lorsque la planification est
activé, c'est-à-dire avec -fschedule-insns or -fschedule-insns2 ou au -O2 ou plus.
-fsched-critical-path-heuristique
Activez l'heuristique de chemin critique dans le planificateur. Cette heuristique favorise
instructions sur le chemin critique. Ceci est activé par défaut lorsque la planification est
activé, c'est-à-dire avec -fschedule-insns or -fschedule-insns2 ou au -O2 ou plus.
-fsched-spec-insn-heuristique
Activez l'heuristique d'instruction spéculative dans le planificateur. Cette heuristique favorise
instructions spéculatives avec une plus grande faiblesse de dépendance. c'est activé par défault
lorsque la planification est activée, c'est-à-dire avec -fschedule-insns or -fschedule-insns2 ou au -O2
ou plus.
-fsched-rank-heuristique
Activez l'heuristique de classement dans le planificateur. Cette heuristique favorise l'instruction
appartenant à un bloc de base de plus grande taille ou fréquence. c'est activé par défault
lorsque la planification est activée, c'est-à-dire avec -fschedule-insns or -fschedule-insns2 ou au -O2
ou plus.
-fsched-last-insn-heuristique
Activez l'heuristique de la dernière instruction dans le planificateur. Cette heuristique favorise la
instruction qui est moins dépendante de la dernière instruction programmée. Ceci est activé
par défaut lorsque la planification est activée, c'est-à-dire avec -fschedule-insns or -fschedule-insns2
ou au -O2 ou plus.
-fsched-dep-count-heuristique
Activez l'heuristique de nombre de personnes dépendantes dans le planificateur. Cette heuristique favorise la
instruction qui a plus d'instructions en fonction. c'est activé par défault
lorsque la planification est activée, c'est-à-dire avec -fschedule-insns or -fschedule-insns2 ou au -O2
ou plus.
-freschedule-modulo-boucles-programmées
L'ordonnancement modulo est effectué avant l'ordonnancement traditionnel. Si une boucle est modulo
programmé, les passes de programmation ultérieures peuvent modifier son horaire. Utilisez cette option pour
contrôler ce comportement.
-fprogrammation-sélective
Planifiez des instructions à l'aide d'un algorithme de planification sélective. Exécutions de planification sélective
au lieu du premier pass du programmateur.
-fprogrammation-sélective2
Planifiez des instructions à l'aide d'un algorithme de planification sélective. Exécutions de planification sélective
au lieu du deuxième pass du programmateur.
-fsel-sched-pipelining
Activez le pipeline logiciel des boucles les plus internes lors de la planification sélective. Cette
option n'a d'effet que si l'une des -fprogrammation-sélective or -fprogrammation-sélective2
Est allumé.
-fsel-sched-pipelining-boucles-extérieures
Lors du pipeline de boucles pendant la planification sélective, pipelinez également les boucles externes. Cette
option n'a d'effet que si -fsel-sched-pipelining Est allumé.
-finterposition-sémantique
Certains formats d'objets, comme ELF, permettent l'interposition de symboles par l'éditeur de liens dynamique.
Cela signifie que pour les symboles exportés depuis le DSO, le compilateur ne peut pas effectuer
propagation interprocédurale, inlining et autres optimisations en prévision que le
la fonction ou la variable en question peut changer. Bien que cette fonction soit utile, pour
exemple, pour réécrire les fonctions d'allocation de mémoire par une implémentation de débogage, il est
cher en termes de qualité de code. Avec -fno-sémantique-interposition le compilateur
suppose que si l'interposition se produit pour les fonctions, la fonction d'écrasement aura
exactement la même sémantique (et effets secondaires). De même si l'interposition se produit
pour les variables, le constructeur de la variable sera le même. Le drapeau n'a pas
effet pour les fonctions explicitement déclarées en ligne (où il n'est jamais autorisé pour
interposition pour changer la sémantique) et pour les symboles explicitement déclarés faibles.
-fshrink-wrap
N'émettez des prologues de fonction qu'avant les parties de la fonction qui en ont besoin, plutôt qu'à
le haut de la fonction. Ce drapeau est activé par défaut à -O Et plus élevé.
-fcaller-sauvegarde
Activer l'allocation de valeurs aux registres qui sont écrasés par les appels de fonction, en
l'émission d'instructions supplémentaires pour sauvegarder et restaurer les registres autour de ces appels. Tel
l'allocation n'est effectuée que lorsqu'elle semble aboutir à un meilleur code.
Cette option est toujours activée par défaut sur certaines machines, généralement celles qui ont
aucun registre d'appel préservé à utiliser à la place.
Activé aux niveaux -O2, -O3, -Tu.
-fcombine-stack-ajustements
Suit les ajustements de pile (poussées et pops) et les références de mémoire de pile, puis essaie
pour trouver des façons de les combiner.
Activé par défaut à -O1 Et plus élevé.
-fipa-ra
Utilisez les registres de sauvegarde de l'appelant pour l'attribution si ces registres ne sont utilisés par aucun appelé
fonction. Dans ce cas, il n'est pas nécessaire de les sauvegarder et de les restaurer autour des appels.
Ceci n'est possible que si les fonctions appelées font partie de la même unité de compilation que l'actuelle
fonction et ils sont compilés avant elle.
Activé aux niveaux -O2, -O3, -Tu.
-fconserve-pile
Essayez de minimiser l'utilisation de la pile. Le compilateur essaie d'utiliser moins d'espace de pile, même
si cela ralentit le programme. Cette option implique de définir le cadre à grande pile
paramètre à 100 et le grand-stack-frame-croissance paramètre à 400.
-ftree-réassoc
Effectuez la réassociation sur les arbres. Ce drapeau est activé par défaut à -O Et plus élevé.
-ftree-pré
Effectuez l'élimination partielle de la redondance (PRE) sur les arbres. Ce drapeau est activé par
par défaut à -O2 et -O3.
-ftree-partial-pre
Rendre l'élimination partielle de la redondance (PRE) plus agressive. Ce drapeau est activé par
par défaut à -O3.
-ftree-forwprop
Effectuez une propagation vers l'avant sur les arbres. Ce drapeau est activé par défaut à -O et
ultérieure.
-ftree-free
Effectuez l'élimination complète de la redondance (FRE) sur les arbres. La différence entre FRE et
PRE est que FRE ne considère que les expressions qui sont calculées sur tous les chemins menant à
le calcul redondant. Cette analyse est plus rapide que PRE, bien qu'elle expose moins
licenciements. Ce drapeau est activé par défaut à -O Et plus élevé.
-ftree-phiprop
Effectuer le levage de charges à partir de pointeurs conditionnels sur les arbres. Ce pass est activé par
par défaut à -O Et plus élevé.
-fhoist-charges-adjacentes
Lever spéculativement les charges des deux branches d'un if-then-else si les charges proviennent de
emplacements adjacents dans la même structure et l'architecture cible a une condition
consigne de mouvement. Ce drapeau est activé par défaut à -O2 Et plus élevé.
-ftree-copie-prop
Effectuer la propagation de copie sur les arbres. Cette passe élimine les opérations de copie inutiles.
Ce drapeau est activé par défaut à -O Et plus élevé.
-fipa-pure-const
Découvrez quelles fonctions sont pures ou constantes. Activé par défaut à -O Et plus élevé.
-fipa-référence
Découvrez quelles variables statiques n'échappent pas à l'unité de compilation. Activé par
par défaut à -O Et plus élevé.
-fipa-pta
Effectuer une analyse de pointeur interprocédural et une modification interprocédurale et
analyse de référence. Cette option peut entraîner une utilisation excessive de la mémoire et du temps de compilation sur
grandes unités de compilation. Il n'est activé par défaut à aucun niveau d'optimisation.
-fipa-profil
Effectuer une propagation de profil interprocédural. Les fonctions appelées uniquement à froid
les fonctions sont marquées comme froides. Aussi les fonctions exécutées une fois (comme "à froid",
"noreturn", constructeurs ou destructeurs statiques) sont identifiés. Fonctions froides et
les parties en boucle moins des fonctions exécutées une fois sont alors optimisées pour la taille. Activé par
par défaut à -O Et plus élevé.
-fipa-cp
Effectuer une propagation constante interprocédurale. Cette optimisation analyse le programme
pour déterminer quand les valeurs transmises aux fonctions sont des constantes, puis optimise
par conséquent. Cette optimisation peut augmenter considérablement les performances si le
l'application a des constantes passées aux fonctions. Ce drapeau est activé par défaut à
-O2, -Tu et -O3.
-fipa-cp-clone
Effectuez un clonage de fonction pour renforcer la propagation constante interprocédurale. Lorsque
activée, la propagation constante interprocédurale effectue un clonage de fonction lorsque
La fonction visible de l'extérieur peut être appelée avec des arguments constants. Car ce
l'optimisation peut créer plusieurs copies de fonctions, elle peut augmenter considérablement
taille du code (voir --param ipcp-unit-croissance=Plus-value). Ce drapeau est activé par défaut à
-O3.
-fipa-cp-alignement
Lorsqu'elle est activée, cette optimisation propage l'alignement des paramètres de fonction pour prendre en charge
meilleure vectorisation et opérations de chaîne.
Ce drapeau est activé par défaut à -O2 et -Tu. Cela exige que -fipa-cp est autorisé.
-fipa-icf
Effectuez le pliage de code identique pour les fonctions et les variables en lecture seule. Les
l'optimisation réduit la taille du code et peut perturber les piles de déroulement en remplaçant une fonction
par un équivalent avec un nom différent. L'optimisation fonctionne plus efficacement avec
optimisation du temps de liaison activée.
Néanmoins, le comportement est similaire à l'optimisation Gold Linker ICF, GCC ICF fonctionne sur
différents niveaux et donc les optimisations ne sont pas les mêmes - il y a des équivalences qui
ne sont trouvés que par GCC et les équivalences ne sont trouvées que par Gold.
Ce drapeau est activé par défaut à -O2 et -Tu.
-fisolate-déréférencement-de-chemins-erronés
Détecter les chemins qui déclenchent un comportement erroné ou indéfini en raison du déréférencement d'un null
aiguille. Isolez ces chemins du flux de contrôle principal et transformez l'instruction avec
comportement erroné ou indéfini dans un piège. Ce drapeau est activé par défaut à -O2
Et plus élevé.
-attribut-fisolate-chemins-erronés
Détecter les chemins qui déclenchent un comportement erroné ou indéfini en raison de l'utilisation d'une valeur nulle
d'une manière interdite par un attribut "returns_nonnull" ou "nonnull". Isoler ces chemins
du flux de contrôle principal et transformer l'instruction avec un comportement erroné ou indéfini
dans un piège. Ceci n'est pas activé actuellement, mais peut être activé par -O2 dans le futur.
-ftree-évier
Effectuez un mouvement de magasinage vers l'avant sur les arbres. Ce drapeau est activé par défaut à -O et
ultérieure.
-ftree-bit-ccp
Effectuer une propagation constante de bits conditionnelle clairsemée sur les arbres et propager le pointeur
informations d'alignement. Cette passe ne fonctionne que sur les variables scalaires locales et est
activé par défaut à -O et plus haut. Cela exige que -ftree-ccp est autorisé.
-ftree-ccp
Effectuez une propagation constante conditionnelle clairsemée (CCP) sur les arbres. Ce pass uniquement
fonctionne sur des variables scalaires locales et est activé par défaut à -O Et plus élevé.
-fssa-phiopt
Effectuez une correspondance de modèle sur les nœuds SSA PHI pour optimiser le code conditionnel. Ce laissez-passer est
activé par défaut à -O Et plus élevé.
-ftree-commutateur-conversion
Effectuer la conversion d'initialisations simples dans un commutateur en initialisations à partir d'un
tableau scalaire. Ce drapeau est activé par défaut à -O2 Et plus élevé.
-ftree-tail-fusion
Recherchez des séquences de codes identiques. Une fois trouvé, remplacez l'un par un saut à l'autre.
Cette optimisation est connue sous le nom de fusion de queue ou de saut croisé. Ce drapeau est activé par
par défaut à -O2 et plus haut. Le temps de compilation dans cette passe peut être limité en utilisant
max-tail-merge-comparaisons paramètre et max-tail-merge-itérations paramètre.
-ftree-dce
Effectuez l'élimination du code mort (DCE) sur les arbres. Ce drapeau est activé par défaut à -O
Et plus élevé.
-ftree-builtin-call-dce
Effectuez l'élimination conditionnelle du code mort (DCE) pour les appels aux fonctions intégrées qui
peuvent définir "errno" mais sont sinon sans effets secondaires. Ce drapeau est activé par défaut
at -O2 et plus si -Tu n'est pas non plus précisé.
-ftree-dominator-opt
Effectuez une variété de nettoyages scalaires simples (propagation constante/copie, redondance
élimination, propagation de la plage et simplification de l'expression) basée sur un dominant
traversée d'arbres. Cela exécute également le threading de saut (pour réduire les sauts aux sauts). Cette
l'indicateur est activé par défaut à -O Et plus élevé.
-ftree-dse
Effectuez l'élimination des dépôts morts (DSE) sur les arbres. Un magasin mort est un magasin dans une mémoire
emplacement qui est ensuite écrasé par un autre magasin sans aucune charge intermédiaire. Dans
dans ce cas, le magasin antérieur peut être supprimé. Ce drapeau est activé par défaut à -O et
ultérieure.
-ftree-ch
Effectuez une copie d'en-tête de boucle sur les arbres. Ceci est bénéfique car il augmente
l'efficacité des optimisations de mouvement de code. Cela permet également d'économiser un saut. Ce drapeau est
activé par défaut à -O et plus haut. Il n'est pas activé pour -Tu, puisqu'il est généralement
augmente la taille du code.
-ftree-loop-optimiser
Effectuez des optimisations de boucle sur les arbres. Ce drapeau est activé par défaut à -O et
ultérieure.
-ftree-boucle-linéaire
Effectuer des transformations d'échange de boucle sur l'arborescence. Pareil que -floop-échange. Utiliser
cette transformation de code, GCC doit être configuré avec --avec-isl pour activer le
Infrastructure de transformation de boucle de graphite.
-floop-échange
Effectuez des transformations d'échange de boucles sur les boucles. Interchanger deux boucles imbriquées
commute les boucles intérieures et extérieures. Par exemple, étant donné une boucle comme :
FAIRE J = 1, M
JE = 1, N
A(J, je) = A(J, je) * C
Endo
Endo
loop interchange transforme la boucle comme si elle s'écrivait :
JE = 1, N
FAIRE J = 1, M
A(J, je) = A(J, je) * C
Endo
Endo
ce qui peut être bénéfique lorsque "N" est plus grand que les caches, car en Fortran, le
les éléments d'un tableau sont stockés en mémoire de manière contiguë par colonne, et l'original
loop itère sur les lignes, créant potentiellement à chaque accès un cache miss. Cette
l'optimisation s'applique à toutes les langues prises en charge par GCC et ne se limite pas à
Fortran. Pour utiliser cette transformation de code, GCC doit être configuré avec --avec-isl à
activer l'infrastructure de transformation de la boucle Graphite.
-floop-strip-mine
Effectuez des transformations de minage en boucle sur des boucles. L'extraction à ciel ouvert divise une boucle en
deux boucles imbriquées. La boucle extérieure a des foulées égales à la taille de la bande et la boucle intérieure
boucle a des pas de la boucle d'origine dans une bande. La longueur de la bande peut être modifiée
en utilisant l' boucle-bloc-tuile-taille paramètre. Par exemple, étant donné une boucle comme :
JE = 1, N
A(je) = A(je) + C
Endo
loop strip mining transforme la boucle comme si elle s'écrivait :
FAIRE II = 1, N, 51
FAIRE I = II, min (II + 50, N)
A(je) = A(je) + C
Endo
Endo
Cette optimisation s'applique à toutes les langues prises en charge par GCC et ne se limite pas à
Fortran. Pour utiliser cette transformation de code, GCC doit être configuré avec --avec-isl à
activer l'infrastructure de transformation de la boucle Graphite.
-floop-bloc
Effectuez des transformations de blocage de boucle sur les boucles. Bloquer les mines à ciel ouvert à chaque boucle du
nid de boucle de telle sorte que les accès mémoire des boucles d'éléments tiennent dans les caches. Les
la longueur de la bande peut être modifiée à l'aide du boucle-bloc-tuile-taille paramètre. Par exemple,
étant donné une boucle comme :
JE = 1, N
FAIRE J = 1, M
A(J, je) = B(je) + C(J)
Endo
Endo
le blocage de boucle transforme la boucle comme si elle était écrite :
FAIRE II = 1, N, 51
FAIRE JJ = 1, M, 51
FAIRE I = II, min (II + 50, N)
FAIRE J = JJ, min (JJ + 50, M)
A(J, je) = B(je) + C(J)
Endo
Endo
Endo
Endo
ce qui peut être bénéfique lorsque "M" est plus grand que les caches, car la boucle la plus interne
itère sur une plus petite quantité de données qui peuvent être conservées dans les caches. Cette
l'optimisation s'applique à toutes les langues prises en charge par GCC et ne se limite pas à
Fortran. Pour utiliser cette transformation de code, GCC doit être configuré avec --avec-isl à
activer l'infrastructure de transformation de la boucle Graphite.
-fgraphite-identité
Activer la transformation d'identité pour le graphite. Pour chaque SCoP, nous générons le
représentation polyédrique et la retransformer en gimple. À l'aide de -fgraphite-identité
nous pouvons vérifier les coûts ou les avantages de la transformation GIMPLE -> GRAPHITE -> GIMPLE.
Certaines optimisations minimales sont également effectuées par le générateur de code ISL, comme index
fractionnement et élimination du code mort dans les boucles.
-floop-nest-optimiser
Activez l'optimiseur d'imbrication de boucle basé sur ISL. Il s'agit d'un optimiseur générique de nid de boucle basé
sur les algorithmes d'optimisation de Pluton. Il calcule une structure de boucle optimisée pour
data-locality et parallélisme. Cette option est expérimentale.
-floop-dérouler-et-bloquer
Activez le déroulement et le bourrage pour l'optimiseur d'imbrication de boucle basé sur ISL. Le facteur de déroulement peut être
modifié à l'aide du loop-unroll-jam-taille paramètre. La dimension déroulée (en comptant
du plus intérieur) peut être modifié à l'aide de la loop-unroll-jam-profondeur paramètre.
.
-floop-parallélise-tout
Utilisez l'analyse de dépendance des données Graphite pour identifier les boucles qui peuvent être parallélisées.
Paralléliser toutes les boucles pouvant être analysées pour ne pas contenir de dépendances portées par les boucles
sans vérifier qu'il est rentable de paralléliser les boucles.
-fcheck-data-deps
Comparez les résultats de plusieurs analyseurs de dépendance des données. Cette option est utilisée pour
débogage des analyseurs de dépendance des données.
-ftree-loop-if-convert
Tenter de transformer les sauts conditionnels dans les boucles les plus internes en sans branche
équivalents. L'intention est de supprimer le flux de contrôle des boucles les plus internes afin
pour améliorer la capacité de la passe de vectorisation à gérer ces boucles. C'est
activé par défaut si la vectorisation est activée.
-ftree-loop-if-convert-magasins
Essayez de convertir également les sauts conditionnels contenant des écritures en mémoire. Cette
la transformation peut être dangereuse pour les programmes multithreads car elle transforme les conditions
la mémoire écrit dans les écritures inconditionnelles de la mémoire. Par exemple,
pour (i = 0; i < N; i++)
si (cond)
A[i] = expr ;
se transforme en
pour (i = 0; i < N; i++)
A[i] = cond ? expr : A[je];
produisant potentiellement des courses de données.
-ftree-loop-distribution
Effectuer la distribution en boucle. Ce drapeau peut améliorer les performances du cache sur les gros corps de boucle
et permettre d'autres optimisations de boucle, comme la parallélisation ou la vectorisation,
endroit. Par exemple, la boucle
JE = 1, N
A(je) = B(je) + C
D(I) = E(I) *F
Endo
se transforme en
JE = 1, N
A(je) = B(je) + C
Endo
JE = 1, N
D(I) = E(I) *F
Endo
-ftree-loop-distribute-patterns
Effectuer une distribution en boucle de modèles pouvant être générés par du code avec des appels à un
une bibliothèque. Ce drapeau est activé par défaut à -O3.
Cette passe distribue les boucles d'initialisation et génère un appel à memset zero.
Par exemple, la boucle
JE = 1, N
UNE(Je) = 0
B(je) = A(je) + je
Endo
se transforme en
JE = 1, N
UNE(Je) = 0
Endo
JE = 1, N
B(je) = A(je) + je
Endo
et la boucle d'initialisation est transformée en un appel à memset zero.
-ftree-loop-im
Effectuez un mouvement invariant en boucle sur les arbres. Cette passe ne déplace que les invariants difficiles
à gérer au niveau RTL (appels de fonction, opérations qui s'étendent à des séquences non triviales
des auberges). Avec -funswitch-boucles il déplace également les opérandes des conditions qui sont
invariant hors de la boucle, de sorte que nous puissions utiliser une analyse d'invariance triviale dans
désenclenchement de la boucle. Le pass comprend également le mouvement du magasin.
-ftree-loop-ivcanon
Créer un compteur canonique pour le nombre d'itérations dans les boucles pour lesquelles déterminer
nombre d'itérations nécessite une analyse compliquée. Des optimisations ultérieures peuvent alors
déterminer le nombre facilement. Utile surtout en rapport avec le déroulement.
-cinq points
Effectuer des optimisations de variables d'induction (réduction de force, variable d'induction
fusion et élimination des variables d'induction) sur les arbres.
-ftree-paralléliser-boucles=n
Paralléliser les boucles, c'est-à-dire diviser leur espace d'itération pour s'exécuter dans n threads. C'est
possible uniquement pour les boucles dont les itérations sont indépendantes et peuvent être arbitrairement
réorganisé. L'optimisation n'est rentable que sur les machines multiprocesseurs, pour les boucles
qui sont gourmands en CPU, plutôt que limités, par exemple par la bande passante mémoire. Cette option
implique -pthread, et n'est donc pris en charge que sur les cibles qui prennent en charge
-pthread.
-ftree-PTA
Effectuez une analyse des points de fonction locaux sur les arbres. Ce drapeau est activé par défaut
at -O Et plus élevé.
-ftree-sra
Effectuer le remplacement scalaire des agrégats. Ce pass remplace les références de structure
avec des scalaires pour éviter de mémoriser des structures trop tôt. Ce drapeau est
activé par défaut à -O Et plus élevé.
-ftree-copyrename
Effectuer un renommage de copie sur les arbres. Cette passe tente de renommer les temporaires du compilateur en
d'autres variables aux emplacements de copie, résultant généralement en des noms de variables qui plus
ressemblent beaucoup aux variables d'origine. Ce drapeau est activé par défaut à -O et
ultérieure.
-ftree-coalesce-inline-vars
Dites au copyrename pass (voir -ftree-copyrename) pour tenter de combiner petit utilisateur-
variables définies aussi, mais seulement si elles sont incorporées à d'autres fonctions. C'est un
forme plus limitée de -ftree-coalesce-vars. Cela peut endommager les informations de débogage de tels
variables inline, mais il garde les variables de la fonction inline en dehors de chaque
autre, de sorte qu'ils sont plus susceptibles de contenir les valeurs attendues dans un débogage
session.
-ftree-coalesce-vars
Dites au copyrename pass (voir -ftree-copyrename) pour tenter de combiner petit utilisateur-
variables définies aussi, au lieu de simplement temporaires du compilateur. Cela peut fortement limiter
la possibilité de déboguer un programme optimisé compilé avec -fno-var-tracking-assignations.
Dans la forme niée, cet indicateur empêche la fusion SSA des variables utilisateur, y compris
ceux alignés. Cette option est activée par défaut.
-ftre-ter
Effectuez le remplacement temporaire de l'expression pendant la phase SSA->normale. Seul
les temporaires use/single def sont remplacés à leur emplacement d'utilisation par leur définition
expression. Cela donne un code non GIMPLE, mais donne aux expandeurs beaucoup plus
des arbres complexes sur lesquels travailler pour une meilleure génération de RTL. Ceci est activé par
par défaut à -O Et plus élevé.
-ftree-slsr
Réalisez une réduction de force en ligne droite sur les arbres. Cela reconnaît
expressions impliquant des multiplications et les remplace par des calculs moins coûteux
quand c'est possible. Ceci est activé par défaut à -O Et plus élevé.
-ftree-vectoriser
Effectuer une vectorisation sur les arbres. Ce drapeau permet -ftree-boucle-vectoriser et
-ftree-slp-vectoriser s'il n'est pas explicitement spécifié.
-ftree-boucle-vectoriser
Effectuer une vectorisation en boucle sur les arbres. Ce drapeau est activé par défaut à -O3 et quand
-ftree-vectoriser est autorisé.
-ftree-slp-vectoriser
Effectuez la vectorisation de blocs de base sur les arbres. Ce drapeau est activé par défaut à -O3 et
quand -ftree-vectoriser est autorisé.
-fvect-cost-model=modèle
Modifiez le modèle de coût utilisé pour la vectorisation. Les modèle l'argument devrait être l'un des
illimité, Dynamic or pas cher. Avec le illimité modéliser le chemin de code vectorisé est
supposée rentable alors qu'avec la Dynamic modéliser un contrôle d'exécution protège le
chemin de code vectorisé pour l'activer uniquement pour les nombres d'itérations qui s'exécuteront probablement
plus rapide que lors de l'exécution de la boucle scalaire d'origine. Les pas cher le modèle se désactive
vectorisation des boucles là où cela serait d'un coût prohibitif par exemple en raison de
les vérifications d'exécution requises pour la dépendance ou l'alignement des données, mais sont sinon égales à la
Dynamic maquette. Le modèle de coût par défaut dépend d'autres indicateurs d'optimisation et est
non plus Dynamic or pas cher.
-fsimd-cost-model=modèle
Modifier le modèle de coût utilisé pour la vectorisation des boucles marquées avec l'OpenMP ou Cilk
Plus la directive simd. Les modèle l'argument devrait être l'un des illimité, Dynamic, pas cher.
Toutes les valeurs de modèle ont la même signification que celle décrite dans -fvect-cost-model et par
par défaut un modèle de coût défini avec -fvect-cost-model est utilisé.
-ftree-vrp
Effectuez la propagation de la plage de valeurs sur les arbres. Ceci est similaire à la propagation constante
pass, mais au lieu de valeurs, des plages de valeurs sont propagées. Cela permet au
optimiseurs pour supprimer les vérifications de plage inutiles telles que les vérifications liées aux tableaux et le pointeur nul
chèques. Ceci est activé par défaut à -O2 et plus haut. Élimination de la vérification du pointeur nul
n'est fait que si -fdelete-null-pointer-checks est autorisé.
-fsplit-ivs-dans-unroller
Permet l'expression des valeurs des variables d'induction dans les itérations ultérieures du
boucle déroulée en utilisant la valeur de la première itération. Cela rompt la longue dépendance
chaînes, améliorant ainsi l'efficacité des passes d'ordonnancement.
Une combinaison de -fweb et le CSE est souvent suffisant pour obtenir le même effet.
Cependant, cela n'est pas fiable dans les cas où le corps de la boucle est plus compliqué qu'un
bloc de base unique. Il ne fonctionne pas non plus du tout sur certaines architectures en raison de
restrictions dans le laissez-passer CSE.
Cette optimisation est activée par défaut.
-fvariable-expansion-in-unroller
Avec cette option, le compilateur crée plusieurs copies de certaines variables locales lorsque
déroulement d'une boucle, ce qui peut aboutir à un code supérieur.
-fpartial-inline
Inline parties de fonctions. Cette option n'a d'effet que lorsque l'inline est elle-même
allumé par le -finline-fonctions or -finline-petites-fonctions options.
Activé au niveau -O2.
-frrédicatif
Effectuer une optimisation prédictive de mise en commun, c'est-à-dire réutiliser les calculs (en particulier
chargements et stockages de la mémoire) effectués dans les itérations précédentes des boucles.
Cette option est activée au niveau -O3.
-fprefetch-boucles-tableaux
Si pris en charge par la machine cible, générez des instructions pour extraire la mémoire à
améliorer les performances des boucles qui accèdent à de grands tableaux.
Cette option peut générer un code meilleur ou pire ; les résultats dépendent fortement de la
structure de boucles dans le code source.
Désactivé au niveau -Tu.
-fno-judas
-fno-judas2
Désactivez toutes les optimisations de judas spécifiques à la machine. La différence entre
-fno-judas et -fno-judas2 est dans la façon dont ils sont implémentés dans le compilateur ; certains
les cibles utilisent l'une, certaines utilisent l'autre, quelques-unes utilisent les deux.
-f judas est activé par défaut. -f judas2 activé aux niveaux -O2, -O3, -Tu.
-fno-deviner-branche-probabilité
Ne devinez pas les probabilités de branchement à l'aide d'heuristiques.
GCC utilise des heuristiques pour deviner les probabilités de branchement si elles ne sont pas fournies par
commentaires de profilage (-fprofile-arcs). Ces heuristiques sont basées sur le flux de contrôle
graphique. Si certaines probabilités de branchement sont spécifiées par "__builtin_expect", alors le
les heuristiques sont utilisées pour deviner les probabilités de branchement pour le reste du flux de contrôle
graphique, en tenant compte des informations "__builtin_expect". Les interactions entre les
les heuristiques et "__builtin_expect" peuvent être complexes, et dans certains cas, cela peut être utile
pour désactiver l'heuristique afin que les effets de "__builtin_expect" soient plus faciles à
comprendre.
La valeur par défaut est -fguess-branche-probabilité aux niveaux -O, -O2, -O3, -Tu.
-freorder-blocs
Réorganiser les blocs de base dans la fonction compilée afin de réduire le nombre de prises
branches et améliorer la localisation du code.
Activé aux niveaux -O2, -O3.
-freorder-blocs-et-partition
Outre la réorganisation des blocs de base dans la fonction compilée, afin de réduire
nombre de branches prises, partitionne les blocs de base chauds et froids en sections séparées
des fichiers assembly et .o, pour améliorer les performances de la localité de pagination et de cache.
Cette optimisation est automatiquement désactivée en présence de gestion des exceptions,
pour les sections linkonce, pour les fonctions avec un attribut de section défini par l'utilisateur et sur n'importe quel
architecture qui ne prend pas en charge les sections nommées.
Activé pour x86 aux niveaux -O2, -O3.
-freorder-fonctions
Réorganiser les fonctions dans le fichier objet afin d'améliorer la localité du code. C'est
implémenté en utilisant des sous-sections spéciales ".text.hot" pour les plus fréquemment exécutées
fonctions et ".text.unlikely" pour les fonctions exécutées improbables. La réorganisation est effectuée par
l'éditeur de liens donc le format de fichier objet doit prendre en charge les sections nommées et l'éditeur de liens doit placer
eux d'une manière raisonnable.
De plus, les commentaires de profil doivent être disponibles pour que cette option soit efficace. Voir
-fprofile-arcs pour en savoir plus.
Activé aux niveaux -O2, -O3, -Tu.
-fstrict-aliasing
Autoriser le compilateur à assumer les règles d'alias les plus strictes applicables au langage
en cours de compilation. Pour C (et C++), cela active des optimisations basées sur le type de
expressions. En particulier, un objet d'un type est supposé ne jamais résider au
même adresse qu'un objet d'un type différent, à moins que les types soient presque les mêmes.
Par exemple, un « int non signé » peut être un alias « int », mais pas un « void* » ou un « double ». UNE
type de caractère peut alias n'importe quel autre type.
Portez une attention particulière au code comme celui-ci:
union a_union {
int i;
double d ;
};
entier f() {
union a_union t ;
td = 3.0 ;
retour ti;
}
La pratique de la lecture d'un membre du syndicat différent de celui le plus récemment
écrit à (appelé "type-punning") est commun. Même avec -fstrict-aliasing, taper-
le jeu de mots est autorisé, à condition que la mémoire soit accessible via le type union. Alors le
le code ci-dessus fonctionne comme prévu. Cependant, ce code peut ne pas :
entier f() {
union a_union t ;
int* ip ;
td = 3.0 ;
ip = &t.i;
retourner *ip;
}
De même, l'accès en prenant l'adresse, en lançant le pointeur résultant et en
le déréférencement du résultat a un comportement indéfini, même si le cast utilise un type union,
par exemple:
entier f() {
double d = 3.0 ;
return ((union a_union *) &d)->i;
}
VOTRE -fstrict-aliasing l'option est activée aux niveaux -O2, -O3, -Tu.
-fstrict-débordement
Autoriser le compilateur à assumer des règles de débordement signées strictes, en fonction de la langue
en cours de compilation. Pour C (et C++), cela signifie que le débordement lors de l'arithmétique avec
les nombres signés sont indéfinis, ce qui signifie que le compilateur peut supposer qu'il ne
arriver. Cela permet diverses optimisations. Par exemple, le compilateur suppose que
une expression comme "i + 10 > i" est toujours vraie pour un "i" signé. Cette hypothèse est
valide uniquement si le débordement signé n'est pas défini, car l'expression est fausse si "i + 10"
déborde lors de l'utilisation de l'arithmétique du complément à deux. Lorsque cette option est en vigueur, tout
tenter de déterminer si une opération sur les débordements de nombres signés doit être écrite
soigneusement pour ne pas réellement impliquer de débordement.
Cette option permet également au compilateur d'assumer une sémantique de pointeur stricte : étant donné un
pointeur vers un objet, si l'ajout d'un décalage à ce pointeur ne produit pas de pointeur
au même objet, l'addition est indéfinie. Cela permet au compilateur de conclure
que "p + u > p" est toujours vrai pour un pointeur "p" et un entier non signé "u". Cette
l'hypothèse n'est valide que parce que le bouclage du pointeur n'est pas défini, car l'expression est
false si "p + u" déborde en utilisant l'arithmétique du complément à deux.
Voir aussi -fwrapv option. En utilisant -fwrapv signifie que le débordement d'entier signé est
complètement défini : il enveloppe. Lorsque -fwrapv est utilisé, il n'y a pas de différence entre
-fstrict-débordement et -fno-strict-débordement pour les entiers. Avec -fwrapv certains types
de débordement sont autorisés. Par exemple, si le compilateur obtient un débordement en faisant
arithmétique sur les constantes, la valeur dépassée peut toujours être utilisée avec -fwrapv, Mais pas
autrement.
VOTRE -fstrict-débordement l'option est activée aux niveaux -O2, -O3, -Tu.
-falign-fonctions
-falign-fonctions=n
Alignez le début des fonctions sur la prochaine puissance de deux supérieure à n, en sautant jusqu'à n
octets. Par exemple, -falign-fonctions=32 aligne les fonctions sur les 32 octets suivants
frontière, mais -falign-fonctions=24 s'aligne sur la prochaine limite de 32 octets uniquement si cette
peut être fait en sautant 23 octets ou moins.
-fno-align-fonctions et -falign-fonctions=1 sont équivalentes et signifient que les fonctions
ne sont pas alignés.
Certains assembleurs ne prennent en charge cet indicateur que lorsque n est une puissance de deux ; dans ce cas, c'est
arrondi.
If n n'est pas spécifié ou vaut zéro, utilisez une valeur par défaut dépendant de la machine.
Activé aux niveaux -O2, -O3.
-falign-étiquettes
-falign-étiquettes=n
Alignez toutes les cibles de branche sur une limite de puissance de deux, en sautant jusqu'à n octets comme
-falign-fonctions. Cette option peut facilement ralentir le code, car elle doit insérer
opérations factices lorsque la cible de branche est atteinte dans le flux habituel du code.
-fno-align-étiquettes et -falign-étiquettes=1 sont équivalents et signifient que les étiquettes ne sont pas
aligné.
If -falign-boucles or -falign-sauts sont applicables et sont supérieures à cette valeur, alors
leurs valeurs sont utilisées à la place.
If n n'est pas spécifié ou vaut zéro, utilisez une valeur par défaut dépendant de la machine, ce qui est très probable
être 1, ce qui signifie pas d'alignement.
Activé aux niveaux -O2, -O3.
-falign-boucles
-falign-boucles=n
Alignez les boucles sur une limite de puissance de deux, en sautant jusqu'à n octets comme -falign-fonctions.
Si les boucles sont exécutées plusieurs fois, cela compense toute exécution du mannequin
opérations.
-fno-align-boucles et -falign-boucles=1 sont équivalents et signifient que les boucles ne sont pas
aligné.
If n n'est pas spécifié ou vaut zéro, utilisez une valeur par défaut dépendant de la machine.
Activé aux niveaux -O2, -O3.
-falign-sauts
-falign-sauts=n
Alignez les cibles de branche sur une limite de puissance de deux, pour les cibles de branche où les cibles
ne peut être atteint qu'en sautant, en sautant jusqu'à n octets comme -falign-fonctions. En
dans ce cas, aucune opération fictive n'a besoin d'être exécutée.
-fno-align-sauts et -falign-sauts=1 sont équivalents et signifient que les boucles ne sont pas
aligné.
If n n'est pas spécifié ou vaut zéro, utilisez une valeur par défaut dépendant de la machine.
Activé aux niveaux -O2, -O3.
-funit-a-a-time
Cette option est laissée pour des raisons de compatibilité. -funit-a-a-time n'a aucun effet, tandis que
-fno-unité-à-la-fois implique -fno-toplevel-réorganisation et -fno-section-ancres.
Activé par défaut.
-fno-toplevel-réorganisation
Ne réorganisez pas les fonctions de niveau supérieur, les variables et les instructions « asm ». Sortez-les dans
le même ordre qu'ils apparaissent dans le fichier d'entrée. Lorsque cette option est utilisée,
les variables statiques non référencées ne sont pas supprimées. Cette option est destinée à prendre en charge
code existant qui repose sur un ordre particulier. Pour un nouveau code, il est préférable d'utiliser
attributs lorsque cela est possible.
Activé au niveau -O0. Lorsqu'elle est désactivée explicitement, cela implique également -fno-section-ancres,
qui est autrement activé à -O0 sur certaines cibles.
-fweb
Construit des sites Web couramment utilisés à des fins d'allocation de registres et attribue chaque site Web
pseudo-registre individuel. Cela permet à la passe d'attribution de registre de fonctionner sur
pseudos directement, mais renforce également plusieurs autres passes d'optimisation, telles que CSE,
optimiseur de boucle et solvant de code mort trivial. Il peut cependant rendre le débogage
impossible, puisque les variables ne restent plus dans un « registre d'accueil ».
Activé par défaut avec -funroll-boucles.
-fwhole-programme
Supposons que l'unité de compilation actuelle représente l'ensemble du programme en cours de compilation.
Toutes les fonctions et variables publiques à l'exception de "main" et celles fusionnées par
l'attribut "externally_visible" devient des fonctions statiques et sont en effet optimisés
plus agressivement par les optimiseurs interprocéduraux.
Cette option ne doit pas être utilisée en combinaison avec -flto. Au lieu de s'appuyer sur un éditeur de liens
plugin devrait fournir des informations plus sûres et plus précises.
-flto[=n]
Cette option exécute l'optimiseur de temps de liaison standard. Lorsqu'il est invoqué avec le code source, il
génère GIMPLE (une des représentations internes de GCC) et l'écrit dans un ELF spécial
sections dans le fichier objet. Lorsque les fichiers objets sont liés entre eux, tous les
les corps de fonction sont lus à partir de ces sections ELF et instanciés comme s'ils avaient été
partie de la même unité de traduction.
Pour utiliser l'optimiseur de temps de liaison, -flto et les options d'optimisation doivent être spécifiées à
au moment de la compilation et lors du dernier lien. Par exemple:
gcc -c -O2 -flto foo.c
gcc -c -O2 -flto bar.c
gcc -o monprog -flto -O2 foo.o bar.o
Les deux premières invocations à GCC enregistrent une représentation de bytecode de GIMPLE dans un
Sections ELF à l'intérieur foo.o et bar.o. L'invocation finale lit le bytecode GIMPLE
foo.o et bar.o, fusionne les deux fichiers en une seule image interne et compile
le résultat comme d'habitude. Puisque les deux foo.o et bar.o sont fusionnés en une seule image, ce
fait en sorte que toutes les analyses et optimisations interprocédurales dans GCC fonctionnent à travers le
deux fichiers comme s'il s'agissait d'un seul. Cela signifie, par exemple, que l'inliner est
capable d'intégrer des fonctions dans bar.o en fonctions dans foo.o et vice versa.
Une autre façon (plus simple) d'activer l'optimisation du temps de liaison est :
gcc -o monprog -flto -O2 foo.c bar.c
Ce qui précède génère un bytecode pour foo.c et bar.c, les fusionne en un seul
représentation GIMPLE et les optimise comme d'habitude pour produire monprog.
La seule chose importante à garder à l'esprit est que pour activer les optimisations de temps de liaison, vous
besoin d'utiliser le pilote GCC pour effectuer l'étape de liaison. GCC exécute alors automatiquement
optimisation du temps de liaison si l'un des objets impliqués a été compilé avec le -flto
option de ligne de commande. Vous devez généralement spécifier les options d'optimisation à utiliser
pour l'optimisation du temps de liaison bien que GCC essaie d'être intelligent pour deviner une optimisation
niveau à utiliser à partir des options utilisées au moment de la compilation si vous n'en spécifiez pas un au lien-
temps. Vous pouvez toujours annuler la décision automatique d'effectuer une optimisation du temps de liaison à
lien-temps en passant -fno-lto à la commande de lien.
Pour que l'optimisation de l'ensemble du programme soit efficace, il est nécessaire de s'assurer que l'ensemble
hypothèses du programme. Le compilateur doit savoir quelles fonctions et variables peuvent être
accessible par les bibliothèques et l'environnement d'exécution en dehors de l'unité optimisée en temps de liaison. Lorsque
supporté par l'éditeur de liens, le plugin de l'éditeur de liens (voir -plugin-fuse-linker) passe
informations au compilateur sur les symboles utilisés et visibles de l'extérieur. Quand le
le plugin de l'éditeur de liens n'est pas disponible, -fwhole-programme doit être utilisé pour permettre au compilateur
faire ces hypothèses, ce qui conduit à des décisions d'optimisation plus agressives.
Quand -plugin-fuse-linker n'est pas activé alors, lorsqu'un fichier est compilé avec -flto,
le fichier objet généré est plus volumineux qu'un fichier objet ordinaire car il contient GIMPLE
bytecodes et le code final habituel (voir -ffat-lto-objets. Cela signifie que l'objet
les fichiers contenant des informations LTO peuvent être liés comme des fichiers objets normaux ; si -fno-lto est passé
à l'éditeur de liens, aucune optimisation interprocédurale n'est appliquée. Notez que lorsque
-fno-fat-lto-objets est activé, l'étape de compilation est plus rapide mais vous ne pouvez pas effectuer de
lien régulier, non-LTO sur eux.
De plus, les indicateurs d'optimisation utilisés pour compiler des fichiers individuels ne sont pas
nécessairement liés à ceux utilisés au moment de la liaison. Par exemple,
gcc -c -O0 -ffat-lto-objects -flto foo.c
gcc -c -O0 -ffat-lto-objects -flto bar.c
gcc -o monprog -O3 foo.o bar.o
Cela produit des fichiers objets individuels avec du code assembleur non optimisé, mais le
binaire résultant monprog est optimisé à -O3. Si, à la place, le binaire final est
généré avec -fno-lto, puis monprog n'est pas optimisé.
Lors de la production du binaire final, GCC applique uniquement des optimisations de temps de liaison à ceux
fichiers contenant du bytecode. Par conséquent, vous pouvez mélanger et faire correspondre des fichiers objets et
bibliothèques avec les bytecodes GIMPLE et le code objet final. GCC sélectionne automatiquement
quels fichiers optimiser en mode LTO et quels fichiers lier sans plus
traitement.
Il existe des drapeaux de génération de code conservés par GCC lors de la génération de bytecodes, comme
ils doivent être utilisés lors de l'étape de liaison finale. Généralement les options spécifiées à
au moment du lien remplacent ceux spécifiés au moment de la compilation.
Si vous ne spécifiez pas d'option de niveau d'optimisation -O au moment de la liaison alors GCC calcule
un basé sur les niveaux d'optimisation utilisés lors de la compilation des fichiers objets. Les
le niveau d'optimisation le plus élevé gagne ici.
Actuellement, les options suivantes et leur paramétrage sont extraits du premier fichier objet
qui l'a explicitement spécifié : -fPIC, -fpic, -fpie, -fcommun, -fexceptions,
-fnon-appel-exceptions, -fgnu-tm et tous les -m drapeaux cibles.
Certains indicateurs de changement d'ABI doivent correspondre à toutes les unités de compilation et essayer
remplacer cela au moment de la liaison avec une valeur en conflit est ignoré. Ceci comprend
des options telles que -freg-struct-retour et -fpcc-struct-retour.
D'autres options telles que -ffp-contrat, -fno-strict-débordement, -fwrapv, -fno-trapv or
-fno-strict-aliasing sont passés à l'étape de liaison et fusionnés de manière conservatrice
pour les unités de traduction en conflit. Spécifiquement -fno-strict-débordement, -fwrapv et
-fno-trapv avoir la priorité et par exemple -ffp-contrat=off a préséance sur
-ffp-contrat=rapide. Vous pouvez les remplacer au moment de la liaison.
Il est recommandé de compiler tous les fichiers participant à un même lien avec
les mêmes options et spécifiez également ces options au moment de la liaison.
Si LTO rencontre des objets avec une liaison C déclarée avec des types incompatibles dans des
unités de traduction à relier entre elles (comportement non défini selon ISO C99
6.2.7), un diagnostic non fatal peut être émis. Le comportement n'est toujours pas défini à l'exécution
temps. Des diagnostics similaires peuvent être posés pour d'autres langues.
Une autre caractéristique de LTO est qu'il est possible d'appliquer des optimisations interprocédurales
sur des fichiers écrits dans différentes langues :
gcc -c -flto foo.c
g++ -c -flto bar.cc
gfortran -c -flto baz.f90
g++ -o monprog -flto -O3 foo.o bar.o baz.o -lgfortran
Notez que le lien final est fait avec g ++ pour obtenir les bibliothèques d'exécution C++ et
-lgfortran est ajouté pour obtenir les bibliothèques d'exécution Fortran. En général, lors du mélange
langues en mode LTO, vous devez utiliser les mêmes options de commande de lien que lors du mixage
langues dans une compilation régulière (non LTO).
Si les fichiers objets contenant le bytecode GIMPLE sont stockés dans une archive de bibliothèque, dites
libfoo.a, il est possible de les extraire et de les utiliser dans un lien LTO si vous utilisez un
éditeur de liens avec prise en charge des plugins. Pour créer des bibliothèques statiques adaptées au LTO, utilisez gcc-ar
et gcc-ranlib au lieu de ar et ranlib; pour afficher les symboles des fichiers objets avec
bytecode GIMPLE, utilisez gcc-nm. Ces commandes nécessitent que ar, ranlib et nm sont considérés
compilé avec le support de plugin. Au moment de la liaison, utilisez le drapeau -plugin-fuse-linker à
s'assurer que la bibliothèque participe au processus d'optimisation du LTO :
gcc -o myprog -O2 -flto -fuse-linker-plugin ao bo -lfoo
Lorsque le plugin de l'éditeur de liens est activé, l'éditeur de liens extrait les fichiers GIMPLE nécessaires de
libfoo.a et les transmet au GCC en cours pour qu'ils fassent partie de l'agrégat
Image GIMPLE à optimiser.
Si vous n'utilisez pas d'éditeur de liens avec prise en charge des plugins et/ou n'activez pas l'éditeur de liens
plugin, puis les objets à l'intérieur libfoo.a sont extraits et liés comme d'habitude, mais ils
ne participez pas au processus d'optimisation LTO. Pour créer une bibliothèque statique
adapté à la fois à l'optimisation LTO et à la liaison habituelle, compilez ses fichiers objets avec
-flto -ffat-lto-objets.
Les optimisations de temps de liaison ne nécessitent pas la présence de tout le programme pour fonctionner.
Si le programme ne nécessite pas l'exportation de symboles, il est possible de combiner
-flto et -fwhole-programme pour permettre aux optimiseurs interprocéduraux d'utiliser plus
hypothèses agressives qui peuvent conduire à de meilleures opportunités d'optimisation. Utilisation de
-fwhole-programme n'est pas nécessaire lorsque le plugin de l'éditeur de liens est actif (voir -plugin-fuse-linker).
L'implémentation actuelle de LTO n'essaie pas de générer un bytecode qui soit
portable entre différents types d'hôtes. Les fichiers de bytecode sont versionnés et il
est une vérification de version stricte, donc les fichiers de bytecode générés dans une version de GCC ne
fonctionner avec une version plus ancienne ou plus récente de GCC.
L'optimisation du temps de liaison ne fonctionne pas bien avec la génération d'informations de débogage.
La combinaison -flto avec -g est actuellement expérimental et devrait produire des résultats inattendus
résultats.
Si vous spécifiez l'optionnel n, l'optimisation et la génération de code effectuées au moment du lien
est exécuté en parallèle à l'aide n travaux parallèles en utilisant un a prendre une .
La variable d'environnement FAITES peut être utilisé pour remplacer le programme utilisé. Le défaut
la valeur pour n est 1.
Vous pouvez également spécifier -flto=jobservateur utiliser le mode serveur de travail de GNU make pour déterminer
le nombre d'emplois parallèles. Ceci est utile lorsque le Makefile appelant GCC est déjà
s'exécutant en parallèle. Vous devez ajouter un + à la recette de commande dans le parent
Makefile pour que cela fonctionne. Cette option ne fonctionne probablement que si FAITES est GNU make.
-flto-partition =alg
Spécifiez l'algorithme de partitionnement utilisé par l'optimiseur de temps de liaison. La valeur est
non plus 1to1 pour spécifier un partitionnement reflétant les fichiers sources originaux ou balanced
pour spécifier le partitionnement en morceaux de taille égale (dans la mesure du possible) ou max à créer
nouvelle partition pour chaque symbole dans la mesure du possible. En précisant aucun comme algorithme
désactive complètement le partitionnement et le streaming. La valeur par défaut est balanced. Alors que
1to1 peut être utilisé comme solution de contournement pour divers problèmes de commande de code, le max
le partitionnement est destiné à des tests internes uniquement. La valeur UN précise que
exactement une partition doit être utilisée tandis que la valeur aucun contourne le partitionnement et
exécute l'étape d'optimisation du temps de liaison directement à partir de la phase WPA.
-flto-odr-type-fusion
Activer le streaming de noms de types mutilés de types C++ et leur unification à
temps de liaison. Cela augmente la taille des fichiers objets LTO, mais active les diagnostics sur One
Définition Violations des règles.
-flto-niveau-de-compression=n
Cette option spécifie le niveau de compression utilisé pour le langage intermédiaire écrit
aux fichiers objets LTO, et n'a de sens qu'en conjonction avec le mode LTO (-flto).
Les valeurs valides vont de 0 (pas de compression) à 9 (compression maximale). Valeurs en dehors de cela
sont limités à 0 ou à 9. Si l'option n'est pas donnée, une valeur équilibrée par défaut
le paramètre de compression est utilisé.
-flto-rapport
Imprime un rapport avec des détails internes sur le fonctionnement de l'optimiseur de temps de liaison. Les
le contenu de ce rapport varie d'une version à l'autre. Il est censé être utile à GCC
développeurs lors du traitement des fichiers objets en mode LTO (via -flto).
Désactivé par défaut
-flto-rapport-wpa
J'aime -flto-rapport, mais n'imprime que pour la phase WPA de l'optimisation du temps de liaison.
-plugin-fuse-linker
Permet l'utilisation d'un plugin d'éditeur de liens lors de l'optimisation du temps de liaison. Cette option repose
sur le support des plugins dans l'éditeur de liens, qui est disponible en gold ou en GNU ld 2.21 ou
plus récent.
Cette option permet l'extraction des fichiers objets avec le bytecode GIMPLE hors de la bibliothèque
les archives. Cela améliore la qualité de l'optimisation en exposant plus de code au lien-
optimiseur de temps. Ces informations spécifient quels symboles sont accessibles de l'extérieur
(par objet non LTO ou lors d'une liaison dynamique). Améliorations de la qualité du code résultantes sur
les binaires (et les bibliothèques partagées qui utilisent la visibilité cachée) sont similaires à
-fwhole-programme. Voir -flto pour une description de l'effet de ce drapeau et comment
utilise le.
Cette option est activée par défaut lorsque la prise en charge de LTO dans GCC est activée et que GCC a été
configuré pour être utilisé avec un éditeur de liens prenant en charge les plugins (GNU ld 2.21 ou plus récent ou gold).
-ffat-lto-objets
Les objets Fat LTO sont des fichiers objets qui contiennent à la fois le langage intermédiaire et le
code objet. Cela les rend utilisables à la fois pour la liaison LTO et la liaison normale. Cette
l'option n'est effective que lors de la compilation avec -flto et est ignoré au moment de la liaison.
-fno-fat-lto-objets améliore le temps de compilation par rapport au LTO simple, mais nécessite le
chaîne d'outils complète pour être au courant de LTO. Il nécessite un éditeur de liens avec prise en charge du plug-in de l'éditeur de liens
pour les fonctionnalités de base. En outre, nm, ar et ranlib besoin de prendre en charge l'éditeur de liens
plugins pour permettre un environnement de construction complet (capable de construire des
bibliothèques, etc.). GCC fournit le gcc-ar, gcc-nm, gcc-ranlib emballages pour passer le
bonnes options à ces outils. Avec les makefiles LTO non gras doivent être modifiés pour être utilisés
Eux.
La valeur par défaut est -fno-fat-lto-objets sur les cibles avec prise en charge du plug-in de l'éditeur de liens.
-fcompare-elim
Après la répartition des instructions d'allocation de registre et d'allocation de post-enregistrement, identifiez
instructions arithmétiques qui calculent des indicateurs de processeur similaires à une opération de comparaison
sur la base de cette arithmétique. Si possible, éliminez l'opération de comparaison explicite.
Ce laissez-passer s'applique uniquement à certaines cibles qui ne peuvent pas représenter explicitement le
opération de comparaison avant la fin de l'allocation des registres.
Activé aux niveaux -O, -O2, -O3, -Tu.
-fcprop-registres
Après le fractionnement des instructions d'allocation de registre et d'allocation de post-enregistrement, effectuez
une passe de propagation de copie pour essayer de réduire les dépendances de planification et occasionnellement
éliminer la copie.
Activé aux niveaux -O, -O2, -O3, -Tu.
-fcorrection-de-profil
Les profils collectés à l'aide d'un binaire instrumenté pour les programmes multithreads peuvent être
incohérent en raison de mises à jour de compteur manquées. Lorsque cette option est spécifiée, GCC utilise
heuristiques pour corriger ou aplanir ces incohérences. Par défaut, GCC émet un
message d'erreur lorsqu'un profil incohérent est détecté.
-fprofile-dir=chemin
Définissez le répertoire dans lequel rechercher les fichiers de données de profil sur chemin. Cette option
affecte uniquement les données de profil générées par -fprofile-générer, -ftest-couverture,
-fprofile-arcs et utilisé par -fprofil-utilisation et -fbranche-probabilités et ses apparentés
option. Les chemins absolus et relatifs peuvent être utilisés. Par défaut, GCC utilise le
répertoire courant en tant que chemin, ainsi le fichier de données de profil apparaît dans le même répertoire que
le fichier objet.
-fprofile-générer
-fprofile-generate=chemin
Activer les options généralement utilisées pour instrumenter l'application afin de produire un profil utile
pour une recompilation ultérieure avec une optimisation basée sur les commentaires de profil. Tu dois utiliser
-fprofile-générer à la fois lors de la compilation et lors de la liaison de votre programme.
Les options suivantes sont activées : -fprofile-arcs, -fprofile-valeurs, -fvpt.
If chemin est spécifié, GCC examine le chemin pour trouver les fichiers de données de retour de profil.
See -fprofile-dir.
-fprofil-utilisation
-fprofile-use=chemin
Activez les optimisations dirigées par les commentaires de profil et les optimisations suivantes qui
ne sont généralement rentables qu'avec les commentaires de profil disponibles : -fbranche-probabilités,
-fvpt, -funroll-boucles, -fpeel-boucles, -ftraceur, -ftree-vectoriser et boucle libre-
distribuer-modèles.
Par défaut, GCC émet un message d'erreur si les profils de retour ne correspondent pas aux
code source. Cette erreur peut être transformée en avertissement en utilisant -Wcouverture-inadéquation.
Notez que cela peut entraîner un code mal optimisé.
If chemin est spécifié, GCC examine le chemin pour trouver les fichiers de données de retour de profil.
See -fprofile-dir.
-fauto-profil
-fauto-profil=chemin
Activer les optimisations basées sur l'échantillonnage et les optimisations suivantes
qui ne sont généralement rentables qu'avec des retours de profil disponibles :
-fbranche-probabilités, -fvpt, -funroll-boucles, -fpeel-boucles, -ftraceur,
-ftree-vectoriser, -finline-fonctions, -fipa-cp, -fipa-cp-clone,
-frrédicatif, -funswitch-boucles, -fgcse-après-rechargement et
-ftree-loop-distribute-patterns.
chemin est le nom d'un fichier contenant les informations de profil AutoFDO. S'il est omis, il
Par défaut fbdata.afdo dans le répertoire courant.
La production d'un fichier de données de profil AutoFDO nécessite l'exécution de votre programme avec le Perf
sur un système cible GNU/Linux pris en charge. Pour plus d'informations, voir
<https://perf.wiki.kernel.org/>.
Par exemple
enregistrement perf -e br_inst_retired:near_taken -b -o perf.data \
-- votre_programme
Ensuite, utilisez le créer_gcov outil pour convertir les données de profil brutes dans un format qui peut être
utilisé par GCC. Vous devez également fournir le binaire non dépouillé de votre programme à ce
outil. Voirhttps://github.com/google/autofdo>.
Par exemple
create_gcov --binary=votre_programme.unstripped --profile=perf.data \
--gcov=profil.afdo
Les options suivantes contrôlent le comportement du compilateur concernant l'arithmétique à virgule flottante.
Ces options font le compromis entre vitesse et exactitude. Tous doivent être spécifiquement activés.
-ffloat-store
Ne stockez pas de variables à virgule flottante dans des registres et inhibez d'autres options qui
peut changer si une valeur à virgule flottante est extraite d'un registre ou d'une mémoire.
Cette option évite un excès de précision indésirable sur des machines telles que le 68000 où
les registres flottants (du 68881) gardent plus de précision qu'un "double" est supposé
pour avoir. De même pour l'architecture x86. Pour la plupart des programmes, l'excès de précision
ne fait que du bien, mais quelques programmes s'appuient sur la définition précise de l'IEEE flottant
point. Utilisation -ffloat-store pour de tels programmes, après les avoir modifiés pour stocker tous
calculs intermédiaires pertinents en variables.
-fexcès-précision=Catégorie
Cette option permet un contrôle supplémentaire sur l'excès de précision sur les machines où le flottement-
les registres ponctuels ont plus de précision que les types IEEE "float" et "double" et le
le processeur ne prend pas en charge les opérations d'arrondi à ces types. Par défaut,
-fexcess-precision=rapide est en vigueur ; cela signifie que les opérations sont effectuées dans
la précision des registres et qu'elle est imprévisible lors de l'arrondi aux types
spécifié dans le code source a lieu. Lors de la compilation C, si
-fexcess-precision=standard est spécifié alors l'excès de précision suit les règles
spécifié dans l'ISO C99 ; en particulier, les conversions et les affectations entraînent des valeurs
arrondis à leurs types sémantiques (alors que -ffloat-store n'affecte que les affectations).
Cette option est activée par défaut pour C si une option de conformité stricte telle que
-std=c99 est utilisé.
-fexcess-precision=standard n'est pas implémenté pour les langages autres que C, et n'a pas
effet si -funsafe-math-optimisations or -ffast-mathématiques est spécifié. Sur le x86, il
n'a pas non plus d'effet si -mfpmath=sse or -mfpmath=sse+387 est spécifié; dans l'ancien
cas, la sémantique IEEE s'applique sans excès de précision, et dans ce dernier cas, l'arrondi est
imprévisible.
-ffast-mathématiques
Définit les options -fno-math-errno, -funsafe-math-optimisations, -ffinite-mathématiques-seulement,
-fno-arrondir-math, -fno-signalisation-nans et -fcx-gamme-limitée.
Cette option provoque la définition de la macro de préprocesseur "__FAST_MATH__".
Cette option n'est activée par aucun -O option en plus -Ofast car cela peut entraîner
sortie incorrecte pour les programmes qui dépendent d'une implémentation exacte de IEEE ou ISO
règles/spécifications pour les fonctions mathématiques. Il peut, cependant, produire un code plus rapide pour
programmes qui ne nécessitent pas les garanties de ces spécifications.
-fno-math-errno
Ne définissez pas "errno" après avoir appelé des fonctions mathématiques exécutées avec un seul
instruction, par exemple, "sqrt". Un programme qui s'appuie sur les exceptions IEEE pour les erreurs mathématiques
la gestion peut vouloir utiliser ce drapeau pour la vitesse tout en maintenant l'arithmétique IEEE
compatibilité.
Cette option n'est activée par aucun -O option car cela peut entraîner une sortie incorrecte
pour les programmes qui dépendent d'une implémentation exacte de IEEE ou ISO
règles/spécifications pour les fonctions mathématiques. Il peut, cependant, produire un code plus rapide pour
programmes qui ne nécessitent pas les garanties de ces spécifications.
La valeur par défaut est -fmath-errno.
Sur les systèmes Darwin, la bibliothèque mathématique ne définit jamais "errno". Il n'y a donc aucune raison
pour le compilateur d'envisager la possibilité que cela puisse, et -fno-math-errno est le
défaut.
-funsafe-math-optimisations
Autoriser les optimisations pour l'arithmétique à virgule flottante qui (a) supposent que les arguments et
les résultats sont valides et (b) peuvent enfreindre les normes IEEE ou ANSI. Lorsqu'il est utilisé au moment de la liaison,
il peut inclure des bibliothèques ou des fichiers de démarrage qui modifient le mot de contrôle FPU par défaut ou
d'autres optimisations similaires.
Cette option n'est activée par aucun -O option car cela peut entraîner une sortie incorrecte
pour les programmes qui dépendent d'une implémentation exacte de IEEE ou ISO
règles/spécifications pour les fonctions mathématiques. Il peut, cependant, produire un code plus rapide pour
programmes qui ne nécessitent pas les garanties de ces spécifications. Permet
-fno-signé-zéros, -fno-piégeage-maths, -fassociatif-maths et -freciprocal-maths.
La valeur par défaut est -fno-unsafe-math-optimisations.
-fassociatif-maths
Autoriser la réassociation d'opérandes dans une série d'opérations à virgule flottante. Cette
viole la norme de langage ISO C et C++ en modifiant éventuellement le résultat du calcul.
REMARQUE : la réorganisation peut changer le signe de zéro ainsi qu'ignorer les NaN et inhiber ou
créer un débordement ou un débordement (et ne peut donc pas être utilisé sur du code qui repose sur l'arrondi
comportement comme "(x + 2**52) - 2**52". Peut également réorganiser les comparaisons à virgule flottante et
ne peut donc pas être utilisé lorsque des comparaisons ordonnées sont requises. Cette option nécessite que
tous les deux -fno-signé-zéros et -fno-piégeage-maths être en vigueur. De plus, cela ne fait pas
beaucoup de sens avec -recherche-maths. Pour Fortran, l'option est automatiquement activée lorsque
tous les deux -fno-signé-zéros et -fno-piégeage-maths sont en vigueur.
La valeur par défaut est -fno-associatif-maths.
-freciprocal-maths
Autoriser l'inverse d'une valeur à être utilisé au lieu de diviser par la valeur si cela
permet des optimisations. Par exemple "x / y" peut être remplacé par "x * (1/y)", qui est
utile si "(1/y)" est soumis à une élimination de sous-expression commune. Notez que ce
perd en précision et augmente le nombre de flops opérant sur la valeur.
La valeur par défaut est -fno-réciproque-maths.
-ffinite-mathématiques-seulement
Autoriser les optimisations pour l'arithmétique à virgule flottante qui supposent que les arguments et
les résultats ne sont pas des NaNs ou des +-Infs.
Cette option n'est activée par aucun -O option car cela peut entraîner une sortie incorrecte
pour les programmes qui dépendent d'une implémentation exacte de IEEE ou ISO
règles/spécifications pour les fonctions mathématiques. Il peut, cependant, produire un code plus rapide pour
programmes qui ne nécessitent pas les garanties de ces spécifications.
La valeur par défaut est -fno-fini-mathématiques-seulement.
-fno-signé-zéros
Autoriser les optimisations pour l'arithmétique à virgule flottante qui ignorent la signature de zéro.
L'arithmétique IEEE spécifie le comportement des valeurs distinctes +0.0 et -0.0, qui
interdit la simplification d'expressions telles que x+0.0 ou 0.0*x (même avec
-ffinite-mathématiques-seulement). Cette option implique que le signe d'un résultat nul n'est pas
important.
La valeur par défaut est -fsigned-zéros.
-fno-piégeage-maths
Compiler le code en supposant que les opérations à virgule flottante ne peuvent pas générer de visibilité par l'utilisateur
pièges. Ces pièges incluent la division par zéro, le débordement, le débordement, le résultat inexact et
opération invalide. Cette option nécessite que -fno-signalisation-nans être en vigueur.
La définition de cette option peut permettre un code plus rapide si l'on s'appuie sur l'arithmétique IEEE "non-stop",
par exemple.
Cette option ne doit jamais être activée par aucun -O option car cela peut entraîner
sortie incorrecte pour les programmes qui dépendent d'une implémentation exacte de IEEE ou ISO
règles/spécifications pour les fonctions mathématiques.
La valeur par défaut est -ftrapping-maths.
-recherche-maths
Désactiver les transformations et les optimisations qui supposent l'arrondi à virgule flottante par défaut
comportement. Il s'agit d'un arrondi à zéro pour toutes les conversions de virgule flottante en nombre entier, et
arrondir au plus près pour toutes les autres troncatures arithmétiques. Cette option devrait être
spécifié pour les programmes qui modifient le mode d'arrondi FP de manière dynamique, ou qui peuvent être
exécuté avec un mode d'arrondi différent de celui par défaut. Cette option désactive le pliage constant de
expressions à virgule flottante au moment de la compilation (qui peuvent être affectées par le mode d'arrondi)
et les transformations arithmétiques qui ne sont pas sûres en présence de
modes d'arrondi.
La valeur par défaut est -fno-arrondir-math.
Cette option est expérimentale et ne garantit actuellement pas de désactiver tous les GCC
optimisations affectées par le mode d'arrondi. Les futures versions de GCC peuvent fournir
contrôle plus fin de ce paramètre en utilisant le pragma "FENV_ACCESS" de C99. Cette ligne de commande
sera utilisée pour spécifier l'état par défaut de "FENV_ACCESS".
-fsignaling-nans
Compilez le code en supposant que les NaN de signalisation IEEE peuvent générer des pièges visibles par l'utilisateur pendant
opérations à virgule flottante. La définition de cette option désactive les optimisations qui peuvent changer
le nombre d'exceptions visibles avec les NaN de signalisation. Cette option implique
-ftrapping-maths.
Cette option provoque la définition de la macro de préprocesseur "__SUPPORT_SNAN__".
La valeur par défaut est -fno-signalisation-nans.
Cette option est expérimentale et ne garantit actuellement pas de désactiver tous les GCC
optimisations qui affectent le comportement de signalisation NaN.
-fconstante-single-précision
Traiter les constantes à virgule flottante comme une simple précision au lieu de les convertir implicitement
les constantes en double précision.
-fcx-gamme-limitée
Lorsqu'elle est activée, cette option indique qu'une étape de réduction de plage n'est pas nécessaire lorsque
effectuer une division complexe. De plus, il n'est pas possible de vérifier si le résultat d'un
la multiplication ou la division complexe est "NaN + I*NaN", avec une tentative de sauver le
situation dans ce cas. La valeur par défaut est -fno-cx-gamme-limitée, mais est activé par
-ffast-mathématiques.
Cette option contrôle le paramétrage par défaut du pragma ISO C99 "CX_LIMITED_RANGE".
Néanmoins, l'option s'applique à toutes les langues.
-fcx-fortran-règles
La multiplication et la division complexes suivent les règles Fortran. La réduction de la portée se fait comme
partie d'une division complexe, mais il n'est pas possible de vérifier si le résultat d'une division complexe
la multiplication ou la division est "NaN + I*NaN", avec une tentative de sauver la situation
dans ce cas.
La valeur par défaut est -fno-cx-fortran-règles.
Les options suivantes contrôlent les optimisations qui peuvent améliorer les performances, mais ne sont pas
activé par n'importe quel -O option. Cette section comprend des options expérimentales qui peuvent produire
code cassé.
-fbranche-probabilités
Après avoir exécuté un programme compilé avec -fprofile-arcs, vous pouvez le compiler une seconde fois
en utilisant -fbranche-probabilités, pour améliorer les optimisations en fonction du nombre de fois
chaque branche a été prise. Lorsqu'un programme compilé avec -fprofile-arcs sorties, il enregistre
l'exécution de l'arc compte dans un fichier appelé nomsource.gcda pour chaque fichier source. Les
les informations contenues dans ce fichier de données sont très dépendantes de la structure du fichier généré
code, vous devez donc utiliser le même code source et les mêmes options d'optimisation pour les deux
compilations.
Avec -fbranche-probabilités, GCC met un REG_BR_PROB note sur chaque JUMP_INSN et
APPEL_INSN. Ceux-ci peuvent être utilisés pour améliorer l'optimisation. Actuellement, ils ne sont utilisés que
en un seul endroit : dans reorg.c, au lieu de deviner quel chemin une branche est le plus susceptible d'emprunter
prendre la REG_BR_PROB les valeurs sont utilisées pour déterminer exactement quel chemin est pris plus
souvent.
-fprofile-valeurs
Si combiné avec -fprofile-arcs, il ajoute du code pour que certaines données sur les valeurs de
expressions dans le programme sont rassemblées.
Avec -fbranche-probabilités, il relit les données recueillies à partir des valeurs de profilage de
expressions à utiliser dans les optimisations.
Activé avec -fprofile-générer et -fprofil-utilisation.
-fprofile-réorganiser-fonctions
La réorganisation des fonctions basée sur l'instrumentation du profil collecte la première fois d'exécution
d'une fonction et classe ces fonctions dans l'ordre croissant.
Activé avec -fprofil-utilisation.
-fvpt
Si combiné avec -fprofile-arcs, cette option demande au compilateur d'ajouter du code à
recueillir des informations sur les valeurs des expressions.
Avec -fbranche-probabilités, il relit les données recueillies et effectue effectivement le
optimisations basées sur eux. Actuellement, les optimisations incluent la spécialisation de
opérations de division en utilisant la connaissance de la valeur du dénominateur.
-frename-registres
Tenter d'éviter les fausses dépendances dans le code planifié en utilisant les registres laissés
après l'attribution du registre. Cette optimisation profite le plus aux processeurs avec beaucoup
de registres. Selon le format des informations de débogage adopté par la cible,
cependant, cela peut rendre le débogage impossible, car les variables ne restent plus dans un "home
S'inscrire".
Activé par défaut avec -funroll-boucles et -fpeel-boucles.
-fschedule-fusion
Effectue un passage dépendant de la cible sur le flux d'instructions pour planifier les instructions
du même type ensemble car la machine cible peut les exécuter plus efficacement s'ils
sont adjacents les uns aux autres dans le flux d'instructions.
Activé aux niveaux -O2, -O3, -Tu.
-ftraceur
Effectuez une duplication de la queue pour agrandir la taille du superbloc. Cette transformation simplifie
le flux de contrôle de la fonction permettant à d'autres optimisations de faire un meilleur travail.
Activé avec -fprofil-utilisation.
-funroll-boucles
Dérouler des boucles dont le nombre d'itérations peut être déterminé au moment de la compilation ou lors de
entrée dans la boucle. -funroll-boucles implique -frun-cse-après-boucle, -fweb et
-frename-registres. Il active également le pelage complet de la boucle (c'est-à-dire l'élimination complète de
boucles avec un petit nombre constant d'itérations). Cette option agrandit le code et
peut ou non le faire fonctionner plus rapidement.
Activé avec -fprofil-utilisation.
-funroll-toutes-les-boucles
Déroulez toutes les boucles, même si leur nombre d'itérations est incertain lorsque la boucle est
entré. Cela ralentit généralement l'exécution des programmes. -funroll-toutes-les-boucles implique le
mêmes options que -funroll-boucles.
-fpeel-boucles
Pele les boucles pour lesquelles il y a suffisamment d'informations pour qu'elles ne roulent pas beaucoup (de
commentaires de profil). Il active également le pelage complet de la boucle (c'est-à-dire l'élimination complète de
boucles avec un petit nombre constant d'itérations).
Activé avec -fprofil-utilisation.
-fmove-boucle-invariants
Active la passe de mouvement invariant de boucle dans l'optimiseur de boucle RTL. Activé au niveau
-O1
-funswitch-boucles
Déplacer les branches avec des conditions invariantes de boucle hors de la boucle, avec des doublons du
boucle sur les deux branches (modifiée en fonction du résultat de la condition).
-ffonction-sections
-fdata-sections
Placez chaque fonction ou élément de données dans sa propre section dans le fichier de sortie si la cible
prend en charge les sections arbitraires. Le nom de la fonction ou le nom de la donnée
détermine le nom de la section dans le fichier de sortie.
Utilisez ces options sur les systèmes où l'éditeur de liens peut effectuer des optimisations pour améliorer
localité de référence dans l'espace d'instruction. La plupart des systèmes utilisant l'objet ELF
format et les processeurs SPARC exécutant Solaris 2 ont des linkers avec de telles optimisations.
AIX peut avoir ces optimisations à l'avenir.
N'utilisez ces options que lorsqu'il y a des avantages significatifs à le faire. Lorsque vous
spécifiez ces options, l'assembleur et l'éditeur de liens créent un objet plus grand et exécutable
fichiers et sont également plus lents. Vous ne pouvez pas utiliser gprof sur tous les systèmes si vous spécifiez ceci
et vous pouvez rencontrer des problèmes de débogage si vous spécifiez à la fois cette option et
-g.
-fbranch-target-load-optimize
Effectuez l'optimisation de la charge du registre cible de la branche avant le threading du prologue/épilogue.
L'utilisation de registres cibles ne peut généralement être exposée que pendant le rechargement, soulevant ainsi
charge hors des boucles et la planification inter-blocs nécessite une optimisation distincte
passer.
-fbranch-target-load-optimize2
Effectuez l'optimisation de la charge du registre cible de la branche après le threading prologue / épilogue.
-fbtr-bb-exclusif
Lors de l'optimisation de la charge du registre de la cible de branche, ne réutilisez pas la cible de branche
registres dans n'importe quel bloc de base.
-fstack-protecteur
Émettez du code supplémentaire pour vérifier les débordements de tampon, tels que les attaques par écrasement de pile. Cette
se fait en ajoutant une variable de garde aux fonctions avec des objets vulnérables. Cette
inclut des fonctions qui appellent "alloca", et des fonctions avec des tampons de plus de 8 octets.
Les gardes sont initialisées lorsqu'une fonction est saisie puis vérifiées lorsque le
la fonction sort. Si un contrôle de garde échoue, un message d'erreur est imprimé et le programme
sorties.
-fstack-protecteur-tout
J'aime -fstack-protecteur sauf que toutes les fonctions sont protégées.
-fstack-protecteur-fort
J'aime -fstack-protecteur mais inclut des fonctions supplémentaires à protéger --- celles
qui ont des définitions de tableaux locaux ou des références à des adresses de trames locales.
-fstack-protector-explicite
J'aime -fstack-protecteur mais ne protège que les fonctions qui ont le
attribut "stack_protect"
-fstdarg-opt
Optimiser le prologue des fonctions d'arguments variadiques par rapport à l'utilisation de celles-ci
arguments.
REMARQUE : dans Ubuntu 14.10 et les versions ultérieures, -fstack-protecteur-fort est activé par
par défaut pour C, C++, ObjC, ObjC++, si aucun des -fno-pile-protecteur, -nostdlib, ni
-fautoportant sont trouvés.
-fsection-ancres
Essayez de réduire le nombre de calculs d'adresses symboliques en utilisant une "ancre" partagée
symboles pour adresser les objets à proximité. Cette transformation peut aider à réduire le nombre
des entrées GOT et des accès GOT sur certaines cibles.
Par exemple, l'implémentation de la fonction suivante "foo":
statique int a, b, c;
int foo (vide) { retourne a + b + c; }
calcule généralement les adresses des trois variables, mais si vous le compilez avec
-fsection-ancres, il accède aux variables à partir d'un point d'ancrage commun à la place. Les
l'effet est similaire au pseudo-code suivant (qui n'est pas un C valide) :
int foo (vide)
{
registre entier *xr = &x;
renvoie xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
}
Toutes les cibles ne prennent pas en charge cette option.
--param prénom=Plus-value
À certains endroits, GCC utilise diverses constantes pour contrôler la quantité d'optimisation qui
est fait. Par exemple, GCC n'intègre pas les fonctions contenant plus d'un certain
nombre d'instructions. Vous pouvez contrôler certaines de ces constantes sur la ligne de commande
en utilisant l' --param option.
Les noms de paramètres spécifiques et la signification des valeurs sont liés au
internes du compilateur, et sont sujets à changement sans préavis à l'avenir
Communiqués.
Dans chaque cas, le Plus-value est un entier. Les choix autorisés pour prénom sont:
résultat-prévisible-de-branche
Lorsqu'il est prévu que la branche soit prise avec une probabilité inférieure à ce seuil
(en pourcentage), alors il est considéré comme bien prévisible. La valeur par défaut est 10.
max-crossjump-bords
Le nombre maximum de fronts entrants à prendre en compte pour les sauts croisés. L'algorithme
utilisé par -f saut en croix est O(N^2) dans le nombre d'arêtes entrant dans chaque bloc.
Des valeurs croissantes signifient une optimisation plus agressive, ce qui rend le temps de compilation
augmenter avec probablement une petite amélioration de la taille de l'exécutable.
min-crossjump-insns
Le nombre minimum d'instructions qui doivent être mises en correspondance à la fin de deux blocs
avant d'effectuer un saut en croix sur eux. Cette valeur est ignorée dans le cas
où toutes les instructions du bloc à partir desquelles le saut croisé est effectué sont mises en correspondance. Les
la valeur par défaut est 5.
max-grow-copy-bb-insns
Le facteur d'expansion de taille de code maximum lors de la copie de blocs de base au lieu de
sauter. L'expansion est relative à une instruction de saut. La valeur par défaut est
8.
max-goto-duplication-insns
Le nombre maximum d'instructions à dupliquer dans un bloc qui saute à un
goto calculé. Pour éviter le comportement O(N^2) dans un certain nombre de passes, les facteurs GCC
gotos calculés au début du processus de compilation, et les défactorise aussi tard que
possible. Seuls les sauts calculés à la fin d'un bloc de base avec pas plus de max-
goto-duplication-insns ne sont pas factorisés. La valeur par défaut est 8.
max-delay-slot-insn-recherche
Le nombre maximum d'instructions à prendre en compte lors de la recherche d'une instruction à
remplir un créneau de délai. Si plus que ce nombre arbitraire d'instructions sont
recherché, les gains de temps liés au remplissage du créneau de délai sont minimes, alors arrêtez
recherche. Des valeurs croissantes signifient une optimisation plus agressive, ce qui rend le
augmentation du temps de compilation avec probablement une petite amélioration du temps d'exécution.
max-delay-slot-live-recherche
Lorsque vous essayez de remplir des créneaux de retard, le nombre maximum d'instructions à prendre en compte
lors de la recherche d'un bloc avec des informations de registre en direct valides. Augmenter ce
valeur choisie arbitrairement signifie une optimisation plus agressive, augmentant la
temps de compilation. Ce paramètre doit être supprimé lorsque le code d'intervalle de retard est
réécrit pour maintenir le graphe de contrôle de flux.
mémoire-max-gcse
La quantité maximale approximative de mémoire pouvant être allouée pour effectuer
l'optimisation globale de l'élimination des sous-expressions communes. Si plus de mémoire que
spécifié est requis, l'optimisation n'est pas effectuée.
rapport-d'insertion-max-gcse
Si le rapport des insertions d'expression aux suppressions est supérieur à cette valeur pour
n'importe quelle expression, alors RTL PRE insère ou supprime l'expression et laisse ainsi
calculs partiellement redondants dans le flux d'instructions. La valeur par défaut est
20.
longueur-max-liste-en attente
Le nombre maximum de dépendances en attente que la planification autorise avant de vider le
état actuel et recommencer. De grandes fonctions avec peu de branches ou d'appels peuvent
créer des listes excessivement volumineuses qui consomment inutilement de la mémoire et des ressources.
max-modulo-backtrack-tentatives
Le nombre maximum de tentatives de retour en arrière que le planificateur doit effectuer lorsque modulo
planifier une boucle. Des valeurs plus élevées peuvent augmenter de façon exponentielle le temps de compilation.
max-inline-insns-single
Plusieurs paramètres contrôlent l'inliner d'arbre utilisé dans GCC. Ce nombre définit le
nombre maximum d'instructions (comptées dans la représentation interne de GCC) dans un
fonction unique que l'inliner d'arbre prend en compte pour l'inline. Cela n'affecte que
fonctions déclarées en ligne et méthodes implémentées dans une déclaration de classe (C++).
La valeur par défaut est 400.
max-inline-insns-auto
Lorsque vous utilisez -finline-fonctions (inclus dans -O3), beaucoup de fonctions qui
dans le cas contraire, ne pas être pris en compte pour l'inline par le compilateur sont étudiés. À
ces fonctions, une limite différente (plus restrictive) par rapport aux fonctions
déclaré en ligne peut être appliqué. La valeur par défaut est 40.
accélération minimale en ligne
Lorsque l'amélioration des performances estimée du temps d'exécution appelant + appelé dépasse ce
seuil (en pourcentage), la fonction peut être alignée quelle que soit la limite de
--param max-inline-insns-single et --param max-inline-insns-auto.
grand-fonction-insns
La limite spécifiant des fonctions vraiment volumineuses. Pour les fonctions supérieures à cette limite
après l'incorporation, l'incorporation est limitée par --param grand-fonction-croissance. Ce
Le paramètre est utile principalement pour éviter un temps de compilation extrême causé par des
algorithmes linéaires utilisés par le back-end. La valeur par défaut est 2700.
grand-fonction-croissance
Spécifie la croissance maximale d'une grande fonction causée par l'incorporation en pourcentages. Les
la valeur par défaut est 100, ce qui limite la croissance des fonctions importantes à 2.0 fois l'original
Taille.
auberges-grandes-unités
La limite spécifiant une grande unité de traduction. Croissance causée par l'enlignement des unités
supérieure à cette limite est limitée par --param croissance unitaire en ligne. Pour les petites unités
c'est peut-être trop serré. Par exemple, considérons une unité constituée de la fonction A
c'est en ligne et B qui appelle juste A trois fois. Si B est petit par rapport à A,
la croissance de l'unité est de 300\% et pourtant un tel inlining est très sain. Pour très grand
unités composées de petites fonctions inlineables, cependant, la croissance globale de l'unité
limite est nécessaire pour éviter une explosion exponentielle de la taille du code. Ainsi pour les plus petits
unités, la taille est augmentée à --param auberges-grandes-unités avant d'appliquer --param
croissance unitaire en ligne. La valeur par défaut est 10000.
croissance unitaire en ligne
Spécifie la croissance globale maximale de l'unité de compilation causée par l'incorporation. Les
la valeur par défaut est 20, ce qui limite la croissance des unités à 1.2 fois la taille d'origine. Froid
les fonctions (soit marquées à froid via un attribut soit par retour de profil) ne sont pas
pris en compte dans la taille de l'unité.
ipcp-unité-croissance
Spécifie la croissance globale maximale de l'unité de compilation causée par interprocédurale
propagation constante. La valeur par défaut est 10, ce qui limite la croissance des unités à 1.1
fois la taille d'origine.
cadre à grande pile
La limite spécifiant de grands cadres de pile. Lors de l'inline, l'algorithme essaie
de ne pas trop dépasser cette limite. La valeur par défaut est de 256 octets.
grand-stack-frame-croissance
Spécifie la croissance maximale des grandes images de pile causée par l'incorporation en pourcentages.
La valeur par défaut est 1000, ce qui limite la croissance des grandes trames de pile à 11 fois la
format original.
max-inline-insns-récursif
max-inline-insns-récursif-auto
Spécifie le nombre maximum d'instructions d'une copie hors ligne d'un auto-
La fonction inline récursive peut se développer en effectuant l'inline récursive.
--param max-inline-insns-récursif s'applique aux fonctions déclarées en ligne. Pour
fonctions non déclarées en ligne, la mise en ligne récursive se produit uniquement lorsque
-finline-fonctions (inclus dans -O3) est autorisé; --param max-inline-insns-
récursif-auto s'applique à la place. La valeur par défaut est 450.
max-inline-récursive-profondeur
max-inline-récursive-profondeur-auto
Spécifie la profondeur de récursivité maximale utilisée pour l'incorporation récursive.
--param max-inline-récursive-profondeur s'applique aux fonctions déclarées en ligne. Pour
fonctions non déclarées en ligne, la mise en ligne récursive se produit uniquement lorsque
-finline-fonctions (inclus dans -O3) est autorisé; --param max-inline-récursif-
profondeur-auto s'applique à la place. La valeur par défaut est 8.
min-inline-récursive-probabilité
L'incorporation récursive n'est rentable que pour la fonction ayant une récursivité profonde dans
moyenne et peut nuire à la fonction ayant peu de profondeur de récursivité en augmentant le
la taille du prologue ou la complexité du corps de la fonction à d'autres optimiseurs.
Lorsque les commentaires de profil sont disponibles (voir -fprofile-générer) la récursivité réelle
la profondeur peut être devinée à partir de la probabilité que la fonction réapparaisse via un appel donné
expression. Ce paramètre limite l'inline uniquement aux expressions d'appel dont
la probabilité dépasse le seuil donné (en pourcentage). La valeur par défaut est 10.
auberges-early-inlining
Spécifiez la croissance que l'inliner précoce peut faire. En effet, il augmente le montant
d'inlining pour le code ayant une grande pénalité d'abstraction. La valeur par défaut est 14.
max-early-inliner-itérations
Limite d'itérations du premier inliner. Cela limite essentiellement le nombre de
les appels indirects imbriqués que l'inliner précoce peut résoudre. Des chaînes plus profondes sont encore
géré par inlining tardif.
comdat-partage-probabilité
Probabilité (en pourcentage) que la fonction en ligne C++ avec visibilité comdat soit
partagé entre plusieurs unités de compilation. La valeur par défaut est 20.
profile-func-id-interne
Un paramètre pour contrôler s'il faut utiliser l'identifiant interne de la fonction dans la base de données de profil
chercher. Si la valeur est 0, le compilateur utilise un identifiant basé sur la fonction
nom de l'assembleur et nom de fichier, ce qui rend les anciennes données de profil plus tolérantes à la source
modifications telles que la réorganisation des fonctions, etc. La valeur par défaut est 0.
min-vect-loop-lié
Le nombre minimum d'itérations sous lequel les boucles ne sont pas vectorisées lorsque
-ftree-vectoriser est utilisé. Le nombre d'itérations après la vectorisation doit être
être supérieure à la valeur spécifiée par cette option pour permettre la vectorisation. Les
la valeur par défaut est 0.
rapport-distance-coût-gcse
Facteur d'échelle dans le calcul de la distance maximale par laquelle une expression peut être déplacée
Optimisations GCSE. Ceci n'est actuellement pris en charge que dans la passe de levage de code.
Plus le rapport est grand, plus le levage de code est agressif avec un simple
expressions, c'est-à-dire les expressions qui ont coûté moins de gcse-sans restriction-
sables moins coûteux. La spécification de 0 désactive le levage d'expressions simples. La valeur par défaut est
10.
gcse-coût-non restreint
Coût, approximativement mesuré comme le coût d'une seule instruction machine type, à
quelles optimisations GCSE ne limitent pas la distance qu'une expression peut parcourir.
Ceci n'est actuellement pris en charge que dans la passe de levage de code. Moins le coût,
le levage de code le plus agressif est. La spécification de 0 permet à toutes les expressions de
parcourir des distances illimitées. La valeur par défaut est 3.
max-levage-profondeur
La profondeur de recherche dans l'arbre dominant pour les expressions à hisser. Ceci est utilisé
pour éviter un comportement quadratique dans l'algorithme de levage. La valeur 0 ne limite pas
sur la recherche, mais peut ralentir la compilation de fonctions énormes. La valeur par défaut
est 30.
max-tail-merge-comparaisons
Le nombre maximum de billes similaires avec lesquelles comparer un bille. Ceci est utilisé pour éviter
comportement quadratique dans la fusion de la queue des arbres. La valeur par défaut est 10.
max-tail-merge-itérations
Le nombre maximal d'itérations de la passe sur la fonction. Ceci est utilisé pour
limiter le temps de compilation dans la fusion de queue d'arbre. La valeur par défaut est 2.
max-unrolled-insns
Le nombre maximum d'instructions qu'une boucle peut avoir à dérouler. Si une boucle
est déroulé, ce paramètre détermine également combien de fois le code de boucle est
déroulé.
max-moyenne-déroulée-insns
Le nombre maximum d'instructions biaisées par les probabilités de leur exécution qui
une boucle peut devoir être déroulée. Si une boucle est déroulée, ce paramètre aussi
détermine combien de fois le code de boucle est déroulé.
temps de déroulement maximum
Le nombre maximum de déroulements d'une même boucle.
max-peled-insns
Le nombre maximum d'instructions qu'une boucle peut devoir être épluchée. Si une boucle
est épluché, ce paramètre détermine également combien de fois le code de boucle est épluché.
temps de pelage maximum
Le nombre maximum de peelings d'une seule boucle.
max-peel-branches
Le nombre maximum de branches sur le chemin chaud à travers la séquence épluchée.
max-complètement-peeled-insns
Le nombre maximum d'insns d'une boucle complètement décollée.
max-complètement-peel-times
Le nombre maximum d'itérations d'une boucle pour convenir à un peeling complet.
max-complètement-peler-boucle-nid-profondeur
La profondeur maximale d'un nid de boucle adapté à un pelage complet.
max-unswitch-insns
Le nombre maximum d'insns d'une boucle non commutée.
niveau de déconnexion maximum
Le nombre maximum de branches non commutées dans une seule boucle.
cher
Le coût minimum d'une expression coûteuse dans le mouvement invariant de boucle.
iv-considérer-tous-les-candidats-liés
Limité sur le nombre de candidats pour les variables d'induction, en dessous duquel tous les candidats
sont considérés pour chaque utilisation dans les optimisations de variables d'induction. S'il y a
plus de candidats que cela, seuls les plus pertinents sont pris en compte pour éviter
complexité en temps quadratique.
iv-max-utilisations-considérées
Les optimisations des variables d'induction abandonnent les boucles qui contiennent plus d'induction
usages variables.
iv-toujours-élaguer-cand-set-bound
Si le nombre de candidats dans l'ensemble est inférieur à cette valeur, essayez toujours de
supprimez les iv inutiles de l'ensemble lors de l'ajout d'un nouveau.
scev-max-expr-taille
Lié à la taille des expressions utilisées dans l'analyseur d'évolutions scalaires. Grand
les expressions ralentissent l'analyseur.
scev-max-expr-complexité
Lié à la complexité des expressions dans l'analyseur d'évolutions scalaires.
Les expressions complexes ralentissent l'analyseur.
oméga-max-vars
Le nombre maximum de variables dans un système de contraintes Omega. La valeur par défaut
est 128.
oméga-max-geqs
Le nombre maximum d'inégalités dans un système de contraintes Omega. Le défaut
la valeur est 256.
oméga-max-eqs
Le nombre maximum d'égalités dans un système de contraintes Omega. La valeur par défaut
est 128.
oméga-max-wild-cards
Le nombre maximum de variables génériques que le solveur Omega est capable d'insérer.
La valeur par défaut est 18.
taille de la table de hachage oméga
La taille de la table de hachage dans le solveur Omega. La valeur par défaut est 550.
touches-omega-max
Le nombre maximal de clés utilisées par le solveur Omega. La valeur par défaut est 500.
omega-élimine-les-contraintes-redondants
Lorsqu'il est défini sur 1, utilisez des méthodes coûteuses pour éliminer toutes les contraintes redondantes. Les
la valeur par défaut est 0.
vect-max-version-pour-vérifications-d'alignement
Le nombre maximum de vérifications d'exécution pouvant être effectuées lors de l'exécution d'une boucle
versionnage pour l'alignement dans le vectoriseur.
vect-max-version-pour-les-vérifications-d'alias
Le nombre maximum de vérifications d'exécution pouvant être effectuées lors de l'exécution d'une boucle
versionnage pour alias dans le vectoriseur.
vect-max-peeling-pour-alignement
Le nombre maximum de boucles épluchées pour améliorer l'alignement d'accès pour le vectoriseur. Valeur
-1 signifie « pas de limite ».
max-itérations-à-suivre
Le nombre maximum d'itérations d'une boucle l'algorithme de force brute pour l'analyse
du nombre d'itérations de la boucle tente d'évaluer.
hot-bb-count-ws-permille
Un compte de profil de bloc de base est considéré comme chaud s'il contribue au
permillage (c'est-à-dire 0...1000) de l'ensemble de l'exécution profilée.
fraction de fréquence-bb-chaude
Sélectionnez la fraction du bloc d'entrée fréquence des exécutions du bloc de base dans
fonction donnée bloc de base doit être considérée comme chaude.
itérations-max-prédites
Le nombre maximum d'itérations de boucle que nous prédisons statiquement. Ceci est utile dans
cas où une fonction contient une seule boucle avec une limite connue et une autre boucle
avec une borne inconnue. Le nombre connu d'itérations est prédit correctement, tandis que
le nombre inconnu d'itérations est en moyenne d'environ 10. Cela signifie que la boucle
sans limites apparaît artificiellement froid par rapport à l'autre.
probabilité-prévoir-intégrée
Contrôle la probabilité que l'expression ait la valeur spécifiée. Cette
paramètre prend un pourcentage (c'est-à-dire 0 ... 100) comme entrée. La probabilité de défaut
de 90 est obtenu empiriquement.
aligner-seuil
Sélectionnez la fraction de la fréquence maximale d'exécutions d'un bloc de base dans un
fonction pour aligner le bloc de base.
itérations-de-boucle-align
Une boucle censée itérer au moins le nombre d'itérations sélectionné est alignée.
traceur-couverture-dynamique
traceur-couverture-dynamique-rétroaction
Cette valeur est utilisée pour limiter la formation de superblocs une fois que le pourcentage donné de
les instructions exécutées sont couvertes. Cela limite l'expansion inutile de la taille du code.
VOTRE traceur-couverture-dynamique-rétroaction le paramètre est utilisé uniquement lorsque le retour de profil
est disponible. Les profils réels (par opposition à ceux estimés statiquement) sont
beaucoup moins équilibré permettant au seuil d'être une valeur plus grande.
traceur-max-code-croissance
Arrêtez la duplication de la queue une fois que la croissance du code a atteint un pourcentage donné. C'est un
limite plutôt artificielle, car la plupart des doublons sont éliminés plus tard dans la croix
sautant, il peut donc être défini sur des valeurs beaucoup plus élevées que la croissance de code souhaitée.
traceur-min-branche-ratio
Arrêter la croissance inverse lorsque la probabilité inverse du meilleur avantage est inférieure à cela
seuil (en pourcentage).
traceur-min-branche-ratio
traceur-min-branche-ratio-feedback
Arrêtez la croissance vers l'avant si le meilleur avantage a une probabilité inférieure à ce seuil.
Similaire à traceur-couverture-dynamique deux valeurs sont présentes, une pour la compilation
pour les commentaires de profil et un pour la compilation sans. La valeur pour la compilation
avec la rétroaction de profil doit être plus conservatrice (plus élevée) afin de faire
traceur efficace.
max-cse-chemin-longueur
Le nombre maximal de blocs de base sur le chemin que le CSE considère. La valeur par défaut est 10.
max-cse-insns
Nombre maximal d'instructions traitées par le CSE avant le vidage. La valeur par défaut est
1000.
ggc-min-développer
GCC utilise un ramasse-miettes pour gérer sa propre allocation de mémoire. Ce paramètre
spécifie le pourcentage minimum par lequel le tas du ramasse-miettes doit être
autorisé à s'étendre entre les collections. Le réglage peut améliorer la vitesse de compilation ;
il n'a aucun effet sur la génération de code.
La valeur par défaut est 30 % + 70 % * (RAM/1 Go) avec une limite supérieure de 100 % lorsque RAM >= 1 Go.
Si "getrlimit" est disponible, la notion de "RAM" est la plus petite de la RAM réelle et
"RLIMIT_DATA" ou "RLIMIT_AS". Si GCC n'est pas en mesure de calculer la RAM sur un
plate-forme, la limite inférieure de 30 % est utilisée. Régler ce paramètre et ggc-min-
tas à zéro provoque une collecte complète à chaque occasion. C'est
extrêmement lent, mais peut être utile pour le débogage.
ggc-min-taille-tas
Taille minimale du tas du ramasse-miettes avant qu'il ne commence à s'embêter à collecter
des ordures. La première collecte se produit après l'expansion du tas de ggc-min-développer%
dans tous ggc-min-taille-tas. Encore une fois, le réglage peut améliorer la vitesse de compilation, et
n'a aucun effet sur la génération de code.
La valeur par défaut est la plus petite de RAM/8, RLIMIT_RSS ou une limite qui essaie de garantir
que RLIMIT_DATA ou RLIMIT_AS ne sont pas dépassés, mais avec une limite inférieure de 4096
(quatre mégaoctets) et une limite supérieure de 131072 (128 mégaoctets). Si GCC n'est pas en mesure
pour calculer la RAM sur une plate-forme particulière, la limite inférieure est utilisée. Définir ce
paramètre très grand désactive efficacement le ramasse-miettes. Définir ce
paramètre et ggc-min-développer à zéro provoque une collecte complète à chaque
occasion.
max-reload-search-insns
Le nombre maximum de rechargement d'instructions doit rechercher l'équivalent
S'inscrire. Des valeurs croissantes signifient une optimisation plus agressive, ce qui rend le
le temps de compilation augmente avec des performances probablement légèrement meilleures. Le défaut
la valeur est 100.
emplacements-mémoire max-cselib
Le nombre maximum d'emplacements mémoire que cselib doit prendre en compte.
Des valeurs croissantes signifient une optimisation plus agressive, ce qui rend le temps de compilation
augmenter avec des performances probablement légèrement meilleures. La valeur par défaut est 500.
réorganiser-blocs-dupliquer
réorganiser-blocs-dupliquer-rétroaction
Utilisé par la passe de réorganisation des blocs de base pour décider s'il faut utiliser l'inconditionnel
branche ou dupliquer le code sur sa destination. Le code est dupliqué lorsque son
la taille estimée est inférieure à cette valeur multipliée par la taille estimée de
saut inconditionnel dans les points chauds du programme.
VOTRE Réorganiser-Bloquer-Dupliquer-Commentaires le paramètre est utilisé uniquement lorsque le retour de profil
est disponible. Il peut être réglé sur des valeurs plus élevées que réorganiser-bloc-dupliquer depuis
les informations sur les points chauds sont plus précises.
max-sched-ready-insns
Le nombre maximum d'instructions prêtes à être émises que l'ordonnanceur doit
considérer à tout moment au cours de la première passe de programmation. Valeurs croissantes
signifie des recherches plus approfondies, ce qui augmente le temps de compilation avec probablement
peu d'avantage. La valeur par défaut est 100.
blocs de régions max-sched
Le nombre maximum de blocs dans une région à considérer pour l'interbloc
Planification. La valeur par défaut est 10.
blocs-régions-max-pipeline
Le nombre maximum de blocs dans une région à considérer pour le pipeline dans le
programmateur sélectif. La valeur par défaut est 15.
max-sched-region-insns
Le nombre maximum d'insns dans une région à considérer pour l'interbloc
Planification. La valeur par défaut est 100.
max-pipeline-région-insns
Le nombre maximum d'insns dans une région à considérer pour le pipeline dans le
programmateur sélectif. La valeur par défaut est 200.
min-spec-prob
La probabilité minimale (en pourcentage) d'atteindre un bloc source pour l'interbloc
programmation spéculative. La valeur par défaut est 40.
max-sched-étendre-régions-iters
Le nombre maximal d'itérations via CFG pour étendre les régions. Une valeur de 0 (le
par défaut) désactive les extensions de région.
délai-de-conflit-max-sched-insn
Le délai de conflit maximal pour qu'un insn soit pris en compte pour un mouvement spéculatif.
La valeur par défaut est 3.
sched-spec-prob-cutoff
La probabilité minimale de succès de la spéculation (en pourcentage), de sorte que la spéculation
des auberges sont programmées. La valeur par défaut est 40.
sched-spec-state-edge-prob-cutoff
La probabilité minimale qu'un front doit avoir pour que le planificateur enregistre son état
à travers elle. La valeur par défaut est 10.
sched-mem-vrai-dep-coût
Distance minimale (en cycles CPU) entre le stockage et la charge ciblant la même mémoire
Emplacements. La valeur par défaut est 1.
selsched-max-anticipation
La taille maximale de la fenêtre d'anticipation de la planification sélective. C'est une profondeur
de recherche des instructions disponibles. La valeur par défaut est 50.
selsched-max-sched-times
Le nombre maximum de fois qu'une instruction est programmée pendant la sélection
Planification. Il s'agit de la limite du nombre d'itérations par lesquelles le
l'instruction peut être pipeline. La valeur par défaut est 2.
selsched-max-insns-à-renommer
Le nombre maximum de meilleures instructions dans la liste prête qui sont prises en compte pour
renommer dans le planificateur sélectif. La valeur par défaut est 2.
sms-min-sc
La valeur minimale du nombre d'étapes générée par le planificateur de swing modulo. Les
la valeur par défaut est 2.
max-dernière-valeur-rtl
La taille maximale mesurée en nombre de RTL pouvant être enregistrés dans une expression
en combineur pour un pseudo-registre comme dernière valeur connue de ce registre. Les
la valeur par défaut est 10000.
max-combiner-insns
Le nombre maximum d'instructions que le combineur RTL essaie de combiner. Le défaut
la valeur est 2 à -Og et 4 sinon.
nombre entier-partage-limite
Les petites constantes entières peuvent utiliser une structure de données partagée, ce qui réduit la charge du compilateur
l'utilisation de la mémoire et l'augmentation de sa vitesse. Ceci définit la valeur maximale d'un partage
constante entière. La valeur par défaut est 256.
ssp-taille-du-tampon
La taille minimale des tampons (c'est-à-dire des tableaux) qui reçoivent une protection contre l'écrasement de la pile
quand -fstack-protection est utilisé.
Cette valeur par défaut avant Ubuntu 10.10 était "8". Actuellement, c'est "4", pour augmenter le
nombre de fonctions protégées par le protecteur de pile.
taille-min-pour-partage de pile
La taille minimale des variables participant au partage des emplacements de pile lorsqu'elles ne sont pas
optimisation. La valeur par défaut est 32.
max-jump-thread-duplication-stmts
Nombre maximum d'instructions autorisées dans un bloc qui doit être dupliqué lorsque
sauts d'enfilage.
max-fields-for-field-sensible
Nombre maximum de champs dans une structure traités de manière sensible au champ pendant
analyse de pointeur. La valeur par défaut est zéro pour -O0 et -O1et 100 pour -Tu, -O2 et
-O3.
prélecture-latence
Estimer le nombre moyen d'instructions exécutées avant la lecture anticipée
finitions. La distance prélue à l'avance est proportionnelle à cette constante.
L'augmentation de ce nombre peut également entraîner une diminution du nombre de flux préchargés (voir
prélectures-simultanées).
prélectures-simultanées
Nombre maximal de prélectures pouvant être exécutées en même temps.
l1-cache-ligne-taille
La taille de la ligne de cache dans le cache L1, en octets.
l1-taille-cache
La taille du cache L1, en kilo-octets.
l2-taille-cache
La taille du cache L2, en kilo-octets.
ratio min-insn-to-prefetch
Le rapport minimum entre le nombre d'instructions et le nombre de prélectures
pour activer la prélecture dans une boucle.
rapport prélecture-min-insn-to-mem
Le rapport minimum entre le nombre d'instructions et le nombre de mémoire
références pour activer la prélecture dans une boucle.
utiliser-types-canoniques
Si le compilateur doit utiliser le système de type "canonique". Par défaut, ce
doit toujours être égal à 1, ce qui utilise un mécanisme interne plus efficace pour comparer
types en C++ et Objective-C++. Cependant, si des bogues dans le système de type canonique sont
provoquant des échecs de compilation, définissez cette valeur sur 0 pour désactiver les types canoniques.
commutateur-conversion-max-branche-ratio
La conversion d'initialisation du commutateur refuse de créer des tableaux plus grands que
commutateur-conversion-max-branche-ratio fois le nombre de branches dans le commutateur.
longueur-antique-partielle-maximale
Longueur maximale de l'ensemble d'antic partiel calculé lors du partiel d'arbre
optimisation de l'élimination des redondances (-ftree-pré) lors de l'optimisation à -O3 et ci-dessus.
Pour certains types de code source, l'élimination améliorée de la redondance partielle
l'optimisation peut s'emballer, consommant toute la mémoire disponible sur l'hôte
machine. Ce paramètre fixe une limite sur la longueur des ensembles qui sont calculés,
ce qui empêche le comportement d'emballement. Définir une valeur de 0 pour ce paramètre
permet une longueur de jeu illimitée.
sccvn-max-taille-scc
Taille maximale d'un composant fortement connecté (SCC) pendant le traitement SCCVN. Si
cette limite est atteinte, le traitement SCCVN pour l'ensemble de la fonction n'est pas effectué et
les optimisations qui en dépendent sont désactivées. La taille SCC maximale par défaut est
10000.
sccvn-max-alias-requêtes-par-accès
Nombre maximal de requêtes alias-oracle que nous effectuons lors de la recherche de redondances
pour les charges et les magasins. Si cette limite est atteinte, la recherche est interrompue et le chargement ou
magasin n'est pas considéré comme redondant. Le nombre de requêtes est algorithmiquement
limité au nombre de magasins sur tous les chemins depuis la charge jusqu'à l'entrée de la fonction.
Le nombre maximum de requêtes par défaut est de 1000.
ira-max-boucles-num
IRA utilise l'allocation de registre régional par défaut. Si une fonction contient plus
boucles que le nombre donné par ce paramètre, seulement au plus le nombre donné de
les boucles les plus fréquemment exécutées forment des régions pour l'attribution des registres régionaux.
La valeur par défaut du paramètre est 100.
ira-max-conflict-table-size
Bien qu'IRA utilise un algorithme sophistiqué pour compresser la table des conflits, le
table peut encore nécessiter des quantités excessives de mémoire pour des fonctions énormes. Si la
la table des conflits pour une fonction peut être supérieure à la taille en Mo donnée par cette
paramètre, l'allocateur de registre utilise à la place un plus rapide, plus simple et plus bas-
algorithme de qualité qui ne nécessite pas de construire une table de conflits de pseudo-registres.
La valeur par défaut du paramètre est 2000.
ira-boucle-réservé-regs
L'IRA peut être utilisé pour évaluer une pression de registre plus précise dans les boucles pour les décisions
pour déplacer les invariants de boucle (voir -O3). Le nombre de registres disponibles réservés à
d'autres objectifs sont donnés par ce paramètre. La valeur par défaut du
paramètre est 2, qui est le nombre minimal de registres nécessaires par typique
instructions. Cette valeur est la meilleure trouvée à partir de nombreuses expériences.
lra-héritage-ebb-probabilité-seuil
LRA essaie de réutiliser les valeurs rechargées dans les registres des insns suivants. Cette
l'optimisation s'appelle l'héritage. EBB est utilisé comme région pour ce faire
optimisation. Le paramètre définit une probabilité de bord de chute minimale dans
pourcentage utilisé pour ajouter BB à l'héritage EBB dans LRA. La valeur par défaut du
le paramètre est 40. La valeur a été choisie parmi de nombreuses exécutions de SPEC2000 sur x86-64.
boucle-invariant-max-bbs-in-loop
Le mouvement invariant de boucle peut être très coûteux, à la fois en temps de compilation et en
quantité de mémoire nécessaire à la compilation, avec de très grandes boucles. Boucles avec plus
les blocs de base que ce paramètre n'auront pas d'optimisation de mouvement invariante en boucle
effectué sur eux. La valeur par défaut du paramètre est 1000 pour -O1 10000
pour -O2 et ci-dessus.
loop-max-datarefs-pour-datadeps
La création de dépendances de données est coûteuse pour les très grandes boucles. Ce paramètre
limite le nombre de références de données dans les boucles qui sont prises en compte pour les données
analyse de dépendance. Ces grandes boucles ne sont pas gérées par les optimisations utilisant
les dépendances de données en boucle. La valeur par défaut est 1000.
taille-vartrack-max
Définit un nombre maximal d'emplacements de table de hachage à utiliser pendant le flux de données de suivi variable
analyse de n'importe quelle fonction. Si cette limite est dépassée avec un suivi variable à
affectations activées, l'analyse pour cette fonction est retentée sans elle, après
en supprimant tous les insns de débogage de la fonction. Si la limite est dépassée même sans
debug insns, l'analyse de suivi var est complètement désactivée pour la fonction.
Mettre le paramètre à zéro le rend illimité.
max-vartrack-expr-profondeur
Définit un nombre maximum de niveaux de récursivité lors d'une tentative de mappage de noms de variables ou
déboguer les temporaires pour valoriser les expressions. Cela échange le temps de compilation pour plus
informations de débogage complètes. Si ce paramètre est défini trop bas, les expressions de valeur qui sont
disponible et pouvant être représenté dans les informations de débogage peut finir par ne pas être utilisé ;
un réglage plus élevé peut permettre au compilateur de trouver un débogage plus complexe
expressions, mais le temps de compilation et l'utilisation de la mémoire peuvent augmenter. La valeur par défaut est 12.
min-nondebug-insn-uid
Utilisez des uid commençant à ce paramètre pour les insns non de débogage. La plage en dessous de la
Le paramètre est réservé exclusivement aux insns de débogage créés par
-fvar-suivi-affectations, mais les insns de débogage peuvent obtenir des uid (qui ne se chevauchent pas) ci-dessus
si la plage réservée est épuisée.
facteur de croissance ipa-sra-ptr
IPA-SRA remplace un pointeur vers un agrégat par un ou plusieurs nouveaux paramètres uniquement
lorsque leur taille cumulée est inférieure ou égale à facteur de croissance ipa-sra-ptr fois la
taille du paramètre de pointeur d'origine.
sra-max-scalarisation-taille-Ospeed
sra-max-scalarisation-taille-Osize
Les deux passes de Réduction Scalaire des Agrégats (SRA et IPA-SRA) visent à remplacer
parties scalaires des agrégats avec utilisations de variables scalaires indépendantes. Ces
paramètres contrôlent la taille maximale, en unités de stockage, de l'agrégat qui est
considéré pour le remplacement lors de la compilation pour la vitesse (sra-max-scalarisation-taille-
Ovitesse) ou la taille (sra-max-scalarisation-taille-Osize) respectivement.
tm-max-agrégat-taille
Lors de la copie de variables locales de thread dans une transaction, ce paramètre
spécifie la taille en octets après laquelle les variables sont enregistrées avec la journalisation
par opposition aux paires de séquences de codes de sauvegarde/restauration. Cette option seulement
s'applique lors de l'utilisation -fgnu-tm.
graphite-max-nb-scop-params
Pour éviter les effets exponentiels dans les transformations de boucle Graphite, le nombre de
les paramètres d'une pièce de contrôle statique (SCoP) sont délimités. La valeur par défaut est 10
paramètres. Une variable dont la valeur est inconnue à la compilation et définie
en dehors d'une SCoP est un paramètre de la SCoP.
graphite-max-bbs-par-fonction
Pour éviter les effets exponentiels dans la détection des SCoPs, la taille des fonctions
analysé par Graphite est borné. La valeur par défaut est de 100 blocs de base.
boucle-bloc-tuile-taille
Blocage de boucle ou transformations d'extraction à ciel ouvert, activés avec -floop-bloc or
-floop-strip-mine, dépouiller chaque boucle du nid de boucles d'un nombre donné de
itérations. La longueur de la bande peut être modifiée à l'aide du boucle-bloc-tuile-taille
paramètre. La valeur par défaut est de 51 itérations.
loop-unroll-jam-taille
Spécifiez le facteur de déroulement pour le -floop-dérouler-et-bloquer option. La valeur par défaut
est 4.
loop-unroll-jam-profondeur
Précisez la dimension à dérouler (à partir de la boucle la plus intérieure) pour le
-floop-dérouler-et-bloquer. La valeur par défaut est 2.
ipa-cp-value-list-size
IPA-CP tente de suivre toutes les valeurs et tous les types possibles transmis à une fonction
paramètre afin de les propager et d'effectuer la dévirtualisation. valeur-ipa-cp-
liste-taille est le nombre maximum de valeurs et de types qu'il stocke par un formel
paramètre d'une fonction.
seuil-ipa-cp-eval
IPA-CP calcule son propre score d'heuristique de rentabilité du clonage et effectue
ces opportunités de clonage avec des scores qui dépassent seuil-ipa-cp-eval.
ipa-cp-récursivité-pénalité
Pénalité en pourcentage que les fonctions récursives recevront lorsqu'elles seront évaluées
pour le clonage.
ipa-cp-simple-appel-pénalité
Les fonctions de pénalité en pourcentage contenant un seul appel à une autre fonction seront
reçoivent lorsqu'ils sont évalués pour le clonage.
ipa-max-agg-articles
IPA-CP est également capable de propager un certain nombre de valeurs scalaires passées dans un
agrégat. ipa-max-agg-articles contrôle le nombre maximum de telles valeurs par unité
paramètre.
ipa-cp-loop-indice-bonus
Lorsque l'IPA-CP détermine qu'un candidat au clonage ferait le nombre de
itérations d'une boucle connue, cela ajoute un bonus de ipa-cp-loop-indice-bonus à la
score de rentabilité du candidat.
ipa-cp-array-index-indice-bonus
Lorsque IPA-CP détermine qu'un candidat au clonage ferait l'index d'un tableau
accès connu, il ajoute un bonus de ipa-cp-array-index-indice-bonus à la
score de rentabilité du candidat.
ipa-max-aa-étapes
Lors de son analyse des corps fonctionnels, l'IPA-CP utilise l'analyse des alias afin de
suivre les valeurs pointées par les paramètres de fonction. Afin de ne pas passer trop de temps
analysant des fonctions énormes, il abandonne et considère que toute la mémoire est écrasée après
l'examen ipa-max-aa-étapes instructions modifiant la mémoire.
partitions lto
Spécifiez le nombre souhaité de partitions produites lors de la compilation WHOPR. Les
le nombre de partitions doit dépasser le nombre de processeurs utilisés pour la compilation. Les
la valeur par défaut est 32.
partition lto-min
Taille de la partition minimale pour WHOPR (dans les instructions estimées). Cela empêche
frais de division de très petits programmes en trop de partitions.
cxx-max-espaces-de-noms-pour-aide-au-diagnostic
Le nombre maximum d'espaces de noms à consulter pour des suggestions lors de la recherche de noms C++
échoue pour un identifiant. La valeur par défaut est 1000.
seuil de fréquence de chute
La fréquence d'exécution relative maximale (en pourcentage) du bloc cible
par rapport au bloc d'origine d'une instruction pour permettre l'immersion d'une instruction
déclaration. Des nombres plus importants entraînent un naufrage de déclaration plus agressif. Les
la valeur par défaut est 75. Un petit ajustement positif est appliqué pour les déclarations avec
opérandes de mémoire car ceux-ci sont encore plus rentables, alors coulez.
max-magasins-à-évier
Le nombre maximal de paires de magasins conditionnels pouvant être coulés. Mettre à 0 si
soit la vectorisation (-ftree-vectoriser) ou si-conversion (-ftree-loop-if-convert)
est désactivé. La valeur par défaut est 2.
autoriser les courses de données
Permettre aux optimiseurs d'introduire de nouvelles courses de données sur les magasins. Mettre à 1 pour autoriser,
sinon à 0. Cette option est activée par défaut au niveau d'optimisation -Ofast.
cas-valeurs-seuil
Le plus petit nombre de valeurs différentes pour lesquelles il est préférable d'utiliser une table de saut
au lieu d'un arbre de branches conditionnelles. Si la valeur est 0, utilisez la valeur par défaut pour
la machine. La valeur par défaut est 0.
arbre-reassoc-largeur
Définit le nombre maximum d'instructions exécutées en parallèle dans l'arbre réassocié.
Ce paramètre remplace les heuristiques dépendantes de la cible utilisées par défaut s'il n'a pas
valeur zéro.
algorithme-de-pression-sched
Choisissez entre les deux implémentations disponibles de -fsched-pression. Algorithme 1
est la mise en œuvre d'origine et est le plus susceptible d'empêcher les instructions de
en cours de réorganisation. L'algorithme 2 a été conçu pour être un compromis entre le
approche relativement conservatrice adoptée par l'algorithme 1 et l'approche plutôt agressive
approche adoptée par le planificateur par défaut. Il repose davantage sur le fait d'avoir un
fichier de registre régulier et classes de pression de registre précises. Voir haifa-sched.c
dans les sources du GCC pour plus de détails.
Le choix par défaut dépend de la cible.
Max-Slsr-Cand-scan
Définir le nombre maximum de candidats existants qui sont pris en compte lors de la recherche d'un
base d'un nouveau candidat à la réduction de la résistance linéaire.
asan-globaux
Activez la détection de dépassement de mémoire tampon pour les objets globaux. Ce type de protection est
activé par défaut si vous utilisez -fsanitize=adresse option. Pour désactiver le global
objets protection utilisation --param asan-globaux=0.
asan-pile
Activez la détection de dépassement de mémoire tampon pour les objets de pile. Ce type de protection est
activé par défaut lors de l'utilisation-fsanitize=adresse. Pour désactiver la protection de la pile, utilisez
--param asan-pile=0 option.
asan-instrument-lit
Activer la détection de dépassement de mémoire tampon pour les lectures en mémoire. Ce type de protection est
activé par défaut lors de l'utilisation -fsanitize=adresse. Pour désactiver les lectures en mémoire
utilisation de protection --param asan-instrument-lectures=0.
asan-instrument-écrit
Activer la détection de dépassement de mémoire tampon pour les écritures en mémoire. Ce type de protection est
activé par défaut lors de l'utilisation -fsanitize=adresse. Pour désactiver les écritures en mémoire
utilisation de protection --param asan-instrument-write=0 option.
asan-mémintrine
Activer la détection pour les fonctions intégrées. Ce type de protection est activé par
par défaut lors de l'utilisation -fsanitize=adresse. Pour désactiver la protection des fonctions intégrées
utilisé --param asan-memintrin = 0.
asan-utilisation-après-retour
Activer la détection de l'utilisation après le retour. Ce type de protection est activé par
par défaut lors de l'utilisation -fsanitize=adresse option. Pour désactiver l'utilisation après retour
utilisation de la détection --param asan-use-after-return=0.
asan-instrumentation-avec-seuil-d'appel
Si le nombre d'accès mémoire en fonction instrumentée est supérieur ou égal à
ce numéro, utilisez des rappels au lieu de vérifications en ligne. Par exemple pour désactiver le code en ligne
utilisé --param asan-instrumentation-with-call-threshold=0.
chkp-max-ctor-taille
Les constructeurs statiques générés par Pointer Bounds Checker peuvent devenir très volumineux et
augmenter considérablement le temps de compilation au niveau de l'optimisation -O1 et plus haut. Cette
paramètre est un nombre maximum d'instructions dans un seul constructeur généré.
La valeur par défaut est 5000.
max-fsm-thread-path-insns
Nombre maximum d'instructions à copier lors de la duplication de blocs sur un état fini
chemin de fil de saut d'automate. La valeur par défaut est 100.
longueur de thread max-fsm
Nombre maximal de blocs de base sur un chemin de thread de saut d'automate à états finis. Les
la valeur par défaut est 10.
chemins-thread-max-fsm
Nombre maximal de nouveaux chemins de threads de saut à créer pour un automate à états finis.
La valeur par défaut est 50.
Options Contrôle le Préprocesseur
Ces options contrôlent le préprocesseur C, qui est exécuté sur chaque fichier source C avant
compilation.
Si vous utilisez le -E option, rien n'est fait à l'exception du prétraitement. Certaines de ces options
n'a de sens qu'avec -E car ils provoquent la sortie du préprocesseur
inadapté à la compilation réelle.
-Wp,option
Vous pouvez utiliser -Wp,option pour contourner le pilote du compilateur et passer option directement par
au préprocesseur. Si option contient des virgules, il est divisé en plusieurs options à
les virgules. Cependant, de nombreuses options sont modifiées, traduites ou interprétées par le
pilote du compilateur avant d'être passé au préprocesseur, et -Wp contourne de force
cette phase. L'interface directe du préprocesseur est non documentée et soumise à
changer, donc autant que possible vous devriez éviter d'utiliser -Wp et laissez le conducteur gérer le
options à la place.
-Xpréprocesseur option
Passé option en option au préprocesseur. Vous pouvez l'utiliser pour fournir le système-
des options de préprocesseur spécifiques que GCC ne reconnaît pas.
Si vous voulez passer une option qui prend un argument, vous devez utiliser -Xpréprocesseur
deux fois, une fois pour l'option et une fois pour l'argument.
-pas-de-cpp-intégré
Effectuez le prétraitement en tant que passe distincte avant la compilation. Par défaut, GCC effectue
le prétraitement en tant que partie intégrante de la tokenisation et de l'analyse syntaxique des entrées. Si cette option
est fourni, la langue frontale appropriée (cc1, cc1plus, ou cc1obj pour C, C++,
et Objective-C, respectivement) est invoqué à la place deux fois, une fois pour le prétraitement uniquement
et une fois pour la compilation réelle de l'entrée prétraitée. Cette option peut être utile
en conjonction avec l' -B or -emballage options pour spécifier un autre préprocesseur ou
effectuer un traitement supplémentaire de la source du programme entre le prétraitement normal et
compilation.
-D prénom
Prédéfinir prénom en tant que macro, avec la définition 1.
-D prénom=définition
Le contenu de définition sont tokenisés et traités comme s'ils étaient apparus pendant
traduction phase trois dans un #define directif. En particulier, la définition sera
tronqué par des caractères de nouvelle ligne intégrés.
Si vous appelez le préprocesseur à partir d'un shell ou d'un programme similaire, vous aurez peut-être besoin
d'utiliser la syntaxe des guillemets du shell pour protéger les caractères tels que les espaces qui ont un
sens dans la syntaxe du shell.
Si vous souhaitez définir une macro de type fonction sur la ligne de commande, écrivez son argument
liste entourée de parenthèses avant le signe égal (le cas échéant). Les parenthèses sont
significatif pour la plupart des shells, vous devrez donc citer l'option. Avec sh et csh,
-RÉ'prénom(arguments...)=définition' œuvres.
-D et -U les options sont traitées dans l'ordre dans lequel elles sont données sur la ligne de commande. Tous
-imacros filet et -comprendre filet les options sont traitées après tout -D et -U options.
-U prénom
Annuler toute définition précédente de prénom, soit intégré, soit pourvu d'un -D option.
-undef
Ne prédéfinissez aucune macro spécifique au système ou à GCC. La norme prédéfinie
les macros restent définies.
-I dir
Ajouter le répertoire dir à la liste des répertoires dans lesquels rechercher les fichiers d'en-tête.
Répertoires nommés par -I sont recherchés avant que le système standard n'inclue les répertoires.
Si le répertoire dir est un répertoire d'inclusion système standard, l'option est ignorée pour
s'assurer que l'ordre de recherche par défaut des répertoires système et le traitement spécial
des en-têtes système ne sont pas vaincus. Si dir commence par "=", alors le "=" sera
remplacé par le préfixe sysroot ; voir --sysroot et -isysroot.
-o filet
Écrire la sortie dans filet. C'est la même chose que de spécifier filet comme deuxième non-option
argument cpp. gcc a une interprétation différente d'un deuxième argument non optionnel,
donc tu dois utiliser -o pour spécifier le fichier de sortie.
-Mur
Active tous les avertissements facultatifs qui sont souhaitables pour le code normal. A l'heure actuelle cette
is -Commentaire, -Wtrigraphes, -Wmulticar et un avertissement concernant la promotion d'entiers provoquant un
changement de signe dans les expressions "#if". Notez que de nombreux avertissements du préprocesseur
sont activés par défaut et n'ont aucune option pour les contrôler.
-Commentaire
-Wcommentaires
Avertir chaque fois qu'une séquence de début de commentaire /* apparaît dans un /* commentaire, ou chaque fois qu'un
backslash-newline apparaît dans un // commenter. (Les deux formes ont le même effet.)
-Wtrigraphes
La plupart des trigraphes dans les commentaires ne peuvent pas affecter le sens du programme. Cependant, un
trigraphe qui formerait une nouvelle ligne échappée (??/ à la fin d'une ligne) peut, en
changer où le commentaire commence ou se termine. Par conséquent, seuls les trigraphes qui formeraient
Les sauts de ligne échappés produisent des avertissements dans un commentaire.
Cette option est impliquée par -Mur. Si -Mur n'est pas donné, cette option est toujours activée
sauf si les trigraphes sont activés. Pour obtenir une conversion de trigraphe sans avertissements, mais obtenez
L'autre -Mur avertissements, utiliser -trigraphes -Mur -Wno-trigraphes.
-Wtraditionnel
Avertir de certaines constructions qui se comportent différemment en traditionnel et en ISO C. Aussi
avertir des constructions ISO C qui n'ont pas d'équivalent en C traditionnel et problématiques
constructions à éviter.
-Wundef
Avertir chaque fois qu'un identifiant qui n'est pas une macro est rencontré dans un #si directif,
à l'extérieur du défini. Ces identifiants sont remplacés par zéro.
-Winutilisé-macros
Avertir des macros définies dans le fichier principal qui ne sont pas utilisées. Une macro est d'utiliser Si c'est
étendu ou testé pour l'existence au moins une fois. Le préprocesseur avertira également si
la macro n'a pas été utilisée au moment où elle est redéfinie ou indéfinie.
Macros intégrées, macros définies sur la ligne de commande et macros définies dans include
les fichiers ne sont pas avertis.
Remarque : Si une macro est réellement utilisée, mais uniquement dans les blocs conditionnels ignorés, alors
Le RPC le déclarera comme inutilisé. Pour éviter l'avertissement dans un tel cas, vous pouvez améliorer
la portée de la définition de la macro, par exemple en la déplaçant dans le premier sauté
bloquer. Alternativement, vous pouvez fournir une utilisation fictive avec quelque chose comme :
#if défini la_macro_causant_l'avertissement
#endif
-Wendif-étiquettes
Avertir chaque fois qu'un #else ou d’une #endif sont suivis de texte. Cela se produit généralement dans
code du formulaire
#si FOO
#autre FOO
#endif FOO
Les deuxième et troisième « FOO » devraient être dans les commentaires, mais ne le sont souvent pas dans les anciens programmes.
Cet avertissement est activé par défaut.
-Werreur
Transformez tous les avertissements en erreurs matérielles. Le code source qui déclenche les avertissements sera
rejeté.
-Wsystem-en-têtes
Émettre des avertissements pour le code dans les en-têtes système. Ceux-ci sont normalement inutiles pour trouver
bugs dans votre propre code, donc supprimés. Si vous êtes responsable du système
bibliothèque, vous voudrez peut-être les voir.
-w Supprimez tous les avertissements, y compris ceux émis par défaut par GNU CPP.
-pédant
Émettez tous les diagnostics obligatoires répertoriés dans la norme C. Certains d'entre eux sont laissés
par défaut, car ils se déclenchent fréquemment sur du code inoffensif.
-pédant-erreurs
Émettez tous les diagnostics obligatoires et transformez tous les diagnostics obligatoires en erreurs.
Cela inclut les diagnostics obligatoires que GCC émet sans -pédant mais traite comme
avertissements.
-M Au lieu d'afficher le résultat du prétraitement, éditez une règle adaptée à a prendre une
décrivant les dépendances du fichier source principal. Le préprocesseur sort un
a prendre une règle contenant le nom du fichier objet pour ce fichier source, deux points et les noms
de tous les fichiers inclus, y compris ceux provenant de -comprendre or -imacros commander-
options de ligne.
Sauf indication explicite (avec -MT or -MQ), le nom du fichier objet se compose du
nom du fichier source avec n'importe quel suffixe remplacé par le suffixe du fichier objet et avec n'importe quel
parties de répertoire principales supprimées. S'il y a beaucoup de fichiers inclus, la règle est
diviser en plusieurs lignes à l'aide \-nouvelle ligne. La règle n'a pas de commandes.
Cette option ne supprime pas la sortie de débogage du préprocesseur, telle que -dM. Éviter
en mélangeant une telle sortie de débogage avec les règles de dépendance, vous devez spécifier explicitement le
fichier de sortie de dépendance avec -MF, ou utilisez une variable d'environnement comme
DEPENDANCES_OUTPUT. La sortie de débogage sera toujours envoyée au flux de sortie normal comme
Normal.
En passant -M au conducteur implique -E, et supprime les avertissements avec un -w.
-MM J'aime -M mais ne mentionnez pas les fichiers d'en-tête qui se trouvent dans les répertoires d'en-tête du système,
ni les fichiers d'en-tête qui sont inclus, directement ou indirectement, à partir d'un tel en-tête.
Cela implique que le choix des chevrons ou des guillemets doubles dans un #comprendre
directive ne détermine pas en soi si cet en-tête apparaîtra dans -MM
sortie de dépendance. Il s'agit d'un léger changement dans la sémantique des versions GCC 3.0 et
plus tôt.
-MF filet
Lorsqu'il est utilisé avec -M or -MM, spécifie un fichier dans lequel écrire les dépendances. Sinon -MF
le commutateur est donné le préprocesseur envoie les règles au même endroit qu'il aurait envoyé
sortie prétraitée.
Lorsqu'il est utilisé avec les options du pilote -MARYLAND or -MMD, -MF remplace la dépendance par défaut
fichier de sortie.
-MG En conjonction avec une option telle que -M demander la génération de dépendances, -MG suppose
les fichiers d'en-tête manquants sont des fichiers générés et les ajoute à la liste de dépendances sans
levant une erreur. Le nom du fichier de dépendance est tiré directement du "#include"
directive sans ajouter de chemin. -MG supprime également la sortie prétraitée, en tant que
le fichier d'en-tête manquant rend cela inutile.
Cette fonctionnalité est utilisée dans la mise à jour automatique des makefiles.
-MP Cette option demande à CPP d'ajouter une cible bidon pour chaque dépendance autre que la
fichier principal, ce qui fait que chacun ne dépend de rien. Ces règles factices contournent les erreurs
a prendre une donne si vous supprimez les fichiers d'en-tête sans mettre à jour le Makefile correspondre.
Voici une sortie typique :
test.o : test.c test.h
test.h :
-MT l'objectif
Modifiez la cible de la règle émise par la génération de dépendances. Par défaut, le RPC prend
le nom du fichier d'entrée principal, supprime tous les composants du répertoire et tout suffixe de fichier
tel que .c, et ajoute le suffixe d'objet habituel de la plate-forme. Le résultat est la cible.
An -MT L'option définira la cible pour qu'elle soit exactement la chaîne que vous spécifiez. Si tu veux
plusieurs cibles, vous pouvez les spécifier en tant qu'argument unique pour -MT, ou utilisez plusieurs
-MT options.
Par exemple, -MT '$(objpfx)foo.o' pourrait donner
$(objpfx)foo.o : foo.c
-MQ l'objectif
Pareil que -MT, mais il cite tous les caractères spéciaux pour Make.
-MQ '$(objpfx)foo.o' donne
$$(objpfx)foo.o : foo.c
La cible par défaut est automatiquement citée, comme si elle était donnée avec -MQ.
-MARYLAND -MARYLAND équivaut à -M -MF filet, excepté -E n'est pas implicite. Le conducteur
détermine filet selon qu'un -o option est donnée. Si c'est le cas, le conducteur utilise son
argument mais avec un suffixe de .d, sinon il prend le nom du fichier d'entrée,
supprime tous les composants et suffixes du répertoire et applique un .d suffixe.
If -MARYLAND est utilisé en conjonction avec -E, tout -o commutateur est compris pour spécifier le
fichier de sortie de dépendance, mais s'il est utilisé sans -E, Chaque -o est entendu pour spécifier un
fichier objet cible.
Depuis que -E n'est pas implicite, -MARYLAND peut être utilisé pour générer un fichier de sortie de dépendance en tant que
effet secondaire du processus de compilation.
-MMD
J'aime -MARYLAND sauf mentionner uniquement les fichiers d'en-tête utilisateur, pas les fichiers d'en-tête système.
-fpch-deps
Lors de l'utilisation d'en-têtes précompilés, cet indicateur entraînera l'activation des indicateurs de sortie de dépendance.
répertorie également les fichiers des dépendances de l'en-tête précompilé. Si non spécifié seulement
l'en-tête précompilé serait répertorié et non les fichiers qui ont été utilisés pour le créer
car ces fichiers ne sont pas consultés lorsqu'un en-tête précompilé est utilisé.
-fpch-prétraitement
Cette option permet d'utiliser un en-tête précompilé avec -E. Il insère un spécial
"#pragma", "#pragma GCC pch_preprocess "nom de fichier"" dans la sortie pour marquer l'endroit
où l'en-tête précompilé a été trouvé, et son nom de fichier. Quand -fprétraité est en
utilisation, GCC reconnaît ce "#pragma" et charge le PCH.
Cette option est désactivée par défaut, car la sortie prétraitée résultante est uniquement
vraiment approprié comme entrée à GCC. Il est allumé par -sauve-temps.
Vous ne devriez pas écrire ce "#pragma" dans votre propre code, mais vous pouvez éditer le
nom de fichier si le fichier PCH est disponible dans un emplacement différent. Le nom du fichier peut être
absolu ou il peut être relatif au répertoire courant de GCC.
-x c
-x c ++
-x Objective-C
-x assembleur-avec-cpp
Spécifiez le langage source : C, C++, Objective-C ou assembleur. Cela n'a rien à voir
avec conformité aux normes ou extensions ; il sélectionne simplement la syntaxe de base à
attendre. Si vous ne donnez aucune de ces options, cpp déduira la langue du
extension du fichier source : .c, . Cc, .m, ou .S. Quelques autres extensions courantes pour
C++ et assembleur sont également reconnus. Si cpp ne reconnaît pas l'extension, il
traitera le fichier comme C ; c'est le mode le plus générique.
Remarque : Les versions précédentes de cpp acceptaient un -long option qui a sélectionné à la fois le
langue et le niveau de conformité aux normes. Cette option a été supprimée, car
il entre en conflit avec le -l option.
-std=Standard
-ansi
Spécifiez la norme à laquelle le code doit se conformer. Actuellement, le RPC connaît C
et les normes C++ ; d'autres pourraient être ajoutés à l'avenir.
Standard peut être l'un des :
"c90"
"c89"
"iso9899:1990"
La norme ISO C de 1990. c90 est le raccourci habituel pour cette version de
le standard.
VOTRE -ansi option équivaut à -std=c90.
"iso9899:199409"
La norme C de 1990, telle que modifiée en 1994.
"iso9899:1999"
"c99"
"iso9899:199x"
"c9x"
La norme ISO C révisée, publiée en décembre 1999. Avant sa publication, cette
était connu sous le nom de C9X.
"iso9899:2011"
"c11"
"c1x"
La norme ISO C révisée, publiée en décembre 2011. Avant sa publication, cette
était connu sous le nom de C1X.
"gnu90"
"gnu89"
La norme C de 1990 plus les extensions GNU. C'est la valeur par défaut.
"gnu99"
"gnu9x"
La norme C de 1999 plus les extensions GNU.
"gnu11"
"gnu1x"
La norme C de 2011 plus les extensions GNU.
"c++98"
La norme ISO C++ 1998 plus ses amendements.
"gnu++98"
Le même que -std = c ++ 98 plus les extensions GNU. C'est la valeur par défaut pour le code C++.
-I- Divisez le chemin d'inclusion. Tous les répertoires spécifiés avec -I options avant -I-
recherché uniquement pour les en-têtes demandés avec "#include "déposer""; ils ne sont pas recherchés
"#comprendrefichier>". Si des répertoires supplémentaires sont spécifiés avec -I options après la
-I-, ces répertoires sont recherchés pour tous #comprendre directives.
Par ailleurs, -I- inhibe l'utilisation du répertoire du répertoire de fichiers courant comme
le premier répertoire de recherche pour " #include "déposer"". Cette option a été dépréciée.
-nostdinc
Ne recherchez pas les fichiers d'en-tête dans les répertoires système standard. Seuls les répertoires
vous avez spécifié avec -I options (et le répertoire du fichier courant, si
approprié) sont recherchés.
-nostdinc++
Ne recherchez pas les fichiers d'en-tête dans les répertoires standard spécifiques à C++, mais faites quand même
rechercher dans les autres répertoires standard. (Cette option est utilisée lors de la construction du C++
bibliothèque.)
-comprendre filet
Processus filet comme si "#include "file"" apparaissait comme première ligne de la source principale
déposer. Cependant, le premier répertoire recherché filet le préprocesseur fonctionne-t-il
annuaire plutôt ; of le répertoire contenant le fichier source principal. Si non trouvé
là, il est recherché dans le reste de la chaîne de recherche "#include "..."" comme
Normal.
Si plusieurs -comprendre sont données, les fichiers sont inclus dans l'ordre dans lequel ils
apparaissent sur la ligne de commande.
-imacros filet
Exactement comme -comprendre, sauf que toute sortie produite par la numérisation filet Est lancé
une façon. Les macros qu'il définit restent définies. Cela vous permet d'acquérir toutes les macros
à partir d'un en-tête sans traiter également ses déclarations.
Tous les fichiers spécifiés par -imacros sont traités avant tous les fichiers spécifiés par -comprendre.
-idirafter dir
Rechercher dir pour les fichiers d'en-tête, mais faites-le après tous les répertoires spécifiés avec -I et les
les répertoires système standard ont été épuisés. dir est traité comme un système
annuaire. Si dir commence par "=", alors le "=" sera remplacé par le sysroot
préfixe; voir --sysroot et -isysroot.
-ipréfixe préfixe
Spécifier préfixe comme préfixe pour la suite -iavecpréfixe option. Si le préfixe
représente un répertoire, vous devez inclure le dernier /.
-iavecpréfixe dir
-iavecpréfixeavant dir
Ajouter dir au préfixe spécifié précédemment avec -ipréfixe, et ajouter le résultat
répertoire au chemin de recherche d'inclusion. -iavecpréfixeavant le met au même endroit -I
aurait; -iavecpréfixe le met où -idirafter aurait.
-isysroot dir
Cette option est comme la --sysroot option, mais s'applique uniquement aux fichiers d'en-tête (sauf pour
cibles Darwin, où il s'applique à la fois aux fichiers d'en-tête et aux bibliothèques). Voir le
--sysroot option pour plus d'informations.
-imultilib dir
Utilisez dir en tant que sous-répertoire du répertoire contenant les en-têtes C++ spécifiques à la cible.
-isystème dir
Rechercher dir pour les fichiers d'en-tête, après tous les répertoires spécifiés par -I mais avant le
répertoires système standard. Marquez-le comme répertoire système, afin qu'il obtienne le même
traitement spécial tel qu'il est appliqué aux répertoires système standard. Si dir commence
avec "=", alors le "=" sera remplacé par le préfixe sysroot ; voir --sysroot et
-isysroot.
-Je cite dir
Rechercher dir uniquement pour les fichiers d'en-tête demandés avec "#include "déposer""; ils ne sont pas
recherché "#includefichier>", avant tous les répertoires spécifiés par -I et avant le
répertoires système standard. Si dir commence par "=", puis le "=" sera remplacé par
le préfixe sysroot ; voir --sysroot et -isysroot.
-fdirectives-seulement
Lors du prétraitement, gérez les directives, mais ne développez pas les macros.
Le comportement de l'option dépend de la -E et -fprétraité options.
Avec -E, le prétraitement est limité au traitement des directives telles que "#define",
"#ifdef" et "#erreur". D'autres opérations de préprocesseur, telles que l'expansion de macros et
la conversion du trigraphe n'est pas effectuée. De plus, le -dD l'option est implicitement
activée.
Avec -fprétraité, la prédéfinition de la ligne de commande et de la plupart des macros intégrées est
désactivée. Les macros telles que "__LINE__", qui dépendent du contexte, sont gérées
normalement. Cela permet la compilation de fichiers préalablement prétraités avec "-E
-fdirectives-seulement".
Avec les deux -E et -fprétraité, les règles de -fprétraité avoir la priorité. Cette
permet un prétraitement complet des fichiers préalablement prétraités avec "-E
-fdirectives-seulement".
-fdollars-in-identifiants
Accepter $ dans les identifiants.
-fextended-identifiants
Acceptez les noms de caractères universels dans les identifiants. Cette option est activée par défaut
pour C99 (et versions C standard ultérieures) et C++.
-fno-canonical-system-headers
Lors du prétraitement, ne raccourcissez pas les chemins d'en-tête du système avec la canonisation.
-fprétraité
Indiquez au préprocesseur que le fichier d'entrée a déjà été prétraité. Cette
supprime des choses comme l'expansion de macro, la conversion de trigraphe, l'épissage de nouvelle ligne échappé,
et le traitement de la plupart des directives. Le préprocesseur reconnaît et supprime toujours
commentaires, afin que vous puissiez passer un fichier prétraité avec -C au compilateur sans
problèmes. Dans ce mode, le préprocesseur intégré n'est guère plus qu'un tokenizer
pour les extrémités avant.
-fprétraité est implicite si le fichier d'entrée a l'une des extensions .i, .ii or .mi.
Ce sont les extensions que GCC utilise pour les fichiers prétraités créés par -sauve-temps.
-ftabstop=largeur
Définissez la distance entre les taquets de tabulation. Cela aide le préprocesseur à signaler la colonne correcte
nombres dans les avertissements ou les erreurs, même si des tabulations apparaissent sur la ligne. Si la valeur est inférieure
supérieur à 1 ou supérieur à 100, l'option est ignorée. La valeur par défaut est 8.
-fdebug-cpp
Cette option n'est utile que pour le débogage de GCC. Lorsqu'il est utilisé avec -E, décharge le débogage
informations sur les cartes de localisation. Chaque jeton de la sortie est précédé du vidage de
la carte à laquelle appartient son emplacement. Le dump de la carte contenant l'emplacement d'un jeton
serait:
{"P":F ;"F":F ;"L": ;"C": ;"S": ;"M": ;"E": ,"loc": }
Lorsqu'il est utilisé sans -E, cette option n'a aucun effet.
-ftrack-macro-extension[=niveau]
Suivez les emplacements des jetons à travers les extensions de macro. Cela permet au compilateur d'émettre
diagnostic sur la pile d'extension de macro actuelle lorsqu'une erreur de compilation se produit dans
une macro-extension. L'utilisation de cette option fait consommer au préprocesseur et au compilateur
plus de mémoire. Les niveau paramètre peut être utilisé pour choisir le niveau de précision du jeton
suivi de localisation diminuant ainsi la consommation de mémoire si nécessaire. Valeur 0 of
niveau désactive cette option comme si non -ftrack-macro-extension était présent le
la ligne de commande. Valeur 1 suit les emplacements des jetons dans un mode dégradé pour le plaisir de
surcharge mémoire minimale. Dans ce mode, tous les jetons résultant de l'expansion d'un
argument d'une macro de type fonction ont le même emplacement. Valeur 2 jetons de suivi
emplacements complètement. Cette valeur est la plus gourmande en mémoire. Lorsque cette option est donnée
pas d'argument, la valeur du paramètre par défaut est 2.
Notez que "-ftrack-macro-expansion=2" est activé par défaut.
-fexec-jeu de caractères=jeu de caractères
Définit le jeu de caractères d'exécution, utilisé pour les constantes de chaîne et de caractère. Le défaut
est UTF-8. jeu de caractères peut être n'importe quel encodage pris en charge par la bibliothèque "iconv" du système
routine.
-fwide-exec-charset=jeu de caractères
Définit le jeu de caractères d'exécution large, utilisé pour les constantes de chaîne et de caractère larges.
La valeur par défaut est UTF-32 ou UTF-16, selon la largeur de "wchar_t". Comme
avec -fexec-jeu de caractères, jeu de caractères peut être n'importe quel encodage pris en charge par "iconv" du système
routine de la bibliothèque ; cependant, vous aurez des problèmes avec les encodages qui ne correspondent pas
exactement dans "wchar_t".
-finput-charset=jeu de caractères
Définir le jeu de caractères d'entrée, utilisé pour la traduction à partir du jeu de caractères de l'entrée
au jeu de caractères source utilisé par GCC. Si les paramètres régionaux ne le spécifient pas, ou GCC
ne peut pas obtenir ces informations à partir des paramètres régionaux, la valeur par défaut est UTF-8. Cela peut être
remplacé par les paramètres régionaux ou cette option de ligne de commande. Actuellement, la commande-
L'option de ligne est prioritaire en cas de conflit. jeu de caractères peut être n'importe quel encodage
pris en charge par la routine de bibliothèque "iconv" du système.
-frépertoire-de-travail
Activer la génération de marqueurs de ligne dans la sortie du préprocesseur qui permettra au compilateur
connaître le répertoire de travail courant au moment du prétraitement. Lorsque cette option est
activé, le préprocesseur émettra, après le marqueur de ligne initial, un deuxième marqueur de ligne
avec le répertoire de travail courant suivi de deux barres obliques. GCC utilisera ce
répertoire, lorsqu'il est présent dans l'entrée prétraitée, comme le répertoire émis en tant que
le répertoire de travail actuel dans certains formats d'informations de débogage. Cette option est
implicitement activé si les informations de débogage sont activées, mais cela peut être inhibé avec
la forme niée -fno-répertoire-de-travail. Si l' -P flag est présent dans la commande
line, cette option n'a aucun effet, car aucune directive "#line" n'est émise.
-fno-show-colonne
N'imprimez pas les numéros de colonne dans les diagnostics. Cela peut être nécessaire si le diagnostic est
étant analysé par un programme qui ne comprend pas les numéros de colonne, comme
déjagnu.
-A prédicat=répondre
Faire une assertion avec le prédicat prédicat et répond répondre. Ce formulaire est
préféré à l'ancienne forme -A prédicat(répondre), qui est toujours pris en charge, car il
n'utilise pas de caractères spéciaux shell.
-A -prédicat=répondre
Annuler une assertion avec le prédicat prédicat et répond répondre.
-dCHARS
CARACTÈRES est une séquence d'un ou plusieurs des caractères suivants, et ne doit pas être
précédé d'un espace. Les autres caractères sont interprétés par le compilateur proprement dit, ou
réservées aux futures versions de GCC, et sont donc ignorées en silence. Si vous spécifiez
personnages dont le comportement est en conflit, le résultat est indéfini.
M Au lieu de la sortie normale, générez une liste de #define directives pour tous les
macros définies lors de l'exécution du préprocesseur, y compris les macros prédéfinies
macro. Cela vous donne un moyen de découvrir ce qui est prédéfini dans votre version de
le préprocesseur. En supposant que vous n'avez pas de fichier foo.h, la commande
toucher foo.h; cpp -dM foo.h
affichera toutes les macros prédéfinies.
Si vous utilisez -dM sans -E option, -dM est interprété comme synonyme de
-fdump-rtl-mach.
D J'aime M sauf à deux égards : il fait ne sauraient inclure les macros prédéfinies, et il
sorties tous les deux le #define directives et le résultat du prétraitement. Les deux sortes
de sortie aller au fichier de sortie standard.
N J'aime D, mais n'émettent que les noms des macros, pas leurs extensions.
I Sortie #comprendre directives en plus du résultat du prétraitement.
U J'aime D sauf que seules les macros qui sont développées, ou dont la définition est testée
dans les directives du préprocesseur, sont affichés ; la sortie est retardée jusqu'à l'utilisation ou
test de la macro ; et #undef les directives sont également sorties pour les macros testées mais
indéfini à l'époque.
-P Empêcher la génération de marqueurs de ligne dans la sortie du préprocesseur. Cela pourrait être
utile lors de l'exécution du préprocesseur sur quelque chose qui n'est pas du code C, et sera envoyé
à un programme qui pourrait être confondu par les marqueurs de ligne.
-C Ne jetez pas les commentaires. Tous les commentaires sont transmis au fichier de sortie, sauf
pour les commentaires dans les directives traitées, qui sont supprimés avec la directive.
Vous devez être préparé aux effets secondaires lors de l'utilisation -C; cela amène le préprocesseur à
traiter les commentaires comme des jetons à part entière. Par exemple, les commentaires apparaissant à la
début de ce qui serait une ligne directive ont pour effet de transformer cette ligne en une
ligne source ordinaire, puisque le premier jeton sur la ligne n'est plus un #.
-CC Ne supprimez pas les commentaires, y compris pendant l'expansion des macros. C'est comme -C, sauf
que les commentaires contenus dans les macros sont également transmis au fichier de sortie où
la macro est étendue.
En plus des effets secondaires de la -C option, la -CC l'option provoque tout le style C++
commentaires dans une macro à convertir en commentaires de style C. C'est pour éviter plus tard
l'utilisation de cette macro de commenter par inadvertance le reste de la ligne source.
VOTRE -CC L'option est généralement utilisée pour prendre en charge les commentaires Lint.
-traditionnel-cpp
Essayez d'imiter le comportement des préprocesseurs C à l'ancienne, par opposition à l'ISO C
préprocesseurs.
-trigraphes
Traiter les séquences de trigraphes. Ce sont des séquences de trois caractères, commençant toutes par
??, qui sont définis par ISO C pour représenter des caractères uniques. Par exemple, ??/ peuplements
pour \, De sorte '??/n' est une constante de caractère pour une nouvelle ligne. Par défaut, GCC ignore
trigraphes, mais dans les modes conformes aux normes, il les convertit. Voir le -std et -ansi
options.
Les neuf trigraphes et leurs remplaçants sont
Trigraphe : ??( ??) ??< ??> ??= ??/ ??' ??! ??-
Remplacement : [ ] { } # \ ^ | ~
-remapper
Activer le code spécial pour contourner les systèmes de fichiers qui n'autorisent que des fichiers très courts
noms, tels que MS-DOS.
--Aidez-moi
--target-aide
Imprimez du texte décrivant toutes les options de la ligne de commande au lieu de prétraiter quoi que ce soit.
-v Mode verbeux. Imprimez le numéro de version de GNU CPP au début de l'exécution, et
signaler la forme finale du chemin d'inclusion.
-H Imprimez le nom de chaque fichier d'en-tête utilisé, en plus des autres activités normales. Chaque
le nom est en retrait pour montrer à quel point le #comprendre pile c'est. En-tête précompilé
les fichiers sont également imprimés, même s'ils s'avèrent invalides ; un précompilé invalide
le fichier d'en-tête est imprimé avec ...X et valide avec ! ... .
-version
--version
Imprimez le numéro de version de GNU CPP. Avec un tiret, procédez au prétraitement comme d'habitude.
Avec deux tirets, sortez immédiatement.
En passant Options à le Assembleur
Vous pouvez passer des options à l'assembleur.
-Washington,option
Passé option en option à l'assembleur. Si option contient des virgules, il est divisé
en plusieurs options entre les virgules.
-Xassembleur option
Passé option en option à l'assembleur. Vous pouvez l'utiliser pour fournir des informations spécifiques au système
options d'assembleur que GCC ne reconnaît pas.
Si vous voulez passer une option qui prend un argument, vous devez utiliser -Xassembleur deux fois,
une fois pour l'option et une fois pour l'argument.
Options pour Enchaînement
Ces options entrent en jeu lorsque le compilateur lie des fichiers objets dans un exécutable
fichier de sortie. Ils n'ont aucun sens si le compilateur ne fait pas d'étape de lien.
nom-fichier-objet
Un nom de fichier qui ne se termine pas par un suffixe spécial reconnu est considéré comme le nom d'un
fichier objet ou bibliothèque. (Les fichiers objets se distinguent des bibliothèques par l'éditeur de liens
en fonction du contenu du fichier.) Si la liaison est effectuée, ces fichiers objets sont utilisés comme
entrée à l'éditeur de liens.
-c
-S
-E Si l'une de ces options est utilisée, l'éditeur de liens n'est pas exécuté et les noms de fichiers objets
ne doit pas être utilisé comme argument.
-fusible-ld=bfd
Utilisez l'option bfd l'éditeur de liens au lieu de l'éditeur de liens par défaut.
-fuse-ld=or
Utilisez l'option or l'éditeur de liens au lieu de l'éditeur de liens par défaut.
-lbibliothèque
-l bibliothèque
Rechercher la bibliothèque nommée bibliothèque lors de la liaison. (La deuxième alternative avec le
bibliothèque en tant qu'argument séparé est uniquement pour la conformité POSIX et n'est pas recommandé.)
Cela fait une différence où dans la commande vous écrivez cette option ; l'éditeur de liens recherche
et traite les bibliothèques et les fichiers objets dans l'ordre dans lequel ils sont spécifiés. Ainsi, foo.o
-lz bar.o recherche dans la bibliothèque z après fichier foo.o mais avant bar.o. Si bar.o désigne
fonctions dans z, ces fonctions peuvent ne pas être chargées.
L'éditeur de liens recherche une liste standard de répertoires pour la bibliothèque, qui est en fait
un fichier nommé bibliothèque.a. L'éditeur de liens utilise alors ce fichier comme s'il avait été spécifié
précisément de nom.
Les répertoires recherchés incluent plusieurs répertoires système standard ainsi que ceux que vous
préciser avec -L.
Normalement, les fichiers trouvés de cette manière sont des fichiers de bibliothèque --- des fichiers d'archive dont les membres sont
fichiers objets. L'éditeur de liens gère un fichier d'archive en le parcourant à la recherche de membres
qui définissent des symboles qui ont jusqu'à présent été référencés mais non définis. Mais si le
le fichier trouvé est un fichier objet ordinaire, il est lié de la manière habituelle. Les
seule différence entre l'utilisation d'un -l option et spécifier un nom de fichier est que -l
entoure bibliothèque avec lib et .a et recherche plusieurs répertoires.
-lobjc
Vous avez besoin de ce cas particulier du -l option afin de lier un Objective-C ou
Programme Objective-C++.
-nostartfiles
N'utilisez pas les fichiers de démarrage système standard lors de la liaison. Le système standard
les bibliothèques sont utilisées normalement, à moins que -nostdlib or -nodefaultlibs est utilisé.
-nodefaultlibs
N'utilisez pas les bibliothèques système standard lors de la liaison. Seules les bibliothèques que vous spécifiez
sont passés à l'éditeur de liens, et les options spécifiant la liaison des bibliothèques système, telles que
as -statique-libgcc or -shared-libgcc, sont ignorés. Les fichiers de démarrage standard sont utilisés
normalement, à moins que -nostartfiles est utilisé.
Le compilateur peut générer des appels à "memcmp", "memset", "memcpy" et "memmove". Ces
les entrées sont généralement résolues par des entrées dans la libc. Ces points d'entrée doivent être
fourni par un autre mécanisme lorsque cette option est spécifiée.
-nostdlib
N'utilisez pas les fichiers ou bibliothèques de démarrage système standard lors de la liaison. Pas de démarrage
fichiers et seules les bibliothèques que vous spécifiez sont transmises à l'éditeur de liens, et les options
spécifiant la liaison des bibliothèques système, telles que -statique-libgcc or -shared-libgcc,
sont ignorés.
Le compilateur peut générer des appels à "memcmp", "memset", "memcpy" et "memmove". Ces
les entrées sont généralement résolues par des entrées dans la libc. Ces points d'entrée doivent être
fourni par un autre mécanisme lorsque cette option est spécifiée.
L'une des bibliothèques standard contournées par -nostdlib et -nodefaultlibs is libgcc.aune
bibliothèque de sous-programmes internes que GCC utilise pour surmonter les lacunes de certains
machines, ou des besoins particuliers pour certaines langues.
Dans la plupart des cas, vous avez besoin libgcc.a même si vous voulez éviter d'autres bibliothèques standard.
En d'autres termes, lorsque vous spécifiez -nostdlib or -nodefaultlibs tu devrais normalement
spécifier -lgcc également. Cela garantit que vous n'avez aucune référence non résolue à
sous-routines internes de la bibliothèque GCC. (Un exemple d'un tel sous-programme interne est
"__main", utilisé pour s'assurer que les constructeurs C++ sont appelés.)
-tarte
Produire une position indépendante exécutable sur les cibles qui la supportent. Pour prévisible
résultats, vous devez également spécifier le même ensemble d'options utilisé pour la compilation (-fpie,
-fPIE, ou les sous-options du modèle) lorsque vous spécifiez cette option de l'éditeur de liens.
-pas de tarte
Ne produisez pas un exécutable indépendant de la position.
-rdynamique
Passer le drapeau -export-dynamique à l'éditeur de liens ELF, sur les cibles qui le prennent en charge. Cette
indique à l'éditeur de liens d'ajouter tous les symboles, pas seulement ceux utilisés, au symbole dynamique
table. Cette option est nécessaire pour certaines utilisations de "dlopen" ou pour permettre d'obtenir
backtraces à partir d'un programme.
-s Supprimez toutes les informations de table de symboles et de relocalisation de l'exécutable.
-statique
Sur les systèmes qui prennent en charge la liaison dynamique, cela empêche la liaison avec le partage
bibliothèques. Sur les autres systèmes, cette option n'a aucun effet.
-partagé
Produire un objet partagé qui peut ensuite être lié à d'autres objets pour former un
exécutable. Tous les systèmes ne prennent pas en charge cette option. Pour des résultats prévisibles, vous devez
spécifiez également le même ensemble d'options utilisé pour la compilation (-fpic, -fPIC, ou modèle
sous-options) lorsque vous spécifiez cette option de l'éditeur de liens.[1]
-shared-libgcc
-statique-libgcc
Sur les systèmes qui fournissent libgcc en tant que bibliothèque partagée, ces options forcent l'utilisation de
soit la version partagée ou statique, respectivement. Si aucune version partagée de libgcc était
construit lorsque le compilateur a été configuré, ces options n'ont aucun effet.
Il existe plusieurs situations dans lesquelles une application doit utiliser le partage libgcc
au lieu de la version statique. Le plus courant d'entre eux est lorsque l'application
souhaite lancer et intercepter des exceptions dans différentes bibliothèques partagées. Dans ce cas,
chacune des bibliothèques ainsi que l'application elle-même doivent utiliser le partage libgcc.
Par conséquent, les pilotes G++ et GCJ ajoutent automatiquement -shared-libgcc chaque fois que vous construisez
une bibliothèque partagée ou un exécutable principal, car les programmes C++ et Java utilisent généralement
exceptions, c'est donc la bonne chose à faire.
Si, à la place, vous utilisez le pilote GCC pour créer des bibliothèques partagées, vous constaterez peut-être qu'ils
ne sont pas toujours liés au partage libgcc. Si GCC trouve, à sa configuration
fois, que vous avez un éditeur de liens non-GNU ou un éditeur de liens GNU qui ne prend pas en charge l'option
--eh-frame-hdr, il relie la version partagée de libgcc dans des bibliothèques partagées par
défaut. Sinon, il tire parti de l'éditeur de liens et optimise l'enchaînement
avec la version partagée de libgcc, liaison avec la version statique de libgcc par
défaut. Cela permet aux exceptions de se propager à travers de telles bibliothèques partagées, sans
encourir des frais de réinstallation au moment du chargement de la bibliothèque.
Cependant, si une bibliothèque ou un exécutable principal est censé lever ou intercepter des exceptions, vous
doit le lier à l'aide du pilote G++ ou GCJ, selon les langages utilisés dans le
programme, ou en utilisant l'option -shared-libgcc, de telle sorte qu'il soit lié au partage
libgcc.
-static-libansan
When the -fsanitize=adresse l'option est utilisée pour lier un programme, le pilote GCC
liens automatiquement contre libyen. Si libyen est disponible en tant que bibliothèque partagée, et
le -statique n'est pas utilisée, alors ce lien vers la version partagée de libyen.
VOTRE -static-libansan L'option ordonne au pilote GCC de lier libyen statiquement, sans
reliant nécessairement d'autres bibliothèques statiquement.
-statique-libtsan
When the -fsanitize=fil l'option est utilisée pour lier un programme, le pilote GCC
liens automatiquement contre Libtsan. Si Libtsan est disponible en tant que bibliothèque partagée, et
le -statique n'est pas utilisée, alors ce lien vers la version partagée de Libtsan.
VOTRE -statique-libtsan L'option ordonne au pilote GCC de lier Libtsan statiquement, sans
reliant nécessairement d'autres bibliothèques statiquement.
-statique-liblsan
When the -fsanitize=fuite l'option est utilisée pour lier un programme, le pilote GCC
liens automatiquement contre liblsan. Si liblsan est disponible en tant que bibliothèque partagée, et
le -statique n'est pas utilisée, alors ce lien vers la version partagée de liblsan.
VOTRE -statique-liblsan L'option ordonne au pilote GCC de lier liblsan statiquement, sans
reliant nécessairement d'autres bibliothèques statiquement.
-statique-libubsan
When the -fsanitize=non défini l'option est utilisée pour lier un programme, le pilote GCC
liens automatiquement contre libubsan. Si libubsan est disponible en bibliothèque partagée,
et les -statique n'est pas utilisée, alors ce lien vers la version partagée de
libubsanL’ -statique-libubsan L'option ordonne au pilote GCC de lier libubsan
statiquement, sans nécessairement lier statiquement d'autres bibliothèques.
-statique-libmpx
When the -fcheck-pointeur bornes et -mmpx les options sont utilisées pour lier un programme, le GCC
le pilote se lie automatiquement à libmpx. Si libmpx est disponible en partage
bibliothèque, et le -statique l'option n'est pas utilisée, alors ce lien avec le partage
version de libmpxL’ -statique-libmpx L'option ordonne au pilote GCC de lier libmpx
statiquement, sans nécessairement lier statiquement d'autres bibliothèques.
-static-libmpxwrappers
When the -fcheck-pointeur bornes et -mmpx les options sont utilisées pour lier un programme sans
aussi en utilisant -fno-chkp-use-wrappers, le pilote GCC se lie automatiquement à
libmpxwrappers. Si libmpxwrappers est disponible en tant que bibliothèque partagée, et le -statique
n'est pas utilisée, alors ce lien vers la version partagée de libmpxwrappersL’
-static-libmpxwrappers L'option ordonne au pilote GCC de lier libmpxwrappers
statiquement, sans nécessairement lier statiquement d'autres bibliothèques.
-statique-libstdc++
When the g ++ programme est utilisé pour lier un programme C++, il lie normalement automatiquement
à opposer à libstdc++. Si libstdc++ est disponible en tant que bibliothèque partagée, et le -statique
n'est pas utilisée, alors ce lien vers la version partagée de libstdc++. C'est
normalement bien. Cependant, il est parfois utile de geler la version de libstdc++
utilisé par le programme sans aller jusqu'à un lien entièrement statique. Les
-statique-libstdc++ option dirige le g ++ pilote à lier libstdc++ statiquement, sans
reliant nécessairement d'autres bibliothèques statiquement.
-symbolique
Liez des références à des symboles globaux lors de la création d'un objet partagé. Avertir de tout
références non résolues (sauf si elles sont remplacées par l'option de l'éditeur de liens -Xlinker -z
-Xlinker def). Seuls quelques systèmes prennent en charge cette option.
-T scénario
Utilisez scénario comme script de l'éditeur de liens. Cette option est prise en charge par la plupart des systèmes utilisant le
Éditeur de liens GNU. Sur certaines cibles, telles que les cibles à carte nue sans système d'exploitation,
le -T L'option peut être requise lors de la liaison pour éviter les références à des symboles non définis.
-Xlinker option
Passé option en option à l'éditeur de liens. Vous pouvez l'utiliser pour fournir des informations spécifiques au système
options de l'éditeur de liens que GCC ne reconnaît pas.
Si vous voulez passer une option qui prend un argument séparé, vous devez utiliser -Xlinker
deux fois, une fois pour l'option et une fois pour l'argument. Par exemple, pour passer -affirmer
définitions, vous devez écrire -Xlinker -affirmer -Xlinker définitions. Ça ne marche pas
pour écrire -Xlinker "-affirmer définitions", car cela passe la chaîne entière en tant que
argument unique, ce qui n'est pas ce que l'éditeur de liens attend.
Lors de l'utilisation de l'éditeur de liens GNU, il est généralement plus pratique de passer des arguments à l'éditeur de liens
options en utilisant le option=Plus-value syntaxe que sous forme d'arguments séparés. Par exemple, vous
peut spécifier -Xlinker -Map=sortie.map plutôt que -Xlinker -Carte -Xlinker sortie.map.
D'autres éditeurs de liens peuvent ne pas prendre en charge cette syntaxe pour les options de ligne de commande.
-Wl,option
Passé option en option à l'éditeur de liens. Si option contient des virgules, il est divisé en
plusieurs options entre les virgules. Vous pouvez utiliser cette syntaxe pour passer un argument au
option. Par example, -Wl,-Map,output.map passes -Carte sortie.map à l'éditeur de liens. Lorsque
en utilisant l'éditeur de liens GNU, vous pouvez également obtenir le même effet avec -Wl, -Map = output.map.
REMARQUE : dans Ubuntu 8.10 et versions ultérieures, pour LDFLAGS, l'option -Wl,-z,relro est utilisé.
Pour désactiver, utilisez -Wl,-z,norelro.
-u symbole
Faire semblant de symbole symbole n'est pas défini, pour forcer la liaison des modules de la bibliothèque pour définir
ce. Vous pouvez utiliser -u plusieurs fois avec des symboles différents pour forcer le chargement de
modules de bibliothèque supplémentaires.
-z mot-clé
-z est transmis directement à l'éditeur de liens avec le mot-clé mot-clé. Voir la rubrique
dans la documentation de votre éditeur de liens pour les valeurs autorisées et leurs significations.
Options pour Annuaire Rechercher
Ces options spécifient les répertoires dans lesquels rechercher les fichiers d'en-tête, les bibliothèques et les pièces
du compilateur :
-Idir
Ajouter le répertoire dir en tête de la liste des répertoires à rechercher header
des dossiers. Cela peut être utilisé pour remplacer un fichier d'en-tête système, en substituant le vôtre
version, puisque ces répertoires sont recherchés avant le fichier d'en-tête système
répertoires. Cependant, vous ne devez pas utiliser cette option pour ajouter des répertoires contenant
fichiers d'en-tête système fournis par le fournisseur (utilisez -isystème pour ça). Si vous utilisez plusieurs
-I option, les répertoires sont scannés dans l'ordre de gauche à droite ; le système standard
les répertoires viennent après.
Si un répertoire d'inclusion système standard ou un répertoire spécifié avec -isystème, est
également spécifié avec -I, -I l'option est ignorée. Le répertoire est toujours recherché mais
en tant que répertoire système à sa position normale dans la chaîne d'inclusion du système. C'est à
s'assurer que la procédure de GCC pour corriger les en-têtes système bogués et la commande pour le
La directive "include_next" n'est pas modifiée par inadvertance. Si tu as vraiment besoin de changer
l'ordre de recherche des répertoires système, utilisez le -nostdinc et/ou -isystème options.
-iplugindir=dir
Définir le répertoire pour rechercher les plugins qui sont passés par -fplugin=prénom au lieu de
-fplugin=chemin/prénom.so. Cette option n'est pas destinée à être utilisée par l'utilisateur, mais uniquement
passé par le chauffeur.
-Je citedir
Ajouter le répertoire dir en tête de la liste des répertoires à rechercher header
fichiers uniquement pour le cas de " #include "déposer""; ils ne sont pas recherchés pour "#include
<fichier>", sinon comme -I.
-Ldir
Ajouter un répertoire dir à la liste des répertoires à rechercher -l.
-Bpréfixe
Cette option spécifie où trouver les exécutables, les bibliothèques, les fichiers d'inclusion et
fichiers de données du compilateur lui-même.
Le programme pilote du compilateur exécute un ou plusieurs des sous-programmes cpp, cc1, as et ld.
il essaie préfixe comme préfixe pour chaque programme qu'il essaie d'exécuter, avec et sans
click/version/.
Pour chaque sous-programme à exécuter, le pilote du compilateur essaie d'abord le -B préfixe, le cas échéant.
Si ce nom n'est pas trouvé, ou si -B n'est pas spécifié, le pilote essaie deux standards
préfixes, /usr/lib/gcc/ et /usr/local/lib/gcc/. Si aucun de ces résultats n'entraîne un
nom de fichier trouvé, le nom de programme non modifié est recherché à l'aide du
répertoires spécifiés dans votre PATH variable d'environnement.
Le compilateur vérifie si le chemin fourni par -B fait référence à un répertoire, et si
nécessaire, il ajoute un caractère séparateur de répertoire à la fin du chemin.
-B les préfixes qui spécifient effectivement les noms de répertoire s'appliquent également aux bibliothèques dans le
l'éditeur de liens, car le compilateur traduit ces options en -L options pour l'éditeur de liens.
Ils s'appliquent également à inclure des fichiers dans le préprocesseur, car le compilateur traduit
ces options en -isystème options pour le préprocesseur. Dans ce cas, le compilateur
ajoute de Swanson comprennent au préfixe.
Le fichier de support d'exécution libgcc.a peut également être recherché en utilisant le -B préfixe, si
nécessaire. S'il ne s'y trouve pas, les deux préfixes standard ci-dessus sont essayés, et cela
est tout. Le fichier est exclu du lien s'il n'est pas trouvé par ces moyens.
Une autre façon de spécifier un préfixe un peu comme le -B le préfixe est d'utiliser l'environnement
variable GCC_EXEC_PREFIX.
En tant que kludge spécial, si le chemin fourni par -B is [dir/]étapeN/, Où N est un nombre
compris entre 0 et 9, alors il est remplacé par [dir/]inclure. Ceci est pour aider au démarrage-
cerclage du compilateur.
-spécifications=filet
Processus filet après que le compilateur ait lu le standard spécifications fichier, afin de remplacer
les valeurs par défaut que le gcc le programme pilote utilise pour déterminer les commutateurs à passer
à cc1, cc1plus, as, ld, etc. Plus d'un -spécifications=filet peut être spécifié sur le
ligne de commande, et ils sont traités dans l'ordre, de gauche à droite.
--sysroot=dir
Utilisez dir comme répertoire racine logique pour les en-têtes et les bibliothèques. Par exemple, si le
le compilateur recherche normalement les en-têtes dans / usr / include et les bibliothèques de / usr / lib, Il
recherche à la place répertoire/usr/inclure et répertoire/usr/lib.
Si vous utilisez à la fois cette option et le -isysroot option, puis le --sysroot option
s'applique aux bibliothèques, mais le -isysroot L'option s'applique aux fichiers d'en-tête.
L'éditeur de liens GNU (à partir de la version 2.16) a le support nécessaire pour cela
option. Si votre éditeur de liens ne prend pas en charge cette option, l'aspect du fichier d'en-tête de
--sysroot fonctionne toujours, mais pas l'aspect bibliothèque.
--no-sysroot-suffixe
Pour certaines cibles, un suffixe est ajouté au répertoire racine spécifié avec --sysroot,
en fonction des autres options utilisées, de sorte que les en-têtes peuvent par exemple se trouver dans
dir/suffixe/usr/include au lieu de répertoire/usr/inclure. Cette option désactive l'ajout
d'un tel suffixe.
-I- Cette option a été dépréciée. Veuillez utiliser -Je cite au lieu de -I répertoires avant
le -I- et retirez le -I- option. Tous les répertoires que vous spécifiez avec -I options avant
le -I- option sont recherchés uniquement pour le cas de " #include "déposer""; ils ne sont pas
recherché "#includefichier>".
Si des répertoires supplémentaires sont spécifiés avec -I options après la -I- option, ces
les répertoires sont recherchés pour toutes les directives "#include". (Ordinairement tous -I
les répertoires sont utilisés de cette façon.)
En outre, le -I- L'option inhibe l'utilisation du répertoire courant (où le
le fichier d'entrée actuel provient) comme premier répertoire de recherche pour " #include "déposer"".
Il n'y a aucun moyen de neutraliser cet effet de -I-. Avec -NS. vous pouvez spécifier la recherche
le répertoire qui est en cours lorsque le compilateur est invoqué. Ce n'est pas exactement le
même chose que ce que fait le préprocesseur par défaut, mais c'est souvent satisfaisant.
-I- n'empêche pas l'utilisation des répertoires système standard pour les fichiers d'en-tête.
Ainsi, -I- et -nostdinc sont indépendants.
Spécification Cible Machine et Compilateur Version
La façon habituelle d'exécuter GCC est d'exécuter l'exécutable appelé gcc, ou click-gcc quand croix-
compilation, ou click-gcc-version pour exécuter une version différente de celle qui a été installée
dernier.
Matériel Modèles photo et Configurations
Chaque type de machine cible peut avoir ses propres options spéciales, à commencer par -m, choisir
parmi divers modèles de matériel ou configurations --- par exemple, 68010 vs 68020, flottant
coprocesseur ou aucun. Une seule version installée du compilateur peut compiler pour n'importe quel modèle
ou configuration, selon les options spécifiées.
Certaines configurations du compilateur prennent également en charge des options spéciales supplémentaires, généralement pour
compatibilité avec d'autres compilateurs sur la même plate-forme.
AAArch64 Options
Ces options sont définies pour les implémentations AArch64 :
-mabi=prénom
Générer du code pour le modèle de données spécifié. Les valeurs admissibles sont ilp32 pour SysV-
comme le modèle de données où l'int, l'int long et le pointeur sont de 32 bits, et lp64 pour SysV-like
modèle de données où int est 32 bits, mais long int et pointeur sont 64 bits.
La valeur par défaut dépend de la configuration cible spécifique. Notez que le LP64 et
Les ABI ILP32 ne sont pas compatibles avec les liaisons ; vous devez compiler tout votre programme avec le même
ABI et lien avec un ensemble de bibliothèques compatibles.
-mbig-endian
Générez du code gros-boutiste. Il s'agit de la valeur par défaut lorsque GCC est configuré pour un
aarch64_be-*-* cible.
-mgeneral-regs-uniquement
Générez du code qui utilise uniquement les registres à usage général. Cela empêchera le
compilateur d'utiliser les registres à virgule flottante et Advanced SIMD mais n'imposera aucun
restrictions imposées à l'assembleur.
-mlittle-endian
Générez du code little-endian. Il s'agit de la valeur par défaut lorsque GCC est configuré pour un
aarch64 - * - * mais pas un aarch64_be-*-* cible.
-mcmodel=minuscule
Générez du code pour le modèle de code minuscule. Le programme et ses symboles définis statiquement
doivent être à moins de 1 Go l'un de l'autre. Les pointeurs sont de 64 bits. Les programmes peuvent être statiquement
ou liés dynamiquement. Ce modèle n'est pas entièrement mis en œuvre et est principalement traité comme
petit.
-mcmodel=petit
Générez du code pour le modèle de petit code. Le programme et ses définitions statiques
les symboles doivent être à moins de 4 Go les uns des autres. Les pointeurs sont de 64 bits. Les programmes peuvent être
liés statiquement ou dynamiquement. Il s'agit du modèle de code par défaut.
-mcmodel=grand
Générez du code pour le modèle de code large. Cela ne fait aucune hypothèse sur les adresses et
tailles de sections. Les pointeurs sont de 64 bits. Les programmes ne peuvent être liés que de manière statique.
-mstrict-aligner
Ne partez pas du principe que les références de mémoire non alignées sont gérées par le système.
-momit-leaf-frame-pointeur
-mno-omettre-leaf-frame-pointer
Omettez ou conservez le pointeur de cadre dans les fonctions feuilles. Le premier comportement est le
défaut.
-mtls-dialect=desc
Utiliser des descripteurs TLS comme mécanisme de stockage local de thread pour les accès dynamiques de TLS
variables. C'est la valeur par défaut.
-mtls-dialect=traditionnel
Utilisez TLS traditionnel comme mécanisme de stockage local de thread pour les accès dynamiques de TLS
variables.
-mtls-taille=Taille
Spécifiez la taille en bits des décalages TLS immédiats. Les valeurs valides sont 12, 24, 32, 48.
L'option dépend des binutils supérieurs à 2.25.
-mfix-cortex-a53-835769
-mno-fix-cortex-a53-835769
Activez ou désactivez la solution de contournement pour le numéro d'erratum ARM Cortex-A53 835769. Cette
implique l'insertion d'une instruction NOP entre les instructions mémoire et un entier 64 bits
instructions de multiplication-accumulation.
-mfix-cortex-a53-843419
-mno-fix-cortex-a53-843419
Activez ou désactivez la solution de contournement pour le numéro d'erratum ARM Cortex-A53 843419. Cette
La solution de contournement d'erratum est effectuée au moment de la liaison et cela ne fera passer que le drapeau correspondant
à l'éditeur de liens.
-mars=prénom
Précisez le nom de l'architecture cible et, éventuellement, une ou plusieurs fonctionnalités
modificateurs. Cette option a la forme -mars=arche{+[aucune]caractéristique}*.
Les valeurs admissibles pour arche armv8-a, armv8.1-a or indigène.
La valeur armv8.1-a implique armv8-a et permet la prise en charge du compilateur pour l'ARMv8.1
extension architecturale. Il permet notamment la +crc et +à lire caractéristiques.
La valeur indigène est disponible sur AArch64 natif GNU/Linux et oblige le compilateur à
choisissez l'architecture du système hôte. Cette option n'a aucun effet si le compilateur
est incapable de reconnaître l'architecture du système hôte,
Les valeurs admissibles pour caractéristique sont répertoriés dans la sous-section sur
aarch64-modificateurs de fonctionnalités,,-mars et -mcpu Fonctionnalité Modificateurs. En cas de conflit
les modificateurs de fonction sont spécifiés, la fonction la plus à droite est utilisée.
GCC utilise prénom déterminer le type d'instructions qu'il peut émettre lors de la génération
code d'assemblage. Si -Mars est spécifié sans l'un des -mtune or -mcpu étant aussi
spécifié, le code est réglé pour bien fonctionner sur une gamme de processeurs cibles
mettre en œuvre l'architecture cible.
-mtune=prénom
Spécifiez le nom du processeur cible pour lequel GCC doit régler les performances de
le code. Les valeurs autorisées pour cette option sont : générique, Cortex-a53, Cortex-a57,
Cortex-a72, exynos-m1, qdf24xx, tonnerre, xgène1.
De plus, cette option peut spécifier que GCC doit ajuster les performances du code
pour un système big.LITTLE. Les valeurs autorisées pour cette option sont :
cortex-a57.cortex-a53, cortex-a72.cortex-a53.
De plus, sur les systèmes natifs AArch64 GNU/Linux, la valeur indigène est disponible. Cette
L'option oblige le compilateur à choisir l'architecture et à ajuster les performances du
code pour le processeur du système hôte. Cette option n'a aucun effet si le compilateur
est incapable de reconnaître l'architecture du système hôte.
Où aucun de -mtune=, -mcpu= or -mars= sont spécifiés, le code est réglé pour effectuer
bien sur une gamme de processeurs cibles.
Cette option ne peut pas être suffixée par des modificateurs de caractéristiques.
-mcpu=prénom
Spécifiez le nom du processeur cible, éventuellement suffixé par une ou plusieurs fonctionnalités
modificateurs. Cette option a la forme -mcpu=cpu{+[aucune]caractéristique}*, où le permis
valeurs pour cpu sont les mêmes que ceux disponibles pour -mtune. Les valeurs admissibles pour
caractéristique sont documentés dans la sous-section sur aarch64-modificateurs de fonctionnalités,,-mars et
-mcpu Fonctionnalité Modificateurs. Lorsque des modificateurs de caractéristiques en conflit sont spécifiés, le
la fonction la plus à droite est utilisée.
De plus, sur les systèmes natifs AArch64 GNU/Linux, la valeur indigène est disponible. Cette
L'option oblige le compilateur à ajuster les performances du code pour le processeur de
le système hôte. Cette option n'a aucun effet si le compilateur est incapable de reconnaître le
architecture du système hôte.
GCC utilise prénom déterminer le type d'instructions qu'il peut émettre lors de la génération
code assembleur (comme si par -Mars) et pour déterminer le processeur cible pour lequel
accorder pour la performance (comme si par -mtune). Lorsque cette option est utilisée en conjonction avec
-Mars or -mtune, ces options ont préséance sur la partie appropriée de ce
option.
-déménager=un magnifique
Ignorer les décisions de réglage prises par le back-end en réponse à un -mtune= commutateur. le
syntaxe, sémantique et valeurs acceptées pour un magnifique dans cette option ne sont pas garantis
être cohérent d'une version à l'autre.
Cette option est uniquement destinée à être utile lors du développement de GCC.
-mpc-charges littérales relatives
Activer les charges littérales relatives du PC. Si cette option est utilisée, les pools littéraux sont supposés
ont une portée allant jusqu'à 1 Mio et une séquence d'instructions appropriée est utilisée. Cette
l'option n'a aucun impact lorsqu'elle est utilisée avec -mcmodel=minuscule.
-Mars et -mcpu Modificateurs de fonction
Modificateurs de caractéristiques utilisés avec -Mars et -mcpu peut être l'un des suivants et leur
inverses aucunecaractéristique:
crc Activez l'extension CRC. Ceci est activé par défaut pour -mars=armv8.1-a.
Crypto
Activez l'extension Crypto. Cela permet également Advanced SIMD et virgule flottante
des instructions.
fp Activez les instructions à virgule flottante. Ceci est activé par défaut pour toutes les valeurs possibles pour
Options -Mars et -mcpu.
SIMD
Activez les instructions SIMD avancées. Cela active également les instructions à virgule flottante.
Ceci est activé par défaut pour toutes les valeurs possibles pour les options -Mars et -mcpu.
lse Activer les instructions d'extension système volumineux. Ceci est activé par défaut pour
-mars=armv8.1-a.
Autrement dit, Crypto implique SIMD implique fp. Inversement, nofp (ou équivalent,
-mgeneral-regs-uniquement) implique nosimd implique pas de crypto.
Adapteva Épiphanie Options
Ces -m des options sont définies pour Adapteva Epiphany :
-mhal-reg-fichier
N'allouez aucun registre dans la plage "r32"..."r63". Cela permet au code de s'exécuter sur
variantes matérielles dépourvues de ces registres.
-mprefer-short-insn-regs
Allouez de préférence des registres qui permettent la génération d'instructions courtes. Ceci peut
entraîner une augmentation du nombre d'instructions, ce qui peut réduire ou augmenter globalement
taille du code.
-mbranche-coût=num
Fixez le coût des succursales à environ num instructions "simples". Ce coût n'est qu'un
heuristique et n'est pas garanti de produire des résultats cohérents entre les versions.
-mcmove
Activer la génération de mouvements conditionnels.
-mnops=num
Émettre num NOPs avant chaque autre instruction générée.
-mno-soft-cmpsf
Pour les comparaisons en virgule flottante simple précision, émettez une instruction "fsub" et testez
les drapeaux. C'est plus rapide qu'une comparaison de logiciels, mais peut obtenir des résultats incorrects
en présence de NaNs, ou lorsque deux petits nombres différents sont comparés de telle sorte que
leur différence est calculée comme nulle. La valeur par défaut est -msoft-cmpsf, Qui utilise
comparaisons de logiciels plus lentes, mais conformes à la norme IEEE.
-mstack-offset=num
Définit le décalage entre le haut de la pile et le pointeur de pile. Par exemple, une valeur de 8
signifie que les huit octets de la plage "sp+0...sp+7" peuvent être utilisés par les fonctions feuilles
sans allocation de pile. Valeurs autres que 8 or 16 ne sont pas testés et il est peu probable
travail. Notez également que cette option modifie l'ABI ; compiler un programme avec un
un décalage de pile différent de celui avec lequel les bibliothèques ont été compilées ne
travail. Cette option peut être utile si vous souhaitez évaluer si un décalage de pile différent
vous donnerait un meilleur code, mais utiliser en fait un décalage de pile différent pour construire
programmes de travail, il est recommandé de configurer la chaîne d'outils avec les
--avec-stack-offset=num option.
-mno-rond-le plus proche
Faites en sorte que le planificateur suppose que le mode d'arrondi a été défini sur tronquer. Les
la valeur par défaut est -mround-plus proche.
-mlong-appels
Sauf indication contraire par un attribut, supposez que tous les appels pourraient être au-delà de la
plage de décalage des instructions "b" / "bl", et donc charger l'adresse de la fonction
dans un registre avant d'effectuer un appel (autrement direct). C'est la valeur par défaut.
-mappels courts
Sauf indication contraire par un attribut, supposez que tous les appels directs sont dans la plage
des instructions "b" / "bl", utilisez donc ces instructions pour les appels directs. Les
la valeur par défaut est -mlong-appels.
-mpetit16
Supposons que les adresses peuvent être chargées en tant que valeurs non signées de 16 bits. Cela ne s'applique pas à
adresses de fonction pour lesquelles -mlong-appels la sémantique est en vigueur.
-mode-mfp=mode
Définissez le mode dominant de l'unité à virgule flottante. Ceci détermine le flottement-
mode point qui est fourni et attendu au moment de l'appel et du retour de la fonction. Fabrication
ce mode correspond au mode dont vous avez principalement besoin au démarrage de la fonction peut rendre votre
programmes plus petits et plus rapides en évitant les changements de mode inutiles.
mode peut être défini sur l'une des valeurs suivantes :
votre interlocuteur
Tout mode à l'entrée de la fonction est valide, et conservé ou restauré lorsque la fonction
renvoie, et quand il appelle d'autres fonctions. Ce mode est utile pour compiler
bibliothèques ou autres unités de compilation que vous pourriez vouloir incorporer dans différents
programmes avec différents modes FPU dominants, et la commodité de pouvoir
l'utilisation d'un seul fichier objet dépasse la taille et la surcharge de vitesse pour tout mode supplémentaire
changement qui pourrait être nécessaire, par rapport à ce qui serait nécessaire avec un
choix spécifique du mode FPU dominant.
tronquer
C'est le mode utilisé pour les calculs en virgule flottante avec troncature (c'est-à-dire ronde
vers zéro) mode d'arrondi. Cela inclut la conversion de virgule flottante en
entier.
rond-plus proche
C'est le mode utilisé pour les calculs à virgule flottante avec arrondir au plus proche ou
même mode d'arrondi.
int C'est le mode utilisé pour effectuer des calculs d'entiers dans le FPU, par exemple entier
multiplier, ou multiplier-et-accumuler un nombre entier.
La valeur par défaut est -mfp-mode=appelant
-mnosplit-lohi
-mno-postinc
-mno-postmodifier
Ajustements de génération de code qui désactivent, respectivement, le fractionnement des charges 32 bits,
génération d'adresses post-incrémentation et génération d'adresses post-modification. Les
les valeurs par défaut sont msplit-lohi, -mpost-inc et -mpost-modifier.
-mnovect-double
Changez le mode SIMD préféré en mode SI. La valeur par défaut est -mvect-double, Qui utilise
DImode comme mode SIMD préféré.
-max-vect-align=num
L'alignement maximal pour les types de mode vectoriel SIMD. num peut être 4 ou 8. La valeur par défaut est
8. Notez qu'il s'agit d'un changement d'ABI, même si de nombreuses interfaces de fonctions de bibliothèque sont
ne sont pas affectés s'ils n'utilisent pas les modes vectoriels SIMD dans des endroits qui affectent la taille et/ou
alignement des types pertinents.
-msplit-vecmove-tôt
Le vecteur fractionné se déplace en un seul mot avant le rechargement. En théorie, cela peut donner
meilleure allocation des registres, mais jusqu'à présent, l'inverse semble être généralement le cas.
-m1reg-reg
Spécifiez un registre pour maintenir la constante -1, ce qui rend le chargement petit négatif
constantes et certains masques de bits plus rapidement. Valeurs admissibles pour reg r43 et r63,
qui spécifient l'utilisation de ce registre comme registre fixe, et aucun, ce qui signifie que non
registre est utilisé à cette fin. La valeur par défaut est -m1reg-aucun.
ARC Options
Les options suivantes contrôlent la variante d'architecture pour laquelle le code est compilé :
- barillet-shifter
Générez des instructions prises en charge par le levier de vitesses. C'est la valeur par défaut à moins que
-mcpu=ARC601 est en vigueur.
-mcpu=cpu
Définir le type d'architecture, l'utilisation des registres et les paramètres de planification des instructions pour cpu.
Il existe également des options d'alias de raccourci disponibles pour la compatibilité descendante et
commodité. Valeurs prises en charge pour cpu
ARC600
Compiler pour ARC600. Alias : -mA6, -mARC600.
ARC601
Compiler pour ARC601. Alias: -mARC601.
ARC700
Compiler pour ARC700. Alias : -mA7, -mARC700. C'est la valeur par défaut lors de la configuration
avec --avec-cpu=arc700.
-mdpfp
-mdpfp-compact
FPX : génère des instructions FPX à double précision, optimisées pour une implémentation compacte.
-mdpfp-rapide
FPX : génère des instructions FPX à double précision, optimisées pour une mise en œuvre rapide.
-mno-dpfp-lrsr
Désactivez les instructions LR et SR d'utiliser les registres auxiliaires d'extension FPX.
-moi
Générer des instructions arithmétiques étendues. Actuellement, uniquement "divaw", "adds", "subs",
et "sat16" sont pris en charge. Ceci est toujours activé pour -mcpu=ARC700.
-mno-mpy
Ne générez pas d'instructions mpy pour l'ARC700.
-mmul32x16
Générer des instructions de multiplication 32x16 bits et mac.
-mmul64
Générez des instructions mul64 et mulu64. Uniquement valable pour -mcpu=ARC600.
-mnorme
Générer une instruction de norme. C'est la valeur par défaut si -mcpu=ARC700 est en vigueur.
-mspfp
-mspfp-compact
FPX : Générez des instructions FPX Single Precision, optimisées pour une implémentation compacte.
-mspfp-rapide
FPX : Générez des instructions FPX Single Precision, optimisées pour une mise en œuvre rapide.
-msimd
Activez la génération d'instructions ARC SIMD via des fonctions intégrées spécifiques à la cible. Uniquement valable
pour -mcpu=ARC700.
-msoft-float
Cette option est ignorée ; il est fourni à des fins de compatibilité uniquement. Logiciel
le code à virgule flottante est émis par défaut, et cette valeur par défaut peut être remplacée par FPX
les options; mspfp, mspfp-compact, ou mspfp-rapide pour une simple précision, et mdpfp, mdpfp-
compact, ou mdpfp-rapide pour une double précision.
-mswap
Générez des instructions de swap.
Les options suivantes sont transmises à l'assembleur et définissent également le préprocesseur
symboles de macro.
-mdsp-packa
Transmis à l'assembleur pour activer les extensions DSP Pack A. Définit également le
symbole du préprocesseur "__Xdsp_packa".
-mdvbf
Passé à l'assembleur pour permettre l'extension double papillon viterbi. Aussi
définit le symbole du préprocesseur "__Xdvbf".
-mlock
Transmis à l'assembleur pour activer l'extension Locked Load/Store Conditional.
Définit également le symbole du préprocesseur "__Xlock".
-mmac-d16
Passé à l'assembleur. Définit également le symbole du préprocesseur "__Xxmac_d16".
-mmac-24
Passé à l'assembleur. Définit également le symbole du préprocesseur "__Xxmac_24".
-mrtsc
Transmis à l'assembleur pour activer l'extension de compteur d'horodatage 64 bits
instruction. Définit également le symbole du préprocesseur "__Xrtsc".
-mswape
Transmis à l'assembleur pour activer l'instruction d'extension de commande d'octets d'échange.
Définit également le symbole du préprocesseur "__Xswape".
-mtéléphonie
Transmis à l'assembleur pour activer les instructions à opérande double et unique pour
téléphonie. Définit également le symbole du préprocesseur "__Xtelephony".
-mxy
Transmis à l'assembleur pour activer l'extension de mémoire XY. Définit également le
symbole du préprocesseur "__Xxy".
Les options suivantes contrôlent la manière dont le code assembleur est annoté :
-miser
Annotez les instructions de l'assembleur avec les adresses estimées.
-mannoter-aligner
Expliquer quelles considérations d'alignement conduisent à la décision de faire une instruction
court ou long.
Les options suivantes sont transmises à l'éditeur de liens :
-marclinux
Passé à l'éditeur de liens, pour spécifier l'utilisation de l'émulation "arclinux". Cette option
est activé par défaut dans les chaînes d'outils construites pour "arc-linux-uclibc" et
"arceb-linux-uclibc" cible lorsque le profilage n'est pas demandé.
-marclinux_prof
Passé à l'éditeur de liens, pour spécifier l'utilisation de l'émulation "arclinux_prof". Cette
L'option est activée par défaut dans les chaînes d'outils construites pour "arc-linux-uclibc" et
"arceb-linux-uclibc" cible lorsque le profilage est demandé.
Les options suivantes contrôlent la sémantique du code généré :
-mépilogue-cfi
Activer la génération d'informations sur les trames d'appel pour les épilogues.
-mno-épilogue-cfi
Désactivez la génération d'informations de trame d'appel pour les épilogues.
-mlong-appels
Générer des insns d'appels en tant qu'enregistrement d'appels indirects, donnant ainsi accès à l'intégralité
Plage d'adresses de 32 bits.
-appels-moyens
N'utilisez pas une plage d'adressage inférieure à 25 bits pour les appels, qui est le décalage disponible
pour une instruction de branchement et de liaison inconditionnelle. Exécution conditionnelle de la fonction
les appels sont supprimés, pour permettre l'utilisation de la plage de 25 bits, plutôt que la plage de 21 bits
avec branchement-lien conditionnel. Il s'agit de la valeur par défaut pour les chaînes d'outils conçues pour
cibles "arc-linux-uclibc" et "arceb-linux-uclibc".
-mno-sdata
Ne générez pas de références sdata. Il s'agit de la valeur par défaut pour les chaînes d'outils conçues pour
cibles "arc-linux-uclibc" et "arceb-linux-uclibc".
-mucb-mcount
Instrument avec appels mcount tel qu'utilisé dans le code UCB. C'est-à-dire faire le comptage dans l'appelé,
pas l'appelant. Par défaut, l'instrumentation ARC compte dans l'appelant.
-mvolatile-cache
Utilisez des accès mémoire généralement mis en cache pour les références volatiles. C'est la valeur par défaut.
-mno-volatile-cache
Activez le contournement du cache pour les références volatiles.
Les options suivantes affinent la génération de code :
-malign-appel
Effectuez des optimisations d'alignement pour les instructions d'appel.
-mauto-modify-reg
Activer l'utilisation de pré/post modification avec déplacement de registre.
-mbbit-judas
Activer le judas bbit2.
-Mno-Brcc
Cette option désactive une passe spécifique à la cible dans arc_reorg pour générer "BRcc"
instructions. Il n'a aucun effet sur la génération "BRcc" pilotée par le pass combiner.
-mcase-vecteur-pcrel
Utilisez des tables de boîtiers de commutateurs relatives au PC - cela permet de raccourcir les tables de boîtiers. C'est le
par défaut pour -Tu.
-mcompact-casesi
Activer le modèle casei compact. C'est la valeur par défaut pour -Tu.
-mno-cond-exec
Désactivez la passe spécifique à ARCompact pour générer des instructions d'exécution conditionnelles. Dû
pour retarder la planification des créneaux et les interactions entre les numéros d'opérande, les tailles de littéral,
longueurs d'instructions, et la prise en charge de l'exécution conditionnelle, l'indépendant de la cible
pass pour générer une exécution conditionnelle fait souvent défaut, le port ARC a donc conservé un
passe spéciale qui essaie de trouver plus d'exécution conditionnelle générant
opportunités après l'attribution des registres, le raccourcissement des branches et la planification des créneaux de retard
ont été fait. Cette passe améliore généralement, mais pas toujours, les performances et le code
taille, au prix d'un temps de compilation supplémentaire, c'est pourquoi il existe une option pour basculer
il éteint. Si vous rencontrez un problème avec les instructions d'appel dépassant leur décalage autorisé
plage car ils sont conditionnels, vous devriez envisager d'utiliser -appels-moyens
à la place.
-mearly-cbranchesi
Activez l'utilisation de pré-rechargement du modèle cbranchsi.
-mexpand-adddi
Développez "adddi3" et "subdi3" au moment de la génération rtl dans "add.f", "adc" etc.
-charges-mindexées
Activer l'utilisation de charges indexées. Cela peut être problématique car certains optimiseurs
supposer qu'il existe des magasins indexés, ce qui n'est pas le cas.
-mlra
Activez l'allocation de registre local. Ceci est encore expérimental pour ARC, donc par défaut
le compilateur utilise le rechargement standard (c'est-à-dire -mno-lra).
-mlra-priority-aucun
N'indiquez aucune priorité pour les registres cibles.
-mlra-priorité-compact
Indique la priorité du registre cible pour r0..r3 / r12..r15.
-mlra-priority-non compact
Réduire la priorité d'enregistrement cible pour r0..r3 / r12..r15.
-mno-millicode
Lors de l'optimisation de la taille (en utilisant -Tu), des prologues et des épilogues qui doivent sauver ou
restaurer un grand nombre de registres sont souvent raccourcis en utilisant l'appel à un
fonction dans libgcc; c'est ce qu'on appelle un millicode appel. Comme ces appels peuvent poser
des problèmes de performances et/ou causent des problèmes de liaison lors de la liaison de manière non standard,
cette option est fournie pour désactiver la génération d'appels millicode.
-mcode-mixte
Ajustez l'allocation des registres pour aider à la génération d'instructions 16 bits. Cela a généralement
l'effet de la diminution de la taille moyenne de l'instruction tout en augmentant l'instruction
compter.
-mq-classe
Activer les alternatives d'instructions « q ». C'est la valeur par défaut pour -Tu.
-mRcq
Activer la gestion des contraintes Rcq - la plupart de la génération de code court en dépend. C'est
le défaut.
-mRcw
Activer la gestion des contraintes Rcw - ccfsm condexec en dépend principalement. C'est le
défaut.
-msize-level=niveau
Affinez l'optimisation de la taille en ce qui concerne la longueur et l'alignement des instructions. Les
valeurs reconnues pour niveau sont:
0 Aucune optimisation de la taille. Ce niveau est déprécié et traité comme 1.
1 Les instructions courtes sont utilisées de manière opportuniste.
2 De plus, l'alignement des boucles et du code après la suppression des barrières.
3 De plus, l'alignement facultatif des données est supprimé et l'option Os est autorisé.
Cette valeur par défaut est 3 quand -Tu est en vigueur. Sinon, le comportement lorsque ce n'est pas
l'ensemble est équivalent au niveau 1.
-mtune=cpu
Définir les paramètres de planification des instructions pour cpu, annulant tout ce qui est impliqué par -mcpu=.
Valeurs prises en charge pour cpu
ARC600
Réglez pour le processeur ARC600.
ARC601
Réglez pour le processeur ARC601.
ARC700
Syntonisez le processeur ARC700 avec bloc multiplicateur standard.
ARC700-xmac
Accordez le processeur ARC700 avec le bloc XMAC.
ARC725D
Accordez le processeur ARC725D.
ARC750D
Accordez le processeur ARC750D.
-mmultcoût=num
Coût à assumer pour une instruction de multiplication, avec 4 étant égal à une instruction normale.
-munalign-prob-seuil=probabilité
Définir le seuil de probabilité pour le désalignement des branches. Lors du réglage pour ARC700 et
optimisant la vitesse, des branches sans slot de retard rempli sont émises de préférence
non aligné et long, à moins que le profilage n'indique que la probabilité pour la branche de
être pris est ci-dessous probabilité. La valeur par défaut est (REG_BR_PROB_BASE/2), soit 5000.
Les options suivantes sont conservées pour la compatibilité descendante, mais sont désormais obsolètes
et seront supprimés dans une prochaine version :
-margonaute
FPX obsolète.
-mbig-endian
-EB Compilez le code pour les cibles big endian. L'utilisation de ces options est désormais obsolète. Utilisateurs
voulant du code big-endian, devrait utiliser les cibles "arceb-elf32" et "arceb-linux-uclibc"
lors de la construction de la chaîne d'outils, pour laquelle le gros-boutiste est la valeur par défaut.
-mlittle-endian
-LA Compilez le code pour les cibles Little Endian. L'utilisation de ces options est désormais obsolète.
Les utilisateurs qui souhaitent du code little-endian doivent utiliser "arc-elf32" et "arc-linux-uclibc"
cibles lors de la construction de la chaîne d'outils, pour laquelle le petit-boutiste est la valeur par défaut.
-barrel_shifter
Remplacé par - barillet-shifter.
-mdpfp_compact
Remplacé par -mdpfp-compact.
-mdpfp_fast
Remplacé par -mdpfp-rapide.
-mdsp_packa
Remplacé par -mdsp-packa.
-MEA
Remplacé par -moi.
-mmac_24
Remplacé par -mmac-24.
-mmac_d16
Remplacé par -mmac-d16.
-mspfp_compact
Remplacé par -mspfp-compact.
-mspfp_fast
Remplacé par -mspfp-rapide.
-mtune=cpu
VALEURS arc600, arc601, arc700 et arc700-xmac pour cpu sont remplacés par ARC600, ARC601,
ARC700 et ARC700-xmac respectivement
-coût multiple=num
Remplacé par -multcoût.
BRAS Options
Ces -m des options sont définies pour le port ARM :
-mabi=prénom
Générer du code pour l'ABI spécifiée. Les valeurs autorisées sont : apcs-gnu, atpc, AAPCS,
aapcs-linux et jewmmxt.
-mapcs-frame
Générer un cadre de pile conforme à la norme d'appel de procédure ARM pour tous
fonctions, même si cela n'est pas strictement nécessaire à la bonne exécution du code.
Spécification -fomit-frame-pointeur avec cette option, les cadres de pile ne sont pas
généré pour les fonctions feuilles. La valeur par défaut est -mno-apcs-cadre. Cette option est
obsolète.
-cartes
C'est un synonyme de -mapcs-frame et est obsolète.
-mthumb-interfonctionnement
Générez du code qui prend en charge les appels entre les jeux d'instructions ARM et Thumb.
Sans cette option, sur les architectures antérieures à la v5, les deux jeux d'instructions ne peuvent pas être
utilisé de manière fiable dans un seul programme. La valeur par défaut est -mno-pouce-interwork, puisque légèrement
un code plus grand est généré lorsque -mthumb-interfonctionnement est spécifié. Dans les configurations AAPCS
cette option n'a pas de sens.
-mno-sched-prologue
Empêcher la réorganisation des instructions dans le prologue de la fonction, ou la fusion de
ces instructions avec les instructions dans le corps de la fonction. Cela signifie que tout
les fonctions commencent par un ensemble reconnaissable d'instructions (ou en fait l'un d'un choix
à partir d'un petit ensemble de prologues de fonctions différentes), et cette information peut être utilisée pour
localiser le début des fonctions à l'intérieur d'un morceau de code exécutable. La valeur par défaut est
-msched-prologue.
-mfloat-abi=prénom
Spécifie l'ABI à virgule flottante à utiliser. Les valeurs autorisées sont : qualité, que vous pourrez utilisé , softfp et
dur.
Spécification qualité, que vous pourrez utilisé oblige GCC à générer une sortie contenant des appels de bibliothèque pour le flottant-
opérations ponctuelles. softfp permet la génération de code à l'aide de virgule flottante matérielle
instructions, mais utilise toujours les conventions d'appel flottantes. dur permet
génération d'instructions à virgule flottante et utilise des conventions d'appel spécifiques à la FPU.
La valeur par défaut dépend de la configuration cible spécifique. Notez que le flotteur dur
et les ABI flottantes ne sont pas compatibles avec les liaisons ; vous devez compiler tout votre programme avec
la même ABI et un lien avec un ensemble de bibliothèques compatibles.
-mlittle-endian
Générez du code pour un processeur fonctionnant en mode little-endian. C'est la valeur par défaut pour
toutes les configurations standards.
-mbig-endian
Générer du code pour un processeur fonctionnant en mode gros-boutiste ; la valeur par défaut est de compiler
code pour un processeur little-endian.
-mars=prénom
Ceci spécifie le nom de l'architecture ARM cible. GCC utilise ce nom pour
déterminer le type d'instructions qu'il peut émettre lors de la génération du code assembleur. Cette
L'option peut être utilisée en conjonction avec ou à la place de l'option -mcpu= option. Permis
les noms sont: armv2, armv2a, armv3, armv3m, armv4, armv4t, armv5, armv5t, armv5e,
armv5te, armv6, armv6j, armv6t2, armv6z, armv6kz, armv6-m, armv7, armv7-a, armv7-r,
armv7-m, armv7e-m, armv7ve, armv8-a, ARMV8-A + CRC, armv8.1-a, ARMV8.1-A + CRC, jewmmxt,
iwmmxt2, ep9312.
-mars=armv7ve est l'architecture armv7-a avec des extensions de virtualisation.
-mars=armv8-a+crc permet la génération de code pour l'architecture ARMv8-A avec
les extensions CRC32 optionnelles.
-mars=natif oblige le compilateur à détecter automatiquement l'architecture de la construction
ordinateur. À l'heure actuelle, cette fonctionnalité n'est prise en charge que sur GNU/Linux, et pas tous
les architectures sont reconnues. Si la détection automatique échoue, l'option n'a pas
effet.
-mtune=prénom
Cette option spécifie le nom du processeur ARM cible pour lequel GCC doit régler
les performances du code. Pour certaines implémentations ARM, de meilleures performances peuvent être
obtenu en utilisant cette option. Les noms autorisés sont : arm2, arm250, arm3, arm6,
arm60, arm600, arm610, arm620, arm7, bras7m, bras7d, bras7dm, arm7di, arm7dmi, arm70,
arm700, bras700i, arm710, bras710c, arm7100, arm720, arm7500, bras7500fe, arm7tdmi,
arm7tdmi-s, bras710t, bras720t, bras740t, bras fort, bras fort110, bras fort1100,
bras fort1110, arm8, arm810, arm9, bras9e, arm920, bras920t, bras922t, bras946e-s,
bras966e-s, bras968e-s, bras926ej-s, bras940t, arm9tdmi, arm10tdmi, bras1020t, bras1026ej-s,
bras10e, bras1020e, bras1022e, bras1136j-s, bras1136jf-s, mpcore, mpcorenovfp, bras1156t2-s,
bras1156t2f-s, bras1176jz-s, bras1176jzf-s, générique-armv7-a, Cortex-a5, Cortex-a7,
Cortex-a8, Cortex-a9, Cortex-a12, Cortex-a15, Cortex-a17, Cortex-a53, Cortex-a57,
Cortex-a72, cortex-r4, cortex-r4f, cortex-r5, cortex-r7, Cortex-m7, Cortex-m4,
Cortex-m3, Cortex-m1, Cortex-m0, cortex-m0plus, cortex-m1.small-multiplier,
cortex-m0.small-multiplier, cortex-m0plus.petite-multiplication, exynos-m1, qdf24xx,
merveille-pj4, échelle x, jewmmxt, iwmmxt2, ep9312, fa526, fa626, fa606te, fa626te, fmp626,
fa726te, xgène1.
De plus, cette option peut spécifier que GCC doit ajuster les performances du code
pour un système big.LITTLE. Les noms autorisés sont : cortex-a15.cortex-a7,
cortex-a17.cortex-a7, cortex-a57.cortex-a53, cortex-a72.cortex-a53.
-mtune=générique-arche spécifie que GCC doit ajuster les performances pour un mélange de
processeurs dans l'architecture arche. L'objectif est de générer du code qui fonctionne bien sur le
processeurs actuels les plus populaires, en équilibrant les optimisations qui profitent à certains
CPU de la gamme, et éviter les écueils de performances des autres CPU. Les effets de
cette option peut changer dans les futures versions de GCC au fur et à mesure que les modèles de CPU vont et viennent.
-mtune=natif oblige le compilateur à détecter automatiquement le processeur de l'ordinateur de construction. À
présente, cette fonctionnalité n'est prise en charge que sur GNU/Linux, et toutes les architectures ne sont pas
reconnu. Si la détection automatique échoue, l'option n'a aucun effet.
-mcpu=prénom
Ceci spécifie le nom du processeur ARM cible. GCC utilise ce nom pour dériver le
nom de l'architecture ARM cible (comme si spécifié par -Mars) et le processeur ARM
type pour lequel régler pour la performance (comme si spécifié par -mtune). Où cette option
est utilisé en conjonction avec -Mars or -mtune, ces options ont préséance sur les
partie appropriée de cette option.
Les noms autorisés pour cette option sont les mêmes que ceux pour -mtune.
-mcpu=générique-arche est également admissible et équivaut à -mars=arche
-mtune=générique-arche. Voir -mtune pour plus d'information.
-mcpu=natif oblige le compilateur à détecter automatiquement le processeur de l'ordinateur de construction. À
présente, cette fonctionnalité n'est prise en charge que sur GNU/Linux, et toutes les architectures ne sont pas
reconnu. Si la détection automatique échoue, l'option n'a aucun effet.
-mfpu=prénom
Ceci spécifie quel matériel à virgule flottante (ou émulation matérielle) est disponible sur
la cible. Les noms autorisés sont : VFP, vfpv3, vfpv3-fp16, vfpv3-d16, vfpv3-d16-fp16,
vfpv3xd, vfpv3xd-fp16, néon, néon-fp16, vfpv4, vfpv4-d16, fpv4-sp-d16, néon-vfpv4,
fpv5-d16, fpv5-sp-d16, fp-armv8, néon-fp-armv8 et crypto-néon-fp-armv8.
If -msoft-float est spécifié ceci spécifie le format des valeurs à virgule flottante.
Si le matériel à virgule flottante sélectionné inclut l'extension NEON (par ex. -mfpu=néon),
notez que les opérations à virgule flottante ne sont pas générées par la passe d'auto-vectorisation de GCC
à moins que -funsafe-math-optimisations est également précisé. C'est parce que le matériel NEON
n'implémente pas complètement la norme IEEE 754 pour l'arithmétique à virgule flottante (en
des valeurs dénormalisées particulières sont traitées comme zéro), de sorte que l'utilisation d'instructions NEON peut
entraîner une perte de précision.
-format-mfp16=prénom
Spécifiez le format du type à virgule flottante demi-précision "__fp16". Permis
les noms sont aucun, heeee et alternative; la valeur par défaut est aucun, auquel cas le "__fp16"
le type n'est pas défini.
-mstructure-taille-limite=n
Les tailles de toutes les structures et de tous les syndicats sont arrondies au multiple supérieur du nombre de
bits définis par cette option. Les valeurs autorisées sont 8, 32 et 64. La valeur par défaut
varie pour les différentes chaînes d'outils. Pour la chaîne d'outils ciblée COFF, la valeur par défaut est
8. Une valeur de 64 n'est autorisée que si l'ABI sous-jacente la prend en charge.
La spécification d'un plus grand nombre peut produire un code plus rapide et plus efficace, mais peut également
augmenter la taille du programme. Des valeurs différentes sont potentiellement incompatibles.
Le code compilé avec une valeur ne peut pas nécessairement s'attendre à fonctionner avec du code ou des bibliothèques
compilés avec une autre valeur, s'ils échangent des informations à l'aide de structures ou d'unions.
-mabort-on-norturn
Générer un appel à la fonction "abort" à la fin d'une fonction "noreturn". Il est
exécuté si la fonction essaie de revenir.
-mlong-appels
-mno-long-appels
Indique au compilateur d'effectuer des appels de fonction en chargeant d'abord l'adresse du
fonction dans un registre puis en effectuant un appel de sous-programme sur ce registre. Cette
est nécessaire si la fonction cible se situe en dehors de l'adressage de 64 mégaoctets
plage de la version basée sur le décalage de l'instruction d'appel de sous-programme.
Même si ce commutateur est activé, tous les appels de fonction ne sont pas transformés en appels longs.
L'heuristique est que les fonctions statiques, les fonctions qui ont le "short_call"
attribut, fonctions qui sont à l'intérieur de la portée d'une directive "#pragma no_long_calls",
et les fonctions dont les définitions ont déjà été compilées dans le courant
unité de compilation ne sont pas transformés en appels longs. Les exceptions à cette règle sont que
définitions de fonctions faibles, fonctions avec l'attribut "long_call" ou la "section"
attribut et fonctions qui sont dans la portée d'une directive "#pragma long_calls"
sont toujours transformés en longs appels.
Cette fonctionnalité n'est pas activée par défaut. En précisant -mno-long-appels restaure la
comportement par défaut, tout comme le fait de placer les appels de fonction dans le cadre d'un "#pragma
long_calls_off". Notez que ces commutateurs n'ont aucun effet sur la façon dont le compilateur
génère du code pour gérer les appels de fonction via des pointeurs de fonction.
-msingle-pic-base
Traitez le registre utilisé pour l'adressage PIC en lecture seule, plutôt que de le charger dans le
prologue pour chaque fonction. Le système d'exécution est responsable de l'initialisation de ce
registre avec une valeur appropriée avant le début de l'exécution.
-mpic-register=reg
Spécifiez le registre à utiliser pour l'adressage PIC. Pour le cas de base PIC standard, le
la valeur par défaut est tout registre approprié déterminé par le compilateur. Pour un cas de base PIC unique,
la valeur par défaut est R9 si la cible est basée sur EABI ou si la vérification de la pile est activée, sinon le
la valeur par défaut est R10.
-MPIC-data-is-text-relalative
Supposons que chaque segment de données est relatif au segment de texte au moment du chargement. Par conséquent,
il permet d'adresser des données à l'aide d'opérations relatives au PC. Cette option est activée par défaut
pour les cibles autres que VxWorks RTP.
-mpoke-nom-de-fonction
Écrivez le nom de chaque fonction dans la section de texte, précédant directement la fonction
prologue. Le code généré est similaire à ceci :
t0
.ascii "arm_poke_function_name", 0
.aligner
t1
.mot 0xff000000 + (t1 - t0)
arm_poke_function_name
mov ip, sp
stmfd sp !, {fp, ip, lr, pc}
sous fp, ip, #4
Lors de l'exécution d'un backtrace de pile, le code peut inspecter la valeur de "pc" stockée dans "fp +
0". Si la fonction de trace regarde alors à l'emplacement "pc - 12" et les 8 premiers bits sont
set, alors nous savons qu'il y a un nom de fonction intégré précédant immédiatement ce
emplacement et a la longueur "((pc[-3]) & 0xff000000)".
-mpouce
-marm
Choisissez entre générer du code qui s'exécute dans les états ARM et Thumb. La valeur par défaut pour
la plupart des configurations consiste à générer du code qui s'exécute dans l'état ARM, mais la valeur par défaut
peut être modifié en configurant GCC avec le --avec-mode=Etat option de configuration.
Vous pouvez également outrepasser les modes ARM et Thumb pour chaque fonction en utilisant le
"target("thumb")" et "target("arm")" attributs de fonction ou pragmas.
-cadre mtpcs
Générez un cadre de pile conforme à la norme d'appel de procédure Thumb pour
toutes les fonctions non-feuille. (Une fonction feuille est une fonction qui n'appelle aucune autre
fonctions.) La valeur par défaut est -mno-tpcs-cadre.
-mtpcs-feuille-cadre
Générez un cadre de pile conforme à la norme d'appel de procédure Thumb pour
toutes les fonctions feuilles. (Une fonction feuille est une fonction qui n'appelle aucune autre fonction.)
La valeur par défaut est -mno-apcs-feuille-cadre.
-mcalle-super-interworking
Donne à toutes les fonctions visibles de l'extérieur dans le fichier en cours de compilation une instruction ARM
set header qui passe en mode Thumb avant d'exécuter le reste de la fonction.
Cela permet à ces fonctions d'être appelées à partir de code sans interfonctionnement. Cette option est
non valide dans les configurations AAPCS car l'interfonctionnement est activé par défaut.
-mcaller-super-interfonctionnement
Permet aux appels via des pointeurs de fonction (y compris les fonctions virtuelles) de s'exécuter correctement
indépendamment du fait que le code cible a été compilé pour l'interfonctionnement ou non.
Il y a un petit surcoût dans le coût d'exécution d'un pointeur de fonction si cette option
est autorisé. Cette option n'est pas valide dans les configurations AAPCS car l'interfonctionnement est
activé par défaut.
-mtp=prénom
Spécifiez le modèle d'accès pour le pointeur de stockage local de thread. Les modèles valides sont
qualité, que vous pourrez utilisé , qui génère des appels à "__aeabi_read_tp", cp15, qui récupère le fil
pointeur de "cp15" directement (pris en charge dans l'architecture arm6k), et auto, Qui
utilise la meilleure méthode disponible pour le processeur sélectionné. Le paramètre par défaut est
auto.
-mtls-dialecte=dialecte
Spécifiez le dialecte à utiliser pour accéder au stockage local des threads. Deux dialectes sont
prise en charge---gnou et gnu2L’ gnou dialecte sélectionne le schéma GNU d'origine pour
prenant en charge les modèles TLS dynamiques locaux et mondiaux. Les gnu2 dialecte sélectionne le GNU
schéma de descripteur, qui offre de meilleures performances pour les bibliothèques partagées. Le GNU
le schéma de descripteur est compatible avec le schéma d'origine, mais nécessite de nouveaux
prise en charge de l'assembleur, de l'éditeur de liens et de la bibliothèque. Les modèles TLS d'exécution initiaux et locaux sont
pas affecté par cette option et utilisez toujours le schéma d'origine.
-mword-relocalisations
Ne générer des relocalisations absolues que sur des valeurs de la taille d'un mot (c'est-à-dire R_ARM_ABS32). C'est
activé par défaut sur les cibles (uClinux, SymbianOS) où le runtime loader impose
cette restriction, et quand -fpic or -fPIC est spécifié.
-mfix-cortex-m3-ldrd
Certains cœurs Cortex-M3 peuvent provoquer une corruption des données lorsque les instructions "ldrd" avec
des registres de destination et de base qui se chevauchent sont utilisés. Cette option évite de générer
ces instructions. Cette option est activée par défaut lorsque -mcpu=cortex-m3 is
spécifié.
-accès munaligné
-mno-accès non aligné
Active (ou désactive) la lecture et l'écriture de valeurs 16 et 32 bits à partir d'adresses
qui ne sont pas alignés sur 16 ou 32 bits. Par défaut, l'accès non aligné est désactivé pour tous
pré-ARMv6 et toutes les architectures ARMv6-M, et activé pour toutes les autres architectures. Si
l'accès non aligné n'est pas activé, puis les mots dans les structures de données compressées sont accédés a
octet à la fois.
L'attribut ARM "Tag_CPU_unaligned_access" est défini dans le fichier objet généré sur
soit vrai ou faux, selon le réglage de cette option. Si accès non aligné
est activé, le symbole du préprocesseur "__ARM_FEATURE_UNALIGNED" est également défini.
-mnéon-pour-64bits
Permet d'utiliser Neon pour gérer les opérations scalaires 64 bits. Ceci est désactivé par défaut
étant donné que le coût de déplacement des données des registres principaux vers Neon est élevé.
-mslow-flash-données
Supposons que le chargement des données à partir de la mémoire flash soit plus lent que la récupération des instructions. Donc littéral
la charge est minimisée pour de meilleures performances. Cette option n'est prise en charge que lorsque
compilation pour le profil M ARMv7 et désactivé par défaut.
-masm-syntaxe-unifiée
Supposons que l'assembleur en ligne utilise la syntaxe asm unifiée. La valeur par défaut est actuellement désactivée
ce qui implique une syntaxe divisée. Cette option n'a aucun impact sur Thumb2. Cependant, cela peut
changement dans les futures versions de GCC. La syntaxe divisée doit être considérée comme obsolète.
-mrestreignez-le
Restreint la génération de blocs informatiques pour se conformer aux règles d'ARMv8. Les blocs informatiques peuvent
ne contiennent qu'une seule instruction de 16 bits à partir d'un ensemble sélectionné d'instructions. Cette
L'option est activée par défaut pour le mode ARMv8 Thumb.
-mprint-tune-info
Imprimez les informations de réglage du processeur sous forme de commentaire dans le fichier assembleur. C'est une option utilisée
uniquement pour les tests de régression du compilateur et non destiné à une utilisation ordinaire dans
code de compilation. Cette option est désactivée par défaut.
AVR Options
Ces options sont définies pour les implémentations AVR :
-mmcu=mcu
Spécifiez les architectures de jeu d'instructions Atmel AVR (ISA) ou le type de MCU.
La valeur par défaut pour cette option est @tie{}avr2.
GCC prend en charge les appareils AVR et ISA suivants :
"avr2"
Appareils "classiques" avec jusqu'à 8@tie{}Ko de mémoire de programme. mcu@tie{}= "attiny22",
"attiny26", "at90c8534", "at90s2313", "at90s2323", "at90s2333", "at90s2343",
"at90s4414", "at90s4433", "at90s4434", "at90s8515", "at90s8535".
"avr25"
Appareils "classiques" avec jusqu'à 8@tie{}KiB de mémoire de programme et avec le "MOVW"
instruction. 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".
"avr3"
Appareils "classiques" avec 16@tie{}KiB jusqu'à 64@tie{}KiB de mémoire de programme.
mcu@tie{}= "at43usb355", "at76c711".
"avr31"
Appareils "classiques" avec 128@tie{}KiB de mémoire de programme. mcu@tie{}= "atmega103",
"à43usb320".
"avr35"
Appareils "classiques" avec 16@tie{}KiB jusqu'à 64@tie{}KiB de mémoire programme et avec
l'instruction "MOVW". mcu@tie{}= "ata5505", "ata6617c", "ata664251",
"atmega16u2", "atmega32u2", "atmega8u2", "attiny1634", "attiny167", "at90usb162",
"à90usb82".
"avr4"
Appareils « améliorés » avec jusqu'à 8@tie{}Ko de mémoire de programme. 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".
"avr5"
Appareils « améliorés » avec 16@tie{}KiB jusqu'à 64@tie{}KiB de mémoire de programme.
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".
"avr51"
Appareils « améliorés » avec 128@tie{}KiB de mémoire de programme. mcu@tie{}= "atmega128",
"atmega128a", "atmega128rfa1", "atmega128rfr2", "atmega1280", "atmega1281",
"atmega1284", "atmega1284p", "atmega1284rfr2", "at90can128", "at90usb1286",
"à90usb1287".
"avr6"
Appareils "améliorés" avec PC 3 octets, c'est-à-dire avec plus de 128@tie{}KiB de programme
mémoire. mcu@tie{}= "atmega256rfr2", "atmega2560", "atmega2561", "atmega2564rfr2".
"avrxmega2"
Appareils "XMEGA" avec plus de 8@tie{}KiB et jusqu'à 64@tie{}KiB de mémoire de programme.
mcu@tie{}= "atxmega16a4", "atxmega16a4u", "atxmega16c4", "atxmega16d4",
"atxmega16e5", "atxmega32a4", "atxmega32a4u", "atxmega32c3", "atxmega32c4",
"atxmega32d3", "atxmega32d4", "atxmega32e5", "atxmega8e5".
"avrxmega4"
Appareils "XMEGA" avec plus de 64@tie{}KiB et jusqu'à 128@tie{}KiB de programme
mémoire. mcu@tie{}= "atxmega64a3", "atxmega64a3u", "atxmega64a4u", "atxmega64b1",
"atxmega64b3", "atxmega64c3", "atxmega64d3", "atxmega64d4".
"avrxmega5"
Appareils "XMEGA" avec plus de 64@tie{}KiB et jusqu'à 128@tie{}KiB de programme
mémoire et plus de 64@tie{}Ko de RAM. mcu@tie{}= "atxmega64a1",
"atxmega64a1u".
"avrxmega6"
Appareils "XMEGA" avec plus de 128@tie{}Ko de mémoire de programme. mcu@cravate{}=
"atxmega128a3", "atxmega128a3u", "atxmega128b1", "atxmega128b3", "atxmega128c3",
"atxmega128d3", "atxmega128d4", "atxmega192a3", "atxmega192a3u", "atxmega192c3",
"atxmega192d3", "atxmega256a3", "atxmega256a3b", "atxmega256a3bu",
"atxmega256a3u", "atxmega256c3", "atxmega256d3", "atxmega384c3", "atxmega384d3".
"avrxmega7"
Appareils "XMEGA" avec plus de 128@tie{}KiB de mémoire de programme et plus de
64@tie{}Ko de RAM. mcu@tie{}= "atxmega128a1", "atxmega128a1u", "atxmega128a4u".
"avrtiny"
"TINY" Petits périphériques avec 512@tie{}B jusqu'à 4@tie{}KiB de mémoire de programme.
mcu@tie{}= "attiny10", "attiny20", "attiny4", "attiny40", "attiny5", "attiny9".
"avr1"
Cet ISA est implémenté par le noyau AVR minimal et pris en charge pour l'assembleur uniquement.
mcu@tie{}= "attiny11", "attiny12", "attiny15", "attiny28", "at90s1200".
-maccumulate-args
Accumuler les arguments de fonction sortants et acquérir/libérer l'espace de pile nécessaire pour
arguments de fonction sortants une fois dans le prologue/épilogue de la fonction. Sans cette option,
les arguments sortants sont poussés avant d'appeler une fonction et sautés après.
Popping les arguments après l'appel de fonction peut être coûteux sur AVR de sorte que
accumuler l'espace de la pile peut conduire à des exécutables plus petits car les arguments ont besoin
ne pas être retiré de la pile après un tel appel de fonction.
Cette option peut conduire à une taille de code réduite pour les fonctions qui effectuent plusieurs appels à
fonctions qui obtiennent leurs arguments sur la pile comme des appels à des fonctions de type printf.
-mbranche-coût=sables moins coûteux
Définissez les coûts de succursale pour les instructions de succursale conditionnelles sur sables moins coûteux. Valeurs raisonnables
pour sables moins coûteux sont de petits entiers non négatifs. Le coût de branche par défaut est 0.
-mcall-prologues
Les fonctions prologues/épilogues sont développées en tant qu'appels aux sous-programmes appropriés. Code
la taille est plus petite.
-menthe8
Supposons que "int" soit un entier de 8 bits. Cela affecte les tailles de tous les types : un "car" vaut 1
octet, un "int" est de 1 octet, un "long" est de 2 octets et "long long" est de 4 octets. S'il te plaît
notez que cette option n'est pas conforme aux normes C, mais elle se traduit par un plus petit
taille du code.
-mn-flash=num
Supposons que la mémoire flash a une taille de num fois 64@tie{}Ko.
-mno-interruptions
Le code généré n'est pas compatible avec les interruptions matérielles. La taille du code est plus petite.
-mrelax
Essayez de remplacer "CALL" resp. Instruction "JMP" par le plus court "RCALL" resp. "RJMP"
instructions le cas échéant. Réglage -mrelax ajoute juste le --mlink-relax option à la
la ligne de commande de l'assembleur et le --se détendre option à la ligne de commande de l'éditeur de liens.
La relaxation de saut est effectuée par l'éditeur de liens car les décalages de saut ne sont pas connus avant
le code est localisé. Par conséquent, le code assembleur généré par le compilateur est le même,
mais les instructions de l'exécutable peuvent différer des instructions de l'assembleur
code.
La relaxation doit être activée si des stubs de liaison sont nécessaires, voir la section sur "EIND" et
talons de l'éditeur de liens ci-dessous.
-mrmw
Supposons que l'appareil prend en charge les instructions de lecture-modification-écriture "XCH", "LAC", "LAS"
et "LAT".
-msp8
Traiter le registre de pointeur de pile comme un registre à 8 bits, c'est-à-dire assumer l'octet de poids fort de
le pointeur de pile est zéro. En général, vous n'avez pas besoin de définir cette option à la main.
Cette option est utilisée en interne par le compilateur pour sélectionner et construire des multilibs pour
architectures "avr2" et "avr25". Ces architectures mélangent des appareils avec et sans
"SPH". Pour tout réglage autre que -mmcu=avr2 or -mmcu=avr25 le pilote du compilateur ajoute
ou supprime cette option de la ligne de commande du compilateur proprement dit, car le compilateur
sait alors si le périphérique ou l'architecture a un pointeur de pile de 8 bits et donc pas de "SPH"
s'inscrire ou non.
-mstrict-X
Utilisez le registre d'adresses "X" d'une manière proposée par le matériel. Cela signifie que "X" est
utilisé uniquement dans l'adressage indirect, post-incrémental ou pré-décrémenté.
Sans cette option, le registre "X" peut être utilisé de la même manière que "Y" ou "Z" qui
puis est émulé par des instructions supplémentaires. Par exemple, charger une valeur avec
Adressage "X+const" avec un petit "const < 64" non négatif à un registre Rn is
interprété comme
adw r26, const ; X += const
ld , X ; = *X
sbiw r26, const ; X -= const
-mtiny-pile
Ne modifiez que les 8@tie{}bits inférieurs du pointeur de pile.
-nodevicelib
Ne pas établir de lien avec la bibliothèque spécifique à l'appareil d'AVR-LibC "libdev.a".
-Waddr-espace-convertir
Avertir des conversions entre les espaces d'adressage dans le cas où l'adresse résultante
l'espace n'est pas contenu dans l'espace d'adressage entrant.
"EIND" et appareils avec plus de 128 Ki-octets de Flash
Les pointeurs dans l'implémentation ont une largeur de 16@tie{}bits. L'adresse d'une fonction ou d'un label
est représenté sous forme d'adresse de mot afin que les sauts et appels indirects puissent cibler n'importe quel code
adresse de l'ordre de 64@tie{}mots Ki.
Afin de faciliter le saut indirect sur les appareils avec plus de 128@tie{}Ki octets de
l'espace mémoire du programme, il existe un registre de fonction spécial appelé "EIND" qui sert de
partie la plus significative de l'adresse cible lorsque les instructions "EICAL" ou "EIJMP" sont
utilisé.
Les sauts et appels indirects sur ces appareils sont traités comme suit par le compilateur et sont
sous réserve de certaines limitations :
* Le compilateur ne définit jamais "EIND".
* Le compilateur utilise implicitement "EIND" dans les instructions "EICALL"/"EIJMP" ou peut lire
"EIND" directement afin d'émuler un appel/saut indirect au moyen d'un "RET"
instruction.
* Le compilateur suppose que "EIND" ne change jamais pendant le code de démarrage ou pendant le
application. En particulier, "EIND" n'est pas enregistré/restauré en fonction ou en interruption
prologue/épilogue de routine de service.
* Pour les appels indirects aux fonctions et goto calculé, l'éditeur de liens génère bouts. Talons
sont des tapis de saut parfois aussi appelés trampolines. Ainsi, l'appel/le saut indirect passe à
un tel talon. Le stub contient un saut direct vers l'adresse souhaitée.
* La relaxation de l'éditeur de liens doit être activée pour que l'éditeur de liens génère correctement les stubs
dans toutes les situations. Voir l'option du compilateur -mrelax et l'option de l'éditeur de liens --se détendre.
Il y a des cas extrêmes où l'éditeur de liens est censé générer des stubs mais abandonne
sans relaxation et sans message d'erreur utile.
* Le script de l'éditeur de liens par défaut est arrangé pour le code avec "EIND = 0". Si le code est supposé
pour travailler pour une configuration avec "EIND != 0", un script d'éditeur de liens personnalisé doit être utilisé dans l'ordre
pour placer les sections dont le nom commence par ".trampolines" dans le segment où
"EIND" pointe vers.
* Le code de démarrage de libgcc ne définit jamais "EIND". Notez que le code de démarrage est un mélange
de code de libgcc et AVR-LibC. Pour l'impact d'AVR-LibC sur "EIND", voir l'AVR-
Manuel d'utilisation de LibC ("http://nongnu.org/avr-libc/user-manual/").
* Il est légitime que le code de démarrage spécifique à l'utilisateur configure "EIND" tôt, par exemple en
moyen de code d'initialisation situé dans la section ".init3". Un tel code s'exécute avant
code de démarrage général qui initialise la RAM et appelle les constructeurs, mais après le bit de
code de démarrage d'AVR-LibC qui définit "EIND" sur le segment où se trouve la table vectorielle
situé.
#comprendre
vide statique
__attribute__((section(".init3"),nu,utilisé,no_instrument_function))
init3_set_eind (vide)
{
__asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t"
"out %i0,r24" :: "n" (&EIND) : "r24","memory");
}
Le symbole "__trampolines_start" est défini dans le script de l'éditeur de liens.
* Les stubs sont générés automatiquement par l'éditeur de liens si les deux conditions suivantes sont
rencontré:
-
(court pour générer bouts) ainsi:
LDI r24, lo8(gs( ))
LDI r25, hi8(gs( ))
-
au contrôle le segment où se trouvent les talons.
* Le compilateur émet de tels modificateurs « gs » pour les étiquettes de code dans les situations suivantes :
-
-
- -mcall-prologues>
option de ligne de commande.
-
tableaux, vous pouvez spécifier le -fno-jump-tables option de ligne de commande.
-
-
* Sauter à des adresses non symboliques comme c'est le cas ne sauraient prise en charge:
int main (void)
{
/* Fonction d'appel à l'adresse de mot 0x2 */
return ((int (*) (void)) 0x2) ();
}
Au lieu de cela, un stub doit être configuré, c'est-à-dire que la fonction doit être appelée via un symbole
("func_4" dans l'exemple) :
int main (void)
{
extern int func_4 (vide);
/* Fonction d'appel à l'adresse d'octet 0x4 */
return fun_4();
}
et l'application soit liée à -Wl,--defsym,func_4=0x4. Alternativement, "func_4"
peut être défini dans le script de l'éditeur de liens.
Gestion des registres de fonctions spéciales "RAMPD", "RAMPX", "RAMPY" et "RAMPZ"
Certains appareils AVR prennent en charge des mémoires supérieures à la plage de 64@tie{}KiB accessible
avec des pointeurs 16 bits. Pour accéder aux emplacements de mémoire en dehors de cette plage de 64@tie{}KiB, le
le contenu d'un registre "RAMP" est utilisé comme partie haute de l'adresse : Le "X", "Y", "Z"
le registre d'adresses est concaténé avec la fonction spéciale "RAMPX", "RAMPY", "RAMPZ"
inscrivez-vous, respectivement, pour obtenir une adresse large. De même, "RAMPD" est utilisé avec
adressage direct.
* Le code de démarrage initialise les registres de fonction spéciale "RAMP" à zéro.
* Si un AVR Nommé Adresse Espaces, nommés propos espace autre que générique ou "__flash" est
utilisé, alors "RAMPZ" est défini comme nécessaire avant l'opération.
* Si l'appareil prend en charge une RAM supérieure à 64@tie{}KiB et que le compilateur doit changer
"RAMPZ" pour accomplir une opération, "RAMPZ" est remis à zéro après l'opération.
* Si l'appareil est livré avec un registre "RAMP" spécifique, le prologue/épilogue ISR
enregistre/restaure ce SFR et l'initialise avec zéro au cas où le code ISR pourrait
(implicitement) l'utiliser.
* La RAM supérieure à 64@tie{}KiB n'est pas prise en charge par GCC pour les cibles AVR. Si tu utilises
assembleur en ligne pour lire à partir d'emplacements en dehors de la plage d'adresses 16 bits et modifier
l'un des registres "RAMP", vous devez le remettre à zéro après l'accès.
Macros intégrées à l'AVR
GCC définit plusieurs macros intégrées afin que le code utilisateur puisse tester la présence ou
absence de fonctionnalités. Presque toutes les macros intégrées suivantes sont déduites de l'appareil
capacités et ainsi déclenchée par la -mmcu= option de ligne de commande.
Pour encore plus de macros intégrées spécifiques à l'AVR, voir AVR Nommé Adresse Les espaces et AVR Encastré
Les fonctions.
"__AVR_ARCH__"
Macro intégrée qui se résout en un nombre décimal qui identifie l'architecture et
Depend de -mmcu=mcu option. Les valeurs possibles sont :
2, 25, 3, 31, 35, 4, 5, 51, 6
pour mcu="avr2", "avr25", "avr3", "avr31", "avr35", "avr4", "avr5", "avr51", "avr6",
respectivement et
100, 102, 104, 105, 106, 107
pour mcu="avrtiny", "avrxmega2", "avrxmega4", "avrxmega5", "avrxmega6", "avrxmega7",
respectivement. Si mcu spécifie un périphérique, cette macro intégrée est définie en conséquence. Pour
exemple, avec -mmcu=atmega8 la macro est définie à 4.
"__AVR_Appareil__"
Paramètres -mmcu=dispositif définit cette macro intégrée qui reflète le nom de l'appareil. Pour
Par exemple, -mmcu=atmega8 définit la macro intégrée "__AVR_ATmega8__", -mmcu=attiny261a
définit "__AVR_ATtiny261A__", etc.
Les noms des macros intégrées suivent le schéma "__AVR_Appareil__" où Appareil est le
nom de l'appareil selon le manuel d'utilisation de l'AVR. La différence entre Appareil dans le intégré
macro et dispositif in -mmcu=dispositif est que ce dernier est toujours en minuscule.
If dispositif n'est pas un appareil mais seulement une architecture centrale comme avr51, cette macro n'est pas
Défini.
"__AVR_DEVICE_NAME__"
Paramètres -mmcu=dispositif définit cette macro intégrée au nom de l'appareil. Par exemple,
avec -mmcu=atmega8 la macro est définie sur "atmega8".
If dispositif n'est pas un appareil mais seulement une architecture centrale comme avr51, cette macro n'est pas
Défini.
"__AVR_XMEGA__"
L'appareil/l'architecture appartient à la famille d'appareils XMEGA.
"__AVR_HAVE_ELPM__"
L'appareil a l'instruction "ELPM".
"__AVR_HAVE_ELPMX__"
L'appareil a le "ELPM Rn,Z" et "ELPM Rn,Z+" des instructions.
"__AVR_HAVE_MOVW__"
L'appareil dispose de l'instruction "MOVW" pour effectuer des mouvements de registre-registre de 16 bits.
"__AVR_HAVE_LPMX__"
L'appareil a le "LPM Rn,Z" et "LPM Rn,Z+" des instructions.
"__AVR_HAVE_MUL__"
L'appareil dispose d'un multiplicateur matériel.
"__AVR_HAVE_JMP_CALL__"
L'appareil dispose des instructions "JMP" et "CALL". C'est le cas des appareils avec
au moins 16@tie{}Ko de mémoire programme.
"__AVR_HAVE_EIJMP_EICALL__"
"__AVR_3_BYTE_PC__"
L'appareil a les instructions "EIJMP" et "EICAL". C'est le cas des appareils
avec plus de 128@tie{}Ko de mémoire programme. Cela signifie également que le programme
compteur (PC) a une largeur de 3@tie{}octets.
"__AVR_2_BYTE_PC__"
Le compteur de programme (PC) a une largeur de 2@tie{}octets. C'est le cas pour les appareils jusqu'à
128@tie{}Ko de mémoire de programme.
"__AVR_HAVE_8BIT_SP__"
"__AVR_HAVE_16BIT_SP__"
Le registre du pointeur de pile (SP) est traité comme un registre à 8 bits respectivement 16 bits par
le compilateur. La définition de ces macros est affectée par -mtiny-pile.
"__AVR_HAVE_SPH__"
"__AVR_SP8__"
L'appareil possède le registre de fonction spéciale SPH (high part of stack pointer) ou a
un pointeur de pile de 8 bits, respectivement. La définition de ces macros est affectée par
-mmcu= et dans les cas de -mmcu=avr2 et -mmcu=avr25 aussi par -msp8.
"__AVR_HAVE_RAMPD__"
"__AVR_HAVE_RAMPX__"
"__AVR_HAVE_RAMPY__"
"__AVR_HAVE_RAMPZ__"
L'appareil dispose du registre de fonction spéciale "RAMPD", "RAMPX", "RAMPY", "RAMPZ",
respectivement.
"__NO_INTERRUPTS__"
Cette macro reflète le -mno-interruptions option de ligne de commande.
"__AVR_ERRATA_SKIP__"
"__AVR_ERRATA_SKIP_JMP_CALL__"
Certains appareils AVR (AT90S8515, ATmega103) ne doivent pas sauter les instructions 32 bits en raison d'un
erratum matériel. Les instructions de saut sont "SBRS", "SBRC", "SBIS", "SBIC" et "CPSE".
La deuxième macro n'est définie que si "__AVR_HAVE_JMP_CALL__" est également défini.
"__AVR_ISA_RMW__"
L'appareil dispose d'instructions de lecture-modification-écriture (XCH, LAC, LAS et LAT).
"__AVR_SFR_OFFSET__=décalage"
Instructions pouvant adresser directement les registres de fonctions spéciales d'E/S comme "IN",
"OUT", "SBI", etc. peut utiliser une adresse différente comme si elle était adressée par une instruction à
accéder à la RAM comme "LD" ou "STS". Ce décalage dépend de l'architecture de l'appareil et a
à soustraire de l'adresse RAM afin d'obtenir l'adresse I/O@tie{} respective.
"__AVEC_AVRLIBC__"
Le compilateur est configuré pour être utilisé avec AVR-Libc. Voir le --avec-avrlibc
option de configuration.
Blackfin Options
-mcpu=cpu[-sirévision]
Spécifie le nom du processeur Blackfin cible. Actuellement, cpu peut être l'un des
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.
Le facultatif sirévision spécifie la révision silicium de la cible Blackfin
processeur. Toutes les solutions de contournement disponibles pour la révision de silicium ciblée sont activées.
If sirévision is aucun, aucune solution de contournement n'est activée. Si sirévision is tout, tout
les solutions de contournement pour le processeur ciblé sont activées. La macro "__SILICON_REVISION__"
est défini à deux chiffres hexadécimaux représentant les nombres majeurs et mineurs dans le
révision du silicium. Si sirévision is aucun, le "__SILICON_REVISION__" n'est pas défini.
If sirévision is tout, le "__SILICON_REVISION__" est défini sur 0xffff. Si ce
facultatif sirévision n'est pas utilisé, GCC suppose la dernière révision connue du silicium du
processeur Blackfin ciblé.
GCC définit une macro de préprocesseur pour le spécifié cpu. Pour l' bfin-elfe chaîne d'outils,
cette option provoque la liaison du BSP matériel fourni par libgloss si -msim is
pas donné.
Sans cette option, bf532 est utilisé comme processeur par défaut.
Notez que la prise en charge de bf561 est incomplet. Pour bf561, seule la macro du préprocesseur est
Défini.
-msim
Spécifie que le programme sera exécuté sur le simulateur. Cela provoque le simulateur
BSP fourni par libgloss pour être lié. Cette option n'a d'effet que pour bfin-elfe
chaîne d'outils. Certaines autres options, telles que -mi-bibliothèque-partagée et -mfdpic, impliquer
-msim.
-momit-leaf-frame-pointeur
Ne gardez pas le pointeur de cadre dans un registre pour les fonctions feuilles. Cela évite le
instructions pour enregistrer, configurer et restaurer les pointeurs de trame et créer un registre supplémentaire
disponible dans les fonctions feuilles. L'option -fomit-frame-pointeur supprime le cadre
pointeur pour toutes les fonctions, ce qui peut rendre le débogage plus difficile.
-mspecld-anomalie
Lorsqu'il est activé, le compilateur s'assure que le code généré ne contient pas
charges spéculatives après les instructions de saut. Si cette option est utilisée,
"__WORKAROUND_SPECULATIVE_LOADS" est défini.
-mno-specld-anomalie
Ne générez pas de code supplémentaire pour empêcher les charges spéculatives de se produire.
-mcsync-anomalie
Lorsqu'il est activé, le compilateur s'assure que le code généré ne contient pas de CSYNC ou
Instructions SSYNC trop tôt après les branchements conditionnels. Si cette option est utilisée,
"__WORKAROUND_SPECULATIVE_SYNCS" est défini.
-mno-csync-anomalie
Ne générez pas de code supplémentaire pour empêcher les instructions CSYNC ou SSYNC de se produire également
peu de temps après un branchement conditionnel.
-mlow-64k
Lorsqu'il est activé, le compilateur est libre de tirer parti de la connaissance que l'ensemble
programme s'inscrit dans le faible 64k de mémoire.
-mno-bas-64k
Supposons que le programme est arbitrairement grand. C'est la valeur par défaut.
-mstack-check-l1
Effectuez une vérification de la pile à l'aide des informations placées dans la mémoire du bloc-notes L1 par uClinux
noyau.
-mi-bibliothèque-partagée
Générez du code qui prend en charge les bibliothèques partagées via la méthode d'ID de bibliothèque. Ceci permet
pour exécuter sur place et bibliothèques partagées dans un environnement sans mémoire virtuelle
la gestion. Cette option implique -fPIC. Avec un bfin-elfe cible, cette option implique
-msim.
-mno-id-bibliothèque-partagée
Générez du code qui ne suppose pas que les bibliothèques partagées basées sur l'ID sont utilisées. C'est
le défaut.
-mleaf-id-bibliothèque-partagée
Générer du code qui prend en charge les bibliothèques partagées via la méthode d'ID de bibliothèque, mais suppose
que cette bibliothèque ou cet exécutable ne sera lié à aucune autre bibliothèque partagée d'ID.
Cela permet au compilateur d'utiliser un code plus rapide pour les sauts et les appels.
-mno-leaf-id-bibliothèque-partagée
Ne supposez pas que le code en cours de compilation ne sera lié à aucune bibliothèque partagée d'ID.
Un code plus lent est généré pour les insns de saut et d'appel.
-mshared-library-id=n
Spécifie le numéro d'identification de la bibliothèque partagée basée sur l'ID en cours de compilation.
La spécification d'une valeur de 0 génère un code plus compact ; spécifier d'autres valeurs
l'attribution de ce numéro à la bibliothèque actuelle mais n'est plus dans l'espace ou dans le temps
efficace que d'omettre cette option.
-msep-données
Générer du code qui permet au segment de données d'être situé dans une zone différente de la mémoire
du segment de texte. Cela permet d'exécuter sur place dans un environnement sans
gestion de la mémoire virtuelle en éliminant les relocalisations par rapport à la section de texte.
-mno-sep-données
Générez du code qui suppose que le segment de données suit le segment de texte. C'est
le défaut.
-mlong-appels
-mno-long-appels
Indique au compilateur d'effectuer des appels de fonction en chargeant d'abord l'adresse du
fonction dans un registre puis en effectuant un appel de sous-programme sur ce registre. Cette
est nécessaire si la fonction cible se situe en dehors de la plage d'adressage de 24 bits de
la version basée sur le décalage de l'instruction d'appel de sous-programme.
Cette fonctionnalité n'est pas activée par défaut. En précisant -mno-long-appels restaure la
comportement par défaut. Notez que ces commutateurs n'ont aucun effet sur la façon dont le compilateur génère
code pour gérer les appels de fonction via des pointeurs de fonction.
-mfast-fp
Lien avec la bibliothèque à virgule flottante rapide. Cette bibliothèque assouplit certains des IEEE
les règles de la norme à virgule flottante pour vérifier les entrées par rapport à Not-a-Number (NAN), dans le
intérêt de la performance.
-minline-plt
Activer l'incorporation des entrées PLT dans les appels de fonction à des fonctions inconnues
lier localement. Il n'a aucun effet sans -mfdpic.
-mmulticœur
Créez une application autonome pour les processeurs multicœurs Blackfin. Cette option provoque
les fichiers de démarrage et les scripts de lien appropriés prenant en charge le multicœur à utiliser, et définit le
macro "__BFIN_MULTICORE". Il ne peut être utilisé qu'avec -mcpu=bf561[-sirévision].
Cette option peut être utilisée avec -mcorea or -mcoreb, qui sélectionne l'application unique-
modèle de programmation par cœur. Sans -mcorea or -mcoreb,
modèle de programmation mono-application/dual-core est utilisé. Dans ce modèle, le principal
La fonction de Core B doit être nommée "coreb_main".
Si cette option n'est pas utilisée, le modèle de programmation d'application monocœur est utilisé.
-mcorea
Construisez une application autonome pour le Core A de BF561 lors de l'utilisation de l'application one-per-
modèle de programmation de base. Des fichiers de démarrage et des scripts de liens appropriés sont utilisés pour prendre en charge Core
A, et la macro "__BFIN_COREA" est définie. Cette option ne peut être utilisée que dans
conjonction avec -mmulticœur.
-mcoreb
Créez une application autonome pour le Core B de BF561 lors de l'utilisation de l'application one-per-
modèle de programmation de base. Des fichiers de démarrage et des scripts de liens appropriés sont utilisés pour prendre en charge Core
B, et la macro "__BFIN_COREB" est définie. Lorsque cette option est utilisée, "coreb_main"
doit être utilisé à la place de "main". Cette option ne peut être utilisée qu'avec
-mmulticœur.
-msdram
Créez une application autonome pour SDRAM. Les fichiers de démarrage et les scripts de liens appropriés sont utilisés
pour mettre l'application en SDRAM, et la macro "__BFIN_SDRAM" est définie. Les
loader doit initialiser la SDRAM avant de charger l'application.
-micplb
Supposons que les ICPLB soient activés au moment de l'exécution. Cela a un effet sur certaines anomalies
solutions de contournement. Pour les cibles Linux, la valeur par défaut est de supposer que les ICPLB sont activés ; pour
applications autonomes, la valeur par défaut est désactivée.
C6X Options
-mars=prénom
Ceci spécifie le nom de l'architecture cible. GCC utilise ce nom pour déterminer
quel type d'instructions il peut émettre lors de la génération du code assembleur. Permis
les noms sont: c62x, c64x, c64x+, c67x, c67x+, c674x.
-mbig-endian
Générez du code pour une cible big-endian.
-mlittle-endian
Générer du code pour une cible little-endian. C'est la valeur par défaut.
-msim
Choisissez les fichiers de démarrage et le script de l'éditeur de liens adaptés au simulateur.
-msdata=par défaut
Mettez de petites données globales et statiques dans la section ".neardata", qui est pointée par
inscrire "B14". Mettez les petites données globales et statiques non initialisées dans la section ".bss",
qui est adjacent à la section ".neardata". Mettez de petites données en lecture seule dans le
rubrique ".rodata". Les sections correspondantes utilisées pour les gros morceaux de données sont
".fardata", ".far" et ".const".
-msdata=tout
Mettez toutes les données, pas seulement les petits objets, dans les sections réservées aux petites données, et
utiliser l'adressage relatif au registre "B14" pour y accéder.
-msdata=aucun
N'utilisez pas les sections réservées aux petites données et utilisez des adresses absolues pour
accéder à toutes les données. Mettez toutes les données globales et statiques initialisées dans le ".fardata"
section, et toutes les données non initialisées dans la section ".far". Mettez toutes les données constantes dans
la section ".const".
CRIS Options
Ces options sont définies spécifiquement pour les ports CRIS.
-mars=type d'architecture
-mcpu=type d'architecture
Générer du code pour l'architecture spécifiée. Les choix pour type d'architecture
v3, v8 et v10 pour respectivement ETRAX 4, ETRAX 100 et ETRAX 100 LX. La valeur par défaut est v0
sauf pour cris-axis-linux-gnu, où la valeur par défaut est v10.
-mtune=type d'architecture
Accordez à type d'architecture tout ce qui est applicable sur le code généré, à l'exception de
l'ABI et le jeu d'instructions disponibles. Les choix pour type d'architecture
le même que pour -mars=type d'architecture.
-mmax-stack-frame=n
Avertir lorsque le cadre de pile d'une fonction dépasse n octets.
-metrax4
-metrax100
Les options -metrax4 et -metrax100 sont des synonymes de -mars=v3 et -mars=v8
respectivement.
-mmul-bug-solution de contournement
-mno-mul-bug-solution de contournement
Contourner un bogue dans les instructions « muls » et « mulu » pour les modèles de processeur où il
s'applique. Cette option est active par défaut.
-mpdebug
Activez les informations détaillées relatives au débogage spécifiques à CRIS dans le code assembleur. Cette
option a également pour effet de désactiver le #NO_APP indicateur de code formaté au
assembleur au début du fichier d'assemblage.
-mcc-init
N'utilisez pas les résultats du code de condition de l'instruction précédente ; toujours émettre comparer et
testez les instructions avant d'utiliser les codes de condition.
-mno-effets secondaires
N'émettez pas d'instructions avec effets secondaires dans des modes d'adressage autres que post-
incrément.
-mstack-aligner
-mno-stack-aligner
-mdata-aligner
-mno-data-aligner
-mconst-aligner
-mno-const-aligner
Ces options (no- options) organiser (éliminer les arrangements) pour le cadre de pile,
données individuelles et constantes à aligner pour la taille d'accès aux données unique maximale
pour le modèle de processeur choisi. La valeur par défaut consiste à organiser un alignement 32 bits. ABI
les détails tels que la disposition de la structure ne sont pas affectés par ces options.
-m32 bits
-m16 bits
-m8 bits
Semblables aux options stack-data- et const-align ci-dessus, ces options organisent
cadre de pile, données inscriptibles et constantes alignées sur 32 bits, 16 bits ou 8 bits.
La valeur par défaut est l'alignement 32 bits.
-mno-prologue-épilogue
-mprologue-épilogue
Avec -mno-prologue-épilogue, la fonction normale prologue et épilogue qui a mis en place
le cadre de pile est omis et aucune instruction de retour ou séquence de retour n'est
généré dans le code. Utilisez cette option uniquement avec une inspection visuelle du
code compilé : aucun avertissement ou erreur n'est généré lorsque les registres enregistrés par l'appel doivent être
enregistré, ou le stockage des variables locales doit être alloué.
-mno-gotplt
-mgotplt
Avec -fpic et -fPIC, ne générez pas (générez) des séquences d'instructions qui se chargent
adresses pour les fonctions de la partie PLT du GOT plutôt que (traditionnel sur d'autres
architectures) appels au PLT. La valeur par défaut est -mgotplt.
-moi
L'option no-op héritée n'est reconnue qu'avec les cris-axis-elf et cris-axis-linux-gnu
cibles.
-mlinux
Ancienne option no-op reconnue uniquement avec la cible cris-axis-linux-gnu.
-sim
Cette option, reconnue pour le cris-axis-elf, s'arrange pour faire le lien avec les entrées-sorties
fonctions d'une bibliothèque de simulateurs. Code, données initialisées et données initialisées à zéro
sont attribués consécutivement.
-sim2
J'aime -sim, mais passez les options de l'éditeur de liens pour localiser les données initialisées à 0x40000000 et zéro-
données initialisées à 0x80000000.
CR16 Options
Ces options sont définies spécifiquement pour les ports CR16.
-mmac
Activer l'utilisation des instructions de multiplication-accumulation. Désactivé par défaut.
-mcr16cplus
-mcr16c
Générez du code pour l'architecture CR16C ou CR16C+. L'architecture CR16C+ est par défaut.
-msim
Liens vers la bibliothèque libsim.a qui est compatible avec le simulateur. Applicable à ELF
compilateur uniquement.
-menthe32
Choisissez le type d'entier sur 32 bits.
-mbit-ops
Génère des instructions "sbit"/"cbit" pour les manipulations de bits.
-mdata-modèle=modèle
Choisissez un modèle de données. Les choix pour modèle près, loin or moyenne. moyenne est par défaut.
Toutefois, loin n'est pas valable avec -mcr16c, car l'architecture CR16C ne prend pas en charge le
modèle de données lointain.
Darwin Options
Ces options sont définies pour toutes les architectures exécutant le système d'exploitation Darwin.
FSF GCC sur Darwin ne crée pas de fichiers objet "gros" ; il crée un fichier objet pour le
architecture unique pour laquelle GCC a été conçu. Le GCC d'Apple sur Darwin crée du "gras"
fichiers si plusieurs -cambre les options sont utilisées ; il le fait en exécutant le compilateur ou l'éditeur de liens
plusieurs fois et joindre les résultats avec lipo.
Le sous-type du fichier créé (comme ppc7400 or ppc970 or i686) est déterminé par le
des indicateurs qui spécifient l'ISA que GCC cible, comme -mcpu or -MarsL’
-force_cpusubtype_ALL L'option peut être utilisée pour outrepasser cela.
Les outils Darwin varient dans leur comportement lorsqu'ils sont présentés avec une incompatibilité ISA. Les
assembleur, as, autorise uniquement l'utilisation d'instructions valables pour le sous-type du
fichier qu'il génère, vous ne pouvez donc pas mettre d'instructions 64 bits dans un ppc750 fichier objet. Les
éditeur de liens pour les bibliothèques partagées, /usr/bin/libtool, échoue et affiche une erreur si on vous le demande
créer une bibliothèque partagée avec un sous-type moins restrictif que ses fichiers d'entrée (par
exemple, essayer de mettre un ppc970 fichier objet dans un ppc7400 une bibliothèque). L'éditeur de liens pour
exécutables, ld, donne discrètement à l'exécutable le sous-type le plus restrictif de n'importe lequel de ses
fichiers d'entrée.
-Fdir
Ajouter le répertoire du framework dir en tête de la liste des répertoires à rechercher
pour les fichiers d'en-tête. Ces répertoires sont entrelacés avec ceux spécifiés par -I
options et sont scannés dans un ordre de gauche à droite.
Un répertoire de framework est un répertoire contenant des frameworks. Un cadre est un
répertoire avec un En-têtes et/ou En-têtes privés répertoire contenu directement dans celui-ci qui
se termine en .cadre. Le nom d'un framework est le nom de ce répertoire hors
le .cadre. Les en-têtes associés au cadre se trouvent dans l'un de ces deux
répertoires, avec En-têtes recherché en premier. Un sous-cadre est un cadre
répertoire qui se trouve dans un framework Cadres annuaire. Comprend un sous-cadre
les en-têtes ne peuvent apparaître que dans un en-tête d'un framework qui contient le sous-framework, ou
dans un en-tête de sous-framework frère. Deux sous-frameworks sont frères s'ils se produisent dans le
même cadre. Un sous-framework ne doit pas avoir le même nom qu'un framework ; une
un avertissement est émis en cas de violation. Actuellement, un sous-framework ne peut pas avoir
sous-cadres ; à l'avenir, le mécanisme pourrait être étendu pour soutenir cela. Les
les cadres standards peuvent être trouvés dans /Système/Bibliothèque/Frameworks et
/ Bibliothèque / Frameworks. Un exemple d'inclusion ressemble à "#include ",
où Cadre désigne le nom du cadre et en-tête.h se trouve dans le
En-têtes privés or En-têtes répertoire.
-iframeworkdir
J'aime -F sauf que le répertoire est traité comme un répertoire système. La principale différence
entre ce -iframework et -F est-ce avec -iframework le compilateur n'avertit pas
sur les constructions contenues dans les fichiers d'en-tête trouvés via dir. Cette option est valide
uniquement pour la famille de langages C.
-guidée
Émettre des informations de débogage pour les symboles utilisés. Pour le format de débogage des stabs,
cela permet -felimate-unused-debug-symbols. C'est par défaut sur ON.
-gful
Émettre des informations de débogage pour tous les symboles et types.
-mmacosx-version-min=version
La première version de MacOS X sur laquelle cet exécutable s'exécutera est version. Typique
valeurs de version inclure 10.1, 10.2 et 10.3.9.
Si le compilateur a été conçu pour utiliser les en-têtes du système par défaut, alors la valeur par défaut pour
cette option est la version du système sur laquelle le compilateur s'exécute, sinon le
par défaut est de faire des choix compatibles avec autant de systèmes et de bases de code que
de qualité.
-mkernel
Activez le mode de développement du noyau. Les -mkernel ensembles d'options -statique, -fno-commun,
-fno-use-cxa-atexit, -fno-exceptions, -fno-non-appel-exceptions, -fapple-kext,
-fno-faible et -fno-rtti le cas échéant. Ce mode définit également -mno-altivec,
-msoft-float, -fno-intégré et -mlong-branche pour les cibles PowerPC.
-mone-octet-bool
Remplacez les valeurs par défaut de "bool" afin que "sizeof(bool)==1". Par défaut "sizeof(bool)"
vaut 4 lors de la compilation pour Darwin/PowerPC et 1 lors de la compilation pour Darwin/x86, donc ceci
L'option n'a aucun effet sur x86.
Mise en garde: VOTRE -mone-octet-bool Le commutateur force GCC à générer du code qui n'est pas binaire
compatible avec le code généré sans ce commutateur. L'utilisation de ce commutateur peut nécessiter
recompiler tous les autres modules d'un programme, y compris les bibliothèques système. Utilisez ceci
basculer pour se conformer à un modèle de données autre que celui par défaut.
-mfix-et-continuer
-fixer-et-continuer
-findirect-données
Générer du code adapté à un développement rapide, par exemple pour permettre à GDB de
charger dynamiquement .o fichiers dans des programmes déjà en cours d'exécution. -findirect-données et
-fixer-et-continuer sont fournis pour la compatibilité descendante.
-all_load
Charge tous les membres des bibliothèques d'archives statiques. Voir l'homme ld(1) pour plus d'informations.
-arch_errors_fatal
Les erreurs liées aux fichiers ayant une mauvaise architecture sont fatales.
-bind_at_load
Le fichier de sortie est marqué de telle sorte que l'éditeur de liens dynamique lie tous
références non définies lors du chargement ou du lancement du fichier.
-paquet
Produisez un fichier au format de bundle Mach-o. Voir l'homme ld(1) pour plus d'informations.
-chargeur_bundle exécutable
Cette option spécifie le exécutable qui chargera le fichier de sortie de build en cours
lié. Voir l'homme ld(1) pour plus d'informations.
-liblib dynamique
Lorsque cette option est passée, GCC produit une bibliothèque dynamique au lieu d'un exécutable lorsque
liaison, en utilisant le Darwin libtool commander.
-force_cpusubtype_ALL
Cela fait que le fichier de sortie de GCC a le TOUTES sous-type, au lieu d'un contrôlé par
le -mcpu or -Mars option.
-client_admissible nom_client
-Nom du client
-compatibilité_version
-version actuelle
-bande_morte
-fichier-dépendance
-dylib_file
-dylinker_nom_installation
-dynamique
-liste_symboles_exportés
-liste de fichiers
-flat_espace de noms
-force_flat_espace de noms
-headerpad_max_install_names
-image_base
-initialisation
-nom_installation
-keep_private_externs
-multi_module
-multiplier_défini
-multiply_defined_inutilisé
-noall_load
-no_dead_strip_inits_and_terms
-nofixprebinding
-nomultidefs
-noprebind
-noseglinkedit
-pagezero_size
-préfixer
-prebind_all_twolevel_modules
-private_bundle
-read_only_relocs
-sectalign
-sectobjectsymboles
-pourquoi charger
-seg1addr
-sectCreate
-sectobjectsymboles
-secteur
-segaddr
-segs_read_only_addr
-segs_read_write_addr
-seg_addr_table
-seg_addr_table_filename
-seglinkedit
-segprot
-segs_read_only_addr
-segs_read_write_addr
-module_single
-statique
-sous_bibliothèque
-sous_parapluie
-twolevel_namespace
-parapluie
-indéfini
-liste_de_symboles_non exportés
-weak_reference_mismatches
-ce qui est chargé
Ces options sont transmises à l'éditeur de liens Darwin. La page de manuel de l'éditeur de liens Darwin décrit
eux en détail.
DÉC Alpha Options
Ces -m des options sont définies pour les implémentations DEC Alpha :
-mno-soft-float
-msoft-float
Utiliser (ne pas utiliser) les instructions matérielles à virgule flottante pour la virgule flottante
opérations. Lorsque -msoft-float est spécifié, fonctionne dans libgcc.a sont utilisés pour effectuer
opérations à virgule flottante. À moins qu'ils ne soient remplacés par des routines qui émulent le
opérations en virgule flottante, ou compilées de manière à appeler de telles émulations
routines, ces routines émettent des opérations à virgule flottante. Si vous compilez pour
un Alpha sans opérations à virgule flottante, vous devez vous assurer que la bibliothèque est construite
pour ne pas les appeler.
Notez que les implémentations Alpha sans opérations à virgule flottante doivent avoir
registres à virgule flottante.
-mfp-reg
-mno-fp-regs
Générez du code qui utilise (n'utilise pas) l'ensemble de registres à virgule flottante. -mno-fp-regs
implique -msoft-float. Si le jeu de registres à virgule flottante n'est pas utilisé,
les opérandes sont passés dans des registres d'entiers comme s'il s'agissait d'entiers et de virgule flottante
les résultats sont passés en $0 au lieu de $f0. Il s'agit d'une séquence d'appel non standard, donc
toute fonction avec un argument à virgule flottante ou une valeur de retour appelée par le code compilé
avec -mno-fp-regs doit également être compilé avec cette option.
Une utilisation typique de cette option est la construction d'un noyau qui n'utilise pas, et a donc besoin
pas enregistrer et restaurer, tous les registres à virgule flottante.
-mieee
L'architecture Alpha implémente un matériel à virgule flottante optimisé pour un maximum
performance. Il est principalement conforme à la norme à virgule flottante IEEE. Cependant,
pour une conformité totale, une assistance logicielle est requise. Cette option génère du code
code entièrement conforme à la norme IEEE sauf que l' inexact-drapeau n'est pas maintenu (voir ci-dessous).
Si cette option est activée, la macro du préprocesseur "_IEEE_FP" est définie lors
compilation. Le code résultant est moins efficace mais est capable de prendre en charge correctement
nombres dénormalisés et valeurs IEEE exceptionnelles telles que pas un nombre et plus/moins
infini. D'autres compilateurs Alpha appellent cette option -ieee_with_no_inexact.
-mieee-avec-inexact
C'est comme -mieee sauf que le code généré maintient également l'IEEE inexact-drapeau.
L'activation de cette option entraîne la mise en œuvre du code généré par IEEE entièrement conforme
math. En plus de "_IEEE_FP", "_IEEE_FP_EXACT" est défini comme une macro de préprocesseur.
Sur certaines implémentations Alpha, le code résultant peut s'exécuter beaucoup plus lentement que
le code généré par défaut. Comme il y a très peu de code qui dépend du
inexact-drapeau, vous ne devez normalement pas spécifier cette option. Appel d'autres compilateurs Alpha
cette option -ieee_with_inexact.
-mfp-trap-mode=mode piège
Cette option contrôle les interruptions liées à la virgule flottante qui sont activées. Autre Alpha
les compilateurs appellent cette option -fptm mode piège. Le mode piège peut être réglé sur l'un des quatre
valeurs:
n Il s'agit du paramètre par défaut (normal). Les seuls pièges activés sont les
ceux qui ne peuvent pas être désactivés dans le logiciel (par exemple, la division par zéro trap).
u En plus des pièges activés par n, les pièges à sous-verse sont également activés.
su J'aime u, mais les instructions sont marquées pour être sûres pour l'achèvement du logiciel (voir
Manuel d'architecture Alpha pour plus de détails).
sur J'aime su, mais les interruptions inexactes sont également activées.
-mfp-arrondi-mode=mode d'arrondi
Sélectionne le mode d'arrondi IEEE. D'autres compilateurs Alpha appellent cette option -fprm
mode d'arrondiL’ mode d'arrondi peut être l'un des :
n Mode d'arrondi IEEE normal. Les nombres à virgule flottante sont arrondis au plus proche
numéro de machine ou vers le numéro de machine pair en cas d'égalité.
m Arrondir vers moins l'infini.
c Mode d'arrondi haché. Les nombres à virgule flottante sont arrondis vers zéro.
d Mode d'arrondi dynamique. Un champ dans le registre de contrôle à virgule flottante (fpcr, Voir
Manuel de référence de l'architecture Alpha) contrôle le mode d'arrondi en vigueur. Le C
la bibliothèque initialise ce registre pour l'arrondi vers plus l'infini. Ainsi,
sauf si votre programme modifie le fpcr, d correspond à arrondir vers plus
infini.
-mtrap-précision=piège-précision
Dans l'architecture Alpha, les traps à virgule flottante sont imprécis. Cela signifie sans
assistance logicielle, il est impossible de récupérer d'un piège flottant et programmer
l'exécution doit normalement être terminée. GCC peut générer du code qui peut aider
les gestionnaires d'interruptions du système d'exploitation pour déterminer l'emplacement exact qui a causé un
piège à virgule flottante. Selon les exigences d'une application, différentes
les niveaux de précisions peuvent être sélectionnés :
p Précision du programme. Cette option est la valeur par défaut et signifie qu'un gestionnaire d'interruptions ne peut
identifier quel programme a causé une exception à virgule flottante.
f Précision de la fonction. Le gestionnaire d'interruptions peut déterminer la fonction qui a provoqué un
exception à virgule flottante.
i Précision des instructions. Le gestionnaire de pièges peut déterminer l'instruction exacte qui
a causé une exception à virgule flottante.
D'autres compilateurs Alpha fournissent les options équivalentes appelées -scope_safe et
-Resomption_safe.
-miee-conforme
Cette option marque le code généré comme conforme IEEE. Vous ne devez pas utiliser cette option
sauf si vous précisez également -mtrap-précision=i et soit -mfp-trap-mode=su or
-mfp-trap-mode=sui. Son seul effet est d'émettre la ligne .flag 48 dans la fonction
prologue du fichier d'assemblage généré.
-mbuild-constantes
Normalement, GCC examine une constante entière de 32 ou 64 bits pour voir s'il peut la construire
à partir de constantes plus petites en deux ou trois instructions. S'il ne le peut pas, il sort le
constante en tant que littéral et génère du code pour le charger à partir du segment de données au moment de l'exécution.
Utilisez cette option pour demander à GCC de construire tous constantes entières utilisant du code, même si
il faut plus d'instructions (le maximum est de six).
Vous utilisez généralement cette option pour créer un chargeur dynamique de bibliothèque partagée. lui-même un
bibliothèque partagée, il doit se relocaliser en mémoire avant de pouvoir trouver les variables et
constantes dans son propre segment de données.
-mbwx
-mno-bwx
-mcix
-mno-cix
-mfix
-mno-fix
-mmax
-mno-max
Indiquez si GCC doit générer du code pour utiliser les options BWX, CIX, FIX et MAX
ensembles d'instructions. La valeur par défaut est d'utiliser les jeux d'instructions pris en charge par la CPU
type spécifié via -mcpu= option ou celle du CPU sur lequel GCC a été construit si aucune n'est
spécifié.
-mfloat-vax
-mfloat-ieee
Générer du code qui utilise (n'utilise pas) l'arithmétique à virgule flottante VAX F et G à la place
d'IEEE simple et double précision.
-mexplicit-relocs
-mno-explicite-relocs
Les assembleurs Alpha plus anciens ne fournissaient aucun moyen de générer des relocalisations de symboles, sauf via
macro assembleur. L'utilisation de ces macros ne permet pas une planification optimale des instructions.
GNU binutils à partir de la version 2.12 prend en charge une nouvelle syntaxe qui permet au compilateur de
marquer explicitement quelles délocalisations doivent s'appliquer à quelles instructions. Cette option est
surtout utile pour le débogage, car GCC détecte les capacités de l'assembleur lorsqu'il
est construit et définit la valeur par défaut en conséquence.
-msmall-données
-mlarge-données
Quand -mexplicit-relocs est en vigueur, les données statiques sont accessibles via gp-relatif
déménagements. Lorsque -msmall-données est utilisé, des objets de 8 octets de long ou moins sont placés dans
a petit données la surface (les sections ".sdata" et ".sbss") et sont accessibles via 16 bits
déménagements hors du registre $gp. Cela limite la taille de la petite zone de données à
64 Ko, mais permet d'accéder directement aux variables via une seule instruction.
La valeur par défaut est -mlarge-données. Avec cette option, la zone de données est limitée juste en dessous
2 Go. Les programmes qui nécessitent plus de 2 Go de données doivent utiliser « malloc » ou « mmap » pour
allouez les données dans le tas au lieu du segment de données du programme.
Lors de la génération de code pour les bibliothèques partagées, -fpic implique -msmall-données et -fPIC
implique -mlarge-données.
-mpetit-texte
-mlarge-texte
Quand -mpetit-texte est utilisé, le compilateur suppose que le code de l'ensemble du programme
(ou bibliothèque partagée) tient dans 4 Mo, et est donc accessible avec une instruction de branchement.
Quand -msmall-données est utilisé, le compilateur peut supposer que tous les symboles locaux partagent le
même valeur $gp, et ainsi réduire le nombre d'instructions requises pour une fonction
appel de 4 à 1.
La valeur par défaut est -mlarge-texte.
-mcpu=type_cpu
Définir le jeu d'instructions et les paramètres de planification des instructions pour le type de machine
type_cpu. Vous pouvez spécifier soit le EV le nom du style ou le numéro de puce correspondant.
GCC prend en charge les paramètres de planification pour la famille de processeurs EV4, EV5 et EV6 et
choisit les valeurs par défaut pour le jeu d'instructions du processeur que vous spécifiez. Si
vous ne spécifiez pas de type de processeur, GCC utilise par défaut le processeur sur lequel le
compilateur a été construit.
Valeurs prises en charge pour type_cpu
ev4
ev45
21064
Se programme comme un EV4 et n'a pas d'extensions de jeu d'instructions.
ev5
21164
Se programme comme un EV5 et n'a pas d'extensions de jeu d'instructions.
ev56
21164
Se programme comme un EV5 et prend en charge l'extension BWX.
PCA56
21164pc
21164PC
Se programme comme un EV5 et prend en charge les extensions BWX et MAX.
ev6
21264
Se programme comme un EV6 et prend en charge les extensions BWX, FIX et MAX.
ev67
21264
Se programme comme un EV6 et prend en charge les extensions BWX, CIX, FIX et MAX.
Les chaînes d'outils natives soutiennent également la valeur indigène, qui sélectionne la meilleure architecture
option pour le processeur hôte. -mcpu=natif n'a aucun effet si GCC ne reconnaît pas
le processeur.
-mtune=type_cpu
Définir uniquement les paramètres de planification des instructions pour le type de machine type_cpuL’
jeu d'instructions n'est pas modifié.
Les chaînes d'outils natives soutiennent également la valeur indigène, qui sélectionne la meilleure architecture
option pour le processeur hôte. -mtune=natif n'a aucun effet si GCC ne reconnaît pas
le processeur.
-mémoire-latence=fois
Définit la latence que le planificateur doit assumer pour les références de mémoire typiques telles que vues par
L'application. Ce nombre dépend fortement des modèles d'accès mémoire utilisés
par l'application et la taille du cache externe sur la machine.
Options valides pour fois
nombre
Un nombre décimal représentant les cycles d'horloge.
L1
L2
L3
principal
Le compilateur contient des estimations du nombre de cycles d'horloge pour EV4 "typique" &
Matériel EV5 pour les caches de niveau 1, 2 et 3 (également appelés Dcache, Scache et
Bcache), ainsi qu'à la mémoire principale. Notez que L3 n'est valable que pour EV5.
FR30 Options
Ces options sont définies spécifiquement pour le port FR30.
-mpetit-modèle
Utilisez le modèle de petit espace d'adressage. Cela peut produire un code plus petit, mais cela suppose
que toutes les valeurs et adresses symboliques s'inscrivent dans une plage de 20 bits.
-mno-lsim
Supposons que le support d'exécution a été fourni et qu'il n'est donc pas nécessaire d'inclure le
bibliothèque de simulateurs (libsim.a) sur la ligne de commande de l'éditeur de liens.
FRV Options
-MGPR-32
N'utilisez que les 32 premiers registres à usage général.
-MGPR-64
Utilisez les 64 registres à usage général.
-mfpr-32
Utilisez uniquement les 32 premiers registres à virgule flottante.
-mfpr-64
Utilisez les 64 registres à virgule flottante.
-mhard-float
Utilisez des instructions matérielles pour les opérations à virgule flottante.
-msoft-float
Utilisez des routines de bibliothèque pour les opérations à virgule flottante.
-malloc-cc
Allouez dynamiquement des registres de codes de condition.
-mfixed-cc
N'essayez pas d'allouer dynamiquement des registres de code de condition, utilisez uniquement "icc0" et
"fcc0".
-mdword
Modifiez l'ABI pour utiliser le mot double insns.
-mno-dword
N'utilisez pas d'instructions comportant des mots doubles.
-mdouble
Utilisez des instructions doubles à virgule flottante.
-mno-double
N'utilisez pas d'instructions doubles à virgule flottante.
-mmédia
Utilisez les instructions des médias.
-mno-média
N'utilisez pas les instructions du support.
-mmuladd
Utilisez les instructions de multiplication et d'addition/soustraction.
-mno-muladd
N'utilisez pas les instructions de multiplication et d'addition/soustraction.
-mfdpic
Sélectionnez l'ABI FDPIC, qui utilise des descripteurs de fonction pour représenter des pointeurs vers
les fonctions. Sans aucune option liée au PIC/PIE, cela implique -fPIE. Avec -fpic or
-fpie, il suppose que les entrées GOT et les petites données sont dans une plage de 12 bits du GOT
adresse de base; avec -fPIC or -fPIE, les décalages GOT sont calculés avec 32 bits. Avec un
bfin-elfe cible, cette option implique -msim.
-minline-plt
Activer l'incorporation des entrées PLT dans les appels de fonction à des fonctions inconnues
lier localement. Il n'a aucun effet sans -mfdpic. Il est activé par défaut si
optimisation de la vitesse et compilation pour les bibliothèques partagées (c'est-à-dire, -fPIC or -fpic), ou
lorsqu'une option d'optimisation telle que -O3 ou supérieur est présent dans la ligne de commande.
-mTLS
Supposons un segment TLS volumineux lors de la génération de code thread-local.
-mtls
Ne supposez pas un segment TLS volumineux lors de la génération de code thread-local.
-mgprel-ro
Activer l'utilisation des relocalisations "GPREL" dans l'ABI FDPIC pour les données dont on sait qu'elles sont dans
sections en lecture seule. Il est activé par défaut, sauf pour -fpic or -fpie: bien que
cela peut aider à réduire la taille de la table de décalage global, il échange 1 instruction pour 4. Avec
-fPIC or -fPIE, il échange 3 instructions contre 4, dont une pouvant être partagée par plusieurs
symboles, et cela évite le besoin d'une entrée GOT pour le symbole référencé, c'est donc
plus de chances d'être une victoire. Si ce n'est pas le cas, -mno-gprel-ro peut être utilisé pour le désactiver.
-multilib-bibliothèque-pic
Lien avec les bibliothèques d'images (bibliothèque, pas FD). C'est sous-entendu par -mlibrary-pic, ainsi que
comme par -fPIC et -fpic sans -mfdpic. Vous ne devriez jamais avoir à l'utiliser explicitement.
-mlinked-fp
Suivez l'exigence EABI de toujours créer un pointeur de cadre chaque fois qu'un cadre de pile
est alloué. Cette option est activée par défaut et peut être désactivée avec
-mno-lié-fp.
-mlong-appels
Utilisez l'adressage indirect pour appeler des fonctions en dehors de l'unité de compilation actuelle. Cette
permet aux fonctions d'être placées n'importe où dans l'espace d'adressage de 32 bits.
-malign-étiquettes
Essayez d'aligner les étiquettes sur une limite de 8 octets en insérant des NOP dans le paquet précédent.
Cette option n'a d'effet que lorsque l'emballage VLIW est activé. Cela ne crée pas de nouveau
paquets; il ajoute simplement des NOP à ceux existants.
-mlibrary-pic
Générez un code EABI indépendant de la position.
-macc-4
Utilisez uniquement les quatre premiers registres de l'accumulateur de support.
-macc-8
Utilisez les huit registres d'accumulateur de support.
-mpack
Pack d'instructions VLIW.
-mno-pack
Ne pas emballer les instructions VLIW.
-mno-drapeaux
Ne marquez pas les commutateurs ABI dans les e_flags.
-mcond-move
Activez l'utilisation des instructions de déplacement conditionnel (par défaut).
Ce commutateur sert principalement au débogage du compilateur et sera probablement supprimé dans un
version future.
-mno-cond-move
Désactivez l'utilisation des instructions de déplacement conditionnel.
Ce commutateur sert principalement au débogage du compilateur et sera probablement supprimé dans un
version future.
-mscc
Activer l'utilisation d'instructions d'ensemble conditionnelles (par défaut).
Ce commutateur sert principalement au débogage du compilateur et sera probablement supprimé dans un
version future.
-mno-scc
Désactivez l'utilisation des instructions d'ensemble conditionnelles.
Ce commutateur sert principalement au débogage du compilateur et sera probablement supprimé dans un
version future.
-mcond-exec
Activer l'utilisation de l'exécution conditionnelle (par défaut).
Ce commutateur sert principalement au débogage du compilateur et sera probablement supprimé dans un
version future.
-mno-cond-exec
Désactivez l'utilisation de l'exécution conditionnelle.
Ce commutateur sert principalement au débogage du compilateur et sera probablement supprimé dans un
version future.
-mvliw-branche
Exécutez un pass pour compresser les branches dans les instructions VLIW (par défaut).
Ce commutateur sert principalement au débogage du compilateur et sera probablement supprimé dans un
version future.
-mno-vliw-branche
N'exécutez pas de passe pour compresser des branches dans des instructions VLIW.
Ce commutateur sert principalement au débogage du compilateur et sera probablement supprimé dans un
version future.
-mmulti-cond-exec
Activer l'optimisation de "&&" et "||" en exécution conditionnelle (par défaut).
Ce commutateur sert principalement au débogage du compilateur et sera probablement supprimé dans un
version future.
-mno-multi-cond-exec
Désactiver l'optimisation de "&&" et "||" en exécution conditionnelle.
Ce commutateur sert principalement au débogage du compilateur et sera probablement supprimé dans un
version future.
-mnested-cond-exec
Activer les optimisations d'exécution conditionnelles imbriquées (par défaut).
Ce commutateur sert principalement au débogage du compilateur et sera probablement supprimé dans un
version future.
-mno-niché-cond-exec
Désactivez les optimisations d'exécution conditionnelles imbriquées.
Ce commutateur sert principalement au débogage du compilateur et sera probablement supprimé dans un
version future.
-moptimize-membre
Ce commutateur supprime les instructions "membar" redondantes du code généré par le compilateur.
Il est activé par défaut.
-mno-optimize-membre
Ce commutateur désactive la suppression automatique des instructions « membar » redondantes du
code généré.
-statistiques-mtomcat
Faire en sorte que le gaz imprime les statistiques de Tomcat.
-mcpu=cpu
Sélectionnez le type de processeur pour lequel générer le code. Les valeurs possibles sont FRV, fr550,
matou, fr500, fr450, fr405, fr400, fr300 et simple.
GNU / Linux Options
Ces -m les options sont définies pour les cibles GNU/Linux :
-mglibc
Utilisez la bibliothèque GNU C. C'est la valeur par défaut sauf sur *-*-linux-*ulibc*,
*-*-linux-*musl* et *-*-linux-*android* cibles.
-muclibc
Utilisez la bibliothèque uClibc C. C'est la valeur par défaut sur *-*-linux-*ulibc* cibles.
-mmusl
Utilisez la bibliothèque musl C. C'est la valeur par défaut sur *-*-linux-*musl* cibles.
-mbionique
Utilisez la bibliothèque Bionic C. C'est la valeur par défaut sur *-*-linux-*android* cibles.
-mandroïde
Compilez le code compatible avec la plate-forme Android. C'est la valeur par défaut sur
*-*-linux-*android* cibles.
Lors de la compilation, cette option permet -mbionique, -fPIC, -fno-exceptions et -fno-rtti by
défaut. Lors de la liaison, cette option oblige le pilote GCC à transmettre des options spécifiques à Android
à l'éditeur de liens. Enfin, cette option fait que la macro du préprocesseur "__ANDROID__" est
Défini.
-tno-android-cc
Désactiver les effets de compilation de -mandroïde, c'est-à-dire ne pas activer -mbionique, -fPIC,
-fno-exceptions et -fno-rtti par défaut.
-tno-android-ld
Désactiver les effets de liaison de -mandroïde, c'est-à-dire transmettre les options de liaison Linux standard au
éditeur de liens.
H8 / 300 Options
Ces -m des options sont définies pour les implémentations H8/300 :
-mrelax
Raccourcir certaines références d'adresses au moment de la liaison, lorsque cela est possible ; utilise l'option de l'éditeur de liens
-se détendre.
-mh Générez le code pour le H8/300H.
-SP Générez du code pour le H8S.
-mn Générez du code pour le H8S et le H8/300H en mode normal. Cet interrupteur doit être utilisé
soit avec -mh or -SP.
-ms2600
Générez le code pour le H8S/2600. Ce commutateur doit être utilisé avec -SP.
-mexr
Les registres étendus sont stockés sur la pile avant l'exécution de la fonction avec le moniteur
attribut. L'option par défaut est -mexr. Cette option n'est valable que pour les cibles H8S.
-Mno-exr
Les registres étendus ne sont pas stockés sur la pile avant l'exécution de la fonction avec le moniteur
attribut. L'option par défaut est -Mno-exr. Cette option n'est valable que pour les cibles H8S.
-menthe32
Rendre les données "int" 32 bits par défaut.
-malignité-300
Sur le H8/300H et le H8S, utilisez les mêmes règles d'alignement que pour le H8/300. Le défaut
pour le H8/300H et le H8S est d'aligner les longs et les floats sur des limites de 4 octets.
-malignité-300 les fait aligner sur des limites de 2 octets. Cette option n'a aucun effet
sur le H8/300.
HPPA Options
Ces -m des options sont définies pour la famille d'ordinateurs HPPA :
-mars=type d'architecture
Générer du code pour l'architecture spécifiée. Les choix pour type d'architecture
1.0 pour PA 1.0, 1.1 pour PA 1.1, et 2.0 pour les processeurs PA 2.0. Faire référence à
/usr/lib/sched.models sur un système HP-UX pour déterminer l'option d'architecture appropriée
pour votre appareil. Le code compilé pour les architectures les moins numérotées s'exécute sur les plus hautes
architectures numérotées, mais pas l'inverse.
-mpa-risc-1-0
-mpa-risc-1-1
-mpa-risc-2-0
Synonymes pour -mars=1.0, -mars=1.1 et -mars=2.0 respectivement.
-mjump-in-delay
Cette option est ignorée et fournie à des fins de compatibilité uniquement.
-mdisable-fpregs
Empêcher les registres à virgule flottante d'être utilisés de quelque manière que ce soit. Ceci est nécessaire pour
compiler des noyaux qui effectuent une commutation de contexte paresseuse des registres à virgule flottante. Si
vous utilisez cette option et essayez d'effectuer des opérations en virgule flottante, le compilateur
avorte.
-mdisable-indexation
Empêcher le compilateur d'utiliser les modes d'adresse d'indexation. Cela évite certains plutôt
problèmes obscurs lors de la compilation du code généré par MIG sous MACH.
-mno-espace-regs
Générez du code qui suppose que la cible n'a pas de registres d'espace. Cela permet à GCC de
générer des appels indirects plus rapides et utiliser des modes d'adresse d'index non mis à l'échelle.
Un tel code convient aux systèmes et noyaux PA de niveau 0.
-mfast-appels-indirects
Générez du code qui suppose que les appels ne franchissent jamais les limites de l'espace. Cela permet à GCC de
émettre du code qui effectue des appels indirects plus rapides.
Cette option ne fonctionne pas en présence de bibliothèques partagées ou de fonctions imbriquées.
-mplage-fixe=registre-plage
Générer du code traitant la plage de registres donnée comme des registres fixes. Un registre fixe
est celui que l'allocateur de registre ne peut pas utiliser. Ceci est utile lors de la compilation du noyau
code. Une plage de registres est spécifiée sous la forme de deux registres séparés par un tiret. Plusieurs
les plages de registres peuvent être spécifiées séparées par une virgule.
-mlong-load-store
Générez des séquences de chargement et de stockage de 3 instructions, comme parfois requis par HP-UX 10
éditeur de liens. Ceci équivaut à la +k option aux compilateurs HP.
-environnement d'exécution portable
Utilisez les conventions d'appel portable proposées par HP pour les systèmes ELF.
-mgaz
Activez l'utilisation de directives d'assembleur que seul GAS comprend.
-mschedule=type de processeur
Code horaire selon les contraintes du type de machine type de processeur. Les choix
pour type de processeur 700 7100, 7100LC, 7200, 7300 et 8000. Faire référence à
/usr/lib/sched.models sur un système HP-UX pour déterminer l'option de planification appropriée pour
votre appareil. La programmation par défaut est 8000.
-mlinker-opt
Activez la passe d'optimisation dans l'éditeur de liens HP-UX. Notez que cela rend le débogage symbolique
impossible. Il déclenche également un bogue dans les linkers HP-UX 8 et HP-UX 9 dans lesquels ils
donner de faux messages d'erreur lors de la liaison de certains programmes.
-msoft-float
Générer une sortie contenant des appels de bibliothèque pour virgule flottante. Mise en garde: le requis
les bibliothèques ne sont pas disponibles pour toutes les cibles HPPA. Normalement, les installations du
le compilateur C habituel de la machine sont utilisés, mais cela ne peut pas être fait directement en cross-
compilation. Vous devez prendre vos propres dispositions pour fournir une bibliothèque appropriée
fonctions de compilation croisée.
-msoft-float modifie la convention d'appel dans le fichier de sortie ; par conséquent, ce n'est que
utile si vous compilez tous d'un programme avec cette option. En particulier, vous devez
compiler libgcc.a, la bibliothèque fournie avec GCC, avec -msoft-float pour cela
à travailler.
-msio
Générez la prédéfinition "_SIO" pour les E/S du serveur. La valeur par défaut est -mwsio. Cela génère
les prédéfinis, "__hp9000s700", "__hp9000s700__" et "_WSIO", pour le poste de travail IO.
Ces options sont disponibles sous HP-UX et HI-UX.
-mgnu-ld
Utiliser les options spécifiques à GNU ld. Cela passe -partagé à ld lors de la construction d'un partage
une bibliothèque. C'est la valeur par défaut lorsque GCC est configuré, explicitement ou implicitement, avec le
Éditeur de liens GNU. Cette option n'affecte pas les ld est appelé; ça ne change que quoi
les paramètres sont passés à cela ldL’ ld qui est appelé est déterminé par le
--avec-ld configurez l'option, le chemin de recherche du programme de GCC, et enfin par l'utilisateur PATH.
L'éditeur de liens utilisé par GCC peut être imprimé en utilisant qui `gcc -print-nom-prog=ld`. Ce
L'option n'est disponible que sur le HP-UX GCC 64 bits, c'est-à-dire configuré avec
hppa*64*-*-hpux*.
-mhp-ld
Utiliser les options spécifiques à HP ld. Cela passe -b à ld lors de la création d'une bibliothèque partagée
et passe +Accepter Incompatibilité de type à ld sur tous les liens. C'est la valeur par défaut lorsque GCC est
configuré, explicitement ou implicitement, avec l'éditeur de liens HP. Cette option n'affecte pas
qui ld est appelé; cela ne change que les paramètres qui lui sont transmis ldL’ ld
qui est appelé est déterminé par le --avec-ld option de configuration, recherche de programme de GCC
chemin, et enfin par l'utilisateur PATH. L'éditeur de liens utilisé par GCC peut être imprimé en utilisant
qui `gcc -print-nom-prog=ld`. Cette option n'est disponible que sur le HP-UX 64 bits
GCC, c'est-à-dire configuré avec hppa*64*-*-hpux*.
-mlong-appels
Générez du code qui utilise de longues séquences d'appels. Cela garantit qu'un appel est toujours en mesure
pour atteindre les talons générés par l'éditeur de liens. La valeur par défaut est de générer des appels longs uniquement lorsque le
distance entre le lieu de l'appel et le début de la fonction ou de l'unité de traduction, comme
le cas, dépasse une limite prédéfinie fixée par le type de branche utilisé. Les
les limites pour les appels normaux sont de 7,600,000 240,000 2.0 et XNUMX XNUMX octets, respectivement pour le PA XNUMX
et les architectures PA 1.X. Les appels Sib sont toujours limités à 240,000 XNUMX octets.
Les distances sont mesurées à partir du début des fonctions lors de l'utilisation du
-ffonction-sections option, ou lors de l'utilisation de la -mgaz et -mno-portable-runtime Options
ensemble sous HP-UX avec l'éditeur de liens SOM.
Il n'est normalement pas souhaitable d'utiliser cette option car elle dégrade les performances. Cependant,
cela peut être utile dans les grandes applications, en particulier lorsque la liaison partielle est utilisée pour
construire l'application.
Les types d'appels longs utilisés dépendent des capacités de l'assembleur et de l'éditeur de liens,
et le type de code généré. L'impact sur les systèmes qui prennent en charge
les appels absolus et les longs appels de différence de symboles ou de PC doivent être
relativement petite. Cependant, un appel indirect est utilisé sur les systèmes ELF 32 bits en code pic
et c'est assez long.
-munix=unix-std
Générez des prédéfinitions de compilateur et sélectionnez un fichier de démarrage pour la norme UNIX spécifiée.
Les choix pour unix-std 93, 95 et 98. 93 est pris en charge sur toutes les versions de HP-UX.
95 est disponible sur HP-UX 10.10 et versions ultérieures. 98 est disponible sur HP-UX 11.11 et versions ultérieures.
Les valeurs par défaut sont 93 pour HP-UX 10.00, 95 pour HP-UX 10.10 jusqu'à 11.00, et 98
pour HP-UX 11.11 et versions ultérieures.
-munix=93 fournit les mêmes prédéfinis que GCC 3.3 et 3.4. -munix=95 fournit
prédéfinis supplémentaires pour "XOPEN_UNIX" et "_XOPEN_SOURCE_EXTENDED", et le fichier de démarrage
unix95.o. -munix=98 fournit des prédéfinitions supplémentaires pour "_XOPEN_UNIX",
"_XOPEN_SOURCE_EXTENDED", "_INCLUDE__STDC_A1_SOURCE" et "_INCLUDE_XOPEN_SOURCE_500",
et le fichier de démarrage unix98.o.
Il est important à noter que cette option modifie les interfaces pour diverses bibliothèques
routines. Cela affecte également le comportement opérationnel de la bibliothèque C. Ainsi, extrême
il faut être prudent dans l'utilisation de cette option.
Le code de bibliothèque destiné à fonctionner avec plusieurs normes UNIX doit être testé,
définissez et restaurez la variable "__xpg4_extended_mask" comme il convient. La plupart des logiciels GNU
ne fournit pas cette capacité.
-nolibdld
Supprimer la génération d'options de lien pour rechercher libdld.sl lorsque le -statique option est
spécifié sur HP-UX 10 et versions ultérieures.
-statique
L'implémentation HP-UX de setlocale dans libc a une dépendance sur libdld.sl. Là
n'est pas une version d'archive de libdld.sl. Ainsi, lorsque le -statique l'option est spécifiée,
des options de lien spéciales sont nécessaires pour résoudre cette dépendance.
Sur HP-UX 10 et versions ultérieures, le pilote GCC ajoute les options nécessaires pour établir une liaison avec
libdld.sl lorsque le -statique option est spécifiée. Cela fait que le binaire résultant
être dynamique. Sur le port 64 bits, les linkers génèrent des binaires dynamiques par défaut dans
en tout cas. Les -nolibdld L'option peut être utilisée pour empêcher le pilote GCC d'ajouter
ces options de lien.
-films
Ajout de la prise en charge du multithreading avec le dce fil bibliothèque sous HP-UX. Cette option
définit des indicateurs pour le préprocesseur et l'éditeur de liens.
IA-64 Options
Ce sont les -m options définies pour l'architecture Intel IA-64.
-mbig-endian
Générez du code pour une cible big-endian. Il s'agit de la valeur par défaut pour HP-UX.
-mlittle-endian
Générer du code pour une cible little-endian. C'est la valeur par défaut pour AIX5 et GNU/Linux.
-mgnu-as
-mno-gnu-as
Générez (ou non) du code pour l'assembleur GNU. C'est la valeur par défaut.
-mgnu-ld
-mno-gnu-ld
Générez (ou non) du code pour l'éditeur de liens GNU. C'est la valeur par défaut.
-mno-pic
Générez du code qui n'utilise pas de registre de pointeur global. Le résultat n'est pas la position
code indépendant et viole l'ABI IA-64.
-mvolatile-asm-stop
-mno-volatile-asm-stop
Générez (ou non) un bit d'arrêt immédiatement avant et après les instructions asm volatiles.
-mregistre-noms
-mno-registre-noms
Générer (ou pas) in, loc et ande noms de registre pour les registres empilés. Cette
peut rendre la sortie de l'assembleur plus lisible.
-mno-sdata
-msdata
Désactivez (ou activez) les optimisations qui utilisent la petite section de données. Cela peut être utile
pour contourner les bogues de l'optimiseur.
-mconstant-gp
Générez du code qui utilise une seule valeur de pointeur global constant. Ceci est utile lorsque
compilation du code du noyau.
-mauto-pic
Générez du code auto-déplaçable. Cela implique -mconstant-gp. C'est utile
lors de la compilation du code du micrologiciel.
-minline-float-divide-min-latence
Générer du code pour les divisions en ligne de valeurs à virgule flottante en utilisant la latence minimale
algorithme.
-minline-float-divide-max-débit
Générer du code pour les divisions en ligne de valeurs à virgule flottante en utilisant le débit maximal
algorithme.
-mno-inline-float-division
Ne générez pas de code en ligne pour les divisions de valeurs à virgule flottante.
-minline-int-divide-min-latence
Générer du code pour les divisions en ligne de valeurs entières en utilisant la latence minimale
algorithme.
-minline-int-divide-max-débit
Générer du code pour les divisions en ligne de valeurs entières en utilisant le débit maximal
algorithme.
-mno-inline-int-division
Ne générez pas de code en ligne pour les divisions de valeurs entières.
-minline-sqrt-min-latence
Générez du code pour les racines carrées en ligne à l'aide de l'algorithme de latence minimale.
-minline-sqrt-max-débit
Générez du code pour les racines carrées en ligne à l'aide de l'algorithme de débit maximal.
-mno-inline-sqrt
Ne générez pas de code en ligne pour "sqrt".
-mfused-mad
-mno-fusionné-madd
Générer (ne pas) générer du code qui utilise la fusion/addition ou multiplication/soustraction
instructions. La valeur par défaut consiste à utiliser ces instructions.
-mno-nain2-asm
-mdwarf2-asm
Ne générez pas (ou ne générez pas) de code assembleur pour les informations de débogage du numéro de ligne DWARF 2.
Cela peut être utile lorsque vous n'utilisez pas l'assembleur GNU.
-mearly-stop-bits
-mno-early-stop-bits
Permettre aux bits d'arrêt d'être placés avant immédiatement avant l'instruction qui
déclenché le bit d'arrêt. Cela peut améliorer la planification des instructions, mais ne
fais-le.
-mplage-fixe=registre-plage
Générer du code traitant la plage de registres donnée comme des registres fixes. Un registre fixe
est celui que l'allocateur de registre ne peut pas utiliser. Ceci est utile lors de la compilation du noyau
code. Une plage de registres est spécifiée sous la forme de deux registres séparés par un tiret. Plusieurs
les plages de registres peuvent être spécifiées séparées par une virgule.
-mtls-taille=tls-taille
Spécifiez la taille en bits des décalages TLS immédiats. Les valeurs valides sont 14, 22 et 64.
-mtune=type de processeur
Réglez la planification des instructions pour un processeur particulier, les valeurs valides sont Itanium,
titane1, miséricordieux, titane2 et McKinley.
-milp32
-mlp64
Générez du code pour un environnement 32 bits ou 64 bits. L'environnement 32 bits définit int,
long et pointeur sur 32 bits. L'environnement 64 bits définit int sur 32 bits et long et
pointeur sur 64 bits. Il s'agit d'indicateurs spécifiques à HP-UX.
-mno-sched-br-data-spec
-msched-br-data-spec
(Dis/En)ablez la planification spéculative des données avant le rechargement. Cela se traduit par la génération de
instructions "ld.a" et les instructions de contrôle correspondantes ("ld.c" / "chk.a"). Les
la valeur par défaut est « désactiver ».
-msched-ar-data-spec
-mno-sched-ar-data-spec
(En/Dis)able planification spéculative des données après le rechargement. Cela se traduit par la génération de
instructions "ld.a" et les instructions de contrôle correspondantes ("ld.c" / "chk.a"). Les
la valeur par défaut est « activer ».
-mno-sched-control-spec
-MSChed-Control-Spec
(Dis/En)able contrôle la planification spéculative. Cette fonction n'est disponible que pendant
planification de la région (c'est-à-dire avant le rechargement). Cela se traduit par la génération du "ld.s"
instructions et les instructions de contrôle correspondantes "chk.s". La valeur par défaut est
'désactiver'.
-msched-br-in-data-spec
-mno-sched-br-in-data-spec
(En/Dis)able ordonnancement spéculatif des instructions qui dépendent des données
charges spéculatives avant rechargement. Ceci n'est efficace qu'avec -msched-br-data-spec
activée. La valeur par défaut est « activer ».
-msched-ar-in-data-spec
-mno-sched-ar-in-data-spec
(En/Dis)able ordonnancement spéculatif des instructions qui dépendent des données
charges spéculatives après rechargement. Ceci n'est efficace qu'avec -msched-ar-data-spec
activée. La valeur par défaut est « activer ».
-msched-in-control-spec
-mno-sched-in-control-spec
(En/Dis)able programmation spéculative des instructions qui dépendent de la
contrôler les charges spéculatives. Ceci n'est efficace qu'avec -MSChed-Control-Spec activée.
La valeur par défaut est « activer ».
-mno-sched-prefer-non-data-spec-insns
-msched-prefer-non-data-spec-insns
Si activées, les instructions spéculatives sur les données sont choisies pour la planification uniquement s'il n'y a pas de
d'autres choix pour le moment. Cela rend l'utilisation de la spéculation des données beaucoup plus
conservateur. La valeur par défaut est « désactiver ».
-mno-sched-prefer-non-control-spec-insns
-msched-prefer-non-control-spec-insns
Si elles sont activées, les instructions de contrôle spéculatives sont choisies pour la planification uniquement s'il y a
pas d'autres choix pour le moment. Cela rend l'utilisation de la spéculation de contrôle beaucoup plus
plus conservateur. La valeur par défaut est « désactiver ».
-mno-sched-count-spec-in-critical-path
-msched-count-spec-in-critical-path
Si cette option est activée, les dépendances spéculatives sont prises en compte lors du calcul du
priorités d'instructions. Cela rend l'utilisation de la spéculation un peu plus
conservateur. La valeur par défaut est « désactiver ».
-msched-spec-ldc
Utilisez une simple vérification de la spéculation des données. Cette option est activée par défaut.
-msched-control-spec-ldc
Utilisez une simple vérification pour la spéculation de contrôle. Cette option est activée par défaut.
-msched-stop-bits-after-chaque-cycle
Placez un bit d'arrêt après chaque cycle lors de la planification. Cette option est activée par défaut.
-msched-fp-mem-deps-coût-zéro
Supposons que les stockages et les charges à virgule flottante ne sont pas susceptibles de provoquer un conflit lorsque
placés dans le même groupe d'instruction. Cette option est désactivée par défaut.
-msel-sched-dont-check-control-spec
Générez des vérifications pour la spéculation de contrôle dans la planification sélective. Ce drapeau est
désactivé par défaut.
-msched-max-memory-insns=max-insns
Limite du nombre d'insns de mémoire par groupe d'instructions, donnant une priorité inférieure à
les insns de mémoire suivants tentent de planifier dans le même groupe d'instructions.
Fréquemment utile pour éviter les conflits de banque de cache. La valeur par défaut est 1.
-msched-max-memory-insns-hard-limite
Rend la limite spécifiée par msched-max-memory-insns une limite stricte, interdisant plus
que ce nombre dans un groupe d'instructions. Sinon, la limite est "douce", c'est-à-dire
que les opérations hors mémoire sont préférées lorsque la limite est atteinte, mais la mémoire
des opérations peuvent encore être programmées.
LM32 Options
Ces -m des options sont définies pour l'architecture LatticeMico32 :
-mbarrel-shift-activé
Activer les instructions de changement de baril.
-mdivide-activé
Activez les instructions de division et de module.
-mmultiplier-activé
Activer les instructions de multiplication.
-msign-extend-activé
Activez les instructions d'extension de signe.
-muser-activé
Activez les instructions définies par l'utilisateur.
M32C Options
-mcpu=prénom
Sélectionnez le processeur pour lequel le code est généré. prénom peut être l'un des r8c pour le R8C/Tiny
séries, m16c pour la série M16C (jusqu'à /60), m32cm pour la série M16C/80, ou m32c
pour la série M32C/80.
-msim
Spécifie que le programme sera exécuté sur le simulateur. Cela provoque une alternative
bibliothèque d'exécution à lier dans laquelle prend en charge, par exemple, les E/S de fichiers. Vous ne devez pas
utilisez cette option lors de la génération de programmes qui s'exécuteront sur du matériel réel ; vous devez
fournissez votre propre bibliothèque d'exécution pour toutes les fonctions d'E/S nécessaires.
-memregs=nombre
Spécifie le nombre de pseudo-registres basés sur la mémoire que GCC utilise pendant la génération de code.
Ces pseudo-registres sont utilisés comme de vrais registres, il y a donc un compromis entre
La capacité de GCC à insérer le code dans les registres disponibles et la pénalité de performance de
en utilisant la mémoire au lieu des registres. Notez que tous les modules d'un programme doivent être
compilé avec la même valeur pour cette option. Pour cette raison, vous ne devez pas utiliser ce
avec les bibliothèques d'exécution par défaut de GCC.
M32R / D Options
Ces -m des options sont définies pour les architectures Renesas M32R/D :
-m32r2
Générez le code pour le M32R/2.
-m32rx
Générez du code pour le M32R/X.
-m32r
Générez du code pour le M32R. C'est la valeur par défaut.
-mmodel=petit
Supposons que tous les objets vivent dans les 16 Mo inférieurs de mémoire (afin que leurs adresses puissent être
chargé avec l'instruction "ld24") et supposer que tous les sous-programmes sont accessibles avec le
instruction "bl". C'est la valeur par défaut.
L'adressabilité d'un objet particulier peut être définie avec l'attribut "modèle".
-mmodel=moyen
Supposons que les objets puissent se trouver n'importe où dans l'espace d'adressage 32 bits (le compilateur génère
instructions "seth/add3" pour charger leurs adresses), et supposer que tous les sous-programmes sont
accessible avec l'instruction "bl".
-mmodel=grand
Supposons que les objets puissent se trouver n'importe où dans l'espace d'adressage 32 bits (le compilateur génère
instructions "seth/add3" pour charger leurs adresses), et supposer que les sous-routines peuvent ne pas être
accessible avec l'instruction "bl" (le compilateur génère le plus lent
séquence d'instructions "seth/add3/jl").
-msdata=aucun
Désactiver l'utilisation de la petite zone de données. Les variables sont placées dans l'un des ".data", ".bss" ou
".rodata" (sauf si l'attribut "section" a été spécifié). C'est la valeur par défaut.
La petite zone de données se compose des sections ".sdata" et ".sbss". Les objets peuvent être
explicitement mis dans la petite zone de données avec l'attribut "section" en utilisant l'un de ces
sections.
-msdonnées=sdonnées
Mettez de petites données globales et statiques dans la petite zone de données, mais ne générez pas de données spéciales
code pour les référencer.
-msdata=utiliser
Mettez de petites données globales et statiques dans la petite zone de données et générez des
instructions pour les référencer.
-G num
Mettez les objets globaux et statiques inférieurs ou égaux à num octets dans les petites données ou
Sections BSS au lieu des données normales ou des sections BSS. La valeur par défaut de num is
8. le -msdata l'option doit être définie sur l'une des données s or utilisé pour que cette option ait
effet.
Tous les modules doivent être compilés avec le même -G num valeur. Compiler avec différents
valeurs de num peut ou peut ne pas fonctionner ; si ce n'est pas le cas, l'éditeur de liens donne une erreur
message --- un code incorrect n'est pas généré.
-mdebug
Fait en sorte que le code spécifique à M32R dans le compilateur affiche des statistiques qui pourraient aider
dans les programmes de débogage.
-boucles malignes
Alignez toutes les boucles sur une limite de 32 octets.
-mno-align-boucles
N'appliquez pas un alignement de 32 octets pour les boucles. C'est la valeur par défaut.
-taux d'erreur=nombre
Question nombre instructions par cycle. nombre ne peut être que 1 ou 2.
-mbranche-coût=nombre
nombre ne peut être que 1 ou 2. Si c'est 1, les branches sont préférées aux conditionnelles
code, s'il est 2, alors l'inverse s'applique.
-mflush-trap=nombre
Spécifie le numéro d'interruption à utiliser pour vider le cache. La valeur par défaut est 12. Valide
les nombres sont compris entre 0 et 15 inclus.
-mno-flush-trap
Spécifie que le cache ne peut pas être vidé à l'aide d'une interruption.
-mflush-func=prénom
Spécifie le nom de la fonction du système d'exploitation à appeler pour vider le cache. Les
la valeur par défaut est _flush_cache, mais un appel de fonction n'est utilisé que si une interruption n'est pas disponible.
-mno-flush-func
Indique qu'il n'y a pas de fonction du système d'exploitation pour vider le cache.
M680x0 Options
Ce sont les -m options définies pour les processeurs M680x0 et ColdFire. Les paramètres par défaut
dépendent de l'architecture sélectionnée lors de la configuration du compilateur ; les valeurs par défaut
pour les choix les plus courants sont donnés ci-dessous.
-mars=arche
Générez du code pour une architecture de jeu d'instructions M680x0 ou ColdFire spécifique.
Valeurs admissibles de arche pour les architectures M680x0 sont : 68000, 68010, 68020, 68030,
68040, 68060 et cpu32. Les architectures ColdFire sont sélectionnées selon les critères de Freescale
La classification ISA et les valeurs admissibles sont : Isaa, isaaplus, isabe et isac.
GCC définit une macro "__mcfarche__" chaque fois qu'il génère du code pour un ColdFire
cible. le arche dans cette macro est l'un des -Mars arguments avancés ci-dessus.
Lorsqu'ils sont utilisés ensemble, -Mars et -mtune sélectionnez le code qui s'exécute sur une famille de
processeurs mais qui est optimisé pour une microarchitecture particulière.
-mcpu=cpu
Générez du code pour un processeur M680x0 ou ColdFire spécifique. Le M680x0 cpuS sont:
68000, 68010, 68020, 68030, 68040, 68060, 68302, 68332 et cpu32. Le Feu Froid cpus
sont donnés par le tableau ci-dessous, qui classe également les CPU en familles :
Famille : -mcpu arguments
51 : 51 51ac 51ag 51cn 51em 51je 51jf 51jg 51jm 51mm 51qe 51qm
5206 : 5202 5204 5206
5206e : 5206e
5208 : 5207 5208
5211 : 5210 5211
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 remplacements -mars=arche if arche est compatible avec cpu. D'autres combinaisons de
-mcpu et -Mars sont rejetés.
GCC définit la macro "__mcf_cpu_CPU" lorsque ColdFire cible cpu est sélectionné. Ça aussi
définit "__mcf_family_famille", où la valeur de famille est donnée par le tableau ci-dessus.
-mtune=régler
Réglez le code pour une microarchitecture particulière dans les contraintes définies par -Mars
et -mcpu. Les microarchitectures M680x0 sont : 68000, 68010, 68020, 68030, 68040,
68060 et cpu32. Les microarchitectures ColdFire sont : cfv1, cfv2, cfv3, cfv4 et
cfv4e.
Vous pouvez également utiliser -mtune=68020-40 pour le code qui doit fonctionner relativement bien sur 68020,
cibles 68030 et 68040. -mtune=68020-60 est similaire mais comprend 68060 cibles comme
bien. Ces deux options sélectionnent les mêmes décisions de réglage que -m68020-40 et -m68020-60
respectivement.
GCC définit les macros "__mccambre" et "__mcarche__" lors du réglage pour l'architecture 680x0
arche. Il définit également "mccambre" à moins que soit -ansi ou un non-GNU -std option est utilisée.
Si GCC s'adapte à une gamme d'architectures, comme sélectionné par -mtune=68020-40 or
-mtune=68020-60, il définit les macros pour chaque architecture de la gamme.
GCC définit également la macro "__muarque__" lors du réglage de la microarchitecture ColdFire
uarque, Où uarque est l'un des arguments avancés ci-dessus.
-m68000
-mc68000
Générer une sortie pour un 68000. C'est la valeur par défaut lorsque le compilateur est configuré pour
systèmes basés sur 68000. C'est équivalent à -mars=68000.
Utilisez cette option pour les microcontrôleurs avec un cœur 68000 ou EC000, y compris le 68008,
68302, 68306, 68307, 68322, 68328 et 68356.
-m68010
Générer une sortie pour un 68010. C'est la valeur par défaut lorsque le compilateur est configuré pour
systèmes basés sur 68010. C'est équivalent à -mars=68010.
-m68020
-mc68020
Générer une sortie pour un 68020. C'est la valeur par défaut lorsque le compilateur est configuré pour
systèmes basés sur 68020. C'est équivalent à -mars=68020.
-m68030
Générer une sortie pour un 68030. C'est la valeur par défaut lorsque le compilateur est configuré pour
systèmes basés sur 68030. C'est équivalent à -mars=68030.
-m68040
Générer une sortie pour un 68040. C'est la valeur par défaut lorsque le compilateur est configuré pour
systèmes basés sur 68040. C'est équivalent à -mars=68040.
Cette option interdit l'utilisation des instructions 68881/68882 qui doivent être émulées par
logiciel sur le 68040. Utilisez cette option si votre 68040 n'a pas de code à émuler
ces instructions.
-m68060
Générer une sortie pour un 68060. C'est la valeur par défaut lorsque le compilateur est configuré pour
systèmes basés sur 68060. C'est équivalent à -mars=68060.
Cette option interdit l'utilisation des instructions 68020 et 68881/68882 qui doivent être
émulé par le logiciel sur le 68060. Utilisez cette option si votre 68060 n'a pas de code
pour imiter ces instructions.
-mcpu32
Générer une sortie pour un CPU32. C'est la valeur par défaut lorsque le compilateur est configuré pour
Systèmes basés sur CPU32. C'est équivalent à -mars=cpu32.
Utilisez cette option pour les microcontrôleurs avec un cœur CPU32 ou CPU32+, y compris le 68330,
68331, 68332, 68333, 68334, 68336, 68340, 68341, 68349 et 68360.
-m5200
Générez une sortie pour un processeur ColdFire 520X. C'est la valeur par défaut lorsque le compilateur est
configuré pour les systèmes basés sur 520X. C'est équivalent à -mcpu=5206, et est maintenant
dépréciée en faveur de cette option.
Utilisez cette option pour le microcontrôleur avec un cœur 5200, y compris le MCF5202, MCF5203,
MCF5204 et MCF5206.
-m5206e
Générez une sortie pour un processeur ColdFire 5206e. L'option est désormais dépréciée au profit de
l'équivalent -mcpu=5206e.
-m528x
Générez une sortie pour un membre de la famille ColdFire 528X. L'option est maintenant
déprécié au profit de l'équivalent -mcpu=528x.
-m5307
Générer une sortie pour un CPU ColdFire 5307. L'option est désormais dépréciée au profit de la
équivalent -mcpu=5307.
-m5407
Générer une sortie pour un CPU ColdFire 5407. L'option est désormais dépréciée au profit de la
équivalent -mcpu=5407.
-mcfv4e
Générer une sortie pour un CPU de la famille ColdFire V4e (par exemple 547x/548x). Cela inclut l'utilisation de
instructions matérielles à virgule flottante. L'option équivaut à -mcpu=547x, et est
désormais obsolète au profit de cette option.
-m68020-40
Générez une sortie pour un 68040, sans utiliser aucune des nouvelles instructions. Cela résulte
dans un code qui peut s'exécuter relativement efficacement sur un 68020/68881 ou un 68030 ou un
68040. Le code généré utilise les instructions 68881 qui sont émulées sur le
68040.
L'option équivaut à -mars=68020 -mtune=68020-40.
-m68020-60
Générez une sortie pour un 68060, sans utiliser aucune des nouvelles instructions. Cela résulte
dans un code qui peut s'exécuter relativement efficacement sur un 68020/68881 ou un 68030 ou un
68040. Le code généré utilise les instructions 68881 qui sont émulées sur le
68060.
L'option équivaut à -mars=68020 -mtune=68020-60.
-mhard-float
-m68881
Générer des instructions à virgule flottante. C'est la valeur par défaut pour 68020 et au-dessus, et
pour les appareils ColdFire qui ont un FPU. Il définit la macro "__HAVE_68881__" sur
Cibles M680x0 et "__mcffpu__" sur les cibles ColdFire.
-msoft-float
Ne générez pas d'instructions à virgule flottante ; utilisez plutôt les appels de bibliothèque. C'est le
par défaut pour les cibles 68000, 68010 et 68832. C'est aussi la valeur par défaut pour ColdFire
appareils qui n'ont pas de FPU.
-mdiv
-mno-div
Générez (ne générez pas) les instructions de division et de reste du matériel ColdFire. Si
-Mars s'utilise sans -mcpu, la valeur par défaut est "on" pour les architectures ColdFire et "off"
pour les architectures M680x0. Sinon, la valeur par défaut provient du CPU cible (soit
le CPU par défaut, ou celui spécifié par -mcpu). Par exemple, la valeur par défaut est « désactivé »
pour -mcpu=5206 et "on" pour -mcpu=5206e.
GCC définit la macro "__mcfhwdiv__" lorsque cette option est activée.
-mcourt
Considérez le type "int" comme ayant une largeur de 16 bits, comme "short int". De plus, les paramètres
transmis sur la pile sont également alignés sur une limite de 16 bits même sur les cibles dont l'API
oblige la promotion à 32 bits.
-mno-court
Ne considérez pas que le type "int" a une largeur de 16 bits. C'est la valeur par défaut.
-champ de bits
-mno-champ de bits
N'utilisez pas les instructions de champ de bits. Les -m68000, -mcpu32 et -m5200 les options impliquent
-champ de bits.
-champbit
Utilisez les instructions de champ de bits. Les -m68020 option implique -champbit. C'est
la valeur par défaut si vous utilisez une configuration conçue pour un 68020.
-mrtd
Utilisez une convention d'appel de fonction différente, dans laquelle les fonctions qui prennent un
nombre d'arguments renvoyés avec l'instruction "rtd", qui affiche leurs arguments
en rentrant. Cela permet d'économiser une instruction dans l'appelant puisqu'il n'est pas nécessaire de
pop les arguments là-bas.
Cette convention d'appel est incompatible avec celle normalement utilisée sous Unix, vous
ne peut pas l'utiliser si vous devez appeler des bibliothèques compilées avec le compilateur Unix.
De plus, vous devez fournir des prototypes de fonction pour toutes les fonctions qui prennent des variables
nombre d'arguments (y compris "printf"); sinon un code incorrect est généré pour
appels à ces fonctions.
De plus, un code gravement incorrect se produit si vous appelez une fonction avec trop de
arguments. (Normalement, les arguments supplémentaires sont ignorés sans danger.)
L'instruction "rtd" est supportée par les 68010, 68020, 68030, 68040, 68060 et CPU32
processeurs, mais pas par le 68000 ou le 5200.
-mno-rtd
N'utilisez pas les conventions d'appel sélectionnées par -mrtd. C'est la valeur par défaut.
-malign-int
-mno-align-int
Contrôlez si GCC aligne "int", "long", "long long", "float", "double" et "long
double" variables sur une limite de 32 bits (-malign-int) ou une limite de 16 bits
(-mno-align-int). L'alignement des variables sur les limites 32 bits produit du code qui s'exécute
un peu plus rapide sur les processeurs avec des bus 32 bits au détriment de plus de mémoire.
Mise en garde: si vous utilisez le -malign-int commutateur, GCC aligne les structures contenant ce qui précède
types différents de la plupart des spécifications d'interface binaire d'application publiées pour
le m68k.
-mpcrel
Utilisez directement le mode d'adressage relatif au PC du 68000, au lieu d'utiliser un
tableau de décalage. À l'heure actuelle, cette option implique -fpic, permettant au plus un décalage de 16 bits
pour l'adressage relatif au PC. -fPIC n'est actuellement pas pris en charge avec -mpcrel, mais
cela pourrait être pris en charge pour les processeurs 68020 et supérieurs.
-mno-strict-aligner
-mstrict-aligner
Ne supposez pas (ne supposez pas) que les références de mémoire non alignées sont gérées par le système.
-msep-données
Générer du code qui permet au segment de données d'être situé dans une zone différente de la mémoire
du segment de texte. Cela permet une exécution sur place dans un environnement sans
gestion de la mémoire virtuelle. Cette option implique -fPIC.
-mno-sep-données
Générez du code qui suppose que le segment de données suit le segment de texte. C'est
le défaut.
-mi-bibliothèque-partagée
Générez du code qui prend en charge les bibliothèques partagées via la méthode d'ID de bibliothèque. Ceci permet
pour les bibliothèques d'exécution sur place et partagées dans un environnement sans mémoire virtuelle
la gestion. Cette option implique -fPIC.
-mno-id-bibliothèque-partagée
Générez du code qui ne suppose pas que les bibliothèques partagées basées sur l'ID sont utilisées. C'est
le défaut.
-mshared-library-id=n
Spécifie le numéro d'identification de la bibliothèque partagée basée sur l'ID en cours de compilation.
La spécification d'une valeur de 0 génère un code plus compact ; spécifier d'autres valeurs
l'attribution de ce numéro à la bibliothèque actuelle, mais n'est plus l'espace ou le temps-
efficace que d'omettre cette option.
-mxgot
-mno-xgot
Lors de la génération de code indépendant de la position pour ColdFire, générez un code qui fonctionne si
le GOT compte plus de 8192 entrées. Ce code est plus gros et plus lent que le code
généré sans cette option. Sur les processeurs M680x0, cette option n'est pas nécessaire ; -fPIC
suffit.
GCC utilise normalement une seule instruction pour charger les valeurs du GOT. Alors que c'est
relativement efficace, il ne fonctionne que si le GOT est inférieur à environ 64k. N'importe quoi
plus grand amène l'éditeur de liens à signaler une erreur telle que :
déménagement tronqué pour s'adapter : R_68K_GOT16O foobar
Si cela se produit, vous devez recompiler votre code avec -mxgot. Il devrait alors fonctionner avec
très gros GOT. Cependant, le code généré avec -mxgot est moins efficace, car il
prend 4 instructions pour récupérer la valeur d'un symbole global.
Notez que certains éditeurs de liens, y compris les versions plus récentes de l'éditeur de liens GNU, peuvent créer
plusieurs GOT et trier les entrées GOT. Si vous avez un tel éditeur de liens, vous n'aurez besoin que
à utiliser -mxgot lors de la compilation d'un fichier objet unique qui accède à plus de 8192 GOT
entrées. Très peu le font.
Ces options n'ont aucun effet à moins que GCC ne génère un code indépendant de la position.
MCore Options
Ce sont les -m options définies pour les processeurs Motorola M*Core.
-mhardlit
-mno-hardlit
Inline constantes dans le flux de code si cela peut être fait en deux instructions ou moins.
-mdiv
-mno-div
Utilisez l'instruction de division. (Activé par défaut).
-mrelax-immédiat
-mno-relax-immédiat
Autoriser les immédiates de taille arbitraire dans les opérations sur les bits.
-mwide-bitfields
-mno-wide-bitfields
Traitez toujours les champs de bits comme de taille "int".
-m4byte-fonctions
-mno-4byte-fonctions
Forcer toutes les fonctions à être alignées sur une limite de 4 octets.
-mcallgraph-données
-mno-callgraph-données
Émettre des informations de callgraph.
-mslow-octets
-mno-octets lents
Privilégiez l'accès aux mots lors de la lecture des quantités d'octets.
-mlittle-endian
-mbig-endian
Générer du code pour une cible little-endian.
-m210
-m340
Générez du code pour le processeur 210.
-mno-lsim
Supposons que le support d'exécution a été fourni et donc omettez la bibliothèque de simulateur
(libsim.a) à partir de la ligne de commande de l'éditeur de liens.
-mstack-increment=Taille
Définissez le montant maximum pour une opération d'incrémentation de pile unique. Les grandes valeurs peuvent
augmenter la vitesse des programmes contenant des fonctions nécessitant une grande quantité de
l'espace de la pile, mais ils peuvent aussi déclencher une erreur de segmentation si la pile est étendue
trop. La valeur par défaut est 0x1000.
Député Options
-mabsdiff
Active l'instruction "abs", qui est la différence absolue entre deux registres.
-centre commercial
Active toutes les instructions facultatives --- moyenne, multiplication, division, opérations sur les bits,
zéro non significatif, différence absolue, min/max, écrêtage et saturation.
-moyenne
Active l'instruction "ave", qui calcule la moyenne de deux registres.
-mbased=n
Variables de taille n octets ou moins sont placés dans la section ".based" par défaut.
Les variables basées utilisent le registre $tp comme registre de base, et il y a une limite de 128 octets
à la section ".based".
-mbitops
Active les instructions d'opération de bit --- test de bit ("btstm"), set ("bsetm"), clear
("bclrm"), invert ("bnotm") et test-and-set ("tas").
-mc=prénom
Sélectionne la section dans laquelle les données constantes sont placées. prénom peut être minuscule, près, ou loin.
-mclip
Active l'instruction "clip". Noter que -mclip n'est pas utile à moins que vous aussi
fournir -mminmax.
-mconfig=prénom
Sélectionne l'une des configurations de base intégrées. Chaque puce MeP a un ou plusieurs
modules en elle; chaque module dispose d'un processeur central et d'une variété de coprocesseurs, en option
instructions et périphériques. L'outil "MeP-Integrator", ne faisant pas partie de GCC, fournit
ces configurations via cette option ; utiliser cette option revient à utiliser tous
les options de ligne de commande correspondantes. La configuration par défaut est défaut.
-mcop
Active les instructions du coprocesseur. Par défaut, il s'agit d'un coprocesseur 32 bits. Noter
que le coprocesseur est normalement activé via le -mconfig= option.
-mcop32
Active les instructions du coprocesseur 32 bits.
-mcop64
Active les instructions du coprocesseur 64 bits.
-mivc2
Active la planification IVC2. IVC2 est un coprocesseur VLIW 64 bits.
-mdc
Provoque le placement des variables constantes dans la section ".near".
-mdiv
Active les instructions "div" et "divu".
-meb
Générez du code gros-boutiste.
-mel
Générez du code little-endian.
-mio-volatil
Indique au compilateur que toute variable marquée avec l'attribut "io" doit être
considérée comme volatile.
-ml Par défaut, les variables sont affectées à la section ".far".
-mleadz
Active l'instruction "leadz" (zéro non significatif).
-mm Par défaut, les variables sont affectées à la section ".near".
-mminmax
Active les instructions "min" et "max".
-mmult
Active les instructions de multiplication et de multiplication-accumulation.
-mno-opt
Désactive toutes les instructions facultatives activées par -centre commercial.
-mrépéter
Active les instructions "repeat" et "erepeat", utilisées pour le bouclage à faible surcharge.
-SP Entraîne la valeur par défaut de toutes les variables dans la section ".tiny". Notez qu'il existe un
Limite de 65536 octets pour cette section. Les accès à ces variables utilisent la base %gp
inscrivez-vous.
-msaturé
Active les instructions de saturation. Notez que le compilateur ne
les générer lui-même, mais cette option est incluse pour la compatibilité avec d'autres outils,
comme en".
-msdram
Liez le runtime basé sur SDRAM au lieu du runtime basé sur la ROM par défaut.
-msim
Liez les bibliothèques d'exécution du simulateur.
-msimnovec
Liez les bibliothèques d'exécution du simulateur, à l'exclusion de la prise en charge intégrée de la réinitialisation et
vecteurs et tables d'exception.
-mtf
Toutes les fonctions sont définies par défaut sur la section ".far". Sans cette option, les fonctions
par défaut à la section ".near".
-mtiny=n
Des variables qui n octets ou moins sont alloués à la section ".tiny". Ces
les variables utilisent le registre de base $gp. La valeur par défaut pour cette option est 4, mais notez que
il y a une limite de 65536 octets à la section ".tiny".
Microblaze Options
-msoft-float
Utiliser l'émulation logicielle pour la virgule flottante (par défaut).
-mhard-float
Utilisez des instructions matérielles à virgule flottante.
-mmemcpy
N'optimisez pas les déplacements de blocs, utilisez "memcpy".
-mno-clearbss
Cette option est obsolète. Utilisation -fno-zero-initialisé-en-bss à la place.
-mcpu=type de processeur
Utilisez les fonctionnalités et le code de planification du processeur donné. Les valeurs prises en charge sont dans le
le format vX.YY.Z, Où X est une version majeure, YY est la version mineure, et Z is
code de compatibilité. Des exemples de valeurs sont v3.00.a, v4.00.b, v5.00.a, v5.00.b, v5.00.b,
v6.00.a.
-mxl-soft-mul
Utiliser l'émulation de multiplication logicielle (par défaut).
-mxl-soft-div
Utilisez l'émulation logicielle pour les divisions (par défaut).
-mxl-baril-shift
Utilisez le levier de vitesses à barillet.
-mxl-pattern-comparer
Utilisez les instructions de comparaison de modèles.
-msmall-divise
Utilisez l'optimisation de la recherche de table pour les petites divisions entières signées.
-mxl-pile-vérifier
Cette option est obsolète. Utilisation -fstack-vérifier à la place.
-mxl-gp-opt
Utilisez les sections ".sdata"/".sbss" relatives à GP.
-mxl-multiplier-haut
Utilisez les instructions de multiplication haute pour la partie haute de la multiplication 32x32.
-mxl-float-convert
Utilisez les instructions de conversion matérielle à virgule flottante.
-mxl-float-sqrt
Utilisez l'instruction matérielle de racine carrée à virgule flottante.
-mbig-endian
Générez du code pour une cible big-endian.
-mlittle-endian
Générer du code pour une cible little-endian.
-mxl-réorganiser
Utilisez les instructions de réorganisation (swap et chargement/stockage inversé d'octets).
-mode-mxl-modèle d'application
Sélectionnez le modèle d'application modèle d'application. Les modèles valides sont
exécutable
exécutable normal (par défaut), utilise le code de démarrage crt0.o.
xmdstub
à utiliser avec le débogage intrusif du logiciel basé sur le débogueur de microprocesseur Xilinx (XMD)
agent appelé xmdstub. Cela utilise le fichier de démarrage crt1.o et définit l'adresse de début de
le programme à 0x800.
bootstrap
pour les applications chargées à l'aide d'un chargeur de démarrage. Ce modèle utilise le fichier de démarrage
crt2.o qui ne contient pas de gestionnaire de vecteur de réinitialisation de processeur. Cela convient
pour transférer le contrôle sur une réinitialisation du processeur au chargeur de démarrage plutôt qu'au
.
novecteurs
pour les applications qui ne nécessitent aucun des vecteurs MicroBlaze. Cette option
peut être utile pour les applications exécutées dans une application de surveillance. Ce modèle
Usages crt3.o comme fichier de démarrage.
Option -mode-xl-modèle d'application est un alias obsolète pour -mode-mxl-modèle d'application.
MIPS Options
-EB Générez du code gros-boutiste.
-LA Générez du code little-endian. C'est la valeur par défaut pour mips*el-*-* configurations.
-mars=arche
Générer du code qui s'exécute sur arche, qui peut être le nom d'un MIPS ISA générique, ou le
nom d'un processeur particulier. Les noms ISA sont : mips1, mips2, mips3, mips4,
mips32, mips32r2, mips32r3, mips32r5, mips32r6, mips64, mips64r2, mips64r3, mips64r5
et mips64r6. Les noms des processeurs sont : 4kc, 4km, 4kp, 4kc, 4kec, 4kem, 4Kep, 4ksd,
5kc, 5kf, 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,
loongson2e, loongson2f, longson3a, M4K, M14K, m14kc, m14ke, m14kec, octéon, octéon+,
octon2, octon3, 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 et xlpL’
valeur spéciale de-abi sélectionne l'architecture la plus compatible pour l'ABI sélectionnée
(C'est, mips1 pour les ABI 32 bits et mips3 pour les ABI 64 bits).
La chaîne d'outils Linux/GNU native prend également en charge la valeur indigène, qui sélectionne le meilleur
option d'architecture pour le processeur hôte. -mars=natif n'a aucun effet si GCC
ne reconnaît pas le processeur.
Dans les noms de processeur, un dernier 000 peut être abrégé comme k (par exemple, -mars=r2k).
Les préfixes sont facultatifs et vr peut être écrit r.
Noms du formulaire nf2_1 font référence aux processeurs avec des FPU cadencés à la moitié du taux de la
noyau, noms de la forme nf1_1 font référence aux processeurs avec des FPU cadencés au même rythme
comme noyau, et les noms de la forme nf3_2 se référer aux processeurs avec des FPU cadencés à un ratio
de 3:2 par rapport au noyau. Pour des raisons de compatibilité, nf est accepté comme un
synonyme de nf2_1 tout en nx et bfx sont acceptés comme synonymes de nf1_1.
GCC définit deux macros en fonction de la valeur de cette option. Le premier est "_MIPS_ARCH",
qui donne le nom de l'architecture cible, sous forme de chaîne. La seconde a la forme
"_MIPS_ARCH_foo", Où foo est la valeur en majuscule de "_MIPS_ARCH". Par exemple,
-mars=r2000 définit "_MIPS_ARCH" sur "r2000" et définit la macro "_MIPS_ARCH_R2000".
Notez que la macro "_MIPS_ARCH" utilise les noms de processeur donnés ci-dessus. En d'autre
mots, il a le préfixe complet et n'abrège pas 000 as k. Dans le cas de de-
abi, la macro nomme l'architecture résolue (soit "mips1" soit "mips3"). Il nomme
l'architecture par défaut lorsque non -Mars option est donnée.
-mtune=arche
Optimiser pour arche. Entre autres choses, cette option contrôle la façon dont les instructions sont
prévu et le coût perçu des opérations arithmétiques. La liste de arche valeurs
est le même que pour -Mars.
Lorsque cette option n'est pas utilisée, GCC optimise pour le processeur spécifié par -Mars. par
en utilisant -Mars et -mtune ensemble, il est possible de générer du code qui s'exécute sur un
famille de processeurs, mais optimisez le code pour un membre particulier de cette famille.
-mtune définit les macros "_MIPS_TUNE" et "_MIPS_TUNE_foo", qui fonctionnent dans le même
façon comme le -Mars celles décrites ci-dessus.
-mips1
Équivalent à -mars=mips1.
-mips2
Équivalent à -mars=mips2.
-mips3
Équivalent à -mars=mips3.
-mips4
Équivalent à -mars=mips4.
-mips32
Équivalent à -mars=mips32.
-mips32r3
Équivalent à -mars=mips32r3.
-mips32r5
Équivalent à -mars=mips32r5.
-mips32r6
Équivalent à -mars=mips32r6.
-mips64
Équivalent à -mars=mips64.
-mips64r2
Équivalent à -mars=mips64r2.
-mips64r3
Équivalent à -mars=mips64r3.
-mips64r5
Équivalent à -mars=mips64r5.
-mips64r6
Équivalent à -mars=mips64r6.
-mips16
-mno-mips16
Générez (ne générez pas) le code MIPS16. Si GCC cible un MIPS32 ou MIPS64
architecture, il utilise le MIPS16e ASE.
La génération de code MIPS16 peut également être contrôlée fonction par fonction au moyen de
attributs "mips16" et "nomips16".
-mflip-mips16
Générer du code MIPS16 sur des fonctions alternées. Cette option est fournie pour la régression
test de génération de code mixte MIPS16/non-MIPS16, et n'est pas destiné à un usage ordinaire
utiliser dans la compilation du code utilisateur.
-minterlink-compressé
-mno-interlink-compressé
Exiger (ne pas exiger) que le code utilisant le standard (non compressé) MIPS ISA soit lié-
compatible avec le code MIPS16 et microMIPS, et vice versa.
Par exemple, le code utilisant l'encodage ISA standard ne peut pas passer directement à MIPS16 ou
code microMIPS ; il doit soit utiliser un appel soit un saut indirect. -minterlink-compressé
désactive donc les sauts directs à moins que GCC sache que la cible du saut n'est pas
comprimé.
-minterlink-mips16
-mno-interlink-mips16
Alias de -minterlink-compressé et -mno-interlink-compressé. Ces options
sont antérieurs au microMIPS ASE et sont conservés à des fins de rétrocompatibilité.
-mabi=32
-mabi=o64
-mabi=n32
-mabi=64
-mabi=eabi
Générer du code pour l'ABI donnée.
Notez que l'EABI a une variante 32 bits et une variante 64 bits. GCC génère normalement 64 bits
code lorsque vous sélectionnez une architecture 64 bits, mais vous pouvez utiliser -mgp32 pour obtenir un code 32 bits
à la place.
Pour plus d'informations sur l'ABI O64, voirhttp://gcc.gnu.org/projects/mipso64-abi.html>.
GCC prend en charge une variante de l'ABI o32 dans laquelle les registres à virgule flottante sont 64 plutôt
de 32 bits de large. Vous pouvez sélectionner cette combinaison avec -mabi=32 -mfp64. Cette ABI
repose sur les instructions "mthc1" et "mfhc1" et n'est donc pris en charge que pour
Processeurs MIPS32R2, MIPS32R3 et MIPS32R5.
Les affectations de registre pour les arguments et les valeurs de retour restent les mêmes, mais chaque
la valeur scalaire est transmise dans un seul registre 64 bits plutôt qu'une paire de 32 bits
registres. Par exemple, les valeurs à virgule flottante scalaires sont renvoyées dans $f0 seulement, pas un
$f0/$f1 paire. L'ensemble des registres d'appels enregistrés reste également le même dans la mesure où le même
des registres numérotés en double précision sont sauvegardés.
Deux variantes supplémentaires de l'ABI o32 sont prises en charge pour permettre une transition de
Registres 32 bits à 64 bits. Ce sont des FPXX (-mfpxx) et FP64A (-mfp64
-mno-impair-spreg). L'extension FPXX exige que tout le code s'exécute correctement
lorsqu'il est exécuté à l'aide de registres 32 bits ou 64 bits. Le code peut être lié soit à
FP32 ou FP64, mais pas les deux. L'extension FP64A est similaire à l'extension FP64 mais
interdit l'utilisation de registres simple précision impairs. Cela peut être utilisé dans
en conjonction avec le mode "FRE" des FPU dans les processeurs MIPS32R5 et permet à la fois FP32
et le code FP64A pour s'interconnecter et s'exécuter dans le même processus sans changer les modes FPU.
-appels mabicaux
-mno-abicales
Générez (ne générez pas) de code adapté aux objets dynamiques de style SVR4.
-appels mabicaux est la valeur par défaut pour les systèmes basés sur SVR4.
-mpartagé
-mno-partagé
Générez (ne générez pas) du code totalement indépendant de la position et pouvant
donc être liés à des bibliothèques partagées. Cette option n'affecte que -appels mabicaux.
Tous -appels mabicaux le code a traditionnellement été indépendant de la position, quelles que soient les options
comme -fPIC et -fpic. Cependant, en tant qu'extension, la chaîne d'outils GNU autorise les exécutables
d'utiliser des accès absolus pour les symboles de liaison locale. Il peut également utiliser un GP plus court
séquences d'initialisation et générer des appels directs à des fonctions définies localement. Cette
le mode est sélectionné par -mno-partagé.
-mno-partagé dépend de binutils 2.16 ou supérieur et génère des objets qui ne peuvent être
lié par l'éditeur de liens GNU. Cependant, l'option n'affecte pas l'ABI de la finale
exécutable ; cela n'affecte que l'ABI des objets déplaçables. À l'aide de -mno-partagé
rend généralement les exécutables à la fois plus petits et plus rapides.
-mpartagé est la valeur par défaut.
-mplt
-mno-plt
Supposons (ne supposez pas) que les lieurs statiques et dynamiques prennent en charge les PLT et copiez
déménagements. Cette option n'affecte que -mno-partagé -appels mabicaux. Pour l'ABI n64, cette
l'option n'a aucun effet sans -msym32.
Tu peux faire -mplt la valeur par défaut en configurant GCC avec --avec-mips-plt. Le défaut
is -mno-plt autrement.
-mxgot
-mno-xgot
Lever (ne pas lever) les restrictions habituelles sur la taille de la table de décalage global.
GCC utilise normalement une seule instruction pour charger les valeurs du GOT. Alors que c'est
relativement efficace, il ne fonctionne que si le GOT est inférieur à environ 64k. N'importe quoi
plus grand amène l'éditeur de liens à signaler une erreur telle que :
relocalisation tronquée pour s'adapter : R_MIPS_GOT16 foobar
Si cela se produit, vous devez recompiler votre code avec -mxgot. Cela fonctionne avec très
grands GOT, bien que le code soit aussi moins efficace, puisqu'il faut trois
instructions pour récupérer la valeur d'un symbole global.
Notez que certains éditeurs de liens peuvent créer plusieurs GOT. Si vous avez un tel éditeur de liens, vous
devrait seulement avoir besoin d'utiliser -mxgot lorsqu'un seul fichier objet accède à plus de 64k
valeur des entrées GOT. Très peu le font.
Ces options n'ont aucun effet à moins que GCC ne génère un code indépendant de la position.
-mgp32
Supposons que les registres à usage général aient une largeur de 32 bits.
-mgp64
Supposons que les registres à usage général aient une largeur de 64 bits.
-mfp32
Supposons que les registres à virgule flottante aient une largeur de 32 bits.
-mfp64
Supposons que les registres à virgule flottante aient une largeur de 64 bits.
-mfpxx
Ne supposez pas la largeur des registres à virgule flottante.
-mhard-float
Utilisez des instructions de coprocesseur à virgule flottante.
-msoft-float
N'utilisez pas d'instructions de coprocesseur à virgule flottante. Implémenter la virgule flottante
calculs utilisant des appels de bibliothèque à la place.
-mno-flotteur
Équivalent à -msoft-float, mais affirme en outre que le programme en cours de compilation
n'effectue aucune opération à virgule flottante. Cette option est actuellement prise en charge
uniquement par certaines configurations MIPS nues, où il peut sélectionner un ensemble spécial de
bibliothèques qui ne prennent pas en charge les virgules flottantes (y compris, par exemple, les
point "printf" formats). Si le code compilé avec -mno-flotteur contient accidentellement
opérations à virgule flottante, il est susceptible de subir une défaillance de liaison ou d'exécution.
-msingle-flotteur
Supposons que le coprocesseur à virgule flottante ne prend en charge que les opérations en simple précision.
-mdouble-flotteur
Supposons que le coprocesseur à virgule flottante prend en charge les opérations en double précision. Cette
est la valeur par défaut.
-modd-spreg
-mno-impair-spreg
Activer l'utilisation de registres à virgule flottante simple précision impairs pour le o32
ABI. Il s'agit de la valeur par défaut pour les processeurs connus pour prendre en charge ces registres.
Lors de l'utilisation de l'ABI o32 FPXX, -mno-impair-spreg est défini par défaut.
-mabs=2008
-mabs=héritage
Ces options contrôlent le traitement du numéro spécial not-a-number (NaN) IEEE 754
données à virgule flottante avec le "abs.fmt" et "nég.fmt" mode d'emploi de la machine.
Par défaut ou quand -mabs=héritage est utilisé le traitement hérité est sélectionné. Dans ce
dans le cas où ces instructions sont considérées comme arithmétiques et évitées lorsqu'un fonctionnement correct
est requis et l'opérande d'entrée peut être un NaN. Une séquence d'instructions plus longue
qui manipulent le bit de signe de la donnée à virgule flottante manuellement est utilisé à la place à moins que
le -ffinite-mathématiques-seulement option a également été spécifiée.
VOTRE -mabs=2008 L'option sélectionne le traitement IEEE 754-2008. Dans ce cas ces
les instructions sont considérées comme non arithmétiques et fonctionnent donc correctement dans tous les
cas, y compris notamment où l'opérande d'entrée est un NaN. Ces instructions
sont donc toujours utilisés pour les opérations respectives.
-mnan=2008
-mnan=héritage
Ces options contrôlent l'encodage du numéro spécial not-a-number (NaN) IEEE 754
données à virgule flottante.
VOTRE -mnan=héritage L'option sélectionne l'encodage hérité. Dans ce cas, des NaNs silencieux (qNaNs)
sont indiqués par le premier bit de leur champ de significance de fin étant 0, alors que
les NaN de signalisation (sNaNs) sont désignés par le premier bit de leur significande de fin
le champ étant 1.
VOTRE -mnan=2008 L'option sélectionne l'encodage IEEE 754-2008. Dans ce cas, les qNaN sont
dénoté par le premier bit de leur champ de significande de queue étant 1, alors que sNaNs
sont indiqués par le premier bit de leur champ de significande de fin étant 0.
La valeur par défaut est -mnan=héritage sauf si GCC a été configuré avec --avec-nan=2008.
-mllsc
-mno-llsc
Utiliser (ne pas utiliser) ll, sc et synchroniser instructions pour implémenter la mémoire atomique intégrée
les fonctions. Lorsqu'aucune option n'est spécifiée, GCC utilise les instructions si la cible
l'architecture les supporte.
-mllsc est utile si l'environnement d'exécution peut émuler les instructions et -mno-llsc
peut être utile lors de la compilation d'ISA non standard. Vous pouvez faire de l'une ou l'autre option le
par défaut en configurant GCC avec --avec-llsc et --sans-llsc respectivement.
--avec-llsc est la valeur par défaut pour certaines configurations ; voir la documentation d'installation
pour en savoir plus.
-mdsp
-mno-dsp
Utilisez (ne pas utiliser) la révision 1 du MIPS DSP ASE.
Cette option définit la macro du préprocesseur "__mips_dsp". Il définit également
"__mips_dsp_rev" à 1.
-mdspr2
-mno-dspr2
Utilisez (ne pas utiliser) la révision 2 du MIPS DSP ASE.
Cette option définit les macros du préprocesseur "__mips_dsp" et "__mips_dspr2". Ce
définit également "__mips_dsp_rev" à 2.
-msmartmips
-mno-smartmips
Utilisez (ne pas utiliser) le MIPS SmartMIPS ASE.
-simple-altéré
-mno-paire-single
Utilisez (n'utilisez pas) des instructions à virgule flottante unique appariée.
Cette option nécessite l'activation de la prise en charge matérielle des virgules flottantes.
-mdmx
-mno-mdmx
Utilisez (ne pas utiliser) les instructions de MIPS Digital Media Extension. Cette option ne peut être
utilisé lors de la génération de code 64 bits et nécessite la prise en charge matérielle de la virgule flottante
activée.
-mips3d
-mno-mips3d
Utilisez (ne pas utiliser) le MIPS-3D ASE. L'option -mips3d implique -simple-altéré.
-mmicromips
-mno-micromips
Générez (ne générez pas) de code microMIPS.
La génération de code MicroMIPS peut également être contrôlée fonction par fonction au moyen de
attributs "micromips" et "nomicromips".
-mmt
-mno-mt
Utilisez (ne pas utiliser) les instructions MT Multithreading.
-mmcu
-mno-mcu
Utilisez (ne pas utiliser) les instructions MIPS MCU ASE.
-méva
-mno-eva
Utilisez (ne pas utiliser) les instructions d'adressage virtuel amélioré MIPS.
-mvirt
-mno-virt
Utilisez (n'utilisez pas) les instructions spécifiques à l'application de virtualisation MIPS.
-mxpa
-mno-xpa
Utilisez (n'utilisez pas) les instructions MIPS eXtended Physical Address (XPA).
-mlong64
Forcer les types "longs" à avoir une largeur de 64 bits. Voir -mlong32 pour une explication du défaut
et la façon dont la taille du pointeur est déterminée.
-mlong32
Forcer les types "long", "int" et pointeur à avoir une largeur de 32 bits.
La taille par défaut des "int", "long" et des pointeurs dépend de l'ABI. Tous les
les ABI prises en charge utilisent des "int" 32 bits. L'ABI n64 utilise des "longs" 64 bits, tout comme le 64 bits
EABI ; les autres utilisent des "longs" 32 bits. Les pointeurs ont la même taille que les "longs", ou le
même taille que les registres d'entiers, selon la plus petite des deux.
-msym32
-mno-sym32
Supposons (ne supposez pas) que tous les symboles ont des valeurs de 32 bits, quel que soit le
ABI. Cette option est utile en combinaison avec -mabi=64 et -mno-abicales parce qu'il
permet à GCC de générer des références plus courtes et plus rapides à des adresses symboliques.
-G num
Mettez les définitions des données visibles de l'extérieur dans une petite section de données si ces données ne sont pas
plus grand que num octets. GCC peut alors générer des accès plus efficaces aux données ; voir
-mgpopt pour en savoir plus.
Le défaut -G option dépend de la configuration.
-mlocal-sdata
-mno-local-sdata
Étendre (ne pas étendre) le -G comportement aux données locales aussi, comme aux variables statiques
dans C. -mlocal-sdata est la valeur par défaut pour toutes les configurations.
Si l'éditeur de liens se plaint qu'une application utilise trop de petites données, vous pouvez
voulez essayer de reconstruire les pièces les moins critiques avec -mno-local-sdata. Vous
peut également vouloir construire de grandes bibliothèques avec -mno-local-sdata, afin que les bibliothèques
laisser plus de place au programme principal.
-mextern-sdata
-mno-extern-sdata
Supposons (ne supposez pas) que les données définies en externe se trouvent dans une petite section de données si le
la taille de ces données est dans le -G limite. -mextern-sdata est la valeur par défaut pour tous
configurations.
Si vous compilez un module Façon avec -mextern-sdata -G num -mgpopt et Façon référence un
variable Chaque ce n'est pas plus grand que num octets, vous devez vous assurer que Chaque est placé
dans une petite section de données. Si Chaque est défini par un autre module, vous devez soit compiler
ce module avec une assez haute -G définir ou attacher un attribut "section" à Chaque's
définition. Si Chaque est courant, vous devez lier l'application avec un -G
réglage.
Le moyen le plus simple de satisfaire ces restrictions est de compiler et de lier chaque module
avec la même -G option. Cependant, vous souhaiterez peut-être créer une bibliothèque prenant en charge
plusieurs petites limites de données différentes. Vous pouvez le faire en compilant la bibliothèque avec
le plus élevé pris en charge -G réglage et en plus à l'aide -mno-extern-sdata pour arrêter le
bibliothèque de faire des hypothèses sur les données définies de l'extérieur.
-mgpopt
-mno-gpopt
Utiliser (ne pas utiliser) les accès relatifs au GP pour les symboles connus pour être dans une petite donnée
section; voir -G, -mlocal-sdata et -mextern-sdata. -mgpopt est la valeur par défaut pour tous
configurations.
-mno-gpopt est utile pour les cas où le registre $gp pourrait ne pas contenir la valeur de
"_gp". Par exemple, si le code fait partie d'une bibliothèque qui peut être utilisée dans un boot
monitor, les programmes qui appellent les routines de boot monitor passent une valeur inconnue dans $gp. (Dans
de telles situations, le moniteur de démarrage lui-même est généralement compilé avec -G0.)
-mno-gpopt implique -mno-local-sdata et -mno-extern-sdata.
-données-intégrées
-mno-données-intégrées
Allouez d'abord les variables à la section de données en lecture seule si possible, puis ensuite dans la
petite section de données si possible, sinon dans les données. Cela donne un code légèrement plus lent
que la valeur par défaut, mais réduit la quantité de RAM requise lors de l'exécution, et peut donc
être préféré pour certains systèmes embarqués.
-muninit-const-in-rodata
-mno-uninit-const-dans-rodata
Mettez les variables "const" non initialisées dans la section de données en lecture seule. Cette option est
n'a de sens qu'en conjonction avec -données-intégrées.
-mcode-lisible=mise
Spécifiez si GCC peut générer du code qui se lit à partir des sections exécutables. Il y a
trois réglages possibles :
-mcode-readable=oui
Les instructions peuvent accéder librement aux sections exécutables. Ce sont les paramètres par défauts.
-mcode-lisible=pcrel
Les instructions de chargement MIPS16 relatives au PC peuvent accéder aux sections exécutables, mais d'autres
les instructions ne doivent pas le faire. Cette option est utile sur les processeurs 4KSc et 4KSd
lorsque les TLB de code ont le bit d'interdiction de lecture défini. Il est également utile sur les processeurs
qui peut être configuré pour avoir une double interface SRAM instruction/données et qui,
comme le M4K, redirigent automatiquement les charges relatives au PC vers la RAM d'instructions.
-mcode-readable=non
Les instructions ne doivent pas accéder aux sections exécutables. Cette option peut être utile sur
cibles qui sont configurées pour avoir une double interface SRAM instruction/données mais
qui (contrairement au M4K) ne redirigent pas automatiquement les charges relatives au PC vers le
RAM d'instructions.
-msplit-adresses
-mno-split-adresses
Activer (désactiver) l'utilisation des opérateurs de relocalisation d'assembleur "%hi()" et "%lo()". Cette
l'option a été remplacée par -mexplicit-relocs mais est retenu pour l'arrière
compatibilité.
-mexplicit-relocs
-mno-explicite-relocs
Utilisez (n'utilisez pas) les opérateurs de relocalisation d'assembleur lorsque vous traitez des adresses symboliques.
L'alternative, choisie par -mno-explicite-relocs, consiste à utiliser des macros assembleur à la place.
-mexplicit-relocs est la valeur par défaut si GCC a été configuré pour utiliser un assembleur qui
soutient les opérateurs de relocalisation.
-mcheck-division-zéro
-mno-check-zéro-division
Piège (ne pas piège) sur division entière par zéro.
La valeur par défaut est -mcheck-division-zéro.
-mdivide-pièges
-mdivide-pauses
Les systèmes MIPS vérifient la division par zéro en générant soit un déroutement conditionnel, soit un
instruction de pause. L'utilisation de traps donne un code plus petit, mais n'est pris en charge que sur MIPS
II et plus tard. De plus, certaines versions du noyau Linux ont un bogue qui empêche le piège
de générer le signal approprié ("SIGFPE"). Utilisation -mdivide-pièges permettre au conditionnel
pièges sur les architectures qui les supportent et -mdivide-pauses pour forcer l'utilisation de
des pauses.
La valeur par défaut est généralement -mdivide-pièges, mais cela peut être remplacé au moment de la configuration
en utilisant --with-divide=casse. Les contrôles de division par zéro peuvent être complètement désactivés en utilisant
-mno-check-zéro-division.
-mmemcpy
-mno-memcpy
Forcez (ne forcez pas) l'utilisation de "memcpy" pour les mouvements de blocs non triviaux. La valeur par défaut est
-mno-memcpy, ce qui permet à GCC d'intégrer la plupart des copies de taille constante.
-mlong-appels
-mno-long-appels
Désactivez (ne désactivez pas) l'utilisation de l'instruction "jal". Appeler des fonctions avec "jal"
est plus efficace mais nécessite que l'appelant et l'appelé soient dans le même 256 mégaoctets
segment.
Cette option n'a aucun effet sur le code abicalls. La valeur par défaut est -mno-long-appels.
-mmad
-mno-fou
Activer (désactiver) l'utilisation des instructions « mad », « madu » et « mul », telles que fournies par le
R4650ISA.
-Mimadd
-mno-imadd
Activer (désactiver) l'utilisation des instructions entières "madd" et "msub". La valeur par défaut est
-Mimadd sur les architectures supportant "madd" et "msub" sauf le 74k
architecture où il s'est avéré générer du code plus lent.
-mfused-mad
-mno-fusionné-madd
Activer (désactiver) l'utilisation des instructions de multiplication-accumulation à virgule flottante, lorsqu'elles
sont disponibles. La valeur par défaut est -mfused-mad.
Sur l'UC R8000, lorsque des instructions de multiplication-accumulation sont utilisées, l'intermédiaire
produit est calculé avec une précision infinie et n'est pas soumis au FCSR Flush to
Bit zéro. Cela peut être indésirable dans certaines circonstances. Sur les autres processeurs, le
le résultat est numériquement identique au calcul équivalent utilisant une multiplication séparée,
ajouter, soustraire et annuler des instructions.
-nocpp
Dites à l'assembleur MIPS de ne pas exécuter son préprocesseur sur les fichiers assembleur utilisateur (avec un
.s suffixe) lors de leur assemblage.
-mfix-24k
-mno-fix-24k
Contournez l'errata 24K E48 (données perdues sur les magasins pendant la recharge). Les solutions de contournement
sont implémentés par l'assembleur plutôt que par GCC.
-mfix-r4000
-mno-fix-r4000
Contournez certains errata du processeur R4000 :
- Un mot double ou un décalage variable peut donner un résultat incorrect s'il est exécuté
immédiatement après avoir commencé une division entière.
- Un mot double ou un décalage variable peut donner un résultat incorrect s'il est exécuté pendant
une multiplication d'entiers est en cours.
- Une division entière peut donner un résultat incorrect si elle est lancée dans un intervalle de retard d'un
branche prise ou un saut.
-mfix-r4400
-mno-fix-r4400
Contournez certains errata du processeur R4400 :
- Un mot double ou un décalage variable peut donner un résultat incorrect s'il est exécuté
immédiatement après avoir commencé une division entière.
-mfix-r10000
-mno-fix-r10000
Contournement de certains errata R10000 :
- Les séquences "ll"/"sc" peuvent ne pas se comporter de manière atomique sur les révisions antérieures à 3.0. Ils peuvent
blocage sur les révisions 2.6 et antérieures.
Cette option ne peut être utilisée que si l'architecture cible prend en charge les branches probables
des instructions. -mfix-r10000 est la valeur par défaut lorsque -mars=r10000 est utilisé; -mno-fix-r10000
est la valeur par défaut sinon.
-mfix-rm7000
-mno-fix-rm7000
Contournez l'errata "dmult"/"dmultu" du RM7000. Les solutions de contournement sont mises en œuvre par
l'assembleur plutôt que par GCC.
-mfix-vr4120
-mno-fix-vr4120
Contournement de certains errata du VR4120 :
- "dmultu" ne produit pas toujours le bon résultat.
- "div" et "ddiv" ne produisent pas toujours le bon résultat si l'un des opérandes
est négatif.
Les solutions de contournement pour les errata de division reposent sur des fonctions spéciales dans libgcc.a. À
présentes, ces fonctions ne sont fournies que par les configurations "mips64vr*-elf".
D'autres errata VR4120 nécessitent l'insertion d'un NOP entre certaines paires de
instructions. Ces errata sont gérés par l'assembleur, pas par GCC lui-même.
-mfix-vr4130
Contournez l'errata "mflo"/"mfhi" du VR4130. Les solutions de contournement sont mises en œuvre par le
assembleur plutôt que par GCC, bien que GCC évite d'utiliser "mflo" et "mfhi" si le
Les instructions VR4130 "macc", "macchi", "dmacc" et "dmacchi" sont disponibles à la place.
-mfix-sb1
-mno-fix-sb1
Contournez certains errata du cœur du processeur SB-1. (Ce drapeau fonctionne actuellement autour du SB-1
révision 2 "F1" et "F2" errata à virgule flottante.)
-mr10k-cache-barrier=mise
Spécifiez si GCC doit insérer des barrières de cache pour éviter les effets secondaires de
spéculation sur les processeurs R10K.
Comme de nombreux processeurs, le R10K essaie de prédire le résultat d'un
branche et exécute de manière spéculative les instructions de la branche "prise". Il plus tard
interrompt ces instructions si le résultat prévu est erroné. Cependant, sur le R10K,
même les instructions avortées peuvent avoir des effets secondaires.
Ce problème n'affecte que les magasins du noyau et, selon le système, les charges du noyau.
Par exemple, un magasin exécuté de manière spéculative peut charger la mémoire cible dans le cache
et marquez la ligne de cache comme sale, même si le magasin lui-même est abandonné plus tard. Si un DMA
l'opération écrit dans la même zone de mémoire avant que la ligne "sale" ne soit vidée, le
les données mises en cache écrasent les données DMA. Voir le manuel du processeur R10K pour un
description, y compris d'autres problèmes potentiels.
Une solution de contournement consiste à insérer des instructions de barrière de cache avant chaque accès à la mémoire qui
pourrait être exécuté de manière spéculative et cela pourrait avoir des effets secondaires même s'il est avorté.
-mr10k-cache-barrier=mise contrôle la mise en œuvre par GCC de cette solution de contournement. Ce
suppose que les accès avortés à n'importe quel octet dans les régions suivantes n'ont pas de côté
effets:
1. la mémoire occupée par le cadre de pile de la fonction actuelle ;
2. la mémoire occupée par un argument de pile entrant ;
3. la mémoire occupée par un objet avec une adresse de constante de temps de liaison.
Il est de la responsabilité du noyau de s'assurer que les accès spéculatifs à ces régions
sont en effet en sécurité.
Si le programme d'entrée contient une déclaration de fonction telle que :
void foo (vide);
alors l'implémentation de "foo" doit permettre l'exécution de "j foo" et "jal foo"
spéculativement. GCC respecte cette restriction pour les fonctions qu'il compile lui-même. Ce
s'attend à ce que les fonctions non GCC (comme le code assembleur écrit à la main) fassent de même.
L'option a trois formes :
-mr10k-cache-barrier=charger-magasin
Insérer une barrière de cache avant un chargement ou un stockage qui pourrait être exécuté de manière spéculative
et cela peut avoir des effets secondaires même s'il est avorté.
-mr10k-cache-barrier=magasin
Insérez une barrière de cache avant un magasin qui pourrait être exécuté de manière spéculative et
cela pourrait avoir des effets secondaires même s'il est avorté.
-mr10k-cache-barrier=aucun
Désactivez l'insertion de barrières de cache. Ce sont les paramètres par défauts.
-mflush-func=fonction
-mno-flush-func
Spécifie la fonction à appeler pour vider les caches I et D, ou pour ne pas en appeler
fonction. Si elle est appelée, la fonction doit prendre les mêmes arguments que le commun
"_flush_func", c'est-à-dire l'adresse de la plage mémoire pour laquelle le cache est
vidés, la taille de la plage de mémoire et le nombre 3 (pour vider les deux caches). Les
par défaut dépend de la cible GCC a été configuré pour, mais est généralement soit
"_flush_func" ou "__cpu_flush".
mbranche-coût=num
Fixez le coût des succursales à environ num instructions "simples". Ce coût n'est qu'un
heuristique et n'est pas garanti de produire des résultats cohérents entre les versions. Un zéro
le coût sélectionne de manière redondante la valeur par défaut, qui est basée sur le -mtune réglage.
-mbranche-probable
-mno-branche-probable
Activer ou désactiver l'utilisation des instructions Branch Likely, quelle que soit la valeur par défaut du
architecture choisie. Par défaut, les instructions Branch Likely peuvent être générées si
ils sont supportés par l'architecture choisie. Une exception est pour le MIPS32 et
Architectures et processeurs MIPS64 qui implémentent ces architectures ; pour ceux,
Les instructions Branch Likely ne sont pas générées par défaut car les MIPS32 et
Les architectures MIPS64 désapprouvent spécifiquement leur utilisation.
-exceptions-mfp
-mno-fp-exceptions
Spécifie si les exceptions FP sont activées. Cela affecte la façon dont les instructions FP sont
prévu pour certains processeurs. Par défaut, les exceptions FP sont activées.
Par exemple, sur le SB-1, si les exceptions FP sont désactivées et que nous émettons 64 bits
code, alors nous pouvons utiliser les deux tuyaux FP. Sinon, nous ne pouvons utiliser qu'un seul tuyau FP.
-mvr4130-aligner
-mno-vr4130-aligner
Le pipeline VR4130 est superscalaire bidirectionnel, mais ne peut émettre que deux instructions
ensemble si le premier est aligné sur 8 octets. Lorsque cette option est activée, GCC aligne
paires d'instructions qu'il pense devoir exécuter en parallèle.
Cette option n'a d'effet que lors de l'optimisation pour le VR4130. Il fait normalement du code
plus vite, mais au détriment de l'agrandir. Il est activé par défaut à
niveau d'optimisation -O3.
-msynci
-mno-synci
Activer (désactiver) la génération d'instructions "synci" sur les architectures qui la supportent.
Les instructions "synci" (si activées) sont générées lorsque "__builtin___clear_cache" est
compilé.
Cette option est par défaut -mno-synci, mais la valeur par défaut peut être remplacée en configurant
CCG avec --avec-synci.
Lors de la compilation de code pour des systèmes à processeur unique, il est généralement sûr d'utiliser "synci".
Cependant, sur de nombreux systèmes multicœurs (SMP), cela n'invalide pas l'instruction
caches sur tous les cœurs et peut conduire à un comportement indéfini.
-mrelax-pic-calls
-mno-relax-pic-calls
Essayez de transformer les appels PIC qui sont normalement envoyés via le registre 25 $ en appels directs.
Ceci n'est possible que si l'éditeur de liens peut résoudre la destination au moment de la liaison et si
la destination est à portée pour un appel direct.
-mrelax-pic-calls est la valeur par défaut si GCC a été configuré pour utiliser un assembleur et un
éditeur de liens prenant en charge la directive d'assemblage ".reloc" et -mexplicit-relocs est en
effet. Avec -mno-explicite-relocs, cette optimisation peut être effectuée par le
assembleur et l'éditeur de liens seuls sans l'aide du compilateur.
-mmcount-ra-adresse
-mno-mcount-ra-adresse
Emettre (ne pas émettre) de code qui permet à "_mcount" de modifier le retour de la fonction appelante
adresse. Lorsqu'elle est activée, cette option étend l'interface habituelle "_mcount" avec un nouveau
ra-adresse paramètre, qui a le type "intptr_t *" et est passé dans le registre $12.
"_mcount" peut alors modifier l'adresse de retour en effectuant les deux opérations suivantes :
* Renvoyer la nouvelle adresse dans le registre 31 $.
* Mémorisation de la nouvelle adresse dans "*ra-adresse", Si ra-adresse est non nul.
La valeur par défaut est -mno-mcount-ra-adresse.
MÉLANGE Options
Ces options sont définies pour le MMIX :
-mlibfuncs
-mno-libfuncs
Spécifiez que les fonctions de bibliothèque intrinsèques sont en cours de compilation, en passant toutes les valeurs dans
registres, quelle que soit leur taille.
-mepsilon
-mno-epsilon
Générer des instructions de comparaison à virgule flottante qui comparent par rapport au "rE"
registre epsilon.
-mabi=mmixware
-mabi=gnou
Générer du code qui transmet les paramètres de fonction et renvoie des valeurs qui (dans le
fonction) sont considérés comme des registres à partir de 0 $, par opposition à l'ABI GNU qui utilise
s'inscrit à 231 $ et plus.
-mzero-étendre
-mno-zero-étendre
Lors de la lecture de données de la mémoire dans des tailles inférieures à 64 bits, utilisez (ne pas utiliser) zéro-
étendre les instructions de chargement par défaut, plutôt que celles qui étendent le signe.
-mknuthdiv
-mno-knuthdiv
Faire en sorte que le résultat d'une division donnant un reste ait le même signe que le diviseur.
Avec la valeur par défaut, -mno-knuthdiv, le signe du reste suit le signe du
dividende. Les deux méthodes sont arithmétiquement valides, la dernière étant presque exclusivement
utilisé.
-mtoplevel-symboles
-mno-toplevel-symboles
Ajouter (ne pas ajouter) a : à tous les symboles globaux, donc le code assembleur peut être utilisé
avec la directive d'assemblage "PREFIX".
-moi
Générer un exécutable au format ELF, plutôt que le format par défaut mmo format utilisé par
le mmmix simulateur.
-mbranche-prédire
-mno-branche-prédire
Utiliser (ne pas utiliser) les instructions de branche probable, lorsque la prédiction de branche statique
indique une branche probable.
-mbase-adresses
-mno-base-adresses
Générer (ne pas générer) de code qui utilise base adresses. Utiliser une adresse de base
génère automatiquement une requête (traitée par l'assembleur et l'éditeur de liens) pour un
constante à paramétrer dans un registre global. Le registre est utilisé pour une ou plusieurs bases
les demandes d'adresses comprises entre 0 et 255 à partir de la valeur contenue dans le registre. Les
conduit généralement à un code court et rapide, mais le nombre d'éléments de données différents qui
peut être abordé est limité. Cela signifie qu'un programme qui utilise beaucoup de données statiques
peut nécessiter -mno-base-adresses.
-msortie unique
-mno-simple-sortie
Forcer (ne pas forcer) le code généré à avoir un seul point de sortie dans chaque fonction.
MN10300 Options
Ces -m les options sont définies pour les architectures Matsushita MN10300 :
-mmult-bogue
Générez du code pour éviter les bogues dans les instructions de multiplication pour les processeurs MN10300.
C'est la valeur par défaut.
-mno-mult-bogue
Ne générez pas de code pour éviter les bogues dans les instructions de multiplication pour le MN10300
processeurs.
-maman33
Générez du code à l'aide de fonctionnalités spécifiques au processeur AM33.
-mno-am33
Ne générez pas de code en utilisant des fonctionnalités spécifiques au processeur AM33. C'est le
défaut.
-maman33-2
Générez du code à l'aide de fonctionnalités spécifiques au processeur AM33/2.0.
-maman34
Générez du code à l'aide de fonctionnalités spécifiques au processeur AM34.
-mtune=type de processeur
Utilisez les caractéristiques de synchronisation du type de CPU indiqué lors de la planification des instructions.
Cela ne change pas le type de processeur ciblé. Le type de CPU doit être l'un des
mn10300, am33, am33-2 or am34.
-mreturn-pointeur-sur-d0
Lors de la génération d'une fonction qui renvoie un pointeur, renvoyez le pointeur à la fois dans "a0" et
"d0". Sinon, le pointeur n'est renvoyé que dans "a0", et tente d'appeler un tel
les fonctions sans prototype entraînent des erreurs. Notez que cette option est activée par
défaut; utilisation -mno-retour-pointeur-sur-d0 pour le désactiver.
-mno-crt0
Ne pas lier dans le fichier objet d'initialisation d'exécution C.
-mrelax
Indiquez à l'éditeur de liens qu'il doit effectuer une passe d'optimisation de relaxation pour
raccourcir les branches, les appels et les adresses mémoire absolues. Cette option n'a d'effet que
lorsqu'il est utilisé sur la ligne de commande pour l'étape de liaison finale.
Cette option rend le débogage symbolique impossible.
-mliw
Autoriser le compilateur à générer Long Instruction Word instructions si la cible est le
AM33 ou plus tard. C'est la valeur par défaut. Cette option définit la macro du préprocesseur
"__LIW__".
-mnoliw
Ne pas autoriser le compilateur à générer Long Instruction Word instructions. Cette option
définit la macro de préprocesseur "__NO_LIW__".
-msetlb
Autoriser le compilateur à générer le SETLB et LCC instructions si la cible est le
AM33 ou plus tard. C'est la valeur par défaut. Cette option définit la macro du préprocesseur
"__SETLB__".
-mnosetlb
Ne pas autoriser le compilateur à générer SETLB or LCC instructions. Cette option définit
la macro du préprocesseur "__NO_SETLB__".
Moxie Options
-meb
Générez du code gros-boutiste. C'est la valeur par défaut pour moxie-*-* configurations.
-mel
Générez du code little-endian.
-mmul.x
Générez des instructions mul.x et umul.x. C'est la valeur par défaut pour moxiebox-*-*
configurations.
-mno-crt0
Ne pas lier dans le fichier objet d'initialisation d'exécution C.
MSP430 Options
Ces options sont définies pour le MSP430 :
-masm-hex
Forcer la sortie de l'assembly à toujours utiliser des constantes hexadécimales. Normalement, ces constantes sont signées
décimales, mais cette option est disponible pour la suite de tests et/ou à des fins esthétiques.
-mmcu=
Sélectionnez le MCU à cibler. Ceci est utilisé pour créer un symbole de préprocesseur C basé sur
le nom du MCU, converti en majuscule et pré- et post-fixé avec __. Ceci à son tour
est utilisé par le msp430.h fichier d'en-tête pour sélectionner un en-tête supplémentaire spécifique au MCU
fichier.
L'option définit également l'ISA à utiliser. Si le nom du MCU est un nom connu uniquement de
prend en charge le 430 ISA alors qui est sélectionné, sinon le 430X ISA est sélectionné. UNE
nom générique du MCU de msp430 peut également être utilisé pour sélectionner le 430 ISA. De même le
générique msp430x Le nom du MCU sélectionne l'ISA 430X.
De plus, un script d'éditeur de liens spécifique au MCU est ajouté à la ligne de commande de l'éditeur de liens. Les
le nom du script est le nom du MCU avec .ld en annexe. spécifiant ainsi -mmcu=xxx on
le gcc la ligne de commande définit le symbole du préprocesseur C "__XXX__" et provoque l'éditeur de liens
pour rechercher un script appelé xxx.ld.
Cette option est également transmise à l'assembleur.
-mcpu=
Spécifie l'ISA à utiliser. Les valeurs acceptées sont msp430, msp430x et msp430xv2. Ce
l'option est obsolète. Les -mmcu= doit être utilisée pour sélectionner l'ISA.
-msim
Lien vers les bibliothèques d'exécution du simulateur et le script de l'éditeur de liens. Remplace tous les scripts qui
serait sélectionné par le -mmcu= option.
-mlarge
Utilisez un adressage grand modèle (pointeurs 20 bits, "size_t" 32 bits).
-mpetit
Utilisez un adressage petit modèle (pointeurs 16 bits, "size_t" 16 bits).
-mrelax
Cette option est passée à l'assembleur et à l'éditeur de liens, et permet à l'éditeur de liens d'effectuer
certaines optimisations qui ne peuvent se faire qu'au dernier maillon.
mhwmulti=
Décrit le type de matériel multiplié pris en charge par la cible. Les valeurs acceptées sont
aucun pour aucun matériel se multiplier, 16bit pour le multiplicateur original de 16 bits uniquement pris en charge
par les premiers MCU. 32bit pour le multiplicateur 16/32 bits pris en charge par les MCU ultérieurs et série f5
pour le multiplicateur 16/32 bits pris en charge par les MCU de la série F5. Une valeur de auto peut également être
étant donné. Cela indique à GCC de déduire la prise en charge de la multiplication matérielle en fonction du nom du MCU
fourni par -mmcu option. Sinon -mmcu l'option est spécifiée alors 32bit matériel
multiplier le support est supposé. auto est le paramètre par défaut.
Les multiplications matérielles sont normalement effectuées en appelant une routine de bibliothèque. Cela économise
espace dans le code généré. Lors de la compilation à -O3 ou supérieur cependant le matériel
le multiplicateur est invoqué en ligne. Cela donne un code plus gros mais plus rapide.
Les routines de multiplication matérielle désactivent les interruptions pendant l'exécution et restaurent le
l'état d'interruption précédent lorsqu'ils se terminent. Cela les rend sûrs à utiliser à l'intérieur
les gestionnaires d'interruption ainsi que dans le code normal.
-minrt
Activer l'utilisation d'un environnement d'exécution minimum - pas d'initialiseurs statiques ou
constructeurs. Ceci est destiné aux appareils à mémoire limitée. Le compilateur comprend
symboles spéciaux dans certains objets qui indiquent à l'éditeur de liens et à l'exécution quels fragments de code
sont obligatoires.
NDS32 Options
Ces options sont définies pour les implémentations NDS32 :
-mbig-endian
Générez du code en mode big-endian.
-mlittle-endian
Générez du code en mode little-endian.
-mreduced-regs
Utilisez des registres à ensemble réduit pour l'allocation des registres.
-mfull-regs
Utilisez des registres complets pour l'allocation des registres.
-mcmov
Générez des instructions de déplacement conditionnelles.
-mno-cmov
Ne générez pas d'instructions de déplacement conditionnel.
-mperf-ext
Générer des instructions d'extension de performances.
-mno-perf-ext
Ne générez pas d'instructions d'extension de performances.
-mv3push
Générez des instructions push3/pop25 v25.
-mno-v3push
Ne générez pas d'instructions v3 push25/pop25.
-m16 bits
Générez des instructions 16 bits.
-mno-16 bits
Ne générez pas d'instructions 16 bits.
-misr-taille-vecteur=num
Spécifiez la taille de chaque vecteur d'interruption, qui doit être 4 ou 16.
-mcache-block-size=num
Spécifiez la taille de chaque bloc de cache, qui doit être une puissance de 2 comprise entre 4 et 512.
-mars=arche
Spécifiez le nom de l'architecture cible.
-mcmodèle=code-modèle
Définissez le modèle de code sur l'un des
petit
Tous les segments de données et de données en lecture seule doivent se trouver dans un espace d'adressage de 512 Ko.
Le segment de texte doit être dans un espace d'adressage de 16 Mo.
moyenne
Le segment de données doit être inférieur à 512 Ko tandis que le segment de données en lecture seule peut être
dans un espace d'adressage de 4 Go. Le segment de texte doit toujours faire moins de 16 Mo
espace d'adressage.
gros
Tous les segments de texte et de données peuvent se trouver dans un espace d'adressage de 4 Go.
-mctor-dtor
Activer la fonctionnalité constructeur/destructeur.
-mrelax
Guide de liaison pour assouplir les instructions.
Les enfants II Options
Ce sont les options définies pour le processeur Altera Nios II.
-G num
Mettez les objets globaux et statiques inférieurs ou égaux à num octets dans les petites données ou
Sections BSS au lieu des données normales ou des sections BSS. La valeur par défaut de num is
8.
-mgpopt=option
-mgpopt
-mno-gpopt
Générer (ne pas générer) d'accès GP-relative. Ce qui suit option les noms sont
reconnu:
aucun
Ne générez pas d'accès GP-relative.
locales
Générer des accès GP-relative pour les petits objets de données qui ne sont pas externes ou
faible. Utilisez également l'adressage relatif à GP pour les objets qui ont été explicitement
placé dans une petite section de données via un attribut "section".
de défis
Pour ce qui est de locales, mais aussi générer des accès GP-relative pour les petits objets de données qui
sont externes ou faibles. Si vous utilisez cette option, vous devez vous assurer que toutes les parties de
votre programme (y compris les bibliothèques) sont compilés avec le même -G réglage.
données
Générez des accès GP-relative pour tous les objets de données dans le programme. Si tu utilises
cette option, les données entières et les segments BSS de votre programme doivent tenir dans 64K de
mémoire et vous devez utiliser un script de liaison approprié pour les allouer dans le
plage d'adressage du pointeur global.
tous Générez des adresses relatives à GP pour les pointeurs de fonction ainsi que les pointeurs de données. Si
vous utilisez cette option, le texte entier, les données et les segments BSS de votre programme doivent
tenir dans 64 Ko de mémoire et vous devez utiliser un script d'éditeur de liens approprié pour allouer
dans la plage d'adressage du pointeur global.
-mgpopt équivaut à -mgpopt=local et -mno-gpopt équivaut à -mgpopt=aucun.
La valeur par défaut est -mgpopt sauf quand -fpic or -fPIC est spécifié pour générer la position-
code indépendant. Notez que l'ABI Nios II n'autorise pas les accès relatifs au GP à partir de
bibliothèques partagées.
Vous devrez peut-être préciser -mno-gpopt explicitement lors de la création de programmes qui incluent
de grandes quantités de petites données, y compris de grandes sections de données GOT. Dans ce cas, le
Le décalage de 16 bits pour l'adressage relatif à GP peut ne pas être assez grand pour permettre l'accès à
toute la petite section de données.
-mel
-meb
Générez respectivement du code little-endian (par défaut) ou big-endian (expérimental).
-mbypass-cache
-mno-contourner-le cache
Forcer toutes les instructions de chargement et de stockage à toujours contourner le cache en utilisant des variantes d'E/S de
les instructions. La valeur par défaut est de ne pas contourner le cache.
-mno-cache-volatile
-mcache-volatile
L'accès à la mémoire volatile contourne le cache en utilisant les variantes d'E/S du chargement et du stockage
instructions. La valeur par défaut est de ne pas contourner le cache.
-mno-fast-sw-div
-mfast-sw-div
N'utilisez pas la division rapide basée sur un tableau pour les petits nombres. La valeur par défaut est d'utiliser le rapide
diviser à -O3 et ci-dessus.
-mno-hw-mul
-mhw-mul
-mno-hw-mulx
-Mhw-Mulx
-mno-hw-div
-mhw-div
Activer ou désactiver l'émission des familles d'instructions « mul », « mulx » et « div » par le
compilateur. La valeur par défaut est d'émettre « mul » et non « div » et « mulx ».
-mpersonnalisé-INS=N
-mno-personnalisé-INS
Chaque -mpersonnalisé-INS=N l'option permet l'utilisation d'une instruction personnalisée avec encodage N quand
générer du code qui utilise INS. Par exemple, -mcustom-fadds=253 génère une personnalisation
instruction 253 pour les opérations d'ajout à virgule flottante simple précision au lieu de
comportement par défaut de l'utilisation d'un appel de bibliothèque.
Les valeurs suivantes de INS sont pris en charge. Sauf indication contraire, la virgule flottante
les opérations devraient être implémentées avec la sémantique IEEE 754 normale et
correspondent directement aux opérateurs C ou aux fonctions intégrées équivalentes de GCC.
Virgule flottante simple précision :
les lubies, fsub, fdiv, fmul
Opérations arithmétiques binaires.
fnegs
Négation unaire.
fab
Valeur absolue unaire.
fcmpeqs, fcmpges, fcmgts, fcmles, fcmmplts, fcmpnes
Opérations de comparaison.
fmin, fmaxs
Minimum et maximum à virgule flottante. Ces instructions ne sont générées que si
-ffinite-mathématiques-seulement est spécifié.
fsqrts
Opération racine carrée unaire.
fcoss, fsins, ftans, fatans, fexp, fouets
Fonctions trigonométriques et exponentielles à virgule flottante. Ces instructions sont
généré uniquement si -funsafe-math-optimisations est également précisé.
Virgule flottante double précision :
fou, subd, FDIVD, fmulde
Opérations arithmétiques binaires.
fnegd
Négation unaire.
fabsd
Valeur absolue unaire.
fcmpeqd, fcmpgé, fcmpgtd, complété, fcmmpltd, fcmpné
Opérations de comparaison.
trouver, fmaxd
Minimum et maximum en double précision. Ces instructions ne sont générées que si
-ffinite-mathématiques-seulement est spécifié.
fsqrtd
Opération racine carrée unaire.
fcosd, trouver, et, gros, fexpd, flagellé
Fonctions trigonométriques et exponentielles à double précision. Ces instructions sont
généré uniquement si -funsafe-math-optimisations est également précisé.
Conversions :
fextsd
Conversion de simple précision en double précision.
ftruncds
Conversion de la double précision à la simple précision.
fixsi, réparer, fixer, fixdu
Conversion de virgule flottante en types entiers signés ou non signés, avec
troncature vers zéro.
Round
Conversion de la virgule flottante simple précision en entier signé, arrondi au
entier le plus proche et s'éloigne de zéro. Cela correspond au
Fonction "__builtin_lroundf" lorsque -fno-math-errno est utilisé.
flotter, flotteur, floatide, flotteur
Conversion de types entiers signés ou non signés en types à virgule flottante.
De plus, toutes les instructions de transfert suivantes pour les registres internes X et Y
doit être fourni pour utiliser l'une des instructions à virgule flottante double précision.
Les instructions personnalisées prenant deux opérandes source en double précision attendent le premier
opérande dans le registre 64 bits X. L'autre opérande (ou seul opérande d'un unaire
opération) est donnée à l'instruction arithmétique personnalisée avec le moins significatif
la moitié dans le registre source src1 et la moitié la plus importante de src2. Une coutume
l'instruction qui renvoie un résultat en double précision renvoie le plus significatif 32
bits dans le registre de destination et l'autre moitié dans le registre 32 bits Y. GCC
génère automatiquement les séquences de code nécessaires pour écrire le registre X et/ou lire
registre Y lorsque des instructions à virgule flottante double précision sont utilisées.
fwrx
Écrire src1 dans la moitié la moins significative de X et src2 dans le plus important
la moitié de X.
farfelu
Écrire src1 en Y.
frdxhi, frdxlo
Lire la moitié la plus ou la moins (respectivement) significative de X et la stocker dans moins.
frdy
Lire la valeur de Y et la stocker dans moins.
Notez que vous pouvez obtenir un contrôle plus local sur la génération de Nios II personnalisé
instructions en utilisant le "target("custom-insn=N")" et "target("no-custom-insn")"
attributs de fonction ou pragmas.
-mcustom-fpu-cfg=prénom
Cette option active un ensemble prédéfini et nommé d'encodages d'instructions personnalisés (voir
-mpersonnalisé-INS dessus). Actuellement, les ensembles suivants sont définis :
-mcustom-fpu-cfg=60-1 est équivalent à: -mcustom-fmuls=252 -mcustom-fadds=253
-mcustom-fsubs=254 -fconstante-single-précision
-mcustom-fpu-cfg=60-2 est équivalent à: -mcustom-fmuls=252 -mcustom-fadds=253
-mcustom-fsubs=254 -mcustom-fdivs=255 -fconstante-single-précision
-mcustom-fpu-cfg=72-3 est équivalent à: -mcustom-floatus = 243 -mcustom-fixsi=244
-mcustom-floatis=245 -mcustom-fcmmpgts=246 -mcustom-fcmles=249 -mcustom-fcmpeqs=250
-mcustom-fcmpnes=251 -mcustom-fmuls=252 -mcustom-fadds=253 -mcustom-fsubs=254
-mcustom-fdivs=255 -fconstante-single-précision
Des affectations d'instructions personnalisées données par un individu -mpersonnalisé-INS= remplacement des options
ceux donnés par -mcustom-fpu-cfg=, quel que soit l'ordre des options sur le
ligne de commande.
Notez que vous pouvez obtenir un contrôle plus local sur la sélection d'une configuration FPU en
en utilisant le "target("custom-fpu-cfg=Nom")" attribut de fonction ou pragma.
Ces supplémentaires -m des options sont disponibles pour la cible Altera Nios II ELF (bare-metal) :
-mhal
Lien avec HAL BSP. Cela supprime la liaison avec le démarrage du runtime C fourni par GCC
et le code de terminaison, et est généralement utilisé en conjonction avec -msys-crt0= spécifier
l'emplacement du code de démarrage alternatif fourni par HAL BSP.
-msmallc
Lien avec une version limitée de la librairie C, -lpetite, plutôt que Newlib.
-msys-crt0=fichier de démarrage
fichier de démarrage est le nom de fichier du fichier de démarrage (crt0) à utiliser lors de la liaison. Cette option
n'est utile qu'en association avec -mhal.
-msys-lib=bibliothèque système
bibliothèque système est le nom de la bibliothèque qui fournit les appels système de bas niveau
requis par la bibliothèque C, par exemple "read" et "write". Cette option est généralement utilisée pour
lien avec une bibliothèque fournie par un BSP HAL.
Nvidia PTX Options
Ces options sont définies pour Nvidia PTX :
-m32
-m64
Générez du code pour l'ABI 32 bits ou 64 bits.
-mmainkernel
Lien dans le code pour un noyau __main. Ceci est pour autonome au lieu de décharger
exécution.
PDP-11 Options
Ces options sont définies pour le PDP-11 :
-mfpu
Utilisez la virgule flottante FPP matérielle. C'est la valeur par défaut. (virgule flottante FIS sur le
PDP-11/40 n'est pas pris en charge.)
-msoft-float
N'utilisez pas de virgule flottante matérielle.
-mac0
Renvoie les résultats en virgule flottante dans ac0 (fr0 dans la syntaxe assembleur Unix).
-mno-ac0
Renvoie les résultats en virgule flottante en mémoire. C'est la valeur par défaut.
-m40
Générez du code pour un PDP-11/40.
-m45
Générez du code pour un PDP-11/45. C'est la valeur par défaut.
-m10
Générez du code pour un PDP-11/10.
-mbcopy-intégré
Utilisez des modèles "movmemhi" en ligne pour copier la mémoire. C'est la valeur par défaut.
-mbcopie
N'utilisez pas de modèles "movmemhi" en ligne pour copier la mémoire.
-menthe16
-mno-int32
Utilisez "int" 16 bits. C'est la valeur par défaut.
-menthe32
-mno-int16
Utilisez "int" 32 bits.
-mfloat64
-mno-float32
Utilisez le "float" 64 bits. C'est la valeur par défaut.
-mfloat32
-mno-float64
Utilisez "float" 32 bits.
-mabshi
Utilisez le modèle "abshi2". C'est la valeur par défaut.
-mno-abshi
N'utilisez pas le modèle "abshi2".
-mbranche-cher
Imaginez que les succursales sont chères. Ceci est pour expérimenter la génération de code
seulement.
-mbranche-pas cher
Ne prétendez pas que les branches sont chères. C'est la valeur par défaut.
-munix-asm
Utilisez la syntaxe assembleur Unix. Il s'agit de la valeur par défaut lorsqu'il est configuré pour pdp11-*-bsd.
-mdec-asm
Utilisez la syntaxe assembleur DEC. C'est la valeur par défaut lorsqu'elle est configurée pour n'importe quelle cible PDP-11
autre que pdp11-*-bsd.
picoChip Options
Ces -m les options sont définies pour les implémentations picoChip :
-mae=ae_type
Définir le jeu d'instructions, le jeu de registres et les paramètres de planification d'instructions pour le tableau
type d'élément ae_type. Valeurs prises en charge pour ae_type à N'IMPORTE QUELLE RÉUNION sur la liste., MUL et MAC.
-mae=TOUT sélectionne un type AE complètement générique. Le code généré avec cette option s'exécute
sur l'un des autres types d'AE. Le code n'est pas aussi efficace qu'il le serait s'il était compilé
pour un type AE spécifique, et certains types d'opérations (par exemple, la multiplication) ne fonctionnent pas
correctement sur tous les types d'EA.
-mae=MUL sélectionne un type MUL AE. C'est le type AE le plus utile pour le code compilé,
et est la valeur par défaut.
-mae=MAC sélectionne un MAC AE de style DSP. Le code compilé avec cette option peut souffrir de
mauvaise performance de la manipulation d'octets (car), puisque le DSP AE ne fournit pas
prise en charge matérielle pour le chargement/les magasins d'octets.
-msymbole-comme-adresse
Permet au compilateur d'utiliser directement un nom de symbole comme adresse dans un chargement/stockage
instruction, sans la charger au préalable dans un registre. En règle générale, l'utilisation de ce
L'option génère des programmes plus volumineux, qui s'exécutent plus rapidement que lorsque l'option n'est pas utilisée.
Cependant, les résultats varient d'un programme à l'autre, il est donc laissé comme une option utilisateur,
plutôt que d'être activé en permanence.
-mno-inefficace-warnings
Désactive les avertissements concernant la génération de code inefficace. Ces avertissements peuvent être
généré, par exemple, lors de la compilation de code qui effectue des opérations de mémoire au niveau de l'octet
sur le type MAC AE. Le MAC AE n'a pas de support matériel pour la mémoire au niveau de l'octet
opérations, de sorte que tous les chargements/stocks d'octets doivent être synthétisés à partir du chargement/stockage de mots
opérations. Ceci est inefficace et un avertissement est généré pour indiquer que vous
devrait réécrire le code pour éviter les opérations sur les octets, ou pour cibler un type AE qui a le
support matériel nécessaire. Cette option désactive ces avertissements.
PowerPC Options
Ceux-ci sont répertoriés sous
RL78 Options
-msim
Liens dans des bibliothèques cibles supplémentaires pour prendre en charge le fonctionnement dans un simulateur.
-mmul=aucun
-mmul=g13
-mmul=rl78
Spécifie le type de support de multiplication matérielle à utiliser. La valeur par défaut est
aucun, qui utilise des fonctions de multiplication logicielles. Les g13 l'option est pour le
le matériel multiplie/divise le périphérique uniquement sur les cibles RL78/G13. Les rlxnumx option est
pour la multiplication matérielle standard définie dans le manuel du logiciel RL78.
-m64bit-double
-m32bit-double
Faites en sorte que le type de données "double" soit de 64 bits (-m64bit-double) ou 32 bits (-m32bit-double)
en taille. La valeur par défaut est -m32bit-double.
IBM RS / 6000 et PowerPC Options
Ces -m les options sont définies pour l'IBM RS/6000 et le PowerPC :
-mpowerpc-gpopt
-mno-powerpc-gpopt
-mpowerpc-gfxopt
-mno-powerpc-gfxopt
-mpowerpc64
-mno-powerpc64
-mmfcrf
-mno-mfcrf
-mpopcntb
-mno-popcntb
-mpopcntd
-mno-popcntd
-mfprnd
-mno-fprnd
-mcmpb
-mno-cmpb
-mmfpgpr
-mno-mfpgpr
-mhard-dfp
-mno-hard-dfp
Vous utilisez ces options pour spécifier quelles instructions sont disponibles sur le processeur que vous
utilisent. La valeur par défaut de ces options est déterminée lors de la configuration de GCC.
Spécification du -mcpu=type_cpu remplace la spécification de ces options. Nous
vous recommandons d'utiliser le -mcpu=type_cpu option plutôt que les options énumérées ci-dessus.
Spécification -mpowerpc-gpopt permet à GCC d'utiliser l'architecture PowerPC en option
instructions du groupe Usage général, y compris la racine carrée à virgule flottante.
Spécification -mpowerpc-gfxopt permet à GCC d'utiliser l'architecture PowerPC en option
instructions dans le groupe Graphics, y compris la sélection à virgule flottante.
VOTRE -mmfcrf L'option permet à GCC de générer le déplacement depuis le champ du registre de condition
instruction implémentée sur le processeur POWER4 et d'autres processeurs qui prennent en charge le
Architecture PowerPC V2.01. Les -mpopcntb L'option permet à GCC de générer le popcount
et instruction d'estimation réciproque FP double précision implémentée sur le POWER5
processeur et d'autres processeurs prenant en charge l'architecture PowerPC V2.02. Les
-mpopcntd permet à GCC de générer l'instruction popcount implémentée sur le
Processeur POWER7 et autres processeurs prenant en charge l'architecture PowerPC V2.06.
VOTRE -mfprnd L'option permet à GCC de générer les instructions d'arrondi FP en nombre entier
implémenté sur le processeur POWER5+ et d'autres processeurs prenant en charge le PowerPC
Architecture V2.03. Les -mcmpb L'option permet à GCC de générer les octets de comparaison
instruction implémentée sur le processeur POWER6 et d'autres processeurs qui prennent en charge le
Architecture PowerPC V2.05. Les -mmfpgpr L'option permet à GCC de générer le mouvement FP
vers/depuis les instructions de registre à usage général implémentées sur le processeur POWER6X et
d'autres processeurs prenant en charge l'architecture étendue PowerPC V2.05. Les -mhard-dfp
permet à GCC de générer les instructions décimales à virgule flottante implémentées sur
certains processeurs POWER.
VOTRE -mpowerpc64 permet à GCC de générer les instructions 64 bits supplémentaires qui
se trouvent dans l'architecture PowerPC64 complète et pour traiter les GPR comme des mots doubles 64 bits
quantités. GCC est par défaut -mno-powerpc64.
-mcpu=type_cpu
Définir le type d'architecture, l'utilisation des registres et les paramètres de planification des instructions pour
type de machine type_cpu. Valeurs prises en charge pour type_cpu 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, Titan, power3, power4, power5, puissance5+, power6,
puissance6x, power7, power8, powerpc, puissancepc64, powerpc64le et rs64.
-mcpu=powerpc, -mcpu=powerpc64 et -mcpu=powerpc64le spécifier un PowerPC 32 bits pur
(soit endian), PowerPC big endian 64 bits et PowerPC little endian 64 bits
types de machines à architecture, avec un modèle de processeur générique approprié supposé pour
fins de planification.
Les autres options spécifient un processeur spécifique. Code généré sous ces options
fonctionne mieux sur ce processeur et peut ne pas fonctionner du tout sur les autres.
VOTRE -mcpu les options activent ou désactivent automatiquement les options suivantes :
-maltivec -mfprnd -mhard-float -mmfcrf -mmultiple -mpopcntb -mpopcntd -mpowerpc64
-mpowerpc-gpopt -mpowerpc-gfxopt -msingle-flotteur -mdouble-flotteur -msimple-fpu -mstring
-mmulhw -mdlmzb -mmfpgpr -mvsx -mcrypto -mdirect-déplacement -mpower8-fusion
-mpower8-vecteur -mquad-mémoire -mquad-mémoire-atomique
Les options particulières définies pour un processeur particulier varient selon les versions du compilateur,
selon quel paramètre semble produire un code optimal pour ce processeur ; ce n'est pas
reflètent nécessairement les capacités réelles du matériel. Si vous souhaitez définir un
option individuelle à une valeur particulière, vous pouvez la spécifier après le -mcpu option,
comme -mcpu=970 -mno-altivec.
Sous AIX, le -maltivec et -mpowerpc64 les options ne sont pas activées ou désactivées par le -mcpu
option à l'heure actuelle car AIX ne prend pas entièrement en charge ces options. Tu peux
activez-les ou désactivez-les individuellement si vous êtes sûr que cela fonctionnera dans votre
environnement.
-mtune=type_cpu
Définir les paramètres de planification des instructions pour le type de machine type_cpu, mais ne définissez pas
le type d'architecture ou l'utilisation du registre, comme -mcpu=type_cpu Est-ce que. Les mêmes valeurs pour
type_cpu sont utilisés pour -mtune pour ce qui est de -mcpu. Si les deux sont spécifiés, le code généré
utilise l'architecture et les registres définis par -mcpu, mais les paramètres de planification définis par
-mtune.
-mcmodel=petit
Générer du code PowerPC64 pour le petit modèle : Le TOC est limité à 64k.
-mcmodel=moyen
Générer du code PowerPC64 pour le modèle moyen : la table des matières et d'autres données statiques peuvent être en place
à un total de 4G en taille.
-mcmodel=grand
Générez du code PowerPC64 pour le grand modèle : le TOC peut atteindre une taille de 4G. Autre
les données et le code ne sont limités que par l'espace d'adressage 64 bits.
-maltivec
-mno-altivec
Générer du code qui utilise (n'utilise pas) les instructions AltiVec, et permet également l'utilisation
de fonctions intégrées qui permettent un accès plus direct au jeu d'instructions AltiVec.
Vous devrez peut-être également définir -mabi=altivec pour ajuster l'ABI actuelle avec AltiVec ABI
améliorations.
Quand -maltivec est utilisé, plutôt que -Maltivec = LE or -maltivec=être, l'ordre des éléments
pour les intrinsèques Altivec tels que "vec_splat", "vec_extract" et "vec_insert" correspondent
ordre des éléments du tableau correspondant à l'endianness de la cible. c'est-à-dire l'élément
zéro identifie l'élément le plus à gauche dans un registre vectoriel lors du ciblage d'un gros-boutiste
plate-forme, et identifie l'élément le plus à droite dans un registre vectoriel lors du ciblage d'un
plate-forme little-endian.
-maltivec=être
Générez des instructions Altivec en utilisant l'ordre des éléments gros-boutiste, que
la cible est big ou little-endian. C'est la valeur par défaut lors du ciblage d'un gros boutien
plate-forme.
L'ordre des éléments est utilisé pour interpréter les numéros d'éléments dans les intrinsèques Altivec tels que
"vec_splat", "vec_extract" et "vec_insert". Par défaut, ces éléments de tableau correspondent
l'ordre correspondant à l'endianité de la cible.
-Maltivec = LE
Générez des instructions Altivec en utilisant l'ordre des éléments little-endian, que
la cible est big ou little-endian. C'est la valeur par défaut lorsque vous ciblez un peu-
plate-forme endian. Cette option est actuellement ignorée lors du ciblage d'un gros boutien
plate-forme.
L'ordre des éléments est utilisé pour interpréter les numéros d'éléments dans les intrinsèques Altivec tels que
"vec_splat", "vec_extract" et "vec_insert". Par défaut, ces éléments de tableau correspondent
l'ordre correspondant à l'endianité de la cible.
-mvrsave
-Mno-Vrsave
Générez des instructions VRSAVE lors de la génération du code AltiVec.
-mgen-cell-microcode
Générer des instructions de microcode Cell.
-mwarn-cell-microcode
Avertir lorsqu'une instruction de microcode Cell est émise. Un exemple de microcode Cell
l'instruction est un décalage variable.
-msecure-plt
Générer du code qui permet ld et ld.so pour construire des exécutables et des bibliothèques partagées avec
sections ".plt" et ".got" non exécutables. Il s'agit d'une option ABI SYSV 32 bits pour PowerPC.
-mbss-plt
Générez du code qui utilise une section BSS ".plt" qui ld.so se remplit et nécessite ".plt"
et les sections ".got" qui sont à la fois inscriptibles et exécutables. Il s'agit d'un PowerPC 32 bits
Option ABI SYSV.
-misel
-mno-isel
Ce commutateur active ou désactive la génération d'instructions ISEL.
-misel=Oui Non
Ce commutateur est obsolète. Utilisation -misel et -mno-isel à la place.
-mspe
-mno-spé
Ce commutateur active ou désactive la génération d'instructions SPE simd.
-altéré
-mno-apparié
Ce commutateur active ou désactive la génération d'instructions PAIRED simd.
-mspe=Oui Non
Cette option a été dépréciée. Utilisation -mspe et -mno-spé à la place.
-mvsx
-mno-vsx
Générer du code qui utilise (n'utilise pas) des instructions vectorielles/scalaires (VSX), et également
permettre l'utilisation de fonctions intégrées qui permettent un accès plus direct au VSX
jeu d'instructions.
-mcrypto
-mno-crypto
Activer l'utilisation (désactiver) des fonctions intégrées qui permettent un accès direct au
instructions cryptographiques qui ont été ajoutées dans la version 2.07 de PowerPC ISA.
-mdirect-déplacement
-mno-direct-move
Générez du code qui utilise (n'utilise pas) les instructions pour déplacer les données entre les
registres à usage général et les registres vectoriels/scalaires (VSX) qui ont été ajoutés dans
version 2.07 du PowerPC ISA.
-mpower8-fusion
-mno-power8-fusion
Générer du code qui garde (ne garde pas) certaines opérations entières adjacentes de sorte que le
les instructions peuvent être fusionnées sur les processeurs power8 et ultérieurs.
-mpower8-vecteur
-mno-power8-vecteur
Générer du code qui utilise (n'utilise pas) les instructions vectorielles et scalaires qui ont été
ajouté dans la version 2.07 du PowerPC ISA. Permet également l'utilisation des fonctions intégrées
qui permettent un accès plus direct aux instructions vectorielles.
-mquad-mémoire
-mno-quad-mémoire
Générez du code qui utilise (n'utilise pas) les instructions de mémoire à quatre mots non atomiques.
VOTRE -mquad-mémoire L'option nécessite l'utilisation du mode 64 bits.
-mquad-mémoire-atomique
-mno-quad-mémoire-atomique
Générez du code qui utilise (n'utilise pas) les instructions de mémoire de mot quadruple atomique. Les
-mquad-mémoire-atomique L'option nécessite l'utilisation du mode 64 bits.
-mupper-regs-df
-mno-upper-regs-df
Générer du code qui utilise (n'utilise pas) les instructions scalaires en double précision qui
cibler les 64 registres de l'ensemble de registres à virgule flottante vecteur/scalaire qui ont été
ajouté dans la version 2.06 du PowerPC ISA. -mupper-regs-df est activé par défaut si
vous utilisez l'un des -mcpu=puissance7, -mcpu=puissance8, ou -mvsx options.
-mupper-regs-sf
-mno-upper-regs-sf
Générer du code qui utilise (n'utilise pas) les instructions scalaires en simple précision qui
cibler les 64 registres de l'ensemble de registres à virgule flottante vecteur/scalaire qui ont été
ajouté dans la version 2.07 du PowerPC ISA. -mupper-regs-sf est activé par défaut si
vous utilisez l'un des -mcpu=puissance8 or -mpower8-vecteur options.
-mupper-regs
-mno-regs-supérieurs
Générer du code qui utilise (n'utilise pas) les instructions scalaires qui ciblent tous les 64
registres dans l'ensemble de registres vectoriels/scalaires à virgule flottante, selon le modèle de
la machine.
Si la -mno-regs-supérieurs est utilisée, elle désactive les deux -mupper-regs-sf et
-mupper-regs-df options.
-mfloat-gprs =oui/simple/double/non
-mfloat-gprs
Ce commutateur active ou désactive la génération d'opérations à virgule flottante sur le
registres à usage général pour les architectures qui le prennent en charge.
L'argument oui or unique permet l'utilisation de la virgule flottante simple précision
opérations.
L'argument double permet l'utilisation de virgule flottante simple et double précision
opérations.
L'argument aucune désactive les opérations à virgule flottante sur les registres à usage général.
Cette option n'est actuellement disponible que sur le MPC854x.
-m32
-m64
Générez du code pour les environnements 32 bits ou 64 bits des cibles Darwin et SVR4 (y compris
GNU/Linux). L'environnement 32 bits définit int, long et pointer sur 32 bits et
génère du code qui s'exécute sur n'importe quelle variante de PowerPC. L'environnement 64 bits définit int sur
32 bits et long et pointeur sur 64 bits, et génère du code pour PowerPC64, comme pour
-mpowerpc64.
-mfull-toc
-mno-fp-en-toc
-mno-somme-en-toc
-minimal-toc
Modifier la génération de la TOC (Table Of Contents), qui est créée pour chaque
fichier exécutable. Les -mfull-toc l'option est sélectionnée par défaut. Dans ce cas, GCC
alloue au moins une entrée de table des matières pour chaque référence de variable non automatique unique dans
votre programme. GCC place également des constantes à virgule flottante dans la table des matières. Cependant, seulement
16,384 XNUMX entrées sont disponibles dans la table des matières.
Si vous recevez un message d'erreur de l'éditeur de liens indiquant que vous avez dépassé le nombre disponible
Espace TOC, vous pouvez réduire la quantité d'espace TOC utilisé avec le -mno-fp-en-toc et
-mno-somme-en-toc options. -mno-fp-en-toc empêche GCC de mettre en virgule flottante
constantes dans la table des matières et -mno-somme-en-toc force GCC à générer du code pour calculer le
somme d'une adresse et d'une constante au moment de l'exécution au lieu de mettre cette somme dans la table des matières.
Vous pouvez spécifier l'une de ces options ou les deux. Chacun fait en sorte que GCC produise très
code légèrement plus lent et plus volumineux au détriment de la conservation de l'espace TOC.
Si vous manquez toujours d'espace dans la table des matières même lorsque vous spécifiez ces deux options,
spécifier -minimal-toc au lieu. Cette option oblige GCC à créer une seule entrée de table des matières pour
chaque fichier. Lorsque vous spécifiez cette option, GCC produit un code plus lent et plus volumineux
mais qui utilise extrêmement peu d'espace TOC. Vous pouvez utiliser cette option uniquement sur
des fichiers contenant du code exécuté moins fréquemment.
-maix64
-maix32
Activez l'ABI AIX 64 bits et la convention d'appel : pointeurs 64 bits, type "long" 64 bits et
l'infrastructure nécessaire pour les soutenir. En précisant -maix64 implique -mpowerpc64,
tout en -maix32 désactive l'ABI 64 bits et implique -mno-powerpc64. GCC est par défaut
-maix32.
-mxl-compat
-mno-xl-compat
Produisez du code plus conforme à la sémantique du compilateur IBM XL lors de l'utilisation d'AIX-
ABI compatible. Passer des arguments à virgule flottante aux fonctions prototypées au-delà du
enregistrer la zone de sauvegarde (RSA) sur la pile en plus des arguments FPR. Ne présume pas
ce double le plus significatif dans une valeur double de 128 bits est correctement arrondi lorsque
comparer les valeurs et convertir en double. Utilisez les noms de symboles XL pour les longs doubles
les routines de soutien.
La convention d'appel AIX a été étendue mais n'a pas été initialement documentée pour gérer un
obscur cas K&R C d'appel d'une fonction qui prend l'adresse de ses arguments avec
moins d'arguments que déclarés. Les compilateurs IBM XL accèdent à des arguments à virgule flottante qui
ne rentrent pas dans le RSA de la pile lorsqu'un sous-programme est compilé sans
optimisation. Parce que toujours stocker des arguments à virgule flottante sur la pile est
inefficace et rarement nécessaire, cette option n'est pas activée par défaut et n'est
nécessaire lors de l'appel de sous-programmes compilés par les compilateurs IBM XL sans optimisation.
-mpe
Assistance IBM RS / 6000 SP Parallèle Environnement (PE). Lier une application écrite à utiliser
message passant avec un code de démarrage spécial pour permettre à l'application de s'exécuter. Les
le système doit avoir PE installé à l'emplacement standard (/usr/lpp/ppe.poe/), ou la
spécifications le fichier doit être remplacé par le -spécifications= option pour spécifier le
emplacement du répertoire. L'environnement parallèle ne prend pas en charge les threads, donc le -mpe
option et le -pthread option sont incompatibles.
-malin-naturel
-malign-pouvoir
Sous AIX, Darwin 32 bits et PowerPC GNU/Linux 64 bits, l'option -malin-naturel
remplace l'alignement défini par l'ABI des types plus grands, tels que les doubles à virgule flottante,
sur leur limite naturelle basée sur la taille. L'option -malign-pouvoir charge le GCC de
suivre les règles d'alignement spécifiées par l'ABI. GCC utilise par défaut l'alignement standard
défini dans l'ABI.
Sur Darwin 64 bits, l'alignement naturel est la valeur par défaut, et -malign-pouvoir n'est pas
prise en charge.
-msoft-float
-mhard-float
Générez du code qui n'utilise pas (utilise) l'ensemble de registres à virgule flottante. Logiciel
l'émulation à virgule flottante est fournie si vous utilisez le -msoft-float option, et passer le
option à GCC lors de la liaison.
-msingle-flotteur
-mdouble-flotteur
Générez du code pour les opérations à virgule flottante simple ou double précision.
-mdouble-flotteur implique -msingle-flotteur.
-msimple-fpu
Ne générez pas d'instructions "sqrt" et "div" pour l'unité matérielle à virgule flottante.
-mfpu=prénom
Spécifiez le type d'unité à virgule flottante. Valeurs valides pour prénom sp_lite (équivalent à
-msingle-flotteur -msimple-fpu), dp_lite (équivalent à -mdouble-flotteur -msimple-fpu),
sp_full (équivalent à -msingle-flotteur), Et dp_plein (équivalent à -mdouble-flotteur).
-mxilinx-fpu
Effectuez des optimisations pour l'unité à virgule flottante sur Xilinx PPC 405/440.
-mmultiple
-mno-multiple
Générer du code qui utilise (n'utilise pas) les instructions de chargement de plusieurs mots et le
stocker plusieurs instructions de mot. Ces instructions sont générées par défaut sur
systèmes POWER, et non générés sur les systèmes PowerPC. Ne pas utiliser -mmultiple sur peu-
systèmes PowerPC endian, car ces instructions ne fonctionnent pas lorsque le processeur est en
mode petit-boutiste. Les exceptions sont PPC740 et PPC750 qui permettent ces
instructions en mode little-endian.
-mstring
-mno-chaîne
Générer du code qui utilise (n'utilise pas) les instructions de chaîne de chargement et le magasin
instructions de mots de chaîne pour enregistrer plusieurs registres et effectuer de petits déplacements de blocs. Ces
les instructions sont générées par défaut sur les systèmes POWER, et non générées sur PowerPC
systèmes. Ne pas utiliser -mstring sur les systèmes PowerPC little-endian, puisque ceux-ci
les instructions ne fonctionnent pas lorsque le processeur est en mode little-endian. Les exceptions
sont PPC740 et PPC750 qui permettent ces instructions en mode little-endian.
- mise à jour
-mno-mise à jour
Générer du code qui utilise (n'utilise pas) les instructions de chargement ou de stockage qui mettent à jour le
registre de base à l'adresse de l'emplacement mémoire calculé. Ces instructions
sont générés par défaut. Si tu utilises -mno-mise à jour, il y a une petite fenêtre entre le
l'heure à laquelle le pointeur de pile est mis à jour et l'adresse de la trame précédente est
stocké, ce qui signifie que le code qui parcourt le cadre de la pile à travers les interruptions ou les signaux peut
obtenir des données corrompues.
-mavoid-indexed-address
-mno-éviter-les-adresses-indexées
Générer du code qui essaie d'éviter (pas d'éviter) l'utilisation d'une charge ou d'un magasin indexés
instructions. Ces instructions peuvent entraîner une pénalité de performances sur les processeurs Power6
dans certaines situations, comme lorsque vous traversez de grands réseaux qui traversent un 16M
frontière. Cette option est activée par défaut lors du ciblage de Power6 et désactivée
autrement.
-mfused-mad
-mno-fusionné-madd
Générer du code qui utilise (n'utilise pas) la multiplication et l'accumulation à virgule flottante
instructions. Ces instructions sont générées par défaut si virgule flottante matérielle
est utilisé. La machine dépendante -mfused-mad l'option est maintenant mappée sur la machine-
indépendant -ffp-contrat=rapide option, et -mno-fusionné-madd est mappé à
-ffp-contrat=off.
-mmulhw
-mno-mulhw
Générer du code qui utilise (n'utilise pas) le demi-mot multiplier et multiplier-accumuler
instructions sur les processeurs IBM 405, 440, 464 et 476. Ces instructions sont
généré par défaut lors du ciblage de ces processeurs.
-mdlmzb
-mno-dlmzb
Générer du code qui utilise (n'utilise pas) la recherche de chaîne dlmzb instruction sur l'IBM
Processeurs 405, 440, 464 et 476. Cette instruction est générée par défaut lorsque
ciblant ces processeurs.
-mno-bit-aligner
-mbit-aligner
Sur le système V.4 et les systèmes PowerPC embarqués, ne forcez pas les structures et les unions
qui contiennent des champs de bits à aligner sur le type de base du champ de bits.
Par exemple, par défaut une structure ne contenant que 8 champs de bits "non signés" de
la longueur 1 est alignée sur une limite de 4 octets et a une taille de 4 octets. En utilisant
-mno-bit-aligner, la structure est alignée sur une limite de 1 octet et a une taille de 1 octet.
-mno-strict-aligner
-mstrict-aligner
Sur les systèmes System V.4 et PowerPC embarqués, ne supposez pas (ne) supposez pas que la mémoire non alignée
les références sont gérées par le système.
-mrelocalisable
-mno-déplaçable
Générer du code qui permet (ne permet pas) à un exécutable statique d'être déplacé vers un
adresse différente au moment de l'exécution. Un simple chargeur de système PowerPC embarqué devrait
déplacer tout le contenu des emplacements ".got2" et 4 octets répertoriés dans le ".fixup"
section, une table d'adresses 32 bits générée par cette option. Pour que cela fonctionne, tout
les objets liés entre eux doivent être compilés avec -mrelocalisable or -mrelocalisable-lib.
-mrelocalisable le code aligne la pile sur une limite de 8 octets.
-mrelocalisable-lib
-mno-librairie-relocalisable
J'aime -mrelocalisable, -mrelocalisable-lib génère une section ".fixup" pour autoriser la statique
exécutables à déplacer au moment de l'exécution, mais -mrelocalisable-lib n'utilise pas le
alignement de la pile plus petit de -mrelocalisable. Objets compilés avec -mrelocalisable-lib Au cours de cette réunion, Matthew a obtenu de précieux conseils et Linda lui a demandé de la tenir au courant de ses progrès.
être lié à des objets compilés avec n'importe quelle combinaison des -mrelocalisable options.
-mno-toc
-mtoc
Sur le système V.4 et les systèmes PowerPC embarqués, ne supposez pas (ne) supposez pas que le registre 2 contient
un pointeur vers une zone globale pointant vers les adresses utilisées dans le programme.
-petit
-mlittle-endian
Sur les systèmes System V.4 et PowerPC embarqués, compilez le code pour le processeur en peu de temps.
mode boutien. Les -mlittle-endian l'option est la même que -petit.
-mbig
-mbig-endian
Sur les systèmes System V.4 et PowerPC embarqués, compilez le code pour le processeur en gros
mode boutien. Les -mbig-endian l'option est la même que -mbig.
-mdynamic-pas de photo
Sur les systèmes Darwin et Mac OS X, compilez le code pour qu'il ne soit pas transférable, mais que
ses références externes sont délocalisables. Le code résultant convient pour
applications, mais pas les bibliothèques partagées.
-msingle-pic-base
Traitez le registre utilisé pour l'adressage PIC en lecture seule, plutôt que de le charger dans le
prologue pour chaque fonction. Le système d'exécution est responsable de l'initialisation de ce
registre avec une valeur appropriée avant le début de l'exécution.
-prioritize-restricted-insns=priorité
Cette option contrôle la priorité attribuée au créneau de répartition restreint
instructions lors de la deuxième passe de programmation. L'argument priorité prend la valeur
0, 1, ou 2 pour attribuer aucune priorité, la plus haute ou la deuxième priorité (respectivement) à
instructions à créneaux de répartition restreints.
-msched-costly-dep=type_de_dépendance
Cette option contrôle quelles dépendances sont considérées comme coûteuses par la cible pendant
ordonnancement des instructions. L'argument type_de_dépendance prend l'un des suivants
valeurs:
aucune Aucune dépendance n'est coûteuse.
tous Toutes les dépendances sont coûteuses.
true_store_to_load
Une véritable dépendance du magasin au chargement est coûteuse.
magasin_à_charger
Toute dépendance du magasin au chargement est coûteuse.
nombre
Toute dépendance pour laquelle la latence est supérieure ou égale à nombre est coûteux.
-minsert-sched-nops=programme
Cette option contrôle quel schéma d'insertion NOP est utilisé lors de la deuxième planification
passe. L'argument programme prend l'une des valeurs suivantes :
aucune N'insérez pas de NOP.
chemin Complétez avec des NOP tout groupe de répartition qui a des créneaux d'émission vacants, selon le
regroupement de l'ordonnanceur.
regrouper_exact
Insérez des NOP pour forcer les insns dépendants coûteux dans des groupes séparés. Insérer exactement
autant de NOP que nécessaire pour forcer un insn à un nouveau groupe, selon l'estimation
regroupement de processeurs.
nombre
Insérez des NOP pour forcer les insns dépendants coûteux dans des groupes séparés. Insérer nombre
NOPs pour forcer un insn à un nouveau groupe.
-mcall-sysv
Sur les systèmes System V.4 et PowerPC embarqués, compilez le code en utilisant des conventions d'appel qui
adhérer à l'ébauche de mars 1995 de l'interface binaire d'application System V, PowerPC
supplément processeur. C'est la valeur par défaut sauf si vous avez configuré GCC en utilisant
powerpc-*-eabiaix.
-MCALL-SYSV-EABI
-mcall-eabi
Spécifiez les deux -mcall-sysv et -meabi options.
-mcall-sysv-noeabi
Spécifiez les deux -mcall-sysv et -mno-eabi options.
-mcall-aixdesc
Sur les systèmes System V.4 et PowerPC embarqués, compilez le code pour le système d'exploitation AIX.
-mcall-linux
Sur le système V.4 et les systèmes PowerPC embarqués, compilez le code pour le GNU basé sur Linux
système.
-mcall-freebsd
Sur le système V.4 et les systèmes PowerPC embarqués, compilez le code pour le fonctionnement de FreeBSD
système.
-mcall-netbsd
Sur le système V.4 et les systèmes PowerPC embarqués, compilez le code pour le fonctionnement de NetBSD
système.
-mcall-openbsd
Sur le système V.4 et les systèmes PowerPC embarqués, compilez le code pour le fonctionnement d'OpenBSD
système.
-maix-struct-retour
Renvoie toutes les structures en mémoire (comme spécifié par l'ABI AIX).
-msvr4-struct-retour
Renvoie les structures inférieures à 8 octets dans les registres (comme spécifié par l'ABI SVR4).
-mabi=type abi
Étendez l'ABI actuelle avec une extension particulière ou supprimez une telle extension. Valide
les valeurs sont altivec, non-altivec, spe, non-spé, ibmlongdouble, ieeelongdouble, elfv1,
elfv2.
-mabi=spé
Étendez l'ABI actuelle avec les extensions SPE ABI. Cela ne change pas l'ABI par défaut,
à la place, il ajoute les extensions SPE ABI à l'ABI actuelle.
-mabi=pas de spe
Désactivez les extensions Book-E SPE ABI pour l'ABI actuelle.
-mabi=ibmlongdouble
Modifiez l'ABI actuelle pour utiliser IBM Extended Precision Long Double. C'est un PowerPC
Option ABI SYSV 32 bits.
-mabi=ieeelongdouble
Modifiez l'ABI actuelle pour utiliser le double long à précision étendue IEEE. C'est un PowerPC
Option ABI Linux 32 bits.
-mabi=elfv1
Modifiez l'ABI actuelle pour utiliser l'ABI ELFv1. C'est l'ABI par défaut pour big-endian
Linux PowerPC 64 bits. Le remplacement de l'ABI par défaut nécessite une prise en charge système spéciale et
est susceptible d'échouer de manière spectaculaire.
-mabi=elfv2
Modifiez l'ABI actuelle pour utiliser l'ABI ELFv2. C'est l'ABI par défaut pour peu-
endian PowerPC 64 bits Linux. Le remplacement de l'ABI par défaut nécessite un système spécial
soutien et est susceptible d'échouer de manière spectaculaire.
-mprototype
-mno-prototype
Sur les systèmes System V.4 et PowerPC embarqués, supposez que tous les appels à l'argument variable
les fonctions sont correctement prototypées. Sinon, le compilateur doit insérer une instruction
avant chaque appel non prototypé à l'activation ou à la suppression du bit 6 du registre des codes de condition
("CR") pour indiquer si les valeurs à virgule flottante sont passées dans la virgule flottante
registres au cas où la fonction prend des arguments variables. Avec -mprototype, uniquement les appels
aux fonctions d'argument variable prototypées, définissez ou effacez le bit.
-msim
Sur les systèmes PowerPC embarqués, supposons que le module de démarrage est appelé sim-crt0.o et
que les bibliothèques C standard sont libsim.a et libc.a. C'est la valeur par défaut pour
powerpc-*-eabisim configurations.
-mmvmoi
Sur les systèmes PowerPC embarqués, supposons que le module de démarrage est appelé crt0.o et les
les bibliothèques C standard sont libmvme.a et libc.a.
-les fous
Sur les systèmes PowerPC embarqués, supposons que le module de démarrage est appelé crt0.o et les
les bibliothèques C standard sont libads.a et libc.a.
-moncouteau
Sur les systèmes PowerPC embarqués, supposons que le module de démarrage est appelé crt0.o et les
les bibliothèques C standard sont libyk.a et libc.a.
-mvxworks
Sur les systèmes System V.4 et PowerPC embarqués, spécifiez que vous compilez pour un
Système VxWorks.
-membre
Sur les systèmes PowerPC embarqués, définissez le bit "PPC_EMB" dans l'en-tête des drapeaux ELF pour indiquer
qui eabi les délocalisations prolongées sont utilisées.
-meabi
-mno-eabi
Sur le système V.4 et les systèmes PowerPC embarqués n'adhèrent (ne) pas aux
Application Binary Interface (EABI), qui est un ensemble de modifications apportées au système
Spécifications V.4. Sélection -meabi signifie que la pile est alignée sur un 8 octets
limite, une fonction "__eabi" est appelée depuis "main" pour configurer l'environnement EABI,
et les -msdata L'option peut utiliser à la fois "r2" et "r13" pour pointer vers deux petites données distinctes
domaines. Sélection -mno-eabi signifie que la pile est alignée sur une limite de 16 octets, non
La fonction d'initialisation EABI est appelée à partir de "main", et le -msdata l'option n'utilise que
"r13" pour pointer vers une seule petite zone de données. Les -meabi l'option est activée par défaut si vous
GCC configuré à l'aide de l'un des powerpc*-*-eabi* options.
-msdata=eabi
Sur les systèmes System V.4 et PowerPC embarqués, mettez un petit "const" global et
des données statiques dans la section ".sdata2", qui est pointée par le registre "r2". Mettre petit
données globales et statiques non "const" initialisées dans la section ".sdata", qui est
pointé par le registre "r13". Mettez de petites données globales et statiques non initialisées dans le
la section ".sbss", qui est adjacente à la section ".sdata". Les -msdata=eabi option
est incompatible avec le -mrelocalisable option. La -msdata=eabi l'option définit également le
-membre option.
-msdata=sysv
Sur les systèmes System V.4 et PowerPC embarqués, placez de petites données globales et statiques dans le
section ".sdata", qui est pointée par le registre "r13". Mettre petit non initialisé
données globales et statiques dans la section ".sbss", qui est adjacente au ".sdata"
section. le -msdata=sysv l'option est incompatible avec le -mrelocalisable option.
-msdata=par défaut
-msdata
Sur les systèmes System V.4 et PowerPC embarqués, si -meabi est utilisé, compilez le code de la même manière
as -msdata=eabi, sinon compiler le code de la même manière que -msdata=sysv.
-msdata=données
Sur les systèmes System V.4 et PowerPC embarqués, placez les petites données globales dans le fichier ".sdata"
section. Mettez les petites données globales non initialisées dans la section ".sbss". Ne pas utiliser
inscrire "r13" pour traiter les petites données cependant. C'est le comportement par défaut à moins que
autre -msdata les options sont utilisées.
-msdata=aucun
-mno-sdata
Sur les systèmes PowerPC embarqués, placez toutes les données globales et statiques initialisées dans le fichier ".data"
section, et toutes les données non initialisées dans la section ".bss".
-mblock-move-inline-limit=num
Inline tous les mouvements de bloc (tels que les appels à "memcpy" ou les copies de structure) inférieurs ou
égal à num octets. La valeur minimale pour num est de 32 octets sur des cibles 32 bits et 64
octets sur des cibles 64 bits. La valeur par défaut est spécifique à la cible.
-G num
Sur les systèmes PowerPC embarqués, placez les éléments globaux et statiques inférieurs ou égaux à num
octets dans les sections de petites données ou BSS au lieu des données normales ou de la section BSS.
Par défaut, num est 8. Le -G num switch est également transmis à l'éditeur de liens. Tous les modules
doit être compilé avec le même -G num valeur.
-nomsmreg
-mno-regnames
Sur le système V.4 et les systèmes PowerPC embarqués n'émettent (n'émettent pas) de noms de registre dans le
sortie en langage assembleur à l'aide de formes symboliques.
-mlongappel
-mno-longappel
Par défaut, supposons que tous les appels sont éloignés, de sorte qu'un appel plus long et plus coûteux
une séquence d'appel est requise. Ceci est requis pour les appels de plus de 32 mégaoctets
(33,554,432 XNUMX XNUMX octets) à partir de l'emplacement actuel. Un appel court est généré si le
le compilateur sait que l'appel ne peut pas être si loin. Ce paramètre peut être remplacé par
l'attribut de fonction "shortcall", ou par "#pragma appel long(0) ".
Certains éditeurs de liens sont capables de détecter les appels hors de portée et de générer du code de collage sur
la mouche. Sur ces systèmes, les appels longs sont inutiles et génèrent un code plus lent. Comme
de cette écriture, l'éditeur de liens AIX peut le faire, tout comme l'éditeur de liens GNU pour PowerPC/64. Ce
est prévu d'ajouter cette fonctionnalité à l'éditeur de liens GNU pour les systèmes PowerPC 32 bits également.
Sur les systèmes Darwin/PPC, "#pragma longcall" génère "jbsr callee, L42", plus un une succursale
île (code de la colle). Les deux adresses cibles représentent l'appelé et la succursale
île. Le linker Darwin/PPC préfère la première adresse et génère un " bl callee "
si l'instruction PPC "bl" atteint directement l'appelé ; sinon, l'éditeur de liens
génère "bl L42" pour appeler l'îlot de dérivation. L'îlot de dérivation est annexé au
corps de la fonction appelante ; il calcule l'adresse complète de 32 bits de l'appelé et
saute dessus.
Sur les systèmes Mach-O (Darwin), cette option dirige l'émission du compilateur vers la colle pour
chaque appel direct, et l'éditeur de liens Darwin décide s'il doit l'utiliser ou le rejeter.
À l'avenir, GCC peut ignorer toutes les spécifications longcall lorsque l'éditeur de liens est connu pour
générer de la colle.
-marqueurs-mtls
-marqueurs-mno-tls
Marquer (ne pas marquer) les appels à "__tls_get_addr" avec une relocalisation spécifiant la fonction
argument. La relocalisation permet à l'éditeur de liens d'associer de manière fiable l'appel de fonction avec
instructions de configuration des arguments pour l'optimisation TLS, ce qui permet à GCC de mieux
planifier la séquence.
-pthread
Ajoute la prise en charge du multithreading avec le fils de discussion une bibliothèque. Cette option définit des indicateurs pour
à la fois le préprocesseur et l'éditeur de liens.
-mrecip
-mno-recette
Cette option permet d'utiliser l'estimation réciproque et l'estimation de racine carrée réciproque
instructions avec des étapes Newton-Raphson supplémentaires pour augmenter la précision au lieu de
faire une division ou une racine carrée et diviser pour les arguments à virgule flottante. Tu devrais utiliser
le -ffast-mathématiques option lors de l'utilisation -mrecip (ou au moins -funsafe-math-optimisations,
-fini-mathématiques-seulement, -freciprocal-maths et -fno-piégeage-maths). Notez que tandis que le
le débit de la séquence est généralement supérieur au débit de la non-
instruction réciproque, la précision de la séquence peut être diminuée jusqu'à 2 ulp
(c'est-à-dire que l'inverse de 1.0 est égal à 0.99999994) pour les racines carrées réciproques.
-mrecip=opter
Cette option contrôle quelles instructions d'estimation réciproque peuvent être utilisées. opter est une
liste d'options séparées par des virgules, qui peut être précédée d'un "!" pour inverser l'option :
tous Activez toutes les instructions d'estimation.
défaut
Activez les instructions par défaut, équivalentes à -mrecip.
aucun
Désactiver toutes les instructions d'estimation, équivalent à -mno-recette.
div Activer les instructions d'approximation réciproque pour les simples et les doubles
précision.
div
Activez les instructions d'approximation réciproque en simple précision.
diviser
Activez les instructions d'approximation réciproque en double précision.
rsqrt
Activez les instructions d'approximation de racine carrée réciproque pour les
double precision.
rsqrtf
Activez les instructions d'approximation de racine carrée réciproque simple précision.
rqrtd
Activez les instructions d'approximation de racine carrée réciproque en double précision.
Ainsi, par exemple, -mrecip=tout,!rsqrtd permet l'ensemble de l'estimation réciproque
instructions, à l'exception des instructions "FRSQRTE", "XSRSQRTEDP" et "XVRSQRTEDP"
qui gèrent les calculs de racine carrée réciproque en double précision.
-mrecip-précision
-mno-recip-précision
Supposons (ne présumez pas) que les instructions d'estimation réciproque fournissent des
estimations de précision que ce qui est mandaté par le PowerPC ABI. Sélection -mcpu=puissance6,
-mcpu=puissance7 or -mcpu=puissance8 sélectionne automatiquement -mrecip-précision. Le double-
les instructions d'estimation de racine carrée de précision ne sont pas générées par défaut
machines de précision, car elles ne fournissent pas une estimation qui converge après trois
pas.
-mveclibabi=type
Spécifie le type ABI à utiliser pour vectoriser les intrinsèques à l'aide d'une bibliothèque externe.
Le seul type pris en charge actuellement est masse, qui spécifie d'utiliser le Mathematical d'IBM
Bibliothèques du sous-système d'accélération (MASS) pour la vectorisation des intrinsèques à l'aide
bibliothèques. GCC émet actuellement des appels à "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", et
"tanhf4" lors de la génération du code pour power7. Les deux -ftree-vectoriser et
-funsafe-math-optimisations doit également être activé. Les bibliothèques MASS doivent être
spécifié au moment de la liaison.
-mfriz
-mno-friz
Générer (ne pas générer) l'instruction "friz" lorsque le -funsafe-math-optimisations
L'option est utilisée pour optimiser l'arrondi des valeurs à virgule flottante à un entier 64 bits et
retour à la virgule flottante. L'instruction "friz" ne renvoie pas la même valeur si le
nombre à virgule flottante est trop grand pour tenir dans un entier.
-mpointeurs-vers-fonctions-imbriquées
-mno-pointeurs-vers-fonctions-emboîtées
Générer (ne pas générer) de code pour charger le registre de chaîne statique ("r11") lorsque
appel via un pointeur sur les systèmes AIX et Linux 64 bits où un pointeur de fonction
pointe vers un descripteur de 3 mots donnant l'adresse de la fonction, la valeur TOC à charger dans
registre "r2", et valeur de chaîne statique à charger dans le registre "r11". Les
-mpointeurs-vers-fonctions-imbriquées est activé par défaut. Vous ne pouvez pas appeler via des pointeurs vers
fonctions imbriquées ou pointeurs vers des fonctions compilées dans d'autres langages qui utilisent le
chaîne statique si vous utilisez -mno-pointeurs-vers-fonctions-emboîtées.
-msave-toc-indirect
-mno-save-toc-indirect
Générer (ne pas générer) de code pour enregistrer la valeur TOC dans l'emplacement de pile réservé
dans le prologue de la fonction si la fonction appelle via un pointeur sur AIX et 64 bits
Systèmes Linux. Si la valeur COT n'est pas enregistrée dans le prologue, elle est enregistrée juste avant
l'appel via le pointeur. Les -mno-save-toc-indirect L'option est l'option par défaut.
-mcompat-align-parm
-mno-compat-align-parm
Générer (ne pas générer) de code pour transmettre des paramètres de structure avec un alignement maximal
de 64 bits, pour la compatibilité avec les anciennes versions de GCC.
Les anciennes versions de GCC (antérieures à 4.9.0) n'alignaient pas correctement un paramètre de structure
sur une limite de 128 bits lorsque cette structure contenait un membre nécessitant 128 bits
alignement. Ceci est corrigé dans les versions plus récentes de GCC. Cette option peut être utilisée
pour générer du code compatible avec les fonctions compilées avec les anciennes versions de
GCC.
VOTRE -mno-compat-align-parm L'option est l'option par défaut.
RX Options
Ces options de ligne de commande sont définies pour les cibles RX :
-m64bit-double
-m32bit-double
Faites en sorte que le type de données "double" soit de 64 bits (-m64bit-double) ou 32 bits (-m32bit-double)
en taille. La valeur par défaut est -m32bit-double. Notes Le matériel à virgule flottante RX ne fonctionne que
sur des valeurs 32 bits, c'est pourquoi la valeur par défaut est -m32bit-double.
-fpu
-nofpu
Active (-fpu) ou désactive (-nofpu) l'utilisation de matériel à virgule flottante RX. Les
par défaut est activé pour la série RX600 et désactivé pour la série RX200.
Les instructions à virgule flottante ne sont générées que pour les valeurs à virgule flottante 32 bits,
cependant, donc le matériel FPU n'est pas utilisé pour les doubles si le -m64bit-double option est
utilisé.
Notes Si la -fpu l'option est activée alors -funsafe-math-optimisations est également activé
automatiquement. C'est parce que les instructions RX FPU sont elles-mêmes dangereuses.
-mcpu=prénom
Sélectionne le type de CPU RX à cibler. Actuellement, trois types sont pris en charge, le
générique RX600 et RX200 matériel de série et les spécificités RX610 CPU. La valeur par défaut est
RX600.
La seule différence entre RX600 et RX610 est que le RX610 ne prend pas en charge le
Instruction "MVTIPL".
VOTRE RX200 la série n'a pas d'unité matérielle à virgule flottante et donc -nofpu est autorisé
par défaut lorsque ce type est sélectionné.
-mbig-endian-données
-mlittle-endian-données
Stockez les données (mais pas le code) au format big-endian. La valeur par défaut est
-mlittle-endian-données, c'est-à-dire pour stocker les données au format little-endian.
-msmall-data-limit=N
Spécifie la taille maximale en octets des variables globales et statiques qui peuvent être placées
dans la petite zone de données. L'utilisation de la petite zone de données peut conduire à des
code, mais la taille de la zone est limitée et il appartient au programmeur de s'assurer que
la zone ne déborde pas. De même, lorsque la petite zone de données est utilisée, l'un des RX
registres (généralement "r13") est réservé à une utilisation pointant vers cette zone, il n'est donc pas
plus disponible pour une utilisation par le compilateur. Cela pourrait entraîner des ralentissements et/ou des
code si les variables sont poussées sur la pile au lieu d'être conservées dans ce registre.
Notez que les variables communes (variables qui n'ont pas été initialisées) et les constantes sont
pas placés dans la petite zone de données car ils sont affectés à d'autres sections de la
exécutable de sortie.
La valeur par défaut est zéro, ce qui désactive cette fonctionnalité. Notez que cette fonctionnalité n'est pas
activé par défaut avec des niveaux d'optimisation plus élevés (-O2 etc) en raison de la
effets potentiellement préjudiciables de la réservation d'un registre. C'est au programmeur
pour expérimenter et découvrir si cette fonctionnalité est bénéfique pour leur programme. Voir
la description de la -mpid option pour une description de la façon dont le registre réel
maintenez le pointeur de petite zone de données est choisi.
-msim
-mno-sim
Utilisez le moteur d'exécution du simulateur. La valeur par défaut est d'utiliser le runtime spécifique à la carte libgloss.
-mas100-syntaxe
-mno-as100-syntaxe
Lors de la génération de la sortie assembleur, utilisez une syntaxe compatible avec l'AS100 de Renesas
assembleur. Cette syntaxe peut aussi être gérée par l'assembleur GAS, mais elle a quelques
restrictions afin qu'il ne soit pas généré par défaut.
-mmax-taille-constante=N
Spécifie la taille maximale, en octets, d'une constante pouvant être utilisée comme opérande dans
une instruction RX. Bien que le jeu d'instructions RX autorise des constantes allant jusqu'à 4
octets de longueur à utiliser dans les instructions, une valeur plus longue équivaut à une
instruction. Ainsi, dans certaines circonstances, il peut être avantageux de restreindre la taille des
constantes utilisées dans les instructions. Les constantes trop grandes sont à la place
placé dans un pool constant et référencé via l'indirection de registre.
La valeur N peut être compris entre 0 et 4. Une valeur de 0 (valeur par défaut) ou 4 signifie que
les constantes de n'importe quelle taille sont autorisées.
-mrelax
Activer la relaxation de l'éditeur de liens. La relaxation de l'éditeur de liens est un processus par lequel l'éditeur de liens tente
réduire la taille d'un programme en trouvant des versions plus courtes de diverses instructions.
Désactivé par défaut
-mint-registre=N
Spécifiez le nombre de registres à réserver pour les fonctions de gestionnaire d'interruption rapide. Les
Plus-value N peut être compris entre 0 et 4. Une valeur de 1 signifie que le registre "r13" est réservé
pour l'utilisation exclusive de gestionnaires d'interruption rapide. Une valeur de 2 réserves "r13" et
"r12". Une valeur de 3 réserves "r13", "r12" et "r11", et une valeur de 4 réserves "r13"
par "r10". Une valeur de 0, la valeur par défaut, ne réserve aucun registre.
-msave-acc-en-interruptions
Spécifie que les fonctions du gestionnaire d'interruption doivent préserver le registre de l'accumulateur.
Ceci n'est nécessaire que si le code normal peut utiliser le registre de l'accumulateur, par exemple
car il effectue des multiplications de 64 bits. La valeur par défaut est d'ignorer l'accumulateur
car cela rend les gestionnaires d'interruption plus rapides.
-mpid
-mno-pid
Permet la génération de données indépendantes de la position. Lorsqu'il est activé, tout accès à
les données constantes sont effectuées via un décalage à partir d'une adresse de base contenue dans un registre. Cette
permet de déterminer l'emplacement des données constantes au moment de l'exécution sans nécessiter
l'exécutable à déplacer, ce qui est un avantage pour les applications embarquées avec
contraintes de mémoire. Les données modifiables ne sont pas affectées par cette option.
Notez que l'utilisation de cette fonctionnalité réserve un registre, généralement "r13", pour les données constantes
adresse de base. Cela peut entraîner un code plus lent et/ou plus volumineux, en particulier dans les
fonctions.
Le registre réel choisi pour contenir l'adresse de base de données constante dépend de si
le -msmall-data-limite et / ou -mint-registre les options de ligne de commande sont activées.
En commençant par le registre "r13" et en descendant, les registres sont alloués en premier
pour satisfaire aux exigences de -mint-registre, puis -mpid et enfin
-msmall-data-limite. Ainsi, il est possible que le registre de la petite zone de données soit "r8"
si les deux -mint-registre=4 et -mpid sont spécifiés sur la ligne de commande.
Par défaut, cette fonctionnalité n'est pas activée. La valeur par défaut peut être restaurée via le -mno-pid
option de ligne de commande.
-mno-warn-plusieurs-interruptions-rapides
-mwarn-plusieurs-interruptions-rapides
Empêche GCC d'émettre un message d'avertissement s'il trouve plus d'une interruption rapide
gestionnaire lorsqu'il compile un fichier. La valeur par défaut est d'émettre un avertissement pour chaque extra
gestionnaire d'interruption rapide trouvé, car le RX ne prend en charge qu'une seule de ces interruptions.
Remarque : L'option de ligne de commande GCC générique -fixé-reg a une importance particulière pour le RX
port lorsqu'il est utilisé avec l'attribut de fonction "interruption". Cet attribut indique un
fonction destinée à traiter les interruptions rapides. GCC s'assure de n'utiliser que les registres
"r10", "r11", "r12" et/ou "r13" et uniquement à condition que l'utilisation normale du
les registres correspondants ont été restreints via le -fixé-reg or -mint-registre
options de ligne de commande.
S / 390 et zSérie Options
Ce sont les -m options définies pour l'architecture S/390 et zSeries.
-mhard-float
-msoft-float
Utilisez (n'utilisez pas) les instructions matérielles à virgule flottante et les registres pour
opérations ponctuelles. Lorsque -msoft-float est spécifié, fonctionne dans libgcc.a être habitué
effectuer des opérations en virgule flottante. Lorsque -mhard-float est spécifié, le compilateur
génère des instructions à virgule flottante IEEE. C'est la valeur par défaut.
-mhard-dfp
-mno-hard-dfp
Utilisez (n'utilisez pas) les instructions matérielles à virgule flottante décimale
opérations à virgule flottante. Lorsque -mno-hard-dfp est spécifié, fonctionne dans libgcc.a
utilisé pour effectuer des opérations à virgule flottante décimale. Lorsque -mhard-dfp est spécifié, le
le compilateur génère des instructions matérielles à virgule flottante décimale. C'est la valeur par défaut
pour -mars=z9-ec ou plus.
-mlong-double-64
-mlong-double-128
Ces commutateurs contrôlent la taille du type "long double". Une taille de 64 bits rend le
type "long double" équivalent au type "double". C'est la valeur par défaut.
-mbackchain
-mno-backchain
Stockez (ne stockez pas) l'adresse de la trame de l'appelant en tant que pointeur de backchain dans le
cadre de pile de l'appelé. Un backchain peut être nécessaire pour permettre le débogage à l'aide d'outils qui
ne comprends pas les informations de trame d'appel DWARF 2. Lorsque -mno-packed-pile est en
effet, le pointeur backchain est stocké au bas du cadre de la pile ; lorsque
-mpacked-pile est en effet, la chaîne arrière est placée dans le mot le plus élevé du
Zone de sauvegarde de registre de 96/160 octets.
En général, le code compilé avec -mbackchain est compatible avec les appels avec le code compilé avec
-mmo-backchain; cependant, l'utilisation de la backchain à des fins de débogage nécessite généralement
que tout le binaire est construit avec -mbackchain. A noter que la combinaison de
-mbackchain, -mpacked-pile et -mhard-float n'est pas pris en charge. Afin de construire un
utilisation du noyau Linux -msoft-float.
La valeur par défaut est de ne pas maintenir le backchain.
-mpacked-pile
-mno-packed-pile
Utilisez (n'utilisez pas) la disposition de la pile emballée. Lorsque -mno-packed-pile est spécifié, le
le compilateur utilise tous les champs de la zone de sauvegarde du registre 96/160 octets uniquement pour leur
objectif par défaut ; les champs inutilisés occupent toujours de l'espace dans la pile. Lorsque -mpacked-pile is
spécifié, les emplacements de sauvegarde de registre sont densément emballés en haut de la sauvegarde de registre
Région; l'espace inutilisé est réutilisé à d'autres fins, ce qui permet une utilisation plus efficace des
l'espace de pile disponible. Cependant, quand -mbackchain est également en vigueur, le plus haut
le mot de la zone de sauvegarde est toujours utilisé pour stocker le backchain, et l'adresse de retour
Le registre est toujours enregistré deux mots sous le backchain.
Tant que le backchain du cadre de pile n'est pas utilisé, le code généré avec -mpacked-pile
est compatible avec les appels avec le code généré avec -mno-packed-pile. Notez que certains non-FSF
versions de GCC 2.95 pour le code généré S/390 ou zSeries qui utilise le cadre de pile
backchain au moment de l'exécution, pas seulement à des fins de débogage. Un tel code n'est pas appel-
compatible avec le code compilé avec -mpacked-pile. Notez également que la combinaison de
-mbackchain, -mpacked-pile et -mhard-float n'est pas pris en charge. Afin de construire un
utilisation du noyau Linux -msoft-float.
La valeur par défaut est de ne pas utiliser la disposition de la pile emballée.
-msmall-exec
-mno-petit-exec
Générez (ou ne générez pas) de code en utilisant l'instruction "bras" pour faire le sous-programme
appels. Cela ne fonctionne de manière fiable que si la taille totale de l'exécutable ne dépasse pas 64 Ko.
La valeur par défaut est d'utiliser à la place l'instruction "basr", qui n'a pas cette
limitation.
-m64
-m31
Quand -m31 est spécifié, générez du code conforme à GNU/Linux pour S/390 ABI. Lorsque
-m64 est spécifié, générez du code conforme à l'ABI GNU/Linux for zSeries. Cette
permet notamment à GCC de générer des instructions 64 bits. Pour le s390 cibles, le
la valeur par défaut est -m31, Bien que l' s390x cible par défaut -m64.
-mzarch
-mesa
Quand -mzarch est spécifié, générez le code en utilisant les instructions disponibles sur
z/Architecture. Lorsque -mesa est spécifié, générez le code à l'aide des instructions
disponible sur ESA/390. Noter que -mesa n'est pas possible avec -m64. Lors de la génération
code conforme à GNU/Linux pour S/390 ABI, la valeur par défaut est -mesa. Lors de la génération
code conforme à l'ABI GNU/Linux for zSeries, la valeur par défaut est -mzarch.
-mmvcle
-mno-mvcle
Générez (ou ne générez pas) de code à l'aide de l'instruction "mvcle" pour effectuer le bloc
se déplace. Lorsque -mno-mvcle est spécifié, utilisez plutôt une boucle "mvc". C'est la valeur par défaut
à moins d'optimiser la taille.
-mdebug
-mno-débogage
Imprimez (ou n'imprimez pas) des informations de débogage supplémentaires lors de la compilation. La valeur par défaut est
pour ne pas imprimer les informations de débogage.
-mars=type de processeur
Générer du code qui s'exécute sur type de processeur, qui est le nom d'un système représentant un
certain type de processeur. Valeurs possibles pour type de processeur g5, g6, z900, z990, z9-109,
z9-ec, z10, z196, zEC12 et z13. Lors de la génération de code à l'aide des instructions
disponible sur z/Architecture, la valeur par défaut est -mars=z900. Sinon, la valeur par défaut est
-mars=g5.
-mtune=type de processeur
Accordez à type de processeur tout ce qui est applicable sur le code généré, à l'exception de l'ABI
et l'ensemble des instructions disponibles. La liste de type de processeur les valeurs sont les mêmes que pour
-Mars. La valeur par défaut est la valeur utilisée pour -Mars.
-mtpf-trace
-mno-tpf-trace
Générer du code qui ajoute (n'ajoute pas) dans les branches spécifiques du système d'exploitation TPF aux routines de suivi
dans le système d'exploitation. Cette option est désactivée par défaut, même lors de la compilation pour le
Système d'exploitation TPF.
-mfused-mad
-mno-fusionné-madd
Générer du code qui utilise (n'utilise pas) la multiplication et l'accumulation à virgule flottante
instructions. Ces instructions sont générées par défaut si virgule flottante matérielle
est utilisé.
-mwarn-framesize=taille du cadre
Émet un avertissement si la fonction actuelle dépasse la taille de trame donnée. Parce que c'est
une vérification au moment de la compilation, cela n'a pas besoin d'être un réel problème lorsque le programme s'exécute. Ce
est destiné à identifier les fonctions qui provoquent très probablement un débordement de pile. Il est
utile pour être utilisé dans un environnement avec une taille de pile limitée, par exemple le noyau Linux.
-mwarn-pile dynamique
Émettre un avertissement si la fonction appelle "alloca" ou utilise des tableaux de taille dynamique. Cette
est généralement une mauvaise idée avec une taille de pile limitée.
-mstack-guard=garde-pile
-taille-mstack=taille de la pile
Si ces options sont fournies, le back-end S/390 émet des instructions supplémentaires dans le
prologue de fonction qui déclenche un piège si la taille de la pile est garde-pile octets au-dessus du
taille de la pile (rappelez-vous que la pile sur S/390 augmente vers le bas). Si la garde-pile
l'option est omise la plus petite puissance de 2 plus grande que la taille de trame du compilé
la fonction est choisie. Ces options sont destinées à être utilisées pour aider à déboguer la pile
problèmes de débordement. Le code émis en plus ne provoque que peu de surcharge et
peut donc également être utilisé dans des systèmes de type production sans plus de performances
dégradation. Les valeurs données doivent être des puissances exactes de 2 et taille de la pile doit être
plus grand que garde-pile sans dépasser 64k. Afin d'être efficace, le supplément
le code suppose que la pile commence à une adresse alignée sur la valeur
donné par taille de la pileL’ garde-pile L'option ne peut être utilisée qu'avec
taille de la pile.
-mhotpatch=pré-demi-mots,post-demi-mots
Si l'option hotpatch est activée, un prologue de la fonction "hot-patching" est généré pour
toutes les fonctions de l'unité de compilation. L'étiquette de fonction est précédée de la donnée
nombre d'instructions NOP à deux octets (pré-demi-mots, maximum 1000000). Après le
étiquette, 2 * post-demi-mots les octets sont ajoutés, en utilisant le plus grand NOP comme des instructions
l'architecture le permet (maximum 1000000).
Si les deux arguments sont à zéro, le hotpatching est désactivé.
Cette option peut être remplacée pour des fonctions individuelles avec l'attribut "hotpatch".
Score Options
Ces options sont définies pour les implémentations de Score :
-meb
Compilez le code pour le mode big-endian. C'est la valeur par défaut.
-mel
Compilez le code pour le mode little-endian.
-mnhwloop
Désactiver la génération d'instructions "bcnz".
-muls
Activez la génération d'instructions de chargement et de stockage non alignées.
-mmac
Activer l'utilisation des instructions de multiplication-accumulation. Désactivé par défaut.
-mscore5
Spécifiez le SCORE5 comme architecture cible.
-mscore5u
Spécifiez le SCORE5U de l'architecture cible.
-mscore7
Spécifiez le SCORE7 comme architecture cible. C'est la valeur par défaut.
-mscore7d
Spécifiez le SCORE7D comme architecture cible.
SH Options
Ces -m des options sont définies pour les implémentations SH :
-m1 Générer du code pour le SH1.
-m2 Générer du code pour le SH2.
-m2e
Générez du code pour le SH2e.
-m2a-nofpu
Générer du code pour le SH2a sans FPU, ou pour un SH2a-FPU de telle manière que le
l'unité à virgule flottante n'est pas utilisée.
-m2a-unique-uniquement
Générer du code pour le SH2a-FPU, de telle sorte qu'aucune virgule flottante en double précision
les opérations sont utilisées.
-m2a-simple
Générer du code pour le SH2a-FPU en supposant que l'unité à virgule flottante est en simple précision
mode par défaut.
-m2a
Générer du code pour le SH2a-FPU en supposant que l'unité à virgule flottante est en double précision
mode par défaut.
-m3 Générer du code pour le SH3.
-m3e
Générez du code pour le SH3e.
-m4-nofpu
Générez du code pour le SH4 sans unité à virgule flottante.
-m4-unique-uniquement
Générez du code pour le SH4 avec une unité à virgule flottante qui ne prend en charge que les
arithmétique de précision.
-m4-simple
Générer du code pour le SH4 en supposant que l'unité à virgule flottante est en mode simple précision
par défaut.
-m4 Générer du code pour le SH4.
-m4-100
Générez le code pour SH4-100.
-m4-100-nofpu
Générez du code pour SH4-100 de telle sorte que l'unité à virgule flottante ne soit pas utilisée.
-m4-100-simple
Générer du code pour SH4-100 en supposant que l'unité à virgule flottante est en mode simple précision
par défaut.
-m4-100-unique-uniquement
Générer du code pour SH4-100 de telle sorte qu'aucune virgule flottante double précision
les opérations sont utilisées.
-m4-200
Générez le code pour SH4-200.
-m4-200-nofpu
Générer du code pour SH4-200 sans de manière à ce que l'unité à virgule flottante ne soit pas
utilisé.
-m4-200-simple
Générer du code pour SH4-200 en supposant que l'unité à virgule flottante est en mode simple précision
par défaut.
-m4-200-unique-uniquement
Générer du code pour SH4-200 de telle sorte qu'aucune virgule flottante double précision
les opérations sont utilisées.
-m4-300
Générez le code pour SH4-300.
-m4-300-nofpu
Générer du code pour SH4-300 sans de manière à ce que l'unité à virgule flottante ne soit pas
utilisé.
-m4-300-simple
Générer du code pour SH4-300 de telle sorte qu'aucune virgule flottante double précision
les opérations sont utilisées.
-m4-300-unique-uniquement
Générer du code pour SH4-300 de telle sorte qu'aucune virgule flottante double précision
les opérations sont utilisées.
-m4-340
Générez du code pour SH4-340 (pas de MMU, pas de FPU).
-m4-500
Générer du code pour SH4-500 (pas de FPU). Laissez-passer -isa=sh4-nofpu à l'assembleur.
-m4a-nofpu
Générer du code pour le SH4al-dsp, ou pour un SH4a de telle manière que la virgule flottante
l'unité n'est pas utilisée.
-m4a-unique-uniquement
Générer du code pour le SH4a, de telle sorte qu'aucune virgule flottante en double précision
les opérations sont utilisées.
-m4a-simple
Générer du code pour le SH4a en supposant que l'unité à virgule flottante est en simple précision
mode par défaut.
-m4a
Générez du code pour le SH4a.
-m4al
Pareil que -m4a-nofpu, sauf qu'il passe implicitement -dsp à l'assembleur. CCG
ne génère aucune instruction DSP pour le moment.
-m5-32média
Générez du code 32 bits pour SHmedia.
-m5-32media-nofpu
Générez du code 32 bits pour SHmedia de manière à ce que l'unité à virgule flottante ne soit pas
utilisé.
-m5-64média
Générez du code 64 bits pour SHmedia.
-m5-64media-nofpu
Générez du code 64 bits pour SHmedia de manière à ce que l'unité à virgule flottante ne soit pas
utilisé.
-m5-compact
Générer du code pour SHcompact.
-m5-compact-nofpu
Générez du code pour SHcompact de manière à ce que l'unité à virgule flottante ne soit pas utilisée.
-mb Compilez le code du processeur en mode gros-boutiste.
-ml Compilez le code du processeur en mode little-endian.
-mdalign
Alignez les doubles aux limites de 64 bits. Notez que cela change les conventions d'appel,
et donc certaines fonctions de la bibliothèque C standard ne fonctionnent pas à moins que vous ne recompiliez
il d'abord avec -mdalign.
-mrelax
Raccourcir certaines références d'adresses au moment de la liaison, lorsque cela est possible ; utilise l'option de l'éditeur de liens
-se détendre.
-mbigtable
Utilisez des décalages de 32 bits dans les tables de « commutation ». La valeur par défaut consiste à utiliser des décalages de 16 bits.
-mbitops
Activer l'utilisation des instructions de manipulation de bits sur SH2A.
-mfmovd
Activez l'utilisation de l'instruction "fmovd". Vérifier -mdalign pour les contraintes d'alignement.
-mrenesas
Respecter les conventions d'appel définies par Renesas.
-mno-renesas
Se conformer aux conventions d'appel définies pour GCC avant les conventions Renesas
étaient disponibles. Cette option est la valeur par défaut pour toutes les cibles de la chaîne d'outils SH.
-mnomacsave
Marquez le registre « MAC » comme ayant été bloqué, même si -mrenesas est donné.
-mieee
-mno-ieee
Contrôler la conformité IEEE des comparaisons à virgule flottante, ce qui affecte la gestion
des cas où le résultat d'une comparaison n'est pas ordonné. Par défaut -mieee is
implicitement activé. Si -ffinite-mathématiques-seulement est autorisé -mno-ieee est implicitement défini,
ce qui se traduit par des comparaisons plus rapides à virgule flottante plus égales et moins égales. Les
les paramètres implicites peuvent être remplacés en spécifiant soit -mieee or -mno-ieee.
-minline-ic_invalidate
Code en ligne pour invalider les entrées du cache d'instructions après la configuration de la fonction imbriquée
trampolines. Cette option n'a aucun effet si -musermode est en vigueur et la sélection
option de génération de code (par exemple -m4) ne permet pas l'utilisation de l'instruction "icbi".
Si l'option de génération de code sélectionnée ne permet pas l'utilisation du "icbi"
instructions, et -musermode n'est pas en vigueur, le code en ligne manipule le
tableau d'adresses de cache d'instructions directement avec une écriture associative. Ceci non seulement
nécessite le mode privilégié au moment de l'exécution, mais il échoue également si la ligne de cache a été
mappé via le TLB et est devenu non mappé.
-miser
Taille et emplacement de l'instruction de vidage dans le code d'assemblage.
-mpadstruct
Cette option est obsolète. Il complète les structures à un multiple de 4 octets, ce qui est
incompatible avec le SH ABI.
-modèle-matologique=modèle
Définit le modèle des opérations atomiques et des paramètres supplémentaires sous la forme d'une virgule séparée
liste. Pour plus de détails sur les fonctions intégrées atomiques, voir __atomique IntégrésL’
les modèles et paramètres suivants sont pris en charge :
aucun
Désactiver les séquences atomiques générées par le compilateur et émettre des appels de bibliothèque pour atomic
opérations. C'est la valeur par défaut si la cible n'est pas "sh*-*-linux*".
doux-gusa
Générez des séquences atomiques du logiciel gUSA compatibles GNU/Linux pour le
dans les fonctions. Les séquences atomiques générées nécessitent un support supplémentaire de la part du
code de gestion des interruptions/exceptions du système et ne conviennent que pour SH3* et
Systèmes monocœur SH4*. Cette option est activée par défaut lorsque la cible est
"sh*-*-linux*" et SH3* ou SH4*. Lorsque la cible est SH4A, cette option a également
utilise partiellement les instructions atomiques matérielles "movli.l" et "movco.l" pour
créer un code plus efficace, à moins que strict est spécifié.
soft-tcb
Générer des séquences atomiques logicielles qui utilisent une variable dans le contrôle de thread
bloquer. Il s'agit d'une variante des séquences gUSA qui peuvent également être utilisées sur SH1*
et cibles SH2*. Les séquences atomiques générées nécessitent un support supplémentaire de
le code de traitement des interruptions/exceptions du système et ne conviennent que pour
systèmes monocœur. Lors de l'utilisation de ce modèle, le décalage-gbr= le paramètre doit être
spécifié aussi.
masque-doux
Générez des séquences atomiques logicielles qui désactivent temporairement les interruptions en définissant
"SR.IMASK = 1111". Ce modèle ne fonctionne que lorsque le programme s'exécute en mode privilégié
et ne convient qu'aux systèmes monocœur. Un soutien supplémentaire de la
le code de gestion des interruptions/exceptions du système n'est pas requis. Ce modèle est
activé par défaut lorsque la cible est "sh*-*-linux*" et SH1* ou SH2*.
dur-llcs
Générer des séquences atomiques matérielles à l'aide des instructions "movli.l" et "movco.l"
seul. Ceci n'est disponible que sur SH4A et convient aux systèmes multicœurs.
Étant donné que les instructions matérielles ne prennent en charge que l'accès aux variables atomiques 32 bits à 8
ou les variables 16 bits sont émulées avec des accès 32 bits. Code compilé avec ceci
l'option est également compatible avec d'autres interruptions/exceptions de modèle atomique du logiciel
systèmes de manutention s'ils sont exécutés sur un système SH4A. Un soutien supplémentaire de la
Le code de gestion des interruptions/exceptions du système n'est pas requis pour ce modèle.
décalage-gbr=
Ce paramètre spécifie l'offset en octets de la variable dans le contrôle de thread
structure de bloc qui devrait être utilisée par les séquences atomiques générées lorsque le
soft-tcb modèle a été sélectionné. Pour les autres modèles, ce paramètre est ignoré.
La valeur spécifiée doit être un multiple entier de quatre et comprise entre 0 et 1020.
strict
Ce paramètre empêche l'utilisation mixte de plusieurs modèles atomiques, même s'ils sont
compatible et oblige le compilateur à générer des séquences atomiques du
modèle uniquement.
-mtas
Générez l'opcode "tas.b" pour "__atomic_test_and_set". Notez que selon le
configuration matérielle et logicielle particulière, cela peut dégrader les performances globales
en raison des vidages de ligne de cache d'opérandes qui sont impliqués par l'instruction "tas.b". Au
processeurs SH4A multicœurs, l'instruction "tas.b" doit être utilisée avec précaution car elle
peut entraîner une corruption des données pour certaines configurations de cache.
-mpréfergot
Lors de la génération de code indépendant de la position, émettre des appels de fonction à l'aide du décalage global
Table au lieu de la table de liaison de procédure.
-musermode
-mno-mode utilisateur
Ne pas autoriser (autoriser) le compilateur à générer du code en mode privilégié. En précisant
-musermode implique également -mno-inline-ic_invalidate si le code inline ne fonctionnait pas
en mode utilisateur. -musermode est la valeur par défaut lorsque la cible est "sh*-*-linux*". Si la
la cible est SH1* ou SH2* -musermode n'a aucun effet, car il n'y a pas de mode utilisateur.
-coût multiple=nombre
Définissez le coût à assumer pour un insn multiplié.
-mdiv=stratégie
Définissez la stratégie de division à utiliser pour les opérations de division entière. Pour SHmédia
stratégie peut être l'un des :
fp Effectue l'opération en virgule flottante. Cela a une latence très élevée, mais a besoin
seulement quelques instructions, donc cela pourrait être un bon choix si votre code a assez
ILP facilement exploitable pour permettre au compilateur de programmer la virgule flottante
instructions avec d'autres instructions. La division par zéro provoque un
exception à virgule flottante.
inv Utilise des opérations sur des nombres entiers pour calculer l'inverse du diviseur, puis
multiplie le dividende par l'inverse. Cette stratégie permet au CSE et au levage
du calcul inverse. La division par zéro calcule un résultat quelconque,
mais ne piège pas.
Inv: Minlat
Une variante de inv où, si aucune opportunité de CSE ou de levage n'a été trouvée, ou si
toute l'opération a été hissée au même endroit, les dernières étapes de la
calcul inverse sont entrelacés avec la multiplication finale pour réduire l'ensemble
latence, au détriment de l'utilisation de quelques instructions supplémentaires, et offrant ainsi moins
des opportunités de planification avec un autre code.
Appelez-nous
Appelle une fonction de bibliothèque qui implémente généralement le Inv: Minlat stratégie. Cette
donne une densité de code élevée pour les compilations "m5-*media-nofpu".
call2
Utilise un point d'entrée différent de la même fonction de bibliothèque, où il suppose qu'un
le pointeur vers une table de recherche a déjà été configuré, ce qui expose la charge du pointeur
au CSE et aux optimisations de levage de code.
inv:appel
inv:appel2
inv:fp
Utilisez l'option inv algorithme pour la génération initiale du code, mais si le code reste
non optimisé, revenir à la Appelez-nous, call2, ou fp stratégies, respectivement. Noter que
l'effet secondaire potentiellement piège de la division par zéro est porté par un
instruction, il est donc possible que toutes les instructions entières soient hissées,
mais le marqueur de l'effet secondaire reste là où il est. Une recombinaison à
les opérations à virgule flottante ou un appel n'est pas possible dans ce cas.
inv20u
inv20l
Variantes du Inv: Minlat stratégie. Dans le cas où le calcul inverse est
non séparés de la multiplication, ils accélèrent la division là où le dividende s'adapte
en 20 bits (signe plus le cas échéant) en insérant un test pour sauter un certain nombre de
opérations dans ce cas; ce test ralentit le cas de dividendes plus importants.
inv20u suppose que le cas d'un si petit dividende est peu probable, et inv20l
suppose que c'est probable.
Pour les cibles autres que SHmedia stratégie peut être l'un des :
appel-div1
Appelle une fonction de bibliothèque qui utilise l'instruction de division en une seule étape « div1 » pour
effectuer l'opération. La division par zéro calcule un résultat quelconque et ne
pas piéger. C'est la valeur par défaut sauf pour SH4, SH2A et SHcompact.
appel-fp
Appelle une fonction de bibliothèque qui effectue l'opération en flottant double précision
point. La division par zéro provoque une exception à virgule flottante. C'est la valeur par défaut
pour SHcompact avec FPU. Spécifier ceci pour les cibles qui n'ont pas de double
Le FPU de précision est par défaut "call-div1".
table d'appel
Appelle une fonction de bibliothèque qui utilise une table de recherche pour les petits diviseurs et le
Instruction "div1" avec distinction de cas pour les diviseurs plus grands. Division par zéro
calcule un résultat non spécifié et n'intercepte pas. C'est la valeur par défaut pour SH4.
Spécifier ceci pour les cibles qui n'ont pas de valeurs par défaut d'instructions de décalage dynamique
à "appel-div1".
Lorsqu'une stratégie de division n'a pas été spécifiée, la stratégie par défaut est sélectionnée en fonction
sur la cible actuelle. Pour SH2A la stratégie par défaut est d'utiliser les "divs" et "divu"
instructions au lieu d'appels de fonction de bibliothèque.
-maccumulate-arguments-sortants
Réservez de l'espace une fois pour les arguments sortants dans le prologue de la fonction plutôt qu'autour
chaque appel. Généralement bénéfique pour les performances et la taille. Également nécessaire pour se détendre
pour éviter de changer le cadre de pile autour du code conditionnel.
-mdivsi3_libfunc=prénom
Définissez le nom de la fonction de bibliothèque utilisée pour la division signée 32 bits sur prénom. Ce
n'affecte que le nom utilisé dans le Appelez-nous et inv:appel les stratégies de division et les
le compilateur attend toujours les mêmes ensembles de registres d'entrée/sortie/écrêtés comme si cela
option n'étaient pas présents.
-mplage-fixe=registre-plage
Générer du code traitant la plage de registres donnée comme des registres fixes. Un registre fixe
est celui que l'allocateur de registre ne peut pas utiliser. Ceci est utile lors de la compilation du noyau
code. Une plage de registres est spécifiée sous la forme de deux registres séparés par un tiret. Plusieurs
les plages de registres peuvent être spécifiées séparées par une virgule.
-adressage-mindexé
Activez l'utilisation du mode d'adressage indexé pour SHmedia32/SHcompact. C'est seulement
sûr si le matériel et/ou le système d'exploitation implémentent une sémantique de bouclage 32 bits pour le
mode d'adressage. L'architecture permet la mise en œuvre de processeurs avec 64 bits
MMU, que le système d'exploitation pourrait utiliser pour obtenir un adressage 32 bits, mais comme aucun matériel actuel
l'implémentation prend en charge ceci ou tout autre moyen de sécuriser le mode d'adressage indexé
à utiliser dans l'ABI 32 bits, la valeur par défaut est -mno-indexé-adressage.
-mggettrcost=nombre
Définissez le coût supposé de l'instruction "gettr" sur nombre. La valeur par défaut est 2 si
-mpt-fixe est en vigueur, 100 sinon.
-mpt-fixe
Supposons que les instructions "pt*" ne seront pas piégées. Cela génère généralement du code mieux planifié,
mais n'est pas sûr sur le matériel actuel. La définition actuelle de l'architecture dit que
"ptabs" et "ptrel" piège lorsque la cible et marqué avec 3 est 3. Cela a le
effet non intentionnel de rendre dangereux la programmation de ces instructions avant un
branche, ou les sortir d'une boucle. Par exemple, "__do_global_ctors", une partie de
libgcc qui exécute les constructeurs au démarrage du programme, appelle des fonctions dans une liste qui est
délimité par -1. Avec le -mpt-fixe option, le "ptabs" est fait avant de tester
contre -1. Cela signifie que tous les constructeurs s'exécutent un peu plus rapidement, mais lorsque le
boucle arrive à la fin de la liste, le programme plante car "ptabs" charge -1 dans un
registre cible.
Étant donné que cette option n'est pas sûre pour tout matériel mettant en œuvre l'architecture actuelle
spécification, la valeur par défaut est -mno-pt-fixe. Sauf indication explicite avec
-coût de gestion, -mno-pt-fixe implique également -mggettrcost=100; cela dissuade de s'inscrire
allocation en utilisant des registres cibles pour stocker des entiers ordinaires.
-minvalid-symboles
Supposons que les symboles ne soient pas valides. Symboles de fonction ordinaires générés par le compilateur
sont toujours valides pour charger avec "movi"/"shori"/"ptabs" ou "movi"/"shori"/"ptrel", mais
avec des astuces d'assembleur et/ou d'éditeur de liens, il est possible de générer des symboles qui provoquent
"ptabs" ou "ptrel" pour piéger. Cette option n'a de sens que lorsque -mno-pt-fixe est en
effet. Il empêche le CSE de blocs de base croisés, le levage et la plupart des planifications de symboles
charges. La valeur par défaut est -mno-invalid-symboles.
-mbranche-coût=num
Supposer num être le coût d'une instruction de branchement. Des nombres plus élevés rendent le compilateur
essayez de générer plus de code sans branche si possible. Si non spécifié, la valeur est
sélectionné en fonction du type de processeur pour lequel il est compilé.
-mzdcbranche
-mno-zdcbranche
Supposons (ne supposez pas) que les instructions de branchement conditionnel à déplacement nul "bt" et
"bf" sont rapides. Si -mzdcbranche est spécifié, le compilateur préfère zéro déplacement
séquences de codes de branche. Ceci est activé par défaut lors de la génération du code pour SH4 et
SH4A. Il peut être explicitement désactivé en spécifiant -mno-zdcbranche.
-mcbranch-force-delay-slot
Forcer l'utilisation des créneaux de délai pour les branches conditionnelles, ce qui remplit le créneau de délai
avec un "nop" si une instruction appropriée ne peut pas être trouvée. Par défaut, cette option est
désactivée. Il peut être activé pour contourner les bogues matériels tels que trouvés dans l'original
SH7055.
-mfused-mad
-mno-fusionné-madd
Générer du code qui utilise (n'utilise pas) la multiplication et l'accumulation à virgule flottante
instructions. Ces instructions sont générées par défaut si virgule flottante matérielle
est utilisé. La machine dépendante -mfused-mad l'option est maintenant mappée sur la machine-
indépendant -ffp-contrat=rapide option, et -mno-fusionné-madd est mappé à
-ffp-contrat=off.
-mfsca
-mno-fsca
Autoriser ou interdire au compilateur d'émettre l'instruction "fsca" pour le sinus et le cosinus
approximations. L'option -mfsca doit être utilisé en combinaison avec
-funsafe-math-optimisations. Il est activé par défaut lors de la génération du code pour SH4A.
En utilisant -mno-fsca désactive les approximations sinus et cosinus même si
-funsafe-math-optimisations est en vigueur.
-mfsrra
-mno-fsrra
Autoriser ou interdire au compilateur d'émettre l'instruction "fsrra" pour le carré réciproque
approximations de racine. L'option -mfsrra doit être utilisé en combinaison avec
-funsafe-math-optimisations et -ffinite-mathématiques-seulement. Il est activé par défaut lorsque
générer du code pour SH4A. À l'aide de -mno-fsrra désactive la racine carrée réciproque
approximations même si -funsafe-math-optimisations et -ffinite-mathématiques-seulement a
effet.
-mpretend-cmmove
Préférez les branches conditionnelles à déplacement nul pour les instructions de déplacement conditionnel
motifs. Cela peut entraîner un code plus rapide sur le processeur SH4.
Solaris 2 Options
Ces -m les options sont prises en charge sur Solaris 2 :
-mclear-hwcap
-mclear-hwcap indique au compilateur de supprimer les capacités matérielles générées par le
Assembleur Solaris. Ceci n'est nécessaire que lorsque les fichiers objets utilisent des extensions ISA non
pris en charge par la machine actuelle, mais vérifiez à l'exécution s'il faut ou non les utiliser.
-texte-mimpure
-texte-mimpure, utilisé en plus de -partagé, indique au compilateur de ne pas passer -z texte à
l'éditeur de liens lors de la liaison d'un objet partagé. En utilisant cette option, vous pouvez lier position-
code dépendant dans un objet partagé.
-texte-mimpure supprime les « délocalisations restent contre allouables mais non inscriptibles
sections" message d'erreur de l'éditeur de liens. Cependant, les relocalisations nécessaires déclenchent la copie sur
write, et l'objet partagé n'est pas réellement partagé entre les processus. À la place de
en utilisant -texte-mimpure, vous devez compiler tout le code source avec -fpic or -fPIC.
Ces commutateurs sont pris en charge en plus de ceux ci-dessus sur Solaris 2 :
-pthreads
Ajout de la prise en charge du multithreading à l'aide de la bibliothèque de threads POSIX. Cette option définit
flags pour le préprocesseur et l'éditeur de liens. Cette option n'affecte pas le fil
la sécurité du code objet produit par le compilateur ou celle des bibliothèques fournies avec celui-ci.
-pthread
C'est un synonyme de -pthreads.
SPARC Options
Ces -m les options sont prises en charge sur le SPARC :
-mno-app-regs
-mapp-regs
Spécifier -mapp-regs pour générer une sortie en utilisant les registres globaux 2 à 4, qui
le SPARC SVR4 ABI se réserve pour les applications. Comme le registre global 1, chaque global
le registre 2 à 4 est alors traité comme un registre attribuable qui est écrasé par
appels de fonction. C'est la valeur par défaut.
Pour être entièrement conforme à l'ABI SVR4 au prix d'une certaine perte de performances, spécifiez
-mno-app-regs. Vous devez compiler les bibliothèques et le logiciel système avec cette option.
-mplat
-mno-plat
Avec -mplat, le compilateur ne génère pas d'instructions de sauvegarde/restauration et utilise un
modèle de fenêtre « plat » ou à un seul registre. Ce modèle est compatible avec le régulier
modèle de fenêtre d'enregistrement. Les registres locaux et les registres d'entrée (0--5) sont toujours
traités comme des registres « enregistrés par appel » et sont enregistrés sur la pile selon les besoins.
Avec -mno-plat (par défaut), le compilateur génère des instructions de sauvegarde/restauration (sauf
pour les fonctions feuilles). C'est le mode de fonctionnement normal.
-mfpu
-mhard-float
Générer une sortie contenant des instructions à virgule flottante. C'est la valeur par défaut.
-mno-fpu
-msoft-float
Générer une sortie contenant des appels de bibliothèque pour virgule flottante. Mise en garde: le requis
les bibliothèques ne sont pas disponibles pour toutes les cibles SPARC. Normalement, les installations du
le compilateur C habituel de la machine sont utilisés, mais cela ne peut pas être fait directement en cross-
compilation. Vous devez prendre vos propres dispositions pour fournir une bibliothèque appropriée
fonctions de compilation croisée. Les cibles embarquées sparc-*-aout et sparlite-*-*
fournissent un support logiciel en virgule flottante.
-msoft-float modifie la convention d'appel dans le fichier de sortie ; par conséquent, ce n'est que
utile si vous compilez tous d'un programme avec cette option. En particulier, vous devez
compiler libgcc.a, la bibliothèque fournie avec GCC, avec -msoft-float pour cela
à travailler.
-mhard-quad-float
Générer une sortie contenant des instructions à virgule flottante à quatre mots (long double).
-msoft-quad-flotteur
Générer une sortie contenant des appels de bibliothèque pour la virgule flottante à quatre mots (long double)
instructions. Les fonctions appelées sont celles spécifiées dans l'ABI SPARC. C'est le
défaut.
Au moment d'écrire ces lignes, aucune implémentation SPARC ne prend en charge le matériel pour
les instructions à virgule flottante à quatre mots. Ils invoquent tous un gestionnaire d'interruptions pour l'un des
ces instructions, puis le gestionnaire d'interruptions émule l'effet de l'instruction.
En raison de la surcharge du gestionnaire de traps, c'est beaucoup plus lent que d'appeler la bibliothèque ABI
routines. Ainsi, le -msoft-quad-flotteur L'option est l'option par défaut.
-mno-doubles-non-alignés
-doubles-munalignés
Supposons que les doubles aient un alignement sur 8 octets. C'est la valeur par défaut.
Avec -doubles-munalignés, GCC suppose que les doubles ont un alignement sur 8 octets uniquement s'ils
sont contenus dans un autre type, ou s'ils ont une adresse absolue. Sinon, il
suppose qu'ils ont un alignement de 4 octets. La spécification de cette option évite certains
problèmes de compatibilité avec le code généré par d'autres compilateurs. Ce n'est pas la valeur par défaut
car cela entraîne une perte de performances, en particulier pour le code à virgule flottante.
-mode-muser
-mno-mode-utilisateur
Ne générez pas de code qui ne peut s'exécuter qu'en mode superviseur. Ceci n'est pertinent que pour
l'instruction "casa" émise pour le processeur LEON3. C'est la valeur par défaut.
-mno-structures plus rapides
-structures mfaster
Avec -structures mfaster, le compilateur suppose que les structures doivent avoir 8 octets
alignement. Cela permet l'utilisation de paires d'instructions "ldd" et "std" pour les copies
dans l'affectation de structure, au lieu de deux fois plus de paires "ld" et "st". Cependant, le
l'utilisation de cet alignement modifié viole directement l'ABI SPARC. Ainsi, il est prévu
uniquement pour une utilisation sur des cibles où le développeur reconnaît que leur code résultant est
pas directement en ligne avec les règles de l'ABI.
-mcpu=type_cpu
Définissez le jeu d'instructions, le jeu de registres et les paramètres de planification d'instructions pour
type de machine type_cpu. Valeurs prises en charge pour type_cpu v7, cyprès, v8, supersparc,
hypersparc, leon, leon3, Léon3v7, sparlite, f930, f934, sparlite86x, étincelle,
tsc701, v9, ultrasparc, ultrasparc3, Niagara, niagara2, niagara3 et niagara4.
Les chaînes d'outils natives Solaris et GNU/Linux prennent également en charge la valeur indigène, qui sélectionne
la meilleure option d'architecture pour le processeur hôte. -mcpu=natif n'a aucun effet si
GCC ne reconnaît pas le processeur.
Les paramètres de planification d'instructions par défaut sont utilisés pour les valeurs qui sélectionnent un
architecture et non une implémentation. Ceux-ci sont v7, v8, sparlite, étincelle, v9.
Voici une liste de chaque architecture prise en charge et de leurs implémentations prises en charge.
v7 cyprès, leon3v7
v8 supersparc, hypersparc, Léon, Léon3
sparlite
f930, f934, spaclite86x
étincelle
tsc701
v9 ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4
Par défaut (sauf configuration contraire), GCC génère du code pour la variante V7 du
Architecture SPARC. Avec -mcpu=cyprès, le compilateur l'optimise en plus pour
la puce Cypress CY7C602, telle qu'utilisée dans la série SPARCStation/SPARCServer 3xx. C'est
convient également pour les anciennes SPARCStation 1, 2, IPX, etc.
Avec -mcpu=v8, GCC génère du code pour la variante V8 de l'architecture SPARC. Les
la seule différence avec le code V7 est que le compilateur émet l'entier multiplier et
instructions de division d'entiers qui existent dans SPARC-V8 mais pas dans SPARC-V7. Avec
-mcpu=supersparc, le compilateur l'optimise en plus pour la puce SuperSPARC, comme
utilisé dans les séries SPARCStation 10, 1000 et 2000.
Avec -mcpu=sparclite, GCC génère du code pour la variante SPARClite du SPARC
architecture. Cela ajoute la multiplication entière, l'étape de division entière et le balayage ("ffs")
instructions qui existent dans SPARClite mais pas dans SPARC-V7. Avec -mcpu=f930,
le compilateur l'optimise en outre pour la puce Fujitsu MB86930, qui est l'original
SPARClite, sans FPU. Avec -mcpu=f934, le compilateur l'optimise en plus pour
la puce Fujitsu MB86934, qui est la plus récente SPARClite avec FPU.
Avec -mcpu=sparclet, GCC génère du code pour la variante SPARClet du SPARC
architecture. Ceci ajoute l'entier multiplier, multiplier/accumuler, diviser l'entier
instructions step and scan ("ffs") qui existent dans SPARClet mais pas dans SPARC-V7. Avec
-mcpu=tsc701, le compilateur l'optimise en plus pour la puce TEMIC SPARClet.
Avec -mcpu=v9, GCC génère du code pour la variante V9 de l'architecture SPARC. Cette
ajoute des instructions de déplacement d'entier et de virgule flottante 64 bits, 3 virgule flottante supplémentaires
registres de code de condition et instructions de déplacement conditionnel. Avec -mcpu=ultraparc,
le compilateur l'optimise en plus pour les puces Sun UltraSPARC I/II/IIIi. Avec
-mcpu=ultraparc3, le compilateur l'optimise en plus pour le Sun UltraSPARC
Puces III/III+/IIIi/IIIi+/IV/IV+. Avec -mcpu=niagara, le compilateur en plus
l'optimise pour les puces Sun UltraSPARC T1. Avec -mcpu=niagara2, le compilateur
l'optimise en outre pour les puces Sun UltraSPARC T2. Avec -mcpu=niagara3,
le compilateur l'optimise en outre pour les puces Sun UltraSPARC T3. Avec -mcpu=niagara4,
le compilateur l'optimise en outre pour les puces Sun UltraSPARC T4.
-mtune=type_cpu
Définir les paramètres de planification des instructions pour le type de machine type_cpu, mais ne définissez pas
le jeu d'instructions ou le jeu de registres que l'option -mcpu=type_cpu t.
Les mêmes valeurs pour -mcpu=type_cpu peut être utilisé pour -mtune=type_cpu, mais le seul
les valeurs utiles sont celles qui sélectionnent une implémentation CPU particulière. Ce sont
cyprès, supersparc, hypersparc, leon, leon3, Léon3v7, f930, f934, sparlite86x,
tsc701, ultrasparc, ultrasparc3, Niagara, niagara2, niagara3 et niagara4. Avec
les chaînes d'outils natives Solaris et GNU/Linux, indigène peuvent également être utilisés.
-mv8plus
-mno-v8plus
Avec -mv8plus, GCC génère du code pour l'ABI SPARC-V8+. La différence avec le V8
ABI est que les registres global et out sont considérés comme larges de 64 bits. Ceci est activé
par défaut sur Solaris en mode 32 bits pour tous les processeurs SPARC-V9.
-mvis
-mno-vis
Avec -mvis, GCC génère du code qui tire parti d'UltraSPARC Visual
Extensions de jeu d'instructions. La valeur par défaut est -mno-vis.
-mvis2
-mno-vis2
Avec -mvis2, GCC génère du code qui tire parti de la version 2.0 de l'UltraSPARC
Extensions de jeu d'instructions visuelles. La valeur par défaut est -mvis2 lorsque vous ciblez un processeur qui
prend en charge de telles instructions, telles que UltraSPARC-III et versions ultérieures. Réglage -mvis2 aussi
ensembles -mvis.
-mvis3
-mno-vis3
Avec -mvis3, GCC génère du code qui tire parti de la version 3.0 de l'UltraSPARC
Extensions de jeu d'instructions visuelles. La valeur par défaut est -mvis3 lorsque vous ciblez un processeur qui
prend en charge de telles instructions, telles que niagara-3 et versions ultérieures. Réglage -mvis3 définit également
-mvis2 et -mvis.
-mccbcond
-mno-cbcond
Avec -mccbcond, GCC génère du code qui tire parti de la comparaison et de la branche
instructions, telles que définies dans l'architecture Sparc 2011. La valeur par défaut est -mccbcond quand
ciblant un processeur qui prend en charge de telles instructions, comme niagara-4 et versions ultérieures.
-mpopc
-mno-popc
Avec -mpopc, GCC génère du code qui tire parti de la population UltraSPARC
instruction de compter. La valeur par défaut est -mpopc lorsque vous ciblez un processeur qui prend en charge de tels
instructions, telles que Niagara-2 et versions ultérieures.
-mfmaf
-mno-fmaf
Avec -mfmaf, GCC génère du code qui tire parti de l'UltraSPARC Fused Multiply-
Ajoutez des extensions à virgule flottante. La valeur par défaut est -mfmaf lorsque vous ciblez un processeur qui
prend en charge de telles instructions, telles que Niagara-3 et versions ultérieures.
-mfix-at697f
Activez la solution de contournement documentée pour l'erratum unique du processeur Atmel AT697F
(qui correspond à l'erratum #13 du processeur AT697E).
-mfix-ut699
Activer les solutions de contournement documentées pour les errata à virgule flottante et le cache de données
annuler les errata du processeur UT699.
Ces -m les options sont prises en charge en plus de celles ci-dessus sur les processeurs SPARC-V9 en 64 bits
environnements:
-m32
-m64
Générez du code pour un environnement 32 bits ou 64 bits. L'environnement 32 bits définit int,
long et pointeur sur 32 bits. L'environnement 64 bits définit int sur 32 bits et long et
pointeur sur 64 bits.
-mcmodèle=qui
Définissez le modèle de code sur l'un des
moyen
Le modèle de code Medium/Low : adresses 64 bits, les programmes doivent être liés dans le bas 32
bits de mémoire. Les programmes peuvent être liés de manière statique ou dynamique.
moyen
Le modèle de code Medium/Middle : adresses 64 bits, les programmes doivent être liés dans le bas
44 bits de mémoire, les segments de texte et de données doivent avoir une taille inférieure à 2 Go et
le segment de données doit être situé à moins de 2 Go du segment de texte.
médany
Le modèle de code Medium/Anywhere : adresses 64 bits, les programmes peuvent être liés n'importe où
en mémoire, les segments de texte et de données doivent avoir une taille inférieure à 2 Go et les données
segment doit être situé à moins de 2 Go du segment de texte.
embarquer
Le modèle de code Medium/Anywhere pour les systèmes embarqués : adresses 64 bits, le texte
et les segments de données doivent avoir une taille inférieure à 2 Go, les deux commençant n'importe où dans la mémoire
(déterminé au moment de la liaison). Le registre global %g4 pointe vers la base des données
segment. Les programmes sont liés de manière statique et PIC n'est pas pris en charge.
-memory-model=mem-modèle
Réglez le modèle de mémoire en vigueur sur le processeur sur l'un des
défaut
Le modèle de mémoire par défaut pour le processeur et le système d'exploitation.
rmo Ordre de mémoire détendu
pso Commande partielle en magasin
tso Commande totale du magasin
sc Cohérence séquentielle
Ces modèles de mémoire sont formellement définis dans l'annexe D de l'architecture Sparc V9
manuel, tel que défini dans le champ "PSATE.MM" du processeur.
-mstack-biais
-mno-stack-biais
Avec -mstack-biais, GCC suppose que le pointeur de pile, et le pointeur de trame s'il est présent,
sont décalés de -2047 qui doivent être rajoutés lors de la création de références de trame de pile. Cette
est la valeur par défaut en mode 64 bits. Sinon, supposez qu'un tel décalage n'est pas présent.
SPU Options
Ces -m les options sont prises en charge sur le SPU :
-mwarn-reloc
-Merror-Reloc
Le chargeur pour SPU ne gère pas les relocalisations dynamiques. Par défaut, GCC donne un
erreur lorsqu'il génère du code qui nécessite une relocalisation dynamique. -mno-erreur-reloc
désactive l'erreur, -mwarn-reloc génère un avertissement à la place.
-msafe-dma
-munsafe-dma
Les instructions qui initient ou testent l'achèvement du DMA ne doivent pas être réordonnées avec
en ce qui concerne les charges et les stockages de la mémoire en cours d'accès. Avec -munsafe-dma
vous devez utiliser le mot clé "volatile" pour protéger les accès mémoire, mais cela peut conduire à
code inefficace dans les endroits où la mémoire est connue pour ne pas changer. Plutôt que de marquer
la mémoire comme volatile, vous pouvez utiliser -msafe-dma pour dire au compilateur de traiter le DMA
instructions comme affectant potentiellement toute la mémoire.
-mbranche-indices
Par défaut, GCC génère une instruction d'indication de branchement pour éviter les blocages de pipeline pour
branches toujours prises ou probablement prises. Un indice n'est pas généré à moins de 8
instructions loin de sa succursale. Il y a peu de raisons de les désactiver, sauf pour
à des fins de débogage ou pour rendre un objet un peu plus petit.
-mpetit-mem
-mlarge-mem
Par défaut, GCC génère du code en supposant que les adresses ne dépassent jamais 18 bits.
Avec -mlarge-mem un code est généré qui suppose une adresse complète de 32 bits.
-mstdmain
Par défaut, GCC se lie au code de démarrage qui assume la fonction principale de style SPU
interface (qui a une liste de paramètres non conventionnelle). Avec -mstdmain, liens GCC
votre programme par rapport au code de démarrage qui suppose une interface de style C99 vers "main",
y compris une copie locale des chaînes "argv".
-mplage-fixe=registre-plage
Générer du code traitant la plage de registres donnée comme des registres fixes. Un registre fixe
est celui que l'allocateur de registre ne peut pas utiliser. Ceci est utile lors de la compilation du noyau
code. Une plage de registres est spécifiée sous la forme de deux registres séparés par un tiret. Plusieurs
les plages de registres peuvent être spécifiées séparées par une virgule.
-mea32
-mea64
Compiler le code en supposant que les pointeurs vers l'espace d'adressage PPU accessible via le "__ea"
qu'un qualificateur d'espace d'adressage nommé a une largeur de 32 ou 64 bits. La valeur par défaut est 32 bits.
Comme il s'agit d'une option qui modifie l'ABI, tout le code objet d'un exécutable doit être compilé
avec le même réglage.
-maddress-espace-conversion
-mno-conversion-espace-adresse
Autoriser/interdire le traitement de l'espace d'adressage "__ea" comme surensemble de l'adresse générique
espacer. Cela permet des transtypages explicites entre "__ea" et un pointeur générique ainsi que
conversions implicites de pointeurs génériques en pointeurs "__ea". La valeur par défaut est d'autoriser
conversions de pointeur d'espace d'adressage.
-mcache-taille=taille du cache
Cette option contrôle la version de libgcc que le compilateur lie à un exécutable
et sélectionne un cache géré par logiciel pour accéder aux variables dans l'adresse "__ea"
espace avec une taille de cache particulière. Options possibles pour taille du cache 8, 16, 32, 64
et 128. La taille du cache par défaut est de 64 Ko.
-matomic-mises à jour
-mno-atomic-mises à jour
Cette option contrôle la version de libgcc que le compilateur lie à un exécutable
et sélectionne si les mises à jour atomiques du cache géré par logiciel des variables côté PPU
sont utilisés. Si vous utilisez des mises à jour atomiques, les modifications apportées à une variable PPU à partir du code SPU à l'aide
le qualificateur d'espace d'adressage nommé "__ea" n'interfère pas avec les modifications apportées aux autres PPU
variables résidant dans la même ligne de cache du code PPU. Si vous n'utilisez pas atomic
mises à jour, de telles interférences peuvent se produire ; cependant, la réécriture des lignes de cache est plus
efficace. Le comportement par défaut consiste à utiliser des mises à jour atomiques.
-mdual-nops
-Mdual-nops =n
Par défaut, GCC insère des nops pour augmenter le problème double lorsqu'il s'attend à ce qu'il augmente
la performance. n peut être une valeur de 0 à 10. Un plus petit n insère moins de nops. 10 est
la valeur par défaut, 0 est le même que -mno-dual-nops. Désactivé avec -Tu.
-mhint-max-nops=n
Nombre maximal de nops à insérer pour un indice de branche. Un indice de branche doit être d'au moins 8
instructions loin de la branche qu'elle affecte. GCC insère jusqu'à n non à
appliquez ceci, sinon il ne génère pas l'indicateur de branche.
-mindice-max-distance=n
L'encodage de l'instruction de conseil de branche limite le conseil à moins de 256
instructions de la branche concernée. Par défaut, GCC s'assure qu'il est dans
125.
-msafe-indices
Contournez un bogue matériel qui fait que le SPU se bloque indéfiniment. Par défaut, GCC
insère l'instruction "hbrp" pour s'assurer que ce blocage ne se produira pas.
Options pour Système V
Ces options supplémentaires sont disponibles sur System V Release 4 pour la compatibilité avec d'autres
compilateurs sur ces systèmes :
-G Créez un objet partagé. Il est recommandé de -symbolique or -partagé être utilisé à la place.
-Qy Identifier les versions de chaque outil utilisé par le compilateur, dans un assembleur ".ident"
directive dans la sortie.
-Qn S'abstenir d'ajouter des directives ".ident" au fichier de sortie (c'est la valeur par défaut).
-YP,dirs
Rechercher dans les répertoires dirs, et pas d'autres, pour les bibliothèques spécifiées avec -l.
-Ah,dir
regarde dans l'annuaire dir pour trouver le préprocesseur M4. L'assembleur utilise ce
option.
TUILE-Gx Options
Ces -m les options sont prises en charge sur le TILE-Gx :
-mcmodel=petit
Générez du code pour le petit modèle. La distance pour les appels directs est limitée à 500M
dans les deux sens. Les adresses relatives au PC sont de 32 bits. Prise en charge des adresses absolues
la plage d'adresses complète.
-mcmodel=grand
Générez du code pour le grand modèle. Il n'y a aucune limitation sur la distance d'appel, pc-
adresses relatives ou adresses absolues.
-mcpu=prénom
Sélectionne le type de CPU à cibler. Actuellement, le seul type pris en charge est tuilegx.
-m32
-m64
Générez du code pour un environnement 32 bits ou 64 bits. L'environnement 32 bits définit int,
long et pointeur sur 32 bits. L'environnement 64 bits définit int sur 32 bits et long et
pointeur sur 64 bits.
-mbig-endian
-mlittle-endian
Générez du code en mode gros/petit boutien, respectivement.
TILEPro Options
Ces -m les options sont prises en charge sur le TILEPro :
-mcpu=prénom
Sélectionne le type de CPU à cibler. Actuellement, le seul type pris en charge est tuilepro.
-m32
Générez du code pour un environnement 32 bits, qui définit int, long et pointeur sur 32 bits.
C'est le seul comportement pris en charge, donc l'indicateur est essentiellement ignoré.
V850 Options
Ces -m les options sont définies pour les implémentations V850 :
-mlong-appels
-mno-long-appels
Traitez tous les appels comme étant éloignés (proches). Si les appels sont supposés être éloignés, le
le compilateur charge toujours l'adresse de la fonction dans un registre et appelle indirectement
par le pointeur.
-mno-ep
-mep
Ne pas optimiser (optimiser) les blocs de base qui utilisent le même pointeur d'index 4 ou plus
fois pour copier le pointeur dans le registre "ep", et utiliser les plus courts "sld" et "sst"
instructions. Les -mep L'option est activée par défaut si vous optimisez.
-mno-prolog-fonction
-mprolog-fonction
Ne pas utiliser (utiliser) des fonctions externes pour sauvegarder et restaurer des registres au prologue
et épilogue d'une fonction. Les fonctions externes sont plus lentes, mais utilisent moins de code
espace si plusieurs fonctions enregistrent le même nombre de registres. Les
-mprolog-fonction L'option est activée par défaut si vous optimisez.
-mespace
Essayez de rendre le code aussi petit que possible. À l'heure actuelle, cela allume simplement le -mep
et -mprolog-fonction options.
-mtda=n
Mettez des variables statiques ou globales dont la taille est n octets ou moins dans la petite zone de données
ce registre "ep" pointe vers. La petite zone de données peut contenir jusqu'à 256 octets au total
(128 octets pour les références d'octets).
-msda=n
Mettez des variables statiques ou globales dont la taille est n octets ou moins dans la petite zone de données
ce registre "gp" pointe vers. La petite zone de données peut contenir jusqu'à 64 kilo-octets.
-mzda=n
Mettez des variables statiques ou globales dont la taille est n octets ou moins dans les 32 premiers
kilo-octets de mémoire.
-MV850
Spécifiez que le processeur cible est le V850.
-mv850e3v5
Spécifiez que le processeur cible est le V850E3V5. La constante du préprocesseur
"__v850e3v5__" est défini si cette option est utilisée.
-mv850e2v4
Spécifiez que le processeur cible est le V850E3V5. Il s'agit d'un alias pour le
-mv850e3v5 option.
-mv850e2v3
Spécifiez que le processeur cible est le V850E2V3. La constante du préprocesseur
"__v850e2v3__" est défini si cette option est utilisée.
-mv850e2
Spécifiez que le processeur cible est le V850E2. La constante du préprocesseur
"__v850e2__" est défini si cette option est utilisée.
-mv850e1
Spécifiez que le processeur cible est le V850E1. Les constantes du préprocesseur
"__v850e1__" et "__v850e__" sont définis si cette option est utilisée.
-mv850es
Spécifiez que le processeur cible est le V850ES. Il s'agit d'un alias pour le -mv850e1
option.
-mv850e
Spécifiez que le processeur cible est le V850E. La constante du préprocesseur "__v850e__"
est défini si cette option est utilisée.
Si ni l'un ni l'autre -MV850 ni -mv850e ni -mv850e1 ni -mv850e2 ni -mv850e2v3 ni -mv850e3v5
sont définis, puis un processeur cible par défaut est choisi et le __v850**
constante du préprocesseur est définie.
Les constantes du préprocesseur "__v850" et "__v851__" sont toujours définies, indépendamment de
quelle variante de processeur est la cible.
-mdisable-appel
-mno-disable-callt
Cette option supprime la génération de l'instruction "CALLT" pour les v850e, v850e1,
Versions v850e2, v850e2v3 et v850e3v5 de l'architecture v850.
Cette option est activée par défaut lorsque le RH850 ABI est utilisé (voir -mrh850-abi), Et
désactivé par défaut lorsque l'ABI GCC est en cours d'utilisation. Si les instructions « APPEL » sont
généré, puis le symbole du préprocesseur C "__V850_CALLT__" est défini.
-mrelax
-mno-relax
Transmettre (ou ne pas transmettre) le -mrelax option de ligne de commande à l'assembleur.
-mlong-sauts
-mno-long-sauts
Désactivez (ou réactivez) la génération d'instructions de saut relatives au PC.
-msoft-float
-mhard-float
Désactivez (ou réactivez) la génération d'instructions matérielles à virgule flottante. Cette
option n'est significative que lorsque l'architecture cible est V850E2V3 ou plus. Si
des instructions matérielles à virgule flottante sont générées, puis le préprocesseur C
le symbole "__FPU_OK__" est défini, sinon le symbole "__NO_FPU__" est défini.
-mboucle
Permet l'utilisation de l'instruction e3v5 LOOP. L'utilisation de cette instruction n'est pas
activé par défaut lorsque l'architecture e3v5 est sélectionnée car son utilisation est toujours
expérimental.
-mrh850-abi
-mghs
Active la prise en charge de la version RH850 du V850 ABI. C'est la valeur par défaut. Avec
cette version de l'ABI, les règles suivantes s'appliquent :
* Les structures et les unions de taille entière sont renvoyées via un pointeur mémoire plutôt que
un registre.
* Les grandes structures et unions (plus de 8 octets) sont transmises par valeur.
* Les fonctions sont alignées sur des limites de 16 bits.
* Le -m8byte-aligner l'option de ligne de commande est prise en charge.
* Le -mdisable-appel L'option de ligne de commande est activée par défaut. Les
-mno-disable-callt L'option de ligne de commande n'est pas prise en charge.
Lorsque cette version de l'ABI est activée, le symbole du préprocesseur C "__V850_RH850_ABI__"
est défini.
-mgcc-abi
Active la prise en charge de l'ancienne version GCC de l'ABI V850. Avec cette version de l'ABI
les règles suivantes s'appliquent:
* Les structures et les unions de taille entière sont renvoyées dans le registre "r10".
* Les grandes structures et unions (plus de 8 octets) sont transmises par référence.
* Les fonctions sont alignées sur les limites de 32 bits, à moins d'optimiser la taille.
* Le -m8byte-aligner L'option de ligne de commande n'est pas prise en charge.
* Le -mdisable-appel L'option de ligne de commande est prise en charge mais n'est pas activée par défaut.
Lorsque cette version de l'ABI est activée, le symbole du préprocesseur C "__V850_GCC_ABI__"
est défini.
-m8byte-aligner
-mno-8byte-aligner
Permet d'aligner la prise en charge des types « double » et « long long » sur des limites de 8 octets.
La valeur par défaut est de restreindre l'alignement de tous les objets à 4 octets au maximum. Lorsque
-m8byte-aligner est en effet le symbole du préprocesseur C "__V850_8BYTE_ALIGN__" est
Défini.
-mbig-commutateur
Générez du code adapté aux grandes tables de commutation. N'utilisez cette option que si le
l'assembleur/éditeur de liens se plaint de branches hors de portée dans une table de commutation.
-mapp-regs
Cette option provoque l'utilisation de r2 et r5 dans le code généré par le compilateur. Cette
le paramètre est la valeur par défaut.
-mno-app-regs
Cette option fait que r2 et r5 sont traités comme des registres fixes.
VAX Options
Ces -m des options sont définies pour le VAX :
-munix
Ne pas sortir certaines instructions de saut ("aobleq" et ainsi de suite) que l'assembleur Unix
car le VAX ne peut pas gérer sur de longues distances.
-mgnu
Affichez ces instructions de saut, en supposant que l'assembleur GNU est en train d'être
utilisé.
-mg Code de sortie pour les nombres à virgule flottante au format G au lieu du format D.
Visium Options
-mdebug
Un programme qui effectue des E/S de fichiers et est destiné à s'exécuter sur une cible MCM doit être
lié à cette option. Cela provoque la liaison des bibliothèques libc.a et libdebug.a.
Le programme doit être exécuté sur la cible sous le contrôle du débogage à distance GDB
bout.
-msim
Un programme qui effectue des E/S de fichiers et qui est destiné à s'exécuter sur le simulateur doit être
lié à l'option. Cela provoque la liaison des bibliothèques libc.a et libsim.a.
-mfpu
-mhard-float
Générez du code contenant des instructions à virgule flottante. C'est la valeur par défaut.
-mno-fpu
-msoft-float
Générez du code contenant des appels de bibliothèque pour la virgule flottante.
-msoft-float modifie la convention d'appel dans le fichier de sortie ; par conséquent, ce n'est que
utile si vous compilez tous d'un programme avec cette option. En particulier, vous devez
compiler libgcc.a, la bibliothèque fournie avec GCC, avec -msoft-float pour cela
à travailler.
-mcpu=type_cpu
Définissez le jeu d'instructions, le jeu de registres et les paramètres de planification d'instructions pour
type de machine type_cpu. Valeurs prises en charge pour type_cpu mcm, gr5 et gr6.
mcm est synonyme de gr5 présent pour la compatibilité descendante.
Par défaut (sauf configuration contraire), GCC génère du code pour la variante GR5 de
l'architecture Visium.
Avec -mcpu=gr6, GCC génère du code pour la variante GR6 de l'architecture Visium.
La seule différence avec le code GR5 est que le compilateur générera un mouvement de bloc
des instructions.
-mtune=type_cpu
Définir les paramètres de planification des instructions pour le type de machine type_cpu, mais ne définissez pas
le jeu d'instructions ou le jeu de registres que l'option -mcpu=type_cpu aurait.
-mode msv
Générer du code pour le mode superviseur, où il n'y a pas de restrictions sur l'accès
aux registres généraux. C'est la valeur par défaut.
-mode-muser
Générer du code pour le mode utilisateur, où l'accès à certains registres généraux est
interdit : sur le GR5, les registres r24 à r31 ne sont pas accessibles dans ce mode ; sur le
GR6, seuls les registres r29 à r31 sont concernés.
VMS Options
Ces -m des options sont définies pour les implémentations VMS :
-mvms-codes-retour
Renvoie les codes de condition VMS de « principal ». La valeur par défaut est de retourner une condition de style POSIX
(par exemple des codes d'erreur).
-mdebug-main=préfixe
Marquer la première routine dont le nom commence par préfixe comme routine principale pour le
débogueur.
-mmalloc64
Par défaut, les routines d'allocation de mémoire 64 bits.
-mpointeur-taille=Taille
Définissez la taille par défaut des pointeurs. Options possibles pour Taille 32 or court pour un bit 32
pointeurs, 64 or Long pour les pointeurs 64 bits, et aucune pour ne prendre en charge que les pointeurs 32 bits.
La dernière option désactive "pragma pointer_size".
VxWorks Options
Les options de cette section sont définies pour toutes les cibles VxWorks. Options spécifiques au
le matériel cible est répertorié avec les autres options pour cette cible.
-mrtp
GCC peut générer du code pour les noyaux VxWorks et les processus en temps réel (RTP). Cette
l'option passe de la première à la seconde. Il définit également la macro du préprocesseur
"__RTP__".
-non statique
Liez un exécutable RTP à des bibliothèques partagées plutôt qu'à des bibliothèques statiques. Les
Options -statique et -partagé peut également être utilisé pour les RTP ; -statique est la valeur par défaut.
-Bstatique
-Bdynamique
Ces options sont transmises à l'éditeur de liens. Ils sont définis pour la compatibilité avec
Diab.
-Xbind-paresseux
Activez la liaison paresseuse des appels de fonction. Cette option équivaut à -Wl,-z, maintenant Les modèles sont aussi
défini pour la compatibilité avec Diab.
-Xbind-maintenant
Désactivez la liaison paresseuse des appels de fonction. Cette option est la valeur par défaut et est définie pour
compatibilité avec Diab.
x86 Options
Ces -m les options sont définies pour la famille d'ordinateurs x86.
-mars=type de processeur
Générer des instructions pour le type de machine type de processeur. Contrairement à -mtune=type de processeur,
qui règle simplement le code généré pour le type de processeur, -mars=type de processeur
permet à GCC de générer du code qui peut ne pas fonctionner du tout sur des processeurs autres que celui
indiqué. En précisant -mars=type de processeur implique -mtune=type de processeur.
Les choix pour type de processeur sont:
indigène
Cela sélectionne le processeur pour lequel générer le code au moment de la compilation en déterminant le
type de processeur de la machine de compilation. À l'aide de -mars=natif permet à tout
sous-ensembles d'instructions pris en charge par la machine locale (par conséquent, le résultat peut ne pas s'exécuter
sur différentes machines). À l'aide de -mtune=natif produit du code optimisé pour le local
machine sous les contraintes du jeu d'instructions sélectionné.
i386
Processeur Intel i386 d'origine.
i486
Processeur Intel i486. (Aucune planification n'est implémentée pour cette puce.)
i586
pentium
Processeur Intel Pentium sans support MMX.
pentium-mmx
Processeur Intel Pentium MMX, basé sur un noyau Pentium avec prise en charge du jeu d'instructions MMX.
pentium pro
Processeur Intel Pentium Pro.
i686
Lorsqu'il est utilisé avec -Mars, le jeu d'instructions Pentium Pro est utilisé, donc le code s'exécute
sur toutes les puces de la famille i686. Lorsqu'il est utilisé avec -mtune, il a le même sens que
générique.
pentium2
Processeur Intel Pentium II, basé sur le noyau Pentium Pro avec prise en charge du jeu d'instructions MMX.
pentium3
pentium3m
Processeur Intel Pentium III, basé sur le noyau Pentium Pro avec jeu d'instructions MMX et SSE
soutien.
pentium-m
Intel Pentium M ; version basse consommation du processeur Intel Pentium III avec MMX, SSE et SSE2
prise en charge du jeu d'instructions. Utilisé par les ordinateurs portables Centrino.
pentium4
pentium4m
Processeur Intel Pentium 4 avec prise en charge des jeux d'instructions MMX, SSE et SSE2.
prescott
Version améliorée du processeur Intel Pentium 4 avec instruction MMX, SSE, SSE2 et SSE3
ensemble de soutien.
nocona
Version améliorée du processeur Intel Pentium 4 avec extensions 64 bits, MMX, SSE, SSE2 et
Prise en charge du jeu d'instructions SSE3.
core2
Processeur Intel Core 2 avec extensions 64 bits, MMX, SSE, SSE2, SSE3 et SSSE3
prise en charge du jeu d'instructions.
néhalem
Processeur Intel Nehalem avec extensions 64 bits, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Prise en charge des jeux d'instructions SSE4.2 et POPCNT.
ouest
Processeur Intel Westmere avec extensions 64 bits, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Prise en charge des jeux d'instructions SSE4.2, POPCNT, AES et PCLMUL.
pont de sable
Processeur Intel Sandy Bridge avec extensions 64 bits, MMX, SSE, SSE2, SSE3, SSSE3,
Prise en charge des jeux d'instructions SSE4.1, SSE4.2, POPCNT, AVX, AES et PCLMUL.
pont de lierre
Processeur Intel Ivy Bridge avec extensions 64 bits, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Jeu d'instructions SSE4.2, POPCNT, AVX, AES, PCLMUL, FSGSBASE, RDRND et F16C
soutien.
Haswell
Processeur Intel Haswell avec extensions 64 bits, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, IMC, IMC2
et prise en charge du jeu d'instructions F16C.
Broadwell
Processeur Intel Broadwell avec extensions 64 bits, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, IMC, IMC2,
Prise en charge des jeux d'instructions F16C, RDSEED, ADCX et PREFETCHW.
bonnet
Processeur Intel Bonnell avec extensions 64 bits, MOVBE, MMX, SSE, SSE2, SSE3 et SSSE3
prise en charge du jeu d'instructions.
mont d'argent
Processeur Intel Silvermont avec extensions 64 bits, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
Prise en charge des jeux d'instructions SSE4.1, SSE4.2, POPCNT, AES, PCLMUL et RDRND.
knl Processeur Intel Knight's Landing avec extensions 64 bits, MOVBE, MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, IMC,
BMI2, F16C, RDSEED, ADCX, PREFETCHW, AVX512F, AVX512PF, AVX512ER et AVX512CD
prise en charge du jeu d'instructions.
k6 Processeur AMD K6 avec prise en charge du jeu d'instructions MMX.
k6-2
k6-3
Versions améliorées du processeur AMD K6 avec MMX et 3DNow ! prise en charge du jeu d'instructions.
athlon
Athlon-Tbird
Processeur AMD Athlon avec MMX, 3dNOW !, 3DNow amélioré ! et instructions de prélecture SSE
soutien.
athlon-4
athlon-xp
athlon-mp
Processeur AMD Athlon amélioré avec MMX, 3DNow !, 3DNow ! et instruction SSE complète
ensemble de soutien.
k8
Opteron
athlon64
athlon-fx
Processeurs basés sur le cœur AMD K8 avec prise en charge du jeu d'instructions x86-64, y compris
les processeurs AMD Opteron, Athlon 64 et Athlon 64 FX. (Ceci surpasse le MMX,
SSE, SSE2, 3DNow !, 3DNow amélioré ! et extensions de jeu d'instructions 64 bits.)
k8-sse3
opteron-sse3
athlon64-sse3
Versions améliorées des cœurs AMD K8 avec prise en charge du jeu d'instructions SSE3.
amdfam10
Barcelona
Processeurs basés sur les cœurs 10h de la famille AMD avec prise en charge du jeu d'instructions x86-64. (Cette
sur-ensembles MMX, SSE, SSE2, SSE3, SSE4A, 3DNow !, 3DNow ! amélioré, ABM et 64 bits
extensions de jeu d'instructions.)
bdver1
Processeurs basés sur les cœurs 15h de la famille AMD avec prise en charge du jeu d'instructions x86-64. (Cette
surensembles FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
SSSE3, SSE4.1, SSE4.2, ABM et extensions de jeu d'instructions 64 bits.)
bdver2
Processeurs basés sur le cœur de la famille AMD 15h avec prise en charge du jeu d'instructions x86-64. (Cette
surensembles BMI, TBM, F16C, FMA, FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE,
SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM et jeu d'instructions 64 bits
rallonges.)
bdver3
Processeurs basés sur le cœur de la famille AMD 15h avec prise en charge du jeu d'instructions x86-64. (Cette
surensembles BMI, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, XOP, LWP, AES, PCL_MUL, CX16,
MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM et jeu d'instructions 64 bits
Extensions.
bdver4
Processeurs basés sur le cœur de la famille AMD 15h avec prise en charge du jeu d'instructions x86-64. (Cette
surensembles 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 et
Extensions de jeu d'instructions 64 bits.
btver1
Processeurs basés sur les cœurs 14h de la famille AMD avec prise en charge du jeu d'instructions x86-64. (Cette
surensembles MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM et jeu d'instructions 64 bits
rallonges.)
btver2
Processeurs basés sur les cœurs 16h de la famille AMD avec prise en charge du jeu d'instructions x86-64. Cette
comprend MOVBE, F16C, BMI, AVX, PCL_MUL, AES, SSE4.2, SSE4.1, CX16, ABM, SSE4A,
Extensions de jeu d'instructions SSSE3, SSE3, SSE2, SSE, MMX et 64 bits.
treuil-c6
CPU IDT WinChip C6, traité de la même manière que i486 avec un jeu d'instructions MMX supplémentaire
soutien.
treuil2
CPU IDT WinChip 2, traité de la même manière que i486 avec MMX et 3DNow supplémentaires !
prise en charge du jeu d'instructions.
c3 Processeur VIA C3 avec MMX et 3DNow ! prise en charge du jeu d'instructions. (Aucun horaire n'est
implémenté pour cette puce.)
c3-2
Processeur VIA C3-2 (Nehemiah/C5XL) avec prise en charge des jeux d'instructions MMX et SSE. (Non
la planification est implémentée pour cette puce.)
géode
Processeur embarqué AMD Geode avec MMX et 3DNow ! prise en charge du jeu d'instructions.
-mtune=type de processeur
Accordez à type de processeur tout ce qui est applicable sur le code généré, à l'exception de l'ABI
et l'ensemble des instructions disponibles. Lors de la sélection d'un type de processeur horaires
les choses de manière appropriée pour cette puce particulière, le compilateur ne génère aucun code
qui ne peut pas s'exécuter sur le type de machine par défaut à moins que vous n'utilisiez un -mars=type de processeur option.
Par exemple, si GCC est configuré pour i686-pc-linux-gnu alors -mtune=pentium4 génère
code qui est réglé pour Pentium 4 mais fonctionne toujours sur les machines i686.
Les choix pour type de processeur sont les mêmes que pour -Mars. En outre, -mtune supports 2
choix supplémentaires pour type de processeur:
générique
Produisez du code optimisé pour les processeurs IA32/AMD64/EM64T les plus courants. Si tu
connaître le CPU sur lequel votre code s'exécutera, alors vous devriez utiliser le correspondant
-mtune or -Mars option au lieu de -mtune=générique. Mais, si vous ne savez pas
exactement ce que les utilisateurs de CPU de votre application auront, alors vous devriez utiliser ceci
option.
À mesure que de nouveaux processeurs sont déployés sur le marché, le comportement de cette option
changera. Par conséquent, si vous effectuez une mise à niveau vers une version plus récente de GCC, la génération de code
contrôlé par cette option changera pour refléter les processeurs les plus
courant au moment de la sortie de cette version de GCC.
Il n'y a pas de -mars=générique option parce que -Mars indique le jeu d'instructions le
compilateur peut utiliser, et il n'y a pas de jeu d'instructions générique applicable à tous
processeurs. En revanche, -mtune indique le processeur (ou, dans ce cas,
ensemble de processeurs) dont le code est optimisé.
Intel
Produisez du code optimisé pour les processeurs Intel les plus récents, qui sont Haswell
et Silvermont pour cette version de GCC. Si vous connaissez le CPU sur lequel votre code
s'exécutera, alors vous devez utiliser le correspondant -mtune or -Mars option au lieu de
-mtune=informations. Mais, si vous voulez que votre application fonctionne mieux sur Haswell
et Silvermont, alors vous devriez utiliser cette option.
À mesure que de nouveaux processeurs Intel sont déployés sur le marché, le comportement de ce
l'option va changer. Par conséquent, si vous effectuez une mise à niveau vers une version plus récente de GCC, le code
génération contrôlée par cette option changera pour refléter la version Intel la plus récente
processeurs au moment de la sortie de cette version de GCC.
Il n'y a pas de -mars=intel option parce que -Mars indique le jeu d'instructions le
compilateur peut utiliser, et il n'y a pas de jeu d'instructions commun applicable à tous
processeurs. En revanche, -mtune indique le processeur (ou, dans ce cas,
ensemble de processeurs) dont le code est optimisé.
-mcpu=type de processeur
Un synonyme obsolète pour -mtune.
-mfpmath=unité
Générer une arithmétique à virgule flottante pour l'unité sélectionnée unité. Les choix pour unité sont:
387 Utiliser le coprocesseur à virgule flottante standard 387 présent sur la majorité des puces
et imité autrement. Le code compilé avec cette option s'exécute presque partout.
Les résultats temporaires sont calculés avec une précision de 80 bits au lieu de la précision
spécifié par le type, ce qui donne des résultats légèrement différents par rapport à la plupart des
autres puces. Voir -ffloat-store pour une description plus détaillée.
Il s'agit du choix par défaut pour les cibles x86-32.
sse Utilisez des instructions à virgule flottante scalaires présentes dans le jeu d'instructions SSE. Cette
le jeu d'instructions est pris en charge par les puces Pentium III et plus récentes, et dans la gamme AMD
par les puces Athlon-4, Athlon XP et Athlon MP. La version antérieure du SSE
jeu d'instructions ne prend en charge que l'arithmétique simple précision, ainsi le double et
l'arithmétique de précision étendue sont toujours effectuées en utilisant 387. Une version ultérieure, présente
uniquement dans les puces Pentium 4 et AMD x86-64, prend également en charge l'arithmétique double précision.
Pour le compilateur x86-32, vous devez utiliser -mars=type de processeur, -msse or -msse2 passe à
activez les extensions SSE et activez cette option. Pour le compilateur x86-64,
ces extensions sont activées par défaut.
Le code résultant devrait être considérablement plus rapide dans la majorité des cas et
éviter les problèmes d'instabilité numérique du code 387, mais peut casser certains existants
code qui s'attend à ce que les temporaires soient de 80 bits.
C'est le choix par défaut pour le compilateur x86-64.
387
ss+387
tous les deux
Essayez d'utiliser les deux jeux d'instructions à la fois. Cela double effectivement le
quantité de registres disponibles, et sur puces avec unités d'exécution séparées pour 387
et SSE les ressources d'exécution aussi. Utilisez cette option avec précaution, car elle est toujours
expérimental, car l'allocateur de registre GCC ne modélise pas séparément
unités fonctionnelles bien, ce qui entraîne des performances instables.
-masm=dialecte
Instructions d'assemblage de sortie en utilisant sélectionné dialecte. Affecte également le dialecte
utilisé pour "asm" de base et "asm" étendu. Les choix pris en charge (dans l'ordre des dialectes) sont à
or Intel. La valeur par défaut est à. Darwin ne prend pas en charge Intel.
-Mieee-FP
-mno-ieee-fp
Contrôlez si le compilateur utilise ou non des comparaisons à virgule flottante IEEE. Ces
gérer correctement le cas où le résultat d'une comparaison n'est pas ordonné.
-msoft-float
Générer une sortie contenant des appels de bibliothèque pour virgule flottante.
Mise en garde: les bibliothèques requises ne font pas partie de GCC. Normalement, les installations du
le compilateur C habituel de la machine sont utilisés, mais cela ne peut pas être fait directement en cross-
compilation. Vous devez prendre vos propres dispositions pour fournir une bibliothèque appropriée
fonctions de compilation croisée.
Sur les machines où une fonction renvoie des résultats à virgule flottante dans le registre 80387
pile, certains opcodes à virgule flottante peuvent être émis même si -msoft-float est utilisé.
-mno-fp-ret-en-387
N'utilisez pas les registres FPU pour les valeurs de retour des fonctions.
La convention d'appel habituelle a des fonctions de retour des valeurs de types "float" et "double"
dans un registre FPU, même s'il n'y a pas de FPU. L'idée est que le système d'exploitation
devrait émuler un FPU.
L'option -mno-fp-ret-en-387 provoque le retour de ces valeurs dans le processeur ordinaire
s'inscrit à la place.
-mno-fancy-maths-387
Certains émulateurs 387 ne prennent pas en charge les instructions "sin", "cos" et "sqrt" pour le
387. Spécifiez cette option pour éviter de générer ces instructions. Cette option est la
par défaut sur OpenBSD et NetBSD. Cette option est annulée lorsque -Mars indique que
la CPU cible a toujours une FPU et donc l'instruction n'a pas besoin d'émulation.
Ces instructions ne sont générées que si vous utilisez également le
-funsafe-math-optimisations interrupteur.
-malin-double
-mno-aligner-double
Contrôler si GCC aligne les variables "double", "long double" et "long long" sur un
limite de deux mots ou limite d'un mot. Aligner des variables "doubles" sur un mot de deux
limite produit du code qui s'exécute un peu plus rapidement sur un Pentium au détriment de plus
mémoire.
Sur x86-64, -malin-double est activé par défaut.
Mise en garde: si vous utilisez le -malin-double switch, structures contenant les types ci-dessus
sont alignés différemment des spécifications d'interface binaire d'application publiées
pour le x86-32 et ne sont pas compatibles binairement avec les structures en code compilé sans
cet interrupteur.
-m96bit-long-double
-m128bit-long-double
Ces commutateurs contrôlent la taille du type "long double". Le binaire d'application x86-32
l'interface spécifie que la taille est de 96 bits, donc -m96bit-long-double est la valeur par défaut dans
mode 32 bits.
Les architectures modernes (Pentium et plus récentes) préfèrent que le "double long" soit aligné sur un 8-
ou limite de 16 octets. Dans les tableaux ou les structures conformes à l'ABI, ce n'est pas
possible. Donc en précisant -m128bit-long-double aligne "long double" sur 16 octets
limite en remplissant le « double long » avec un zéro supplémentaire de 32 bits.
Dans le compilateur x86-64, -m128bit-long-double est le choix par défaut comme son ABI
spécifie que "long double" est aligné sur la limite de 16 octets.
Notez qu'aucune de ces options ne permet une précision supplémentaire par rapport à la norme x87
de 80 bits pour un "double long".
Mise en garde: si vous remplacez la valeur par défaut de votre ABI cible, cela change la taille
de structures et de tableaux contenant des variables "long double", ainsi que de modifier le
convention d'appel de fonction pour les fonctions prenant "long double". Par conséquent, ils ne sont pas
compatible binaire avec le code compilé sans ce commutateur.
-mlong-double-64
-mlong-double-80
-mlong-double-128
Ces commutateurs contrôlent la taille du type "long double". Une taille de 64 bits rend le
type "long double" équivalent au type "double". C'est la valeur par défaut pour 32 bits
Bibliothèque Bionic C. Une taille de 128 bits rend le type " long double " équivalent au
Type "__float128". Il s'agit de la valeur par défaut pour la bibliothèque Bionic C 64 bits.
Mise en garde: si vous remplacez la valeur par défaut de votre ABI cible, cela change la taille
de structures et de tableaux contenant des variables "long double", ainsi que de modifier le
convention d'appel de fonction pour les fonctions prenant "long double". Par conséquent, ils ne sont pas
compatible binaire avec le code compilé sans ce commutateur.
-données malignes=type
Contrôlez la façon dont GCC aligne les variables. Valeurs prises en charge pour type compat utilisations accrues
la valeur d'alignement compatible utilise GCC 4.8 et versions antérieures, abi utilise la valeur d'alignement comme
spécifié par le psABI, et ligne de cache utilise une valeur d'alignement accrue pour correspondre à la
taille de la ligne de cache. compat est la valeur par défaut.
-mlarge-data-threshold=порог
Quand -mcmodel=moyen est spécifié, les objets de données plus grands que порог sont placés dans
la grande section de données. Cette valeur doit être la même pour tous les objets liés dans
le binaire, et la valeur par défaut est 65535.
-mrtd
Utilisez une convention d'appel de fonction différente, dans laquelle les fonctions qui prennent un
nombre d'arguments retournés avec le "ret num " instruction, qui fait apparaître leurs arguments
en rentrant. Cela permet d'économiser une instruction dans l'appelant puisqu'il n'est pas nécessaire de
pop les arguments là-bas.
Vous pouvez spécifier qu'une fonction individuelle est appelée avec cette séquence d'appel avec
l'attribut de fonction "stdcall". Vous pouvez également remplacer le -mrtd option en utilisant le
attribut de fonction "cdecl".
Mise en garde: cette convention d'appel est incompatible avec celle habituellement utilisée sous Unix,
vous ne pouvez donc pas l'utiliser si vous devez appeler des bibliothèques compilées avec le compilateur Unix.
De plus, vous devez fournir des prototypes de fonction pour toutes les fonctions qui prennent des variables
nombre d'arguments (y compris "printf"); sinon un code incorrect est généré pour
appels à ces fonctions.
De plus, un code gravement incorrect se produit si vous appelez une fonction avec trop de
arguments. (Normalement, les arguments supplémentaires sont ignorés sans danger.)
-mregparm=num
Contrôlez le nombre de registres utilisés pour transmettre des arguments entiers. Par défaut, non
les registres sont utilisés pour passer des arguments, et au plus 3 registres peuvent être utilisés. Vous pouvez
contrôler ce comportement pour une fonction spécifique en utilisant l'attribut function
"regparm".
Mise en garde: si vous utilisez ce commutateur, et num est différent de zéro, alors vous devez construire tous les modules
avec la même valeur, y compris toutes les bibliothèques. Cela inclut les bibliothèques système et
modules de démarrage.
-msseregparm
Utilisez les conventions de passage de registre SSE pour les arguments flottants et doubles et les valeurs de retour.
Vous pouvez contrôler ce comportement pour une fonction spécifique en utilisant l'attribut function
"seregparm".
Mise en garde: si vous utilisez ce commutateur, vous devez créer tous les modules avec la même valeur,
y compris toutes les bibliothèques. Cela inclut les bibliothèques système et les modules de démarrage.
-mvect8-ret-in-mem
Renvoie des vecteurs de 8 octets en mémoire au lieu des registres MMX. C'est la valeur par défaut sur
Solaris@tie{}8 et 9 et VxWorks pour correspondre à l'ABI des compilateurs Sun Studio jusqu'à
version 12. Les versions ultérieures du compilateur (à partir de Studio 12 Update@tie{}1) suivent
l'ABI utilisée par d'autres cibles x86, qui est la valeur par défaut sur Solaris@tie{}10 et versions ultérieures.
Seulement utilisez cette option si vous devez rester compatible avec le code existant produit par
ces versions précédentes du compilateur ou les anciennes versions de GCC.
-mpc32
-mpc64
-mpc80
Définissez la précision à virgule flottante 80387 sur 32, 64 ou 80 bits. Lorsque -mpc32 est spécifié,
les significandes des résultats des opérations à virgule flottante sont arrondies à 24 bits
(simple précision) ; -mpc64 arrondit les significands des résultats de la virgule flottante
opérations à 53 bits (double précision) et -mpc80 arrondit les significandes des résultats
d'opérations en virgule flottante à 64 bits (double précision étendue), qui est le
défaut. Lorsque cette option est utilisée, les opérations à virgule flottante avec des précisions plus élevées sont
n'est pas disponible pour le programmeur sans définir explicitement le mot de contrôle FPU.
La définition de l'arrondi des opérations à virgule flottante à moins de 80 bits par défaut peut
accélérer certains programmes de 2 % ou plus. Notez que certaines bibliothèques mathématiques supposent que
les opérations à virgule flottante de précision étendue (80 bits) sont activées par défaut ; routines
dans de telles bibliothèques pourrait subir une perte significative de précision, généralement à cause de
appelé « annulation catastrophique », lorsque cette option est utilisée pour définir la précision sur
moins que la précision étendue.
-mstackrealign
Réalignez la pile à l'entrée. Sur le x86, le -mstackrealign l'option génère un
prologue et épilogue alternatifs qui réalignent la pile d'exécution si nécessaire. Cette
prend en charge le mélange de codes hérités qui conservent l'alignement de la pile de 4 octets avec des codes modernes qui
conserver l'alignement de la pile de 16 octets pour la compatibilité SSE. Voir aussi l'attribut
"force_align_arg_pointer", applicable aux fonctions individuelles.
-mpreferred-stack-limite=num
Tenter de garder la limite de la pile alignée sur un 2 élevé à num limite d'octet. Si
-mlimite-de-pile préférée n'est pas spécifié, la valeur par défaut est 4 (16 octets ou 128 bits).
Mise en garde: Lors de la génération de code pour l'architecture x86-64 avec des extensions SSE
désactivée, -mpreferred-stack-limite=3 peut être utilisé pour garder la limite de la pile alignée
à la limite de 8 octets. Étant donné que l'ABI x86-64 nécessite un alignement de pile de 16 octets, il s'agit de l'ABI
incompatible et destiné à être utilisé dans un environnement contrôlé où l'espace de pile est
limite importante. Cette option conduit à un code erroné lorsque les fonctions compilées avec 16
l'alignement de la pile d'octets (comme les fonctions d'une bibliothèque standard) est appelé avec
pile mal alignée. Dans ce cas, les instructions SSE peuvent conduire à un accès mémoire désaligné
pièges. De plus, les arguments variables sont gérés de manière incorrecte pour les 16 octets alignés
objets (y compris x87 long double et __int128), conduisant à des résultats erronés. Vous devez
construire tous les modules avec -mpreferred-stack-limite=3, y compris les bibliothèques. Cette
inclut les bibliothèques système et les modules de démarrage.
-mincoming-stack-limite=num
Supposons que la pile entrante est alignée sur un 2 élevé à num limite d'octet. Si
-limite de pile mincoming n'est pas spécifié, celui spécifié par
-mlimite-de-pile préférée est utilisé.
Sur les Pentium et Pentium Pro, les valeurs "double" et "long double" doivent être alignées sur un
Limite de 8 octets (voir -malin-double) ou subir des performances d'exécution importantes
pénalités. Sur le Pentium III, le type de données Streaming SIMD Extension (SSE) "__m128" peut
ne fonctionnera pas correctement s'il n'est pas aligné sur 16 octets.
Pour assurer un alignement correct de ces valeurs sur la pile, la limite de la pile doit être aussi
aligné comme celui requis par toute valeur stockée sur la pile. De plus, chaque fonction
doit être généré de telle sorte qu'il garde la pile alignée. Appelant ainsi une fonction
compilé avec une limite de pile préférée supérieure à partir d'une fonction compilée avec une limite inférieure
la limite de pile préférée désaligne très probablement la pile. Il est recommandé de
les bibliothèques qui utilisent des rappels utilisent toujours le paramètre par défaut.
Cet alignement supplémentaire consomme de l'espace de pile supplémentaire et augmente généralement le code
Taille. Code sensible à l'utilisation de l'espace de pile, comme les systèmes embarqués et
noyaux du système d'exploitation, peut vouloir réduire l'alignement préféré à
-mpreferred-stack-limite=2.
-mmmx
-msse
-msse2
-msse3
-mssse3
-msse4
-msse4a
-msse4.1
-msse4.2
-mavx
-mavx2
-mavx512f
-mavx512pf
-mavx512er
-mavx512cd
-msha
-maes
-mpclmul
-mclfushopt
-mfsgsbase
-mrdrnd
-mf16c
-mfma
-mfma4
-mno-fma4
-mprefetchwt1
-mxop
-mlwp
-m3dnow
-mpopcnt
-mabm
-mbmi
-mbmi2
-mlzcnt
-mfxsr
-mxsave
-mxsaveopt
-mxsavec
-mxsaves
-mrtm
-vtt
-mmpx
-mmattendrex
Ces commutateurs permettent l'utilisation d'instructions dans le 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 ou 3DNow ! ensembles d'instructions étendus. Chacun a un correspondant -mnon-
option pour désactiver l'utilisation de ces instructions.
Ces extensions sont également disponibles en tant que fonctions intégrées : voir x86 Encastré Les fonctions,
pour plus de détails sur les fonctions activées et désactivées par ces commutateurs.
Pour générer automatiquement des instructions SSE/SSE2 à partir de code à virgule flottante (par opposition à
à 387 instructions), voir -mfpmath=sse.
GCC abaisse les instructions SSEx lorsque -mavx est utilisé. Au lieu de cela, il génère de nouveaux AVX
instructions ou l'équivalence AVX pour toutes les instructions SSEx si nécessaire.
Ces options permettent à GCC d'utiliser ces instructions étendues dans le code généré, même
sans -mfpmath=sse. Les applications qui effectuent la détection du processeur au moment de l'exécution doivent compiler
des fichiers séparés pour chaque architecture prise en charge, en utilisant les indicateurs appropriés. Dans
en particulier, le fichier contenant le code de détection du CPU doit être compilé sans
ces options.
-mdump-tune-fonctionnalités
Cette option demande à GCC de vider les noms des fonctionnalités de réglage des performances x86 et
paramètres par défaut. Les noms peuvent être utilisés dans -mtune-ctrl=liste des fonctionnalités.
-mtune-ctrl=liste des fonctionnalités
Cette option est utilisée pour effectuer un contrôle fin des fonctionnalités de génération de code x86.
liste des fonctionnalités est une liste séparée par des virgules de caractéristique noms. Voir également
-mdump-tune-fonctionnalités. Lorsqu'il est spécifié, le caractéristique est allumé s'il n'est pas précédé
avec ^, sinon, il est désactivé. -mtune-ctrl=liste des fonctionnalités est destiné à être utilisé
par les développeurs de GCC. Son utilisation peut conduire à des chemins de code non couverts par les tests et peut
entraîner des erreurs de compilation ou des erreurs d'exécution.
-mno-par défaut
Cette option indique à GCC de désactiver toutes les fonctionnalités réglables. Voir également
-mtune-ctrl=liste des fonctionnalités et -mdump-tune-fonctionnalités.
-mcld
Cette option demande à GCC d'émettre une instruction "cld" dans le prologue des fonctions
qui utilisent des instructions de chaîne. Les instructions de chaîne dépendent du drapeau DF à sélectionner
entre le mode auto-incrémentation ou auto-décrémentation. Alors que l'ABI spécifie le drapeau DF pour
être effacé à l'entrée de la fonction, certains systèmes d'exploitation enfreignent cette spécification en ne
effacer l'indicateur DF dans leurs répartiteurs d'exceptions. Le gestionnaire d'exceptions peut être
invoqué avec le drapeau DF défini, ce qui conduit à un mode de mauvaise direction lorsque la chaîne
les instructions sont utilisées. Cette option peut être activée par défaut sur les cibles x32 86 bits en
configuration de GCC avec le --enable-cld option de configuration. Génération de "cld"
les instructions peuvent être supprimées avec le -mno-cld option du compilateur dans ce cas.
-mvzeropper
Cette option demande à GCC d'émettre une instruction "vzeroupper" avant un transfert de
contrôler le flux hors de la fonction pour minimiser également la pénalité de transition AVX vers SSE
comme supprimer les éléments intrinsèques « zéro supérieurs » inutiles.
-mprefer-avx128
Cette option indique à GCC d'utiliser des instructions AVX 128 bits au lieu d'AVX 256 bits
instructions dans l'auto-vectoriseur.
-mcx16
Cette option permet à GCC de générer des instructions "CMPXCHG16B". "CMPXCHG16B" permet
pour les opérations atomiques sur des types de données 128 bits à double quadword (ou oword). C'est
utile pour les compteurs haute résolution pouvant être mis à jour par plusieurs processeurs (ou
noyaux). Cette instruction est générée dans le cadre des fonctions intégrées atomiques : voir
__sync Intégrés or __atomique Intégrés pour en savoir plus.
-msahf
Cette option permet de générer des instructions "SAHF" en code 64 bits. Intel au début
Processeurs Pentium 4 avec support Intel 64, avant l'introduction de l'étape Pentium 4 G1
en décembre 2005, il manquait les instructions « LAHF » et « SAHF » qui sont appuyées par
AMD64. Il s'agit respectivement d'instructions de chargement et de stockage pour certains indicateurs d'état.
En mode 64 bits, l'instruction "SAHF" est utilisée pour optimiser "fmod", "drem" et
fonctions intégrées « restes » ; voir Autre Intégrés pour en savoir plus.
-mmovbe
Cette option permet d'utiliser l'instruction "movbe" pour implémenter "__builtin_bswap32"
et "__builtin_bswap64".
-mcrc32
Cette option active les fonctions intégrées "__builtin_ia32_crc32qi",
"__builtin_ia32_crc32hi", "__builtin_ia32_crc32si" et "__builtin_ia32_crc32di" pour
générer l'instruction machine "crc32".
-mrecip
Cette option permet d'utiliser les instructions "RCPSS" et "RSQRTSS" (et leur vectorisation
variantes « RCPPS » et « RSQRTPS ») avec une étape supplémentaire de Newton-Raphson pour augmenter
précision au lieu de "DIVSS" et "SQRTSS" (et leurs variantes vectorisées) pour
arguments à virgule flottante de précision. Ces instructions sont générées uniquement lorsque
-funsafe-math-optimisations est activé avec -fini-mathématiques-seulement et
-fno-piégeage-maths. Notez que bien que le débit de la séquence soit supérieur au
débit de l'instruction non réciproque, la précision de la séquence peut être
diminué jusqu'à 2 ulp (c'est-à-dire que l'inverse de 1.0 est égal à 0.99999994).
Notez que GCC implémente "1.0f/sqrtf(X)" en termes de "RSQRTSS" (ou "RSQRTPS") déjà
avec -ffast-mathématiques (ou la combinaison d'options ci-dessus), et n'a pas besoin -mrecip.
Notez également que GCC émet la séquence ci-dessus avec une étape supplémentaire de Newton-Raphson pour
division à flotteur unique vectorisée et "sqrtf() vectoriséX)" déjà avec -ffast-mathématiques
(ou la combinaison d'options ci-dessus), et n'a pas besoin -mrecip.
-mrecip=opter
Cette option contrôle quelles instructions d'estimation réciproque peuvent être utilisées. opter est une
liste d'options séparées par des virgules, qui peut être précédée d'un ! pour inverser l'option :
tous Activez toutes les instructions d'estimation.
défaut
Activez les instructions par défaut, équivalentes à -mrecip.
aucun
Désactiver toutes les instructions d'estimation, équivalent à -mno-recette.
div Activer l'approximation pour la division scalaire.
vec-div
Activer l'approximation pour la division vectorisée.
sqrt
Activer l'approximation pour la racine carrée scalaire.
VEC-SQRT
Activer l'approximation pour la racine carrée vectorisée.
Ainsi, par exemple, -mrecip=tout,!sqrt permet toutes les approximations réciproques,
sauf pour la racine carrée.
-mveclibabi=type
Spécifie le type ABI à utiliser pour vectoriser les intrinsèques à l'aide d'une bibliothèque externe.
Valeurs prises en charge pour type svml pour la bibliothèque de mathématiques vectorielles courtes Intel et cml
pour la bibliothèque de base mathématique AMD. Pour utiliser cette option, les deux -ftree-vectoriser et
-funsafe-math-optimisations doivent être activés, et un SVML ou ACML ABI compatible
la bibliothèque doit être spécifiée au moment de la liaison.
GCC émet actuellement des appels à "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" et "vmlsAcos4" pour le type de fonction correspondant lorsque -mveclibabi=svml is
utilisé, et "__vrd2_sin", "__vrd2_cos", "__vrd2_exp", "__vrd2_log", "__vrd2_log2",
"__vrd2_log10", "__vrs4_sinf", "__vrs4_cosf", "__vrs4_expf", "__vrs4_logf",
"__vrs4_log2f", "__vrs4_log10f" et "__vrs4_powf" pour le type de fonction correspondant
quand -mveclibabi=acml est utilisé.
-mabi=prénom
Générer du code pour la convention d'appel spécifiée. Les valeurs admissibles sont système pour
l'ABI utilisé sur GNU/Linux et d'autres systèmes, et ms pour l'ABI de Microsoft. Les
la valeur par défaut consiste à utiliser l'ABI Microsoft lors du ciblage de Microsoft Windows et de l'ABI SysV
sur tous les autres systèmes. Vous pouvez contrôler ce comportement pour des fonctions spécifiques en utilisant
les attributs de fonction "ms_abi" et "sysv_abi".
-mtls-dialecte=type
Générer du code pour accéder au stockage local des threads à l'aide du gnou or gnu2 conventions. gnou
est la valeur par défaut conservatrice ; gnu2 est plus efficace, mais il peut ajouter la compilation et l'exécution
des exigences de temps qui ne peuvent pas être satisfaites sur tous les systèmes.
-mpush-arguments
-mno-push-args
Utilisez les opérations PUSH pour stocker les paramètres sortants. Cette méthode est plus courte et généralement
aussi rapide que la méthode utilisant les opérations SUB/MOV et est activé par défaut. Dans certaines
les cas de désactivation peuvent améliorer les performances en raison d'une planification améliorée et d'une réduction
dépendances.
-maccumulate-arguments-sortants
Si activé, la quantité maximale d'espace requis pour les arguments sortants est calculée dans
la fonction prologue. Ceci est plus rapide sur la plupart des processeurs modernes en raison de la réduction
dépendances, planification améliorée et utilisation réduite de la pile lorsque la pile préférée
limite n'est pas égale à 2. L'inconvénient est une augmentation notable de la taille du code. Cette
interrupteur implique -mno-push-args.
-mthreads
Prise en charge de la gestion des exceptions thread-safe sur MinGW. Programmes qui reposent sur thread-safe
la gestion des exceptions doit compiler et lier tout le code avec le -mthreads option. Lorsque
compilation, -mthreads définit -D_MT; lors de la liaison, il se lie dans un assistant de fil spécial
bibliothèque -lmingwthrd qui nettoie les données de gestion des exceptions par thread.
-mno-align-stringops
N'alignez pas la destination des opérations de chaîne en ligne. Ce commutateur réduit le code
taille et améliore les performances au cas où la destination est déjà alignée, mais GCC
ne le sait pas.
-minline-tous les stringops
Par défaut, les opérations de chaîne inlines GCC uniquement lorsque la destination est connue pour être
aligné sur au moins une limite de 4 octets. Cela permet plus d'inlining et augmente le code
taille, mais peut améliorer les performances du code qui dépend de la rapidité "memcpy", "strlen" et
"memset" pour les courtes longueurs.
-minline-stringops-dynamiquement
Pour les opérations de chaîne de taille inconnue, utilisez des vérifications à l'exécution avec du code en ligne pour les petits
blocs et un appel à la bibliothèque pour les gros blocs.
-mstringop-stratégie=alg
Remplacer l'heuristique de décision interne pour l'algorithme particulier à utiliser pour
opérations de chaîne d'inline. Les valeurs autorisées pour alg sont:
rep_octet
rep_4octet
rep_8octet
Développez en utilisant le préfixe "rep" i386 de la taille spécifiée.
boucle_octet
boucle
boucle_déroulée
Développez dans une boucle en ligne.
appel lib
Utilisez toujours un appel de bibliothèque.
-mmemcpy-stratégie=stratégie
Remplacer l'heuristique de décision interne pour décider si "__builtin_memcpy" doit être
en ligne et quel algorithme en ligne utiliser lorsque la taille attendue de l'opération de copie
est connu. stratégie est une liste séparée par des virgules de alg:taille max:dest_aligner triplés. alg
est spécifié dans -mstringop-stratégie, taille max spécifie la taille maximale en octets avec laquelle
algorithme en ligne alg est autorisée. Pour le dernier triplet, le taille max doit être "-1". Les
taille max des triplets de la liste doivent être spécifiés dans l'ordre croissant. Les
taille d'octet minimale pour alg est 0 pour le premier triplet et "taille max + 1" des
gamme précédente.
-mmemset-stratégie=stratégie
L'option est similaire à -mmemcpy-stratégie= sauf que c'est pour contrôler
Extension "__builtin_memset".
-momit-leaf-frame-pointeur
Ne gardez pas le pointeur de cadre dans un registre pour les fonctions feuilles. Cela évite le
instructions pour enregistrer, configurer et restaurer les pointeurs de trame et crée un registre supplémentaire
disponible dans les fonctions feuilles. L'option -fomit-leaf-frame-pointeur supprime le cadre
pointeur pour les fonctions feuilles, ce qui peut rendre le débogage plus difficile.
-mtls-direct-seg-refs
-mno-tls-direct-seg-refs
Contrôle si les variables TLS sont accessibles avec des décalages du segment TLS
(%gs pour 32 bits, %fs pour 64 bits), ou si le pointeur de base de thread doit être
ajoutée. Que cela soit valide ou non dépend du système d'exploitation, et s'il
mappe le segment pour couvrir toute la zone TLS.
Pour les systèmes qui utilisent la bibliothèque GNU C, la valeur par défaut est activée.
-msse2avx
-mno-sse2avx
Spécifiez que l'assembleur doit coder les instructions SSE avec le préfixe VEX. L'option
-mavx l'active par défaut.
-mfentry
-mno-fentry
Si le profilage est actif (-pg), placez l'appel de compteur de profilage avant le prologue.
Remarque : sur les architectures x86, l'attribut "ms_hook_prologue" n'est pas possible au
moment pour -mfentry et -pg.
-mrecord-mcount
-mno-enregistrement-mcount
Si le profilage est actif (-pg), générer une section __mcount_loc qui contient des pointeurs
à chaque appel de profilage. Ceci est utile pour patcher et supprimer automatiquement les appels.
-mnop-mcount
-mno-nop-mcount
Si le profilage est actif (-pg), génèrent les appels aux fonctions de profilage en tant que nops.
Ceci est utile lorsqu'ils doivent être corrigés plus tard de manière dynamique. C'est probablement seulement
utile avec -mrecord-mcount.
-mskip-rax-configuration
-mno-skip-rax-setup
Lors de la génération de code pour l'architecture x86-64 avec les extensions SSE désactivées,
-skip-rax-configuration peut être utilisé pour ignorer la configuration du registre RAX lorsqu'il n'y a pas de variable
arguments passés dans des registres vectoriels.
Mise en garde: Étant donné que le registre RAX est utilisé pour éviter d'enregistrer inutilement des registres vectoriels sur
pile lors du passage d'arguments variables, les impacts de cette option sont que les appelés peuvent
gaspiller de l'espace de pile, se comporter mal ou sauter à un endroit aléatoire. GCC 4.4 ou plus récent
n'avez pas ces problèmes, quelle que soit la valeur du registre RAX.
-m8bit-idiv
-mno-8bit-idiv
Sur certains processeurs, comme Intel Atom, la division d'entiers non signés 8 bits est beaucoup plus rapide que
Division d'entiers 32 bits/64 bits. Cette option génère un contrôle d'exécution. Si les deux
le dividende et le diviseur sont compris entre 0 et 255, la division entière non signée sur 8 bits est
utilisé à la place de la division entière 32 bits/64 bits.
-Mavx256-Split-Unaligned-charge
-mavx256-split-magasin-non-aligné
Chargement et stockage non alignés AVX divisés de 32 octets.
-mstack-protector-guard=garde
Générer le code de protection de la pile à l'aide de Canary à garde. Les emplacements pris en charge sont de défis
pour le canari mondial ou tls pour canary par thread dans le bloc TLS (valeur par défaut). Cette
l'option n'a d'effet que lorsque -fstack-protecteur or -fstack-protecteur-tout est spécifié.
Ces -m les commutateurs sont pris en charge en plus de ce qui précède sur les processeurs x86-64 en 64 bits
environnements.
-m32
-m64
-mx32
-m16
Générez du code pour un environnement 16 bits, 32 bits ou 64 bits. Les -m32 jeux d'options "int",
"long" et des types de pointeur sur 32 bits, et génère du code qui s'exécute sur n'importe quel système i386.
VOTRE -m64 l'option définit "int" sur 32 bits et "long" et les types de pointeur sur 64 bits, et
génère du code pour l'architecture x86-64. Pour Darwin, seul le -m64 option aussi
éteint le -fno-pic et -mdynamic-pas de photo options.
VOTRE -mx32 L'option définit "int", "long" et les types de pointeur sur 32 bits et génère du code
pour l'architecture x86-64.
VOTRE -m16 l'option est la même que -m32, sauf qu'il sort le ".code16gcc"
directive d'assembly au début de la sortie de l'assembly afin que le binaire puisse s'exécuter
en mode 16 bits.
-mno-zone-rouge
N'utilisez pas de "zone rouge" pour le code x86-64. La zone rouge est mandatée par le
ABI x86-64 ; c'est une zone de 128 octets au-delà de l'emplacement du pointeur de pile qui n'est pas
modifié par des gestionnaires de signal ou d'interruption et peut donc être utilisé pour des données temporaires
sans ajuster le pointeur de pile. Le drapeau -mno-zone-rouge désactive cette zone rouge.
-mcmodel=petit
Générer du code pour le modèle petit code : le programme et ses symboles doivent être liés dans
les 2 Go inférieurs de l'espace d'adressage. Les pointeurs sont de 64 bits. Les programmes peuvent être
liés statiquement ou dynamiquement. Il s'agit du modèle de code par défaut.
-mcmodel=noyau
Générez du code pour le modèle de code du noyau. Le noyau tourne dans les 2 Go négatifs du
espace d'adressage. Ce modèle doit être utilisé pour le code du noyau Linux.
-mcmodel=moyen
Générer du code pour le modèle moyen : le programme est lié dans les 2 Go inférieurs du
espace d'adressage. De petits symboles y sont également placés. Symboles avec des tailles supérieures à
-mlarge-seuil-de-données sont placés dans de grandes sections de données ou BSS et peuvent être localisés
au-dessus de 2 Go. Les programmes peuvent être liés de manière statique ou dynamique.
-mcmodel=grand
Générez du code pour le grand modèle. Ce modèle ne fait aucune hypothèse sur les adresses
et la taille des sections.
-maddress-mode=long
Générer du code pour le mode d'adresse longue. Ceci est uniquement pris en charge pour 64 bits et x32
environnements. C'est le mode d'adressage par défaut pour les environnements 64 bits.
-maddress-mode=court
Générer du code pour le mode d'adresse courte. Ceci est uniquement pris en charge pour 32 bits et x32
environnements. C'est le mode d'adressage par défaut pour les environnements 32 bits et x32.
x86 Windows Options
Ces options supplémentaires sont disponibles pour les cibles Microsoft Windows :
-mconsole
Cette option spécifie qu'une application console doit être générée, en indiquant
l'éditeur de liens pour définir le type de sous-système d'en-tête PE requis pour les applications de console.
Cette option est disponible pour les cibles Cygwin et MinGW et est activée par défaut sur
ces cibles.
-mdll
Cette option est disponible pour les cibles Cygwin et MinGW. Il spécifie qu'une DLL --- un
bibliothèque de liens dynamiques --- doit être généré, permettant la sélection du
objet de démarrage d'exécution et point d'entrée.
-mnop-fun-dllimport
Cette option est disponible pour les cibles Cygwin et MinGW. Il précise que le
L'attribut "dllimport" doit être ignoré.
-mthread
Cette option est disponible pour les cibles MinGW. Il spécifie que le thread spécifique à MinGW
le support doit être utilisé.
-municode
Cette option est disponible pour les cibles MinGW-w64. Il provoque le préprocesseur "UNICODE"
macro à prédéfinir et choisit le code de démarrage d'exécution compatible Unicode.
-mwin32
Cette option est disponible pour les cibles Cygwin et MinGW. Il précise que le type
Les macros prédéfinies de Microsoft Windows doivent être définies dans le préprocesseur, mais ne
influencer le choix de la bibliothèque d'exécution/du code de démarrage.
-mfenêtres
Cette option est disponible pour les cibles Cygwin et MinGW. Il précise qu'une interface graphique
l'application doit être générée en demandant à l'éditeur de liens de définir l'en-tête PE
type de sous-système de manière appropriée.
-fno-set-stack-exécutable
Cette option est disponible pour les cibles MinGW. Il spécifie que le drapeau exécutable pour
la pile utilisée par les fonctions imbriquées n'est pas définie. Ceci est nécessaire pour les binaires en cours d'exécution
en mode noyau de Microsoft Windows, comme là l'API User32, qui sert à définir
privilèges d'exécutable, n'est pas disponible.
-fwritable-relocalisé-rdata
Cette option est disponible pour les cibles MinGW et Cygwin. Il précise que délocalisé-
les données de la section en lecture seule sont placées dans la section .data. C'est un nécessaire pour les plus âgés
les runtimes ne prenant pas en charge la modification des sections .rdata pour la pseudo-relocalisation.
-mpe-aligné-commons
Cette option est disponible pour les cibles Cygwin et MinGW. Il précise que le GNU
extension au format de fichier PE qui permet l'alignement correct des variables COMMUNES
doit être utilisé lors de la génération de code. Il est activé par défaut si GCC détecte que le
l'assembleur cible trouvé lors de la configuration prend en charge la fonctionnalité.
Voir aussi sous x86 Options pour les options standards.
Xstormy16 Options
Ces options sont définies pour Xstormy16 :
-msim
Choisissez les fichiers de démarrage et le script de l'éditeur de liens adaptés au simulateur.
Xtensa Options
Ces options sont prises en charge pour les cibles Xtensa :
-mconst16
-mno-const16
Activer ou désactiver l'utilisation des instructions "CONST16" pour le chargement des valeurs constantes. Les
L'instruction "CONST16" n'est actuellement pas une option standard de Tensilica. Lorsque
activé, les instructions "CONST16" sont toujours utilisées à la place du "L32R" standard
instructions. L'utilisation de "CONST16" n'est activée par défaut que si le "L32R"
l'instruction n'est pas disponible.
-mfused-mad
-mno-fusionné-madd
Activer ou désactiver l'utilisation des instructions fusionnées de multiplication/addition et multiplication/soustraction dans le
option virgule flottante. Cela n'a aucun effet si l'option virgule flottante n'est pas également
activée. La désactivation des instructions fusionnées de multiplication/addition et de multiplication/soustraction force le
compilateur d'utiliser des instructions distinctes pour les opérations de multiplication et d'addition/soustraction.
Cela peut être souhaitable dans certains cas où des résultats strictement conformes à la norme IEEE 754 sont
requis : les instructions fusionnées d'addition/soustraction n'arrondissent pas l'intermédiaire
résultat, produisant ainsi des résultats avec plus bits de précision que spécifié par le
Norme IEEE. La désactivation des instructions d'addition/soustraction multipliées par fusion garantit également que
la sortie du programme n'est pas sensible à la capacité du compilateur à combiner multiplier et
ajouter/soustraire des opérations.
-msérialiser-volatile
-mno-sérialiser-volatile
Lorsque cette option est activée, GCC insère les instructions "MEMW" avant la mémoire "volatile"
références pour garantir la cohérence séquentielle. La valeur par défaut est -msérialiser-volatile.
Utilisez -mno-sérialiser-volatile pour omettre les instructions "MEMW".
-mforce-pas de photo
Pour les cibles, comme GNU/Linux, où tout le code Xtensa en mode utilisateur doit être positionné
code indépendant (PIC), cette option désactive le PIC pour la compilation du code du noyau.
-mtext-section-littéraux
-mno-texte-section-littéraux
Ces options contrôlent le traitement des pools littéraux. La valeur par défaut est
-mno-texte-section-littéraux, qui place les littéraux dans une section distincte de la sortie
déposer. Cela permet au pool littéral d'être placé dans une RAM/ROM de données, et cela permet également
l'éditeur de liens pour combiner des pools littéraux à partir de fichiers objets séparés pour supprimer les éléments redondants
littéraux et améliorer la taille du code. Avec -mtext-section-littéraux, les littéraux sont
intercalés dans la section de texte afin de les garder aussi près que possible de leur
les références. Cela peut être nécessaire pour les fichiers d'assemblage volumineux.
-mtarget-aligner
-mno-cible-aligner
Lorsque cette option est activée, GCC demande à l'assembleur d'aligner automatiquement
des instructions pour réduire les pénalités de branche au détriment d'une certaine densité de code. Les
l'assembleur tente d'élargir les instructions de densité pour aligner les cibles de branchement et le
instructions suivant les instructions d'appel. S'il n'y a pas assez de coffre précédent
instructions de densité pour aligner une cible, aucun élargissement n'est effectué. La valeur par défaut est
-mtarget-aligner. Ces options n'affectent pas le traitement de l'alignement automatique
des instructions comme "LOOP", que l'assembleur aligne toujours, soit en élargissant
instructions de densité ou en insérant des instructions NOP.
-mlongappels
-mno-longappels
Lorsque cette option est activée, GCC demande à l'assembleur de traduire les appels directs en
appels indirects à moins qu'il ne puisse déterminer que la cible d'un appel direct se trouve dans le
plage autorisée par l'instruction d'appel. Cette traduction se produit généralement pour les appels à
fonctions dans d'autres fichiers source. Plus précisément, l'assembleur traduit une
"CALL" dans un "L32R" suivi d'une instruction "CALLX". La valeur par défaut est
-mno-longappels. Cette option doit être utilisée dans les programmes où la cible de l'appel peut
être potentiellement hors de portée. Cette option est implémentée dans l'assembleur, pas dans le
compilateur, de sorte que le code assembleur généré par GCC affiche toujours l'appel direct
instructions --- regardez le code objet désassemblé pour voir les instructions réelles.
Notez que l'assembleur utilise un appel indirect pour chaque appel inter-fichiers, pas seulement
ceux qui sont vraiment hors de portée.
zSérie Options
Ceux-ci sont répertoriés sous
Options pour Code Generation Conventions
Ces options indépendantes de la machine contrôlent les conventions d'interface utilisées dans le code
génération.
La plupart d'entre eux ont à la fois des formes positives et négatives ; la forme négative de -ffou is
-fno-foo. Dans le tableau ci-dessous, une seule des formes est répertoriée --- celle qui n'est pas la
défaut. Vous pouvez découvrir l'autre forme en supprimant no- ou en l'ajoutant.
-fbounds-check
Pour les frontaux qui le prennent en charge, générez du code supplémentaire pour vérifier que les indices utilisés pour
les tableaux d'accès sont dans la plage déclarée. Ceci n'est actuellement pris en charge que par le
Frontaux Java et Fortran, où cette option est définie par défaut sur true et false
respectivement.
-fstack-réutilisation=niveau de réutilisation
Cette option contrôle la réutilisation de l'espace de pile pour les variables locales/auto déclarées par l'utilisateur et
temporaires générés par le compilateur. niveau_réutilisation peuvent être tous, var_nommées, ou aucun. tous
permet la réutilisation de la pile pour toutes les variables locales et temporaires, var_nommées permet le
réutiliser uniquement pour les variables locales définies par l'utilisateur avec des noms, et aucun désactive la réutilisation de la pile
complètement. La valeur par défaut est tous. L'option est nécessaire lorsque le programme s'étend
la durée de vie d'une variable locale étendue ou d'un compilateur généré temporairement au-delà de la
point final défini par la langue. Lorsqu'une durée de vie d'une variable se termine, et si le
variable vit en mémoire, le compilateur d'optimisation a la liberté de réutiliser sa pile
espace avec d'autres variables locales temporaires ou étendues dont la plage en direct ne
chevaucher avec elle. Le code hérité prolongeant la durée de vie locale est susceptible de rompre avec le
optimisation de la réutilisation de la pile.
Par exemple,
entier *p;
{
entier local1 ;
p = &local1;
local1 = 10 ;
....
}
{
entier local2 ;
local2 = 20 ;
}
if (*p == 10) // utilisation hors de portée de local1
{
}
Un autre exemple:
structure A
{
A(int k) : je(k), j(k) { }
int i;
entier j;
};
Un *ap;
void foo (const A& ar)
{
ap = &ar;
}
barre vide()
{
fou(A(dix)); // la durée de vie de l'objet temporaire se termine lorsque foo revient
{
A a(20);
....
}
ap->i+= 10; // ap fait référence à temp hors de portée dont l'espace
// est réutilisé avec a. Quelle est la valeur de ap->i ?
}
La durée de vie d'un compilateur généré temporaire est bien définie par le standard C++.
Lorsqu'une durée de vie d'un temporaire se termine, et si le temporaire vit dans la mémoire, le
le compilateur d'optimisation a la liberté de réutiliser son espace de pile avec d'autres temporaires ou
variables locales étendues dont la plage en direct ne la chevauche pas. Cependant certains des
le code hérité repose sur le comportement des anciens compilateurs dans lesquels la pile des temporaires
l'espace n'est pas réutilisé, la réutilisation agressive de la pile peut entraîner des erreurs d'exécution. Cette
L'option est utilisée pour contrôler l'optimisation de la réutilisation de la pile temporaire.
-ftrapv
Cette option génère des traps pour débordement signé sur addition, soustraction,
opérations de multiplication.
-fwrapv
Cette option demande au compilateur de supposer que le débordement arithmétique signé de
l'addition, la soustraction et la multiplication s'enroulent en utilisant le complément à deux
représentation. Ce drapeau active certaines optimisations et en désactive d'autres. Cette
L'option est activée par défaut pour le frontal Java, comme requis par le langage Java
spécification.
-fexceptions
Activer la gestion des exceptions. Génère le code supplémentaire nécessaire pour propager les exceptions. Pour
certaines cibles, cela implique que GCC génère des informations de déroulement de trame pour toutes les fonctions,
qui peut produire une surcharge de taille de données importante, bien que cela n'affecte pas
exécution. Si vous ne spécifiez pas cette option, GCC l'active par défaut pour les langues
comme C++ qui nécessitent normalement la gestion des exceptions, et le désactive pour des langages comme
C qui n'en ont normalement pas besoin. Cependant, vous devrez peut-être activer cette option lorsque
compiler du code C qui doit interagir correctement avec les gestionnaires d'exceptions écrits
en C++. Vous pouvez également désactiver cette option si vous compilez un ancien C++
programmes qui n'utilisent pas la gestion des exceptions.
-fnon-appel-exceptions
Générez du code qui permet aux instructions de trapping de lever des exceptions. Notez que ce
nécessite un support d'exécution spécifique à la plate-forme qui n'existe pas partout. De plus,
il permet seulement le piégeage instructions pour lever des exceptions, c'est-à-dire des références de mémoire ou
instructions à virgule flottante. Il ne permet pas de lever des exceptions d'arbitraire
gestionnaires de signaux tels que "SIGALRM".
-fdelete-mort-exceptions
Considérez que les instructions qui peuvent lever des exceptions mais ne contribuent pas autrement à
l'exécution du programme peut être optimisée. Cette option est activée par défaut
pour le frontal Ada, comme le permet la spécification du langage Ada. Optimisation
les passes qui provoquent la suppression des exceptions mortes sont activées indépendamment à différents
niveaux d'optimisation.
-tables-funwind
Similaire à -fexceptions, sauf qu'il ne génère que les données statiques nécessaires, mais
n'affecte en aucun cas le code généré. Vous n'avez normalement pas besoin de
activez cette option ; à la place, un processeur de langage qui a besoin de cette gestion lui permet
en votre nom.
-fasynchrone-unwind-tables
Générez une table de déroulement au format DWARF 2, si pris en charge par la machine cible. Le tableau est
exact à chaque frontière d'instruction, il peut donc être utilisé pour le déroulement de la pile à partir de
événements asynchrones (comme le débogueur ou le ramasse-miettes).
-fno-gnu-unique
Sur les systèmes avec un assembleur GNU récent et une bibliothèque C, le compilateur C++ utilise le
Liaison "STB_GNU_UNIQUE" pour s'assurer que les définitions des membres de données statiques du modèle
et les variables locales statiques dans les fonctions en ligne sont uniques même en présence de
"RTLD_LOCAL" ; cela est nécessaire pour éviter des problèmes avec une bibliothèque utilisée par deux
plugins "RTLD_LOCAL" selon une définition dans l'un d'eux et donc
en désaccord avec l'autre sur la liaison du symbole. Mais cela provoque
"dlclose" à ignorer pour les DSO concernés ; si votre programme repose sur la réinitialisation
d'un DSO via "dlclose" et "dlopen", vous pouvez utiliser -fno-gnu-unique.
-fpcc-struct-retour
Renvoie les valeurs "courtes" "struct" et "union" en mémoire comme des valeurs plus longues, plutôt que dans
registres. Cette convention est moins efficace, mais elle a l'avantage de permettre
intercallabilité entre les fichiers compilés par GCC et les fichiers compilés avec d'autres compilateurs,
en particulier le compilateur portable C (pcc).
La convention précise pour renvoyer les structures en mémoire dépend de la cible
macro de configuration.
Les structures et unions courtes sont celles dont la taille et l'alignement correspondent à ceux de certains
type entier.
Mise en garde: code compilé avec le -fpcc-struct-retour le commutateur n'est pas compatible binaire
avec du code compilé avec le -freg-struct-retour changer. Utilisez-le pour vous conformer à une non-
interface binaire d'application par défaut.
-freg-struct-retour
Renvoyez les valeurs « struct » et « union » dans les registres lorsque cela est possible. C'est plus efficace
pour les petites structures que -fpcc-struct-retour.
Si vous ne spécifiez ni -fpcc-struct-retour ni -freg-struct-retour, GCC est par défaut
quelle que soit la convention standard pour la cible. S'il n'y a pas de convention standard,
GCC est par défaut -fpcc-struct-retour, sauf sur les cibles où GCC est le principal
compilateur. Dans ces cas, nous pouvons choisir la norme, et nous avons choisi le plus efficace
enregistrer retour alternative.
Mise en garde: code compilé avec le -freg-struct-retour le commutateur n'est pas compatible binaire
avec du code compilé avec le -fpcc-struct-retour changer. Utilisez-le pour vous conformer à une non-
interface binaire d'application par défaut.
-fshort-énumérations
N'allouez à un type "enum" que le nombre d'octets dont il a besoin pour la plage déclarée de
valeurs possibles. Plus précisément, le type "enum" est équivalent au plus petit entier
type qui a assez de place.
Mise en garde: le -fshort-énumérations Le commutateur force GCC à générer du code qui n'est pas binaire
compatible avec le code généré sans ce commutateur. Utilisez-le pour vous conformer à une non-
interface binaire d'application par défaut.
-fcourt-double
Utilisez la même taille pour « double » que pour « flotteur ».
Mise en garde: le -fcourt-double Le commutateur force GCC à générer du code qui n'est pas binaire
compatible avec le code généré sans ce commutateur. Utilisez-le pour vous conformer à une non-
interface binaire d'application par défaut.
-fshort-wchar
Remplacez le type sous-jacent de "wchar_t" par "short unsigned int" au lieu du
par défaut pour la cible. Cette option est utile pour créer des programmes à exécuter sous
DU VIN.
Mise en garde: le -fshort-wchar Le commutateur force GCC à générer du code qui n'est pas binaire
compatible avec le code généré sans ce commutateur. Utilisez-le pour vous conformer à une non-
interface binaire d'application par défaut.
-fno-commun
En code C, contrôle le placement des variables globales non initialisées. Compilateurs Unix C
ont traditionnellement permis de multiples définitions de ces variables dans différentes
unités de compilation en plaçant les variables dans un bloc commun. C'est le comportement
spécifié par -fcommun, et est la valeur par défaut pour GCC sur la plupart des cibles. D'autre part,
ce comportement n'est pas requis par ISO C, et sur certaines cibles peut porter une vitesse ou un code
pénalité de taille sur les références variables. Les -fno-commun option spécifie que le
le compilateur doit placer des variables globales non initialisées dans la section de données de l'objet
plutôt que de les générer en tant que blocs communs. Cela a pour effet que si le
même variable est déclarée (sans "extern") dans deux compilations différentes, vous obtenez un
erreur de définition multiple lorsque vous les liez. Dans ce cas, vous devez compiler avec
-fcommun au lieu. Compilation avec -fno-commun est utile sur des cibles pour lesquelles il
offre de meilleures performances, ou si vous souhaitez vérifier que le programme fonctionnera sur
d'autres systèmes qui traitent toujours les déclarations de variables non initialisées de cette façon.
-fno-identifiant
Ignorez la directive "#ident".
-finhibit-taille-directive
Ne pas sortir une directive d'assembleur ".size", ou quoi que ce soit d'autre qui causerait des problèmes
si la fonction est divisée au milieu et que les deux moitiés sont placées à des endroits éloignés
à part dans la mémoire. Cette option est utilisée lors de la compilation crtstuff.c; tu ne devrais pas avoir besoin
de l'utiliser pour autre chose.
-fverbeux-asm
Mettez des informations de commentaire supplémentaires dans le code d'assemblage généré pour le rendre plus
lisible. Cette option n'est généralement utile qu'à ceux qui ont réellement besoin de lire le
code assembleur généré (peut-être lors du débogage du compilateur lui-même).
-fno-verbeux-asm, la valeur par défaut, entraîne l'omission des informations supplémentaires et est
utile lors de la comparaison de deux fichiers assembleur.
-frecord-gcc-commutateurs
Ce commutateur provoque l'enregistrement de la ligne de commande utilisée pour appeler le compilateur dans
le fichier objet en cours de création. Ce commutateur n'est implémenté que sur certains
cibles et le format exact de l'enregistrement est le format de fichier cible et binaire
dépendant, mais il prend généralement la forme d'une section contenant du texte ASCII. Cette
l'interrupteur est lié au -fverbeux-asm commutateur, mais ce commutateur n'enregistre que
informations dans le fichier de sortie de l'assembleur sous forme de commentaires, afin qu'elles n'atteignent jamais l'objet
déposer. Voir également -commutateurs-grecord-gcc pour une autre façon de stocker les options du compilateur dans
le fichier objet.
-fpic
Générer un code indépendant de la position (PIC) adapté à une utilisation dans une bibliothèque partagée, si
pris en charge pour la machine cible. Un tel code accède à toutes les adresses constantes via un
table de décalage global (GOT). Le chargeur dynamique résout les entrées GOT lorsque le
le programme démarre (le chargeur dynamique ne fait pas partie de GCC ; il fait partie du
système). Si la taille GOT de l'exécutable lié dépasse un maximum spécifique à la machine
size, vous obtenez un message d'erreur de l'éditeur de liens indiquant que -fpic ne marche pas; dans
ce cas, recompilez avec -fPIC au lieu. (Ces maximums sont de 8k sur le SPARC, 28k sur
AArch64 et 32k sur le m68k et RS/6000. Le x86 n'a pas une telle limite.)
Le code indépendant de la position nécessite un support spécial et ne fonctionne donc que sur
certaines machines. Pour le x86, GCC prend en charge PIC pour System V mais pas pour le Sun
386i. Le code généré pour l'IBM RS/6000 est toujours indépendant de la position.
Lorsque ce drapeau est défini, les macros "__pic__" et "__PIC__" sont définies à 1.
-fPIC
Si pris en charge pour la machine cible, émettre un code indépendant de la position, adapté à
liaison dynamique et évitant toute limite sur la taille de la table d'offset global. Cette
L'option fait la différence sur AArch64, m68k, PowerPC et SPARC.
Le code indépendant de la position nécessite un support spécial et ne fonctionne donc que sur
certaines machines.
Lorsque ce drapeau est défini, les macros "__pic__" et "__PIC__" sont définies à 2.
-fpie
-fPIE
Ces options sont similaires à -fpic et -fPIC, mais code indépendant de la position généré
ne peut être lié qu'à des exécutables. Ces options sont généralement utilisées lorsque -tarte GCC
L'option est utilisée lors de la liaison.
-fpie et -fPIE les deux définissent les macros "__pie__" et "__PIE__". Les macros ont le
valeur 1 pour -fpie et pour 2 -fPIE.
-fno-plt
N'utilisez pas PLT pour les appels de fonction externes dans un code indépendant de la position. Au lieu,
chargez l'adresse de l'appelé sur le site d'appel depuis GOT et branchez-y. Cela conduit à plus
code efficace en éliminant les stubs PLT et en exposant la charge GOT aux optimisations. Au
architectures telles que x32 86 bits où les stubs PLT attendent un pointeur GOT dans un
registre, cela donne plus de liberté d'allocation de registre au compilateur. Reliure paresseuse
nécessite PLT : avec -fno-plt tous les symboles externes sont résolus au moment du chargement.
Alternativement, l'attribut de fonction "noplt" peut être utilisé pour éviter PLT pour les appels à
des fonctions externes spécifiques en marquant ces fonctions avec cet attribut.
De plus, quelques cibles convertissent également les appels vers les fonctions marquées comme
ne pas utiliser le PLT pour utiliser le GOT à la place pour le code indépendant de la position.
-fno-jump-tables
N'utilisez pas de tables de saut pour les instructions switch même là où cela serait plus efficace
que d'autres stratégies de génération de code. Cette option est utile en conjonction avec
-fpic or -fPIC pour le code du bâtiment qui fait partie d'un éditeur de liens dynamique et ne peut pas
référence l'adresse d'une table de saut. Sur certaines cibles, les tables de saut ne nécessitent pas de
GOT et cette option n'est pas nécessaire.
-fixé-reg
Traiter le registre nommé reg comme registre fixe ; le code généré ne doit jamais faire référence à
(sauf peut-être en tant que pointeur de pile, pointeur de cadre ou dans un autre rôle fixe).
reg doit être le nom d'un registre. Les noms de registre acceptés sont spécifiques à la machine
et sont définis dans la macro "REGISTER_NAMES" du fichier de macro de description de la machine.
Ce drapeau n'a pas de forme négative, car il spécifie un choix à trois voies.
-fcall-utilisé-reg
Traiter le registre nommé reg comme un registre allouable écrasé par fonction
appels. Il peut être alloué pour des temporaires ou des variables qui ne vivent pas sur une
appel. Les fonctions compilées de cette manière ne sauvegardent pas et ne restaurent pas le registre reg.
C'est une erreur d'utiliser ce drapeau avec le pointeur de trame ou le pointeur de pile. L'utilisation de ce
indicateur pour les autres registres qui ont des rôles omniprésents fixes dans l'exécution de la machine
modèle produit des résultats désastreux.
Ce drapeau n'a pas de forme négative, car il spécifie un choix à trois voies.
-fcall-sauvé-reg
Traiter le registre nommé reg comme un registre allouable sauvegardé par les fonctions. C'est possible
alloué même pour les temporaires ou les variables qui vivent à travers un appel. Les fonctions
compilé de cette façon sauvegarder et restaurer le registre reg s'ils l'utilisent.
C'est une erreur d'utiliser ce drapeau avec le pointeur de trame ou le pointeur de pile. L'utilisation de ce
indicateur pour les autres registres qui ont des rôles omniprésents fixes dans l'exécution de la machine
modèle produit des résultats désastreux.
Un autre type de catastrophe résulte de l'utilisation de ce drapeau pour un registre dans lequel
les valeurs de fonction peuvent être retournées.
Ce drapeau n'a pas de forme négative, car il spécifie un choix à trois voies.
-fpack-struct[=n]
Sans valeur spécifiée, regroupez tous les membres de la structure sans trous. Lorsqu'un
valeur est spécifiée (qui doit être une petite puissance de deux), les membres de la structure du pack
en fonction de cette valeur, représentant l'alignement maximal (c'est-à-dire les objets avec
les exigences d'alignement par défaut supérieures à celles-ci sont sorties potentiellement non alignées à
le prochain emplacement de montage.
Mise en garde: le -fpack-struct Le commutateur force GCC à générer du code qui n'est pas binaire
compatible avec le code généré sans ce commutateur. De plus, cela rend le code
sous-optimal. Utilisez-le pour vous conformer à une interface binaire d'application autre que celle par défaut.
-finstrument-fonctions
Générer des appels d'instrumentation pour l'entrée et la sortie des fonctions. Juste après la fonction
entrée et juste avant la sortie de la fonction, les fonctions de profilage suivantes sont appelées avec
l'adresse de la fonction courante et son site d'appel. (Sur certaines plateformes,
"__builtin_return_address" ne fonctionne pas au-delà de la fonction actuelle, donc le site d'appel
sinon, les informations peuvent ne pas être disponibles pour les fonctions de profilage.)
void __cyg_profile_func_enter (void *this_fn,
vide *call_site);
void __cyg_profile_func_exit (void *this_fn,
vide *call_site);
Le premier argument est l'adresse du début de la fonction courante, qui peut être
recherché exactement dans la table des symboles.
Cette instrumentation est également réalisée pour des fonctions étendues en ligne dans d'autres fonctions.
Les appels de profilage indiquent où, conceptuellement, la fonction en ligne est entrée et
sorti. Cela signifie que des versions adressables de ces fonctions doivent être disponibles. Si
toutes vos utilisations d'une fonction sont étendues en ligne, cela peut signifier une extension supplémentaire
de la taille du code. Si vous utilisez "extern inline" dans votre code C, une version adressable de
ces fonctions doivent être fournies. (C'est normalement le cas de toute façon, mais si vous obtenez
chanceux et l'optimiseur étend toujours les fonctions en ligne, vous avez peut-être obtenu
loin sans fournir de copies statiques.)
Une fonction peut recevoir l'attribut "no_instrument_function", auquel cas cette
l'instrumentation n'est pas faite. Cela peut être utilisé, par exemple, pour le profilage
les fonctions énumérées ci-dessus, les routines d'interruption de haute priorité et toutes les fonctions à partir desquelles
les fonctions de profilage ne peuvent pas être appelées en toute sécurité (peut-être des gestionnaires de signaux, si le
les routines de profilage génèrent une sortie ou allouent de la mémoire).
-finstrument-functions-exclude-file-list=filet,filet...
Définir la liste des fonctions exclues de l'instrumentation (voir la description
of -finstrument-fonctions). Si le fichier qui contient une définition de fonction correspond
avec l'un des filet, alors cette fonction n'est pas instrumentée. Le match se fait le
sous-chaînes : si le filet paramètre est une sous-chaîne du nom de fichier, il est considéré comme
être un match.
Par exemple :
-finstrument-functions-exclude-file-list=/bits/stl,include/sys
exclut toute fonction en ligne définie dans les fichiers dont les chemins contiennent /bits/stl or
inclure/sys.
Si, pour une raison quelconque, vous souhaitez inclure une lettre , dans l'un des sym, écrire ,. Par exemple,
-finstrument-functions-exclude-file-list=',,tmp' (notez la guillemet simple entourant
l'option).
-finstrument-functions-exclude-function-list=sym,sym...
Ceci est similaire à -finstrument-fonctions-exclure-liste-fichiers, mais cette option définit le
liste des noms de fonctions à exclure de l'instrumentation. Le nom de la fonction à
correspond à son nom visible par l'utilisateur, tel que "vector bla (vecteur constant &)", ne pas
le nom mutilé interne (par exemple, "_Z4blahRSt6vectorIiSaiiEE"). Le match se fait le
sous-chaînes : si le sym paramètre est une sous-chaîne du nom de la fonction, il est considéré
être un match. Pour les identifiants étendus C99 et C++, le nom de la fonction doit être donné
en UTF-8, sans utiliser de noms de caractères universels.
-fstack-vérifier
Générez du code pour vérifier que vous ne dépassez pas les limites de la pile. Tu
devrait spécifier ce drapeau si vous exécutez dans un environnement avec plusieurs threads,
mais vous n'avez que rarement besoin de le spécifier dans un environnement monothread puisque stack
le débordement est automatiquement détecté sur presque tous les systèmes s'il n'y a qu'une seule pile.
Notez que ce commutateur ne provoque pas réellement la vérification ; le fonctionnement
système ou le language runtime doit le faire. Le commutateur provoque la génération de code pour
s'assurer qu'ils voient la pile s'allonger.
Vous pouvez également spécifier un paramètre de chaîne : aucune signifie pas de vérification, générique veux dire
forcer l'utilisation de la vérification à l'ancienne, groupe de neurones signifie utiliser la meilleure méthode de vérification et
équivaut à nu -fstack-vérifier.
La vérification à l'ancienne est un mécanisme générique qui ne nécessite aucune prise en charge de cible spécifique dans
le compilateur mais présente les inconvénients suivants :
1. Stratégie d'allocation modifiée pour les objets volumineux : ils sont toujours alloués
dynamiquement si leur taille dépasse un seuil fixé.
2. Limite fixe sur la taille du cadre statique de fonctions : lorsqu'il est surmonté d'un
fonction particulière, la vérification de la pile n'est pas fiable et un avertissement est émis par le
compilateur.
3. Inefficacité : à cause à la fois de la stratégie d'allocation modifiée et du
mise en œuvre, les performances du code sont entravées.
Notez que la vérification de la pile à l'ancienne est également la méthode de secours pour groupe de neurones sinon
la prise en charge des cibles a été ajoutée dans le compilateur.
-fstack-limit-register=reg
-fstack-limite-symbole=sym
-fno-stack-limite
Générer du code pour s'assurer que la pile ne dépasse pas une certaine valeur, soit
la valeur d'un registre ou l'adresse d'un symbole. Si une plus grande pile est requise, un
le signal est élevé au moment de l'exécution. Pour la plupart des cibles, le signal est élevé avant la pile
dépasse la limite, il est donc possible de capter le signal sans prendre de spécial
précautions.
Par exemple, si la pile commence à l'adresse absolue MONITORING et pousse vers le bas,
vous pouvez utiliser les drapeaux -fstack-limit-symbol=__stack_limit et
-Wl,--defsym,__stack_limit=0x7ffe0000 pour appliquer une limite de pile de 128 Ko. Noter que
cela ne peut fonctionner qu'avec l'éditeur de liens GNU.
-fsplit-pile
Générez du code pour diviser automatiquement la pile avant qu'elle ne déborde. La résultante
programme a une pile non contiguë qui ne peut déborder que si le programme est incapable de
allouer plus de mémoire. Ceci est très utile lors de l'exécution de programmes threadés, car il
n'est plus nécessaire de calculer une bonne taille de pile à utiliser pour chaque thread. C'est
actuellement implémenté uniquement pour les cibles x86 exécutant GNU/Linux.
Lorsque le code compilé avec -fsplit-pile appelle le code compilé sans -fsplit-pile, Là
peut ne pas y avoir beaucoup d'espace de pile disponible pour que ce dernier code s'exécute. Si vous compilez tous
code, y compris le code de la bibliothèque, avec -fsplit-pile n'est pas une option, alors l'éditeur de liens peut
corriger ces appels afin que le code compilé sans -fsplit-pile a toujours un grand
empiler. La prise en charge de ceci est implémentée dans l'éditeur de liens gold dans la version GNU binutils
2.21 et versions ultérieures.
-fagging-underscore
Cette option et sa contrepartie, -fno-leader-soulignement, changer de force la manière C
les symboles sont représentés dans le fichier objet. Une utilisation est d'aider à établir un lien avec l'héritage
code d'assemblage.
Mise en garde: le -fagging-underscore Le commutateur force GCC à générer du code qui n'est pas
binaire compatible avec le code généré sans ce commutateur. Utilisez-le pour vous conformer à un
interface binaire d'application autre que celle par défaut. Toutes les cibles ne fournissent pas un support complet
pour ce commutateur.
-ftls-modèle=modèle
Modifiez le modèle de stockage thread-local à utiliser. Les modèle l'argument devrait être l'un des
dynamique globale, local-dynamique, exécution initiale or exécutable local. Notez que le choix est
sujet à optimisation : le compilateur peut utiliser un modèle plus efficace pour les symboles non
visible à l'extérieur de l'unité de traduction, ou si -fpic n'est pas donné sur la ligne de commande.
La valeur par défaut sans -fpic is exécution initiale; avec -fpic la valeur par défaut est dynamique globale.
-fvisibilité=[défaut|interne|caché|protégé]
Définissez la visibilité par défaut des symboles d'image ELF sur l'option spécifiée --- tous les symboles sont
marqué avec ceci à moins qu'il ne soit remplacé dans le code. L'utilisation de cette fonction peut très
améliorer considérablement les temps de liaison et de chargement des bibliothèques d'objets partagés, produire plus
code optimisé, fournir une exportation d'API presque parfaite et éviter les conflits de symboles. Il est
fortement recommandé de l'utiliser dans tous les objets partagés que vous distribuez.
Malgré la nomenclature, défaut signifie toujours public; c'est-à-dire disponible pour être lié
contre de l'extérieur de l'objet partagé. protégé et interne sont assez inutiles dans
utilisation dans le monde réel, donc la seule autre option couramment utilisée est caché. La valeur par défaut si
-fvisibilité n'est pas spécifié est défaut, c'est-à-dire rendre chaque symbole public.
Une bonne explication des avantages offerts en s'assurant que les symboles ELF ont le bon
la visibilité est donnée par "How To Write Shared Libraries" d'Ulrich Drepper (qui peut être
trouvé àhttp://www.akkadia.org/drepper/>)---cependant une solution supérieure a fait
possible par cette option de marquer les choses cachées lorsque la valeur par défaut est public est de faire
la valeur par défaut est masquée et marque les choses en public. C'est la norme avec les DLL sous Windows et
avec -fvisibilité=caché et "__attribute__ ((visibility("default")))" au lieu de
"__declspec(dllexport)" vous obtenez une sémantique presque identique avec une syntaxe identique.
C'est une aubaine pour ceux qui travaillent sur des projets multiplateformes.
Pour ceux qui ajoutent la prise en charge de la visibilité au code existant, vous pouvez trouver "#pragma GCC
visibilité" d'utilisation. Cela fonctionne en joignant les déclarations que vous souhaitez définir
visibilité pour avec (par exemple) "#pragma GCC visibilité push(hidden)" et "#pragma
Visibilité GCC pop". Gardez à l'esprit que la visibilité des symboles doit être vue as partie of
le API interface contrat et donc tout nouveau code doit toujours spécifier la visibilité quand
ce n'est pas la valeur par défaut ; c'est-à-dire que les déclarations à utiliser uniquement au sein du GRD local devraient
toujours être marqué explicitement comme masqué afin d'éviter l'indirection PLT
frais généraux --- rendre cela très clair facilite également la lisibilité et l'auto-documentation
du code. Notez qu'en raison des exigences de la spécification ISO C++, "operator new" et
"operator delete" doit toujours avoir une visibilité par défaut.
Sachez que les en-têtes externes à votre projet, en particulier les en-têtes système et
les en-têtes de toute autre bibliothèque que vous utilisez, peuvent ne pas s'attendre à être compilés avec
visibilité autre que la valeur par défaut. Vous devrez peut-être dire explicitement "#pragma GCC
visibilité push (par défaut)" avant d'inclure de tels en-têtes.
les déclarations "externes" ne sont pas affectées par -fvisibilité, donc beaucoup de code peut être
recompilé avec -fvisibilité=caché sans aucune modification. Cependant, cela signifie que
les appels à des fonctions "externes" sans visibilité explicite utilisent le PLT, il est donc plus
efficace d'utiliser "__attribute ((visibilité))" et/ou "#pragma GCC visibilité" pour dire
le compilateur dont les déclarations "externes" doivent être traitées comme masquées.
Notez que -fvisibilité affecte les entités de liaison vagues C++. Cela signifie que, pour
exemple, une classe d'exception qui est levée entre les DSO doit être explicitement marquée
avec une visibilité par défaut afin que le type_info les nœuds sont unifiés entre les DSO.
Un aperçu de ces techniques, de leurs avantages et de la façon de les utiliser est à
<http://gcc.gnu.org/wiki/Visibility>.
-fstrict-volatile-bitfields
Cette option doit être utilisée si les accès à des champs de bits volatiles (ou autre structure
champs, bien que le compilateur honore généralement ces types de toute façon) doit utiliser un seul
accès de la largeur du type de champ, aligné sur un alignement naturel si possible.
Par exemple, les cibles avec des registres périphériques mappés en mémoire peuvent nécessiter tous ces
les accès doivent avoir une largeur de 16 bits ; avec ce drapeau, vous pouvez déclarer tous les champs de bits périphériques
comme "unsigned short" (en supposant que short est de 16 bits sur ces cibles) pour forcer GCC à utiliser
des accès 16 bits au lieu, peut-être, d'un accès 32 bits plus efficace.
Si cette option est désactivée, le compilateur utilise l'instruction la plus efficace. Dans le
exemple précédent, cela pourrait être une instruction de chargement de 32 bits, même si cela accède
octets qui ne contiennent aucune partie du champ de bits ou des registres mappés en mémoire
sans rapport avec celui en cours de mise à jour.
Dans certains cas, comme lorsque l'attribut "packed" est appliqué à un champ de structure, il
peut ne pas être possible d'accéder au champ avec une seule lecture ou écriture qui est correctement
aligné pour la machine cible. Dans ce cas, GCC revient à générer plusieurs
accès plutôt que du code qui mettra en défaut ou tronquera le résultat au moment de l'exécution.
Remarque : En raison des restrictions du modèle de mémoire C/C++11, les accès en écriture ne sont pas autorisés
pour toucher les membres non-bit-field. Il est donc recommandé de définir tous les bits du
le type de champ en tant que membres de champ de bits.
La valeur par défaut de cette option est déterminée par l'interface binaire de l'application pour
le processeur cible.
-fsync-libcalls
Cette option contrôle si une instance hors ligne de la famille "__sync" de
Les fonctions peuvent être utilisées pour implémenter la famille de fonctions C++11 "__atomic".
La valeur par défaut de cette option est activée, donc la seule forme utile de l'option
is -fno-sync-appels-lib. Cette option est utilisée dans la mise en œuvre de la libatomique
bibliothèque d'exécution.
ENVIRONNEMENT
Cette section décrit plusieurs variables d'environnement qui affectent le fonctionnement de GCC. Certains
d'entre eux fonctionnent en spécifiant des répertoires ou des préfixes à utiliser lors de la recherche de différents types
de fichiers. Certains sont utilisés pour spécifier d'autres aspects de l'environnement de compilation.
Notez que vous pouvez également spécifier des lieux de recherche à l'aide d'options telles que -B, -I et -L.
Ceux-ci ont priorité sur les emplacements spécifiés à l'aide de variables d'environnement, qui à leur tour
ont préséance sur celles spécifiées par la configuration de GCC.
LANGUE
LC_CTYPE
LC_MESSAGES
LC_TOUS
Ces variables d'environnement contrôlent la manière dont GCC utilise les informations de localisation
ce qui permet au GCC de travailler avec différentes conventions nationales. GCC inspecte les paramètres régionaux
catégories LC_CTYPE et LC_MESSAGES s'il a été configuré pour le faire. Ces localités
les catégories peuvent être définies sur n'importe quelle valeur prise en charge par votre installation. Une valeur typique est
en_GB.UTF-8 pour l'anglais au Royaume-Uni encodé en UTF-8.
VOTRE LC_CTYPE variable d'environnement spécifie la classification des caractères. GCC l'utilise pour
déterminer les limites des caractères dans une chaîne ; cela est nécessaire pour certains multi-octets
les encodages contenant des guillemets et des caractères d'échappement qui sont autrement interprétés comme un
fin de chaîne ou échappement.
VOTRE LC_MESSAGES variable d'environnement spécifie la langue à utiliser dans le diagnostic
des messages.
Si la LC_TOUS variable d'environnement est définie, elle remplace la valeur de LC_CTYPE et
LC_MESSAGES; autrement, LC_CTYPE et LC_MESSAGES par défaut à la valeur de LANGUE
variable d'environnement. Si aucune de ces variables n'est définie, GCC passe par défaut à traditionnel
C Comportement anglais.
TMPDIR
If TMPDIR est défini, il spécifie le répertoire à utiliser pour les fichiers temporaires. GCC utilise
fichiers temporaires pour contenir la sortie d'une étape de compilation qui doit être utilisée comme
entrée à l'étape suivante : par exemple, la sortie du préprocesseur, qui est le
entrée dans le compilateur proprement dit.
GCC_COMPARE_DEBUG
Paramètres GCC_COMPARE_DEBUG équivaut presque à passer -fcompare-debug à la
pilote du compilateur. Voir la documentation de cette option pour plus de détails.
GCC_EXEC_PREFIX
If GCC_EXEC_PREFIX est défini, il spécifie un préfixe à utiliser dans les noms des
sous-programmes exécutés par le compilateur. Aucune barre oblique n'est ajoutée lorsque ce préfixe est combiné
avec le nom d'un sous-programme, mais vous pouvez spécifier un préfixe qui se termine par une barre oblique si
vous le souhaitez.
If GCC_EXEC_PREFIX n'est pas défini, GCC tente de trouver un préfixe approprié à utiliser
en fonction du chemin d'accès avec lequel il est invoqué.
Si GCC ne peut pas trouver le sous-programme en utilisant le préfixe spécifié, il essaie de chercher dans le
emplacements habituels pour le sous-programme.
La valeur par défaut de GCC_EXEC_PREFIX is préfixe/lib/gcc/ où préfixe est le préfixe de
le compilateur installé. Dans de nombreux cas préfixe est la valeur de "préfixe" lorsque vous avez exécuté le
configurer scripts.
Autres préfixes spécifiés avec -B ont préséance sur ce préfixe.
Ce préfixe est également utilisé pour rechercher des fichiers tels que crt0.o qui sont utilisés pour la liaison.
De plus, le préfixe est utilisé de manière inhabituelle pour trouver les répertoires à rechercher
pour les fichiers d'en-tête. Pour chacun des répertoires standards dont le nom commence normalement
avec /usr/local/lib/gcc (plus précisément, avec la valeur de GCC_INCLUDE_DIR), GCC essaie
remplacer ce qui commence par le préfixe spécifié pour produire un autre répertoire
Nom. Ainsi, avec -Bfoo/, recherches GCC nourriture/bar juste avant qu'il recherche la norme
annuaire /usr/local/lib/bar. Si un répertoire standard commence par le
préfixe alors la valeur de préfixe est remplacé par GCC_EXEC_PREFIX lors de la recherche de l'en-tête
fichiers.
COMPILATEUR_PATH
La valeur de COMPILATEUR_PATH est une liste de répertoires séparés par des deux-points, un peu comme PATH.
GCC essaie les répertoires ainsi spécifiés lors de la recherche de sous-programmes, s'il ne peut pas
trouver les sous-programmes en utilisant GCC_EXEC_PREFIX.
LIBRARY_PATH
La valeur de LIBRARY_PATH est une liste de répertoires séparés par des deux-points, un peu comme PATH.
Lorsqu'il est configuré en compilateur natif, GCC essaie les répertoires ainsi spécifiés lorsque
recherche de fichiers de liens spéciaux, s'il ne les trouve pas en utilisant GCC_EXEC_PREFIX.
La liaison à l'aide de GCC utilise également ces répertoires lors de la recherche de bibliothèques ordinaires
pour -l option (mais les répertoires spécifiés avec -L viens en premier).
LANGUE
Cette variable est utilisée pour transmettre les informations de localisation au compilateur. Une façon dont
ces informations sont utilisées pour déterminer le jeu de caractères à utiliser lorsque le caractère
les littéraux, les chaînes de caractères et les commentaires sont analysés en C et C++. Lorsque le compilateur est
configuré pour autoriser les caractères multi-octets, les valeurs suivantes pour LANGUE
reconnu:
C-JIS
Reconnaître les caractères JIS.
C-SJIS
Reconnaître les caractères SJIS.
C-EUCJP
Reconnaître les caractères EUCJP.
If LANGUE n'est pas défini, ou s'il a une autre valeur, alors le compilateur utilise "mblen"
et "mbtowc" tel que défini par les paramètres régionaux par défaut pour reconnaître et traduire plusieurs octets
caractères.
Certaines variables d'environnement supplémentaires affectent le comportement du préprocesseur.
CPATH
C_INCLUDE_PATH
CPLUS_INCLUDE_PATH
OBJC_INCLUDE_PATH
La valeur de chaque variable est une liste de répertoires séparés par un caractère spécial, beaucoup
comme PATH, dans lequel rechercher les fichiers d'en-tête. Le caractère spécial,
"PATH_SEPARATOR", dépend de la cible et est déterminé au moment de la construction de GCC. Pour Microsoft
Cibles basées sur Windows, il s'agit d'un point-virgule, et pour presque toutes les autres cibles, il s'agit d'un
côlon.
CPATH spécifie une liste de répertoires à rechercher comme si spécifié avec -I, mais
après tous les chemins donnés avec -I options sur la ligne de commande. Cette variable d'environnement
est utilisé quelle que soit la langue en cours de prétraitement.
Les variables d'environnement restantes s'appliquent uniquement lors du prétraitement du
langue indiquée. Chacun spécifie une liste de répertoires à rechercher comme si
spécifié avec -isystème, mais après tous les chemins donnés avec -isystème options sur le
ligne de commande.
Dans toutes ces variables, un élément vide demande au compilateur de rechercher son
directeur de travail. Des éléments vides peuvent apparaître au début ou à la fin d'un chemin. Pour
exemple, si la valeur de CPATH est ":/special/include", qui a le même effet que
-NS. -Je/spécial/inclus.
DEPENDANCES_OUTPUT
Si cette variable est définie, sa valeur spécifie comment afficher les dépendances pour Make based
sur les fichiers d'en-tête non système traités par le compilateur. Les fichiers d'en-tête système sont
ignoré dans la sortie de dépendance.
La valeur de DEPENDANCES_OUTPUT peut être juste un nom de fichier, auquel cas les règles Make
sont écrites dans ce fichier, en devinant le nom cible à partir du nom du fichier source. Ou la
valeur peut avoir la forme filet l'objectif, auquel cas les règles sont écrites dans le fichier filet
en utilisant l'objectif comme nom cible.
En d'autres termes, cette variable d'environnement équivaut à combiner les options -MM
et -MF, avec une option -MT interrupteur aussi.
SUNPRO_DÉPENDANCES
Cette variable est la même que DEPENDANCES_OUTPUT (voir ci-dessus), sauf que le système
les fichiers d'en-tête ne sont pas ignorés, cela implique donc -M plutôt que -MM. Cependant, l'
la dépendance vis-à-vis du fichier d'entrée principal est omise.
Utilisez aarch64-linux-gnu-gcc-5 en ligne en utilisant les services onworks.net